ERC-20
Source Code
Token Contract
Overview
Max Total Supply
100,000,000 APEX
Holders
212 (0.00%)
Transfers
-
-
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
$33,123.31
Circulating Supply Market Cap
$0.00
Other Info
Token Contract (WITH 18 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
| # | Exchange | Pair | Price | 24H Volume | % Volume |
|---|
Contract Name:
APEX
Compiler Version
v0.8.19+commit.7dd6d404
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2024-05-28
*/
// SPDX-License-Identifier: MIT
/*
X: https://x.com/0xApexAI
Website: 0xapex.ai
Medium: https://medium.com/@0xApexAI
LinkTree: https://linktr.ee/0xApexAI
*/
pragma solidity 0.8.19;
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
return msg.data;
}
}
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
abstract contract ERC165 is IERC165 {
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
interface IAccessControl {
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole);
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender);
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender);
function hasRole(bytes32 role, address account) external view returns (bool);
function getRoleAdmin(bytes32 role) external view returns (bytes32);
function grantRole(bytes32 role, address account) external;
function revokeRole(bytes32 role, address account) external;
function renounceRole(bytes32 role, address account) external;
}
library Math {
enum Rounding {
Down,
Up,
Zero
}
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
function average(uint256 a, uint256 b) internal pure returns (uint256) {
return (a & b) + (a ^ b) / 2;
}
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
return a == 0 ? 0 : (a - 1) / b + 1;
}
function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
unchecked {
uint256 prod0;
uint256 prod1;
assembly {
let mm := mulmod(x, y, not(0))
prod0 := mul(x, y)
prod1 := sub(sub(mm, prod0), lt(mm, prod0))
}
if (prod1 == 0) {
return prod0 / denominator;
}
require(denominator > prod1, "Math: mulDiv overflow");
uint256 remainder;
assembly {
remainder := mulmod(x, y, denominator)
prod1 := sub(prod1, gt(remainder, prod0))
prod0 := sub(prod0, remainder)
}
uint256 twos = denominator & (~denominator + 1);
assembly {
denominator := div(denominator, twos)
prod0 := div(prod0, twos)
twos := add(div(sub(0, twos), twos), 1)
}
prod0 |= prod1 * twos;
uint256 inverse = (3 * denominator) ^ 2;
inverse *= 2 - denominator * inverse;
inverse *= 2 - denominator * inverse;
inverse *= 2 - denominator * inverse;
inverse *= 2 - denominator * inverse;
inverse *= 2 - denominator * inverse;
inverse *= 2 - denominator * inverse;
result = prod0 * inverse;
return result;
}
}
function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
uint256 result = mulDiv(x, y, denominator);
if (rounding == Rounding.Up && mulmod(x, y, denominator) > 0) {
result += 1;
}
return result;
}
function sqrt(uint256 a) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 result = 1 << (log2(a) >> 1);
unchecked {
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
return min(result, a / result);
}
}
function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = sqrt(a);
return result + (rounding == Rounding.Up && result * result < a ? 1 : 0);
}
}
function log2(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 128;
}
if (value >> 64 > 0) {
value >>= 64;
result += 64;
}
if (value >> 32 > 0) {
value >>= 32;
result += 32;
}
if (value >> 16 > 0) {
value >>= 16;
result += 16;
}
if (value >> 8 > 0) {
value >>= 8;
result += 8;
}
if (value >> 4 > 0) {
value >>= 4;
result += 4;
}
if (value >> 2 > 0) {
value >>= 2;
result += 2;
}
if (value >> 1 > 0) {
result += 1;
}
}
return result;
}
function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log2(value);
return result + (rounding == Rounding.Up && 1 << result < value ? 1 : 0);
}
}
function log10(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >= 10 ** 64) {
value /= 10 ** 64;
result += 64;
}
if (value >= 10 ** 32) {
value /= 10 ** 32;
result += 32;
}
if (value >= 10 ** 16) {
value /= 10 ** 16;
result += 16;
}
if (value >= 10 ** 8) {
value /= 10 ** 8;
result += 8;
}
if (value >= 10 ** 4) {
value /= 10 ** 4;
result += 4;
}
if (value >= 10 ** 2) {
value /= 10 ** 2;
result += 2;
}
if (value >= 10 ** 1) {
result += 1;
}
}
return result;
}
function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log10(value);
return result + (rounding == Rounding.Up && 10 ** result < value ? 1 : 0);
}
}
function log256(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 16;
}
if (value >> 64 > 0) {
value >>= 64;
result += 8;
}
if (value >> 32 > 0) {
value >>= 32;
result += 4;
}
if (value >> 16 > 0) {
value >>= 16;
result += 2;
}
if (value >> 8 > 0) {
result += 1;
}
}
return result;
}
function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log256(value);
return result + (rounding == Rounding.Up && 1 << (result << 3) < value ? 1 : 0);
}
}
}
library SignedMath {
function max(int256 a, int256 b) internal pure returns (int256) {
return a > b ? a : b;
}
function min(int256 a, int256 b) internal pure returns (int256) {
return a < b ? a : b;
}
function average(int256 a, int256 b) internal pure returns (int256) {
int256 x = (a & b) + ((a ^ b) >> 1);
return x + (int256(uint256(x) >> 255) & (a ^ b));
}
function abs(int256 n) internal pure returns (uint256) {
unchecked {
return uint256(n >= 0 ? n : -n);
}
}
}
library Strings {
bytes16 private constant _SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
function toString(uint256 value) internal pure returns (string memory) {
unchecked {
uint256 length = Math.log10(value) + 1;
string memory buffer = new string(length);
uint256 ptr;
assembly {
ptr := add(buffer, add(32, length))
}
while (true) {
ptr--;
assembly {
mstore8(ptr, byte(mod(value, 10), _SYMBOLS))
}
value /= 10;
if (value == 0) break;
}
return buffer;
}
}
function toString(int256 value) internal pure returns (string memory) {
return string(abi.encodePacked(value < 0 ? "-" : "", toString(SignedMath.abs(value))));
}
function toHexString(uint256 value) internal pure returns (string memory) {
unchecked {
return toHexString(value, Math.log256(value) + 1);
}
}
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
}
function equal(string memory a, string memory b) internal pure returns (bool) {
return keccak256(bytes(a)) == keccak256(bytes(b));
}
}
abstract contract AccessControl is Context, IAccessControl, ERC165 {
struct RoleData {
mapping(address => bool) members;
bytes32 adminRole;
}
mapping(bytes32 => RoleData) private _roles;
bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00;
modifier onlyRole(bytes32 role) {
_checkRole(role);
_;
}
function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
return interfaceId == type(IAccessControl).interfaceId || super.supportsInterface(interfaceId);
}
function hasRole(bytes32 role, address account) public view virtual override returns (bool) {
return _roles[role].members[account];
}
function _checkRole(bytes32 role) internal view virtual {
_checkRole(role, _msgSender());
}
function _checkRole(bytes32 role, address account) internal view virtual {
if (!hasRole(role, account)) {
revert(
string(
abi.encodePacked(
"AccessControl: account ",
Strings.toHexString(account),
" is missing role ",
Strings.toHexString(uint256(role), 32)
)
)
);
}
}
function getRoleAdmin(bytes32 role) public view virtual override returns (bytes32) {
return _roles[role].adminRole;
}
function grantRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
_grantRole(role, account);
}
function revokeRole(bytes32 role, address account) public virtual override onlyRole(getRoleAdmin(role)) {
_revokeRole(role, account);
}
function renounceRole(bytes32 role, address account) public virtual override {
require(account == _msgSender(), "AccessControl: can only renounce roles for self");
_revokeRole(role, account);
}
function _setupRole(bytes32 role, address account) internal virtual {
_grantRole(role, account);
}
function _setRoleAdmin(bytes32 role, bytes32 adminRole) internal virtual {
bytes32 previousAdminRole = getRoleAdmin(role);
_roles[role].adminRole = adminRole;
emit RoleAdminChanged(role, previousAdminRole, adminRole);
}
function _grantRole(bytes32 role, address account) internal virtual {
if (!hasRole(role, account)) {
_roles[role].members[account] = true;
emit RoleGranted(role, account, _msgSender());
}
}
function _revokeRole(bytes32 role, address account) internal virtual {
if (hasRole(role, account)) {
_roles[role].members[account] = false;
emit RoleRevoked(role, account, _msgSender());
}
}
}
interface IERC20 {
function totalSupply() 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
);
}
interface IERC20Metadata is IERC20 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
}
contract ERC20 is Context, IERC20, IERC20Metadata {
mapping(address => uint256) private _balances;
mapping(address => mapping(address => uint256)) private _allowances;
uint256 private _totalSupply;
string private _name;
string private _symbol;
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
function name() public view virtual override returns (string memory) {
return _name;
}
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
function decimals() public view virtual override returns (uint8) {
return 18;
}
function totalSupply() public view virtual override returns (uint256) {
return _totalSupply;
}
function balanceOf(
address account
) public view virtual override returns (uint256) {
return _balances[account];
}
function transfer(
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(_msgSender(), recipient, amount);
return true;
}
function allowance(
address owner,
address spender
) public view virtual override returns (uint256) {
return _allowances[owner][spender];
}
function approve(
address spender,
uint256 amount
) public virtual override returns (bool) {
_approve(_msgSender(), spender, amount);
return true;
}
function transferFrom(
address sender,
address recipient,
uint256 amount
) public virtual override returns (bool) {
_transfer(sender, recipient, amount);
uint256 currentAllowance = _allowances[sender][_msgSender()];
require(
currentAllowance >= amount,
"ERC20: transfer amount exceeds allowance"
);
unchecked {
_approve(sender, _msgSender(), currentAllowance - amount);
}
return true;
}
function increaseAllowance(
address spender,
uint256 addedValue
) public virtual returns (bool) {
_approve(
_msgSender(),
spender,
_allowances[_msgSender()][spender] + addedValue
);
return true;
}
function decreaseAllowance(
address spender,
uint256 subtractedValue
) public virtual returns (bool) {
uint256 currentAllowance = _allowances[_msgSender()][spender];
require(
currentAllowance >= subtractedValue,
"ERC20: decreased allowance below zero"
);
unchecked {
_approve(_msgSender(), spender, currentAllowance - subtractedValue);
}
return true;
}
function _transfer(
address sender,
address recipient,
uint256 amount
) internal virtual {
require(sender != address(0), "ERC20: transfer from the zero address");
require(recipient != address(0), "ERC20: transfer to the zero address");
uint256 senderBalance = _balances[sender];
require(
senderBalance >= amount,
"ERC20: transfer amount exceeds balance"
);
unchecked {
_balances[sender] = senderBalance - amount;
}
_balances[recipient] += amount;
emit Transfer(sender, recipient, amount);
}
function _createInitialSupply(
address account,
uint256 amount
) internal virtual {
require(account != address(0), "ERC20: mint to the zero address");
_totalSupply += amount;
_balances[account] += amount;
emit Transfer(address(0), account, amount);
}
function _approve(
address owner,
address spender,
uint256 amount
) internal virtual {
require(owner != address(0), "ERC20: approve from the zero address");
require(spender != address(0), "ERC20: approve to the zero address");
_allowances[owner][spender] = amount;
emit Approval(owner, spender, amount);
}
}
interface ILpPair {
function sync() external;
}
interface IDexRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint256 amountIn,
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint256 amountOutMin,
address[] calldata path,
address to,
uint256 deadline
) external payable;
function addLiquidityETH(
address token,
uint256 amountTokenDesired,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
)
external
payable
returns (uint256 amountToken, uint256 amountETH, uint256 liquidity);
function getAmountsOut(
uint256 amountIn,
address[] calldata path
) external view returns (uint256[] memory amounts);
function removeLiquidityETH(
address token,
uint256 liquidity,
uint256 amountTokenMin,
uint256 amountETHMin,
address to,
uint256 deadline
) external returns (uint256 amountToken, uint256 amountETH);
}
interface IDexFactory {
function createPair(
address tokenA,
address tokenB
) external returns (address pair);
}
contract APEX is ERC20, AccessControl {
uint256 public maxBuyAmount;
uint256 public maxSellAmount;
uint256 public maxWallet;
IDexRouter public dexRouter;
address public lpPair;
bool private swapping;
uint256 public swapTokensAtAmount;
address public operationsAddress;
uint256 public tradingActiveBlock = 0;
mapping(address => bool) public markedAsSniper;
bytes32 public constant MANAGER_ROLE = keccak256("MANAGER_ROLE");
bytes32 public constant AUTHENTICATOR_ROLE =
keccak256("AUTHENTICATOR_ROLE");
bool public limitsInEffect = true;
bool public tradingActive = false;
bool public swapEnabled = false;
bool public flagSnipersEnabled = true;
mapping(address => uint256) private _holderLastTransferTimestamp;
bool public transferDelayEnabled = true;
uint256 public buyTotalFees;
uint256 public buyOperationsFee;
uint256 public buyLiquidityFee;
uint256 public sellTotalFees;
uint256 public sellOperationsFee;
uint256 public sellLiquidityFee;
uint256 public tokensForOperations;
uint256 public tokensForLiquidity;
mapping(address => bool) private _isExcludedFromFees;
mapping(address => bool) public _isExcludedMaxTransactionAmount;
mapping(address => bool) public automatedMarketMakerPairs;
event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
event EnabledTrading();
event ExcludeFromFees(address indexed account, bool isExcluded);
event UpdatedOperationsAddress(address indexed newWallet);
event MaxTransactionExclusion(address _address, bool excluded);
event OwnerForcedSwapBack(uint256 timestamp);
event CaughtEarlyBuyer(address sniper);
event SwapAndLiquify(
uint256 tokensSwapped,
uint256 ethReceived,
uint256 tokensIntoLiquidity
);
event TransferForeignToken(address token, uint256 amount);
// Modifiers
modifier onlyManager() {
require(hasRole(MANAGER_ROLE, msg.sender), "Not a manager");
_;
}
modifier onlyAuthenticators() {
require(
hasRole(AUTHENTICATOR_ROLE, msg.sender),
"Not an authenticator"
);
_;
}
constructor() payable ERC20("Apex AI", "APEX") {
address newOwner = msg.sender;
_setupRole(MANAGER_ROLE, newOwner); // Assign the manager role to the contract deployer
_setRoleAdmin(AUTHENTICATOR_ROLE, MANAGER_ROLE); // Assign manager as the administrator of the authenticator role
grantRole(AUTHENTICATOR_ROLE, newOwner); // Grant the authenticator role to the contract deployer
uint256 totalSupply = 100 * 1e6 * 1e18;
buyOperationsFee = 10;
buyLiquidityFee = 0;
buyTotalFees = buyOperationsFee + buyLiquidityFee;
sellOperationsFee = 25;
sellLiquidityFee = 0;
sellTotalFees = sellOperationsFee + sellLiquidityFee;
maxBuyAmount = (totalSupply * 1) / 100; // 1%
maxSellAmount = (totalSupply * 1) / 100; // 1%
maxWallet = (totalSupply * 1) / 100; // 1%
swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05 %
operationsAddress = address(msg.sender);
_excludeFromMaxTransaction(newOwner, true);
_excludeFromMaxTransaction(address(this), true);
_excludeFromMaxTransaction(address(0xdead), true);
_excludeFromMaxTransaction(address(operationsAddress), true);
excludeFromFees(newOwner, true);
excludeFromFees(address(this), true);
excludeFromFees(address(0xdead), true);
excludeFromFees(address(operationsAddress), true);
_createInitialSupply(address(this), totalSupply);
}
receive() external payable {}
function addAuthenticator(address _authenticator) external onlyManager {
require(_authenticator != address(0), "Invalid address");
grantRole(AUTHENTICATOR_ROLE, _authenticator);
}
function removeAuthenticator(address _authenticator) external onlyManager {
require(_authenticator != address(0), "Invalid address");
revokeRole(AUTHENTICATOR_ROLE, _authenticator);
}
// disable Transfer delay - cannot be reenabled
function disableTransferDelay() external onlyManager {
transferDelayEnabled = false;
}
function _excludeFromMaxTransaction(
address updAds,
bool isExcluded
) private {
_isExcludedMaxTransactionAmount[updAds] = isExcluded;
emit MaxTransactionExclusion(updAds, isExcluded);
}
function excludeFromMaxTransaction(
address updAds,
bool isEx
) external onlyManager {
if (!isEx) {
require(
updAds != lpPair,
"Cannot remove uniswap pair from max txn"
);
}
_isExcludedMaxTransactionAmount[updAds] = isEx;
}
function _setAutomatedMarketMakerPair(address pair, bool value) private {
automatedMarketMakerPairs[pair] = value;
_excludeFromMaxTransaction(pair, value);
emit SetAutomatedMarketMakerPair(pair, value);
}
function setAutomatedMarketMakerPair(
address pair,
bool value
) external onlyManager {
require(
pair != lpPair,
"The pair cannot be removed from automatedMarketMakerPairs"
);
_setAutomatedMarketMakerPair(pair, value);
emit SetAutomatedMarketMakerPair(pair, value);
}
function updateBuyTax(
uint256 _operationsFee,
uint256 _liquidityFee
) external onlyManager {
buyOperationsFee = _operationsFee;
buyLiquidityFee = _liquidityFee;
buyTotalFees = buyOperationsFee + buyLiquidityFee;
require(buyTotalFees <= 10, "Must keep fees at 10% or less");
}
function updateSellTax(
uint256 _operationsFee,
uint256 _liquidityFee
) external onlyManager {
sellOperationsFee = _operationsFee;
sellLiquidityFee = _liquidityFee;
sellTotalFees = sellOperationsFee + sellLiquidityFee;
require(sellTotalFees <= 10, "Must keep fees at 10% or less");
}
function excludeFromFees(address account, bool excluded) public onlyManager {
_isExcludedFromFees[account] = excluded;
emit ExcludeFromFees(account, excluded);
}
function _transfer(
address from,
address to,
uint256 amount
) internal override {
require(from != address(0), "ERC20: transfer from the zero address");
require(to != address(0), "ERC20: transfer to the zero address");
require(amount > 0, "amount must be greater than 0");
if (!tradingActive) {
require(
_isExcludedFromFees[from] || _isExcludedFromFees[to],
"Trading is not active."
);
} else {
require(
!markedAsSniper[from],
"Snipers cannot transfer tokens"
);
}
if (limitsInEffect) {
if (to != address(0xdead) &&
!_isExcludedFromFees[from] &&
!_isExcludedFromFees[to]
) {
if (transferDelayEnabled) {
if (to != address(dexRouter) && to != address(lpPair)) {
require(
_holderLastTransferTimestamp[tx.origin] <
block.number - 2 &&
_holderLastTransferTimestamp[to] <
block.number - 2,
"_transfer:: Transfer Delay enabled. Try again later."
);
_holderLastTransferTimestamp[tx.origin] = block.number;
_holderLastTransferTimestamp[to] = block.number;
}
}
//when buy
if (
automatedMarketMakerPairs[from] &&
!_isExcludedMaxTransactionAmount[to]
) {
require(
amount <= maxBuyAmount,
"Buy transfer amount exceeds the max buy."
);
require(
amount + balanceOf(to) <= maxWallet,
"Max Wallet Exceeded"
);
}
//when sell
else if (
automatedMarketMakerPairs[to] &&
!_isExcludedMaxTransactionAmount[from]
) {
require(
amount <= maxSellAmount,
"Sell transfer amount exceeds the max sell."
);
} else if (!_isExcludedMaxTransactionAmount[to]) {
require(
amount + balanceOf(to) <= maxWallet,
"Max Wallet Exceeded"
);
}
}
}
uint256 contractTokenBalance = balanceOf(address(this));
bool canSwap = contractTokenBalance >= swapTokensAtAmount;
if (
canSwap && swapEnabled && !swapping && automatedMarketMakerPairs[to]
) {
swapping = true;
swapBack();
swapping = false;
}
bool takeFee = true;
// if any account belongs to _isExcludedFromFee account then remove the fee
if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
takeFee = false;
}
uint256 fees = 0;
// only take fees on buys/sells, do not take on wallet transfers
if (takeFee) {
// on sell
if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
fees = (amount * sellTotalFees) / 100;
tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
tokensForOperations +=
(fees * sellOperationsFee) /
sellTotalFees;
}
// on buy
else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
fees = (amount * buyTotalFees) / 100;
tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
}
if (fees > 0) {
super._transfer(from, address(this), fees);
}
amount -= fees;
}
super._transfer(from, to, amount);
}
function swapTokensForEth(uint256 tokenAmount) private {
// generate the uniswap pair path of token -> weth
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = dexRouter.WETH();
_approve(address(this), address(dexRouter), tokenAmount);
// make the swap
dexRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
tokenAmount,
0, // accept any amount of ETH
path,
address(this),
block.timestamp
);
}
function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
// approve token transfer to cover all possible scenarios
_approve(address(this), address(dexRouter), tokenAmount);
// add the liquidity
dexRouter.addLiquidityETH{value: ethAmount}(
address(this),
tokenAmount,
0, // slippage is unavoidable
0, // slippage is unavoidable
address(0xdead),
block.timestamp
);
}
function swapBack() private {
uint256 contractBalance = balanceOf(address(this));
uint256 totalTokensToSwap = tokensForLiquidity + tokensForOperations;
if (contractBalance == 0 || totalTokensToSwap == 0) {
return;
}
if (contractBalance > swapTokensAtAmount * 15) {
contractBalance = swapTokensAtAmount * 15;
}
bool success;
// Halve the amount of liquidity tokens
uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
totalTokensToSwap /
2;
swapTokensForEth(contractBalance - liquidityTokens);
uint256 ethBalance = address(this).balance;
uint256 ethForLiquidity = ethBalance;
uint256 ethForOperations = (ethBalance * tokensForOperations) /
(totalTokensToSwap - (tokensForLiquidity / 2));
ethForLiquidity -= ethForOperations;
tokensForLiquidity = 0;
tokensForOperations = 0;
if (liquidityTokens > 0 && ethForLiquidity > 0) {
addLiquidity(liquidityTokens, ethForLiquidity);
}
(success, ) = address(operationsAddress).call{
value: address(this).balance
}("");
}
function transferForeignToken(
address _token,
address _to
) external onlyManager returns (bool _sent) {
require(_token != address(0), "_token address cannot be 0");
require(
_token != address(this) || !tradingActive,
"Can't withdraw native tokens while trading is active"
);
uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
_sent = IERC20(_token).transfer(_to, _contractBalance);
emit TransferForeignToken(_token, _contractBalance);
}
function setOperationsAddress(
address _operationsAddress
) external onlyManager {
require(
_operationsAddress != address(0),
"_operationsAddress address cannot be 0"
);
operationsAddress = payable(_operationsAddress);
emit UpdatedOperationsAddress(_operationsAddress);
}
function removeLimits() external onlyManager {
limitsInEffect = false;
}
function restoreLimits() external onlyManager {
limitsInEffect = true;
}
function flagSniper(address wallet) external onlyAuthenticators {
require(
flagSnipersEnabled,
"Flag sniper functionality disabled forever!"
);
require(!markedAsSniper[wallet], "Wallet is already flagged.");
markedAsSniper[wallet] = true;
}
function massFlagSnipers(address[] calldata wallets)
external onlyAuthenticators
{
require(
flagSnipersEnabled,
"Flag sniper functionality disabled forever!"
);
for (uint256 i = 0; i < wallets.length; i++) {
markedAsSniper[wallets[i]] = true;
}
}
function unflagSniper(address wallet) external onlyAuthenticators {
require(markedAsSniper[wallet], "Wallet is already not marked.");
markedAsSniper[wallet] = false;
}
function massUnflagSnipers(address[] calldata wallets)
external onlyAuthenticators
{
for (uint256 i = 0; i < wallets.length; i++) {
markedAsSniper[wallets[i]] = false;
}
}
function disableFlagSnipersForever() external onlyManager {
require(
flagSnipersEnabled,
"Flag sniper functionality already disabled forever!!"
);
flagSnipersEnabled = false;
}
function emergencyETHRecovery() external onlyManager {
bool success;
(success, ) = address(msg.sender).call{value: address(this).balance}(
""
);
}
function prepareLaunch() external onlyManager {
require(!tradingActive, "Trading is already active, cannot relaunch.");
address _dexRouter;
if (block.chainid == 1) {
_dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Uniswap V2
} else if (block.chainid == 11155111) {
_dexRouter = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // ETH: Sepolia
} else if (block.chainid == 56) {
_dexRouter = 0x10ED43C718714eb63d5aA57B78B54704E256024E; // BNB Chain: PCS V2
} else if (block.chainid == 97) {
_dexRouter = 0xD99D1c33F9fC3444f8101754aBC46c52416550D1; // BNB Chain: PCS V2
} else if (block.chainid == 42161) {
_dexRouter = 0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506; // Arbitrum: SushiSwap
} else {
revert("Chain not configured");
}
// initialize router
dexRouter = IDexRouter(_dexRouter);
// create pair
lpPair = IDexFactory(dexRouter.factory()).createPair(
address(this),
dexRouter.WETH()
);
_excludeFromMaxTransaction(address(lpPair), true);
_setAutomatedMarketMakerPair(address(lpPair), true);
_excludeFromMaxTransaction(address(dexRouter), true);
excludeFromFees(address(dexRouter), true);
require(
address(this).balance > 0,
"Must have ETH on contract to launch"
);
require(
balanceOf(address(this)) > 0,
"Must have Tokens on contract to launch"
);
_approve(address(this), address(dexRouter), balanceOf(address(this)));
dexRouter.addLiquidityETH{value: address(this).balance}(
address(this),
balanceOf(address(this)),
0, // slippage is unavoidable
0, // slippage is unavoidable
msg.sender,
block.timestamp
);
}
function enableTrading() external onlyAuthenticators {
require(!tradingActive, "Cannot reenable trading");
tradingActive = true;
swapEnabled = true;
tradingActiveBlock = block.number;
emit EnabledTrading();
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"payable","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":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"sniper","type":"address"}],"name":"CaughtEarlyBuyer","type":"event"},{"anonymous":false,"inputs":[],"name":"EnabledTrading","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_address","type":"address"},{"indexed":false,"internalType":"bool","name":"excluded","type":"bool"}],"name":"MaxTransactionExclusion","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"OwnerForcedSwapBack","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"previousAdminRole","type":"bytes32"},{"indexed":true,"internalType":"bytes32","name":"newAdminRole","type":"bytes32"}],"name":"RoleAdminChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleGranted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bytes32","name":"role","type":"bytes32"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"sender","type":"address"}],"name":"RoleRevoked","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","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"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"TransferForeignToken","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"}],"name":"UpdatedOperationsAddress","type":"event"},{"inputs":[],"name":"AUTHENTICATOR_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MANAGER_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_authenticator","type":"address"}],"name":"addAuthenticator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","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":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableFlagSnipersForever","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"emergencyETHRecovery","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"flagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flagSnipersEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"grantRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"markedAsSniper","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"massFlagSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"wallets","type":"address[]"}],"name":"massUnflagSnipers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"prepareLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_authenticator","type":"address"}],"name":"removeAuthenticator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"renounceRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"restoreLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"name":"revokeRole","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_operationsAddress","type":"address"}],"name":"setOperationsAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","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":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"transferForeignToken","outputs":[{"internalType":"bool","name":"_sent","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"unflagSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_operationsFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6000600d55600f805463ffffffff191663010000011790556011805460ff1916600117905560076080908152664170657820414960c81b60a052610100604052600460c090815263082a08ab60e31b60e05260036200005f83826200086b565b5060046200006e82826200086b565b503391506200008f905060008051602062004448833981519152826200023d565b620000b960008051602062004468833981519152600080516020620044488339815191526200024d565b620000d4600080516020620044688339815191528262000298565b600a6013819055600060148190556a52b7d2dcc80cd2e400000091620000fb91906200094d565b601255601960168190556000601781905562000117916200094d565b60155560646200012982600162000963565b6200013591906200097d565b60065560646200014782600162000963565b6200015391906200097d565b60075560646200016582600162000963565b6200017191906200097d565b6008556127106200018482600562000963565b6200019091906200097d565b600b55600c80546001600160a01b03191633179055620001b2826001620002c6565b620001bf306001620002c6565b620001ce61dead6001620002c6565b600c54620001e7906001600160a01b03166001620002c6565b620001f482600162000329565b6200020130600162000329565b6200021061dead600162000329565b600c5462000229906001600160a01b0316600162000329565b620002353082620003e5565b505062000aa4565b620002498282620004ca565b5050565b600082815260056020526040808220600101805490849055905190918391839186917fbd79b86ffe0ab8e8776151514217cd7cacd52c909f66475c3af44e129f0b00ff9190a4505050565b600082815260056020526040902060010154620002b58162000554565b620002c18383620004ca565b505050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b62000344600080516020620044488339815191523362000563565b620003865760405162461bcd60e51b815260206004820152600d60248201526c2737ba10309036b0b730b3b2b960991b60448201526064015b60405180910390fd5b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b0382166200043d5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200037d565b80600260008282546200045191906200094d565b90915550506001600160a01b03821660009081526020819052604081208054839290620004809084906200094d565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b620004d6828262000563565b620002495760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055620005103390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b62000560813362000590565b50565b60008281526005602090815260408083206001600160a01b038516845290915290205460ff165b92915050565b6200059c828262000563565b6200024957620005ac81620005f4565b620005b983602062000607565b604051602001620005cc929190620009c6565b60408051601f198184030181529082905262461bcd60e51b82526200037d9160040162000a3f565b60606200058a6001600160a01b03831660145b606060006200061883600262000963565b620006259060026200094d565b6001600160401b038111156200063f576200063f620007c7565b6040519080825280601f01601f1916602001820160405280156200066a576020820181803683370190505b509050600360fc1b8160008151811062000688576200068862000a74565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110620006ba57620006ba62000a74565b60200101906001600160f81b031916908160001a9053506000620006e084600262000963565b620006ed9060016200094d565b90505b60018111156200076f576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811062000725576200072562000a74565b1a60f81b8282815181106200073e576200073e62000a74565b60200101906001600160f81b031916908160001a90535060049490941c93620007678162000a8a565b9050620006f0565b508315620007c05760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e7460448201526064016200037d565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007f257607f821691505b6020821081036200081357634e487b7160e01b600052602260045260246000fd5b50919050565b601f821115620002c157600081815260208120601f850160051c81016020861015620008425750805b601f850160051c820191505b8181101562000863578281556001016200084e565b505050505050565b81516001600160401b03811115620008875762000887620007c7565b6200089f81620008988454620007dd565b8462000819565b602080601f831160018114620008d75760008415620008be5750858301515b600019600386901b1c1916600185901b17855562000863565b600085815260208120601f198616915b828110156200090857888601518255948401946001909101908401620008e7565b5085821015620009275787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b634e487b7160e01b600052601160045260246000fd5b808201808211156200058a576200058a62000937565b80820281158282048414176200058a576200058a62000937565b6000826200099b57634e487b7160e01b600052601260045260246000fd5b500490565b60005b83811015620009bd578181015183820152602001620009a3565b50506000910152565b7f416363657373436f6e74726f6c3a206163636f756e742000000000000000000081526000835162000a00816017850160208801620009a0565b7001034b99036b4b9b9b4b733903937b6329607d1b601791840191820152835162000a33816028840160208801620009a0565b01602801949350505050565b602081526000825180602084015262000a60816040850160208701620009a0565b601f01601f19169190910160400192915050565b634e487b7160e01b600052603260045260246000fd5b60008162000a9c5762000a9c62000937565b506000190190565b6139948062000ab46000396000f3fe6080604052600436106103c75760003560e01c80638a8c523c116101f2578063c02466681161010d578063e884f260116100a0578063f11a24d31161006f578063f11a24d314610b20578063f637434214610b36578063f8b45b0514610b4c578063fb002c9714610b6257600080fd5b8063e884f26014610ab3578063ea4cfe1214610ac8578063ec87621c14610ae8578063ee40166e14610b0a57600080fd5b8063d85ba063116100dc578063d85ba06314610a21578063d86c9fec14610a37578063dd62ed3e14610a57578063e2f4560514610a9d57600080fd5b8063c024666814610997578063c44a24dd146109b7578063c876d0b9146109e7578063d547741f14610a0157600080fd5b8063a457c2d711610185578063b62496f511610154578063b62496f514610906578063b65c5e8d14610936578063b79c188614610958578063bbc0c7421461097857600080fd5b8063a457c2d714610891578063a9059cbb146108b1578063af4641ed146108d1578063b38d5ef4146108e657600080fd5b806396c58b7c116101c157806396c58b7c146108325780639a7a23d614610847578063a217fddf14610867578063a28e86d31461087c57600080fd5b80638a8c523c146107c857806391d14854146107dd57806395d89b41146107fd5780639699a82d1461081257600080fd5b80634a62bb65116102e25780636a486a8e11610275578063751039fc11610244578063751039fc1461075d5780637571336a146107725780638366e79a1461079257806388e765ff146107b257600080fd5b80636a486a8e146106e75780636ddd1713146106fd5780636e55c13f1461071d57806370a082311461073d57600080fd5b806357bd8bb3116102b157806357bd8bb31461067a5780635a139dd41461069a57806361b6b94f146106b057806366d602ae146106d157600080fd5b80634a62bb65146106155780634be813e61461062f5780634eaa60011461064f5780634f77f6c01461066457600080fd5b8063248a9ca31161035a57806339509351116103295780633950935114610595578063410b2724146105b5578063452ed4f1146105d5578063499b8394146105f557600080fd5b8063248a9ca3146105075780632f2ff15d14610537578063313ce5671461055957806336568abe1461057557600080fd5b806310d5de531161039657806310d5de531461048257806318160ddd146104b25780631a8145bb146104d157806323b872dd146104e757600080fd5b806301ffc9a7146103d357806306fdde03146104085780630758d9241461042a578063095ea7b31461046257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046132df565b610b78565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610baf565b6040516103ff919061332d565b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b0390911681526020016103ff565b34801561046e57600080fd5b506103f361047d366004613375565b610c41565b34801561048e57600080fd5b506103f361049d3660046133a1565b601b6020526000908152604090205460ff1681565b3480156104be57600080fd5b506002545b6040519081526020016103ff565b3480156104dd57600080fd5b506104c360195481565b3480156104f357600080fd5b506103f36105023660046133be565b610c57565b34801561051357600080fd5b506104c36105223660046133ff565b60009081526005602052604090206001015490565b34801561054357600080fd5b50610557610552366004613418565b610d06565b005b34801561056557600080fd5b50604051601281526020016103ff565b34801561058157600080fd5b50610557610590366004613418565b610d30565b3480156105a157600080fd5b506103f36105b0366004613375565b610dae565b3480156105c157600080fd5b506105576105d03660046133a1565b610dea565b3480156105e157600080fd5b50600a5461044a906001600160a01b031681565b34801561060157600080fd5b506105576106103660046133a1565b610e81565b34801561062157600080fd5b50600f546103f39060ff1681565b34801561063b57600080fd5b5061055761064a366004613448565b610f64565b34801561065b57600080fd5b5061055761100a565b34801561067057600080fd5b506104c360165481565b34801561068657600080fd5b506105576106953660046133a1565b61108b565b3480156106a657600080fd5b506104c360135481565b3480156106bc57600080fd5b50600f546103f3906301000000900460ff1681565b3480156106dd57600080fd5b506104c360075481565b3480156106f357600080fd5b506104c360155481565b34801561070957600080fd5b50600f546103f39062010000900460ff1681565b34801561072957600080fd5b50610557610738366004613448565b611175565b34801561074957600080fd5b506104c36107583660046133a1565b611244565b34801561076957600080fd5b5061055761125f565b34801561077e57600080fd5b5061055761078d3660046134cb565b61129f565b34801561079e57600080fd5b506103f36107ad3660046134f9565b611371565b3480156107be57600080fd5b506104c360065481565b3480156107d457600080fd5b506105576115b4565b3480156107e957600080fd5b506103f36107f8366004613418565b611680565b34801561080957600080fd5b5061041d6116ab565b34801561081e57600080fd5b5061055761082d3660046133a1565b6116ba565b34801561083e57600080fd5b5061055761174e565b34801561085357600080fd5b506105576108623660046134cb565b611c27565b34801561087357600080fd5b506104c3600081565b34801561088857600080fd5b50610557611d25565b34801561089d57600080fd5b506103f36108ac366004613375565b611d68565b3480156108bd57600080fd5b506103f36108cc366004613375565b611e01565b3480156108dd57600080fd5b50610557611e0e565b3480156108f257600080fd5b50610557610901366004613527565b611ec7565b34801561091257600080fd5b506103f36109213660046133a1565b601c6020526000908152604090205460ff1681565b34801561094257600080fd5b506104c360008051602061393f83398151915281565b34801561096457600080fd5b50610557610973366004613527565b611f64565b34801561098457600080fd5b50600f546103f390610100900460ff1681565b3480156109a357600080fd5b506105576109b23660046134cb565b612001565b3480156109c357600080fd5b506103f36109d23660046133a1565b600e6020526000908152604090205460ff1681565b3480156109f357600080fd5b506011546103f39060ff1681565b348015610a0d57600080fd5b50610557610a1c366004613418565b612094565b348015610a2d57600080fd5b506104c360125481565b348015610a4357600080fd5b50610557610a523660046133a1565b6120b9565b348015610a6357600080fd5b506104c3610a723660046134f9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aa957600080fd5b506104c3600b5481565b348015610abf57600080fd5b50610557612176565b348015610ad457600080fd5b50600c5461044a906001600160a01b031681565b348015610af457600080fd5b506104c360008051602061391f83398151915281565b348015610b1657600080fd5b506104c3600d5481565b348015610b2c57600080fd5b506104c360145481565b348015610b4257600080fd5b506104c360175481565b348015610b5857600080fd5b506104c360085481565b348015610b6e57600080fd5b506104c360185481565b60006001600160e01b03198216637965db0b60e01b1480610ba957506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610bbe90613549565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90613549565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4e3384846121b6565b50600192915050565b6000610c648484846122da565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cfb85338584036121b6565b506001949350505050565b600082815260056020526040902060010154610d2181612a97565b610d2b8383612aa1565b505050565b6001600160a01b0381163314610da05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ce5565b610daa8282612b27565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c4e918590610de5908690613599565b6121b6565b610e0260008051602061391f83398151915233611680565b610e1e5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610e665760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282610d06565b50565b610e9960008051602061391f83398151915233611680565b610eb55760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610f1a5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610ce5565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b610f7c60008051602061393f83398151915233611680565b610f985760405162461bcd60e51b8152600401610ce5906135d3565b60005b81811015610d2b576000600e6000858585818110610fbb57610fbb613601565b9050602002016020810190610fd091906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061100281613617565b915050610f9b565b61102260008051602061391f83398151915233611680565b61103e5760405162461bcd60e51b8152600401610ce5906135ac565b604051600090339047908381818185875af1925050503d8060008114611080576040519150601f19603f3d011682016040523d82523d6000602084013e611085565b606091505b50505050565b6110a360008051602061393f83398151915233611680565b6110bf5760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166110e85760405162461bcd60e51b8152600401610ce590613630565b6001600160a01b0381166000908152600e602052604090205460ff16156111515760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b61118d60008051602061393f83398151915233611680565b6111a95760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166111d25760405162461bcd60e51b8152600401610ce590613630565b60005b81811015610d2b576001600e60008585858181106111f5576111f5613601565b905060200201602081019061120a91906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061123c81613617565b9150506111d5565b6001600160a01b031660009081526020819052604090205490565b61127760008051602061391f83398151915233611680565b6112935760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19169055565b6112b760008051602061391f83398151915233611680565b6112d35760405162461bcd60e51b8152600401610ce5906135ac565b8061134657600a546001600160a01b03908116908316036113465760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ce5565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b600061138b60008051602061391f83398151915233611680565b6113a75760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0383166113fd5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ce5565b6001600160a01b0383163014158061141d5750600f54610100900460ff16155b6114865760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ce5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156114cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f1919061367b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115689190613694565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6115cc60008051602061393f83398151915233611680565b6115e85760405162461bcd60e51b8152600401610ce5906135d3565b600f54610100900460ff16156116405760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ce5565b600f805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610bbe90613549565b6116d260008051602061391f83398151915233611680565b6116ee5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0381166117365760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282612094565b61176660008051602061391f83398151915233611680565b6117825760405162461bcd60e51b8152600401610ce5906135ac565b600f54610100900460ff16156117ee5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ce5565b6000466001036118135750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4662aa36a7036118385750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4660380361185b57507310ed43c718714eb63d5aa57b78b54704e256024e6118e1565b4660610361187e575073d99d1c33f9fc3444f8101754abc46c52416550d16118e1565b4661a4b1036118a25750731b02da8cb0d097eb8d57a175b88c7d8b479975066118e1565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610ce5565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561193a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195e91906136b1565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e491906136b1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5591906136b1565b600a80546001600160a01b0319166001600160a01b03929092169182179055611a7f906001612b8e565b600a54611a96906001600160a01b03166001612bf1565b600954611aad906001600160a01b03166001612b8e565b600954611ac4906001600160a01b03166001612001565b60004711611b205760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610ce5565b6000611b2b30611244565b11611b875760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610ce5565b600954611ba29030906001600160a01b0316610de582611244565b6009546001600160a01b031663f305d7194730611bbe81611244565b60008033426040518863ffffffff1660e01b8152600401611be4969594939291906136ce565b60606040518083038185885af1158015611c02573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110859190613709565b611c3f60008051602061391f83398151915233611680565b611c5b5760405162461bcd60e51b8152600401610ce5906135ac565b600a546001600160a01b0390811690831603611cdf5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ce5565b611ce98282612bf1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611d3d60008051602061391f83398151915233611680565b611d595760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611dea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ce5565b611df733858584036121b6565b5060019392505050565b6000610c4e3384846122da565b611e2660008051602061391f83398151915233611680565b611e425760405162461bcd60e51b8152600401610ce5906135ac565b600f546301000000900460ff16611eb85760405162461bcd60e51b815260206004820152603460248201527f466c616720736e697065722066756e6374696f6e616c69747920616c72656164604482015273792064697361626c656420666f7265766572212160601b6064820152608401610ce5565b600f805463ff00000019169055565b611edf60008051602061391f83398151915233611680565b611efb5760405162461bcd60e51b8152600401610ce5906135ac565b60138290556014819055611f0f8183613599565b6012819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b611f7c60008051602061391f83398151915233611680565b611f985760405162461bcd60e51b8152600401610ce5906135ac565b60168290556017819055611fac8183613599565b6015819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b61201960008051602061391f83398151915233611680565b6120355760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000828152600560205260409020600101546120af81612a97565b610d2b8383612b27565b6120d160008051602061393f83398151915233611680565b6120ed5760405162461bcd60e51b8152600401610ce5906135d3565b6001600160a01b0381166000908152600e602052604090205460ff166121555760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b61218e60008051602061391f83398151915233611680565b6121aa5760405162461bcd60e51b8152600401610ce5906135ac565b6011805460ff19169055565b6001600160a01b0383166122185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce5565b6001600160a01b0382166122795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123005760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b0382166123265760405162461bcd60e51b8152600401610ce59061377c565b600081116123765760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ce5565b600f54610100900460ff1661240e576001600160a01b0383166000908152601a602052604090205460ff16806123c457506001600160a01b0382166000908152601a602052604090205460ff165b6124095760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ce5565b612477565b6001600160a01b0383166000908152600e602052604090205460ff16156124775760405162461bcd60e51b815260206004820152601e60248201527f536e69706572732063616e6e6f74207472616e7366657220746f6b656e7300006044820152606401610ce5565b600f5460ff1615612821576001600160a01b03821661dead148015906124b657506001600160a01b0383166000908152601a602052604090205460ff16155b80156124db57506001600160a01b0382166000908152601a602052604090205460ff16155b156128215760115460ff16156125f4576009546001600160a01b038381169116148015906125175750600a546001600160a01b03838116911614155b156125f4576125276002436137bf565b32600090815260106020526040902054108015612565575061254a6002436137bf565b6001600160a01b038316600090815260106020526040902054105b6125cf5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ce5565b3260009081526010602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601c602052604090205460ff16801561263557506001600160a01b0382166000908152601b602052604090205460ff16155b156126fc5760065481111561269d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ce5565b6008546126a983611244565b6126b39083613599565b11156126f75760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b612821565b6001600160a01b0382166000908152601c602052604090205460ff16801561273d57506001600160a01b0383166000908152601b602052604090205460ff16155b156127a7576007548111156126f75760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ce5565b6001600160a01b0382166000908152601b602052604090205460ff16612821576008546127d383611244565b6127dd9083613599565b11156128215760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b600061282c30611244565b600b549091508110801590819061284b5750600f5462010000900460ff165b80156128615750600a54600160a01b900460ff16155b801561288557506001600160a01b0384166000908152601c602052604090205460ff165b156128b357600a805460ff60a01b1916600160a01b1790556128a5612c1f565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601a602052604090205460019060ff16806128f557506001600160a01b0385166000908152601a602052604090205460ff165b156128fe575060005b60008115612a83576001600160a01b0386166000908152601c602052604090205460ff16801561293057506000601554115b156129b85760646015548661294591906137d2565b61294f91906137e9565b90506015546017548261296291906137d2565b61296c91906137e9565b6019600082825461297d9190613599565b909155505060155460165461299290836137d2565b61299c91906137e9565b601860008282546129ad9190613599565b90915550612a659050565b6001600160a01b0387166000908152601c602052604090205460ff1680156129e257506000601254115b15612a65576064601254866129f791906137d2565b612a0191906137e9565b905060125460145482612a1491906137d2565b612a1e91906137e9565b60196000828254612a2f9190613599565b9091555050601254601354612a4490836137d2565b612a4e91906137e9565b60186000828254612a5f9190613599565b90915550505b8015612a7657612a76873083612d81565b612a8081866137bf565b94505b612a8e878787612d81565b50505050505050565b610e7e8133612ed6565b612aab8282611680565b610daa5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ae33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612b318282611680565b15610daa5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601c60205260409020805460ff1916821515179055611ce98282612b8e565b6000612c2a30611244565b90506000601854601954612c3e9190613599565b9050811580612c4b575080155b15612c54575050565b600b54612c6290600f6137d2565b821115612c7a57600b54612c7790600f6137d2565b91505b60008060028360195486612c8e91906137d2565b612c9891906137e9565b612ca291906137e9565b9050612cb6612cb182866137bf565b612f2f565b60195447908190600090612ccc906002906137e9565b612cd690876137bf565b601854612ce390856137d2565b612ced91906137e9565b9050612cf981836137bf565b6000601981905560185591508315801590612d145750600082115b15612d2357612d238483613089565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612d70576040519150601f19603f3d011682016040523d82523d6000602084013e612d75565b606091505b50505050505050505050565b6001600160a01b038316612da75760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b038216612dcd5760405162461bcd60e51b8152600401610ce59061377c565b6001600160a01b03831660009081526020819052604090205481811015612e455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ce5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e7c908490613599565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ec891815260200190565b60405180910390a350505050565b612ee08282611680565b610daa57612eed8161312a565b612ef883602061313c565b604051602001612f0992919061380b565b60408051601f198184030181529082905262461bcd60e51b8252610ce59160040161332d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f6457612f64613601565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe191906136b1565b81600181518110612ff457612ff4613601565b6001600160a01b03928316602091820292909201015260095461301a91309116846121b6565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613053908590600090869030904290600401613896565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b6009546130a19030906001600160a01b0316846121b6565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906130e09030908790600090819061dead9042906004016136ce565b60606040518083038185885af11580156130fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131239190613709565b5050505050565b6060610ba96001600160a01b03831660145b6060600061314b8360026137d2565b613156906002613599565b67ffffffffffffffff81111561316e5761316e613880565b6040519080825280601f01601f191660200182016040528015613198576020820181803683370190505b509050600360fc1b816000815181106131b3576131b3613601565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131e2576131e2613601565b60200101906001600160f81b031916908160001a90535060006132068460026137d2565b613211906001613599565b90505b6001811115613289576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061324557613245613601565b1a60f81b82828151811061325b5761325b613601565b60200101906001600160f81b031916908160001a90535060049490941c9361328281613907565b9050613214565b5083156132d85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ce5565b9392505050565b6000602082840312156132f157600080fd5b81356001600160e01b0319811681146132d857600080fd5b60005b8381101561332457818101518382015260200161330c565b50506000910152565b602081526000825180602084015261334c816040850160208701613309565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610e7e57600080fd5b6000806040838503121561338857600080fd5b823561339381613360565b946020939093013593505050565b6000602082840312156133b357600080fd5b81356132d881613360565b6000806000606084860312156133d357600080fd5b83356133de81613360565b925060208401356133ee81613360565b929592945050506040919091013590565b60006020828403121561341157600080fd5b5035919050565b6000806040838503121561342b57600080fd5b82359150602083013561343d81613360565b809150509250929050565b6000806020838503121561345b57600080fd5b823567ffffffffffffffff8082111561347357600080fd5b818501915085601f83011261348757600080fd5b81358181111561349657600080fd5b8660208260051b85010111156134ab57600080fd5b60209290920196919550909350505050565b8015158114610e7e57600080fd5b600080604083850312156134de57600080fd5b82356134e981613360565b9150602083013561343d816134bd565b6000806040838503121561350c57600080fd5b823561351781613360565b9150602083013561343d81613360565b6000806040838503121561353a57600080fd5b50508035926020909101359150565b600181811c9082168061355d57607f821691505b60208210810361357d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ba957610ba9613583565b6020808252600d908201526c2737ba10309036b0b730b3b2b960991b604082015260600190565b6020808252601490820152732737ba1030b71030baba3432b73a34b1b0ba37b960611b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161362957613629613583565b5060010190565b6020808252602b908201527f466c616720736e697065722066756e6374696f6e616c6974792064697361626c60408201526a656420666f72657665722160a81b606082015260800190565b60006020828403121561368d57600080fd5b5051919050565b6000602082840312156136a657600080fd5b81516132d8816134bd565b6000602082840312156136c357600080fd5b81516132d881613360565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561371e57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba957610ba9613583565b8082028115828204841417610ba957610ba9613583565b60008261380657634e487b7160e01b600052601260045260246000fd5b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613843816017850160208801613309565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613874816028840160208801613309565b01602801949350505050565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e65784516001600160a01b0316835293830193918301916001016138c1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008161391657613916613583565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081a26469706673582212200504abfa6d3dd714f0e43afe1cdc7c1b63ef7d2162ed952a52d5021cafc91a3f64736f6c63430008130033241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081
Deployed Bytecode
0x6080604052600436106103c75760003560e01c80638a8c523c116101f2578063c02466681161010d578063e884f260116100a0578063f11a24d31161006f578063f11a24d314610b20578063f637434214610b36578063f8b45b0514610b4c578063fb002c9714610b6257600080fd5b8063e884f26014610ab3578063ea4cfe1214610ac8578063ec87621c14610ae8578063ee40166e14610b0a57600080fd5b8063d85ba063116100dc578063d85ba06314610a21578063d86c9fec14610a37578063dd62ed3e14610a57578063e2f4560514610a9d57600080fd5b8063c024666814610997578063c44a24dd146109b7578063c876d0b9146109e7578063d547741f14610a0157600080fd5b8063a457c2d711610185578063b62496f511610154578063b62496f514610906578063b65c5e8d14610936578063b79c188614610958578063bbc0c7421461097857600080fd5b8063a457c2d714610891578063a9059cbb146108b1578063af4641ed146108d1578063b38d5ef4146108e657600080fd5b806396c58b7c116101c157806396c58b7c146108325780639a7a23d614610847578063a217fddf14610867578063a28e86d31461087c57600080fd5b80638a8c523c146107c857806391d14854146107dd57806395d89b41146107fd5780639699a82d1461081257600080fd5b80634a62bb65116102e25780636a486a8e11610275578063751039fc11610244578063751039fc1461075d5780637571336a146107725780638366e79a1461079257806388e765ff146107b257600080fd5b80636a486a8e146106e75780636ddd1713146106fd5780636e55c13f1461071d57806370a082311461073d57600080fd5b806357bd8bb3116102b157806357bd8bb31461067a5780635a139dd41461069a57806361b6b94f146106b057806366d602ae146106d157600080fd5b80634a62bb65146106155780634be813e61461062f5780634eaa60011461064f5780634f77f6c01461066457600080fd5b8063248a9ca31161035a57806339509351116103295780633950935114610595578063410b2724146105b5578063452ed4f1146105d5578063499b8394146105f557600080fd5b8063248a9ca3146105075780632f2ff15d14610537578063313ce5671461055957806336568abe1461057557600080fd5b806310d5de531161039657806310d5de531461048257806318160ddd146104b25780631a8145bb146104d157806323b872dd146104e757600080fd5b806301ffc9a7146103d357806306fdde03146104085780630758d9241461042a578063095ea7b31461046257600080fd5b366103ce57005b600080fd5b3480156103df57600080fd5b506103f36103ee3660046132df565b610b78565b60405190151581526020015b60405180910390f35b34801561041457600080fd5b5061041d610baf565b6040516103ff919061332d565b34801561043657600080fd5b5060095461044a906001600160a01b031681565b6040516001600160a01b0390911681526020016103ff565b34801561046e57600080fd5b506103f361047d366004613375565b610c41565b34801561048e57600080fd5b506103f361049d3660046133a1565b601b6020526000908152604090205460ff1681565b3480156104be57600080fd5b506002545b6040519081526020016103ff565b3480156104dd57600080fd5b506104c360195481565b3480156104f357600080fd5b506103f36105023660046133be565b610c57565b34801561051357600080fd5b506104c36105223660046133ff565b60009081526005602052604090206001015490565b34801561054357600080fd5b50610557610552366004613418565b610d06565b005b34801561056557600080fd5b50604051601281526020016103ff565b34801561058157600080fd5b50610557610590366004613418565b610d30565b3480156105a157600080fd5b506103f36105b0366004613375565b610dae565b3480156105c157600080fd5b506105576105d03660046133a1565b610dea565b3480156105e157600080fd5b50600a5461044a906001600160a01b031681565b34801561060157600080fd5b506105576106103660046133a1565b610e81565b34801561062157600080fd5b50600f546103f39060ff1681565b34801561063b57600080fd5b5061055761064a366004613448565b610f64565b34801561065b57600080fd5b5061055761100a565b34801561067057600080fd5b506104c360165481565b34801561068657600080fd5b506105576106953660046133a1565b61108b565b3480156106a657600080fd5b506104c360135481565b3480156106bc57600080fd5b50600f546103f3906301000000900460ff1681565b3480156106dd57600080fd5b506104c360075481565b3480156106f357600080fd5b506104c360155481565b34801561070957600080fd5b50600f546103f39062010000900460ff1681565b34801561072957600080fd5b50610557610738366004613448565b611175565b34801561074957600080fd5b506104c36107583660046133a1565b611244565b34801561076957600080fd5b5061055761125f565b34801561077e57600080fd5b5061055761078d3660046134cb565b61129f565b34801561079e57600080fd5b506103f36107ad3660046134f9565b611371565b3480156107be57600080fd5b506104c360065481565b3480156107d457600080fd5b506105576115b4565b3480156107e957600080fd5b506103f36107f8366004613418565b611680565b34801561080957600080fd5b5061041d6116ab565b34801561081e57600080fd5b5061055761082d3660046133a1565b6116ba565b34801561083e57600080fd5b5061055761174e565b34801561085357600080fd5b506105576108623660046134cb565b611c27565b34801561087357600080fd5b506104c3600081565b34801561088857600080fd5b50610557611d25565b34801561089d57600080fd5b506103f36108ac366004613375565b611d68565b3480156108bd57600080fd5b506103f36108cc366004613375565b611e01565b3480156108dd57600080fd5b50610557611e0e565b3480156108f257600080fd5b50610557610901366004613527565b611ec7565b34801561091257600080fd5b506103f36109213660046133a1565b601c6020526000908152604090205460ff1681565b34801561094257600080fd5b506104c360008051602061393f83398151915281565b34801561096457600080fd5b50610557610973366004613527565b611f64565b34801561098457600080fd5b50600f546103f390610100900460ff1681565b3480156109a357600080fd5b506105576109b23660046134cb565b612001565b3480156109c357600080fd5b506103f36109d23660046133a1565b600e6020526000908152604090205460ff1681565b3480156109f357600080fd5b506011546103f39060ff1681565b348015610a0d57600080fd5b50610557610a1c366004613418565b612094565b348015610a2d57600080fd5b506104c360125481565b348015610a4357600080fd5b50610557610a523660046133a1565b6120b9565b348015610a6357600080fd5b506104c3610a723660046134f9565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610aa957600080fd5b506104c3600b5481565b348015610abf57600080fd5b50610557612176565b348015610ad457600080fd5b50600c5461044a906001600160a01b031681565b348015610af457600080fd5b506104c360008051602061391f83398151915281565b348015610b1657600080fd5b506104c3600d5481565b348015610b2c57600080fd5b506104c360145481565b348015610b4257600080fd5b506104c360175481565b348015610b5857600080fd5b506104c360085481565b348015610b6e57600080fd5b506104c360185481565b60006001600160e01b03198216637965db0b60e01b1480610ba957506301ffc9a760e01b6001600160e01b03198316145b92915050565b606060038054610bbe90613549565b80601f0160208091040260200160405190810160405280929190818152602001828054610bea90613549565b8015610c375780601f10610c0c57610100808354040283529160200191610c37565b820191906000526020600020905b815481529060010190602001808311610c1a57829003601f168201915b5050505050905090565b6000610c4e3384846121b6565b50600192915050565b6000610c648484846122da565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610cee5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610cfb85338584036121b6565b506001949350505050565b600082815260056020526040902060010154610d2181612a97565b610d2b8383612aa1565b505050565b6001600160a01b0381163314610da05760405162461bcd60e51b815260206004820152602f60248201527f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560448201526e103937b632b9903337b91039b2b63360891b6064820152608401610ce5565b610daa8282612b27565b5050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610c4e918590610de5908690613599565b6121b6565b610e0260008051602061391f83398151915233611680565b610e1e5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610e665760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282610d06565b50565b610e9960008051602061391f83398151915233611680565b610eb55760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b038116610f1a5760405162461bcd60e51b815260206004820152602660248201527f5f6f7065726174696f6e734164647265737320616464726573732063616e6e6f60448201526507420626520360d41b6064820152608401610ce5565b600c80546001600160a01b0319166001600160a01b0383169081179091556040517f4efa56652237561d0f1fd31311aeaaa41f3b754a461545ed3cf6ced5876d298290600090a250565b610f7c60008051602061393f83398151915233611680565b610f985760405162461bcd60e51b8152600401610ce5906135d3565b60005b81811015610d2b576000600e6000858585818110610fbb57610fbb613601565b9050602002016020810190610fd091906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061100281613617565b915050610f9b565b61102260008051602061391f83398151915233611680565b61103e5760405162461bcd60e51b8152600401610ce5906135ac565b604051600090339047908381818185875af1925050503d8060008114611080576040519150601f19603f3d011682016040523d82523d6000602084013e611085565b606091505b50505050565b6110a360008051602061393f83398151915233611680565b6110bf5760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166110e85760405162461bcd60e51b8152600401610ce590613630565b6001600160a01b0381166000908152600e602052604090205460ff16156111515760405162461bcd60e51b815260206004820152601a60248201527f57616c6c657420697320616c726561647920666c61676765642e0000000000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19166001179055565b61118d60008051602061393f83398151915233611680565b6111a95760405162461bcd60e51b8152600401610ce5906135d3565b600f546301000000900460ff166111d25760405162461bcd60e51b8152600401610ce590613630565b60005b81811015610d2b576001600e60008585858181106111f5576111f5613601565b905060200201602081019061120a91906133a1565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558061123c81613617565b9150506111d5565b6001600160a01b031660009081526020819052604090205490565b61127760008051602061391f83398151915233611680565b6112935760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19169055565b6112b760008051602061391f83398151915233611680565b6112d35760405162461bcd60e51b8152600401610ce5906135ac565b8061134657600a546001600160a01b03908116908316036113465760405162461bcd60e51b815260206004820152602760248201527f43616e6e6f742072656d6f766520756e697377617020706169722066726f6d2060448201526636b0bc103a3c3760c91b6064820152608401610ce5565b6001600160a01b03919091166000908152601b60205260409020805460ff1916911515919091179055565b600061138b60008051602061391f83398151915233611680565b6113a75760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0383166113fd5760405162461bcd60e51b815260206004820152601a60248201527f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000006044820152606401610ce5565b6001600160a01b0383163014158061141d5750600f54610100900460ff16155b6114865760405162461bcd60e51b815260206004820152603460248201527f43616e2774207769746864726177206e617469766520746f6b656e73207768696044820152736c652074726164696e672069732061637469766560601b6064820152608401610ce5565b6040516370a0823160e01b81523060048201526000906001600160a01b038516906370a0823190602401602060405180830381865afa1580156114cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114f1919061367b565b60405163a9059cbb60e01b81526001600160a01b038581166004830152602482018390529192509085169063a9059cbb906044016020604051808303816000875af1158015611544573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115689190613694565b604080516001600160a01b0387168152602081018490529193507fdeda980967fcead7b61e78ac46a4da14274af29e894d4d61e8b81ec38ab3e438910160405180910390a15092915050565b6115cc60008051602061393f83398151915233611680565b6115e85760405162461bcd60e51b8152600401610ce5906135d3565b600f54610100900460ff16156116405760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207265656e61626c652074726164696e670000000000000000006044820152606401610ce5565b600f805462ffff0019166201010017905543600d556040517fa56feb2d31b9a7424db0be063fd450863979c9e2382cf5110f869bd1ad361bb790600090a1565b60009182526005602090815260408084206001600160a01b0393909316845291905290205460ff1690565b606060048054610bbe90613549565b6116d260008051602061391f83398151915233611680565b6116ee5760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0381166117365760405162461bcd60e51b815260206004820152600f60248201526e496e76616c6964206164647265737360881b6044820152606401610ce5565b610e7e60008051602061393f83398151915282612094565b61176660008051602061391f83398151915233611680565b6117825760405162461bcd60e51b8152600401610ce5906135ac565b600f54610100900460ff16156117ee5760405162461bcd60e51b815260206004820152602b60248201527f54726164696e6720697320616c7265616479206163746976652c2063616e6e6f60448201526a3a103932b630bab731b41760a91b6064820152608401610ce5565b6000466001036118135750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4662aa36a7036118385750737a250d5630b4cf539739df2c5dacb4c659f2488d6118e1565b4660380361185b57507310ed43c718714eb63d5aa57b78b54704e256024e6118e1565b4660610361187e575073d99d1c33f9fc3444f8101754abc46c52416550d16118e1565b4661a4b1036118a25750731b02da8cb0d097eb8d57a175b88c7d8b479975066118e1565b60405162461bcd60e51b815260206004820152601460248201527310da185a5b881b9bdd0818dbdb999a59dd5c995960621b6044820152606401610ce5565b600980546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa15801561193a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061195e91906136b1565b6001600160a01b031663c9c6539630600960009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e491906136b1565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611a31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a5591906136b1565b600a80546001600160a01b0319166001600160a01b03929092169182179055611a7f906001612b8e565b600a54611a96906001600160a01b03166001612bf1565b600954611aad906001600160a01b03166001612b8e565b600954611ac4906001600160a01b03166001612001565b60004711611b205760405162461bcd60e51b815260206004820152602360248201527f4d757374206861766520455448206f6e20636f6e747261637420746f206c61756044820152620dcc6d60eb1b6064820152608401610ce5565b6000611b2b30611244565b11611b875760405162461bcd60e51b815260206004820152602660248201527f4d757374206861766520546f6b656e73206f6e20636f6e747261637420746f206044820152650d8c2eadcc6d60d31b6064820152608401610ce5565b600954611ba29030906001600160a01b0316610de582611244565b6009546001600160a01b031663f305d7194730611bbe81611244565b60008033426040518863ffffffff1660e01b8152600401611be4969594939291906136ce565b60606040518083038185885af1158015611c02573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906110859190613709565b611c3f60008051602061391f83398151915233611680565b611c5b5760405162461bcd60e51b8152600401610ce5906135ac565b600a546001600160a01b0390811690831603611cdf5760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610ce5565b611ce98282612bf1565b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b611d3d60008051602061391f83398151915233611680565b611d595760405162461bcd60e51b8152600401610ce5906135ac565b600f805460ff19166001179055565b3360009081526001602090815260408083206001600160a01b038616845290915281205482811015611dea5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ce5565b611df733858584036121b6565b5060019392505050565b6000610c4e3384846122da565b611e2660008051602061391f83398151915233611680565b611e425760405162461bcd60e51b8152600401610ce5906135ac565b600f546301000000900460ff16611eb85760405162461bcd60e51b815260206004820152603460248201527f466c616720736e697065722066756e6374696f6e616c69747920616c72656164604482015273792064697361626c656420666f7265766572212160601b6064820152608401610ce5565b600f805463ff00000019169055565b611edf60008051602061391f83398151915233611680565b611efb5760405162461bcd60e51b8152600401610ce5906135ac565b60138290556014819055611f0f8183613599565b6012819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b611f7c60008051602061391f83398151915233611680565b611f985760405162461bcd60e51b8152600401610ce5906135ac565b60168290556017819055611fac8183613599565b6015819055600a1015610daa5760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420313025206f72206c6573730000006044820152606401610ce5565b61201960008051602061391f83398151915233611680565b6120355760405162461bcd60e51b8152600401610ce5906135ac565b6001600160a01b0382166000818152601a6020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6000828152600560205260409020600101546120af81612a97565b610d2b8383612b27565b6120d160008051602061393f83398151915233611680565b6120ed5760405162461bcd60e51b8152600401610ce5906135d3565b6001600160a01b0381166000908152600e602052604090205460ff166121555760405162461bcd60e51b815260206004820152601d60248201527f57616c6c657420697320616c7265616479206e6f74206d61726b65642e0000006044820152606401610ce5565b6001600160a01b03166000908152600e60205260409020805460ff19169055565b61218e60008051602061391f83398151915233611680565b6121aa5760405162461bcd60e51b8152600401610ce5906135ac565b6011805460ff19169055565b6001600160a01b0383166122185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ce5565b6001600160a01b0382166122795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ce5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166123005760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b0382166123265760405162461bcd60e51b8152600401610ce59061377c565b600081116123765760405162461bcd60e51b815260206004820152601d60248201527f616d6f756e74206d7573742062652067726561746572207468616e20300000006044820152606401610ce5565b600f54610100900460ff1661240e576001600160a01b0383166000908152601a602052604090205460ff16806123c457506001600160a01b0382166000908152601a602052604090205460ff165b6124095760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ce5565b612477565b6001600160a01b0383166000908152600e602052604090205460ff16156124775760405162461bcd60e51b815260206004820152601e60248201527f536e69706572732063616e6e6f74207472616e7366657220746f6b656e7300006044820152606401610ce5565b600f5460ff1615612821576001600160a01b03821661dead148015906124b657506001600160a01b0383166000908152601a602052604090205460ff16155b80156124db57506001600160a01b0382166000908152601a602052604090205460ff16155b156128215760115460ff16156125f4576009546001600160a01b038381169116148015906125175750600a546001600160a01b03838116911614155b156125f4576125276002436137bf565b32600090815260106020526040902054108015612565575061254a6002436137bf565b6001600160a01b038316600090815260106020526040902054105b6125cf5760405162461bcd60e51b815260206004820152603560248201527f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60448201527432b21710102a393c9030b3b0b4b7103630ba32b91760591b6064820152608401610ce5565b3260009081526010602052604080822043908190556001600160a01b03851683529120555b6001600160a01b0383166000908152601c602052604090205460ff16801561263557506001600160a01b0382166000908152601b602052604090205460ff16155b156126fc5760065481111561269d5760405162461bcd60e51b815260206004820152602860248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201526736b0bc10313abc9760c11b6064820152608401610ce5565b6008546126a983611244565b6126b39083613599565b11156126f75760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b612821565b6001600160a01b0382166000908152601c602052604090205460ff16801561273d57506001600160a01b0383166000908152601b602052604090205460ff16155b156127a7576007548111156126f75760405162461bcd60e51b815260206004820152602a60248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152691036b0bc1039b2b6361760b11b6064820152608401610ce5565b6001600160a01b0382166000908152601b602052604090205460ff16612821576008546127d383611244565b6127dd9083613599565b11156128215760405162461bcd60e51b815260206004820152601360248201527213585e0815d85b1b195d08115e18d959591959606a1b6044820152606401610ce5565b600061282c30611244565b600b549091508110801590819061284b5750600f5462010000900460ff165b80156128615750600a54600160a01b900460ff16155b801561288557506001600160a01b0384166000908152601c602052604090205460ff165b156128b357600a805460ff60a01b1916600160a01b1790556128a5612c1f565b600a805460ff60a01b191690555b6001600160a01b0385166000908152601a602052604090205460019060ff16806128f557506001600160a01b0385166000908152601a602052604090205460ff165b156128fe575060005b60008115612a83576001600160a01b0386166000908152601c602052604090205460ff16801561293057506000601554115b156129b85760646015548661294591906137d2565b61294f91906137e9565b90506015546017548261296291906137d2565b61296c91906137e9565b6019600082825461297d9190613599565b909155505060155460165461299290836137d2565b61299c91906137e9565b601860008282546129ad9190613599565b90915550612a659050565b6001600160a01b0387166000908152601c602052604090205460ff1680156129e257506000601254115b15612a65576064601254866129f791906137d2565b612a0191906137e9565b905060125460145482612a1491906137d2565b612a1e91906137e9565b60196000828254612a2f9190613599565b9091555050601254601354612a4490836137d2565b612a4e91906137e9565b60186000828254612a5f9190613599565b90915550505b8015612a7657612a76873083612d81565b612a8081866137bf565b94505b612a8e878787612d81565b50505050505050565b610e7e8133612ed6565b612aab8282611680565b610daa5760008281526005602090815260408083206001600160a01b03851684529091529020805460ff19166001179055612ae33390565b6001600160a01b0316816001600160a01b0316837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45050565b612b318282611680565b15610daa5760008281526005602090815260408083206001600160a01b0385168085529252808320805460ff1916905551339285917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45050565b6001600160a01b0382166000818152601b6020908152604091829020805460ff19168515159081179091558251938452908301527f6b4f1be9103e6cbcd38ca4a922334f2c3109b260130a6676a987f94088fd6746910160405180910390a15050565b6001600160a01b0382166000908152601c60205260409020805460ff1916821515179055611ce98282612b8e565b6000612c2a30611244565b90506000601854601954612c3e9190613599565b9050811580612c4b575080155b15612c54575050565b600b54612c6290600f6137d2565b821115612c7a57600b54612c7790600f6137d2565b91505b60008060028360195486612c8e91906137d2565b612c9891906137e9565b612ca291906137e9565b9050612cb6612cb182866137bf565b612f2f565b60195447908190600090612ccc906002906137e9565b612cd690876137bf565b601854612ce390856137d2565b612ced91906137e9565b9050612cf981836137bf565b6000601981905560185591508315801590612d145750600082115b15612d2357612d238483613089565b600c546040516001600160a01b03909116904790600081818185875af1925050503d8060008114612d70576040519150601f19603f3d011682016040523d82523d6000602084013e612d75565b606091505b50505050505050505050565b6001600160a01b038316612da75760405162461bcd60e51b8152600401610ce590613737565b6001600160a01b038216612dcd5760405162461bcd60e51b8152600401610ce59061377c565b6001600160a01b03831660009081526020819052604090205481811015612e455760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ce5565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290612e7c908490613599565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051612ec891815260200190565b60405180910390a350505050565b612ee08282611680565b610daa57612eed8161312a565b612ef883602061313c565b604051602001612f0992919061380b565b60408051601f198184030181529082905262461bcd60e51b8252610ce59160040161332d565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110612f6457612f64613601565b6001600160a01b03928316602091820292909201810191909152600954604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015612fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe191906136b1565b81600181518110612ff457612ff4613601565b6001600160a01b03928316602091820292909201015260095461301a91309116846121b6565b60095460405163791ac94760e01b81526001600160a01b039091169063791ac94790613053908590600090869030904290600401613896565b600060405180830381600087803b15801561306d57600080fd5b505af1158015613081573d6000803e3d6000fd5b505050505050565b6009546130a19030906001600160a01b0316846121b6565b60095460405163f305d71960e01b81526001600160a01b039091169063f305d7199083906130e09030908790600090819061dead9042906004016136ce565b60606040518083038185885af11580156130fe573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906131239190613709565b5050505050565b6060610ba96001600160a01b03831660145b6060600061314b8360026137d2565b613156906002613599565b67ffffffffffffffff81111561316e5761316e613880565b6040519080825280601f01601f191660200182016040528015613198576020820181803683370190505b509050600360fc1b816000815181106131b3576131b3613601565b60200101906001600160f81b031916908160001a905350600f60fb1b816001815181106131e2576131e2613601565b60200101906001600160f81b031916908160001a90535060006132068460026137d2565b613211906001613599565b90505b6001811115613289576f181899199a1a9b1b9c1cb0b131b232b360811b85600f166010811061324557613245613601565b1a60f81b82828151811061325b5761325b613601565b60200101906001600160f81b031916908160001a90535060049490941c9361328281613907565b9050613214565b5083156132d85760405162461bcd60e51b815260206004820181905260248201527f537472696e67733a20686578206c656e67746820696e73756666696369656e746044820152606401610ce5565b9392505050565b6000602082840312156132f157600080fd5b81356001600160e01b0319811681146132d857600080fd5b60005b8381101561332457818101518382015260200161330c565b50506000910152565b602081526000825180602084015261334c816040850160208701613309565b601f01601f19169190910160400192915050565b6001600160a01b0381168114610e7e57600080fd5b6000806040838503121561338857600080fd5b823561339381613360565b946020939093013593505050565b6000602082840312156133b357600080fd5b81356132d881613360565b6000806000606084860312156133d357600080fd5b83356133de81613360565b925060208401356133ee81613360565b929592945050506040919091013590565b60006020828403121561341157600080fd5b5035919050565b6000806040838503121561342b57600080fd5b82359150602083013561343d81613360565b809150509250929050565b6000806020838503121561345b57600080fd5b823567ffffffffffffffff8082111561347357600080fd5b818501915085601f83011261348757600080fd5b81358181111561349657600080fd5b8660208260051b85010111156134ab57600080fd5b60209290920196919550909350505050565b8015158114610e7e57600080fd5b600080604083850312156134de57600080fd5b82356134e981613360565b9150602083013561343d816134bd565b6000806040838503121561350c57600080fd5b823561351781613360565b9150602083013561343d81613360565b6000806040838503121561353a57600080fd5b50508035926020909101359150565b600181811c9082168061355d57607f821691505b60208210810361357d57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ba957610ba9613583565b6020808252600d908201526c2737ba10309036b0b730b3b2b960991b604082015260600190565b6020808252601490820152732737ba1030b71030baba3432b73a34b1b0ba37b960611b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b60006001820161362957613629613583565b5060010190565b6020808252602b908201527f466c616720736e697065722066756e6374696f6e616c6974792064697361626c60408201526a656420666f72657665722160a81b606082015260800190565b60006020828403121561368d57600080fd5b5051919050565b6000602082840312156136a657600080fd5b81516132d8816134bd565b6000602082840312156136c357600080fd5b81516132d881613360565b6001600160a01b039687168152602081019590955260408501939093526060840191909152909216608082015260a081019190915260c00190565b60008060006060848603121561371e57600080fd5b8351925060208401519150604084015190509250925092565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ba957610ba9613583565b8082028115828204841417610ba957610ba9613583565b60008261380657634e487b7160e01b600052601260045260246000fd5b500490565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000815260008351613843816017850160208801613309565b7001034b99036b4b9b9b4b733903937b6329607d1b6017918401918201528351613874816028840160208801613309565b01602801949350505050565b634e487b7160e01b600052604160045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156138e65784516001600160a01b0316835293830193918301916001016138c1565b50506001600160a01b03969096166060850152505050608001529392505050565b60008161391657613916613583565b50600019019056fe241ecf16d79d0f8dbfb92cbc07fe17840425976cf0667f022fe9877caa831b08190acb99f29d9641c9ad47655049f2d7c78fcbc837d62e7981d28c871f722081a26469706673582212200504abfa6d3dd714f0e43afe1cdc7c1b63ef7d2162ed952a52d5021cafc91a3f64736f6c63430008130033
Deployed Bytecode Sourcemap
20597:18323:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11244:204;;;;;;;;;;-1:-1:-1;11244:204:0;;;;;:::i;:::-;;:::i;:::-;;;470:14:1;;463:22;445:41;;433:2;418:18;11244:204:0;;;;;;;;15216:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20744:27::-;;;;;;;;;;-1:-1:-1;20744:27:0;;;;-1:-1:-1;;;;;20744:27:0;;;;;;-1:-1:-1;;;;;1336:32:1;;;1318:51;;1306:2;1291:18;20744:27:0;1153:222:1;16196:194:0;;;;;;;;;;-1:-1:-1;16196:194:0;;;;;:::i;:::-;;:::i;21835:63::-;;;;;;;;;;-1:-1:-1;21835:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;15537:108;;;;;;;;;;-1:-1:-1;15625:12:0;;15537:108;;;2234:25:1;;;2222:2;2207:18;15537:108:0;2088:177:1;21734:33:0;;;;;;;;;;;;;;;;16398:529;;;;;;;;;;-1:-1:-1;16398:529:0;;;;;:::i;:::-;;:::i;12224:131::-;;;;;;;;;;-1:-1:-1;12224:131:0;;;;;:::i;:::-;12298:7;12325:12;;;:6;:12;;;;;:22;;;;12224:131;12363:147;;;;;;;;;;-1:-1:-1;12363:147:0;;;;;:::i;:::-;;:::i;:::-;;15436:93;;;;;;;;;;-1:-1:-1;15436:93:0;;15519:2;3560:36:1;;3548:2;3533:18;15436:93:0;3418:184:1;12675:218:0;;;;;;;;;;-1:-1:-1;12675:218:0;;;;;:::i;:::-;;:::i;16935:290::-;;;;;;;;;;-1:-1:-1;16935:290:0;;;;;:::i;:::-;;:::i;24492:202::-;;;;;;;;;;-1:-1:-1;24492:202:0;;;;;:::i;:::-;;:::i;20778:21::-;;;;;;;;;;-1:-1:-1;20778:21:0;;;;-1:-1:-1;;;;;20778:21:0;;;34490:352;;;;;;;;;;-1:-1:-1;34490:352:0;;;;;:::i;:::-;;:::i;21185:33::-;;;;;;;;;;-1:-1:-1;21185:33:0;;;;;;;;35920:221;;;;;;;;;;-1:-1:-1;35920:221:0;;;;;:::i;:::-;;:::i;36401:191::-;;;;;;;;;;;;;:::i;21614:32::-;;;;;;;;;;;;;;;;35039:309;;;;;;;;;;-1:-1:-1;35039:309:0;;;;;:::i;:::-;;:::i;21502:31::-;;;;;;;;;;;;;;;;21303:37;;;;;;;;;;-1:-1:-1;21303:37:0;;;;;;;;;;;20676:28;;;;;;;;;;;;;;;;21579;;;;;;;;;;;;;;;;21265:31;;;;;;;;;;-1:-1:-1;21265:31:0;;;;;;;;;;;35356:350;;;;;;;;;;-1:-1:-1;35356:350:0;;;;;:::i;:::-;;:::i;15653:143::-;;;;;;;;;;-1:-1:-1;15653:143:0;;;;;:::i;:::-;;:::i;34850:86::-;;;;;;;;;;;;;:::i;25321:338::-;;;;;;;;;;-1:-1:-1;25321:338:0;;;;;:::i;:::-;;:::i;33920:562::-;;;;;;;;;;-1:-1:-1;33920:562:0;;;;;:::i;:::-;;:::i;20642:27::-;;;;;;;;;;;;;;;;38653:258;;;;;;;;;;;;;:::i;11456:147::-;;;;;;;;;;-1:-1:-1;11456:147:0;;;;;:::i;:::-;;:::i;15324:104::-;;;;;;;;;;;;;:::i;24702:206::-;;;;;;;;;;-1:-1:-1;24702:206:0;;;;;:::i;:::-;;:::i;36606:2039::-;;;;;;;;;;;;;:::i;25911:357::-;;;;;;;;;;-1:-1:-1;25911:357:0;;;;;:::i;:::-;;:::i;11099:49::-;;;;;;;;;;-1:-1:-1;11099:49:0;11144:4;11099:49;;34944:87;;;;;;;;;;;;;:::i;17233:475::-;;;;;;;;;;-1:-1:-1;17233:475:0;;;;;:::i;:::-;;:::i;15804:200::-;;;;;;;;;;-1:-1:-1;15804:200:0;;;;;:::i;:::-;;:::i;36153:236::-;;;;;;;;;;;;;:::i;26284:340::-;;;;;;;;;;-1:-1:-1;26284:340:0;;;;;:::i;:::-;;:::i;21905:57::-;;;;;;;;;;-1:-1:-1;21905:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21087:85;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21087:85:0;;26632:347;;;;;;;;;;-1:-1:-1;26632:347:0;;;;;:::i;:::-;;:::i;21225:33::-;;;;;;;;;;-1:-1:-1;21225:33:0;;;;;;;;;;;26991:184;;;;;;;;;;-1:-1:-1;26991:184:0;;;;;:::i;:::-;;:::i;20961:46::-;;;;;;;;;;-1:-1:-1;20961:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21420:39;;;;;;;;;;-1:-1:-1;21420:39:0;;;;;;;;12518:149;;;;;;;;;;-1:-1:-1;12518:149:0;;;;;:::i;:::-;;:::i;21468:27::-;;;;;;;;;;;;;;;;35714:190;;;;;;;;;;-1:-1:-1;35714:190:0;;;;;:::i;:::-;;:::i;16012:176::-;;;;;;;;;;-1:-1:-1;16012:176:0;;;;;:::i;:::-;-1:-1:-1;;;;;16153:18:0;;;16126:7;16153:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16012:176;20836:33;;;;;;;;;;;;;;;;24973:100;;;;;;;;;;;;;:::i;20876:32::-;;;;;;;;;;-1:-1:-1;20876:32:0;;;;-1:-1:-1;;;;;20876:32:0;;;21016:64;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;21016:64:0;;20917:37;;;;;;;;;;;;;;;;21540:30;;;;;;;;;;;;;;;;21653:31;;;;;;;;;;;;;;;;20711:24;;;;;;;;;;;;;;;;21693:34;;;;;;;;;;;;;;;;11244:204;11329:4;-1:-1:-1;;;;;;11353:47:0;;-1:-1:-1;;;11353:47:0;;:87;;-1:-1:-1;;;;;;;;;;855:40:0;;;11404:36;11346:94;11244:204;-1:-1:-1;;11244:204:0:o;15216:100::-;15270:13;15303:5;15296:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15216:100;:::o;16196:194::-;16304:4;16321:39;323:10;16344:7;16353:6;16321:8;:39::i;:::-;-1:-1:-1;16378:4:0;16196:194;;;;:::o;16398:529::-;16538:4;16555:36;16565:6;16573:9;16584:6;16555:9;:36::i;:::-;-1:-1:-1;;;;;16631:19:0;;16604:24;16631:19;;;:11;:19;;;;;;;;323:10;16631:33;;;;;;;;16697:26;;;;16675:116;;;;-1:-1:-1;;;16675:116:0;;6178:2:1;16675:116:0;;;6160:21:1;6217:2;6197:18;;;6190:30;6256:34;6236:18;;;6229:62;-1:-1:-1;;;6307:18:1;;;6300:38;6355:19;;16675:116:0;;;;;;;;;16827:57;16836:6;323:10;16877:6;16858:16;:25;16827:8;:57::i;:::-;-1:-1:-1;16915:4:0;;16398:529;-1:-1:-1;;;;16398:529:0:o;12363:147::-;12298:7;12325:12;;;:6;:12;;;;;:22;;;11200:16;11211:4;11200:10;:16::i;:::-;12477:25:::1;12488:4;12494:7;12477:10;:25::i;:::-;12363:147:::0;;;:::o;12675:218::-;-1:-1:-1;;;;;12771:23:0;;323:10;12771:23;12763:83;;;;-1:-1:-1;;;12763:83:0;;6587:2:1;12763:83:0;;;6569:21:1;6626:2;6606:18;;;6599:30;6665:34;6645:18;;;6638:62;-1:-1:-1;;;6716:18:1;;;6709:45;6771:19;;12763:83:0;6385:411:1;12763:83:0;12859:26;12871:4;12877:7;12859:11;:26::i;:::-;12675:218;;:::o;16935:290::-;323:10;17048:4;17137:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17137:34:0;;;;;;;;;;17048:4;;17065:130;;17115:7;;17137:47;;17174:10;;17137:47;:::i;:::-;17065:8;:130::i;24492:202::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24582:28:0;::::1;24574:56;;;::::0;-1:-1:-1;;;24574:56:0;;7607:2:1;24574:56:0::1;::::0;::::1;7589:21:1::0;7646:2;7626:18;;;7619:30;-1:-1:-1;;;7665:18:1;;;7658:45;7720:18;;24574:56:0::1;7405:339:1::0;24574:56:0::1;24641:45;-1:-1:-1::0;;;;;;;;;;;24671:14:0::1;24641:9;:45::i;:::-;24492:202:::0;:::o;34490:352::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34618:32:0;::::1;34596:120;;;::::0;-1:-1:-1;;;34596:120:0;;7951:2:1;34596:120:0::1;::::0;::::1;7933:21:1::0;7990:2;7970:18;;;7963:30;8029:34;8009:18;;;8002:62;-1:-1:-1;;;8080:18:1;;;8073:36;8126:19;;34596:120:0::1;7749:402:1::0;34596:120:0::1;34727:17;:47:::0;;-1:-1:-1;;;;;;34727:47:0::1;-1:-1:-1::0;;;;;34727:47:0;::::1;::::0;;::::1;::::0;;;34790:44:::1;::::0;::::1;::::0;-1:-1:-1;;34790:44:0::1;34490:352:::0;:::o;35920:221::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;36033:9:::1;36028:106;36048:18:::0;;::::1;36028:106;;;36117:5;36088:14;:26;36103:7;;36111:1;36103:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;36088:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;36088:26:0;:34;;-1:-1:-1;;36088:34:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36068:3;::::1;::::0;::::1;:::i;:::-;;;;36028:106;;36401:191:::0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;36502:82:::1;::::0;36465:12:::1;::::0;36510:10:::1;::::0;36534:21:::1;::::0;36465:12;36502:82;36465:12;36502:82;36534:21;36510:10;36502:82:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;36401:191:0:o;35039:309::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;35136:18:::1;::::0;;;::::1;;;35114:111;;;;-1:-1:-1::0;;;35114:111:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35247:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;35246:23;35238:62;;;::::0;-1:-1:-1;;;35238:62:0;;9601:2:1;35238:62:0::1;::::0;::::1;9583:21:1::0;9640:2;9620:18;;;9613:30;9679:28;9659:18;;;9652:56;9725:18;;35238:62:0::1;9399:350:1::0;35238:62:0::1;-1:-1:-1::0;;;;;35311:22:0::1;;::::0;;;:14:::1;:22;::::0;;;;:29;;-1:-1:-1;;35311:29:0::1;35336:4;35311:29;::::0;;35039:309::o;35356:350::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;35484:18:::1;::::0;;;::::1;;;35462:111;;;;-1:-1:-1::0;;;35462:111:0::1;;;;;;;:::i;:::-;35599:9;35594:105;35614:18:::0;;::::1;35594:105;;;35683:4;35654:14;:26;35669:7;;35677:1;35669:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;35654:26:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;35654:26:0;:33;;-1:-1:-1;;35654:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35634:3;::::1;::::0;::::1;:::i;:::-;;;;35594:105;;15653:143:::0;-1:-1:-1;;;;;15770:18:0;15743:7;15770:18;;;;;;;;;;;;15653:143::o;34850:86::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;34906:14:::1;:22:::0;;-1:-1:-1;;34906:22:0::1;::::0;;34850:86::o;25321:338::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;25445:4:::1;25440:155;;25502:6;::::0;-1:-1:-1;;;;;25502:6:0;;::::1;25492:16:::0;;::::1;::::0;25466:117:::1;;;::::0;-1:-1:-1;;;25466:117:0;;9956:2:1;25466:117:0::1;::::0;::::1;9938:21:1::0;9995:2;9975:18;;;9968:30;10034:34;10014:18;;;10007:62;-1:-1:-1;;;10085:18:1;;;10078:37;10132:19;;25466:117:0::1;9754:403:1::0;25466:117:0::1;-1:-1:-1::0;;;;;25605:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25605:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25321:338::o;33920:562::-;34034:10;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;34065:20:0;::::1;34057:59;;;::::0;-1:-1:-1;;;34057:59:0;;10364:2:1;34057:59:0::1;::::0;::::1;10346:21:1::0;10403:2;10383:18;;;10376:30;10442:28;10422:18;;;10415:56;10488:18;;34057:59:0::1;10162:350:1::0;34057:59:0::1;-1:-1:-1::0;;;;;34149:23:0;::::1;34167:4;34149:23;;::::0;:41:::1;;-1:-1:-1::0;34177:13:0::1;::::0;::::1;::::0;::::1;;;34176:14;34149:41;34127:143;;;::::0;-1:-1:-1;;;34127:143:0;;10719:2:1;34127:143:0::1;::::0;::::1;10701:21:1::0;10758:2;10738:18;;;10731:30;10797:34;10777:18;;;10770:62;-1:-1:-1;;;10848:18:1;;;10841:50;10908:19;;34127:143:0::1;10517:416:1::0;34127:143:0::1;34308:39;::::0;-1:-1:-1;;;34308:39:0;;34341:4:::1;34308:39;::::0;::::1;1318:51:1::0;34281:24:0::1;::::0;-1:-1:-1;;;;;34308:24:0;::::1;::::0;::::1;::::0;1291:18:1;;34308:39:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34366:46;::::0;-1:-1:-1;;;34366:46:0;;-1:-1:-1;;;;;11319:32:1;;;34366:46:0::1;::::0;::::1;11301:51:1::0;11368:18;;;11361:34;;;34281:66:0;;-1:-1:-1;34366:23:0;;::::1;::::0;::::1;::::0;11274:18:1;;34366:46:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34428;::::0;;-1:-1:-1;;;;;11319:32:1;;11301:51;;11383:2;11368:18;;11361:34;;;34358:54:0;;-1:-1:-1;34428:46:0::1;::::0;11274:18:1;34428:46:0::1;;;;;;;34046:436;33920:562:::0;;;;:::o;38653:258::-;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;38726:13:::1;::::0;::::1;::::0;::::1;;;38725:14;38717:50;;;::::0;-1:-1:-1;;;38717:50:0;;11858:2:1;38717:50:0::1;::::0;::::1;11840:21:1::0;11897:2;11877:18;;;11870:30;11936:25;11916:18;;;11909:53;11979:18;;38717:50:0::1;11656:347:1::0;38717:50:0::1;38778:13;:20:::0;;-1:-1:-1;;38809:18:0;;;;;38859:12:::1;38838:18;:33:::0;38887:16:::1;::::0;::::1;::::0;-1:-1:-1;;38887:16:0::1;38653:258::o:0;11456:147::-;11542:4;11566:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;11566:29:0;;;;;;;;;;;;;;;11456:147::o;15324:104::-;15380:13;15413:7;15406:14;;;;;:::i;24702:206::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24795:28:0;::::1;24787:56;;;::::0;-1:-1:-1;;;24787:56:0;;7607:2:1;24787:56:0::1;::::0;::::1;7589:21:1::0;7646:2;7626:18;;;7619:30;-1:-1:-1;;;7665:18:1;;;7658:45;7720:18;;24787:56:0::1;7405:339:1::0;24787:56:0::1;24854:46;-1:-1:-1::0;;;;;;;;;;;24885:14:0::1;24854:10;:46::i;36606:2039::-:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;36672:13:::1;::::0;::::1;::::0;::::1;;;36671:14;36663:70;;;::::0;-1:-1:-1;;;36663:70:0;;12210:2:1;36663:70:0::1;::::0;::::1;12192:21:1::0;12249:2;12229:18;;;12222:30;12288:34;12268:18;;;12261:62;-1:-1:-1;;;12339:18:1;;;12332:41;12390:19;;36663:70:0::1;12008:407:1::0;36663:70:0::1;36751:18;36786:13;36803:1;36786:18:::0;36782:730:::1;;-1:-1:-1::0;36834:42:0::1;36782:730;;;36917:13;36934:8;36917:25:::0;36913:599:::1;;-1:-1:-1::0;36972:42:0::1;36913:599;;;37052:13;37069:2;37052:19:::0;37048:464:::1;;-1:-1:-1::0;37101:42:0::1;37048:464;;;37186:13;37203:2;37186:19:::0;37182:330:::1;;-1:-1:-1::0;37235:42:0::1;37182:330;;;37320:13;37337:5;37320:22:::0;37316:196:::1;;-1:-1:-1::0;37372:42:0::1;37316:196;;;37470:30;::::0;-1:-1:-1;;;37470:30:0;;12622:2:1;37470:30:0::1;::::0;::::1;12604:21:1::0;12661:2;12641:18;;;12634:30;-1:-1:-1;;;12680:18:1;;;12673:50;12740:18;;37470:30:0::1;12420:344:1::0;37316:196:0::1;37554:9;:34:::0;;-1:-1:-1;;;;;;37554:34:0::1;-1:-1:-1::0;;;;;37554:34:0;::::1;::::0;;::::1;::::0;;;37654:19:::1;::::0;;-1:-1:-1;;;37654:19:0;;;;:17:::1;::::0;:19:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;37554:34;37654:19:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;37642:43:0::1;;37708:4;37728:9;;;;;;;;;-1:-1:-1::0;;;;;37728:9:0::1;-1:-1:-1::0;;;;;37728:14:0::1;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37642:113;::::0;-1:-1:-1;;;;;;37642:113:0::1;::::0;;;;;;-1:-1:-1;;;;;13255:15:1;;;37642:113:0::1;::::0;::::1;13237:34:1::0;13307:15;;13287:18;;;13280:43;13172:18;;37642:113:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37633:6;:122:::0;;-1:-1:-1;;;;;;37633:122:0::1;-1:-1:-1::0;;;;;37633:122:0;;;::::1;::::0;;::::1;::::0;;37768:49:::1;::::0;-1:-1:-1;37768:26:0::1;:49::i;:::-;37865:6;::::0;37828:51:::1;::::0;-1:-1:-1;;;;;37865:6:0::1;::::0;37828:28:::1;:51::i;:::-;37935:9;::::0;37900:52:::1;::::0;-1:-1:-1;;;;;37935:9:0::1;::::0;37900:26:::1;:52::i;:::-;37987:9;::::0;37963:41:::1;::::0;-1:-1:-1;;;;;37987:9:0::1;::::0;37963:15:::1;:41::i;:::-;38065:1;38041:21;:25;38019:110;;;::::0;-1:-1:-1;;;38019:110:0;;13536:2:1;38019:110:0::1;::::0;::::1;13518:21:1::0;13575:2;13555:18;;;13548:30;13614:34;13594:18;;;13587:62;-1:-1:-1;;;13665:18:1;;;13658:33;13708:19;;38019:110:0::1;13334:399:1::0;38019:110:0::1;38189:1;38162:24;38180:4;38162:9;:24::i;:::-;:28;38140:116;;;::::0;-1:-1:-1;;;38140:116:0;;13940:2:1;38140:116:0::1;::::0;::::1;13922:21:1::0;13979:2;13959:18;;;13952:30;14018:34;13998:18;;;13991:62;-1:-1:-1;;;14069:18:1;;;14062:36;14115:19;;38140:116:0::1;13738:402:1::0;38140:116:0::1;38312:9;::::0;38280:69:::1;::::0;38297:4:::1;::::0;-1:-1:-1;;;;;38312:9:0::1;38324:24;38297:4:::0;38324:9:::1;:24::i;38280:69::-;38362:9;::::0;-1:-1:-1;;;;;38362:9:0::1;:25;38395:21;38440:4;38460:24;38440:4:::0;38460:9:::1;:24::i;:::-;38499:1;38542::::0;38585:10:::1;38610:15;38362:274;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;25911:357::-:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;26061:6:::1;::::0;-1:-1:-1;;;;;26061:6:0;;::::1;26053:14:::0;;::::1;::::0;26031:121:::1;;;::::0;-1:-1:-1;;;26031:121:0;;15270:2:1;26031:121:0::1;::::0;::::1;15252:21:1::0;15309:2;15289:18;;;15282:30;15348:34;15328:18;;;15321:62;15419:27;15399:18;;;15392:55;15464:19;;26031:121:0::1;15068:421:1::0;26031:121:0::1;26163:41;26192:4;26198:5;26163:28;:41::i;:::-;26220:40;::::0;;::::1;;::::0;-1:-1:-1;;;;;26220:40:0;::::1;::::0;::::1;::::0;;;::::1;25911:357:::0;;:::o;34944:87::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;35002:14:::1;:21:::0;;-1:-1:-1;;35002:21:0::1;35019:4;35002:21;::::0;;34944:87::o;17233:475::-;323:10;17351:4;17395:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;17395:34:0;;;;;;;;;;17462:35;;;;17440:122;;;;-1:-1:-1;;;17440:122:0;;15696:2:1;17440:122:0;;;15678:21:1;15735:2;15715:18;;;15708:30;15774:34;15754:18;;;15747:62;-1:-1:-1;;;15825:18:1;;;15818:35;15870:19;;17440:122:0;15494:401:1;17440:122:0;17598:67;323:10;17621:7;17649:15;17630:16;:34;17598:8;:67::i;:::-;-1:-1:-1;17696:4:0;;17233:475;-1:-1:-1;;;17233:475:0:o;15804:200::-;15915:4;15932:42;323:10;15956:9;15967:6;15932:9;:42::i;36153:236::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;36244:18:::1;::::0;;;::::1;;;36222:120;;;::::0;-1:-1:-1;;;36222:120:0;;16102:2:1;36222:120:0::1;::::0;::::1;16084:21:1::0;16141:2;16121:18;;;16114:30;16180:34;16160:18;;;16153:62;-1:-1:-1;;;16231:18:1;;;16224:50;16291:19;;36222:120:0::1;15900:416:1::0;36222:120:0::1;36355:18;:26:::0;;-1:-1:-1;;36355:26:0::1;::::0;;36153:236::o;26284:340::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;26410:16:::1;:33:::0;;;26454:15:::1;:31:::0;;;26511:34:::1;26472:13:::0;26429:14;26511:34:::1;:::i;:::-;26496:12;:49:::0;;;26580:2:::1;-1:-1:-1::0;26564:18:0::1;26556:60;;;::::0;-1:-1:-1;;;26556:60:0;;16523:2:1;26556:60:0::1;::::0;::::1;16505:21:1::0;16562:2;16542:18;;;16535:30;16601:31;16581:18;;;16574:59;16650:18;;26556:60:0::1;16321:353:1::0;26632:347:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;26759:17:::1;:34:::0;;;26804:16:::1;:32:::0;;;26863:36:::1;26823:13:::0;26779:14;26863:36:::1;:::i;:::-;26847:13;:52:::0;;;26935:2:::1;-1:-1:-1::0;26918:19:0::1;26910:61;;;::::0;-1:-1:-1;;;26910:61:0;;16523:2:1;26910:61:0::1;::::0;::::1;16505:21:1::0;16562:2;16542:18;;;16535:30;16601:31;16581:18;;;16574:59;16650:18;;26910:61:0::1;16321:353:1::0;26991:184:0;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27078:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;27078:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27133:34;;445:41:1;;;27133:34:0::1;::::0;418:18:1;27133:34:0::1;;;;;;;26991:184:::0;;:::o;12518:149::-;12298:7;12325:12;;;:6;:12;;;;;:22;;;11200:16;11211:4;11200:10;:16::i;:::-;12633:26:::1;12645:4;12651:7;12633:11;:26::i;35714:190::-:0;22799:39;-1:-1:-1;;;;;;;;;;;22827:10:0;22799:7;:39::i;:::-;22777:109;;;;-1:-1:-1;;;22777:109:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;35799:22:0;::::1;;::::0;;;:14:::1;:22;::::0;;;;;::::1;;35791:64;;;::::0;-1:-1:-1;;;35791:64:0;;16881:2:1;35791:64:0::1;::::0;::::1;16863:21:1::0;16920:2;16900:18;;;16893:30;16959:31;16939:18;;;16932:59;17008:18;;35791:64:0::1;16679:353:1::0;35791:64:0::1;-1:-1:-1::0;;;;;35866:22:0::1;35891:5;35866:22:::0;;;:14:::1;:22;::::0;;;;:30;;-1:-1:-1;;35866:30:0::1;::::0;;35714:190::o;24973:100::-;22657:33;-1:-1:-1;;;;;;;;;;;22679:10:0;22657:7;:33::i;:::-;22649:59;;;;-1:-1:-1;;;22649:59:0;;;;;;;:::i;:::-;25037:20:::1;:28:::0;;-1:-1:-1;;25037:28:0::1;::::0;;24973:100::o;18699:380::-;-1:-1:-1;;;;;18835:19:0;;18827:68;;;;-1:-1:-1;;;18827:68:0;;17239:2:1;18827:68:0;;;17221:21:1;17278:2;17258:18;;;17251:30;17317:34;17297:18;;;17290:62;-1:-1:-1;;;17368:18:1;;;17361:34;17412:19;;18827:68:0;17037:400:1;18827:68:0;-1:-1:-1;;;;;18914:21:0;;18906:68;;;;-1:-1:-1;;;18906:68:0;;17644:2:1;18906:68:0;;;17626:21:1;17683:2;17663:18;;;17656:30;17722:34;17702:18;;;17695:62;-1:-1:-1;;;17773:18:1;;;17766:32;17815:19;;18906:68:0;17442:398:1;18906:68:0;-1:-1:-1;;;;;18987:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;19039:32;;2234:25:1;;;19039:32:0;;2207:18:1;19039:32:0;;;;;;;18699:380;;;:::o;27183:4356::-;-1:-1:-1;;;;;27315:18:0;;27307:68;;;;-1:-1:-1;;;27307:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27394:16:0;;27386:64;;;;-1:-1:-1;;;27386:64:0;;;;;;;:::i;:::-;27478:1;27469:6;:10;27461:52;;;;-1:-1:-1;;;27461:52:0;;18857:2:1;27461:52:0;;;18839:21:1;18896:2;18876:18;;;18869:30;18935:31;18915:18;;;18908:59;18984:18;;27461:52:0;18655:353:1;27461:52:0;27531:13;;;;;;;27526:329;;-1:-1:-1;;;;;27587:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;27616:23:0;;;;;;:19;:23;;;;;;;;27587:52;27561:136;;;;-1:-1:-1;;;27561:136:0;;19215:2:1;27561:136:0;;;19197:21:1;19254:2;19234:18;;;19227:30;-1:-1:-1;;;19273:18:1;;;19266:52;19335:18;;27561:136:0;19013:346:1;27561:136:0;27526:329;;;-1:-1:-1;;;;;27757:20:0;;;;;;:14;:20;;;;;;;;27756:21;27730:113;;;;-1:-1:-1;;;27730:113:0;;19566:2:1;27730:113:0;;;19548:21:1;19605:2;19585:18;;;19578:30;19644:32;19624:18;;;19617:60;19694:18;;27730:113:0;19364:354:1;27730:113:0;27871:14;;;;27867:2060;;;-1:-1:-1;;;;;27906:21:0;;27920:6;27906:21;;;;:68;;-1:-1:-1;;;;;;27949:25:0;;;;;;:19;:25;;;;;;;;27948:26;27906:68;:113;;;;-1:-1:-1;;;;;;27996:23:0;;;;;;:19;:23;;;;;;;;27995:24;27906:113;27902:2014;;;28058:20;;;;28054:692;;;28121:9;;-1:-1:-1;;;;;28107:24:0;;;28121:9;;28107:24;;;;:49;;-1:-1:-1;28149:6:0;;-1:-1:-1;;;;;28135:21:0;;;28149:6;;28135:21;;28107:49;28103:624;;;28298:16;28313:1;28298:12;:16;:::i;:::-;28252:9;28223:39;;;;:28;:39;;;;;;:91;:212;;;;-1:-1:-1;28419:16:0;28434:1;28419:12;:16;:::i;:::-;-1:-1:-1;;;;;28351:32:0;;;;;;:28;:32;;;;;;:84;28223:212;28185:363;;;;-1:-1:-1;;;28185:363:0;;20058:2:1;28185:363:0;;;20040:21:1;20097:2;20077:18;;;20070:30;20136:34;20116:18;;;20109:62;-1:-1:-1;;;20187:18:1;;;20180:51;20248:19;;28185:363:0;19856:417:1;28185:363:0;28604:9;28575:39;;;;:28;:39;;;;;;28617:12;28575:54;;;;-1:-1:-1;;;;;28656:32:0;;;;;;:47;28103:624;-1:-1:-1;;;;;28820:31:0;;;;;;:25;:31;;;;;;;;:92;;;;-1:-1:-1;;;;;;28877:35:0;;;;;;:31;:35;;;;;;;;28876:36;28820:92;28794:1107;;;28999:12;;28989:6;:22;;28955:148;;;;-1:-1:-1;;;28955:148:0;;20480:2:1;28955:148:0;;;20462:21:1;20519:2;20499:18;;;20492:30;20558:34;20538:18;;;20531:62;-1:-1:-1;;;20609:18:1;;;20602:38;20657:19;;28955:148:0;20278:404:1;28955:148:0;29186:9;;29169:13;29179:2;29169:9;:13::i;:::-;29160:22;;:6;:22;:::i;:::-;:35;;29126:140;;;;-1:-1:-1;;;29126:140:0;;20889:2:1;29126:140:0;;;20871:21:1;20928:2;20908:18;;;20901:30;-1:-1:-1;;;20947:18:1;;;20940:49;21006:18;;29126:140:0;20687:343:1;29126:140:0;28794:1107;;;-1:-1:-1;;;;;29364:29:0;;;;;;:25;:29;;;;;;;;:92;;;;-1:-1:-1;;;;;;29419:37:0;;;;;;:31;:37;;;;;;;;29418:38;29364:92;29338:563;;;29543:13;;29533:6;:23;;29499:151;;;;-1:-1:-1;;;29499:151:0;;21237:2:1;29499:151:0;;;21219:21:1;21276:2;21256:18;;;21249:30;21315:34;21295:18;;;21288:62;-1:-1:-1;;;21366:18:1;;;21359:40;21416:19;;29499:151:0;21035:406:1;29338:563:0;-1:-1:-1;;;;;29681:35:0;;;;;;:31;:35;;;;;;;;29676:225;;29801:9;;29784:13;29794:2;29784:9;:13::i;:::-;29775:22;;:6;:22;:::i;:::-;:35;;29741:140;;;;-1:-1:-1;;;29741:140:0;;20889:2:1;29741:140:0;;;20871:21:1;20928:2;20908:18;;;20901:30;-1:-1:-1;;;20947:18:1;;;20940:49;21006:18;;29741:140:0;20687:343:1;29741:140:0;29939:28;29970:24;29988:4;29970:9;:24::i;:::-;30046:18;;29939:55;;-1:-1:-1;30022:42:0;;;;;;;30095:22;;-1:-1:-1;30106:11:0;;;;;;;30095:22;:35;;;;-1:-1:-1;30122:8:0;;-1:-1:-1;;;30122:8:0;;;;30121:9;30095:35;:68;;;;-1:-1:-1;;;;;;30134:29:0;;;;;;:25;:29;;;;;;;;30095:68;30077:196;;;30190:8;:15;;-1:-1:-1;;;;30190:15:0;-1:-1:-1;;;30190:15:0;;;30220:10;:8;:10::i;:::-;30245:8;:16;;-1:-1:-1;;;;30245:16:0;;;30077:196;-1:-1:-1;;;;;30404:25:0;;30285:12;30404:25;;;:19;:25;;;;;;30300:4;;30404:25;;;:52;;-1:-1:-1;;;;;;30433:23:0;;;;;;:19;:23;;;;;;;;30404:52;30400:100;;;-1:-1:-1;30483:5:0;30400:100;30512:12;30617:7;30613:873;;;-1:-1:-1;;;;;30673:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;30722:1;30706:13;;:17;30673:50;30669:668;;;30778:3;30761:13;;30752:6;:22;;;;:::i;:::-;30751:30;;;;:::i;:::-;30744:37;;30850:13;;30830:16;;30823:4;:23;;;;:::i;:::-;30822:41;;;;:::i;:::-;30800:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;30976:13:0;;30934:17;;30927:24;;:4;:24;:::i;:::-;30926:63;;;;:::i;:::-;30882:19;;:107;;;;;;;:::i;:::-;;;;-1:-1:-1;30669:668:0;;-1:-1:-1;30669:668:0;;-1:-1:-1;;;;;31051:31:0;;;;;;:25;:31;;;;;;;;:51;;;;;31101:1;31086:12;;:16;31051:51;31047:290;;;31156:3;31140:12;;31131:6;:21;;;;:::i;:::-;31130:29;;;;:::i;:::-;31123:36;;31227:12;;31208:15;;31201:4;:22;;;;:::i;:::-;31200:39;;;;:::i;:::-;31178:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;31309:12:0;;31289:16;;31282:23;;:4;:23;:::i;:::-;31281:40;;;;:::i;:::-;31258:19;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;;31047:290:0;31357:8;;31353:91;;31386:42;31402:4;31416;31423;31386:15;:42::i;:::-;31460:14;31470:4;31460:14;;:::i;:::-;;;30613:873;31498:33;31514:4;31520:2;31524:6;31498:15;:33::i;:::-;27296:4243;;;;27183:4356;;;:::o;11611:105::-;11678:30;11689:4;323:10;11678;:30::i;13280:238::-;13364:22;13372:4;13378:7;13364;:22::i;:::-;13359:152;;13403:12;;;;:6;:12;;;;;;;;-1:-1:-1;;;;;13403:29:0;;;;;;;;;:36;;-1:-1:-1;;13403:36:0;13435:4;13403:36;;;13486:12;323:10;;243:98;13486:12;-1:-1:-1;;;;;13459:40:0;13477:7;-1:-1:-1;;;;;13459:40:0;13471:4;13459:40;;;;;;;;;;13280:238;;:::o;13526:239::-;13610:22;13618:4;13624:7;13610;:22::i;:::-;13606:152;;;13681:5;13649:12;;;:6;:12;;;;;;;;-1:-1:-1;;;;;13649:29:0;;;;;;;;;;:37;;-1:-1:-1;;13649:37:0;;;13706:40;323:10;;13649:12;;13706:40;;13681:5;13706:40;13526:239;;:::o;25081:232::-;-1:-1:-1;;;;;25194:39:0;;;;;;:31;:39;;;;;;;;;:52;;-1:-1:-1;;25194:52:0;;;;;;;;;;25262:43;;22009:51:1;;;22076:18;;;22069:50;25262:43:0;;21982:18:1;25262:43:0;;;;;;;25081:232;;:::o;25667:236::-;-1:-1:-1;;;;;25750:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;25750:39:0;;;;;;;25800;25750:31;:39;25800:26;:39::i;32643:1269::-;32682:23;32708:24;32726:4;32708:9;:24::i;:::-;32682:50;;32743:25;32792:19;;32771:18;;:40;;;;:::i;:::-;32743:68;-1:-1:-1;32828:20:0;;;:46;;-1:-1:-1;32852:22:0;;32828:46;32824:85;;;32891:7;;32643:1269::o;32824:85::-;32943:18;;:23;;32964:2;32943:23;:::i;:::-;32925:15;:41;32921:115;;;33001:18;;:23;;33022:2;33001:23;:::i;:::-;32983:41;;32921:115;33048:12;33122:23;33235:1;33202:17;33167:18;;33149:15;:36;;;;:::i;:::-;33148:71;;;;:::i;:::-;:88;;;;:::i;:::-;33122:114;-1:-1:-1;33249:51:0;33266:33;33122:114;33266:15;:33;:::i;:::-;33249:16;:51::i;:::-;33514:18;;33334:21;;;;33313:18;;33514:22;;33535:1;;33514:22;:::i;:::-;33493:44;;:17;:44;:::i;:::-;33456:19;;33443:32;;:10;:32;:::i;:::-;33442:96;;;;:::i;:::-;33415:123;-1:-1:-1;33551:35:0;33415:123;33551:35;;:::i;:::-;33620:1;33599:18;:22;;;33632:19;:23;33551:35;-1:-1:-1;33672:19:0;;;;;:42;;;33713:1;33695:15;:19;33672:42;33668:121;;;33731:46;33744:15;33761;33731:12;:46::i;:::-;33823:17;;33815:89;;-1:-1:-1;;;;;33823:17:0;;;;33868:21;;33815:89;;;;33868:21;33823:17;33815:89;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;32643:1269:0:o;17716:651::-;-1:-1:-1;;;;;17856:20:0;;17848:70;;;;-1:-1:-1;;;17848:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17937:23:0;;17929:71;;;;-1:-1:-1;;;17929:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;18037:17:0;;18013:21;18037:17;;;;;;;;;;;18087:23;;;;18065:111;;;;-1:-1:-1;;;18065:111:0;;22332:2:1;18065:111:0;;;22314:21:1;22371:2;22351:18;;;22344:30;22410:34;22390:18;;;22383:62;-1:-1:-1;;;22461:18:1;;;22454:36;22507:19;;18065:111:0;22130:402:1;18065:111:0;-1:-1:-1;;;;;18212:17:0;;;:9;:17;;;;;;;;;;;18232:22;;;18212:42;;18276:20;;;;;;;;:30;;18248:6;;18212:9;18276:30;;18248:6;;18276:30;:::i;:::-;;;;;;;;18341:9;-1:-1:-1;;;;;18324:35:0;18333:6;-1:-1:-1;;;;;18324:35:0;;18352:6;18324:35;;;;2234:25:1;;2222:2;2207:18;;2088:177;18324:35:0;;;;;;;;17837:530;17716:651;;;:::o;11724:492::-;11813:22;11821:4;11827:7;11813;:22::i;:::-;11808:401;;12001:28;12021:7;12001:19;:28::i;:::-;12102:38;12130:4;12137:2;12102:19;:38::i;:::-;11906:257;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;11906:257:0;;;;;;;;;;-1:-1:-1;;;11852:345:0;;;;;;;:::i;31547:571::-;31697:16;;;31711:1;31697:16;;;;;;;;31673:21;;31697:16;;;;;;;;;;-1:-1:-1;31697:16:0;31673:40;;31742:4;31724;31729:1;31724:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31724:23:0;;;:7;;;;;;;;;;:23;;;;31768:9;;:16;;;-1:-1:-1;;;31768:16:0;;;;:9;;;;;:14;;:16;;;;;31724:7;;31768:16;;;;;:9;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31758:4;31763:1;31758:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;31758:26:0;;;:7;;;;;;;;;:26;31829:9;;31797:56;;31814:4;;31829:9;31841:11;31797:8;:56::i;:::-;31892:9;;:218;;-1:-1:-1;;;31892:218:0;;-1:-1:-1;;;;;31892:9:0;;;;:60;;:218;;31967:11;;31892:9;;32037:4;;32064;;32084:15;;31892:218;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31602:516;31547:571;:::o;32126:509::-;32306:9;;32274:56;;32291:4;;-1:-1:-1;;;;;32306:9:0;32318:11;32274:8;:56::i;:::-;32373:9;;:254;;-1:-1:-1;;;32373:254:0;;-1:-1:-1;;;;;32373:9:0;;;;:25;;32406:9;;32373:254;;32439:4;;32459:11;;32373:9;;;;32579:6;;32601:15;;32373:254;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;32126:509;;:::o;10558:151::-;10616:13;10649:52;-1:-1:-1;;;;;10661:22:0;;9095:2;10103:447;10178:13;10204:19;10236:10;10240:6;10236:1;:10;:::i;:::-;:14;;10249:1;10236:14;:::i;:::-;10226:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10226:25:0;;10204:47;;-1:-1:-1;;;10262:6:0;10269:1;10262:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10262:15:0;;;;;;;;;-1:-1:-1;;;10288:6:0;10295:1;10288:9;;;;;;;;:::i;:::-;;;;:15;-1:-1:-1;;;;;10288:15:0;;;;;;;;-1:-1:-1;10319:9:0;10331:10;10335:6;10331:1;:10;:::i;:::-;:14;;10344:1;10331:14;:::i;:::-;10319:26;;10314:131;10351:1;10347;:5;10314:131;;;-1:-1:-1;;;10395:5:0;10403:3;10395:11;10386:21;;;;;;;:::i;:::-;;;;10374:6;10381:1;10374:9;;;;;;;;:::i;:::-;;;;:33;-1:-1:-1;;;;;10374:33:0;;;;;;;;-1:-1:-1;10432:1:0;10422:11;;;;;10354:3;;;:::i;:::-;;;10314:131;;;-1:-1:-1;10463:10:0;;10455:55;;;;-1:-1:-1;;;10455:55:0;;24814:2:1;10455:55:0;;;24796:21:1;;;24833:18;;;24826:30;24892:34;24872:18;;;24865:62;24944:18;;10455:55:0;24612:356:1;10455:55:0;10535:6;10103:447;-1:-1:-1;;;10103:447:0:o;14:286:1:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:1;;209:43;;199:71;;266:1;263;256:12;497:250;582:1;592:113;606:6;603:1;600:13;592:113;;;682:11;;;676:18;663:11;;;656:39;628:2;621:10;592:113;;;-1:-1:-1;;739:1:1;721:16;;714:27;497:250::o;752:396::-;901:2;890:9;883:21;864:4;933:6;927:13;976:6;971:2;960:9;956:18;949:34;992:79;1064:6;1059:2;1048:9;1044:18;1039:2;1031:6;1027:15;992:79;:::i;:::-;1132:2;1111:15;-1:-1:-1;;1107:29:1;1092:45;;;;1139:2;1088:54;;752:396;-1:-1:-1;;752:396:1:o;1380:131::-;-1:-1:-1;;;;;1455:31:1;;1445:42;;1435:70;;1501:1;1498;1491:12;1516:315;1584:6;1592;1645:2;1633:9;1624:7;1620:23;1616:32;1613:52;;;1661:1;1658;1651:12;1613:52;1700:9;1687:23;1719:31;1744:5;1719:31;:::i;:::-;1769:5;1821:2;1806:18;;;;1793:32;;-1:-1:-1;;;1516:315:1:o;1836:247::-;1895:6;1948:2;1936:9;1927:7;1923:23;1919:32;1916:52;;;1964:1;1961;1954:12;1916:52;2003:9;1990:23;2022:31;2047:5;2022:31;:::i;2270:456::-;2347:6;2355;2363;2416:2;2404:9;2395:7;2391:23;2387:32;2384:52;;;2432:1;2429;2422:12;2384:52;2471:9;2458:23;2490:31;2515:5;2490:31;:::i;:::-;2540:5;-1:-1:-1;2597:2:1;2582:18;;2569:32;2610:33;2569:32;2610:33;:::i;:::-;2270:456;;2662:7;;-1:-1:-1;;;2716:2:1;2701:18;;;;2688:32;;2270:456::o;2731:180::-;2790:6;2843:2;2831:9;2822:7;2818:23;2814:32;2811:52;;;2859:1;2856;2849:12;2811:52;-1:-1:-1;2882:23:1;;2731:180;-1:-1:-1;2731:180:1:o;3098:315::-;3166:6;3174;3227:2;3215:9;3206:7;3202:23;3198:32;3195:52;;;3243:1;3240;3233:12;3195:52;3279:9;3266:23;3256:33;;3339:2;3328:9;3324:18;3311:32;3352:31;3377:5;3352:31;:::i;:::-;3402:5;3392:15;;;3098:315;;;;;:::o;3815:615::-;3901:6;3909;3962:2;3950:9;3941:7;3937:23;3933:32;3930:52;;;3978:1;3975;3968:12;3930:52;4018:9;4005:23;4047:18;4088:2;4080:6;4077:14;4074:34;;;4104:1;4101;4094:12;4074:34;4142:6;4131:9;4127:22;4117:32;;4187:7;4180:4;4176:2;4172:13;4168:27;4158:55;;4209:1;4206;4199:12;4158:55;4249:2;4236:16;4275:2;4267:6;4264:14;4261:34;;;4291:1;4288;4281:12;4261:34;4344:7;4339:2;4329:6;4326:1;4322:14;4318:2;4314:23;4310:32;4307:45;4304:65;;;4365:1;4362;4355:12;4304:65;4396:2;4388:11;;;;;4418:6;;-1:-1:-1;3815:615:1;;-1:-1:-1;;;;3815:615:1:o;4435:118::-;4521:5;4514:13;4507:21;4500:5;4497:32;4487:60;;4543:1;4540;4533:12;4558:382;4623:6;4631;4684:2;4672:9;4663:7;4659:23;4655:32;4652:52;;;4700:1;4697;4690:12;4652:52;4739:9;4726:23;4758:31;4783:5;4758:31;:::i;:::-;4808:5;-1:-1:-1;4865:2:1;4850:18;;4837:32;4878:30;4837:32;4878:30;:::i;4945:388::-;5013:6;5021;5074:2;5062:9;5053:7;5049:23;5045:32;5042:52;;;5090:1;5087;5080:12;5042:52;5129:9;5116:23;5148:31;5173:5;5148:31;:::i;:::-;5198:5;-1:-1:-1;5255:2:1;5240:18;;5227:32;5268:33;5227:32;5268:33;:::i;5338:248::-;5406:6;5414;5467:2;5455:9;5446:7;5442:23;5438:32;5435:52;;;5483:1;5480;5473:12;5435:52;-1:-1:-1;;5506:23:1;;;5576:2;5561:18;;;5548:32;;-1:-1:-1;5338:248:1:o;5591:380::-;5670:1;5666:12;;;;5713;;;5734:61;;5788:4;5780:6;5776:17;5766:27;;5734:61;5841:2;5833:6;5830:14;5810:18;5807:38;5804:161;;5887:10;5882:3;5878:20;5875:1;5868:31;5922:4;5919:1;5912:15;5950:4;5947:1;5940:15;5804:161;;5591:380;;;:::o;6801:127::-;6862:10;6857:3;6853:20;6850:1;6843:31;6893:4;6890:1;6883:15;6917:4;6914:1;6907:15;6933:125;6998:9;;;7019:10;;;7016:36;;;7032:18;;:::i;7063:337::-;7265:2;7247:21;;;7304:2;7284:18;;;7277:30;-1:-1:-1;;;7338:2:1;7323:18;;7316:43;7391:2;7376:18;;7063:337::o;8156:344::-;8358:2;8340:21;;;8397:2;8377:18;;;8370:30;-1:-1:-1;;;8431:2:1;8416:18;;8409:50;8491:2;8476:18;;8156:344::o;8505:127::-;8566:10;8561:3;8557:20;8554:1;8547:31;8597:4;8594:1;8587:15;8621:4;8618:1;8611:15;8637:135;8676:3;8697:17;;;8694:43;;8717:18;;:::i;:::-;-1:-1:-1;8764:1:1;8753:13;;8637:135::o;8987:407::-;9189:2;9171:21;;;9228:2;9208:18;;;9201:30;9267:34;9262:2;9247:18;;9240:62;-1:-1:-1;;;9333:2:1;9318:18;;9311:41;9384:3;9369:19;;8987:407::o;10938:184::-;11008:6;11061:2;11049:9;11040:7;11036:23;11032:32;11029:52;;;11077:1;11074;11067:12;11029:52;-1:-1:-1;11100:16:1;;10938:184;-1:-1:-1;10938:184:1:o;11406:245::-;11473:6;11526:2;11514:9;11505:7;11501:23;11497:32;11494:52;;;11542:1;11539;11532:12;11494:52;11574:9;11568:16;11593:28;11615:5;11593:28;:::i;12769:251::-;12839:6;12892:2;12880:9;12871:7;12867:23;12863:32;12860:52;;;12908:1;12905;12898:12;12860:52;12940:9;12934:16;12959:31;12984:5;12959:31;:::i;14145:607::-;-1:-1:-1;;;;;14504:15:1;;;14486:34;;14551:2;14536:18;;14529:34;;;;14594:2;14579:18;;14572:34;;;;14637:2;14622:18;;14615:34;;;;14686:15;;;14680:3;14665:19;;14658:44;14466:3;14718:19;;14711:35;;;;14435:3;14420:19;;14145:607::o;14757:306::-;14845:6;14853;14861;14914:2;14902:9;14893:7;14889:23;14885:32;14882:52;;;14930:1;14927;14920:12;14882:52;14959:9;14953:16;14943:26;;15009:2;14998:9;14994:18;14988:25;14978:35;;15053:2;15042:9;15038:18;15032:25;15022:35;;14757:306;;;;;:::o;17845:401::-;18047:2;18029:21;;;18086:2;18066:18;;;18059:30;18125:34;18120:2;18105:18;;18098:62;-1:-1:-1;;;18191:2:1;18176:18;;18169:35;18236:3;18221:19;;17845:401::o;18251:399::-;18453:2;18435:21;;;18492:2;18472:18;;;18465:30;18531:34;18526:2;18511:18;;18504:62;-1:-1:-1;;;18597:2:1;18582:18;;18575:33;18640:3;18625:19;;18251:399::o;19723:128::-;19790:9;;;19811:11;;;19808:37;;;19825:18;;:::i;21446:168::-;21519:9;;;21550;;21567:15;;;21561:22;;21547:37;21537:71;;21588:18;;:::i;21619:217::-;21659:1;21685;21675:132;;21729:10;21724:3;21720:20;21717:1;21710:31;21764:4;21761:1;21754:15;21792:4;21789:1;21782:15;21675:132;-1:-1:-1;21821:9:1;;21619:217::o;22537:812::-;22948:25;22943:3;22936:38;22918:3;23003:6;22997:13;23019:75;23087:6;23082:2;23077:3;23073:12;23066:4;23058:6;23054:17;23019:75;:::i;:::-;-1:-1:-1;;;23153:2:1;23113:16;;;23145:11;;;23138:40;23203:13;;23225:76;23203:13;23287:2;23279:11;;23272:4;23260:17;;23225:76;:::i;:::-;23321:17;23340:2;23317:26;;22537:812;-1:-1:-1;;;;22537:812:1:o;23354:127::-;23415:10;23410:3;23406:20;23403:1;23396:31;23446:4;23443:1;23436:15;23470:4;23467:1;23460:15;23486:980;23748:4;23796:3;23785:9;23781:19;23827:6;23816:9;23809:25;23853:2;23891:6;23886:2;23875:9;23871:18;23864:34;23934:3;23929:2;23918:9;23914:18;23907:31;23958:6;23993;23987:13;24024:6;24016;24009:22;24062:3;24051:9;24047:19;24040:26;;24101:2;24093:6;24089:15;24075:29;;24122:1;24132:195;24146:6;24143:1;24140:13;24132:195;;;24211:13;;-1:-1:-1;;;;;24207:39:1;24195:52;;24302:15;;;;24267:12;;;;24243:1;24161:9;24132:195;;;-1:-1:-1;;;;;;;24383:32:1;;;;24378:2;24363:18;;24356:60;-1:-1:-1;;;24447:3:1;24432:19;24425:35;24344:3;23486:980;-1:-1:-1;;;23486:980:1:o;24471:136::-;24510:3;24538:5;24528:39;;24547:18;;:::i;:::-;-1:-1:-1;;;24583:18:1;;24471:136::o
Swarm Source
ipfs://0504abfa6d3dd714f0e43afe1cdc7c1b63ef7d2162ed952a52d5021cafc91a3f
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)