Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 179 transactions
| Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Approve | 50030710 | 3 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 50030710 | 3 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 50030710 | 3 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 50030710 | 3 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 50030710 | 3 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49948146 | 4 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49948146 | 4 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49946177 | 4 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49946177 | 4 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49946177 | 4 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49946177 | 4 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49945764 | 4 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49945763 | 4 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49945763 | 4 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49945763 | 4 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49945115 | 4 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49945115 | 4 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49945115 | 4 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49583447 | 5 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49583447 | 5 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 49583447 | 5 days ago | IN | 0 MON | 0.0239934 | ||||
| Approve | 47769551 | 14 days ago | IN | 0 MON | 0.009189 | ||||
| Approve | 42450422 | 39 days ago | IN | 0 MON | 0.00665412 | ||||
| Approve | 41144712 | 45 days ago | IN | 0 MON | 0.00653 | ||||
| Transfer | 41067650 | 45 days ago | IN | 0 MON | 0.051 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 49948162 | 4 days ago | 17.35737566 MON | ||||
| 49948162 | 4 days ago | 52.072127 MON | ||||
| 49948162 | 4 days ago | 69.42950267 MON | ||||
| 49948162 | 4 days ago | 18.91766501 MON | ||||
| 49948162 | 4 days ago | 56.75299505 MON | ||||
| 49948162 | 4 days ago | 75.67066007 MON | ||||
| 49946437 | 4 days ago | 21.35006062 MON | ||||
| 49946437 | 4 days ago | 64.05018187 MON | ||||
| 49946437 | 4 days ago | 85.4002425 MON | ||||
| 49946437 | 4 days ago | 22.85412957 MON | ||||
| 49946437 | 4 days ago | 68.56238872 MON | ||||
| 49946437 | 4 days ago | 91.41651829 MON | ||||
| 49946341 | 4 days ago | 24.33125238 MON | ||||
| 49946341 | 4 days ago | 72.99375715 MON | ||||
| 49946341 | 4 days ago | 97.32500953 MON | ||||
| 49946329 | 4 days ago | 26.03758792 MON | ||||
| 49946329 | 4 days ago | 78.11276378 MON | ||||
| 49946329 | 4 days ago | 104.15035171 MON | ||||
| 49946207 | 4 days ago | 30.67220895 MON | ||||
| 49946207 | 4 days ago | 92.01662685 MON | ||||
| 49946207 | 4 days ago | 122.68883581 MON | ||||
| 49945939 | 4 days ago | 32.98316703 MON | ||||
| 49945939 | 4 days ago | 98.94950111 MON | ||||
| 49945939 | 4 days ago | 131.93266815 MON | ||||
| 49945866 | 4 days ago | 36.90296877 MON |
Loading...
Loading
Contract Name:
MIT
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at monadscan.com on 2025-11-28
*/
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.5;
/**
* Standard SafeMath, stripped down to just add/sub/mul/div
*/
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
// Solidity only automatically asserts when dividing by 0
require(b > 0, errorMessage);
uint256 c = a / b;
// assert(a == b * c + a % b); // There is no case in which this doesn't hold
return c;
}
}
/**
* BEP20 standard interface.
*/
interface IBEP20 {
function totalSupply() external view returns (uint256);
function decimals() external view returns (uint8);
function symbol() external view returns (string memory);
function name() external view returns (string memory);
function getOwner() external view returns (address);
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);
}
/**
* Allows for contract ownership for multiple adressess
*/
abstract contract Auth {
address internal owner;
mapping (address => bool) internal authorizations;
constructor(address _owner) {
owner = _owner;
authorizations[_owner] = true;
}
/**
* Function modifier to require caller to be contract owner
*/
modifier onlyOwner() {
require(isOwner(msg.sender), "!OWNER"); _;
}
/**
* Function modifier to require caller to be authorized
*/
modifier authorized() {
require(isAuthorized(msg.sender), "!AUTHORIZED"); _;
}
/**
* Authorize address. Owner only
*/
function authorize(address account) public onlyOwner {
authorizations[account] = true;
}
/**
* Remove address authorization. Owner only
*/
function unauthorize(address account) public onlyOwner {
authorizations[account] = false;
}
/**
* Check if address is owner
*/
function isOwner(address account) public view returns (bool) {
return account == owner;
}
/**
* Return address authorization status
*/
function isAuthorized(address account) public view returns (bool) {
return authorizations[account];
}
/**
* Transfer ownership to new address. Caller must be owner. Leaves old owner authorized
*/
function transferOwnership(address payable account) public onlyOwner {
owner = account;
authorizations[account] = true;
emit OwnershipTransferred(account);
}
event OwnershipTransferred(address owner);
}
/* Standard IDEXFactory */
interface IDEXFactory {
function createPair(address tokenA, address tokenB) external returns (address pair);
}
/* Standard IDEXRouter */
interface IDEXRouter {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
/* Interface for the DividendDistributor */
interface IDividendDistributor {
function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external;
// setRewardToken is removed as we now distribute native ETH
function setShare(address shareholder, uint256 amount) external;
function deposit() external payable;
function process(uint256 gas) external;
// Function to let the distributor accept native currency
function receiveETH() external payable;
function rescueETH() external;
}
/* Minimal interface to read token deployer from token contract (used by distributor) */
interface Idistrohelper {
function tokenDeployer() external view returns (address);
}
/**
* Our DividendDistributor contract responsible for distributing the Native ETH (e.g., BNB)
*/
contract DividendDistributor is IDividendDistributor {
using SafeMath for uint256;
address _token;
struct Share {
uint256 amount;
uint256 totalExcluded;
uint256 totalRealised;
}
address[] shareholders;
mapping (address => uint256) shareholderIndexes;
mapping (address => uint256) shareholderClaims;
mapping (address => Share) public shares;
uint256 public totalShares;
uint256 public totalDividends;
uint256 public totalDistributed;
uint256 public dividendsPerShare;
uint256 public dividendsPerShareAccuracyFactor = 10 ** 36;
uint256 public minPeriod = 60 * 60; // 1 hour
uint256 public minDistribution = 1 * (10 ** 12); // Minimum amount of ETH to distribute (0.000001 ETH)
uint256 currentIndex;
bool initialized;
modifier initialization() {
require(!initialized);
_;
initialized = true;
}
modifier onlyToken() {
require(msg.sender == _token); _;
}
// The router is no longer needed since we are not swapping ETH to an ERC20 token.
constructor (address) {
_token = msg.sender;
}
// New function to receive native currency (ETH/BNB) sent from swapBack
function receiveETH() external payable override onlyToken {
deposit();
}
// Deposit function simplified for native ETH distribution
function deposit() public payable override onlyToken {
uint256 amount = msg.value; // The ETH sent from swapBack()
// Guard against division by zero if there are no shares
if (totalShares == 0) {
totalDividends = totalDividends.add(amount);
return;
}
// No conversion to an ERC20 token needed. Update dividend variables based on received ETH value.
totalDividends = totalDividends.add(amount);
dividendsPerShare = dividendsPerShare.add(dividendsPerShareAccuracyFactor.mul(amount).div(totalShares));
}
function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external override onlyToken {
minPeriod = _minPeriod;
minDistribution = _minDistribution;
}
function setShare(address shareholder, uint256 amount) external override onlyToken {
if(shares[shareholder].amount > 0){
distributeDividend(shareholder);
}
if(amount > 0 && shares[shareholder].amount == 0){
addShareholder(shareholder);
}else if(amount == 0 && shares[shareholder].amount > 0){
removeShareholder(shareholder);
}
totalShares = totalShares.sub(shares[shareholder].amount).add(amount);
shares[shareholder].amount = amount;
shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
}
function process(uint256 gas) external override onlyToken {
uint256 shareholderCount = shareholders.length;
if(shareholderCount == 0) { return; }
uint256 gasUsed = 0;
uint256 gasLeft = gasleft();
uint256 iterations = 0;
while(gasUsed < gas && iterations < shareholderCount) {
if(currentIndex >= shareholderCount){
currentIndex = 0;
}
if(shouldDistribute(shareholders[currentIndex])){
distributeDividend(shareholders[currentIndex]);
}
gasUsed = gasUsed.add(gasLeft.sub(gasleft()));
gasLeft = gasleft();
currentIndex++;
iterations++;
}
}
function shouldDistribute(address shareholder) internal view returns (bool) {
return shareholderClaims[shareholder] + minPeriod < block.timestamp
&& getUnpaidEarnings(shareholder) > minDistribution;
}
function distributeDividend(address shareholder) internal {
if(shares[shareholder].amount == 0){ return; }
uint256 amount = getUnpaidEarnings(shareholder);
if(amount > 0){
totalDistributed = totalDistributed.add(amount);
// Transfer native ETH (BNB) directly
// Effects before interaction to reduce reentrancy risks
shareholderClaims[shareholder] = block.timestamp;
shares[shareholder].totalRealised = shares[shareholder].totalRealised.add(amount);
shares[shareholder].totalExcluded = getCumulativeDividends(shares[shareholder].amount);
(bool success, ) = payable(shareholder).call{value: amount}("");
require(success, "ETH transfer failed");
}
}
function claimDividend(address shareholder) external onlyToken{
distributeDividend(shareholder);
}
function getUnpaidEarnings(address shareholder) public view returns (uint256) {
if(shares[shareholder].amount == 0){ return 0; }
uint256 shareholderTotalDividends = getCumulativeDividends(shares[shareholder].amount);
uint256 shareholderTotalExcluded = shares[shareholder].totalExcluded;
if(shareholderTotalDividends <= shareholderTotalExcluded){ return 0; }
return shareholderTotalDividends.sub(shareholderTotalExcluded);
}
function getCumulativeDividends(uint256 share) internal view returns (uint256) {
return share.mul(dividendsPerShare).div(dividendsPerShareAccuracyFactor);
}
function addShareholder(address shareholder) internal {
shareholderIndexes[shareholder] = shareholders.length;
shareholders.push(shareholder);
}
function removeShareholder(address shareholder) internal {
shareholders[shareholderIndexes[shareholder]] = shareholders[shareholders.length-1];
shareholderIndexes[shareholders[shareholders.length-1]] = shareholderIndexes[shareholder];
shareholders.pop();
}
// -------------------------------------------------------------
// Rescue leftover ETH to the token deployer wallet (SAFE: Option A)
// Only callable by token contract (onlyToken). The distributor reads
// the deployer from the token contract and forwards the entire balance.
// -------------------------------------------------------------
function rescueETH() external override onlyToken {
uint256 amount = address(this).balance;
require(amount > 0, "No ETH to rescue");
// Read deployer address from token contract (safe lookup)
address deployer = Idistrohelper(_token).tokenDeployer();
require(deployer != address(0), "Invalid deployer");
(bool success, ) = payable(deployer).call{value: amount}("");
require(success, "Rescue failed");
}
}
/* Token contract */
contract MIT is IBEP20, Auth {
using SafeMath for uint256;
// Addresses
// The USDC address is removed as rewards are now native ETH
address WETH = 0x3bd359C1119dA7Da1D913D1C4D2B7c461115433A;
address DEAD = 0x000000000000000000000000000000000000dEaD;
address ZERO = 0x0000000000000000000000000000000000000000;
address TOKENDISTRIBUTOR;
// These are owner by default
address public autoLiquidityReceiver;
address public marketingFeeReceiver;
address public devFeeReceiver;
// Name and symbol
string constant _name = "Monad Island Treasury";
string constant _symbol = "$MIT";
uint8 constant _decimals = 18;
// Total supply
uint256 _totalSupply = 1000000000 * (10 ** _decimals);
// Max wallet and TX
uint256 public _maxBuyTxAmount = _totalSupply * 300 / 10000; // 3%
uint256 public _maxSellTxAmount = _totalSupply * 300 / 10000; // 3%
uint256 public _maxWalletToken = ( _totalSupply * 300 ) / 10000; // 3%
// Mappings
mapping (address => uint256) _balances;
mapping (address => mapping (address => uint256)) _allowances;
mapping (address => bool) isFeeExempt;
mapping (address => bool) isTxLimitExempt;
mapping (address => bool) isTimelockExempt;
mapping (address => bool) isDividendExempt;
// Buy Fees
uint256 liquidityFeeBuy = 0;
uint256 reflectionFeeBuy = 600;
uint256 marketingFeeBuy = 200;
uint256 totalFeeBuy = 800;
// Sell fees
uint256 liquidityFeeSell = 0;
uint256 reflectionFeeSell = 600;
uint256 marketingFeeSell = 200;
uint256 totalFeeSell = 800;
// Fee variables
uint256 liquidityFee;
uint256 devFee;
uint256 reflectionFee;
uint256 marketingFee;
uint256 totalFee;
uint256 feeDenominator = 10000;
// Sell amount of tokens when a sell takes place
uint256 public swapThreshold = _totalSupply * 20 / 10000; // 0.2% of supply
// Liquidity
uint256 targetLiquidity = 40;
uint256 targetLiquidityDenominator = 100;
DividendDistributor distributor;
uint256 distributorGas = 500000;
// Cooldown & timer functionality
// NOTE: Solidity uses Unix timestamp so 1 is 1 second.
bool public buyCooldownEnabled = true;
uint8 public cooldownTimerInterval = 5;
mapping (address => uint) private cooldownTimer;
// Other variables
IDEXRouter public router;
address public pair;
uint256 public launchedAt;
bool public tradingOpen = false;
bool public swapEnabled = true;
bool inSwap;
modifier swapping() { inSwap = true; _; inSwap = false; }
// ADDED: deployer address saved at deployment (the wallet that deployed the token)
address public tokenDeployer;
/* Token constructor */
constructor () Auth(msg.sender) {
// Assuming this router address and WETH address are correct for the target chain
router = IDEXRouter(0x4B2ab38DBF28D31D467aA8993f6c2585981D6804);
pair = IDEXFactory(router.factory()).createPair(WETH, address(this));
_allowances[address(this)][address(router)] = type(uint256).max;
// Pass 0x0 to the distributor as it no longer needs the router address
distributor = new DividendDistributor(address(0));
// The token needs to approve the distributor to spend the reflection portion of WETH/ETH
// This is no longer required because we send native ETH via {value: ...}
// Should be the owner wallet/token distributor
TOKENDISTRIBUTOR = msg.sender;
address _presaler = msg.sender;
isFeeExempt[_presaler] = true;
isTxLimitExempt[_presaler] = true;
isTxLimitExempt[DEAD] = true;
isFeeExempt[DEAD] = true;
isFeeExempt[0x2580253c3Be524651265A777DB675D5Ce88a41C7] = true;
// No timelock for these people
isTimelockExempt[msg.sender] = true;
isTimelockExempt[DEAD] = true;
isTimelockExempt[address(this)] = true;
// Exempt from dividend
isDividendExempt[pair] = true;
isDividendExempt[address(this)] = true;
isDividendExempt[DEAD] = true;
isDividendExempt[address(distributor)] = true; // Exclude distributor itself
// Set the marketing and liq receiver to the owner as default
autoLiquidityReceiver = msg.sender;
marketingFeeReceiver = 0x2580253c3Be524651265A777DB675D5Ce88a41C7;
_balances[_presaler] = _totalSupply;
emit Transfer(address(0), _presaler, _totalSupply);
// ADDED: store deployer wallet
tokenDeployer = msg.sender;
}
receive() external payable { }
function totalSupply() external view override returns (uint256) { return _totalSupply; }
function decimals() external pure override returns (uint8) { return _decimals; }
function symbol() external pure override returns (string memory) { return _symbol; }
function name() external pure override returns (string memory) { return _name; }
function getOwner() external view override returns (address) { return owner; }
function balanceOf(address account) public view override returns (uint256) { return _balances[account]; }
function allowance(address holder, address spender) external view override returns (uint256) { return _allowances[holder][spender]; }
function approve(address spender, uint256 amount) public override returns (bool) {
_allowances[msg.sender][spender] = amount;
emit Approval(msg.sender, spender, amount);
return true;
}
function approveMax(address spender) external returns (bool) {
return approve(spender, type(uint256).max);
}
function transfer(address recipient, uint256 amount) external override returns (bool) {
return _transferFrom(msg.sender, recipient, amount);
}
function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
if(_allowances[sender][msg.sender] != type(uint256).max){
_allowances[sender][msg.sender] = _allowances[sender][msg.sender].sub(amount, "Insufficient Allowance");
}
return _transferFrom(sender, recipient, amount);
}
// setting the max wallet in percentages
// NOTE: 1% = 100
function setMaxWalletPercent(uint256 maxWallPercent) external onlyOwner() {
_maxWalletToken = _totalSupply.mul(maxWallPercent).div(10000);
}
// Set the tokendistributor, exempt for everything and able to SEND before launch.
function setTokenDistributor(address _tokenDistributor) external authorized{
TOKENDISTRIBUTOR = _tokenDistributor;
isFeeExempt[_tokenDistributor] = true;
isTxLimitExempt[_tokenDistributor] = true;
isTimelockExempt[_tokenDistributor] = true;
}
// Main transfer function
function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
if(inSwap){ return _basicTransfer(sender, recipient, amount); }
// Check if trading is enabled
if(!authorizations[sender] && !authorizations[recipient] && TOKENDISTRIBUTOR != sender){
require(tradingOpen,"Trading not enabled yet");
}
// Check if buying or selling
bool isBuy = sender == pair;
bool isSell = recipient == pair;
// Set buy or sell fees
setCorrectFees(isSell);
// Check max wallet
checkMaxWallet(sender, recipient, amount);
// Buycooldown
checkBuyCooldown(sender, recipient);
// Checks maxTx
checkTxLimit(sender, amount, recipient, isSell);
// Check if we should do the swapback
if(shouldSwapBack()){ swapBack(); }
// NEW: wallet-to-wallet → no fees
if (!isSell && !isBuy) {
liquidityFee = 0;
reflectionFee = 0;
marketingFee = 0;
totalFee = 0;
}
//Exchange tokens
_balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
uint256 amountReceived = shouldTakeFee(sender) ? takeFee(sender, amount) : amount;
_balances[recipient] = _balances[recipient].add(amountReceived);
// Dividend tracker
if(!isDividendExempt[sender]) {
try distributor.setShare(sender, _balances[sender]) {} catch {}
}
if(!isDividendExempt[recipient]) {
try distributor.setShare(recipient, _balances[recipient]) {} catch {}
}
try distributor.process(distributorGas) {} catch {}
emit Transfer(sender, recipient, amountReceived);
return true;
}
// Do a normal transfer
function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
_balances[sender] = _balances[sender].sub(amount, "Insufficient Balance");
_balances[recipient] = _balances[recipient].add(amount);
emit Transfer(sender, recipient, amount);
return true;
}
// Set the correct fees for buying or selling
function setCorrectFees(bool isSell) internal {
if(isSell){
liquidityFee = liquidityFeeSell;
reflectionFee = reflectionFeeSell;
marketingFee = marketingFeeSell;
totalFee = totalFeeSell;
} else {
liquidityFee = liquidityFeeBuy;
reflectionFee = reflectionFeeBuy;
marketingFee = marketingFeeBuy;
totalFee = totalFeeBuy;
}
}
// Check for maxTX
function checkTxLimit(address sender, uint256 amount, address recipient, bool isSell) internal view {
if (recipient != owner){
if(isSell){
require(amount <= _maxSellTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
} else {
require(amount <= _maxBuyTxAmount || isTxLimitExempt[sender] || isTxLimitExempt[recipient], "TX Limit Exceeded");
}
}
}
// Check buy cooldown
function checkBuyCooldown(address sender, address recipient) internal {
if (sender == pair &&
buyCooldownEnabled &&
!isTimelockExempt[recipient]) {
require(cooldownTimer[recipient] < block.timestamp,"Please wait between two buys");
cooldownTimer[recipient] = block.timestamp + cooldownTimerInterval;
}
}
// Check maxWallet
function checkMaxWallet(address sender, address recipient, uint256 amount) internal view {
if (!authorizations[sender] && !isTxLimitExempt[sender] && !isTxLimitExempt[recipient] && recipient != owner && recipient != address(this) && recipient != address(DEAD) && recipient != pair && recipient != marketingFeeReceiver && recipient != autoLiquidityReceiver && recipient != devFeeReceiver){
uint256 heldTokens = balanceOf(recipient);
require((heldTokens + amount) <= _maxWalletToken,"Total Holding is currently limited, you can not buy that much.");
}
}
// Check if sender is not feeExempt
function shouldTakeFee(address sender) internal view returns (bool) {
return !isFeeExempt[sender];
}
// Take the normal total Fee
function takeFee(address sender, uint256 amount) internal returns (uint256) {
uint256 feeAmount = amount.mul(totalFee).div(feeDenominator);
_balances[address(this)] = _balances[address(this)].add(feeAmount);
emit Transfer(sender, address(this), feeAmount);
return amount.sub(feeAmount);
}
// Check if we should sell tokens
function shouldSwapBack() internal view returns (bool) {
return msg.sender != pair
&& !inSwap
&& swapEnabled
&& _balances[address(this)] >= swapThreshold;
}
// switch Trading
function tradingStatus(bool _status) public onlyOwner {
tradingOpen = _status;
}
// Enable cooldown between trades
function cooldownEnabled(bool _status, uint8 _interval) public onlyOwner {
buyCooldownEnabled = _status;
cooldownTimerInterval = _interval;
}
// Main swapback to sell tokens for WETH
function swapBack() internal swapping {
uint256 dynamicLiquidityFee = isOverLiquified(targetLiquidity, targetLiquidityDenominator) ? 0 : liquidityFee;
uint256 amountToLiquify = swapThreshold.mul(dynamicLiquidityFee).div(totalFee).div(2);
uint256 amountToSwap = swapThreshold.sub(amountToLiquify);
address[] memory path = new address[](2);
path[0] = address(this);
path[1] = WETH; // WETH is the native wrapped token
uint256 balanceBefore = address(this).balance;
// 1. Swap the tokens for native ETH
router.swapExactTokensForETHSupportingFeeOnTransferTokens(
amountToSwap,
0,
path,
address(this),
block.timestamp
);
uint256 amountWETH = address(this).balance.sub(balanceBefore);
uint256 totalWETHFee = totalFee.sub(dynamicLiquidityFee.div(2)); // Total fee going into WETH/ETH
uint256 amountWETHLiquidity = amountWETH.mul(dynamicLiquidityFee).div(totalWETHFee).div(2);
uint256 amountWETHReflection = amountWETH.mul(reflectionFee).div(totalWETHFee);
uint256 amountWETHMarketing = amountWETH.mul(marketingFee).div(totalWETHFee);
// 2. Distribute ETH
// Send the reflection ETH to the distributor
try distributor.receiveETH{value: amountWETHReflection}() {} catch {}
// Send the marketing and dev fees
(bool successMarketing, /* bytes memory data */) = payable(marketingFeeReceiver).call{value: amountWETHMarketing, gas: 30000}("");
require(successMarketing, "marketing receiver rejected ETH transfer");
// 3. Add Liquidity
if(amountToLiquify > 0){
router.addLiquidityETH{value: amountWETHLiquidity}(
address(this),
amountToLiquify,
0,
0,
autoLiquidityReceiver,
block.timestamp
);
emit AutoLiquify(amountWETHLiquidity, amountToLiquify);
}
}
// Buy amount of tokens with WETH from the contract
function buyTokens(uint256 amount, address to) internal swapping {
address[] memory path = new address[](2);
path[0] = WETH;
path[1] = address(this);
router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount}(
0,
path,
to,
block.timestamp
);
}
// Check when the token is launched
function launched() internal view returns (bool) {
return launchedAt != 0;
}
// Set the launchedAt to token launch
function launch() internal {
launchedAt = block.number;
}
// Set max buy TX
function setBuyTxLimitInPercent(uint256 maxBuyTxPercent) external onlyOwner {
_maxBuyTxAmount = _totalSupply.mul(maxBuyTxPercent).div(10000);
}
// Set max sell TX
function setSellTxLimitInPercent(uint256 maxSellTxPercent) external onlyOwner {
_maxSellTxAmount = _totalSupply.mul(maxSellTxPercent).div(10000);
}
// Exempt from dividend
function setIsDividendExempt(address holder, bool exempt) external authorized {
require(holder != address(this) && holder != pair);
isDividendExempt[holder] = exempt;
if(exempt){
distributor.setShare(holder, 0);
}else{
distributor.setShare(holder, _balances[holder]);
}
}
// Exempt from fee
function setIsFeeExempt(address holder, bool exempt) external authorized {
isFeeExempt[holder] = exempt;
}
// Exempt from max TX
function setIsTxLimitExempt(address holder, bool exempt) external authorized {
isTxLimitExempt[holder] = exempt;
}
// Exempt from buy CD
function setIsTimelockExempt(address holder, bool exempt) external authorized {
isTimelockExempt[holder] = exempt;
}
function setFullWhitelist(address holder, bool exempt) external authorized {
isTxLimitExempt[holder] = exempt;
isFeeExempt[holder] = exempt;
isTimelockExempt[holder] = exempt;
}
// Set our buy fees
function setBuyFees(uint256 _liquidityFeeBuy, uint256 _reflectionFeeBuy, uint256 _marketingFeeBuy, uint256 _feeDenominator) external onlyOwner {
liquidityFeeBuy = _liquidityFeeBuy;
reflectionFeeBuy = _reflectionFeeBuy;
marketingFeeBuy = _marketingFeeBuy;
totalFeeBuy = _liquidityFeeBuy.add(_reflectionFeeBuy).add(_marketingFeeBuy);
feeDenominator = _feeDenominator;
}
// Set our sell fees
function setSellFees(uint256 _liquidityFeeSell, uint256 _reflectionFeeSell, uint256 _marketingFeeSell, uint256 _feeDenominator) external onlyOwner {
liquidityFeeSell = _liquidityFeeSell;
reflectionFeeSell = _reflectionFeeSell;
marketingFeeSell = _marketingFeeSell;
totalFeeSell = _liquidityFeeSell.add(_reflectionFeeSell).add(_marketingFeeSell);
feeDenominator = _feeDenominator;
}
// Set the marketing and liquidity receivers
function setFeeReceivers(address _autoLiquidityReceiver, address _marketingFeeReceiver) external authorized {
autoLiquidityReceiver = _autoLiquidityReceiver;
marketingFeeReceiver = _marketingFeeReceiver;
}
// Set swapBack settings
function setSwapBackSettings(bool _enabled, uint256 _amount) external authorized {
swapEnabled = _enabled;
swapThreshold = _totalSupply * _amount / 10000;
}
// Set target liquidity
function setTargetLiquidity(uint256 _target, uint256 _denominator) external authorized {
targetLiquidity = _target;
targetLiquidityDenominator = _denominator;
}
// Save spare ETH from CA
function manualSend() external {
require(msg.sender == tokenDeployer, "Not token deployer");
uint256 contractETHBalance = address(this).balance;
payable(tokenDeployer).transfer(contractETHBalance);
}
// Set criteria for auto distribution
function setDistributionCriteria(uint256 _minPeriod, uint256 _minDistribution) external authorized {
distributor.setDistributionCriteria(_minPeriod, _minDistribution);
}
// Let people claim there dividend
function claimDividend() external {
// The token calls the distributor's function, acting as a middleman for the user
// Note: The original code intended for the user to call the distributor directly,
// but since we keep the original function signature, we'll route it via the token.
// However, since the distributor's distributeDividend is internal, we must call
// the claimDividend function in the distributor, which must be made public/external
// and authorized to be called by the token.
// Since the original claimDividend in the distributor was onlyToken, we must fix this in the distributor.
// For simplicity and to use the current `claimDividend` function of the distributor,
// which the token *is* authorized to call:
distributor.claimDividend(msg.sender);
}
// The setRewardToken function is removed as rewards are now native ETH
// Check how much earnings are unpaid
function getUnpaidEarnings(address shareholder) public view returns (uint256) {
return distributor.getUnpaidEarnings(shareholder);
}
// Set gas for distributor
function setDistributorSettings(uint256 gas) external authorized {
require(gas < 750000);
distributorGas = gas;
}
// Get the circulatingSupply
function getCirculatingSupply() public view returns (uint256) {
return _totalSupply.sub(balanceOf(DEAD)).sub(balanceOf(ZERO));
}
// Get the liquidity backing
function getLiquidityBacking(uint256 accuracy) public view returns (uint256) {
return accuracy.mul(balanceOf(pair).mul(2)).div(getCirculatingSupply());
}
// Get if we are over liquified or not
function isOverLiquified(uint256 target, uint256 accuracy) public view returns (bool) {
return getLiquidityBacking(accuracy) > target;
}
event AutoLiquify(uint256 amountWETH, uint256 amountBOG);
// -------------------------------------------------------------
// ADDED: Rescue unused distributor ETH to the token deployer
// Only callable by the original deployer wallet (tokenDeployer).
// -------------------------------------------------------------
function rescueDistributorETH() external {
require(msg.sender == tokenDeployer, "Only deployer");
distributor.rescueETH();
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountWETH","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amountBOG","type":"uint256"}],"name":"AutoLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"owner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_maxBuyTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSellTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","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":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"authorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoLiquidityReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"buyCooldownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"},{"internalType":"uint8","name":"_interval","type":"uint8"}],"name":"cooldownEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"cooldownTimerInterval","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"devFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"getLiquidityBacking","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"shareholder","type":"address"}],"name":"getUnpaidEarnings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isAuthorized","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"target","type":"uint256"},{"internalType":"uint256","name":"accuracy","type":"uint256"}],"name":"isOverLiquified","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchedAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingFeeReceiver","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rescueDistributorETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeBuy","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuyTxPercent","type":"uint256"}],"name":"setBuyTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_minPeriod","type":"uint256"},{"internalType":"uint256","name":"_minDistribution","type":"uint256"}],"name":"setDistributionCriteria","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gas","type":"uint256"}],"name":"setDistributorSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_autoLiquidityReceiver","type":"address"},{"internalType":"address","name":"_marketingFeeReceiver","type":"address"}],"name":"setFeeReceivers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setFullWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsDividendExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTimelockExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxWallPercent","type":"uint256"}],"name":"setMaxWalletPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidityFeeSell","type":"uint256"},{"internalType":"uint256","name":"_reflectionFeeSell","type":"uint256"},{"internalType":"uint256","name":"_marketingFeeSell","type":"uint256"},{"internalType":"uint256","name":"_feeDenominator","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSellTxPercent","type":"uint256"}],"name":"setSellTxLimitInPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_target","type":"uint256"},{"internalType":"uint256","name":"_denominator","type":"uint256"}],"name":"setTargetLiquidity","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenDistributor","type":"address"}],"name":"setTokenDistributor","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"tokenDeployer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_status","type":"bool"}],"name":"tradingStatus","outputs":[],"stateMutability":"nonpayable","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":[{"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 payable","name":"account","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unauthorize","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
6080604052600280546001600160a01b0319908116733bd359c1119da7da1d913d1c4d2b7c461115433a1790915560038054821661dead179055600480549091169055620000506012600a6200058b565b6200006090633b9aca006200064c565b60095561271060095461012c6200007891906200064c565b6200008491906200051f565b600a5561271060095461012c6200009c91906200064c565b620000a891906200051f565b600b5561271060095461012c620000c091906200064c565b620000cc91906200051f565b600c55600060135561025860145560c8601555610320601655600060175561025860185560c8601955610320601a5561271060205561271060095460146200011591906200064c565b6200012191906200051f565b602155602860225560646023556207a1206025556026805461050161ffff1991821617909155602b80549091166101001790553480156200016157600080fd5b5060008054336001600160a01b031991821681178355825260016020818152604093849020805460ff191690921790915560288054734b2ab38dbf28d31d467aa8993f6c2585981d6804931683179055825163c45a015560e01b81529251919263c45a01559260048083019392829003018186803b158015620001e357600080fd5b505afa158015620001f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200021e9190620004ed565b6002546040516364e329cb60e11b81526001600160a01b03918216600482015230602482015291169063c9c6539690604401602060405180830381600087803b1580156200026b57600080fd5b505af115801562000280573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002a69190620004ed565b602980546001600160a01b0319166001600160a01b03928316179055306000908152600e60209081526040808320602854909416835292905281812060001990559051620002f490620004df565b6001600160a01b039091168152602001604051809103906000f08015801562000321573d6000803e3d6000fd5b50602480546001600160a01b039283166001600160a01b0319918216178255600580548216339081179091556000818152600f60208181526040808420805460ff199081166001908117909255601084528286208054821683179055600380548b168752838720805483168417905580548b16875294845282862080548216831790557f46d85a7d5a48f4a465e2857a614cfe82e753b2b7ebb58ea2aff767d29b47c270805482168317905586865260118452828620805482168317905584548a16865282862080548216831790553080875283872080548316841790556029548b16875260128552838720805483168417905586528286208054821683179055935489168552818520805485168217905596549097168352868320805490921690951790556006805484168317905560078054909316732580253c3be524651265a777db675d5ce88a41c717909255600954818352600d909352838220839055925183927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620004b591815260200190565b60405180910390a350602b80546301000000600160b81b0319163363010000000217905562000684565b610faa806200314383390190565b6000602082840312156200050057600080fd5b81516001600160a01b03811681146200051857600080fd5b9392505050565b6000826200053d57634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115620005835781600019048211156200056757620005676200066e565b808516156200057557918102915b93841c939080029062000547565b509250929050565b60006200051860ff841683600082620005a75750600162000646565b81620005b65750600062000646565b8160018114620005cf5760028114620005da57620005fa565b600191505062000646565b60ff841115620005ee57620005ee6200066e565b50506001821b62000646565b5060208310610133831016604e8410600b84101617156200061f575081810a62000646565b6200062b838362000542565b80600019048211156200064257620006426200066e565b0290505b92915050565b60008160001904831182151516156200066957620006696200066e565b500290565b634e487b7160e01b600052601160045260246000fd5b612aaf80620006946000396000f3fe60806040526004361061036f5760003560e01c806382bf293c116101c6578063dd62ed3e116100f7578063f2fde38b11610095578063f84ba65d1161006f578063f84ba65d14610a4d578063f887ea4014610a6d578063fe9fbb8014610a8d578063ffb54a9914610aad57600080fd5b8063f2fde38b146109f8578063f429389014610a18578063f708a64f14610a2d57600080fd5b8063e086299a116100d1578063e086299a1461098e578063e96fada2146109a3578063f0b37c04146109c3578063f0fc6bca146109e357600080fd5b8063dd62ed3e14610908578063df20fd491461094e578063df4a76c51461096e57600080fd5b8063a9059cbb11610164578063ca33e64c1161013e578063ca33e64c14610892578063cf4be394146108b2578063d51ed1c8146108c8578063dab84ee7146108e857600080fd5b8063a9059cbb1461083c578063b6a5d7de1461085c578063bf56b3711461087c57600080fd5b80639d1944f5116101a05780639d1944f5146107bc578063a4b45c00146107dc578063a6b06a27146107fc578063a8aa1b311461081c57600080fd5b806382bf293c14610751578063893d20e81461077157806395d89b411461078f57600080fd5b80632f54bf6e116102a0578063658d4b7f1161023e57806370a082311161021857806370a08231146106c6578063722b62ad146106fc57806378109e541461071b5780637affa29b1461073157600080fd5b8063658d4b7f146106675780636c5b2855146106875780636ddd1713146106a757600080fd5b806338280e6b1161027a57806338280e6b146105ed57806350db71fb1461060d578063571ac8b01461062d578063617fe0ed1461064d57600080fd5b80632f54bf6e14610586578063313ce567146105b557806333477327146105d757600080fd5b8063201e79911161030d5780632a2dae0a116102e75780632a2dae0a146104f25780632b112e49146105315780632d48e896146105465780632d5945671461056657600080fd5b8063201e79911461049257806323b872dd146104b257806328fd3198146104d257600080fd5b80630d295980116103495780630d2959801461041b5780631161ae391461043d578063178d9b8e1461045d57806318160ddd1461047d57600080fd5b80630445b6671461037b57806306fdde03146103a4578063095ea7b3146103eb57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039160215481565b6040519081526020015b60405180910390f35b3480156103b057600080fd5b506040805180820190915260158152744d6f6e61642049736c616e6420547265617375727960581b60208201525b60405161039b91906128bd565b3480156103f757600080fd5b5061040b610406366004612774565b610ac7565b604051901515815260200161039b565b34801561042757600080fd5b5061043b6104363660046127a0565b610b34565b005b34801561044957600080fd5b5061040b61045836600461283b565b610b7a565b34801561046957600080fd5b5061043b61047836600461288b565b610b8e565b34801561048957600080fd5b50600954610391565b34801561049e57600080fd5b5061043b6104ad36600461283b565b610be6565b3480156104be57600080fd5b5061040b6104cd3660046126fe565b610c16565b3480156104de57600080fd5b506103916104ed3660046126a8565b610cd8565b3480156104fe57600080fd5b50602b5461051990630100000090046001600160a01b031681565b6040516001600160a01b03909116815260200161039b565b34801561053d57600080fd5b50610391610d56565b34801561055257600080fd5b5061043b61056136600461283b565b610da8565b34801561057257600080fd5b5061043b6105813660046127d7565b610e35565b34801561059257600080fd5b5061040b6105a13660046126a8565b6000546001600160a01b0391821691161490565b3480156105c157600080fd5b5060125b60405160ff909116815260200161039b565b3480156105e357600080fd5b50610391600a5481565b3480156105f957600080fd5b5061043b6106083660046126a8565b610e86565b34801561061957600080fd5b5061043b61062836600461273f565b610f0d565b34801561063957600080fd5b5061040b6106483660046126a8565b610f5d565b34801561065957600080fd5b5060265461040b9060ff1681565b34801561067357600080fd5b5061043b61068236600461273f565b610f6b565b34801561069357600080fd5b5061043b6106a236600461288b565b610fbb565b3480156106b357600080fd5b50602b5461040b90610100900460ff1681565b3480156106d257600080fd5b506103916106e13660046126a8565b6001600160a01b03166000908152600d602052604090205490565b34801561070857600080fd5b506026546105c590610100900460ff1681565b34801561072757600080fd5b50610391600c5481565b34801561073d57600080fd5b5061043b61074c366004612809565b61100d565b34801561075d57600080fd5b5061043b61076c366004612809565b61105e565b34801561077d57600080fd5b506000546001600160a01b0316610519565b34801561079b57600080fd5b506040805180820190915260048152630913525560e21b60208201526103de565b3480156107c857600080fd5b5061043b6107d7366004612809565b6110a9565b3480156107e857600080fd5b5061043b6107f73660046126c5565b6110e2565b34801561080857600080fd5b5061043b61081736600461273f565b611135565b34801561082857600080fd5b50602954610519906001600160a01b031681565b34801561084857600080fd5b5061040b610857366004612774565b6111a7565b34801561086857600080fd5b5061043b6108773660046126a8565b6111b4565b34801561088857600080fd5b50610391602a5481565b34801561089e57600080fd5b50600654610519906001600160a01b031681565b3480156108be57600080fd5b50610391600b5481565b3480156108d457600080fd5b506103916108e3366004612809565b611205565b3480156108f457600080fd5b50600854610519906001600160a01b031681565b34801561091457600080fd5b506103916109233660046126c5565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b34801561095a57600080fd5b5061043b6109693660046127bb565b611243565b34801561097a57600080fd5b5061043b610989366004612809565b61129e565b34801561099a57600080fd5b5061043b6112e9565b3480156109af57600080fd5b50600754610519906001600160a01b031681565b3480156109cf57600080fd5b5061043b6109de3660046126a8565b6113a4565b3480156109ef57600080fd5b5061043b6113ef565b348015610a0457600080fd5b5061043b610a133660046126a8565b611433565b348015610a2457600080fd5b5061043b6114c9565b348015610a3957600080fd5b5061043b610a4836600461273f565b611564565b348015610a5957600080fd5b5061043b610a6836600461273f565b61166c565b348015610a7957600080fd5b50602854610519906001600160a01b031681565b348015610a9957600080fd5b5061040b610aa83660046126a8565b6116bc565b348015610ab957600080fd5b50602b5461040b9060ff1681565b336000818152600e602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b229086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b675760405162461bcd60e51b8152600401610b5e90612912565b60405180910390fd5b602b805460ff1916911515919091179055565b600082610b8683611205565b119392505050565b6000546001600160a01b03163314610bb85760405162461bcd60e51b8152600401610b5e90612912565b601384905560148390556015829055610bdb82610bd586866116da565b906116da565b601655602055505050565b610bef336116bc565b610c0b5760405162461bcd60e51b8152600401610b5e90612932565b602291909155602355565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914610cc3576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054610c9e918490611739565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b610cce848484611773565b90505b9392505050565b6024805460405163051fa63360e31b81526001600160a01b0384811660048301526000939216916328fd3198910160206040518083038186803b158015610d1e57600080fd5b505afa158015610d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e9190612822565b6004546001600160a01b03166000908152600d6020526040812054610da3906003546001600160a01b03166000908152600d6020526040902054610d9d9060095490611b76565b90611b76565b905090565b610db1336116bc565b610dcd5760405162461bcd60e51b8152600401610b5e90612932565b602480546040516316a4744b60e11b8152600481018590529182018390526001600160a01b031690632d48e896906044015b600060405180830381600087803b158015610e1957600080fd5b505af1158015610e2d573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e5f5760405162461bcd60e51b8152600401610b5e90612912565b6026805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b610e8f336116bc565b610eab5760405162461bcd60e51b8152600401610b5e90612932565b600580546001600160a01b039092166001600160a01b0319909216821790556000908152600f60209081526040808320805460ff1990811660019081179092556010845282852080548216831790556011909352922080549091169091179055565b610f16336116bc565b610f325760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000610b2e82600019610ac7565b610f74336116bc565b610f905760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fe55760405162461bcd60e51b8152600401610b5e90612912565b60178490556018839055601982905561100282610bd586866116da565b601a55602055505050565b6000546001600160a01b031633146110375760405162461bcd60e51b8152600401610b5e90612912565b61105861271061105283600954611bb890919063ffffffff16565b90611c37565b600a5550565b6000546001600160a01b031633146110885760405162461bcd60e51b8152600401610b5e90612912565b6110a361271061105283600954611bb890919063ffffffff16565b600c5550565b6110b2336116bc565b6110ce5760405162461bcd60e51b8152600401610b5e90612932565b620b71b081106110dd57600080fd5b602555565b6110eb336116bc565b6111075760405162461bcd60e51b8152600401610b5e90612932565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b61113e336116bc565b61115a5760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b039091166000908152601060209081526040808320805494151560ff199586168117909155600f8352818420805486168217905560119092529091208054909216179055565b6000610cd1338484611773565b6000546001600160a01b031633146111de5760405162461bcd60e51b8152600401610b5e90612912565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000610b2e611212610d56565b6029546001600160a01b03166000908152600d60205260409020546110529061123c906002611bb8565b8590611bb8565b61124c336116bc565b6112685760405162461bcd60e51b8152600401610b5e90612932565b602b805461ff001916610100841515021790556009546127109061128d908390612a02565b61129791906129e0565b6021555050565b6000546001600160a01b031633146112c85760405162461bcd60e51b8152600401610b5e90612912565b6112e361271061105283600954611bb890919063ffffffff16565b600b5550565b602b54630100000090046001600160a01b0316331461133a5760405162461bcd60e51b815260206004820152600d60248201526c27b7363c903232b83637bcb2b960991b6044820152606401610b5e565b602460009054906101000a90046001600160a01b03166001600160a01b03166320800a006040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561138a57600080fd5b505af115801561139e573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146113ce5760405162461bcd60e51b8152600401610b5e90612912565b6001600160a01b03166000908152600160205260409020805460ff19169055565b60248054604051630afbf02f60e11b81523360048201526001600160a01b03909116916315f7e05e9101600060405180830381600087803b15801561138a57600080fd5b6000546001600160a01b0316331461145d5760405162461bcd60e51b8152600401610b5e90612912565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b602b54630100000090046001600160a01b0316331461151f5760405162461bcd60e51b81526020600482015260126024820152712737ba103a37b5b2b7103232b83637bcb2b960711b6044820152606401610b5e565b602b546040514791630100000090046001600160a01b0316906108fc8315029083906000818181858888f19350505050158015611560573d6000803e3d6000fd5b5050565b61156d336116bc565b6115895760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03821630148015906115b057506029546001600160a01b03838116911614155b6115b957600080fd5b6001600160a01b0382166000908152601260205260409020805460ff191682158015919091179091556116215760248054604051630a5b654b60e11b81526001600160a01b0385811660048301526000938201939093529116906314b6ca9690604401610dff565b602480546001600160a01b038481166000818152600d602052604090819020549051630a5b654b60e11b815260048101929092529381019390935216906314b6ca9690604401610dff565b611675336116bc565b6116915760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000806116e783856129c8565b905083811015610cd15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b5e565b6000818484111561175d5760405162461bcd60e51b8152600401610b5e91906128bd565b50600061176a8486612a21565b95945050505050565b602b5460009062010000900460ff161561179957611792848484611c79565b9050610cd1565b6001600160a01b03841660009081526001602052604090205460ff161580156117db57506001600160a01b03831660009081526001602052604090205460ff16155b80156117f557506005546001600160a01b03858116911614155b1561184c57602b5460ff1661184c5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610b5e565b6029546001600160a01b0390811685821681149185161461186c81611d5f565b611877868686611d9c565b6118818686611f58565b61188d8685878461203a565b611895612172565b156118a2576118a26121cc565b801580156118ae575081155b156118c8576000601b819055601d819055601e819055601f555b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600d909152919091205461191a918690611739565b6001600160a01b0387166000908152600d6020908152604080832093909355600f90529081205460ff161561194f5784611959565b61195987866125bf565b6001600160a01b0387166000908152600d602052604090205490915061197f90826116da565b6001600160a01b038088166000908152600d6020908152604080832094909455918a1681526012909152205460ff16611a2557602480546001600160a01b038981166000818152600d602052604090819020549051630a5b654b60e11b815260048101929092529381019390935216906314b6ca9690604401600060405180830381600087803b158015611a1257600080fd5b505af1925050508015611a23575060015b505b6001600160a01b03861660009081526012602052604090205460ff16611ab857602480546001600160a01b038881166000818152600d602052604090819020549051630a5b654b60e11b815260048101929092529381019390935216906314b6ca9690604401600060405180830381600087803b158015611aa557600080fd5b505af1925050508015611ab6575060015b505b6024546025546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611af09160040190815260200190565b600060405180830381600087803b158015611b0a57600080fd5b505af1925050508015611b1b575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b6191815260200190565b60405180910390a35060019695505050505050565b6000610cd183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611739565b600082611bc757506000610b2e565b6000611bd38385612a02565b905082611be085836129e0565b14610cd15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b5e565b6000610cd183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612665565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d90915291822054611cca918490611739565b6001600160a01b038086166000908152600d60205260408082209390935590851681522054611cf990836116da565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d4d9086815260200190565b60405180910390a35060019392505050565b8015611d8057601754601b55601854601d55601954601e55601a54601f5550565b601354601b55601454601d55601554601e55601654601f555b50565b6001600160a01b03831660009081526001602052604090205460ff16158015611dde57506001600160a01b03831660009081526010602052604090205460ff16155b8015611e0357506001600160a01b03821660009081526010602052604090205460ff16155b8015611e1d57506000546001600160a01b03838116911614155b8015611e3257506001600160a01b0382163014155b8015611e4c57506003546001600160a01b03838116911614155b8015611e6657506029546001600160a01b03838116911614155b8015611e8057506007546001600160a01b03838116911614155b8015611e9a57506006546001600160a01b03838116911614155b8015611eb457506008546001600160a01b03838116911614155b15611f53576001600160a01b0382166000908152600d6020526040902054600c54611edf83836129c8565b111561139e5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b5e565b505050565b6029546001600160a01b038381169116148015611f77575060265460ff165b8015611f9c57506001600160a01b03811660009081526011602052604090205460ff16155b15611560576001600160a01b03811660009081526027602052604090205442116120085760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610b5e565b60265461201d90610100900460ff16426129c8565b6001600160a01b0382166000908152602760205260409020555050565b6000546001600160a01b0383811691161461139e5780156120e657600b548311158061207e57506001600160a01b03841660009081526010602052604090205460ff165b806120a157506001600160a01b03821660009081526010602052604090205460ff165b6120e15760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b5e565b61139e565b600a548311158061210f57506001600160a01b03841660009081526010602052604090205460ff165b8061213257506001600160a01b03821660009081526010602052604090205460ff165b61139e5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b5e565b6029546000906001600160a01b031633148015906121995750602b5462010000900460ff16155b80156121ac5750602b54610100900460ff165b8015610da3575050602154306000908152600d6020526040902054101590565b602b805462ff00001916620100001790556022546023546000916121ef91610b7a565b6121fb57601b546121fe565b60005b905060006122226002611052601f5461105286602154611bb890919063ffffffff16565b9050600061223b82602154611b7690919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061227557612275612a4e565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106122a6576122a6612a4e565b6001600160a01b03928316602091820292909201015260285460405163791ac94760e01b81524792919091169063791ac947906122f0908690600090879030904290600401612957565b600060405180830381600087803b15801561230a57600080fd5b505af115801561231e573d6000803e3d6000fd5b5050505060006123378247611b7690919063ffffffff16565b90506000612352612349886002611c37565b601f5490611b76565b9050600061236760026110528481878d611bb8565b9050600061238483611052601d5487611bb890919063ffffffff16565b905060006123a184611052601e5488611bb890919063ffffffff16565b9050602460009054906101000a90046001600160a01b03166001600160a01b0316633ecfd51e836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123f357600080fd5b505af193505050508015612405575060015b506007546040516000916001600160a01b03169061753090849084818181858888f193505050503d8060008114612458576040519150601f19603f3d011682016040523d82523d6000602084013e61245d565b606091505b50509050806124bf5760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610b5e565b89156125a65760285460065460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c4016060604051808303818588803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612569919061285d565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602b805462ff000019169055505050505050505050565b6000806125dd602054611052601f5486611bb890919063ffffffff16565b306000908152600d60205260409020549091506125fa90826116da565b306000818152600d6020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061264b9085815260200190565b60405180910390a361265d8382611b76565b949350505050565b600081836126865760405162461bcd60e51b8152600401610b5e91906128bd565b50600061176a84866129e0565b803580151581146126a357600080fd5b919050565b6000602082840312156126ba57600080fd5b8135610cd181612a64565b600080604083850312156126d857600080fd5b82356126e381612a64565b915060208301356126f381612a64565b809150509250929050565b60008060006060848603121561271357600080fd5b833561271e81612a64565b9250602084013561272e81612a64565b929592945050506040919091013590565b6000806040838503121561275257600080fd5b823561275d81612a64565b915061276b60208401612693565b90509250929050565b6000806040838503121561278757600080fd5b823561279281612a64565b946020939093013593505050565b6000602082840312156127b257600080fd5b610cd182612693565b600080604083850312156127ce57600080fd5b61279283612693565b600080604083850312156127ea57600080fd5b6127f383612693565b9150602083013560ff811681146126f357600080fd5b60006020828403121561281b57600080fd5b5035919050565b60006020828403121561283457600080fd5b5051919050565b6000806040838503121561284e57600080fd5b50508035926020909101359150565b60008060006060848603121561287257600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156128a157600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b818110156128ea578581018301518582016040015282016128ce565b818111156128fc576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129a75784516001600160a01b031683529383019391830191600101612982565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156129db576129db612a38565b500190565b6000826129fd57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a1c57612a1c612a38565b500290565b600082821015612a3357612a33612a38565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611d9957600080fdfea2646970667358221220a5c94b7b48ab792817d04b00ee84778192452738a94975e52b15144817788dec64736f6c6343000807003360806040526ec097ce7bc90715b34b9f1000000000600955610e10600a5564e8d4a51000600b5534801561003257600080fd5b50604051610faa380380610faa83398101604081905261005191610069565b50600080546001600160a01b03191633179055610099565b60006020828403121561007b57600080fd5b81516001600160a01b038116811461009257600080fd5b9392505050565b610f02806100a86000396000f3fe6080604052600436106100f35760003560e01c80634fab0ae81161008a578063e2d2e21911610059578063e2d2e21914610261578063efca2eed14610277578063ffb2c4791461028d578063ffd49c84146102ad57600080fd5b80634fab0ae8146101d6578063997664d7146101ec578063ce7c2ac214610202578063d0e30db01461025957600080fd5b806328fd3198116100c657806328fd3198146101785780632d48e896146101985780633a98ef39146101b85780633ecfd51e146101ce57600080fd5b806311ce023d146100f857806314b6ca961461012157806315f7e05e1461014357806320800a0014610163575b600080fd5b34801561010457600080fd5b5061010e60095481565b6040519081526020015b60405180910390f35b34801561012d57600080fd5b5061014161013c366004610d2e565b6102c3565b005b34801561014f57600080fd5b5061014161015e366004610cf4565b61043a565b34801561016f57600080fd5b5061014161045d565b34801561018457600080fd5b5061010e610193366004610cf4565b610624565b3480156101a457600080fd5b506101416101b3366004610d73565b6106ad565b3480156101c457600080fd5b5061010e60055481565b6101416106cf565b3480156101e257600080fd5b5061010e600b5481565b3480156101f857600080fd5b5061010e60065481565b34801561020e57600080fd5b5061023e61021d366004610cf4565b60046020526000908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610118565b6101416106f0565b34801561026d57600080fd5b5061010e60085481565b34801561028357600080fd5b5061010e60075481565b34801561029957600080fd5b506101416102a8366004610d5a565b610760565b3480156102b957600080fd5b5061010e600a5481565b6000546001600160a01b031633146102da57600080fd5b6001600160a01b038216600090815260046020526040902054156103015761030182610860565b60008111801561032757506001600160a01b038216600090815260046020526040902054155b1561038c57600180546001600160a01b03841660008181526002602052604081208390558284018455929092527fb10e2d527612073b26eecdfd717e6a320cf44b4afac2b0732d9fcbe2b7fa0cf60180546001600160a01b03191690911790556103bf565b801580156103b157506001600160a01b03821660009081526004602052604090205415155b156103bf576103bf826109ac565b6001600160a01b0382166000908152600460205260409020546005546103f09183916103ea91610abf565b90610b0a565b6005556001600160a01b038216600090815260046020526040902081905561041781610b69565b6001600160a01b0390921660009081526004602052604090206001019190915550565b6000546001600160a01b0316331461045157600080fd5b61045a81610860565b50565b6000546001600160a01b0316331461047457600080fd5b47806104ba5760405162461bcd60e51b815260206004820152601060248201526f4e6f2045544820746f2072657363756560801b60448201526064015b60405180910390fd5b60008060009054906101000a90046001600160a01b03166001600160a01b0316632a2dae0a6040518163ffffffff1660e01b815260040160206040518083038186803b15801561050957600080fd5b505afa15801561051d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105419190610d11565b90506001600160a01b03811661058c5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b2103232b83637bcb2b960811b60448201526064016104b1565b6000816001600160a01b03168360405160006040518083038185875af1925050503d80600081146105d9576040519150601f19603f3d011682016040523d82523d6000602084013e6105de565b606091505b505090508061061f5760405162461bcd60e51b815260206004820152600d60248201526c14995cd8dd594819985a5b1959609a1b60448201526064016104b1565b505050565b6001600160a01b03811660009081526004602052604081205461064957506000919050565b6001600160a01b03821660009081526004602052604081205461066b90610b69565b6001600160a01b03841660009081526004602052604090206001015490915080821161069b575060009392505050565b6106a58282610abf565b949350505050565b6000546001600160a01b031633146106c457600080fd5b600a91909155600b55565b6000546001600160a01b031633146106e657600080fd5b6106ee6106f0565b565b6000546001600160a01b0316331461070757600080fd5b60055434906107235760065461071d9082610b0a565b60065550565b6006546107309082610b0a565b60065560055460095461075a916107519161074b9085610b86565b90610c05565b60085490610b0a565b60085550565b6000546001600160a01b0316331461077757600080fd5b60015480610783575050565b6000805a905060005b848310801561079a57508381105b156108595783600c54106107ae576000600c555b6107e06001600c54815481106107c6576107c6610ea1565b6000918252602090912001546001600160a01b0316610c47565b15610817576108176001600c54815481106107fd576107fd610ea1565b6000918252602090912001546001600160a01b0316610860565b61082c6108255a8490610abf565b8490610b0a565b92505a600c8054919350600061084183610e5a565b9190505550808061085190610e5a565b91505061078c565b5050505050565b6001600160a01b0381166000908152600460205260409020546108805750565b600061088b82610624565b905080156109a8576007546108a09082610b0a565b6007556001600160a01b038216600090815260036020908152604080832042905560049091529020600201546108d69082610b0a565b6001600160a01b038316600090815260046020526040902060028101919091555461090090610b69565b6001600160a01b03831660008181526004602052604080822060010193909355915183908381818185875af1925050503d806000811461095c576040519150601f19603f3d011682016040523d82523d6000602084013e610961565b606091505b505090508061061f5760405162461bcd60e51b8152602060048201526013602482015272115512081d1c985b9cd9995c8819985a5b1959606a1b60448201526064016104b1565b5050565b600180546109bb908290610e43565b815481106109cb576109cb610ea1565b60009182526020808320909101546001600160a01b0384811684526002909252604090922054600180549290931692918110610a0957610a09610ea1565b600091825260208083209190910180546001600160a01b0319166001600160a01b03948516179055918316815260029182905260408120546001805491939291610a54908290610e43565b81548110610a6457610a64610ea1565b60009182526020808320909101546001600160a01b031683528201929092526040019020556001805480610a9a57610a9a610e8b565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6000610b0183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250610c8c565b90505b92915050565b600080610b178385610dea565b905083811015610b015760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016104b1565b6000610b0460095461074b60085485610b8690919063ffffffff16565b600082610b9557506000610b04565b6000610ba18385610e24565b905082610bae8583610e02565b14610b015760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016104b1565b6000610b0183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250610cc6565b600a546001600160a01b03821660009081526003602052604081205490914291610c719190610dea565b108015610b045750600b54610c8583610624565b1192915050565b60008184841115610cb05760405162461bcd60e51b81526004016104b19190610d95565b506000610cbd8486610e43565b95945050505050565b60008183610ce75760405162461bcd60e51b81526004016104b19190610d95565b506000610cbd8486610e02565b600060208284031215610d0657600080fd5b8135610b0181610eb7565b600060208284031215610d2357600080fd5b8151610b0181610eb7565b60008060408385031215610d4157600080fd5b8235610d4c81610eb7565b946020939093013593505050565b600060208284031215610d6c57600080fd5b5035919050565b60008060408385031215610d8657600080fd5b50508035926020909101359150565b600060208083528351808285015260005b81811015610dc257858101830151858201604001528201610da6565b81811115610dd4576000604083870101525b50601f01601f1916929092016040019392505050565b60008219821115610dfd57610dfd610e75565b500190565b600082610e1f57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610e3e57610e3e610e75565b500290565b600082821015610e5557610e55610e75565b500390565b6000600019821415610e6e57610e6e610e75565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b038116811461045a57600080fdfea2646970667358221220ef38b87426ab8eb0223b01dd20385b76899d3193d1586649a4fa1943a272937964736f6c63430008070033
Deployed Bytecode
0x60806040526004361061036f5760003560e01c806382bf293c116101c6578063dd62ed3e116100f7578063f2fde38b11610095578063f84ba65d1161006f578063f84ba65d14610a4d578063f887ea4014610a6d578063fe9fbb8014610a8d578063ffb54a9914610aad57600080fd5b8063f2fde38b146109f8578063f429389014610a18578063f708a64f14610a2d57600080fd5b8063e086299a116100d1578063e086299a1461098e578063e96fada2146109a3578063f0b37c04146109c3578063f0fc6bca146109e357600080fd5b8063dd62ed3e14610908578063df20fd491461094e578063df4a76c51461096e57600080fd5b8063a9059cbb11610164578063ca33e64c1161013e578063ca33e64c14610892578063cf4be394146108b2578063d51ed1c8146108c8578063dab84ee7146108e857600080fd5b8063a9059cbb1461083c578063b6a5d7de1461085c578063bf56b3711461087c57600080fd5b80639d1944f5116101a05780639d1944f5146107bc578063a4b45c00146107dc578063a6b06a27146107fc578063a8aa1b311461081c57600080fd5b806382bf293c14610751578063893d20e81461077157806395d89b411461078f57600080fd5b80632f54bf6e116102a0578063658d4b7f1161023e57806370a082311161021857806370a08231146106c6578063722b62ad146106fc57806378109e541461071b5780637affa29b1461073157600080fd5b8063658d4b7f146106675780636c5b2855146106875780636ddd1713146106a757600080fd5b806338280e6b1161027a57806338280e6b146105ed57806350db71fb1461060d578063571ac8b01461062d578063617fe0ed1461064d57600080fd5b80632f54bf6e14610586578063313ce567146105b557806333477327146105d757600080fd5b8063201e79911161030d5780632a2dae0a116102e75780632a2dae0a146104f25780632b112e49146105315780632d48e896146105465780632d5945671461056657600080fd5b8063201e79911461049257806323b872dd146104b257806328fd3198146104d257600080fd5b80630d295980116103495780630d2959801461041b5780631161ae391461043d578063178d9b8e1461045d57806318160ddd1461047d57600080fd5b80630445b6671461037b57806306fdde03146103a4578063095ea7b3146103eb57600080fd5b3661037657005b600080fd5b34801561038757600080fd5b5061039160215481565b6040519081526020015b60405180910390f35b3480156103b057600080fd5b506040805180820190915260158152744d6f6e61642049736c616e6420547265617375727960581b60208201525b60405161039b91906128bd565b3480156103f757600080fd5b5061040b610406366004612774565b610ac7565b604051901515815260200161039b565b34801561042757600080fd5b5061043b6104363660046127a0565b610b34565b005b34801561044957600080fd5b5061040b61045836600461283b565b610b7a565b34801561046957600080fd5b5061043b61047836600461288b565b610b8e565b34801561048957600080fd5b50600954610391565b34801561049e57600080fd5b5061043b6104ad36600461283b565b610be6565b3480156104be57600080fd5b5061040b6104cd3660046126fe565b610c16565b3480156104de57600080fd5b506103916104ed3660046126a8565b610cd8565b3480156104fe57600080fd5b50602b5461051990630100000090046001600160a01b031681565b6040516001600160a01b03909116815260200161039b565b34801561053d57600080fd5b50610391610d56565b34801561055257600080fd5b5061043b61056136600461283b565b610da8565b34801561057257600080fd5b5061043b6105813660046127d7565b610e35565b34801561059257600080fd5b5061040b6105a13660046126a8565b6000546001600160a01b0391821691161490565b3480156105c157600080fd5b5060125b60405160ff909116815260200161039b565b3480156105e357600080fd5b50610391600a5481565b3480156105f957600080fd5b5061043b6106083660046126a8565b610e86565b34801561061957600080fd5b5061043b61062836600461273f565b610f0d565b34801561063957600080fd5b5061040b6106483660046126a8565b610f5d565b34801561065957600080fd5b5060265461040b9060ff1681565b34801561067357600080fd5b5061043b61068236600461273f565b610f6b565b34801561069357600080fd5b5061043b6106a236600461288b565b610fbb565b3480156106b357600080fd5b50602b5461040b90610100900460ff1681565b3480156106d257600080fd5b506103916106e13660046126a8565b6001600160a01b03166000908152600d602052604090205490565b34801561070857600080fd5b506026546105c590610100900460ff1681565b34801561072757600080fd5b50610391600c5481565b34801561073d57600080fd5b5061043b61074c366004612809565b61100d565b34801561075d57600080fd5b5061043b61076c366004612809565b61105e565b34801561077d57600080fd5b506000546001600160a01b0316610519565b34801561079b57600080fd5b506040805180820190915260048152630913525560e21b60208201526103de565b3480156107c857600080fd5b5061043b6107d7366004612809565b6110a9565b3480156107e857600080fd5b5061043b6107f73660046126c5565b6110e2565b34801561080857600080fd5b5061043b61081736600461273f565b611135565b34801561082857600080fd5b50602954610519906001600160a01b031681565b34801561084857600080fd5b5061040b610857366004612774565b6111a7565b34801561086857600080fd5b5061043b6108773660046126a8565b6111b4565b34801561088857600080fd5b50610391602a5481565b34801561089e57600080fd5b50600654610519906001600160a01b031681565b3480156108be57600080fd5b50610391600b5481565b3480156108d457600080fd5b506103916108e3366004612809565b611205565b3480156108f457600080fd5b50600854610519906001600160a01b031681565b34801561091457600080fd5b506103916109233660046126c5565b6001600160a01b039182166000908152600e6020908152604080832093909416825291909152205490565b34801561095a57600080fd5b5061043b6109693660046127bb565b611243565b34801561097a57600080fd5b5061043b610989366004612809565b61129e565b34801561099a57600080fd5b5061043b6112e9565b3480156109af57600080fd5b50600754610519906001600160a01b031681565b3480156109cf57600080fd5b5061043b6109de3660046126a8565b6113a4565b3480156109ef57600080fd5b5061043b6113ef565b348015610a0457600080fd5b5061043b610a133660046126a8565b611433565b348015610a2457600080fd5b5061043b6114c9565b348015610a3957600080fd5b5061043b610a4836600461273f565b611564565b348015610a5957600080fd5b5061043b610a6836600461273f565b61166c565b348015610a7957600080fd5b50602854610519906001600160a01b031681565b348015610a9957600080fd5b5061040b610aa83660046126a8565b6116bc565b348015610ab957600080fd5b50602b5461040b9060ff1681565b336000818152600e602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610b229086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b03163314610b675760405162461bcd60e51b8152600401610b5e90612912565b60405180910390fd5b602b805460ff1916911515919091179055565b600082610b8683611205565b119392505050565b6000546001600160a01b03163314610bb85760405162461bcd60e51b8152600401610b5e90612912565b601384905560148390556015829055610bdb82610bd586866116da565b906116da565b601655602055505050565b610bef336116bc565b610c0b5760405162461bcd60e51b8152600401610b5e90612932565b602291909155602355565b6001600160a01b0383166000908152600e6020908152604080832033845290915281205460001914610cc3576040805180820182526016815275496e73756666696369656e7420416c6c6f77616e636560501b6020808301919091526001600160a01b0387166000908152600e82528381203382529091529190912054610c9e918490611739565b6001600160a01b0385166000908152600e602090815260408083203384529091529020555b610cce848484611773565b90505b9392505050565b6024805460405163051fa63360e31b81526001600160a01b0384811660048301526000939216916328fd3198910160206040518083038186803b158015610d1e57600080fd5b505afa158015610d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e9190612822565b6004546001600160a01b03166000908152600d6020526040812054610da3906003546001600160a01b03166000908152600d6020526040902054610d9d9060095490611b76565b90611b76565b905090565b610db1336116bc565b610dcd5760405162461bcd60e51b8152600401610b5e90612932565b602480546040516316a4744b60e11b8152600481018590529182018390526001600160a01b031690632d48e896906044015b600060405180830381600087803b158015610e1957600080fd5b505af1158015610e2d573d6000803e3d6000fd5b505050505050565b6000546001600160a01b03163314610e5f5760405162461bcd60e51b8152600401610b5e90612912565b6026805461ffff191692151561ff0019169290921761010060ff9290921691909102179055565b610e8f336116bc565b610eab5760405162461bcd60e51b8152600401610b5e90612932565b600580546001600160a01b039092166001600160a01b0319909216821790556000908152600f60209081526040808320805460ff1990811660019081179092556010845282852080548216831790556011909352922080549091169091179055565b610f16336116bc565b610f325760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03919091166000908152601160205260409020805460ff1916911515919091179055565b6000610b2e82600019610ac7565b610f74336116bc565b610f905760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03919091166000908152600f60205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314610fe55760405162461bcd60e51b8152600401610b5e90612912565b60178490556018839055601982905561100282610bd586866116da565b601a55602055505050565b6000546001600160a01b031633146110375760405162461bcd60e51b8152600401610b5e90612912565b61105861271061105283600954611bb890919063ffffffff16565b90611c37565b600a5550565b6000546001600160a01b031633146110885760405162461bcd60e51b8152600401610b5e90612912565b6110a361271061105283600954611bb890919063ffffffff16565b600c5550565b6110b2336116bc565b6110ce5760405162461bcd60e51b8152600401610b5e90612932565b620b71b081106110dd57600080fd5b602555565b6110eb336116bc565b6111075760405162461bcd60e51b8152600401610b5e90612932565b600680546001600160a01b039384166001600160a01b03199182161790915560078054929093169116179055565b61113e336116bc565b61115a5760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b039091166000908152601060209081526040808320805494151560ff199586168117909155600f8352818420805486168217905560119092529091208054909216179055565b6000610cd1338484611773565b6000546001600160a01b031633146111de5760405162461bcd60e51b8152600401610b5e90612912565b6001600160a01b03166000908152600160208190526040909120805460ff19169091179055565b6000610b2e611212610d56565b6029546001600160a01b03166000908152600d60205260409020546110529061123c906002611bb8565b8590611bb8565b61124c336116bc565b6112685760405162461bcd60e51b8152600401610b5e90612932565b602b805461ff001916610100841515021790556009546127109061128d908390612a02565b61129791906129e0565b6021555050565b6000546001600160a01b031633146112c85760405162461bcd60e51b8152600401610b5e90612912565b6112e361271061105283600954611bb890919063ffffffff16565b600b5550565b602b54630100000090046001600160a01b0316331461133a5760405162461bcd60e51b815260206004820152600d60248201526c27b7363c903232b83637bcb2b960991b6044820152606401610b5e565b602460009054906101000a90046001600160a01b03166001600160a01b03166320800a006040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561138a57600080fd5b505af115801561139e573d6000803e3d6000fd5b50505050565b6000546001600160a01b031633146113ce5760405162461bcd60e51b8152600401610b5e90612912565b6001600160a01b03166000908152600160205260409020805460ff19169055565b60248054604051630afbf02f60e11b81523360048201526001600160a01b03909116916315f7e05e9101600060405180830381600087803b15801561138a57600080fd5b6000546001600160a01b0316331461145d5760405162461bcd60e51b8152600401610b5e90612912565b600080546001600160a01b0319166001600160a01b038316908117825580825260016020818152604093849020805460ff191690921790915591519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc686163910160405180910390a150565b602b54630100000090046001600160a01b0316331461151f5760405162461bcd60e51b81526020600482015260126024820152712737ba103a37b5b2b7103232b83637bcb2b960711b6044820152606401610b5e565b602b546040514791630100000090046001600160a01b0316906108fc8315029083906000818181858888f19350505050158015611560573d6000803e3d6000fd5b5050565b61156d336116bc565b6115895760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03821630148015906115b057506029546001600160a01b03838116911614155b6115b957600080fd5b6001600160a01b0382166000908152601260205260409020805460ff191682158015919091179091556116215760248054604051630a5b654b60e11b81526001600160a01b0385811660048301526000938201939093529116906314b6ca9690604401610dff565b602480546001600160a01b038481166000818152600d602052604090819020549051630a5b654b60e11b815260048101929092529381019390935216906314b6ca9690604401610dff565b611675336116bc565b6116915760405162461bcd60e51b8152600401610b5e90612932565b6001600160a01b03919091166000908152601060205260409020805460ff1916911515919091179055565b6001600160a01b031660009081526001602052604090205460ff1690565b6000806116e783856129c8565b905083811015610cd15760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b5e565b6000818484111561175d5760405162461bcd60e51b8152600401610b5e91906128bd565b50600061176a8486612a21565b95945050505050565b602b5460009062010000900460ff161561179957611792848484611c79565b9050610cd1565b6001600160a01b03841660009081526001602052604090205460ff161580156117db57506001600160a01b03831660009081526001602052604090205460ff16155b80156117f557506005546001600160a01b03858116911614155b1561184c57602b5460ff1661184c5760405162461bcd60e51b815260206004820152601760248201527f54726164696e67206e6f7420656e61626c6564207965740000000000000000006044820152606401610b5e565b6029546001600160a01b0390811685821681149185161461186c81611d5f565b611877868686611d9c565b6118818686611f58565b61188d8685878461203a565b611895612172565b156118a2576118a26121cc565b801580156118ae575081155b156118c8576000601b819055601d819055601e819055601f555b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0389166000908152600d909152919091205461191a918690611739565b6001600160a01b0387166000908152600d6020908152604080832093909355600f90529081205460ff161561194f5784611959565b61195987866125bf565b6001600160a01b0387166000908152600d602052604090205490915061197f90826116da565b6001600160a01b038088166000908152600d6020908152604080832094909455918a1681526012909152205460ff16611a2557602480546001600160a01b038981166000818152600d602052604090819020549051630a5b654b60e11b815260048101929092529381019390935216906314b6ca9690604401600060405180830381600087803b158015611a1257600080fd5b505af1925050508015611a23575060015b505b6001600160a01b03861660009081526012602052604090205460ff16611ab857602480546001600160a01b038881166000818152600d602052604090819020549051630a5b654b60e11b815260048101929092529381019390935216906314b6ca9690604401600060405180830381600087803b158015611aa557600080fd5b505af1925050508015611ab6575060015b505b6024546025546040516001624d3b8760e01b031981526001600160a01b039092169163ffb2c47991611af09160040190815260200190565b600060405180830381600087803b158015611b0a57600080fd5b505af1925050508015611b1b575060015b50856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611b6191815260200190565b60405180910390a35060019695505050505050565b6000610cd183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611739565b600082611bc757506000610b2e565b6000611bd38385612a02565b905082611be085836129e0565b14610cd15760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b5e565b6000610cd183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612665565b6040805180820182526014815273496e73756666696369656e742042616c616e636560601b6020808301919091526001600160a01b0386166000908152600d90915291822054611cca918490611739565b6001600160a01b038086166000908152600d60205260408082209390935590851681522054611cf990836116da565b6001600160a01b038085166000818152600d602052604090819020939093559151908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611d4d9086815260200190565b60405180910390a35060019392505050565b8015611d8057601754601b55601854601d55601954601e55601a54601f5550565b601354601b55601454601d55601554601e55601654601f555b50565b6001600160a01b03831660009081526001602052604090205460ff16158015611dde57506001600160a01b03831660009081526010602052604090205460ff16155b8015611e0357506001600160a01b03821660009081526010602052604090205460ff16155b8015611e1d57506000546001600160a01b03838116911614155b8015611e3257506001600160a01b0382163014155b8015611e4c57506003546001600160a01b03838116911614155b8015611e6657506029546001600160a01b03838116911614155b8015611e8057506007546001600160a01b03838116911614155b8015611e9a57506006546001600160a01b03838116911614155b8015611eb457506008546001600160a01b03838116911614155b15611f53576001600160a01b0382166000908152600d6020526040902054600c54611edf83836129c8565b111561139e5760405162461bcd60e51b815260206004820152603e60248201527f546f74616c20486f6c64696e672069732063757272656e746c79206c696d697460448201527f65642c20796f752063616e206e6f74206275792074686174206d7563682e00006064820152608401610b5e565b505050565b6029546001600160a01b038381169116148015611f77575060265460ff165b8015611f9c57506001600160a01b03811660009081526011602052604090205460ff16155b15611560576001600160a01b03811660009081526027602052604090205442116120085760405162461bcd60e51b815260206004820152601c60248201527f506c656173652077616974206265747765656e2074776f2062757973000000006044820152606401610b5e565b60265461201d90610100900460ff16426129c8565b6001600160a01b0382166000908152602760205260409020555050565b6000546001600160a01b0383811691161461139e5780156120e657600b548311158061207e57506001600160a01b03841660009081526010602052604090205460ff165b806120a157506001600160a01b03821660009081526010602052604090205460ff165b6120e15760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b5e565b61139e565b600a548311158061210f57506001600160a01b03841660009081526010602052604090205460ff165b8061213257506001600160a01b03821660009081526010602052604090205460ff165b61139e5760405162461bcd60e51b8152602060048201526011602482015270151608131a5b5a5d08115e18d959591959607a1b6044820152606401610b5e565b6029546000906001600160a01b031633148015906121995750602b5462010000900460ff16155b80156121ac5750602b54610100900460ff165b8015610da3575050602154306000908152600d6020526040902054101590565b602b805462ff00001916620100001790556022546023546000916121ef91610b7a565b6121fb57601b546121fe565b60005b905060006122226002611052601f5461105286602154611bb890919063ffffffff16565b9050600061223b82602154611b7690919063ffffffff16565b6040805160028082526060820183529293506000929091602083019080368337019050509050308160008151811061227557612275612a4e565b6001600160a01b0392831660209182029290920101526002548251911690829060019081106122a6576122a6612a4e565b6001600160a01b03928316602091820292909201015260285460405163791ac94760e01b81524792919091169063791ac947906122f0908690600090879030904290600401612957565b600060405180830381600087803b15801561230a57600080fd5b505af115801561231e573d6000803e3d6000fd5b5050505060006123378247611b7690919063ffffffff16565b90506000612352612349886002611c37565b601f5490611b76565b9050600061236760026110528481878d611bb8565b9050600061238483611052601d5487611bb890919063ffffffff16565b905060006123a184611052601e5488611bb890919063ffffffff16565b9050602460009054906101000a90046001600160a01b03166001600160a01b0316633ecfd51e836040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123f357600080fd5b505af193505050508015612405575060015b506007546040516000916001600160a01b03169061753090849084818181858888f193505050503d8060008114612458576040519150601f19603f3d011682016040523d82523d6000602084013e61245d565b606091505b50509050806124bf5760405162461bcd60e51b815260206004820152602860248201527f6d61726b6574696e672072656365697665722072656a656374656420455448206044820152673a3930b739b332b960c11b6064820152608401610b5e565b89156125a65760285460065460405163f305d71960e01b8152306004820152602481018d905260006044820181905260648201526001600160a01b0391821660848201524260a482015291169063f305d71990869060c4016060604051808303818588803b15801561253057600080fd5b505af1158015612544573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190612569919061285d565b505060408051868152602081018d90527f424db2872186fa7e7afa7a5e902ed3b49a2ef19c2f5431e672462495dd6b450692500160405180910390a15b5050602b805462ff000019169055505050505050505050565b6000806125dd602054611052601f5486611bb890919063ffffffff16565b306000908152600d60205260409020549091506125fa90826116da565b306000818152600d6020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061264b9085815260200190565b60405180910390a361265d8382611b76565b949350505050565b600081836126865760405162461bcd60e51b8152600401610b5e91906128bd565b50600061176a84866129e0565b803580151581146126a357600080fd5b919050565b6000602082840312156126ba57600080fd5b8135610cd181612a64565b600080604083850312156126d857600080fd5b82356126e381612a64565b915060208301356126f381612a64565b809150509250929050565b60008060006060848603121561271357600080fd5b833561271e81612a64565b9250602084013561272e81612a64565b929592945050506040919091013590565b6000806040838503121561275257600080fd5b823561275d81612a64565b915061276b60208401612693565b90509250929050565b6000806040838503121561278757600080fd5b823561279281612a64565b946020939093013593505050565b6000602082840312156127b257600080fd5b610cd182612693565b600080604083850312156127ce57600080fd5b61279283612693565b600080604083850312156127ea57600080fd5b6127f383612693565b9150602083013560ff811681146126f357600080fd5b60006020828403121561281b57600080fd5b5035919050565b60006020828403121561283457600080fd5b5051919050565b6000806040838503121561284e57600080fd5b50508035926020909101359150565b60008060006060848603121561287257600080fd5b8351925060208401519150604084015190509250925092565b600080600080608085870312156128a157600080fd5b5050823594602084013594506040840135936060013592509050565b600060208083528351808285015260005b818110156128ea578581018301518582016040015282016128ce565b818111156128fc576000604083870101525b50601f01601f1916929092016040019392505050565b60208082526006908201526510a7aba722a960d11b604082015260600190565b6020808252600b908201526a085055551213d49256915160aa1b604082015260600190565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156129a75784516001600160a01b031683529383019391830191600101612982565b50506001600160a01b03969096166060850152505050608001529392505050565b600082198211156129db576129db612a38565b500190565b6000826129fd57634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615612a1c57612a1c612a38565b500290565b600082821015612a3357612a33612a38565b500390565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6001600160a01b0381168114611d9957600080fdfea2646970667358221220a5c94b7b48ab792817d04b00ee84778192452738a94975e52b15144817788dec64736f6c63430008070033
Deployed Bytecode Sourcemap
13285:21436:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15203:56;;;;;;;;;;;;;;;;;;;11287:25:1;;;11275:2;11260:18;15203:56:0;;;;;;;;18361:80;;;;;;;;;;-1:-1:-1;18433:5:0;;;;;;;;;;;;-1:-1:-1;;;18433:5:0;;;;18361:80;;;;;;;:::i;18783:216::-;;;;;;;;;;-1:-1:-1;18783:216:0;;;;;:::i;:::-;;:::i;:::-;;;6270:14:1;;6263:22;6245:41;;6233:2;6218:18;18783:216:0;6105:187:1;25450:94:0;;;;;;;;;;-1:-1:-1;25450:94:0;;;;;:::i;:::-;;:::i;:::-;;34054:150;;;;;;;;;;-1:-1:-1;34054:150:0;;;;;:::i;:::-;;:::i;30101:417::-;;;;;;;;;;-1:-1:-1;30101:417:0;;;;;:::i;:::-;;:::i;18091:88::-;;;;;;;;;;-1:-1:-1;18164:12:0;;18091:88;;31543:183;;;;;;;;;;-1:-1:-1;31543:183:0;;;;;:::i;:::-;;:::i;19301:370::-;;;;;;;;;;-1:-1:-1;19301:370:0;;;;;:::i;:::-;;:::i;33282:146::-;;;;;;;;;;-1:-1:-1;33282:146:0;;;;;:::i;:::-;;:::i;16071:28::-;;;;;;;;;;-1:-1:-1;16071:28:0;;;;;;;-1:-1:-1;;;;;16071:28:0;;;;;;-1:-1:-1;;;;;4667:32:1;;;4649:51;;4637:2;4622:18;16071:28:0;4503:203:1;33651:142:0;;;;;;;;;;;;;:::i;32041:183::-;;;;;;;;;;-1:-1:-1;32041:183:0;;;;;:::i;:::-;;:::i;25591:164::-;;;;;;;;;;-1:-1:-1;25591:164:0;;;;;:::i;:::-;;:::i;3426:103::-;;;;;;;;;;-1:-1:-1;3426:103:0;;;;;:::i;:::-;3481:4;3516:5;-1:-1:-1;;;;;3505:16:0;;;3516:5;;3505:16;;3426:103;18185:80;;;;;;;;;;-1:-1:-1;13971:2:0;18185:80;;;12733:4:1;12721:17;;;12703:36;;12691:2;12676:18;18185:80:0;12561:184:1;14091:59:0;;;;;;;;;;;;;;;;19998:283;;;;;;;;;;-1:-1:-1;19998:283:0;;;;;:::i;:::-;;:::i;29719:130::-;;;;;;;;;;-1:-1:-1;29719:130:0;;;;;:::i;:::-;;:::i;19007:122::-;;;;;;;;;;-1:-1:-1;19007:122:0;;;;;:::i;:::-;;:::i;15566:37::-;;;;;;;;;;-1:-1:-1;15566:37:0;;;;;;;;29401:120;;;;;;;;;;-1:-1:-1;29401:120:0;;;;;:::i;:::-;;:::i;30552:433::-;;;;;;;;;;-1:-1:-1;30552:433:0;;;;;:::i;:::-;;:::i;15862:30::-;;;;;;;;;;-1:-1:-1;15862:30:0;;;;;;;;;;;18531:105;;;;;;;;;;-1:-1:-1;18531:105:0;;;;;:::i;:::-;-1:-1:-1;;;;;18615:18:0;18597:7;18615:18;;;:9;:18;;;;;;;18531:105;15610:38;;;;;;;;;;-1:-1:-1;15610:38:0;;;;;;;;;;;14236:63;;;;;;;;;;;;;;;;28634:157;;;;;;;;;;-1:-1:-1;28634:157:0;;;;;:::i;:::-;;:::i;19748:154::-;;;;;;;;;;-1:-1:-1;19748:154:0;;;;;:::i;:::-;;:::i;18447:78::-;;;;;;;;;;-1:-1:-1;18499:7:0;18517:5;-1:-1:-1;;;;;18517:5:0;18447:78;;18271:84;;;;;;;;;;-1:-1:-1;18345:7:0;;;;;;;;;;;;-1:-1:-1;;;18345:7:0;;;;18271:84;;33469:136;;;;;;;;;;-1:-1:-1;33469:136:0;;;;;:::i;:::-;;:::i;31043:237::-;;;;;;;;;;-1:-1:-1;31043:237:0;;;;;:::i;:::-;;:::i;29857:209::-;;;;;;;;;;-1:-1:-1;29857:209:0;;;;;:::i;:::-;;:::i;15766:19::-;;;;;;;;;;-1:-1:-1;15766:19:0;;;;-1:-1:-1;;;;;15766:19:0;;;19137:156;;;;;;;;;;-1:-1:-1;19137:156:0;;;;;:::i;:::-;;:::i;3084:102::-;;;;;;;;;;-1:-1:-1;3084:102:0;;;;;:::i;:::-;;:::i;15792:25::-;;;;;;;;;;;;;;;;13706:36;;;;;;;;;;-1:-1:-1;13706:36:0;;;;-1:-1:-1;;;;;13706:36:0;;;14163:60;;;;;;;;;;;;;;;;33835:167;;;;;;;;;;-1:-1:-1;33835:167:0;;;;;:::i;:::-;;:::i;13791:29::-;;;;;;;;;;-1:-1:-1;13791:29:0;;;;-1:-1:-1;;;;;13791:29:0;;;18642:133;;;;;;;;;;-1:-1:-1;18642:133:0;;;;;:::i;:::-;-1:-1:-1;;;;;18744:19:0;;;18726:7;18744:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;18642:133;31326:180;;;;;;;;;;-1:-1:-1;31326:180:0;;;;;:::i;:::-;;:::i;28824:161::-;;;;;;;;;;-1:-1:-1;28824:161:0;;;;;:::i;:::-;;:::i;34563:147::-;;;;;;;;;;;;;:::i;13749:35::-;;;;;;;;;;-1:-1:-1;13749:35:0;;;;-1:-1:-1;;;;;13749:35:0;;;3261:105;;;;;;;;;;-1:-1:-1;3261:105:0;;;;;:::i;:::-;;:::i;32276:872::-;;;;;;;;;;;;;:::i;3833:189::-;;;;;;;;;;-1:-1:-1;3833:189:0;;;;;:::i;:::-;;:::i;31765:221::-;;;;;;;;;;;;;:::i;29022:347::-;;;;;;;;;;-1:-1:-1;29022:347:0;;;;;:::i;:::-;;:::i;29556:128::-;;;;;;;;;;-1:-1:-1;29556:128:0;;;;;:::i;:::-;;:::i;15735:24::-;;;;;;;;;;-1:-1:-1;15735:24:0;;;;-1:-1:-1;;;;;15735:24:0;;;3599:115;;;;;;;;;;-1:-1:-1;3599:115:0;;;;;:::i;:::-;;:::i;15824:31::-;;;;;;;;;;-1:-1:-1;15824:31:0;;;;;;;;18783:216;18887:10;18858:4;18875:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;18875:32:0;;;;;;;;;;:41;;;18932:37;18858:4;;18875:32;;18932:37;;;;18910:6;11287:25:1;;11275:2;11260:18;;11141:177;18932:37:0;;;;;;;;-1:-1:-1;18987:4:0;18783:216;;;;;:::o;25450:94::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;;;;;;;;;25515:11:::1;:21:::0;;-1:-1:-1;;25515:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25450:94::o;34054:150::-;34134:4;34190:6;34158:29;34178:8;34158:19;:29::i;:::-;:38;;34054:150;-1:-1:-1;;;34054:150:0:o;30101:417::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;30255:15:::1;:34:::0;;;30300:16:::1;:36:::0;;;30347:15:::1;:34:::0;;;30406:61:::1;30365:16:::0;30406:39:::1;30273:16:::0;30319:17;30406:20:::1;:39::i;:::-;:43:::0;::::1;:61::i;:::-;30392:11;:75:::0;30478:14:::1;:32:::0;-1:-1:-1;;;30101:417:0:o;31543:183::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;31641:15:::1;:25:::0;;;;31677:26:::1;:41:::0;31543:183::o;19301:370::-;-1:-1:-1;;;;;19421:19:0;;19401:4;19421:19;;;:11;:19;;;;;;;;19441:10;19421:31;;;;;;;;-1:-1:-1;;19421:52:0;19418:186;;19523:69;;;;;;;;;;;-1:-1:-1;;;19523:69:0;;;;;;;;-1:-1:-1;;;;;19523:19:0;;-1:-1:-1;19523:19:0;;;:11;:19;;;;;19543:10;19523:31;;;;;;;;;;:69;;19559:6;;19523:35;:69::i;:::-;-1:-1:-1;;;;;19489:19:0;;;;;;:11;:19;;;;;;;;19509:10;19489:31;;;;;;;:103;19418:186;19623:40;19637:6;19645:9;19656:6;19623:13;:40::i;:::-;19616:47;;19301:370;;;;;;:::o;33282:146::-;33378:11;;;:42;;-1:-1:-1;;;33378:42:0;;-1:-1:-1;;;;;4667:32:1;;;33378:42:0;;;4649:51:1;33351:7:0;;33378:11;;;:29;;4622:18:1;33378:42:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;33651:142::-;33779:4;;-1:-1:-1;;;;;33779:4:0;33704:7;18615:18;;;:9;:18;;;;;;33731:54;;33758:4;;-1:-1:-1;;;;;33758:4:0;18597:7;18615:18;;;:9;:18;;;;;;33731:33;;:12;;;:16;:33::i;:::-;:37;;:54::i;:::-;33724:61;;33651:142;:::o;32041:183::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;32151:11:::1;::::0;;:65:::1;::::0;-1:-1:-1;;;32151:65:0;;::::1;::::0;::::1;12482:25:1::0;;;12523:18;;;12516:34;;;-1:-1:-1;;;;;32151:11:0::1;::::0;:35:::1;::::0;12455:18:1;;32151:65:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32041:183:::0;;:::o;25591:164::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;25675:18:::1;:28:::0;;-1:-1:-1;;25714:33:0;25675:28;::::1;;-1:-1:-1::0;;25714:33:0;;;;;25675:28:::1;;25714:33:::0;;;::::1;::::0;;;::::1;;::::0;;25591:164::o;19998:283::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;20084:16:::1;:36:::0;;-1:-1:-1;;;;;20084:36:0;;::::1;-1:-1:-1::0;;;;;;20084:36:0;;::::1;::::0;::::1;::::0;;:16:::1;20131:30:::0;;;:11:::1;:30;::::0;;;;;;;:37;;-1:-1:-1;;20131:37:0;;::::1;20084:36:::0;20131:37;;::::1;::::0;;;20179:15:::1;:34:::0;;;;;:41;;;::::1;::::0;::::1;::::0;;20231:16:::1;:35:::0;;;;;:42;;;;::::1;::::0;;::::1;::::0;;19998:283::o;29719:130::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29808:24:0;;;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;29808:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29719:130::o;19007:122::-;19062:4;19086:35;19094:7;-1:-1:-1;;19086:7:0;:35::i;29401:120::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29485:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;29485:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29401:120::o;30552:433::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;30710:16:::1;:36:::0;;;30757:17:::1;:38:::0;;;30806:16:::1;:36:::0;;;30870:64:::1;30825:17:::0;30870:41:::1;30729:17:::0;30777:18;30870:21:::1;:41::i;:64::-;30855:12;:79:::0;30945:14:::1;:32:::0;-1:-1:-1;;;30552:433:0:o;28634:157::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;28739:44:::1;28777:5;28739:33;28756:15;28739:12;;:16;;:33;;;;:::i;:::-;:37:::0;::::1;:44::i;:::-;28721:15;:62:::0;-1:-1:-1;28634:157:0:o;19748:154::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;19851:43:::1;19888:5;19851:32;19868:14;19851:12;;:16;;:32;;;;:::i;:43::-;19833:15;:61:::0;-1:-1:-1;19748:154:0:o;33469:136::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;33559:6:::1;33553:3;:12;33545:21;;;::::0;::::1;;33577:14;:20:::0;33469:136::o;31043:237::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;31162:21:::1;:46:::0;;-1:-1:-1;;;;;31162:46:0;;::::1;-1:-1:-1::0;;;;;;31162:46:0;;::::1;;::::0;;;31219:20:::1;:44:::0;;;;;::::1;::::0;::::1;;::::0;;31043:237::o;29857:209::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29943:23:0;;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;:32;;;::::1;;-1:-1:-1::0;;29943:32:0;;::::1;::::0;::::1;::::0;;;29986:11:::1;:19:::0;;;;;:28;;;::::1;::::0;::::1;::::0;;30025:16:::1;:24:::0;;;;;;:33;;;;::::1;;::::0;;29857:209::o;19137:156::-;19217:4;19241:44;19255:10;19267:9;19278:6;19241:13;:44::i;3084:102::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3148:23:0::1;;::::0;;;3174:4:::1;3148:23;::::0;;;;;;;:30;;-1:-1:-1;;3148:30:0::1;::::0;;::::1;::::0;;3084:102::o;33835:167::-;33903:7;33930:64;33971:22;:20;:22::i;:::-;33953:4;;-1:-1:-1;;;;;33953:4:0;18597:7;18615:18;;;:9;:18;;;;;;33930:36;;33943:22;;33963:1;33943:19;:22::i;:::-;33930:8;;:12;:36::i;31326:180::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;31418:11:::1;:22:::0;;-1:-1:-1;;31418:22:0::1;;::::0;::::1;;;;::::0;;31467:12:::1;::::0;31492:5:::1;::::0;31467:22:::1;::::0;31482:7;;31467:22:::1;:::i;:::-;:30;;;;:::i;:::-;31451:13;:46:::0;-1:-1:-1;;31326:180:0:o;28824:161::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;28932:45:::1;28971:5;28932:34;28949:16;28932:12;;:16;;:34;;;;:::i;:45::-;28913:16;:64:::0;-1:-1:-1;28824:161:0:o;34563:147::-;34637:13;;;;;-1:-1:-1;;;;;34637:13:0;34623:10;:27;34615:53;;;;-1:-1:-1;;;34615:53:0;;7673:2:1;34615:53:0;;;7655:21:1;7712:2;7692:18;;;7685:30;-1:-1:-1;;;7731:18:1;;;7724:43;7784:18;;34615:53:0;7471:337:1;34615:53:0;34679:11;;;;;;;;;-1:-1:-1;;;;;34679:11:0;-1:-1:-1;;;;;34679:21:0;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34563:147::o;3261:105::-;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3327:23:0::1;3353:5;3327:23:::0;;;:14:::1;:23;::::0;;;;:31;;-1:-1:-1;;3327:31:0::1;::::0;;3261:105::o;32276:872::-;33103:11;;;:37;;-1:-1:-1;;;33103:37:0;;33129:10;33103:37;;;4649:51:1;-1:-1:-1;;;;;33103:11:0;;;;:25;;4622:18:1;33103:37:0;;;;;;;;;;;;;;;;;;;3833:189;3481:4;3516:5;-1:-1:-1;;;;;3516:5:0;2808:10;3505:16;2792:38;;;;-1:-1:-1;;;2792:38:0;;;;;;;:::i;:::-;3913:5:::1;:15:::0;;-1:-1:-1;;;;;;3913:15:0::1;-1:-1:-1::0;;;;;3913:15:0;::::1;::::0;;::::1;::::0;;3939:23;;;-1:-1:-1;3939:23:0::1;::::0;;;;;;;;:30;;-1:-1:-1;;3939:30:0::1;::::0;;::::1;::::0;;;3985:29;;4649:51:1;;;3985:29:0::1;::::0;4622:18:1;3985:29:0::1;;;;;;;3833:189:::0;:::o;31765:221::-;31825:13;;;;;-1:-1:-1;;;;;31825:13:0;31811:10;:27;31803:58;;;;-1:-1:-1;;;31803:58:0;;10656:2:1;31803:58:0;;;10638:21:1;10695:2;10675:18;;;10668:30;-1:-1:-1;;;10714:18:1;;;10707:48;10772:18;;31803:58:0;10454:342:1;31803:58:0;31935:13;;31927:51;;31899:21;;31935:13;;;-1:-1:-1;;;;;31935:13:0;;31927:51;;;;;31899:21;;31870:26;31927:51;31870:26;31927:51;31899:21;31935:13;31927:51;;;;;;;;;;;;;;;;;;;;;31796:190;31765:221::o;29022:347::-;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29119:23:0;::::1;29137:4;29119:23;::::0;::::1;::::0;:41:::1;;-1:-1:-1::0;29156:4:0::1;::::0;-1:-1:-1;;;;;29146:14:0;;::::1;29156:4:::0;::::1;29146:14;;29119:41;29111:50;;;::::0;::::1;;-1:-1:-1::0;;;;;29172:24:0;::::1;;::::0;;;:16:::1;:24;::::0;;;;:33;;-1:-1:-1;;29172:33:0::1;::::0;::::1;::::0;::::1;::::0;;;::::1;::::0;;;29216:146:::1;;29241:11;::::0;;:31:::1;::::0;-1:-1:-1;;;29241:31:0;;-1:-1:-1;;;;;5127:32:1;;;29241:31:0::1;::::0;::::1;5109:51:1::0;29241:11:0::1;5176:18:1::0;;;5169:34;;;;29241:11:0;::::1;::::0;:20:::1;::::0;5082:18:1;;29241:31:0::1;4927:282:1::0;29216:146:0::1;29303:11;::::0;;-1:-1:-1;;;;;29332:17:0;;::::1;29303:11;29332:17:::0;;;:9:::1;:17;::::0;;;;;;;29303:47;;-1:-1:-1;;;29303:47:0;;::::1;::::0;::::1;5109:51:1::0;;;;5176:18;;;5169:34;;;;29303:11:0::1;::::0;:20:::1;::::0;5082:18:1;;29303:47:0::1;4927:282:1::0;29556:128:0;2969:24;2982:10;2969:12;:24::i;:::-;2961:48;;;;-1:-1:-1;;;2961:48:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29644:23:0;;;::::1;;::::0;;;:15:::1;:23;::::0;;;;:32;;-1:-1:-1;;29644:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;29556:128::o;3599:115::-;-1:-1:-1;;;;;3683:23:0;3659:4;3683:23;;;:14;:23;;;;;;;;;3599:115::o;157:181::-;215:7;;247:5;251:1;247;:5;:::i;:::-;235:17;;276:1;271;:6;;263:46;;;;-1:-1:-1;;;263:46:0;;8015:2:1;263:46:0;;;7997:21:1;8054:2;8034:18;;;8027:30;8093:29;8073:18;;;8066:57;8140:18;;263:46:0;7813:351:1;486:192:0;572:7;608:12;600:6;;;;592:29;;;;-1:-1:-1;;;592:29:0;;;;;;;;:::i;:::-;-1:-1:-1;632:9:0;644:5;648:1;644;:5;:::i;:::-;632:17;486:192;-1:-1:-1;;;;;486:192:0:o;20320:1879::-;20432:6;;20412:4;;20432:6;;;;;20429:63;;;20448:41;20463:6;20471:9;20482:6;20448:14;:41::i;:::-;20441:48;;;;20429:63;-1:-1:-1;;;;;20548:22:0;;;;;;:14;:22;;;;;;;;20547:23;:53;;;;-1:-1:-1;;;;;;20575:25:0;;;;;;:14;:25;;;;;;;;20574:26;20547:53;:83;;;;-1:-1:-1;20604:16:0;;-1:-1:-1;;;;;20604:26:0;;;:16;;:26;;20547:83;20544:160;;;20654:11;;;;20646:46;;;;-1:-1:-1;;;20646:46:0;;10304:2:1;20646:46:0;;;10286:21:1;10343:2;10323:18;;;10316:30;10382:25;10362:18;;;10355:53;10425:18;;20646:46:0;10102:347:1;20646:46:0;20787:4;;-1:-1:-1;;;;;20787:4:0;;;20777:14;;;;;;20816:17;;;20886:22;20816:17;20886:14;:22::i;:::-;20952:41;20967:6;20975:9;20986:6;20952:14;:41::i;:::-;21035:35;21052:6;21060:9;21035:16;:35::i;:::-;21108:47;21121:6;21129;21137:9;21148:6;21108:12;:47::i;:::-;21218:16;:14;:16::i;:::-;21215:35;;;21237:10;:8;:10::i;:::-;21314:6;21313:7;:17;;;;;21325:5;21324:6;21313:17;21309:155;;;21370:1;21355:12;:16;;;21383:13;:17;;;21412:12;:16;;;21440:8;:12;21309:155;21523:53;;;;;;;;;;;-1:-1:-1;;;21523:53:0;;;;;;;;-1:-1:-1;;;;;21523:17:0;;-1:-1:-1;21523:17:0;;;:9;:17;;;;;;;;:53;;21545:6;;21523:21;:53::i;:::-;-1:-1:-1;;;;;21503:17:0;;;;;;:9;:17;;;;;;;;:73;;;;24773:11;:19;;;;;;;;24772:20;21614:56;;21664:6;21614:56;;;21638:23;21646:6;21654;21638:7;:23::i;:::-;-1:-1:-1;;;;;21704:20:0;;;;;;:9;:20;;;;;;21589:81;;-1:-1:-1;21704:40:0;;21589:81;21704:24;:40::i;:::-;-1:-1:-1;;;;;21681:20:0;;;;;;;:9;:20;;;;;;;;:63;;;;21790:24;;;;;:16;:24;;;;;;;21786:119;;21835:11;;;-1:-1:-1;;;;;21864:17:0;;;21835:11;21864:17;;;:9;:17;;;;;;;;21835:47;;-1:-1:-1;;;21835:47:0;;;;;5109:51:1;;;;5176:18;;;5169:34;;;;21835:11:0;;:20;;5082:18:1;;21835:47:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21831:63;;-1:-1:-1;;;;;21921:27:0;;;;;;:16;:27;;;;;;;;21917:129;;21969:11;;;-1:-1:-1;;;;;22001:20:0;;;21969:11;22001:20;;;:9;:20;;;;;;;;21969:53;;-1:-1:-1;;;21969:53:0;;;;;5109:51:1;;;;5176:18;;;5169:34;;;;21969:11:0;;:20;;5082:18:1;;21969:53:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21965:69;;22062:11;;22082:14;;22062:35;;-1:-1:-1;;;;;;22062:35:0;;-1:-1:-1;;;;;22062:11:0;;;;:19;;:35;;;;11287:25:1;;;11275:2;11260:18;;11141:177;22062:35:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22058:51;22143:9;-1:-1:-1;;;;;22126:43:0;22135:6;-1:-1:-1;;;;;22126:43:0;;22154:14;22126:43;;;;11287:25:1;;11275:2;11260:18;;11141:177;22126:43:0;;;;;;;;-1:-1:-1;22187:4:0;;20320:1879;-1:-1:-1;;;;;;20320:1879:0:o;344:136::-;402:7;429:43;433:1;436;429:43;;;;;;;;;;;;;;;;;:3;:43::i;684:250::-;742:7;766:6;762:47;;-1:-1:-1;796:1:0;789:8;;762:47;821:9;833:5;837:1;833;:5;:::i;:::-;821:17;-1:-1:-1;866:1:0;857:5;861:1;821:17;857:5;:::i;:::-;:10;849:56;;;;-1:-1:-1;;;849:56:0;;9137:2:1;849:56:0;;;9119:21:1;9176:2;9156:18;;;9149:30;9215:34;9195:18;;;9188:62;-1:-1:-1;;;9266:18:1;;;9259:31;9307:19;;849:56:0;8935:397:1;940:132:0;998:7;1025:39;1029:1;1032;1025:39;;;;;;;;;;;;;;;;;:3;:39::i;22236:330::-;22366:53;;;;;;;;;;;-1:-1:-1;;;22366:53:0;;;;;;;;-1:-1:-1;;;;;22366:17:0;;22329:4;22366:17;;;:9;:17;;;;;;;:53;;22388:6;;22366:21;:53::i;:::-;-1:-1:-1;;;;;22346:17:0;;;;;;;:9;:17;;;;;;:73;;;;22453:20;;;;;;;:32;;22478:6;22453:24;:32::i;:::-;-1:-1:-1;;;;;22430:20:0;;;;;;;:9;:20;;;;;;;:55;;;;22501:35;;;;;;;;;;22529:6;11287:25:1;;11275:2;11260:18;;11141:177;22501:35:0;;;;;;;;-1:-1:-1;22554:4:0;22236:330;;;;;:::o;22625:456::-;22685:6;22682:392;;;22722:16;;22707:12;:31;22769:17;;22753:13;:33;22816:16;;22801:12;:31;22858:12;;22847:8;:23;22625:456;:::o;22682:392::-;22918:15;;22903:12;:30;22964:16;;22948:13;:32;23010:15;;22995:12;:30;23051:11;;23040:8;:22;22682:392;22625:456;:::o;24036:601::-;-1:-1:-1;;;;;24141:22:0;;;;;;:14;:22;;;;;;;;24140:23;:51;;;;-1:-1:-1;;;;;;24168:23:0;;;;;;:15;:23;;;;;;;;24167:24;24140:51;:82;;;;-1:-1:-1;;;;;;24196:26:0;;;;;;:15;:26;;;;;;;;24195:27;24140:82;:104;;;;-1:-1:-1;24239:5:0;;-1:-1:-1;;;;;24226:18:0;;;24239:5;;24226:18;;24140:104;:134;;;;-1:-1:-1;;;;;;24248:26:0;;24269:4;24248:26;;24140:134;:165;;;;-1:-1:-1;24300:4:0;;-1:-1:-1;;;;;24279:26:0;;;24300:4;;24279:26;;24140:165;:186;;;;-1:-1:-1;24322:4:0;;-1:-1:-1;;;;;24309:17:0;;;24322:4;;24309:17;;24140:186;:223;;;;-1:-1:-1;24343:20:0;;-1:-1:-1;;;;;24330:33:0;;;24343:20;;24330:33;;24140:223;:261;;;;-1:-1:-1;24380:21:0;;-1:-1:-1;;;;;24367:34:0;;;24380:21;;24367:34;;24140:261;:292;;;;-1:-1:-1;24418:14:0;;-1:-1:-1;;;;;24405:27:0;;;24418:14;;24405:27;;24140:292;24136:494;;;-1:-1:-1;;;;;18615:18:0;;24448;18615;;;:9;:18;;;;;;24537:15;;24513:19;24526:6;18615:18;24513:19;:::i;:::-;24512:40;;24504:114;;;;-1:-1:-1;;;24504:114:0;;9539:2:1;24504:114:0;;;9521:21:1;9578:2;9558:18;;;9551:30;9617:34;9597:18;;;9590:62;9688:32;9668:18;;;9661:60;9738:19;;24504:114:0;9337:426:1;24136:494:0;24036:601;;;:::o;23626:378::-;23721:4;;-1:-1:-1;;;;;23711:14:0;;;23721:4;;23711:14;:49;;;;-1:-1:-1;23742:18:0;;;;23711:49;:94;;;;-1:-1:-1;;;;;;23778:27:0;;;;;;:16;:27;;;;;;;;23777:28;23711:94;23707:290;;;-1:-1:-1;;;;;23830:24:0;;;;;;:13;:24;;;;;;23857:15;-1:-1:-1;23822:82:0;;;;-1:-1:-1;;;23822:82:0;;8780:2:1;23822:82:0;;;8762:21:1;8819:2;8799:18;;;8792:30;8858;8838:18;;;8831:58;8906:18;;23822:82:0;8578:352:1;23822:82:0;23964:21;;23946:39;;23964:21;;;;;23946:15;:39;:::i;:::-;-1:-1:-1;;;;;23919:24:0;;;;;;:13;:24;;;;;:66;23626:378;;:::o;23113:478::-;23241:5;;-1:-1:-1;;;;;23228:18:0;;;23241:5;;23228:18;23224:360;;23265:6;23262:311;;;23309:16;;23299:6;:26;;:53;;;-1:-1:-1;;;;;;23329:23:0;;;;;;:15;:23;;;;;;;;23299:53;:83;;;-1:-1:-1;;;;;;23356:26:0;;;;;;:15;:26;;;;;;;;23299:83;23291:113;;;;-1:-1:-1;;;23291:113:0;;7327:2:1;23291:113:0;;;7309:21:1;7366:2;7346:18;;;7339:30;-1:-1:-1;;;7385:18:1;;;7378:47;7442:18;;23291:113:0;7125:341:1;23291:113:0;23262:311;;;23463:15;;23453:6;:25;;:52;;;-1:-1:-1;;;;;;23482:23:0;;;;;;:15;:23;;;;;;;;23453:52;:82;;;-1:-1:-1;;;;;;23509:26:0;;;;;;:15;:26;;;;;;;;23453:82;23445:112;;;;-1:-1:-1;;;23445:112:0;;7327:2:1;23445:112:0;;;7309:21:1;7366:2;7346:18;;;7339:30;-1:-1:-1;;;7385:18:1;;;7378:47;7442:18;;23445:112:0;7125:341:1;25222:197:0;25309:4;;25271;;-1:-1:-1;;;;;25309:4:0;25295:10;:18;;;;:38;;-1:-1:-1;25327:6:0;;;;;;;25326:7;25295:38;:62;;;;-1:-1:-1;25346:11:0;;;;;;;25295:62;:116;;;;-1:-1:-1;;25398:13:0;;25388:4;25370:24;;;;:9;:24;;;;;;:41;;;25222:197::o;25809:2104::-;15939:6;:13;;-1:-1:-1;;15939:13:0;;;;;25904:15:::1;::::0;25921:26:::1;::::0;15939:13;;25888:60:::1;::::0;:15:::1;:60::i;:::-;:79;;25955:12;;25888:79;;;25951:1;25888:79;25858:109;;25978:23;26004:59;26061:1;26004:52;26047:8;;26004:38;26022:19;26004:13;;:17;;:38;;;;:::i;:59::-;25978:85;;26074:20;26097:34;26115:15;26097:13;;:17;;:34;;;;:::i;:::-;26168:16;::::0;;26182:1:::1;26168:16:::0;;;;;::::1;::::0;;26074:57;;-1:-1:-1;26144:21:0::1;::::0;26168:16;;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;26168:16:0::1;26144:40;;26213:4;26195;26200:1;26195:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26195:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;26239:4:::1;::::0;26229:7;;26239:4;::::1;::::0;26229;;26239;;26229:7;::::1;;;;;:::i;:::-;-1:-1:-1::0;;;;;26229:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;26396:6:::1;::::0;:188:::1;::::0;-1:-1:-1;;;26396:188:0;;26316:21:::1;::::0;26396:6;;;::::1;::::0;:57:::1;::::0;:188:::1;::::0;26468:12;;26292:21:::1;::::0;26511:4;;26538::::1;::::0;26558:15:::1;::::0;26396:188:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;26595:18;26616:40;26642:13;26616:21;:25;;:40;;;;:::i;:::-;26595:61:::0;-1:-1:-1;26667:20:0::1;26690:40;26703:26;:19:::0;26727:1:::1;26703:23;:26::i;:::-;26690:8;::::0;;:12:::1;:40::i;:::-;26667:63:::0;-1:-1:-1;26774:27:0::1;26804:60;26862:1;26804:53;26667:63:::0;26804:53;:10;26819:19;26804:14:::1;:35::i;:60::-;26774:90;;26875:28;26906:47;26940:12;26906:29;26921:13;;26906:10;:14;;:29;;;;:::i;:47::-;26875:78;;26964:27;26994:46;27027:12;26994:28;27009:12;;26994:10;:14;;:28;;;;:::i;:46::-;26964:76;;27153:11;;;;;;;;;-1:-1:-1::0;;;;;27153:11:0::1;-1:-1:-1::0;;;;;27153:22:0::1;;27183:20;27153:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;27341:20:0::1;::::0;27333:78:::1;::::0;27283:21:::1;::::0;-1:-1:-1;;;;;27341:20:0::1;::::0;27401:5:::1;::::0;27375:19;;27283:21;27333:78;27283:21;27333:78;27375:19;27341:20;27401:5;27333:78:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27282:129;;;27430:16;27422:69;;;::::0;-1:-1:-1;;;27422:69:0;;8371:2:1;27422:69:0::1;::::0;::::1;8353:21:1::0;8410:2;8390:18;;;8383:30;8449:34;8429:18;;;8422:62;-1:-1:-1;;;8500:18:1;;;8493:38;8548:19;;27422:69:0::1;8169:404:1::0;27422:69:0::1;27545:19:::0;;27542:364:::1;;27580:6;::::0;27755:21:::1;::::0;27580:245:::1;::::0;-1:-1:-1;;;27580:245:0;;27657:4:::1;27580:245;::::0;::::1;5834:34:1::0;5884:18;;;5877:34;;;27580:6:0::1;5927:18:1::0;;;5920:34;;;5970:18;;;5963:34;-1:-1:-1;;;;;27755:21:0;;::::1;6013:19:1::0;;;6006:44;27795:15:0::1;6066:19:1::0;;;6059:35;27580:6:0;::::1;::::0;:22:::1;::::0;27610:19;;5768::1;;27580:245:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27845:49:0::1;::::0;;12482:25:1;;;12538:2;12523:18;;12516:34;;;27845:49:0::1;::::0;-1:-1:-1;12455:18:1;27845:49:0::1;;;;;;;27542:364;-1:-1:-1::0;;15957:6:0;:14;;-1:-1:-1;;15957:14:0;;;-1:-1:-1;;;;;;;;;25809:2104:0:o;24842:333::-;24909:7;24929:17;24949:40;24974:14;;24949:20;24960:8;;24949:6;:10;;:20;;;;:::i;:40::-;25047:4;25029:24;;;;:9;:24;;;;;;24929:60;;-1:-1:-1;25029:39:0;;24929:60;25029:28;:39::i;:::-;25020:4;25002:24;;;;:9;:24;;;;;;;:66;;;;25084:42;;-1:-1:-1;;;;;25084:42:0;;;;;;;25116:9;11287:25:1;;11275:2;11260:18;;11141:177;25084:42:0;;;;;;;;25146:21;:6;25157:9;25146:10;:21::i;:::-;25139:28;24842:333;-1:-1:-1;;;;24842:333:0:o;1078:345::-;1164:7;1266:12;1259:5;1251:28;;;;-1:-1:-1;;;1251:28:0;;;;;;;;:::i;:::-;-1:-1:-1;1290:9:0;1302:5;1306:1;1302;:5;:::i;14:160:1:-;79:20;;135:13;;128:21;118:32;;108:60;;164:1;161;154:12;108:60;14:160;;;:::o;179:247::-;238:6;291:2;279:9;270:7;266:23;262:32;259:52;;;307:1;304;297:12;259:52;346:9;333:23;365:31;390:5;365:31;:::i;691:388::-;759:6;767;820:2;808:9;799:7;795:23;791:32;788:52;;;836:1;833;826:12;788:52;875:9;862:23;894:31;919:5;894:31;:::i;:::-;944:5;-1:-1:-1;1001:2:1;986:18;;973:32;1014:33;973:32;1014:33;:::i;:::-;1066:7;1056:17;;;691:388;;;;;:::o;1084:456::-;1161:6;1169;1177;1230:2;1218:9;1209:7;1205:23;1201:32;1198:52;;;1246:1;1243;1236:12;1198:52;1285:9;1272:23;1304:31;1329:5;1304:31;:::i;:::-;1354:5;-1:-1:-1;1411:2:1;1396:18;;1383:32;1424:33;1383:32;1424:33;:::i;:::-;1084:456;;1476:7;;-1:-1:-1;;;1530:2:1;1515:18;;;;1502:32;;1084:456::o;1545:315::-;1610:6;1618;1671:2;1659:9;1650:7;1646:23;1642:32;1639:52;;;1687:1;1684;1677:12;1639:52;1726:9;1713:23;1745:31;1770:5;1745:31;:::i;:::-;1795:5;-1:-1:-1;1819:35:1;1850:2;1835:18;;1819:35;:::i;:::-;1809:45;;1545:315;;;;;:::o;1865:::-;1933:6;1941;1994:2;1982:9;1973:7;1969:23;1965:32;1962:52;;;2010:1;2007;2000:12;1962:52;2049:9;2036:23;2068:31;2093:5;2068:31;:::i;:::-;2118:5;2170:2;2155:18;;;;2142:32;;-1:-1:-1;;;1865:315:1:o;2185:180::-;2241:6;2294:2;2282:9;2273:7;2269:23;2265:32;2262:52;;;2310:1;2307;2300:12;2262:52;2333:26;2349:9;2333:26;:::i;2370:248::-;2435:6;2443;2496:2;2484:9;2475:7;2471:23;2467:32;2464:52;;;2512:1;2509;2502:12;2464:52;2535:26;2551:9;2535:26;:::i;2623:337::-;2686:6;2694;2747:2;2735:9;2726:7;2722:23;2718:32;2715:52;;;2763:1;2760;2753:12;2715:52;2786:26;2802:9;2786:26;:::i;:::-;2776:36;;2862:2;2851:9;2847:18;2834:32;2906:4;2899:5;2895:16;2888:5;2885:27;2875:55;;2926:1;2923;2916:12;2965:180;3024:6;3077:2;3065:9;3056:7;3052:23;3048:32;3045:52;;;3093:1;3090;3083:12;3045:52;-1:-1:-1;3116:23:1;;2965:180;-1:-1:-1;2965:180:1:o;3150:184::-;3220:6;3273:2;3261:9;3252:7;3248:23;3244:32;3241:52;;;3289:1;3286;3279:12;3241:52;-1:-1:-1;3312:16:1;;3150:184;-1:-1:-1;3150:184:1:o;3339:248::-;3407:6;3415;3468:2;3456:9;3447:7;3443:23;3439:32;3436:52;;;3484:1;3481;3474:12;3436:52;-1:-1:-1;;3507:23:1;;;3577:2;3562:18;;;3549:32;;-1:-1:-1;3339:248:1:o;3592:306::-;3680:6;3688;3696;3749:2;3737:9;3728:7;3724:23;3720:32;3717:52;;;3765:1;3762;3755:12;3717:52;3794:9;3788:16;3778:26;;3844:2;3833:9;3829:18;3823:25;3813:35;;3888:2;3877:9;3873:18;3867:25;3857:35;;3592:306;;;;;:::o;3903:385::-;3989:6;3997;4005;4013;4066:3;4054:9;4045:7;4041:23;4037:33;4034:53;;;4083:1;4080;4073:12;4034:53;-1:-1:-1;;4106:23:1;;;4176:2;4161:18;;4148:32;;-1:-1:-1;4227:2:1;4212:18;;4199:32;;4278:2;4263:18;4250:32;;-1:-1:-1;3903:385:1;-1:-1:-1;3903:385:1:o;6523:597::-;6635:4;6664:2;6693;6682:9;6675:21;6725:6;6719:13;6768:6;6763:2;6752:9;6748:18;6741:34;6793:1;6803:140;6817:6;6814:1;6811:13;6803:140;;;6912:14;;;6908:23;;6902:30;6878:17;;;6897:2;6874:26;6867:66;6832:10;;6803:140;;;6961:6;6958:1;6955:13;6952:91;;;7031:1;7026:2;7017:6;7006:9;7002:22;6998:31;6991:42;6952:91;-1:-1:-1;7104:2:1;7083:15;-1:-1:-1;;7079:29:1;7064:45;;;;7111:2;7060:54;;6523:597;-1:-1:-1;;;6523:597:1:o;9768:329::-;9970:2;9952:21;;;10009:1;9989:18;;;9982:29;-1:-1:-1;;;10042:2:1;10027:18;;10020:36;10088:2;10073:18;;9768:329::o;10801:335::-;11003:2;10985:21;;;11042:2;11022:18;;;11015:30;-1:-1:-1;;;11076:2:1;11061:18;;11054:41;11127:2;11112:18;;10801:335::o;11323:980::-;11585:4;11633:3;11622:9;11618:19;11664:6;11653:9;11646:25;11690:2;11728:6;11723:2;11712:9;11708:18;11701:34;11771:3;11766:2;11755:9;11751:18;11744:31;11795:6;11830;11824:13;11861:6;11853;11846:22;11899:3;11888:9;11884:19;11877:26;;11938:2;11930:6;11926:15;11912:29;;11959:1;11969:195;11983:6;11980:1;11977:13;11969:195;;;12048:13;;-1:-1:-1;;;;;12044:39:1;12032:52;;12139:15;;;;12104:12;;;;12080:1;11998:9;11969:195;;;-1:-1:-1;;;;;;;12220:32:1;;;;12215:2;12200:18;;12193:60;-1:-1:-1;;;12284:3:1;12269:19;12262:35;12181:3;11323:980;-1:-1:-1;;;11323:980:1:o;12750:128::-;12790:3;12821:1;12817:6;12814:1;12811:13;12808:39;;;12827:18;;:::i;:::-;-1:-1:-1;12863:9:1;;12750:128::o;12883:217::-;12923:1;12949;12939:132;;12993:10;12988:3;12984:20;12981:1;12974:31;13028:4;13025:1;13018:15;13056:4;13053:1;13046:15;12939:132;-1:-1:-1;13085:9:1;;12883:217::o;13105:168::-;13145:7;13211:1;13207;13203:6;13199:14;13196:1;13193:21;13188:1;13181:9;13174:17;13170:45;13167:71;;;13218:18;;:::i;:::-;-1:-1:-1;13258:9:1;;13105:168::o;13278:125::-;13318:4;13346:1;13343;13340:8;13337:34;;;13351:18;;:::i;:::-;-1:-1:-1;13388:9:1;;13278:125::o;13408:127::-;13469:10;13464:3;13460:20;13457:1;13450:31;13500:4;13497:1;13490:15;13524:4;13521:1;13514:15;13540:127;13601:10;13596:3;13592:20;13589:1;13582:31;13632:4;13629:1;13622:15;13656:4;13653:1;13646:15;13804:131;-1:-1:-1;;;;;13879:31:1;;13869:42;;13859:70;;13925:1;13922;13915:12
Swarm Source
ipfs://ef38b87426ab8eb0223b01dd20385b76899d3193d1586649a4fa1943a2729379
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in MON
Token Allocations
MON
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| MONAD | 100.00% | $0.018855 | 0.000000000000000038 | <$0.000001 |
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.