ETH Price: $1,795.86 (+10.32%)
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve222670062025-04-14 11:43:478 days ago1744631027IN
PIXIA: PIXIA Token
0 ETH0.000263910.83290422
Transfer222310802025-04-09 11:34:4713 days ago1744198487IN
PIXIA: PIXIA Token
0 ETH0.000833232.13605417
Approve220405942025-03-13 21:19:5940 days ago1741900799IN
PIXIA: PIXIA Token
0 ETH0.000051861.11344375
Approve218710192025-02-18 4:57:5964 days ago1739854679IN
PIXIA: PIXIA Token
0 ETH0.000029091.19426309
Approve218710172025-02-18 4:57:3564 days ago1739854655IN
PIXIA: PIXIA Token
0 ETH0.000029231.2
Transfer218130732025-02-10 2:16:1172 days ago1739153771IN
PIXIA: PIXIA Token
0 ETH0.000533750.80901454
Approve214317432024-12-18 20:16:47125 days ago1734553007IN
PIXIA: PIXIA Token
0 ETH0.0021671789.18030733
Approve213747082024-12-10 21:11:59133 days ago1733865119IN
PIXIA: PIXIA Token
0 ETH0.000616525.30717644
Approve210213532024-10-22 13:15:23182 days ago1729602923IN
PIXIA: PIXIA Token
0 ETH0.0002752711.3
Approve209170222024-10-07 23:38:23197 days ago1728344303IN
PIXIA: PIXIA Token
0 ETH0.000206448.49522535
Approve206561202024-09-01 13:48:59233 days ago1725198539IN
PIXIA: PIXIA Token
0 ETH0.000036451.5
Approve204369262024-08-01 23:17:11264 days ago1722554231IN
PIXIA: PIXIA Token
0 ETH0.000153646.32278184
Approve203544142024-07-21 10:48:23275 days ago1721558903IN
PIXIA: PIXIA Token
0 ETH0.000047391.95013329
Approve203511622024-07-20 23:55:23276 days ago1721519723IN
PIXIA: PIXIA Token
0 ETH0.00006352.61310739
Approve202571862024-07-07 21:01:59289 days ago1720386119IN
PIXIA: PIXIA Token
0 ETH0.000056771.22438234
Approve201948952024-06-29 4:15:59298 days ago1719634559IN
PIXIA: PIXIA Token
0 ETH0.000091271.95924088
Approve198532142024-05-12 10:02:11345 days ago1715508131IN
PIXIA: PIXIA Token
0 ETH0.000083493.43598357
Transfer197789302024-05-02 0:41:23356 days ago1714610483IN
PIXIA: PIXIA Token
0 ETH0.001560334
Approve197507072024-04-28 2:02:35360 days ago1714269755IN
PIXIA: PIXIA Token
0 ETH0.000240565.19334923
Approve197216112024-04-24 0:16:59364 days ago1713917819IN
PIXIA: PIXIA Token
0 ETH0.000202528.33392393
Approve196813492024-04-18 9:07:47369 days ago1713431267IN
PIXIA: PIXIA Token
0 ETH0.000227899.37814749
Approve196541462024-04-14 13:43:23373 days ago1713102203IN
PIXIA: PIXIA Token
0 ETH0.0002860611.77156635
Approve195669312024-04-02 8:29:11385 days ago1712046551IN
PIXIA: PIXIA Token
0 ETH0.0007946332.69948936
Approve195275192024-03-27 18:59:11391 days ago1711565951IN
PIXIA: PIXIA Token
0 ETH0.0010786544.38734326
Approve195203022024-03-26 18:12:23392 days ago1711476743IN
PIXIA: PIXIA Token
0 ETH0.0011763448.28814977
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Method Block
From
To
Transfer218130732025-02-10 2:16:1172 days ago1739153771
PIXIA: PIXIA Token
0.00000007 ETH
Add Liquidity ET...218130732025-02-10 2:16:1172 days ago1739153771
PIXIA: PIXIA Token
0.00000491 ETH
Transfer218130732025-02-10 2:16:1172 days ago1739153771
PIXIA: PIXIA Token
0.00000338 ETH
Transfer218130732025-02-10 2:16:1172 days ago1739153771
PIXIA: PIXIA Token
0.0000302 ETH
Transfer218130732025-02-10 2:16:1172 days ago1739153771
PIXIA: PIXIA Token
0.00001828 ETH
Transfer218130732025-02-10 2:16:1172 days ago1739153771
PIXIA: PIXIA Token
0.00005679 ETH
Transfer202571862024-07-07 21:01:59289 days ago1720386119
PIXIA: PIXIA Token
0.00000007 ETH
Add Liquidity ET...202571862024-07-07 21:01:59289 days ago1720386119
PIXIA: PIXIA Token
0.00000491 ETH
Transfer202571862024-07-07 21:01:59289 days ago1720386119
PIXIA: PIXIA Token
0.00000338 ETH
Transfer202571862024-07-07 21:01:59289 days ago1720386119
PIXIA: PIXIA Token
0.0000302 ETH
Transfer202571862024-07-07 21:01:59289 days ago1720386119
PIXIA: PIXIA Token
0.00001828 ETH
Transfer202571862024-07-07 21:01:59289 days ago1720386119
PIXIA: PIXIA Token
0.00005679 ETH
Transfer185261462023-11-08 8:48:35531 days ago1699433315
PIXIA: PIXIA Token
0.000011 ETH
Add Liquidity ET...185261462023-11-08 8:48:35531 days ago1699433315
PIXIA: PIXIA Token
0.00008734 ETH
Transfer185261462023-11-08 8:48:35531 days ago1699433315
PIXIA: PIXIA Token
0.00006013 ETH
Transfer185261462023-11-08 8:48:35531 days ago1699433315
PIXIA: PIXIA Token
0.00053695 ETH
Transfer185261462023-11-08 8:48:35531 days ago1699433315
PIXIA: PIXIA Token
0.00032503 ETH
Transfer185261462023-11-08 8:48:35531 days ago1699433315
PIXIA: PIXIA Token
0.00100946 ETH
Transfer178068452023-07-30 15:49:59632 days ago1690732199
PIXIA: PIXIA Token
0.00016345 ETH
Add Liquidity ET...178068452023-07-30 15:49:59632 days ago1690732199
PIXIA: PIXIA Token
0.00057734 ETH
Transfer178068452023-07-30 15:49:59632 days ago1690732199
PIXIA: PIXIA Token
0.00039751 ETH
Transfer178068452023-07-30 15:49:59632 days ago1690732199
PIXIA: PIXIA Token
0.00354926 ETH
Transfer178068452023-07-30 15:49:59632 days ago1690732199
PIXIA: PIXIA Token
0.00214848 ETH
Transfer178068452023-07-30 15:49:59632 days ago1690732199
PIXIA: PIXIA Token
0.00667262 ETH
Transfer172585982023-05-14 14:09:35709 days ago1684073375
PIXIA: PIXIA Token
0.0342805 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
PixiaAI

Compiler Version
v0.8.17+commit.8df45f5f

Optimization Enabled:
Yes with 10 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-01-30
*/

// SPDX-License-Identifier: MIT


/*
 * █▀█ █ ▀▄▀ █ ▄▀█   ▄▀█ █
 * █▀▀ █ █░█ █ █▀█   █▀█ █
 *
 * https://Pixia.Ai
 * https://t.me/PixiaAi
 * https://twitter.com/PixiaAi
*/


pragma solidity 0.8.17;

interface IUniswapV2Router01 {

    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 removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
    returns (uint[] memory amounts);
    
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
    returns (uint[] memory amounts);
    
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
    returns (uint[] memory amounts);
    
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
    returns (uint[] memory amounts);

    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}


interface IUniswapV2Router02 is IUniswapV2Router01 {

    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);

    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);

    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 IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);

    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);

    function createPair(address tokenA, address tokenB) external returns (address pair);

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}


library IterableMapping {
    // Iterable mapping from address to uint;
    struct Map {
        address[] keys;
        mapping(address => uint) values;
        mapping(address => uint) indexOf;
        mapping(address => bool) inserted;
    }

    function get(Map storage map, address key) internal view returns (uint) {
        return map.values[key];
    }

    function getIndexOfKey(Map storage map, address key) internal view returns (int) {
        if(!map.inserted[key]) {
            return -1;
        }
        return int(map.indexOf[key]);
    }

    function getKeyAtIndex(Map storage map, uint index) internal view returns (address) {
        return map.keys[index];
    }

    function size(Map storage map) internal view returns (uint) {
        return map.keys.length;
    }

    function set(Map storage map, address key, uint val) internal {
        if (map.inserted[key]) {
            map.values[key] = val;
        } else {
            map.inserted[key] = true;
            map.values[key] = val;
            map.indexOf[key] = map.keys.length;
            map.keys.push(key);
        }
    }

    function remove(Map storage map, address key) internal {
        if (!map.inserted[key]) {
            return;
        }

        delete map.inserted[key];
        delete map.values[key];

        uint index = map.indexOf[key];
        uint lastIndex = map.keys.length - 1;
        address lastKey = map.keys[lastIndex];

        map.indexOf[lastKey] = index;
        delete map.indexOf[key];

        map.keys[index] = lastKey;
        map.keys.pop();
    }
}


/// @title Dividend-Paying Token Optional Interface
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev OPTIONAL functions for a dividend-paying token contract.
interface DividendPayingTokenOptionalInterface {
  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function withdrawableDividendOf(address _owner) external view returns(uint256);

  /// @notice View the amount of dividend in wei that an address has withdrawn.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has withdrawn.
  function withdrawnDividendOf(address _owner) external view returns(uint256);

  /// @notice View the amount of dividend in wei that an address has earned in total.
  /// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner)
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has earned in total.
  function accumulativeDividendOf(address _owner) external view returns(uint256);
}


/// @title Dividend-Paying Token Interface
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev An interface for a dividend-paying token contract.
interface DividendPayingTokenInterface {
  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function dividendOf(address _owner) external view returns(uint256);


  /// @notice Withdraws the ether distributed to the sender.
  /// @dev SHOULD transfer `dividendOf(msg.sender)` wei to `msg.sender`, and `dividendOf(msg.sender)` SHOULD be 0 after the transfer.
  ///  MUST emit a `DividendWithdrawn` event if the amount of ether transferred is greater than 0.
  function withdrawDividend() external;

  /// @dev This event MUST emit when ether is distributed to token holders.
  /// @param from The address which sends ether to this contract.
  /// @param weiAmount The amount of distributed ether in wei.
  event DividendsDistributed(
    address indexed from,
    uint256 weiAmount
  );

  /// @dev This event MUST emit when an address withdraws their dividend.
  /// @param to The address which withdraws ether from this contract.
  /// @param weiAmount The amount of withdrawn ether in wei.
  event DividendWithdrawn(
    address indexed to,
    uint256 weiAmount
  );
}


library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    function div(int256 a, int256 b) internal pure returns (int256) {
        
        require(b != -1 || a != MIN_INT256);

        
        return a / b;
    }
   
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
    
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}


library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}


library SafeMath {
  
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }
    
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }
    
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
          
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }
    
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }
    
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }
    
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }
    
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }
    
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }
  
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}


abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor() {
        _setOwner(_msgSender());
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


interface IERC20 {
    
    function totalSupply() external view returns (uint256);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function allowance(address owner, address spender) external view returns (uint256);

    function approve(address spender, uint256 amount) external returns (bool);

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) external returns (bool);

    
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    
    function name() external view returns (string memory);

    function symbol() external view returns (string memory);

    function decimals() external view returns (uint8);
}


contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

    // The name function returns the name of the token.
    function name() public view virtual override returns (string memory) {
        return _name;
    }

    // The symbol function returns the symbol of the token.
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    // The decimals function returns the number of decimal places used by the token.
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

    // The totalSupply function returns the total supply of tokens in the contract.
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    // The balanceOf function returns the balance of tokens for an address.
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    // The transfer function transfers tokens to a recipient.
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }

    // The allowance function returns the allowance of a spender to spend tokens on behalf of an owner.
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    // The approve function approves an address to spend a certain amount of tokens.
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }

    // The transferFrom function transfers a certain amount of tokens from one address to another, then updates the allowance.
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

    // The increaseAllowance function increases the allowance of a spender.
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue);
        return true;
    }

    // The decreaseAllowance function decrease the allowance of a spender.
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    // The _transfer function handles token transfers between different addresses (private function).
    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

    // The _approve function updates the allowance of a spender for an owner and emits an Approval event (private function).
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


/// @title Dividend-Paying Token
/// @author Roger Wu (https://github.com/roger-wu)
/// @dev A mintable ERC20 token that allows anyone to pay and distribute ether
///  to token holders as dividends and allows token holders to withdraw their dividends.
///  Reference: the source code of PoWH3D: https://etherscan.io/address/0xB3775fB83F7D12A36E0475aBdD1FCA35c091efBe#code
contract DividendPayingToken is ERC20, Ownable, DividendPayingTokenInterface, DividendPayingTokenOptionalInterface {
  using SafeMath for uint256;
  using SafeMathUint for uint256;
  using SafeMathInt for int256;

  address public immutable  partnerToken; 


  // With `magnitude`, we can properly distribute dividends even if the amount of received ether is small.
  // For more discussion about choosing the value of `magnitude`,
  //  see https://github.com/ethereum/EIPs/issues/1726#issuecomment-472352728
  uint256 constant internal magnitude = 2**128;

  uint256 internal magnifiedDividendPerShare;

  // About dividendCorrection:
  // If the token balance of a `_user` is never changed, the dividend of `_user` can be computed with:
  //   `dividendOf(_user) = dividendPerShare * balanceOf(_user)`.
  // When `balanceOf(_user)` is changed (via minting/burning/transferring tokens),
  //   `dividendOf(_user)` should not be changed,
  //   but the computed value of `dividendPerShare * balanceOf(_user)` is changed.
  // To keep the `dividendOf(_user)` unchanged, we add a correction term:
  //   `dividendOf(_user) = dividendPerShare * balanceOf(_user) + dividendCorrectionOf(_user)`,
  //   where `dividendCorrectionOf(_user)` is updated whenever `balanceOf(_user)` is changed:
  //   `dividendCorrectionOf(_user) = dividendPerShare * (old balanceOf(_user)) - (new balanceOf(_user))`.
  // So now `dividendOf(_user)` returns the same value before and after `balanceOf(_user)` is changed.
  mapping(address => int256) internal magnifiedDividendCorrections;
  mapping(address => uint256) internal withdrawnDividends;

  uint256 public totalDividendsDistributed;

  constructor (string memory _name, string memory _symbol, address _rewardToken) ERC20(_name, _symbol) {
         partnerToken = _rewardToken;
  }


  function distributepartnerDividends(uint256 amount) public onlyOwner{
    require(totalSupply() > 0);

    if (amount > 0) {
      magnifiedDividendPerShare = magnifiedDividendPerShare.add(
        (amount).mul(magnitude) / totalSupply()
      );
      emit DividendsDistributed(msg.sender, amount);

      totalDividendsDistributed = totalDividendsDistributed.add(amount);
    }
  }

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev It emits a `DividendWithdrawn` event if the amount of withdrawn ether is greater than 0.
  function withdrawDividend() public virtual override {
    _withdrawDividendOfUser(payable(msg.sender));
  }

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev It emits a `DividendWithdrawn` event if the amount of withdrawn ether is greater than 0.
  function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
    uint256 _withdrawableDividend = withdrawableDividendOf(user);
    if (_withdrawableDividend > 0) {
      withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
      emit DividendWithdrawn(user, _withdrawableDividend);
      bool success = IERC20(partnerToken).transfer(user, _withdrawableDividend);

      if(!success) {
        withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
        return 0;
      }

      return _withdrawableDividend;
    }

    return 0;
  }

  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function dividendOf(address _owner) public view override returns(uint256) {
    return withdrawableDividendOf(_owner);
  }

  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function withdrawableDividendOf(address _owner) public view override returns(uint256) {
    return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
  }

  /// @notice View the amount of dividend in wei that an address has withdrawn.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has withdrawn.
  function withdrawnDividendOf(address _owner) public view override returns(uint256) {
    return withdrawnDividends[_owner];
  }

  /// @notice View the amount of dividend in wei that an address has earned in total.
  /// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner)
  /// = (magnifiedDividendPerShare * balanceOf(_owner) + magnifiedDividendCorrections[_owner]) / magnitude
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has earned in total.
  function accumulativeDividendOf(address _owner) public view override returns(uint256) {
    return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
      .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
  }

  /// @dev Internal function that transfer tokens from one address to another.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param from The address to transfer from.
  /// @param to The address to transfer to.
  /// @param value The amount to be transferred.
  function _transfer(address from, address to, uint256 value) internal virtual override {
    require(false);

    int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe();
    magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection);
    magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection);
  }

  /// @dev Internal function that mints tokens to an account.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param account The account that will receive the created tokens.
  /// @param value The amount that will be created.
  function _mint(address account, uint256 value) internal override {
    super._mint(account, value);

    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
  }

  /// @dev Internal function that burns an amount of the token of a given account.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param account The account whose tokens will be burnt.
  /// @param value The amount that will be burnt.
  function _burn(address account, uint256 value) internal override {
    super._burn(account, value);

    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
  }

  function _setBalance(address account, uint256 newBalance) internal {
    uint256 currentBalance = balanceOf(account);

    if(newBalance > currentBalance) {
      uint256 mintAmount = newBalance.sub(currentBalance);
      _mint(account, mintAmount);
    } else if(newBalance < currentBalance) {
      uint256 burnAmount = currentBalance.sub(newBalance);
      _burn(account, burnAmount);
    }
  }
}


// File: contracts/PixiaAI.sol

contract PixiaAI is ERC20, Ownable {
    using SafeMath for uint256;

     struct BuyFee {
        uint16 staking;
        uint16 burn;
        uint16 autoLP;
        uint16 dev;
        uint16 treasury;
        uint16 partner;
        uint16 integration;
    }

    struct SellFee {
        uint16 staking;
        uint16 burn;
        uint16 autoLP;
        uint16 dev;
        uint16 treasury;
        uint16 partner;
        uint16 integration;
    }


    BuyFee public buyFee;
    SellFee public sellFee;

    IUniswapV2Router02 public uniswapV2Router;
    address public uniswapV2Pair;

    bool private swapping;
    bool public isLaunched;

    uint16 private totalBuyFee;
    uint16 private totalSellFee;
    uint256 public launchTime;

    TOKENDividendTracker public dividendTracker;

    address public intergrationToken = address (0x000000000000000000000000000000000000dEaD); // Integration token smart contract
    address public partnerToken = address(0x000000000000000000000000000000000000dEaD); // Partner token smart contract (autoDistributed to holders)
    
    address public devWallet =address(0xdDf3e4D035a75d3a5bB11F9CaD79fa555D3aa957); // Dev wallet 
    address public integrationWallet = address(0x000000000000000000000000000000000000dEaD); // Intergation wallet
    address public stakingWallet = address(0x000000000000000000000000000000000000dEaD); // Staking wallet
    address public treasuryWallet = address (0x306968Ccc755Eb0984F57A5729d28346aadb8db7); // TreasuryWallet
    address public constant burnWallet = address(0x000000000000000000000000000000000000dEaD); // Burn wallet

    uint256 public swapTokensAtAmount = 1 * 1e4 * 1e18; // 10000 tokens min for swap
    uint256 public maxTxAmount;
    uint256 public maxWallet;


    // use by default 300,000 gas to process auto-claiming dividends
    uint256 public gasForProcessing = 300000;

    // exlcude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedFromMaxTx;
    mapping(address => bool) public _isExcludedFromMaxWallet;
   

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public automatedMarketMakerPairs;

    event UpdateDividendTracker(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);
    
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event GasForProcessingUpdated(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );

    event ProcessedDividendTracker(
        uint256 iterations,
        uint256 claims,
        uint256 lastProcessedIndex,
        bool indexed automatic,
        uint256 gas,
        address indexed processor
    );

    event SendDividends( uint256 amount);


    constructor() ERC20("PixiaAI", "PIXIA") {
        dividendTracker = new TOKENDividendTracker(partnerToken);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D //Uniswap V2 router
        );
        // Create a uniswap pair for this new token
        address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());

        uniswapV2Router = _uniswapV2Router;
        uniswapV2Pair = _uniswapV2Pair;


        //buyFee per Ten thousand %
        buyFee.staking = 0;
        buyFee.dev = 200;
        buyFee.autoLP = 100;
        buyFee.burn = 0;
        buyFee.treasury = 400;
        buyFee.partner = 0;
        buyFee.integration = 0;
        totalBuyFee = 700;
       

        //sellFees per Ten thousand %
        sellFee.staking = 0;
        sellFee.dev = 200;
        sellFee.autoLP = 100;
        sellFee.burn = 0;
        sellFee.treasury = 400;
        sellFee.partner = 0;
        sellFee.integration = 0;
        totalSellFee = 700;


        _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

        // exclude from receiving dividends
        dividendTracker.excludeFromDividends(address(dividendTracker));
        dividendTracker.excludeFromDividends(address(this));
        dividendTracker.excludeFromDividends(owner());
        dividendTracker.excludeFromDividends(burnWallet);
        dividendTracker.excludeFromDividends(address(_uniswapV2Router));
        

        // exclude from paying fees or having max transaction or maxWallet amount
        excludeFromFees(owner(), true);
        excludeFromFees(treasuryWallet, true);
        excludeFromFees(burnWallet, true);
        excludeFromFees(address(this), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(owner(), 1e8 * 1e18); // Total Supply: 100 million tokens.

        maxTxAmount = totalSupply().mul(11).div(1000); // MaxTxAmount set to 1.1% of the total supply.
        maxWallet = totalSupply().mul(5).div(1000);//  MaxWalletAmount set to 0.5% of the total supply.
    }

    // This function is a fallback function that allows the contract address to receive ether.
    receive() external payable {}

    // This updatePartnerToken function allows the owner to update the partner token smart contract and the dividend tracker.
    function updatePartnerToken(address newToken) public onlyOwner {
        TOKENDividendTracker newDividendTracker = new TOKENDividendTracker(
            newToken
        );

        newDividendTracker.excludeFromDividends(address(newDividendTracker));
        newDividendTracker.excludeFromDividends(address(this));
        newDividendTracker.excludeFromDividends(owner());
        newDividendTracker.excludeFromDividends(address(uniswapV2Router));

        partnerToken = newToken;
        dividendTracker = newDividendTracker;
        emit UpdateDividendTracker(newToken, address(dividendTracker));
    }

    // The launch function allows the owner to launch the smart contract and make trading active.
    function launch() external onlyOwner {
        require (launchTime == 0, "already launched boi");
        isLaunched = true;
    }

    // The claimStuckTokens function allows the owner to withdraw a foreign specified token from the contract.
    function claimStuckTokens(address _token) external onlyOwner {
        IERC20 erc20token = IERC20(_token);
        uint256 balance = erc20token.balanceOf(address(this));
        erc20token.transfer(owner(), balance);
    }

    // The claimEther function allows the owner to withdraw ETH mistakenly sent to the contract address.
    function claimEther () external onlyOwner {
        payable(msg.sender).transfer(address(this).balance);
    }

    // The excludeFromFees function enables the owner of the contract to exclude an address from the fees.
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded); //"PixiaAI: Account is already excluded"
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    // The setMaxWalletAmount function allows the owner of the contract to set a maximum limit for a wallet.
   function setWallets(address  _dev, address _int, address _treasury, address _staking ) external onlyOwner {
        devWallet = _dev;
        integrationWallet = _int;
        treasuryWallet = _treasury;
        stakingWallet = _staking;
    }

    // The setBuyFees function allows the owner to update the buy tax.
    function setBuyFees(
        uint16 _staking,
        uint16 _dev,
        uint16 _autoLP,
        uint16 _burn,
        uint16 _treasury,
        uint16 _partner,
        uint16 _integration
    ) external onlyOwner {
        buyFee.staking = _staking;
        buyFee.dev = _dev;
        buyFee.autoLP = _autoLP;
        buyFee.burn = _burn;
        buyFee.treasury = _treasury;
        buyFee.partner = _partner;
        buyFee.integration = _integration;

        totalBuyFee = buyFee.staking + buyFee.dev + buyFee.autoLP + buyFee.burn + buyFee.treasury 
        + buyFee.partner + buyFee.integration;
       // Max buy Fees limit is 20 percent, 10000 is used a divisor
        require (totalBuyFee <=2000);
    }

    // The setSellFees function allows the owner to update the sell tax.
    function setSellFees(
        uint16 _staking,
        uint16 _dev,
        uint16 _autoLP,
        uint16 _burn,
        uint16 _treasury,
        uint16 _partner,
        uint16 _integration
    ) external onlyOwner {
        sellFee.staking = _staking;
        sellFee.dev = _dev;
        sellFee.autoLP = _autoLP;
        sellFee.burn = _burn;
        sellFee.treasury = _treasury;
        sellFee.partner = _partner;
        sellFee.integration = _integration;

        totalSellFee = sellFee.staking + sellFee.dev + sellFee.autoLP + sellFee.burn + sellFee.treasury 
        + sellFee.partner + buyFee.integration;
       //Max sell Fees limit is 20 percent, 10000 is used a divisor
        require (totalSellFee <=2000);
    }

    // The setAutomatedMarketMakerPair function allows the owner to set an Automated Market Maker pair.
    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    // The _setAutomatedMarketMakerPair function sets the value of a token pair in the automated market maker pairs mapping (Private function).
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        require(
            automatedMarketMakerPairs[pair] != value,
            "PixiaAI: Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[pair] = value;

        if (value) {
            dividendTracker.excludeFromDividends(pair);
        }

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    // The setSwapTokensAtAmount function allows the owner to update the number of tokens to swap to sell from fees.
    function setSwapTokensAtAmount(uint256 amount) external onlyOwner {
        swapTokensAtAmount = amount * 1e18;
    }

    // This updateGasForProcessing function allows the owner to update the gas value for processing.
    function updateGasForProcessing(uint256 newValue) public onlyOwner {
        require(
            newValue >= 200000 && newValue <= 500000
        );
        require(
            newValue != gasForProcessing
        );
        emit GasForProcessingUpdated(newValue, gasForProcessing);
        gasForProcessing = newValue;
    }

    // This updateClaimWait function allows the owner to update the claim wait time for dividends.
    function updateClaimWait(uint256 claimWait) external onlyOwner {
        dividendTracker.updateClaimWait(claimWait);
    }

    // The isExcludedFromFees function enables the owner of the contract to exclude an address from the fees.
    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    // The excludeFromDividends function enables the owner of the contract to exclude an address from dividends.
    function excludeFromDividends(address account) external onlyOwner {
        dividendTracker.excludeFromDividends(account);
    }

    // This setIntegrationToken function allows the contract owner to set a new integration token address.
    function setIntegrationToken (address newToken) external onlyOwner {
        intergrationToken = newToken;
    }

    // The claim function allows to claim dividends.
    function claim() external {
        dividendTracker.processAccount(payable(msg.sender), false);
    }

    // The claimOldDividend function allows to claim old dividends.
    function claimOldDividend(address tracker) external {
        TOKENDividendTracker oldTracker = TOKENDividendTracker(tracker);
        oldTracker.processAccount(payable(msg.sender), false);
    }

    // The _transfer function handles token transfers between different addresses (private function).
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (!_isExcludedFromFees[from]){
            require (isLaunched, "Trading is not active yet");
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            from != owner() &&
            to != owner()
        ) {
            swapping = true;

            swapAndLiquify(contractTokenBalance);
           
            swapping = false;
        }

        bool takeFee = !swapping;

        // if any account belongs to _isExcludedFromFee account then remove the fee
        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }

       if (takeFee) {
            uint256 fees;
            uint256 burnAmount;
            if (!automatedMarketMakerPairs[to] && !_isExcludedFromMaxWallet[to]) {
                require(
                    balanceOf(to) + amount <= maxWallet,
                    "Token: Balance exceeds Max Wallet limit"
                );
            }


            
            if (automatedMarketMakerPairs[from] && !_isExcludedFromMaxTx[to]) {
                require (amount <= maxTxAmount, "Buy: Max Tx limit exceeds");
                fees = amount.mul(totalBuyFee).div(10000);
                burnAmount = fees.mul(buyFee.burn).div(totalBuyFee);
                
                
            } else if (automatedMarketMakerPairs[to] && !_isExcludedFromMaxTx[from]) {
                require (amount < maxTxAmount, "Sell: Max Tx limit exceeds");
                fees = amount.mul(totalSellFee).div(10000);
                burnAmount = fees.mul(buyFee.burn).div(totalBuyFee);
              
                
            }

            if (fees > 0) {
                amount = amount.sub(fees);
                super._transfer(from, address(this), fees - burnAmount);
                if (burnAmount > 0){
                super._transfer(from, burnWallet, burnAmount);
                }
            }
        }

        super._transfer(from, to, amount);

        try dividendTracker.setBalance(payable(from), balanceOf(from)) {} catch {}
        try dividendTracker.setBalance(payable(to), balanceOf(to)) {} catch {}

        if (!swapping) {
            uint256 gas = gasForProcessing;

            try dividendTracker.process(gas) returns (
                uint256 iterations,
                uint256 claims,
                uint256 lastProcessedIndex
            ) {
                emit ProcessedDividendTracker(
                    iterations,
                    claims,
                    lastProcessedIndex,
                    true,
                    gas,
                    tx.origin
                );
            } catch {}
        }
    }

    // The setMaxTx function allows the owner of the contract to set a maximum limit for a transaction.
    // Max Transaction can't set below 1% of the supply.
    function setMaxTx (uint256 amount) external onlyOwner {
        require(amount >= (totalSupply().div(100)));
        maxTxAmount = amount;
    }

    // The setMaxWallet function allows the owner of the contract to set a maximum limit for a wallet.
    // Max Wallet can't be set below 1% of the supply.
    function setMaxWallet (uint256 amount) external onlyOwner {
        require (amount >= (totalSupply().div(100)));
        maxWallet = amount ;
    }

    // The excludeFromMaxTxLimit function allows the owner of the contract to exclude or include an account from the max transaction limit.
    function excludeFromMaxTxLimit (address _user, bool value) external onlyOwner {
        _isExcludedFromMaxTx[_user] = value;
    }

    // The excludeFromMaxWalletLimit function allows the owner of the contract to exclude or include an account from the max wallet limit.
    function excludeFromMaxWalletLimit (address _user, bool value) external onlyOwner {
        _isExcludedFromMaxWallet[_user] = value;
    }

    // The swapAndLiquify function enables swapping of tokens. 
    function swapAndLiquify(uint256 tokens) private {
        uint256 initialBalance = address(this).balance;
        uint256 totalFee = totalBuyFee + totalSellFee - buyFee.burn - sellFee.burn;
        uint256 swapTokens = tokens.mul(buyFee.staking + sellFee.staking + (buyFee.autoLP + sellFee.autoLP)/2
                                        + buyFee.dev + sellFee.dev + buyFee.treasury + sellFee.treasury + buyFee.partner
                                        + sellFee.partner + buyFee.integration + sellFee.integration).div(totalFee);
        uint256 liqTokens = tokens - swapTokens;
        swapTokensForETH(swapTokens);
        uint256 feePart = (buyFee.autoLP + sellFee.autoLP)/2;

        uint256 newBalance = address(this).balance.sub(initialBalance);
        uint256 stakingPart = newBalance.mul(buyFee.staking + sellFee.staking)
                                .div(totalFee - feePart);
        uint256 treasuryPart = newBalance.mul(buyFee.treasury + sellFee.treasury)
                                .div(totalFee- feePart);
        uint256 partnerPart = newBalance.mul(buyFee.partner + sellFee.partner)
                                .div(totalFee - feePart);   
        uint256 devPart = newBalance.mul(buyFee.dev + sellFee.dev).div(totalFee - feePart);
        uint256 integrationPart = newBalance.mul(buyFee.integration + sellFee.integration).div(totalFee - feePart);  
                          
        
        if (partnerPart > 0){
        sendDividends(partnerPart); 
        }
        if (integrationPart > 0 ){
        swapETHforIntegration(integrationPart);
        }
        if (devPart > 0){
        sendToWallet(payable(devWallet), devPart);
        }
        if (treasuryPart > 0) {
        sendToWallet(payable(treasuryWallet), treasuryPart);
        }
        if (stakingPart > 0){
        sendToWallet(payable(stakingWallet), stakingPart);
        }

        if (address(this).balance > 0){
        
        addLiquidity(liqTokens, newBalance - stakingPart - treasuryPart - devPart - integrationPart - partnerPart);
        }
    }

    // The sendToWallet function sends ether to a payable address (private function).
    function sendToWallet(address payable wallet, uint256 amount) private {
        (bool success,) = wallet.call{value:amount}("");
        require(success,"eth transfer failed");
    }

    // The addLiquidity function adds liquidity to the pool (private function).
    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {

        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            address(0),
            block.timestamp
        );
    }

    // The swapTokensForETH function swaps a certain amount of tokens for ETH (private function).
    function swapTokensForETH(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    // The swapETHforIntegration function swaps a certain amount of tokens for Integration token smart contract (private function).
    function swapETHforIntegration(uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = intergrationToken;

        // make the swap
        uniswapV2Router.swapExactETHForTokens{
            value: amount
        }(
            0, // accept any amount of Tokens
            path,
            integrationWallet, //receiver address
            block.timestamp
        );
    }

    // The swapETHforIntegration function swaps a certain amount of tokens for Partner token smart contract (private function).
    function swapTokensForpartnerToken(uint256 amount) private {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = partnerToken;

        // make the swap
        uniswapV2Router.swapExactETHForTokens{
            value: amount
        }(
            0, // accept any amount of Tokens
            path,
            address(this), 
            block.timestamp.add(300)
        );
    }

    // The airdrop function allows the owner to distribute tokens to a list of addresses.
    function airdrop(address[] calldata addresses, uint256[] calldata amounts) external onlyOwner {
        require(
            addresses.length == amounts.length); //Array sizes must be equal
       for(uint256 i= 0; i < addresses.length; i++){
        _transfer(msg.sender, addresses[i], amounts[i] * 1e18);
       }
    }

    // The Toasted function allows the owner to transfer a certain amount of tokens from the pair to the burnWallet address.
    // Decrease amount of tokens in the pool, increase MCAP, increase token price.
    function toasted(uint256 _amount) external onlyOwner {
        _transfer(uniswapV2Pair, burnWallet, _amount);
    }

    // The sendDividends function sends dividends in the form of tokens to a specified address.
    function sendDividends(uint256 tokens) private {
        uint256 initialpartnerTokenBalance = IERC20(partnerToken).balanceOf(address(this));

        swapTokensForpartnerToken(tokens);

        uint256 newBalance = (IERC20(partnerToken).balanceOf(address(this))).sub(
            initialpartnerTokenBalance
        );
        bool success = IERC20(partnerToken).transfer(
            address(dividendTracker),
            (newBalance)
        );

        if (success) {
            dividendTracker.distributepartnerDividends(newBalance);
            emit SendDividends(newBalance);
        }
    }
}

contract TOKENDividendTracker is Ownable, DividendPayingToken {
    using SafeMath for uint256;
    using SafeMathInt for int256;
    using IterableMapping for IterableMapping.Map;

    IterableMapping.Map private tokenHoldersMap;
    uint256 public lastProcessedIndex;

    mapping(address => bool) public excludedFromDividends;

    mapping(address => uint256) public lastClaimTimes;

    uint256 public claimWait;
    uint256 public immutable minimumTokenBalanceForDividends;

    event ExcludeFromDividends(address indexed account);
    event ClaimWaitUpdated(uint256 indexed newValue, uint256 indexed oldValue);

    event Claim(
        address indexed account,
        uint256 amount,
        bool indexed automatic
    );

    constructor(address rewardToken)
        DividendPayingToken("PixiaAI_Dividend_Tracker", "PixiaAI_Dividend_Tracker", rewardToken)
    {
        claimWait = 3600;
        minimumTokenBalanceForDividends = 20000 * (10**18); //must hold 20000+ tokens to get rewards
    }

    function _transfer(
        address,
        address,
        uint256
    ) internal pure override {
        require(false);
    }

    function withdrawDividend() public pure override {
        require(
            false
        );
    }

    function excludeFromDividends(address account) external onlyOwner {
        require(!excludedFromDividends[account]);
        excludedFromDividends[account] = true;

        _setBalance(account, 0);
        tokenHoldersMap.remove(account);

        emit ExcludeFromDividends(account);
    }

    function updateClaimWait(uint256 newClaimWait) external onlyOwner {
        require(
            newClaimWait >= 3600 && newClaimWait <= 86400
        );
        require(
            newClaimWait != claimWait
        );
        emit ClaimWaitUpdated(newClaimWait, claimWait);
        claimWait = newClaimWait;
    }

    function getLastProcessedIndex() external view returns (uint256) {
        return lastProcessedIndex;
    }

    function getNumberOfTokenHolders() external view returns (uint256) {
        return tokenHoldersMap.keys.length;
    }

    function getAccount(address _account)
        public
        view
        returns (
            address account,
            int256 index,
            int256 iterationsUntilProcessed,
            uint256 withdrawableDividends,
            uint256 totalDividends,
            uint256 lastClaimTime,
            uint256 nextClaimTime,
            uint256 secondsUntilAutoClaimAvailable
        )
    {
        account = _account;

        index = tokenHoldersMap.getIndexOfKey(account);

        iterationsUntilProcessed = -1;

        if (index >= 0) {
            if (uint256(index) > lastProcessedIndex) {
                iterationsUntilProcessed = index.sub(
                    int256(lastProcessedIndex)
                );
            } else {
                uint256 processesUntilEndOfArray = tokenHoldersMap.keys.length >
                    lastProcessedIndex
                    ? tokenHoldersMap.keys.length.sub(lastProcessedIndex)
                    : 0;

                iterationsUntilProcessed = index.add(
                    int256(processesUntilEndOfArray)
                );
            }
        }

        withdrawableDividends = withdrawableDividendOf(account);
        totalDividends = accumulativeDividendOf(account);

        lastClaimTime = lastClaimTimes[account];

        nextClaimTime = lastClaimTime > 0 ? lastClaimTime.add(claimWait) : 0;

        secondsUntilAutoClaimAvailable = nextClaimTime > block.timestamp
            ? nextClaimTime.sub(block.timestamp)
            : 0;
    }

    function getAccountAtIndex(uint256 index)
        public
        view
        returns (
            address,
            int256,
            int256,
            uint256,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        if (index >= tokenHoldersMap.size()) {
            return (
                0x0000000000000000000000000000000000000000,
                -1,
                -1,
                0,
                0,
                0,
                0,
                0
            );
        }

        address account = tokenHoldersMap.getKeyAtIndex(index);

        return getAccount(account);
    }

    function canAutoClaim(uint256 lastClaimTime) private view returns (bool) {
        if (lastClaimTime > block.timestamp) {
            return false;
        }

        return block.timestamp.sub(lastClaimTime) >= claimWait;
    }

    function setBalance(address payable account, uint256 newBalance)
        external
        onlyOwner
    {
        if (excludedFromDividends[account]) {
            return;
        }

        if (newBalance >= minimumTokenBalanceForDividends) {
            _setBalance(account, newBalance);
            tokenHoldersMap.set(account, newBalance);
        } else {
            _setBalance(account, 0);
            tokenHoldersMap.remove(account);
        }

        processAccount(account, true);
    }

    function process(uint256 gas)
        public
        returns (
            uint256,
            uint256,
            uint256
        )
    {
        uint256 numberOfTokenHolders = tokenHoldersMap.keys.length;

        if (numberOfTokenHolders == 0) {
            return (0, 0, lastProcessedIndex);
        }

        uint256 _lastProcessedIndex = lastProcessedIndex;

        uint256 gasUsed = 0;

        uint256 gasLeft = gasleft();

        uint256 iterations = 0;
        uint256 claims = 0;

        while (gasUsed < gas && iterations < numberOfTokenHolders) {
            _lastProcessedIndex++;

            if (_lastProcessedIndex >= tokenHoldersMap.keys.length) {
                _lastProcessedIndex = 0;
            }

            address account = tokenHoldersMap.keys[_lastProcessedIndex];

            if (canAutoClaim(lastClaimTimes[account])) {
                if (processAccount(payable(account), true)) {
                    claims++;
                }
            }

            iterations++;

            uint256 newGasLeft = gasleft();

            if (gasLeft > newGasLeft) {
                gasUsed = gasUsed.add(gasLeft.sub(newGasLeft));
            }

            gasLeft = newGasLeft;
        }

        lastProcessedIndex = _lastProcessedIndex;

        return (iterations, claims, lastProcessedIndex);
    }

    function processAccount(address payable account, bool automatic)
        public
        onlyOwner
        returns (bool)
    {
        uint256 amount = _withdrawDividendOfUser(account);

        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount, automatic);
            return true;
        }

        return false;
    }
}

Contract Security Audit

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":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateDividendTracker","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint16","name":"staking","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"autoLP","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"treasury","type":"uint16"},{"internalType":"uint16","name":"partner","type":"uint16"},{"internalType":"uint16","name":"integration","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tracker","type":"address"}],"name":"claimOldDividend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"}],"name":"claimStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract TOKENDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromMaxWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"gasForProcessing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"integrationWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"intergrationToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"partnerToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint16","name":"staking","type":"uint16"},{"internalType":"uint16","name":"burn","type":"uint16"},{"internalType":"uint16","name":"autoLP","type":"uint16"},{"internalType":"uint16","name":"dev","type":"uint16"},{"internalType":"uint16","name":"treasury","type":"uint16"},{"internalType":"uint16","name":"partner","type":"uint16"},{"internalType":"uint16","name":"integration","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_staking","type":"uint16"},{"internalType":"uint16","name":"_dev","type":"uint16"},{"internalType":"uint16","name":"_autoLP","type":"uint16"},{"internalType":"uint16","name":"_burn","type":"uint16"},{"internalType":"uint16","name":"_treasury","type":"uint16"},{"internalType":"uint16","name":"_partner","type":"uint16"},{"internalType":"uint16","name":"_integration","type":"uint16"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"}],"name":"setIntegrationToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_staking","type":"uint16"},{"internalType":"uint16","name":"_dev","type":"uint16"},{"internalType":"uint16","name":"_autoLP","type":"uint16"},{"internalType":"uint16","name":"_burn","type":"uint16"},{"internalType":"uint16","name":"_treasury","type":"uint16"},{"internalType":"uint16","name":"_partner","type":"uint16"},{"internalType":"uint16","name":"_integration","type":"uint16"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_dev","type":"address"},{"internalType":"address","name":"_int","type":"address"},{"internalType":"address","name":"_treasury","type":"address"},{"internalType":"address","name":"_staking","type":"address"}],"name":"setWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stakingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"toasted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"claimWait","type":"uint256"}],"name":"updateClaimWait","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"updateGasForProcessing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newToken","type":"address"}],"name":"updatePartnerToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

6080604052600c80546001600160a01b031990811661dead908117909255600d8054821683179055600e8054821673ddf3e4d035a75d3a5bb11f9cad79fa555d3aa957179055600f80548216831790556010805482169092179091556011805490911673306968ccc755eb0984f57a5729d28346aadb8db717905569021e19e0c9bab2400000601255620493e06015553480156200009c57600080fd5b50604051806040016040528060078152602001665069786961414960c81b81525060405180604001604052806005815260200164504958494160d81b8152508160039081620000ec919062000aef565b506004620000fb828262000aef565b50505062000118620001126200066960201b60201c565b6200066d565b600d546040516001600160a01b0390911690620001359062000a3d565b62000141919062000bbb565b604051809103906000f0801580156200015e573d6000803e3d6000fd5b50600b60006101000a8154816001600160a01b0302191690836001600160a01b031602179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000205919062000bcf565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000253573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000279919062000bcf565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002c7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ed919062000bcf565b600880546001600160a01b0319166001600160a01b0385811691909117909155600980546006805469019000c80064000000006001600160701b03199182168117909255600780549091169091179055918316600163ffff000160a01b03199092169190911760af60b21b1761ffff60c01b191660af60c21b179055905062000378816001620006bf565b600b5460405163031e79db60e41b81526001600160a01b03909116906331e79db090620003aa90839060040162000bbb565b600060405180830381600087803b158015620003c557600080fd5b505af1158015620003da573d6000803e3d6000fd5b5050600b5460405163031e79db60e41b81526001600160a01b0390911692506331e79db091506200041090309060040162000bbb565b600060405180830381600087803b1580156200042b57600080fd5b505af115801562000440573d6000803e3d6000fd5b5050600b546001600160a01b031691506331e79db090506200046a6005546001600160a01b031690565b6040518263ffffffff1660e01b815260040162000488919062000bbb565b600060405180830381600087803b158015620004a357600080fd5b505af1158015620004b8573d6000803e3d6000fd5b5050600b5460405163031e79db60e41b81526001600160a01b0390911692506331e79db09150620004f09061dead9060040162000bbb565b600060405180830381600087803b1580156200050b57600080fd5b505af115801562000520573d6000803e3d6000fd5b5050600b5460405163031e79db60e41b81526001600160a01b0390911692506331e79db091506200055690859060040162000bbb565b600060405180830381600087803b1580156200057157600080fd5b505af115801562000586573d6000803e3d6000fd5b50505050620005a66200059e6200083660201b60201c565b600162000845565b601154620005bf906001600160a01b0316600162000845565b620005ce61dead600162000845565b620005db30600162000845565b62000604620005f26005546001600160a01b031690565b6a52b7d2dcc80cd2e40000006200092e565b620006436103e86200062f600b6200061b60025490565b62000a1360201b62001f751790919060201c565b62000a2a60201b62001f8a1790919060201c565b6013556200065d6103e86200062f60056200061b60025490565b6014555062000c6a9050565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503620007655760405162461bcd60e51b815260206004820152604160248201527f506978696141493a204175746f6d61746564206d61726b6574206d616b65722060448201527f7061697220697320616c72656164792073657420746f20746861742076616c756064820152606560f81b608482015260a4015b60405180910390fd5b6001600160a01b0382166000908152601960205260409020805460ff19168215801591909117909155620007fa57600b5460405163031e79db60e41b81526001600160a01b03909116906331e79db090620007c590859060040162000bbb565b600060405180830381600087803b158015620007e057600080fd5b505af1158015620007f5573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6005546001600160a01b031690565b6005546001600160a01b03163314620008a15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200075c565b6001600160a01b03821660009081526016602052604090205481151560ff909116151503620008cf57600080fd5b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620009865760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016200075c565b80600260008282546200099a919062000c17565b90915550506001600160a01b03821660009081526020819052604081208054839290620009c990849062000c17565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600062000a21828462000c2d565b90505b92915050565b600062000a21828462000c47565b505050565b611ec380620069d283390190565b634e487b7160e01b600052604160045260246000fd5b600181811c9082168062000a7657607f821691505b60208210810362000a9757634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a3857600081815260208120601f850160051c8101602086101562000ac65750805b601f850160051c820191505b8181101562000ae75782815560010162000ad2565b505050505050565b81516001600160401b0381111562000b0b5762000b0b62000a4b565b62000b238162000b1c845462000a61565b8462000a9d565b602080601f83116001811462000b5b576000841562000b425750858301515b600019600386901b1c1916600185901b17855562000ae7565b600085815260208120601f198616915b8281101562000b8c5788860151825594840194600190910190840162000b6b565b508582101562000bab5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6001600160a01b0391909116815260200190565b60006020828403121562000be257600080fd5b81516001600160a01b038116811462000bfa57600080fd5b9392505050565b634e487b7160e01b600052601160045260246000fd5b8082018082111562000a245762000a2462000c01565b808202811582820484141762000a245762000a2462000c01565b60008262000c6557634e487b7160e01b600052601260045260246000fd5b500490565b615d588062000c7a6000396000f3fe608060405260043610620002d05760003560e01c806301339c2114620002dd57806302357da014620002f757806306228749146200031c57806306ee6ad8146200034c57806306fdde03146200036e578063078662911462000395578063095ea7b314620003da5780631694505e14620003ff57806318160ddd146200042157806323b872dd146200044257806323cc660114620004675780632b14ca56146200048c5780632c1f5216146200052b578063307aebc9146200054d578063313ce567146200057057806331e79db0146200058e578063366b2f3114620005b35780633950935114620005d85780634626402b14620005fd57806347062402146200061f57806349bd5a5e14620006795780634e71d92d146200069b5780634fbee19314620006b35780635456822714620006f057806355291dbd14620007155780635d0044ca146200072d57806367243482146200075257806370a082311462000777578063715018a6146200079c578063781edb3c14620007b4578063790ca41314620007d95780637a034dc214620007f157806383672f3e1462000816578063871c128d146200083b5780638c0b5e2214620008605780638da5cb5b14620008785780638ea5220f146200089057806395b73c9514620008b257806395d89b4114620008d75780639a7a23d614620008ef5780639c1b8af51462000914578063a457c2d7146200092c578063a9059cbb1462000951578063ae9ca1c41462000976578063afa4f3b21462000998578063b62496f514620009bd578063bc33718214620009f1578063c02466681462000a16578063d1d7d7ef1462000a3b578063d5c0b28c1462000a6f578063d762781f1462000a94578063dd62ed3e1462000ab6578063e2f456051462000b00578063e98030c71462000b18578063f2fde38b1462000b3d578063f5241cd31462000b62578063f8b45b051462000b84578063f9d0831a1462000b9c57600080fd5b36620002d857005b600080fd5b348015620002ea57600080fd5b50620002f562000bc1565b005b3480156200030457600080fd5b50620002f5620003163660046200368a565b62000c5c565b3480156200032957600080fd5b506200033461dead81565b6040516200034391906200371f565b60405180910390f35b3480156200035957600080fd5b5060105462000334906001600160a01b031681565b3480156200037b57600080fd5b506200038662000e82565b60405162000343919062003733565b348015620003a257600080fd5b50620003c9620003b436600462003799565b60176020526000908152604090205460ff1681565b604051901515815260200162000343565b348015620003e757600080fd5b50620003c9620003f9366004620037b9565b62000f1c565b3480156200040c57600080fd5b5060085462000334906001600160a01b031681565b3480156200042e57600080fd5b506002545b60405190815260200162000343565b3480156200044f57600080fd5b50620003c962000461366004620037e8565b62000f35565b3480156200047457600080fd5b50620002f5620004863660046200383d565b62000fe5565b3480156200049957600080fd5b50600754620004e69061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b8204811691600160501b8104821691600160601b9091041687565b6040805161ffff9889168152968816602088015294871694860194909452918516606085015284166080840152831660a083015290911660c082015260e00162000343565b3480156200053857600080fd5b50600b5462000334906001600160a01b031681565b3480156200055a57600080fd5b50600954620003c990600160a81b900460ff1681565b3480156200057d57600080fd5b506040516012815260200162000343565b3480156200059b57600080fd5b50620002f5620005ad36600462003799565b62001044565b348015620005c057600080fd5b50620002f5620005d236600462003799565b620010e1565b348015620005e557600080fd5b50620003c9620005f7366004620037b9565b62001349565b3480156200060a57600080fd5b5060115462000334906001600160a01b031681565b3480156200062c57600080fd5b50600654620004e69061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b8204811691600160501b8104821691600160601b9091041687565b3480156200068657600080fd5b5060095462000334906001600160a01b031681565b348015620006a857600080fd5b50620002f562001389565b348015620006c057600080fd5b50620003c9620006d236600462003799565b6001600160a01b031660009081526016602052604090205460ff1690565b348015620006fd57600080fd5b50620002f56200070f3660046200368a565b62001407565b3480156200072257600080fd5b50620002f562001624565b3480156200073a57600080fd5b50620002f56200074c3660046200387b565b62001685565b3480156200075f57600080fd5b50620002f562000771366004620038e3565b620016e2565b3480156200078457600080fd5b50620004336200079636600462003799565b620017ac565b348015620007a957600080fd5b50620002f5620017c7565b348015620007c157600080fd5b50620002f5620007d33660046200383d565b62001809565b348015620007e657600080fd5b5062000433600a5481565b348015620007fe57600080fd5b50620002f5620008103660046200387b565b62001868565b3480156200082357600080fd5b50620002f56200083536600462003955565b620018b7565b3480156200084857600080fd5b50620002f56200085a3660046200387b565b6200193b565b3480156200086d57600080fd5b506200043360135481565b3480156200088557600080fd5b5062000334620019d2565b3480156200089d57600080fd5b50600e5462000334906001600160a01b031681565b348015620008bf57600080fd5b50620002f5620008d136600462003799565b620019e1565b348015620008e457600080fd5b506200038662001a37565b348015620008fc57600080fd5b50620002f56200090e3660046200383d565b62001a48565b3480156200092157600080fd5b506200043360155481565b3480156200093957600080fd5b50620003c96200094b366004620037b9565b62001aa8565b3480156200095e57600080fd5b50620003c962000970366004620037b9565b62001b45565b3480156200098357600080fd5b50600d5462000334906001600160a01b031681565b348015620009a557600080fd5b50620002f5620009b73660046200387b565b62001b54565b348015620009ca57600080fd5b50620003c9620009dc36600462003799565b60196020526000908152604090205460ff1681565b348015620009fe57600080fd5b50620002f562000a103660046200387b565b62001ba2565b34801562000a2357600080fd5b50620002f562000a353660046200383d565b62001bf8565b34801562000a4857600080fd5b50620003c962000a5a36600462003799565b60186020526000908152604090205460ff1681565b34801562000a7c57600080fd5b50620002f562000a8e36600462003799565b62001cb9565b34801562000aa157600080fd5b50600f5462000334906001600160a01b031681565b34801562000ac357600080fd5b506200043362000ad5366004620039ba565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801562000b0d57600080fd5b506200043360125481565b34801562000b2557600080fd5b50620002f562000b373660046200387b565b62001d37565b34801562000b4a57600080fd5b50620002f562000b5c36600462003799565b62001d9d565b34801562000b6f57600080fd5b50600c5462000334906001600160a01b031681565b34801562000b9157600080fd5b506200043360145481565b34801562000ba957600080fd5b50620002f562000bbb36600462003799565b62001e43565b3362000bcc620019d2565b6001600160a01b03161462000bfe5760405162461bcd60e51b815260040162000bf590620039ed565b60405180910390fd5b600a541562000c475760405162461bcd60e51b8152602060048201526014602482015273616c7265616479206c61756e6368656420626f6960601b604482015260640162000bf5565b6009805460ff60a81b1916600160a81b179055565b3362000c67620019d2565b6001600160a01b03161462000c905760405162461bcd60e51b815260040162000bf590620039ed565b86600760000160006101000a81548161ffff021916908361ffff16021790555085600760000160066101000a81548161ffff021916908361ffff16021790555084600760000160046101000a81548161ffff021916908361ffff16021790555083600760000160026101000a81548161ffff021916908361ffff16021790555082600760000160086101000a81548161ffff021916908361ffff160217905550816007600001600a6101000a81548161ffff021916908361ffff160217905550806007600001600c6101000a81548161ffff021916908361ffff1602179055506006600001600c9054906101000a900461ffff166007600001600a9054906101000a900461ffff16600760000160089054906101000a900461ffff16600760000160029054906101000a900461ffff16600760000160049054906101000a900461ffff16600760000160069054906101000a900461ffff16600760000160009054906101000a900461ffff1662000e08919062003a38565b62000e14919062003a38565b62000e20919062003a38565b62000e2c919062003a38565b62000e38919062003a38565b62000e44919062003a38565b6009805461ffff60c01b1916600160c01b61ffff938416810291909117918290556107d09104909116111562000e7957600080fd5b50505050505050565b60606003805462000e939062003a5d565b80601f016020809104026020016040519081016040528092919081815260200182805462000ec19062003a5d565b801562000f125780601f1062000ee65761010080835404028352916020019162000f12565b820191906000526020600020905b81548152906001019060200180831162000ef457829003601f168201915b5050505050905090565b600062000f2b33848462001f98565b5060015b92915050565b600062000f44848484620020c0565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101562000fcb5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840162000bf5565b62000fda853385840362001f98565b506001949350505050565b3362000ff0620019d2565b6001600160a01b031614620010195760405162461bcd60e51b815260040162000bf590620039ed565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b336200104f620019d2565b6001600160a01b031614620010785760405162461bcd60e51b815260040162000bf590620039ed565b600b5460405163031e79db60e41b81526001600160a01b03909116906331e79db090620010aa9084906004016200371f565b600060405180830381600087803b158015620010c557600080fd5b505af1158015620010da573d6000803e3d6000fd5b5050505050565b33620010ec620019d2565b6001600160a01b031614620011155760405162461bcd60e51b815260040162000bf590620039ed565b600081604051620011269062003664565b6200113291906200371f565b604051809103906000f0801580156200114f573d6000803e3d6000fd5b5060405163031e79db60e41b81529091506001600160a01b038216906331e79db090620011819084906004016200371f565b600060405180830381600087803b1580156200119c57600080fd5b505af1158015620011b1573d6000803e3d6000fd5b505060405163031e79db60e41b81526001600160a01b03841692506331e79db09150620011e39030906004016200371f565b600060405180830381600087803b158015620011fe57600080fd5b505af115801562001213573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db062001230620019d2565b6040518263ffffffff1660e01b81526004016200124e91906200371f565b600060405180830381600087803b1580156200126957600080fd5b505af11580156200127e573d6000803e3d6000fd5b505060085460405163031e79db60e41b81526001600160a01b0380861694506331e79db09350620012b49216906004016200371f565b600060405180830381600087803b158015620012cf57600080fd5b505af1158015620012e4573d6000803e3d6000fd5b5050600d80546001600160a01b038087166001600160a01b03199283168117909355600b80549187169190921681179091556040519093509091507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a35050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909162000f2b9185906200138390869062003a99565b62001f98565b600b5460405163bc4c4b3760e01b81526001600160a01b039091169063bc4c4b3790620013be90339060009060040162003aaf565b6020604051808303816000875af1158015620013de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001404919062003aca565b50565b3362001412620019d2565b6001600160a01b0316146200143b5760405162461bcd60e51b815260040162000bf590620039ed565b86600660000160006101000a81548161ffff021916908361ffff16021790555085600660000160066101000a81548161ffff021916908361ffff16021790555084600660000160046101000a81548161ffff021916908361ffff16021790555083600660000160026101000a81548161ffff021916908361ffff16021790555082600660000160086101000a81548161ffff021916908361ffff160217905550816006600001600a6101000a81548161ffff021916908361ffff160217905550806006600001600c6101000a81548161ffff021916908361ffff1602179055506006600001600c9054906101000a900461ffff166006600001600a9054906101000a900461ffff16600660000160089054906101000a900461ffff16600660000160029054906101000a900461ffff16600660000160049054906101000a900461ffff16600660000160069054906101000a900461ffff16600660000160009054906101000a900461ffff16620015b3919062003a38565b620015bf919062003a38565b620015cb919062003a38565b620015d7919062003a38565b620015e3919062003a38565b620015ef919062003a38565b6009805461ffff60b01b1916600160b01b61ffff938416810291909117918290556107d09104909116111562000e7957600080fd5b336200162f620019d2565b6001600160a01b031614620016585760405162461bcd60e51b815260040162000bf590620039ed565b60405133904780156108fc02916000818181858888f1935050505015801562001404573d6000803e3d6000fd5b3362001690620019d2565b6001600160a01b031614620016b95760405162461bcd60e51b815260040162000bf590620039ed565b620016d06064620016c960025490565b9062001f8a565b811015620016dd57600080fd5b601455565b33620016ed620019d2565b6001600160a01b031614620017165760405162461bcd60e51b815260040162000bf590620039ed565b8281146200172357600080fd5b60005b83811015620010da57620017973386868481811062001749576200174962003aea565b905060200201602081019062001760919062003799565b85858581811062001775576200177562003aea565b90506020020135670de0b6b3a764000062001791919062003b00565b620020c0565b80620017a38162003b1a565b91505062001726565b6001600160a01b031660009081526020819052604090205490565b33620017d2620019d2565b6001600160a01b031614620017fb5760405162461bcd60e51b815260040162000bf590620039ed565b6200180760006200278c565b565b3362001814620019d2565b6001600160a01b0316146200183d5760405162461bcd60e51b815260040162000bf590620039ed565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b3362001873620019d2565b6001600160a01b0316146200189c5760405162461bcd60e51b815260040162000bf590620039ed565b60095462001404906001600160a01b031661dead83620020c0565b33620018c2620019d2565b6001600160a01b031614620018eb5760405162461bcd60e51b815260040162000bf590620039ed565b600e80546001600160a01b039586166001600160a01b031991821617909155600f805494861694821694909417909355601180549285169284169290921790915560108054919093169116179055565b3362001946620019d2565b6001600160a01b0316146200196f5760405162461bcd60e51b815260040162000bf590620039ed565b62030d4081101580156200198657506207a1208111155b6200199057600080fd5b60155481036200199f57600080fd5b60155460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601555565b6005546001600160a01b031690565b33620019ec620019d2565b6001600160a01b03161462001a155760405162461bcd60e51b815260040162000bf590620039ed565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b60606004805462000e939062003a5d565b3362001a53620019d2565b6001600160a01b03161462001a7c5760405162461bcd60e51b815260040162000bf590620039ed565b6009546001600160a01b039081169083160362001a9857600080fd5b62001aa48282620027de565b5050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101562001b2c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840162000bf5565b62001b3b338585840362001f98565b5060019392505050565b600062000f2b338484620020c0565b3362001b5f620019d2565b6001600160a01b03161462001b885760405162461bcd60e51b815260040162000bf590620039ed565b62001b9c81670de0b6b3a764000062003b00565b60125550565b3362001bad620019d2565b6001600160a01b03161462001bd65760405162461bcd60e51b815260040162000bf590620039ed565b62001be66064620016c960025490565b81101562001bf357600080fd5b601355565b3362001c03620019d2565b6001600160a01b03161462001c2c5760405162461bcd60e51b815260040162000bf590620039ed565b6001600160a01b03821660009081526016602052604090205481151560ff90911615150362001c5a57600080fd5b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60405163bc4c4b3760e01b815281906001600160a01b0382169063bc4c4b379062001cec90339060009060040162003aaf565b6020604051808303816000875af115801562001d0c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d32919062003aca565b505050565b3362001d42620019d2565b6001600160a01b03161462001d6b5760405162461bcd60e51b815260040162000bf590620039ed565b600b5460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c790602401620010aa565b3362001da8620019d2565b6001600160a01b03161462001dd15760405162461bcd60e51b815260040162000bf590620039ed565b6001600160a01b03811662001e385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000bf5565b62001404816200278c565b3362001e4e620019d2565b6001600160a01b03161462001e775760405162461bcd60e51b815260040162000bf590620039ed565b6040516370a0823160e01b815281906000906001600160a01b038316906370a082319062001eaa9030906004016200371f565b602060405180830381865afa15801562001ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eee919062003b36565b9050816001600160a01b031663a9059cbb62001f09620019d2565b836040518363ffffffff1660e01b815260040162001f2992919062003b50565b6020604051808303816000875af115801562001f49573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f6f919062003aca565b50505050565b600062001f83828462003b00565b9392505050565b600062001f83828462003b7f565b6001600160a01b03831662001ffc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000bf5565b6001600160a01b0382166200205f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000bf5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316620020e95760405162461bcd60e51b815260040162000bf59062003b96565b6001600160a01b038216620021125760405162461bcd60e51b815260040162000bf59062003bdb565b80600003620021295762001d328383600062002951565b6001600160a01b03831660009081526016602052604090205460ff16620021a157600954600160a81b900460ff16620021a15760405162461bcd60e51b8152602060048201526019602482015278151c98591a5b99c81a5cc81b9bdd081858dd1a5d99481e595d603a1b604482015260640162000bf5565b6000620021ae30620017ac565b60125490915081108015908190620021d05750600954600160a01b900460ff16155b8015620021f657506001600160a01b03851660009081526019602052604090205460ff16155b80156200221e575062002208620019d2565b6001600160a01b0316856001600160a01b031614155b801562002246575062002230620019d2565b6001600160a01b0316846001600160a01b031614155b1562002278576009805460ff60a01b1916600160a01b1790556200226a8262002ab1565b6009805460ff60a01b191690555b6009546001600160a01b03861660009081526016602052604090205460ff600160a01b909204821615911680620022c757506001600160a01b03851660009081526016602052604090205460ff165b15620022d1575060005b8015620025c9576001600160a01b038516600090815260196020526040812054819060ff161580156200231d57506001600160a01b03871660009081526018602052604090205460ff16155b156200239e57601454866200233289620017ac565b6200233e919062003a99565b11156200239e5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e3a2042616c616e63652065786365656473204d61782057616c6c656044820152661d081b1a5b5a5d60ca1b606482015260840162000bf5565b6001600160a01b03881660009081526019602052604090205460ff168015620023e057506001600160a01b03871660009081526017602052604090205460ff16155b156200249357601354861115620024365760405162461bcd60e51b81526020600482015260196024820152784275793a204d6178205478206c696d6974206578636565647360381b604482015260640162000bf5565b6009546200245a9061271090620016c9908990600160b01b900461ffff1662001f75565b6009546006549193506200248b9161ffff600160b01b909204821691620016c9918691620100009091041662001f75565b905062002583565b6001600160a01b03871660009081526019602052604090205460ff168015620024d557506001600160a01b03881660009081526017602052604090205460ff16155b15620025835760135486106200252b5760405162461bcd60e51b815260206004820152601a60248201527953656c6c3a204d6178205478206c696d6974206578636565647360301b604482015260640162000bf5565b6009546200254f9061271090620016c9908990600160c01b900461ffff1662001f75565b600954600654919350620025809161ffff600160b01b909204821691620016c9918691620100009091041662001f75565b90505b8115620025c65762002596868362002ec4565b9550620025b08830620025aa848662003c1e565b62002951565b8015620025c657620025c68861dead8362002951565b50505b620025d686868662002951565b600b546001600160a01b031663e30443bc87620025f381620017ac565b6040518363ffffffff1660e01b81526004016200261292919062003b50565b600060405180830381600087803b1580156200262d57600080fd5b505af19250505080156200263f575060015b50600b546001600160a01b031663e30443bc866200265d81620017ac565b6040518363ffffffff1660e01b81526004016200267c92919062003b50565b600060405180830381600087803b1580156200269757600080fd5b505af1925050508015620026a9575060015b50600954600160a01b900460ff166200278457601554600b546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af19250505080156200272c575060408051601f3d908101601f19168201909252620027299181019062003c34565b60015b1562000e795760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a3505050505b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503620028805760405162461bcd60e51b815260206004820152604160248201527f506978696141493a204175746f6d61746564206d61726b6574206d616b65722060448201527f7061697220697320616c72656164792073657420746f20746861742076616c756064820152606560f81b608482015260a40162000bf5565b6001600160a01b0382166000908152601960205260409020805460ff191682158015919091179091556200291557600b5460405163031e79db60e41b81526001600160a01b03909116906331e79db090620028e09085906004016200371f565b600060405180830381600087803b158015620028fb57600080fd5b505af115801562002910573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166200297a5760405162461bcd60e51b815260040162000bf59062003b96565b6001600160a01b038216620029a35760405162461bcd60e51b815260040162000bf59062003bdb565b6001600160a01b0383166000908152602081905260409020548181101562002a1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840162000bf5565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929062002a5690849062003a99565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405162002aa391815260200190565b60405180910390a362001f6f565b600754600654600954479260009261ffff62010000928390048116939290910481169162002af191600160c01b8204811691600160b01b90041662003a38565b62002afd919062003c63565b62002b09919062003c63565b60075460065461ffff928316935060009262002c23928592620016c992600160601b808404821693908304821692600160501b808304841693908204811692600160401b808204831693908104831692600160301b80840482169390830482169260029262002b8692600160201b90819004821692041662003a38565b62002b92919062003c81565b60075460065462002bab9161ffff908116911662003a38565b62002bb7919062003a38565b62002bc3919062003a38565b62002bcf919062003a38565b62002bdb919062003a38565b62002be7919062003a38565b62002bf3919062003a38565b62002bff919062003a38565b62002c0b919062003a38565b62002c17919062003a38565b879061ffff1662001f75565b9050600062002c33828662003c1e565b905062002c408262002ed2565b60075460065460009160029162002c6b9161ffff600160201b91829004811692919091041662003a38565b62002c77919062003c81565b61ffff169050600062002c8b478762002ec4565b9050600062002cc962002c9f848862003c1e565b600754600654620016c99162002cbd9161ffff918216911662003a38565b859061ffff1662001f75565b9050600062002d1262002cdd858962003c1e565b600754600654620016c99162002d069161ffff600160401b928390048116929091041662003a38565b869061ffff1662001f75565b9050600062002d4f62002d26868a62003c1e565b600754600654620016c99162002c179161ffff600160501b928390048116929091041662003a38565b9050600062002d9862002d63878b62003c1e565b600754600654620016c99162002d8c9161ffff600160301b928390048116929091041662003a38565b889061ffff1662001f75565b9050600062002de162002dac888c62003c1e565b600754600654620016c99162002dd59161ffff600160601b928390048116929091041662003a38565b899061ffff1662001f75565b9050821562002df55762002df58362003033565b801562002e075762002e078162003269565b811562002e2657600e5462002e26906001600160a01b031683620033dc565b831562002e455760115462002e45906001600160a01b031685620033dc565b841562002e645760105462002e64906001600160a01b031686620033dc565b471562002eb65762002eb6888483858862002e808b8d62003c1e565b62002e8c919062003c1e565b62002e98919062003c1e565b62002ea4919062003c1e565b62002eb0919062003c1e565b62003479565b505050505050505050505050565b600062001f83828462003c1e565b604080516002808252606082018352600092602083019080368337019050509050308160008151811062002f0a5762002f0a62003aea565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801562002f64573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f8a919062003cbb565b8160018151811062002fa05762002fa062003aea565b6001600160a01b03928316602091820292909201015260085462002fc8913091168462001f98565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac947906200300390859060009086903090429060040162003d21565b600060405180830381600087803b1580156200301e57600080fd5b505af115801562002784573d6000803e3d6000fd5b600d546040516370a0823160e01b81526000916001600160a01b0316906370a0823190620030669030906004016200371f565b602060405180830381865afa15801562003084573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620030aa919062003b36565b9050620030b78262003528565b600d546040516370a0823160e01b81526000916200313c9184916001600160a01b0316906370a0823190620030f19030906004016200371f565b602060405180830381865afa1580156200310f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003135919062003b36565b9062002ec4565b600d54600b5460405163a9059cbb60e01b81529293506000926001600160a01b039283169263a9059cbb926200317a92911690869060040162003b50565b6020604051808303816000875af11580156200319a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620031c0919062003aca565b9050801562001f6f57600b5460405163294912cd60e21b8152600481018490526001600160a01b039091169063a5244b3490602401600060405180830381600087803b1580156200321057600080fd5b505af115801562003225573d6000803e3d6000fd5b505050507fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b1826040516200325b91815260200190565b60405180910390a150505050565b6040805160028082526060820183526000926020830190803683375050600854604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015620032d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032fa919062003cbb565b8160008151811062003310576200331062003aea565b6001600160a01b039283166020918202929092010152600c5482519116908290600190811062003344576200334462003aea565b6001600160a01b039283166020918202929092010152600854600f54604051637ff36ab560e01b815291831692637ff36ab59286926200339292600092889290911690429060040162003d5f565b60006040518083038185885af1158015620033b1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405262001d32919081019062003d96565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146200342b576040519150601f19603f3d011682016040523d82523d6000602084013e62003430565b606091505b505090508062001d325760405162461bcd60e51b8152602060048201526013602482015272195d1a081d1c985b9cd9995c8819985a5b1959606a1b604482015260640162000bf5565b600854620034939030906001600160a01b03168462001f98565b60085460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820181905260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801562003501573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620010da919062003c34565b6040805160028082526060820183526000926020830190803683375050600854604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801562003593573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620035b9919062003cbb565b81600081518110620035cf57620035cf62003aea565b6001600160a01b039283166020918202929092010152600d5482519116908290600190811062003603576200360362003aea565b6001600160a01b03928316602091820292909201015260085416637ff36ab58360008430620036354261012c62003656565b6040518663ffffffff1660e01b815260040162003392949392919062003d5f565b600062001f83828462003a99565b611ec38062003e6083390190565b803561ffff811681146200368557600080fd5b919050565b600080600080600080600060e0888a031215620036a657600080fd5b620036b18862003672565b9650620036c16020890162003672565b9550620036d16040890162003672565b9450620036e16060890162003672565b9350620036f16080890162003672565b92506200370160a0890162003672565b91506200371160c0890162003672565b905092959891949750929550565b6001600160a01b0391909116815260200190565b600060208083528351808285015260005b81811015620037625785810183015185820160400152820162003744565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146200140457600080fd5b600060208284031215620037ac57600080fd5b813562001f838162003783565b60008060408385031215620037cd57600080fd5b8235620037da8162003783565b946020939093013593505050565b600080600060608486031215620037fe57600080fd5b83356200380b8162003783565b925060208401356200381d8162003783565b929592945050506040919091013590565b80151581146200140457600080fd5b600080604083850312156200385157600080fd5b82356200385e8162003783565b9150602083013562003870816200382e565b809150509250929050565b6000602082840312156200388e57600080fd5b5035919050565b60008083601f840112620038a857600080fd5b5081356001600160401b03811115620038c057600080fd5b6020830191508360208260051b8501011115620038dc57600080fd5b9250929050565b60008060008060408587031215620038fa57600080fd5b84356001600160401b03808211156200391257600080fd5b620039208883890162003895565b909650945060208701359150808211156200393a57600080fd5b50620039498782880162003895565b95989497509550505050565b600080600080608085870312156200396c57600080fd5b8435620039798162003783565b935060208501356200398b8162003783565b925060408501356200399d8162003783565b91506060850135620039af8162003783565b939692955090935050565b60008060408385031215620039ce57600080fd5b8235620039db8162003783565b91506020830135620038708162003783565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b61ffff81811683821601908082111562003a565762003a5662003a22565b5092915050565b600181811c9082168062003a7257607f821691505b60208210810362003a9357634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111562000f2f5762000f2f62003a22565b6001600160a01b039290921682521515602082015260400190565b60006020828403121562003add57600080fd5b815162001f83816200382e565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141762000f2f5762000f2f62003a22565b60006001820162003b2f5762003b2f62003a22565b5060010190565b60006020828403121562003b4957600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052601260045260246000fd5b60008262003b915762003b9162003b69565b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111562000f2f5762000f2f62003a22565b60008060006060848603121562003c4a57600080fd5b8351925060208401519150604084015190509250925092565b61ffff82811682821603908082111562003a565762003a5662003a22565b600061ffff8084168062003c995762003c9962003b69565b92169190910492915050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121562003cce57600080fd5b815162001f838162003783565b600081518084526020808501945080840160005b8381101562003d165781516001600160a01b03168752958201959082019060010162003cef565b509495945050505050565b85815284602082015260a06040820152600062003d4260a083018662003cdb565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600062003d7a608083018662003cdb565b6001600160a01b03949094166040830152506060015292915050565b6000602080838503121562003daa57600080fd5b82516001600160401b038082111562003dc257600080fd5b818501915085601f83011262003dd757600080fd5b81518181111562003dec5762003dec62003ca5565b8060051b604051601f19603f8301168101818110858211171562003e145762003e1462003ca5565b60405291825284820192508381018501918883111562003e3357600080fd5b938501935b8285101562003e535784518452938501939285019262003e38565b9897505050505050505056fe60c06040523480156200001157600080fd5b5060405162001ec338038062001ec3833981016040819052620000349162000137565b60408051808201825260188082527f506978696141495f4469766964656e645f547261636b6572000000000000000060208084018290528451808601909552918452908301529082828260036200008c83826200020e565b5060046200009b82826200020e565b505050620000b8620000b2620000e160201b60201c565b620000e5565b6001600160a01b03166080525050610e106011555069043c33c193756480000060a052620002da565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200014a57600080fd5b81516001600160a01b03811681146200016257600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200019457607f821691505b602082108103620001b557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200020957600081815260208120601f850160051c81016020861015620001e45750805b601f850160051c820191505b818110156200020557828155600101620001f0565b5050505b505050565b81516001600160401b038111156200022a576200022a62000169565b62000242816200023b84546200017f565b84620001bb565b602080601f8311600181146200027a5760008415620002615750858301515b600019600386901b1c1916600185901b17855562000205565b600085815260208120601f198616915b82811015620002ab578886015182559484019460019091019084016200028a565b5085821015620002ca5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611bb56200030e600039600081816104310152610b400152600081816103f701526113580152611bb56000f3fe608060405234801561001057600080fd5b50600436106101ac5760003560e01c806306fdde03146101b1578063095ea7b3146101cf57806309bbedde146101f257806318160ddd14610204578063226cfa3d1461020c57806323b872dd1461022c57806327ce01471461023f5780633009a60914610252578063313ce5671461025b57806331e79db01461026a578063395093511461027f5780634e7b827f146102925780635183d6fd146102b55780636a4740021461030d5780636f2789ec1461031557806370a082311461031e578063715018a61461033157806385a6b3ae146103395780638da5cb5b1461034257806391b89fba1461036257806395d89b4114610375578063a457c2d71461037d578063a5244b3414610390578063a8b9d240146103a3578063a9059cbb146103b6578063aafd847a146103c9578063ae9ca1c4146103f2578063bc4c4b3714610419578063be10b6141461042c578063dd62ed3e14610453578063e30443bc1461048c578063e7841ec01461049f578063e98030c7146104a7578063f2fde38b146104ba578063fbcbc0f1146104cd578063ffb2c479146104e0575b600080fd5b6101b961050e565b6040516101c69190611856565b60405180910390f35b6101e26101dd3660046118b9565b6105a0565b60405190151581526020016101c6565b600a545b6040519081526020016101c6565b6002546101f6565b6101f661021a3660046118e5565b60106020526000908152604090205481565b6101e261023a366004611902565b6105b7565b6101f661024d3660046118e5565b610663565b6101f6600e5481565b604051601281526020016101c6565b61027d6102783660046118e5565b6106bc565b005b6101e261028d3660046118b9565b610781565b6101e26102a03660046118e5565b600f6020526000908152604090205460ff1681565b6102c86102c3366004611943565b6107bd565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016101c6565b61027d600080fd5b6101f660115481565b6101f661032c3660046118e5565b61082e565b61027d610849565b6101f660095481565b61034a610882565b6040516001600160a01b0390911681526020016101c6565b6101f66103703660046118e5565b610891565b6101b961089c565b6101e261038b3660046118b9565b6108ab565b61027d61039e366004611943565b610944565b6101f66103b13660046118e5565b610a07565b6101e26103c43660046118b9565b610a33565b6101f66103d73660046118e5565b6001600160a01b031660009081526008602052604090205490565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b6101e261042736600461196a565b610a3d565b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b6101f66104613660046119a3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61027d61049a3660046118b9565b610aef565b600e546101f6565b61027d6104b5366004611943565b610ba7565b61027d6104c83660046118e5565b610c35565b6102c86104db3660046118e5565b610cd2565b6104f36104ee366004611943565b610dbb565b604080519384526020840192909252908201526060016101c6565b60606003805461051d906119d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610549906119d1565b80156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b5050505050905090565b60006105ad338484610ed8565b5060015b92915050565b60006105c1600080fd5b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561064b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6106588533858403610ed8565b506001949350505050565b6001600160a01b038116600090815260076020526040812054600160801b906106b2906106ad906106a76106a26106998861082e565b60065490610ffc565b61100f565b9061101f565b61105d565b6105b19190611a21565b336106c5610882565b6001600160a01b0316146106eb5760405162461bcd60e51b815260040161064290611a43565b6001600160a01b0381166000908152600f602052604090205460ff161561071157600080fd5b6001600160a01b0381166000908152600f60205260408120805460ff1916600117905561073f908290611070565b61074a600a826110c9565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105ad9185906107b8908690611a78565b610ed8565b6000806000806000806000806107d2600a5490565b89106107f7575060009650600019955085945086935083925082915081905080610821565b6000610804600a8b611204565b905061080f81610cd2565b98509850985098509850985098509850505b919395975091939597565b565b6001600160a01b031660009081526020819052604090205490565b33610852610882565b6001600160a01b0316146108785760405162461bcd60e51b815260040161064290611a43565b61082c6000611237565b6005546001600160a01b031690565b60006105b182610a07565b60606004805461051d906119d1565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561092d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610642565b61093a3385858403610ed8565b5060019392505050565b3361094d610882565b6001600160a01b0316146109735760405162461bcd60e51b815260040161064290611a43565b600061097e60025490565b1161098857600080fd5b8015610a04576109bb61099a60025490565b6109a883600160801b610ffc565b6109b29190611a21565b60065490611289565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600954610a009082611289565b6009555b50565b6001600160a01b0381166000908152600860205260408120546105b190610a2d84610663565b90611295565b60006105ad600080fd5b600033610a48610882565b6001600160a01b031614610a6e5760405162461bcd60e51b815260040161064290611a43565b6000610a79846112a1565b90508015610ae5576001600160a01b038416600081815260106020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610ad39085815260200190565b60405180910390a360019150506105b1565b5060009392505050565b33610af8610882565b6001600160a01b031614610b1e5760405162461bcd60e51b815260040161064290611a43565b6001600160a01b0382166000908152600f602052604090205460ff16610ba3577f00000000000000000000000000000000000000000000000000000000000000008110610b8057610b6f8282611070565b610b7b600a8383611426565b610b96565b610b8b826000611070565b610b96600a836110c9565b610ba1826001610a3d565b505b5050565b33610bb0610882565b6001600160a01b031614610bd65760405162461bcd60e51b815260040161064290611a43565b610e108110158015610beb5750620151808111155b610bf457600080fd5b6011548103610c0257600080fd5b60115460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601155565b33610c3e610882565b6001600160a01b031614610c645760405162461bcd60e51b815260040161064290611a43565b6001600160a01b038116610cc95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610642565b610a0481611237565b806000808080808080610ce6600a896114cf565b9650600019955060008712610d4857600e54871115610d1457600e54610d0d90889061151a565b9550610d48565b600e54600a5460009110610d29576000610d38565b600e54600a54610d3891611295565b9050610d44888261101f565b9650505b610d5188610a07565b9450610d5c88610663565b6001600160a01b038916600090815260106020526040902054909450925082610d86576000610d94565b601154610d94908490611289565b9150428211610da4576000610dae565b610dae8242611295565b9050919395975091939597565b600a5460009081908190808203610ddd575050600e5460009250829150610ed1565b600e546000805a90506000805b8984108015610df857508582105b15610ec05784610e0781611a8b565b600a5490965086109050610e1a57600094505b6000600a6000018681548110610e3257610e32611aa4565b60009182526020808320909101546001600160a01b03168083526010909152604090912054909150610e6390611557565b15610e8657610e73816001610a3d565b15610e865781610e8281611a8b565b9250505b82610e9081611a8b565b93505060005a905080851115610eb757610eb4610ead8683611295565b8790611289565b95505b9350610dea9050565b600e85905590975095509193505050505b9193909250565b6001600160a01b038316610f3a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610642565b6001600160a01b038216610f9b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610642565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110088284611aba565b9392505050565b600081818112156105b157600080fd5b60008061102c8385611ad1565b90506000831215801561103f5750838112155b80611054575060008312801561105457508381125b61100857600080fd5b60008082121561106c57600080fd5b5090565b600061107b8361082e565b9050808211156110a35760006110918383611295565b905061109d848261157e565b50610ba1565b80821015610ba15760006110b78284611295565b90506110c384826115e2565b50505050565b6001600160a01b038116600090815260038301602052604090205460ff166110ef575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff191690556001808601835281842084905560028601909252822054845490929161113991611af9565b9050600084600001828154811061115257611152611aa4565b60009182526020808320909101546001600160a01b039081168084526002890190925260408084208790559087168352822091909155855490915081908690859081106111a1576111a1611aa4565b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905584548590806111db576111db611b0c565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600082600001828154811061121b5761121b611aa4565b6000918252602090912001546001600160a01b03169392505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006110088284611a78565b60006110088284611af9565b6000806112ad83610a07565b9050801561141d576001600160a01b0383166000908152600860205260409020546112d89082611289565b6001600160a01b038416600081815260086020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906113279084815260200190565b60405180910390a260405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af11580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c79190611b22565b905080611416576001600160a01b0384166000908152600860205260409020546113f19083611295565b6001600160a01b03909416600090815260086020526040812094909455509192915050565b5092915050565b50600092915050565b6001600160a01b038216600090815260038401602052604090205460ff161561146b576001600160a01b03821660009081526001840160205260409020819055610ba1565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b6001600160a01b038116600090815260038301602052604081205460ff166114fa57506000196105b1565b506001600160a01b03166000908152600291909101602052604090205490565b6000806115278385611b3f565b90506000831215801561153a5750838113155b806110545750600083128015611054575083811361100857600080fd5b60004282111561156957506000919050565b6011546115764284611295565b101592915050565b6115888282611626565b6115c26115a36106a283600654610ffc90919063ffffffff16565b6001600160a01b0384166000908152600760205260409020549061151a565b6001600160a01b0390921660009081526007602052604090209190915550565b6115ec8282611707565b6115c26116076106a283600654610ffc90919063ffffffff16565b6001600160a01b0384166000908152600760205260409020549061101f565b6001600160a01b03821661167c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610642565b61168860008383610ba1565b806002600082825461169a9190611a78565b90915550506001600160a01b038216600090815260208190526040812080548392906116c7908490611a78565b90915550506040518181526001600160a01b03831690600090600080516020611b608339815191529060200160405180910390a3610ba360008383610ba1565b6001600160a01b0382166117675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610642565b61177382600083610ba1565b6001600160a01b038216600090815260208190526040902054818110156117e75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610642565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611816908490611af9565b90915550506040518281526000906001600160a01b03851690600080516020611b608339815191529060200160405180910390a3610ba183600084610ba1565b600060208083528351808285015260005b8181101561188357858101830151858201604001528201611867565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a0457600080fd5b600080604083850312156118cc57600080fd5b82356118d7816118a4565b946020939093013593505050565b6000602082840312156118f757600080fd5b8135611008816118a4565b60008060006060848603121561191757600080fd5b8335611922816118a4565b92506020840135611932816118a4565b929592945050506040919091013590565b60006020828403121561195557600080fd5b5035919050565b8015158114610a0457600080fd5b6000806040838503121561197d57600080fd5b8235611988816118a4565b915060208301356119988161195c565b809150509250929050565b600080604083850312156119b657600080fd5b82356119c1816118a4565b91506020830135611998816118a4565b600181811c908216806119e557607f821691505b602082108103611a0557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082611a3e57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b808201808211156105b1576105b1611a0b565b600060018201611a9d57611a9d611a0b565b5060010190565b634e487b7160e01b600052603260045260246000fd5b80820281158282048414176105b1576105b1611a0b565b8082018281126000831280158216821582161715611af157611af1611a0b565b505092915050565b818103818111156105b1576105b1611a0b565b634e487b7160e01b600052603160045260246000fd5b600060208284031215611b3457600080fd5b81516110088161195c565b818103600083128015838313168383128216171561141657611416611a0b56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201391377b7fa6aed5f91ac601f33f34e7e9534dd2f9876664edf3b5b10f4fca4764736f6c63430008110033a2646970667358221220b42ba2d3d68229bd47c29f76da815e2e4c47a1fde4fdc1eb54bc254ff0c5511664736f6c6343000811003360c06040523480156200001157600080fd5b5060405162001ec338038062001ec3833981016040819052620000349162000137565b60408051808201825260188082527f506978696141495f4469766964656e645f547261636b6572000000000000000060208084018290528451808601909552918452908301529082828260036200008c83826200020e565b5060046200009b82826200020e565b505050620000b8620000b2620000e160201b60201c565b620000e5565b6001600160a01b03166080525050610e106011555069043c33c193756480000060a052620002da565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200014a57600080fd5b81516001600160a01b03811681146200016257600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200019457607f821691505b602082108103620001b557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200020957600081815260208120601f850160051c81016020861015620001e45750805b601f850160051c820191505b818110156200020557828155600101620001f0565b5050505b505050565b81516001600160401b038111156200022a576200022a62000169565b62000242816200023b84546200017f565b84620001bb565b602080601f8311600181146200027a5760008415620002615750858301515b600019600386901b1c1916600185901b17855562000205565b600085815260208120601f198616915b82811015620002ab578886015182559484019460019091019084016200028a565b5085821015620002ca5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611bb56200030e600039600081816104310152610b400152600081816103f701526113580152611bb56000f3fe608060405234801561001057600080fd5b50600436106101ac5760003560e01c806306fdde03146101b1578063095ea7b3146101cf57806309bbedde146101f257806318160ddd14610204578063226cfa3d1461020c57806323b872dd1461022c57806327ce01471461023f5780633009a60914610252578063313ce5671461025b57806331e79db01461026a578063395093511461027f5780634e7b827f146102925780635183d6fd146102b55780636a4740021461030d5780636f2789ec1461031557806370a082311461031e578063715018a61461033157806385a6b3ae146103395780638da5cb5b1461034257806391b89fba1461036257806395d89b4114610375578063a457c2d71461037d578063a5244b3414610390578063a8b9d240146103a3578063a9059cbb146103b6578063aafd847a146103c9578063ae9ca1c4146103f2578063bc4c4b3714610419578063be10b6141461042c578063dd62ed3e14610453578063e30443bc1461048c578063e7841ec01461049f578063e98030c7146104a7578063f2fde38b146104ba578063fbcbc0f1146104cd578063ffb2c479146104e0575b600080fd5b6101b961050e565b6040516101c69190611856565b60405180910390f35b6101e26101dd3660046118b9565b6105a0565b60405190151581526020016101c6565b600a545b6040519081526020016101c6565b6002546101f6565b6101f661021a3660046118e5565b60106020526000908152604090205481565b6101e261023a366004611902565b6105b7565b6101f661024d3660046118e5565b610663565b6101f6600e5481565b604051601281526020016101c6565b61027d6102783660046118e5565b6106bc565b005b6101e261028d3660046118b9565b610781565b6101e26102a03660046118e5565b600f6020526000908152604090205460ff1681565b6102c86102c3366004611943565b6107bd565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016101c6565b61027d600080fd5b6101f660115481565b6101f661032c3660046118e5565b61082e565b61027d610849565b6101f660095481565b61034a610882565b6040516001600160a01b0390911681526020016101c6565b6101f66103703660046118e5565b610891565b6101b961089c565b6101e261038b3660046118b9565b6108ab565b61027d61039e366004611943565b610944565b6101f66103b13660046118e5565b610a07565b6101e26103c43660046118b9565b610a33565b6101f66103d73660046118e5565b6001600160a01b031660009081526008602052604090205490565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b6101e261042736600461196a565b610a3d565b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b6101f66104613660046119a3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61027d61049a3660046118b9565b610aef565b600e546101f6565b61027d6104b5366004611943565b610ba7565b61027d6104c83660046118e5565b610c35565b6102c86104db3660046118e5565b610cd2565b6104f36104ee366004611943565b610dbb565b604080519384526020840192909252908201526060016101c6565b60606003805461051d906119d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610549906119d1565b80156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b5050505050905090565b60006105ad338484610ed8565b5060015b92915050565b60006105c1600080fd5b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561064b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6106588533858403610ed8565b506001949350505050565b6001600160a01b038116600090815260076020526040812054600160801b906106b2906106ad906106a76106a26106998861082e565b60065490610ffc565b61100f565b9061101f565b61105d565b6105b19190611a21565b336106c5610882565b6001600160a01b0316146106eb5760405162461bcd60e51b815260040161064290611a43565b6001600160a01b0381166000908152600f602052604090205460ff161561071157600080fd5b6001600160a01b0381166000908152600f60205260408120805460ff1916600117905561073f908290611070565b61074a600a826110c9565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105ad9185906107b8908690611a78565b610ed8565b6000806000806000806000806107d2600a5490565b89106107f7575060009650600019955085945086935083925082915081905080610821565b6000610804600a8b611204565b905061080f81610cd2565b98509850985098509850985098509850505b919395975091939597565b565b6001600160a01b031660009081526020819052604090205490565b33610852610882565b6001600160a01b0316146108785760405162461bcd60e51b815260040161064290611a43565b61082c6000611237565b6005546001600160a01b031690565b60006105b182610a07565b60606004805461051d906119d1565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561092d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610642565b61093a3385858403610ed8565b5060019392505050565b3361094d610882565b6001600160a01b0316146109735760405162461bcd60e51b815260040161064290611a43565b600061097e60025490565b1161098857600080fd5b8015610a04576109bb61099a60025490565b6109a883600160801b610ffc565b6109b29190611a21565b60065490611289565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600954610a009082611289565b6009555b50565b6001600160a01b0381166000908152600860205260408120546105b190610a2d84610663565b90611295565b60006105ad600080fd5b600033610a48610882565b6001600160a01b031614610a6e5760405162461bcd60e51b815260040161064290611a43565b6000610a79846112a1565b90508015610ae5576001600160a01b038416600081815260106020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610ad39085815260200190565b60405180910390a360019150506105b1565b5060009392505050565b33610af8610882565b6001600160a01b031614610b1e5760405162461bcd60e51b815260040161064290611a43565b6001600160a01b0382166000908152600f602052604090205460ff16610ba3577f00000000000000000000000000000000000000000000000000000000000000008110610b8057610b6f8282611070565b610b7b600a8383611426565b610b96565b610b8b826000611070565b610b96600a836110c9565b610ba1826001610a3d565b505b5050565b33610bb0610882565b6001600160a01b031614610bd65760405162461bcd60e51b815260040161064290611a43565b610e108110158015610beb5750620151808111155b610bf457600080fd5b6011548103610c0257600080fd5b60115460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601155565b33610c3e610882565b6001600160a01b031614610c645760405162461bcd60e51b815260040161064290611a43565b6001600160a01b038116610cc95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610642565b610a0481611237565b806000808080808080610ce6600a896114cf565b9650600019955060008712610d4857600e54871115610d1457600e54610d0d90889061151a565b9550610d48565b600e54600a5460009110610d29576000610d38565b600e54600a54610d3891611295565b9050610d44888261101f565b9650505b610d5188610a07565b9450610d5c88610663565b6001600160a01b038916600090815260106020526040902054909450925082610d86576000610d94565b601154610d94908490611289565b9150428211610da4576000610dae565b610dae8242611295565b9050919395975091939597565b600a5460009081908190808203610ddd575050600e5460009250829150610ed1565b600e546000805a90506000805b8984108015610df857508582105b15610ec05784610e0781611a8b565b600a5490965086109050610e1a57600094505b6000600a6000018681548110610e3257610e32611aa4565b60009182526020808320909101546001600160a01b03168083526010909152604090912054909150610e6390611557565b15610e8657610e73816001610a3d565b15610e865781610e8281611a8b565b9250505b82610e9081611a8b565b93505060005a905080851115610eb757610eb4610ead8683611295565b8790611289565b95505b9350610dea9050565b600e85905590975095509193505050505b9193909250565b6001600160a01b038316610f3a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610642565b6001600160a01b038216610f9b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610642565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110088284611aba565b9392505050565b600081818112156105b157600080fd5b60008061102c8385611ad1565b90506000831215801561103f5750838112155b80611054575060008312801561105457508381125b61100857600080fd5b60008082121561106c57600080fd5b5090565b600061107b8361082e565b9050808211156110a35760006110918383611295565b905061109d848261157e565b50610ba1565b80821015610ba15760006110b78284611295565b90506110c384826115e2565b50505050565b6001600160a01b038116600090815260038301602052604090205460ff166110ef575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff191690556001808601835281842084905560028601909252822054845490929161113991611af9565b9050600084600001828154811061115257611152611aa4565b60009182526020808320909101546001600160a01b039081168084526002890190925260408084208790559087168352822091909155855490915081908690859081106111a1576111a1611aa4565b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905584548590806111db576111db611b0c565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600082600001828154811061121b5761121b611aa4565b6000918252602090912001546001600160a01b03169392505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006110088284611a78565b60006110088284611af9565b6000806112ad83610a07565b9050801561141d576001600160a01b0383166000908152600860205260409020546112d89082611289565b6001600160a01b038416600081815260086020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906113279084815260200190565b60405180910390a260405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af11580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c79190611b22565b905080611416576001600160a01b0384166000908152600860205260409020546113f19083611295565b6001600160a01b03909416600090815260086020526040812094909455509192915050565b5092915050565b50600092915050565b6001600160a01b038216600090815260038401602052604090205460ff161561146b576001600160a01b03821660009081526001840160205260409020819055610ba1565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b6001600160a01b038116600090815260038301602052604081205460ff166114fa57506000196105b1565b506001600160a01b03166000908152600291909101602052604090205490565b6000806115278385611b3f565b90506000831215801561153a5750838113155b806110545750600083128015611054575083811361100857600080fd5b60004282111561156957506000919050565b6011546115764284611295565b101592915050565b6115888282611626565b6115c26115a36106a283600654610ffc90919063ffffffff16565b6001600160a01b0384166000908152600760205260409020549061151a565b6001600160a01b0390921660009081526007602052604090209190915550565b6115ec8282611707565b6115c26116076106a283600654610ffc90919063ffffffff16565b6001600160a01b0384166000908152600760205260409020549061101f565b6001600160a01b03821661167c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610642565b61168860008383610ba1565b806002600082825461169a9190611a78565b90915550506001600160a01b038216600090815260208190526040812080548392906116c7908490611a78565b90915550506040518181526001600160a01b03831690600090600080516020611b608339815191529060200160405180910390a3610ba360008383610ba1565b6001600160a01b0382166117675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610642565b61177382600083610ba1565b6001600160a01b038216600090815260208190526040902054818110156117e75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610642565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611816908490611af9565b90915550506040518281526000906001600160a01b03851690600080516020611b608339815191529060200160405180910390a3610ba183600084610ba1565b600060208083528351808285015260005b8181101561188357858101830151858201604001528201611867565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a0457600080fd5b600080604083850312156118cc57600080fd5b82356118d7816118a4565b946020939093013593505050565b6000602082840312156118f757600080fd5b8135611008816118a4565b60008060006060848603121561191757600080fd5b8335611922816118a4565b92506020840135611932816118a4565b929592945050506040919091013590565b60006020828403121561195557600080fd5b5035919050565b8015158114610a0457600080fd5b6000806040838503121561197d57600080fd5b8235611988816118a4565b915060208301356119988161195c565b809150509250929050565b600080604083850312156119b657600080fd5b82356119c1816118a4565b91506020830135611998816118a4565b600181811c908216806119e557607f821691505b602082108103611a0557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082611a3e57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b808201808211156105b1576105b1611a0b565b600060018201611a9d57611a9d611a0b565b5060010190565b634e487b7160e01b600052603260045260246000fd5b80820281158282048414176105b1576105b1611a0b565b8082018281126000831280158216821582161715611af157611af1611a0b565b505092915050565b818103818111156105b1576105b1611a0b565b634e487b7160e01b600052603160045260246000fd5b600060208284031215611b3457600080fd5b81516110088161195c565b818103600083128015838313168383128216171561141657611416611a0b56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201391377b7fa6aed5f91ac601f33f34e7e9534dd2f9876664edf3b5b10f4fca4764736f6c63430008110033

Deployed Bytecode

0x608060405260043610620002d05760003560e01c806301339c2114620002dd57806302357da014620002f757806306228749146200031c57806306ee6ad8146200034c57806306fdde03146200036e578063078662911462000395578063095ea7b314620003da5780631694505e14620003ff57806318160ddd146200042157806323b872dd146200044257806323cc660114620004675780632b14ca56146200048c5780632c1f5216146200052b578063307aebc9146200054d578063313ce567146200057057806331e79db0146200058e578063366b2f3114620005b35780633950935114620005d85780634626402b14620005fd57806347062402146200061f57806349bd5a5e14620006795780634e71d92d146200069b5780634fbee19314620006b35780635456822714620006f057806355291dbd14620007155780635d0044ca146200072d57806367243482146200075257806370a082311462000777578063715018a6146200079c578063781edb3c14620007b4578063790ca41314620007d95780637a034dc214620007f157806383672f3e1462000816578063871c128d146200083b5780638c0b5e2214620008605780638da5cb5b14620008785780638ea5220f146200089057806395b73c9514620008b257806395d89b4114620008d75780639a7a23d614620008ef5780639c1b8af51462000914578063a457c2d7146200092c578063a9059cbb1462000951578063ae9ca1c41462000976578063afa4f3b21462000998578063b62496f514620009bd578063bc33718214620009f1578063c02466681462000a16578063d1d7d7ef1462000a3b578063d5c0b28c1462000a6f578063d762781f1462000a94578063dd62ed3e1462000ab6578063e2f456051462000b00578063e98030c71462000b18578063f2fde38b1462000b3d578063f5241cd31462000b62578063f8b45b051462000b84578063f9d0831a1462000b9c57600080fd5b36620002d857005b600080fd5b348015620002ea57600080fd5b50620002f562000bc1565b005b3480156200030457600080fd5b50620002f5620003163660046200368a565b62000c5c565b3480156200032957600080fd5b506200033461dead81565b6040516200034391906200371f565b60405180910390f35b3480156200035957600080fd5b5060105462000334906001600160a01b031681565b3480156200037b57600080fd5b506200038662000e82565b60405162000343919062003733565b348015620003a257600080fd5b50620003c9620003b436600462003799565b60176020526000908152604090205460ff1681565b604051901515815260200162000343565b348015620003e757600080fd5b50620003c9620003f9366004620037b9565b62000f1c565b3480156200040c57600080fd5b5060085462000334906001600160a01b031681565b3480156200042e57600080fd5b506002545b60405190815260200162000343565b3480156200044f57600080fd5b50620003c962000461366004620037e8565b62000f35565b3480156200047457600080fd5b50620002f5620004863660046200383d565b62000fe5565b3480156200049957600080fd5b50600754620004e69061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b8204811691600160501b8104821691600160601b9091041687565b6040805161ffff9889168152968816602088015294871694860194909452918516606085015284166080840152831660a083015290911660c082015260e00162000343565b3480156200053857600080fd5b50600b5462000334906001600160a01b031681565b3480156200055a57600080fd5b50600954620003c990600160a81b900460ff1681565b3480156200057d57600080fd5b506040516012815260200162000343565b3480156200059b57600080fd5b50620002f5620005ad36600462003799565b62001044565b348015620005c057600080fd5b50620002f5620005d236600462003799565b620010e1565b348015620005e557600080fd5b50620003c9620005f7366004620037b9565b62001349565b3480156200060a57600080fd5b5060115462000334906001600160a01b031681565b3480156200062c57600080fd5b50600654620004e69061ffff80821691620100008104821691600160201b8204811691600160301b8104821691600160401b8204811691600160501b8104821691600160601b9091041687565b3480156200068657600080fd5b5060095462000334906001600160a01b031681565b348015620006a857600080fd5b50620002f562001389565b348015620006c057600080fd5b50620003c9620006d236600462003799565b6001600160a01b031660009081526016602052604090205460ff1690565b348015620006fd57600080fd5b50620002f56200070f3660046200368a565b62001407565b3480156200072257600080fd5b50620002f562001624565b3480156200073a57600080fd5b50620002f56200074c3660046200387b565b62001685565b3480156200075f57600080fd5b50620002f562000771366004620038e3565b620016e2565b3480156200078457600080fd5b50620004336200079636600462003799565b620017ac565b348015620007a957600080fd5b50620002f5620017c7565b348015620007c157600080fd5b50620002f5620007d33660046200383d565b62001809565b348015620007e657600080fd5b5062000433600a5481565b348015620007fe57600080fd5b50620002f5620008103660046200387b565b62001868565b3480156200082357600080fd5b50620002f56200083536600462003955565b620018b7565b3480156200084857600080fd5b50620002f56200085a3660046200387b565b6200193b565b3480156200086d57600080fd5b506200043360135481565b3480156200088557600080fd5b5062000334620019d2565b3480156200089d57600080fd5b50600e5462000334906001600160a01b031681565b348015620008bf57600080fd5b50620002f5620008d136600462003799565b620019e1565b348015620008e457600080fd5b506200038662001a37565b348015620008fc57600080fd5b50620002f56200090e3660046200383d565b62001a48565b3480156200092157600080fd5b506200043360155481565b3480156200093957600080fd5b50620003c96200094b366004620037b9565b62001aa8565b3480156200095e57600080fd5b50620003c962000970366004620037b9565b62001b45565b3480156200098357600080fd5b50600d5462000334906001600160a01b031681565b348015620009a557600080fd5b50620002f5620009b73660046200387b565b62001b54565b348015620009ca57600080fd5b50620003c9620009dc36600462003799565b60196020526000908152604090205460ff1681565b348015620009fe57600080fd5b50620002f562000a103660046200387b565b62001ba2565b34801562000a2357600080fd5b50620002f562000a353660046200383d565b62001bf8565b34801562000a4857600080fd5b50620003c962000a5a36600462003799565b60186020526000908152604090205460ff1681565b34801562000a7c57600080fd5b50620002f562000a8e36600462003799565b62001cb9565b34801562000aa157600080fd5b50600f5462000334906001600160a01b031681565b34801562000ac357600080fd5b506200043362000ad5366004620039ba565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801562000b0d57600080fd5b506200043360125481565b34801562000b2557600080fd5b50620002f562000b373660046200387b565b62001d37565b34801562000b4a57600080fd5b50620002f562000b5c36600462003799565b62001d9d565b34801562000b6f57600080fd5b50600c5462000334906001600160a01b031681565b34801562000b9157600080fd5b506200043360145481565b34801562000ba957600080fd5b50620002f562000bbb36600462003799565b62001e43565b3362000bcc620019d2565b6001600160a01b03161462000bfe5760405162461bcd60e51b815260040162000bf590620039ed565b60405180910390fd5b600a541562000c475760405162461bcd60e51b8152602060048201526014602482015273616c7265616479206c61756e6368656420626f6960601b604482015260640162000bf5565b6009805460ff60a81b1916600160a81b179055565b3362000c67620019d2565b6001600160a01b03161462000c905760405162461bcd60e51b815260040162000bf590620039ed565b86600760000160006101000a81548161ffff021916908361ffff16021790555085600760000160066101000a81548161ffff021916908361ffff16021790555084600760000160046101000a81548161ffff021916908361ffff16021790555083600760000160026101000a81548161ffff021916908361ffff16021790555082600760000160086101000a81548161ffff021916908361ffff160217905550816007600001600a6101000a81548161ffff021916908361ffff160217905550806007600001600c6101000a81548161ffff021916908361ffff1602179055506006600001600c9054906101000a900461ffff166007600001600a9054906101000a900461ffff16600760000160089054906101000a900461ffff16600760000160029054906101000a900461ffff16600760000160049054906101000a900461ffff16600760000160069054906101000a900461ffff16600760000160009054906101000a900461ffff1662000e08919062003a38565b62000e14919062003a38565b62000e20919062003a38565b62000e2c919062003a38565b62000e38919062003a38565b62000e44919062003a38565b6009805461ffff60c01b1916600160c01b61ffff938416810291909117918290556107d09104909116111562000e7957600080fd5b50505050505050565b60606003805462000e939062003a5d565b80601f016020809104026020016040519081016040528092919081815260200182805462000ec19062003a5d565b801562000f125780601f1062000ee65761010080835404028352916020019162000f12565b820191906000526020600020905b81548152906001019060200180831162000ef457829003601f168201915b5050505050905090565b600062000f2b33848462001f98565b5060015b92915050565b600062000f44848484620020c0565b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101562000fcb5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b606482015260840162000bf5565b62000fda853385840362001f98565b506001949350505050565b3362000ff0620019d2565b6001600160a01b031614620010195760405162461bcd60e51b815260040162000bf590620039ed565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b336200104f620019d2565b6001600160a01b031614620010785760405162461bcd60e51b815260040162000bf590620039ed565b600b5460405163031e79db60e41b81526001600160a01b03909116906331e79db090620010aa9084906004016200371f565b600060405180830381600087803b158015620010c557600080fd5b505af1158015620010da573d6000803e3d6000fd5b5050505050565b33620010ec620019d2565b6001600160a01b031614620011155760405162461bcd60e51b815260040162000bf590620039ed565b600081604051620011269062003664565b6200113291906200371f565b604051809103906000f0801580156200114f573d6000803e3d6000fd5b5060405163031e79db60e41b81529091506001600160a01b038216906331e79db090620011819084906004016200371f565b600060405180830381600087803b1580156200119c57600080fd5b505af1158015620011b1573d6000803e3d6000fd5b505060405163031e79db60e41b81526001600160a01b03841692506331e79db09150620011e39030906004016200371f565b600060405180830381600087803b158015620011fe57600080fd5b505af115801562001213573d6000803e3d6000fd5b50505050806001600160a01b03166331e79db062001230620019d2565b6040518263ffffffff1660e01b81526004016200124e91906200371f565b600060405180830381600087803b1580156200126957600080fd5b505af11580156200127e573d6000803e3d6000fd5b505060085460405163031e79db60e41b81526001600160a01b0380861694506331e79db09350620012b49216906004016200371f565b600060405180830381600087803b158015620012cf57600080fd5b505af1158015620012e4573d6000803e3d6000fd5b5050600d80546001600160a01b038087166001600160a01b03199283168117909355600b80549187169190921681179091556040519093509091507f90c7d74461c613da5efa97d90740869367d74ab3aa5837aa4ae9a975f954b7a890600090a35050565b3360008181526001602090815260408083206001600160a01b0387168452909152812054909162000f2b9185906200138390869062003a99565b62001f98565b600b5460405163bc4c4b3760e01b81526001600160a01b039091169063bc4c4b3790620013be90339060009060040162003aaf565b6020604051808303816000875af1158015620013de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001404919062003aca565b50565b3362001412620019d2565b6001600160a01b0316146200143b5760405162461bcd60e51b815260040162000bf590620039ed565b86600660000160006101000a81548161ffff021916908361ffff16021790555085600660000160066101000a81548161ffff021916908361ffff16021790555084600660000160046101000a81548161ffff021916908361ffff16021790555083600660000160026101000a81548161ffff021916908361ffff16021790555082600660000160086101000a81548161ffff021916908361ffff160217905550816006600001600a6101000a81548161ffff021916908361ffff160217905550806006600001600c6101000a81548161ffff021916908361ffff1602179055506006600001600c9054906101000a900461ffff166006600001600a9054906101000a900461ffff16600660000160089054906101000a900461ffff16600660000160029054906101000a900461ffff16600660000160049054906101000a900461ffff16600660000160069054906101000a900461ffff16600660000160009054906101000a900461ffff16620015b3919062003a38565b620015bf919062003a38565b620015cb919062003a38565b620015d7919062003a38565b620015e3919062003a38565b620015ef919062003a38565b6009805461ffff60b01b1916600160b01b61ffff938416810291909117918290556107d09104909116111562000e7957600080fd5b336200162f620019d2565b6001600160a01b031614620016585760405162461bcd60e51b815260040162000bf590620039ed565b60405133904780156108fc02916000818181858888f1935050505015801562001404573d6000803e3d6000fd5b3362001690620019d2565b6001600160a01b031614620016b95760405162461bcd60e51b815260040162000bf590620039ed565b620016d06064620016c960025490565b9062001f8a565b811015620016dd57600080fd5b601455565b33620016ed620019d2565b6001600160a01b031614620017165760405162461bcd60e51b815260040162000bf590620039ed565b8281146200172357600080fd5b60005b83811015620010da57620017973386868481811062001749576200174962003aea565b905060200201602081019062001760919062003799565b85858581811062001775576200177562003aea565b90506020020135670de0b6b3a764000062001791919062003b00565b620020c0565b80620017a38162003b1a565b91505062001726565b6001600160a01b031660009081526020819052604090205490565b33620017d2620019d2565b6001600160a01b031614620017fb5760405162461bcd60e51b815260040162000bf590620039ed565b6200180760006200278c565b565b3362001814620019d2565b6001600160a01b0316146200183d5760405162461bcd60e51b815260040162000bf590620039ed565b6001600160a01b03919091166000908152601860205260409020805460ff1916911515919091179055565b3362001873620019d2565b6001600160a01b0316146200189c5760405162461bcd60e51b815260040162000bf590620039ed565b60095462001404906001600160a01b031661dead83620020c0565b33620018c2620019d2565b6001600160a01b031614620018eb5760405162461bcd60e51b815260040162000bf590620039ed565b600e80546001600160a01b039586166001600160a01b031991821617909155600f805494861694821694909417909355601180549285169284169290921790915560108054919093169116179055565b3362001946620019d2565b6001600160a01b0316146200196f5760405162461bcd60e51b815260040162000bf590620039ed565b62030d4081101580156200198657506207a1208111155b6200199057600080fd5b60155481036200199f57600080fd5b60155460405182907f40d7e40e79af4e8e5a9b3c57030d8ea93f13d669c06d448c4d631d4ae7d23db790600090a3601555565b6005546001600160a01b031690565b33620019ec620019d2565b6001600160a01b03161462001a155760405162461bcd60e51b815260040162000bf590620039ed565b600c80546001600160a01b0319166001600160a01b0392909216919091179055565b60606004805462000e939062003a5d565b3362001a53620019d2565b6001600160a01b03161462001a7c5760405162461bcd60e51b815260040162000bf590620039ed565b6009546001600160a01b039081169083160362001a9857600080fd5b62001aa48282620027de565b5050565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101562001b2c5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840162000bf5565b62001b3b338585840362001f98565b5060019392505050565b600062000f2b338484620020c0565b3362001b5f620019d2565b6001600160a01b03161462001b885760405162461bcd60e51b815260040162000bf590620039ed565b62001b9c81670de0b6b3a764000062003b00565b60125550565b3362001bad620019d2565b6001600160a01b03161462001bd65760405162461bcd60e51b815260040162000bf590620039ed565b62001be66064620016c960025490565b81101562001bf357600080fd5b601355565b3362001c03620019d2565b6001600160a01b03161462001c2c5760405162461bcd60e51b815260040162000bf590620039ed565b6001600160a01b03821660009081526016602052604090205481151560ff90911615150362001c5a57600080fd5b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b60405163bc4c4b3760e01b815281906001600160a01b0382169063bc4c4b379062001cec90339060009060040162003aaf565b6020604051808303816000875af115801562001d0c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001d32919062003aca565b505050565b3362001d42620019d2565b6001600160a01b03161462001d6b5760405162461bcd60e51b815260040162000bf590620039ed565b600b5460405163e98030c760e01b8152600481018390526001600160a01b039091169063e98030c790602401620010aa565b3362001da8620019d2565b6001600160a01b03161462001dd15760405162461bcd60e51b815260040162000bf590620039ed565b6001600160a01b03811662001e385760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840162000bf5565b62001404816200278c565b3362001e4e620019d2565b6001600160a01b03161462001e775760405162461bcd60e51b815260040162000bf590620039ed565b6040516370a0823160e01b815281906000906001600160a01b038316906370a082319062001eaa9030906004016200371f565b602060405180830381865afa15801562001ec8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001eee919062003b36565b9050816001600160a01b031663a9059cbb62001f09620019d2565b836040518363ffffffff1660e01b815260040162001f2992919062003b50565b6020604051808303816000875af115801562001f49573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001f6f919062003aca565b50505050565b600062001f83828462003b00565b9392505050565b600062001f83828462003b7f565b6001600160a01b03831662001ffc5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840162000bf5565b6001600160a01b0382166200205f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840162000bf5565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316620020e95760405162461bcd60e51b815260040162000bf59062003b96565b6001600160a01b038216620021125760405162461bcd60e51b815260040162000bf59062003bdb565b80600003620021295762001d328383600062002951565b6001600160a01b03831660009081526016602052604090205460ff16620021a157600954600160a81b900460ff16620021a15760405162461bcd60e51b8152602060048201526019602482015278151c98591a5b99c81a5cc81b9bdd081858dd1a5d99481e595d603a1b604482015260640162000bf5565b6000620021ae30620017ac565b60125490915081108015908190620021d05750600954600160a01b900460ff16155b8015620021f657506001600160a01b03851660009081526019602052604090205460ff16155b80156200221e575062002208620019d2565b6001600160a01b0316856001600160a01b031614155b801562002246575062002230620019d2565b6001600160a01b0316846001600160a01b031614155b1562002278576009805460ff60a01b1916600160a01b1790556200226a8262002ab1565b6009805460ff60a01b191690555b6009546001600160a01b03861660009081526016602052604090205460ff600160a01b909204821615911680620022c757506001600160a01b03851660009081526016602052604090205460ff165b15620022d1575060005b8015620025c9576001600160a01b038516600090815260196020526040812054819060ff161580156200231d57506001600160a01b03871660009081526018602052604090205460ff16155b156200239e57601454866200233289620017ac565b6200233e919062003a99565b11156200239e5760405162461bcd60e51b815260206004820152602760248201527f546f6b656e3a2042616c616e63652065786365656473204d61782057616c6c656044820152661d081b1a5b5a5d60ca1b606482015260840162000bf5565b6001600160a01b03881660009081526019602052604090205460ff168015620023e057506001600160a01b03871660009081526017602052604090205460ff16155b156200249357601354861115620024365760405162461bcd60e51b81526020600482015260196024820152784275793a204d6178205478206c696d6974206578636565647360381b604482015260640162000bf5565b6009546200245a9061271090620016c9908990600160b01b900461ffff1662001f75565b6009546006549193506200248b9161ffff600160b01b909204821691620016c9918691620100009091041662001f75565b905062002583565b6001600160a01b03871660009081526019602052604090205460ff168015620024d557506001600160a01b03881660009081526017602052604090205460ff16155b15620025835760135486106200252b5760405162461bcd60e51b815260206004820152601a60248201527953656c6c3a204d6178205478206c696d6974206578636565647360301b604482015260640162000bf5565b6009546200254f9061271090620016c9908990600160c01b900461ffff1662001f75565b600954600654919350620025809161ffff600160b01b909204821691620016c9918691620100009091041662001f75565b90505b8115620025c65762002596868362002ec4565b9550620025b08830620025aa848662003c1e565b62002951565b8015620025c657620025c68861dead8362002951565b50505b620025d686868662002951565b600b546001600160a01b031663e30443bc87620025f381620017ac565b6040518363ffffffff1660e01b81526004016200261292919062003b50565b600060405180830381600087803b1580156200262d57600080fd5b505af19250505080156200263f575060015b50600b546001600160a01b031663e30443bc866200265d81620017ac565b6040518363ffffffff1660e01b81526004016200267c92919062003b50565b600060405180830381600087803b1580156200269757600080fd5b505af1925050508015620026a9575060015b50600954600160a01b900460ff166200278457601554600b546040516001624d3b8760e01b03198152600481018390526001600160a01b039091169063ffb2c479906024016060604051808303816000875af19250505080156200272c575060408051601f3d908101601f19168201909252620027299181019062003c34565b60015b1562000e795760408051848152602081018490529081018290526060810185905232906001907fc864333d6121033635ab41b29ae52f10a22cf4438c3e4f1c4c68518feb2f8a989060800160405180910390a3505050505b505050505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b03821660009081526019602052604090205481151560ff909116151503620028805760405162461bcd60e51b815260206004820152604160248201527f506978696141493a204175746f6d61746564206d61726b6574206d616b65722060448201527f7061697220697320616c72656164792073657420746f20746861742076616c756064820152606560f81b608482015260a40162000bf5565b6001600160a01b0382166000908152601960205260409020805460ff191682158015919091179091556200291557600b5460405163031e79db60e41b81526001600160a01b03909116906331e79db090620028e09085906004016200371f565b600060405180830381600087803b158015620028fb57600080fd5b505af115801562002910573d6000803e3d6000fd5b505050505b604051811515906001600160a01b038416907fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab90600090a35050565b6001600160a01b0383166200297a5760405162461bcd60e51b815260040162000bf59062003b96565b6001600160a01b038216620029a35760405162461bcd60e51b815260040162000bf59062003bdb565b6001600160a01b0383166000908152602081905260409020548181101562002a1d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840162000bf5565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929062002a5690849062003a99565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405162002aa391815260200190565b60405180910390a362001f6f565b600754600654600954479260009261ffff62010000928390048116939290910481169162002af191600160c01b8204811691600160b01b90041662003a38565b62002afd919062003c63565b62002b09919062003c63565b60075460065461ffff928316935060009262002c23928592620016c992600160601b808404821693908304821692600160501b808304841693908204811692600160401b808204831693908104831692600160301b80840482169390830482169260029262002b8692600160201b90819004821692041662003a38565b62002b92919062003c81565b60075460065462002bab9161ffff908116911662003a38565b62002bb7919062003a38565b62002bc3919062003a38565b62002bcf919062003a38565b62002bdb919062003a38565b62002be7919062003a38565b62002bf3919062003a38565b62002bff919062003a38565b62002c0b919062003a38565b62002c17919062003a38565b879061ffff1662001f75565b9050600062002c33828662003c1e565b905062002c408262002ed2565b60075460065460009160029162002c6b9161ffff600160201b91829004811692919091041662003a38565b62002c77919062003c81565b61ffff169050600062002c8b478762002ec4565b9050600062002cc962002c9f848862003c1e565b600754600654620016c99162002cbd9161ffff918216911662003a38565b859061ffff1662001f75565b9050600062002d1262002cdd858962003c1e565b600754600654620016c99162002d069161ffff600160401b928390048116929091041662003a38565b869061ffff1662001f75565b9050600062002d4f62002d26868a62003c1e565b600754600654620016c99162002c179161ffff600160501b928390048116929091041662003a38565b9050600062002d9862002d63878b62003c1e565b600754600654620016c99162002d8c9161ffff600160301b928390048116929091041662003a38565b889061ffff1662001f75565b9050600062002de162002dac888c62003c1e565b600754600654620016c99162002dd59161ffff600160601b928390048116929091041662003a38565b899061ffff1662001f75565b9050821562002df55762002df58362003033565b801562002e075762002e078162003269565b811562002e2657600e5462002e26906001600160a01b031683620033dc565b831562002e455760115462002e45906001600160a01b031685620033dc565b841562002e645760105462002e64906001600160a01b031686620033dc565b471562002eb65762002eb6888483858862002e808b8d62003c1e565b62002e8c919062003c1e565b62002e98919062003c1e565b62002ea4919062003c1e565b62002eb0919062003c1e565b62003479565b505050505050505050505050565b600062001f83828462003c1e565b604080516002808252606082018352600092602083019080368337019050509050308160008151811062002f0a5762002f0a62003aea565b6001600160a01b03928316602091820292909201810191909152600854604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa15801562002f64573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062002f8a919062003cbb565b8160018151811062002fa05762002fa062003aea565b6001600160a01b03928316602091820292909201015260085462002fc8913091168462001f98565b60085460405163791ac94760e01b81526001600160a01b039091169063791ac947906200300390859060009086903090429060040162003d21565b600060405180830381600087803b1580156200301e57600080fd5b505af115801562002784573d6000803e3d6000fd5b600d546040516370a0823160e01b81526000916001600160a01b0316906370a0823190620030669030906004016200371f565b602060405180830381865afa15801562003084573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620030aa919062003b36565b9050620030b78262003528565b600d546040516370a0823160e01b81526000916200313c9184916001600160a01b0316906370a0823190620030f19030906004016200371f565b602060405180830381865afa1580156200310f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062003135919062003b36565b9062002ec4565b600d54600b5460405163a9059cbb60e01b81529293506000926001600160a01b039283169263a9059cbb926200317a92911690869060040162003b50565b6020604051808303816000875af11580156200319a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620031c0919062003aca565b9050801562001f6f57600b5460405163294912cd60e21b8152600481018490526001600160a01b039091169063a5244b3490602401600060405180830381600087803b1580156200321057600080fd5b505af115801562003225573d6000803e3d6000fd5b505050507fb0cc2628d6d644cf6be9d8110e142297ac910d6d8026d795a99f272fd9ad60b1826040516200325b91815260200190565b60405180910390a150505050565b6040805160028082526060820183526000926020830190803683375050600854604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa158015620032d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620032fa919062003cbb565b8160008151811062003310576200331062003aea565b6001600160a01b039283166020918202929092010152600c5482519116908290600190811062003344576200334462003aea565b6001600160a01b039283166020918202929092010152600854600f54604051637ff36ab560e01b815291831692637ff36ab59286926200339292600092889290911690429060040162003d5f565b60006040518083038185885af1158015620033b1573d6000803e3d6000fd5b50505050506040513d6000823e601f3d908101601f1916820160405262001d32919081019062003d96565b6000826001600160a01b03168260405160006040518083038185875af1925050503d80600081146200342b576040519150601f19603f3d011682016040523d82523d6000602084013e62003430565b606091505b505090508062001d325760405162461bcd60e51b8152602060048201526013602482015272195d1a081d1c985b9cd9995c8819985a5b1959606a1b604482015260640162000bf5565b600854620034939030906001600160a01b03168462001f98565b60085460405163f305d71960e01b8152306004820152602481018490526000604482018190526064820181905260848201524260a48201526001600160a01b039091169063f305d71990839060c40160606040518083038185885af115801562003501573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190620010da919062003c34565b6040805160028082526060820183526000926020830190803683375050600854604080516315ab88c960e31b815290519394506001600160a01b039091169263ad5c4648925060048083019260209291908290030181865afa15801562003593573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620035b9919062003cbb565b81600081518110620035cf57620035cf62003aea565b6001600160a01b039283166020918202929092010152600d5482519116908290600190811062003603576200360362003aea565b6001600160a01b03928316602091820292909201015260085416637ff36ab58360008430620036354261012c62003656565b6040518663ffffffff1660e01b815260040162003392949392919062003d5f565b600062001f83828462003a99565b611ec38062003e6083390190565b803561ffff811681146200368557600080fd5b919050565b600080600080600080600060e0888a031215620036a657600080fd5b620036b18862003672565b9650620036c16020890162003672565b9550620036d16040890162003672565b9450620036e16060890162003672565b9350620036f16080890162003672565b92506200370160a0890162003672565b91506200371160c0890162003672565b905092959891949750929550565b6001600160a01b0391909116815260200190565b600060208083528351808285015260005b81811015620037625785810183015185820160400152820162003744565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b03811681146200140457600080fd5b600060208284031215620037ac57600080fd5b813562001f838162003783565b60008060408385031215620037cd57600080fd5b8235620037da8162003783565b946020939093013593505050565b600080600060608486031215620037fe57600080fd5b83356200380b8162003783565b925060208401356200381d8162003783565b929592945050506040919091013590565b80151581146200140457600080fd5b600080604083850312156200385157600080fd5b82356200385e8162003783565b9150602083013562003870816200382e565b809150509250929050565b6000602082840312156200388e57600080fd5b5035919050565b60008083601f840112620038a857600080fd5b5081356001600160401b03811115620038c057600080fd5b6020830191508360208260051b8501011115620038dc57600080fd5b9250929050565b60008060008060408587031215620038fa57600080fd5b84356001600160401b03808211156200391257600080fd5b620039208883890162003895565b909650945060208701359150808211156200393a57600080fd5b50620039498782880162003895565b95989497509550505050565b600080600080608085870312156200396c57600080fd5b8435620039798162003783565b935060208501356200398b8162003783565b925060408501356200399d8162003783565b91506060850135620039af8162003783565b939692955090935050565b60008060408385031215620039ce57600080fd5b8235620039db8162003783565b91506020830135620038708162003783565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b61ffff81811683821601908082111562003a565762003a5662003a22565b5092915050565b600181811c9082168062003a7257607f821691505b60208210810362003a9357634e487b7160e01b600052602260045260246000fd5b50919050565b8082018082111562000f2f5762000f2f62003a22565b6001600160a01b039290921682521515602082015260400190565b60006020828403121562003add57600080fd5b815162001f83816200382e565b634e487b7160e01b600052603260045260246000fd5b808202811582820484141762000f2f5762000f2f62003a22565b60006001820162003b2f5762003b2f62003a22565b5060010190565b60006020828403121562003b4957600080fd5b5051919050565b6001600160a01b03929092168252602082015260400190565b634e487b7160e01b600052601260045260246000fd5b60008262003b915762003b9162003b69565b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b8181038181111562000f2f5762000f2f62003a22565b60008060006060848603121562003c4a57600080fd5b8351925060208401519150604084015190509250925092565b61ffff82811682821603908082111562003a565762003a5662003a22565b600061ffff8084168062003c995762003c9962003b69565b92169190910492915050565b634e487b7160e01b600052604160045260246000fd5b60006020828403121562003cce57600080fd5b815162001f838162003783565b600081518084526020808501945080840160005b8381101562003d165781516001600160a01b03168752958201959082019060010162003cef565b509495945050505050565b85815284602082015260a06040820152600062003d4260a083018662003cdb565b6001600160a01b0394909416606083015250608001529392505050565b84815260806020820152600062003d7a608083018662003cdb565b6001600160a01b03949094166040830152506060015292915050565b6000602080838503121562003daa57600080fd5b82516001600160401b038082111562003dc257600080fd5b818501915085601f83011262003dd757600080fd5b81518181111562003dec5762003dec62003ca5565b8060051b604051601f19603f8301168101818110858211171562003e145762003e1462003ca5565b60405291825284820192508381018501918883111562003e3357600080fd5b938501935b8285101562003e535784518452938501939285019262003e38565b9897505050505050505056fe60c06040523480156200001157600080fd5b5060405162001ec338038062001ec3833981016040819052620000349162000137565b60408051808201825260188082527f506978696141495f4469766964656e645f547261636b6572000000000000000060208084018290528451808601909552918452908301529082828260036200008c83826200020e565b5060046200009b82826200020e565b505050620000b8620000b2620000e160201b60201c565b620000e5565b6001600160a01b03166080525050610e106011555069043c33c193756480000060a052620002da565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6000602082840312156200014a57600080fd5b81516001600160a01b03811681146200016257600080fd5b9392505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200019457607f821691505b602082108103620001b557634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200020957600081815260208120601f850160051c81016020861015620001e45750805b601f850160051c820191505b818110156200020557828155600101620001f0565b5050505b505050565b81516001600160401b038111156200022a576200022a62000169565b62000242816200023b84546200017f565b84620001bb565b602080601f8311600181146200027a5760008415620002615750858301515b600019600386901b1c1916600185901b17855562000205565b600085815260208120601f198616915b82811015620002ab578886015182559484019460019091019084016200028a565b5085821015620002ca5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60805160a051611bb56200030e600039600081816104310152610b400152600081816103f701526113580152611bb56000f3fe608060405234801561001057600080fd5b50600436106101ac5760003560e01c806306fdde03146101b1578063095ea7b3146101cf57806309bbedde146101f257806318160ddd14610204578063226cfa3d1461020c57806323b872dd1461022c57806327ce01471461023f5780633009a60914610252578063313ce5671461025b57806331e79db01461026a578063395093511461027f5780634e7b827f146102925780635183d6fd146102b55780636a4740021461030d5780636f2789ec1461031557806370a082311461031e578063715018a61461033157806385a6b3ae146103395780638da5cb5b1461034257806391b89fba1461036257806395d89b4114610375578063a457c2d71461037d578063a5244b3414610390578063a8b9d240146103a3578063a9059cbb146103b6578063aafd847a146103c9578063ae9ca1c4146103f2578063bc4c4b3714610419578063be10b6141461042c578063dd62ed3e14610453578063e30443bc1461048c578063e7841ec01461049f578063e98030c7146104a7578063f2fde38b146104ba578063fbcbc0f1146104cd578063ffb2c479146104e0575b600080fd5b6101b961050e565b6040516101c69190611856565b60405180910390f35b6101e26101dd3660046118b9565b6105a0565b60405190151581526020016101c6565b600a545b6040519081526020016101c6565b6002546101f6565b6101f661021a3660046118e5565b60106020526000908152604090205481565b6101e261023a366004611902565b6105b7565b6101f661024d3660046118e5565b610663565b6101f6600e5481565b604051601281526020016101c6565b61027d6102783660046118e5565b6106bc565b005b6101e261028d3660046118b9565b610781565b6101e26102a03660046118e5565b600f6020526000908152604090205460ff1681565b6102c86102c3366004611943565b6107bd565b604080516001600160a01b0390991689526020890197909752958701949094526060860192909252608085015260a084015260c083015260e0820152610100016101c6565b61027d600080fd5b6101f660115481565b6101f661032c3660046118e5565b61082e565b61027d610849565b6101f660095481565b61034a610882565b6040516001600160a01b0390911681526020016101c6565b6101f66103703660046118e5565b610891565b6101b961089c565b6101e261038b3660046118b9565b6108ab565b61027d61039e366004611943565b610944565b6101f66103b13660046118e5565b610a07565b6101e26103c43660046118b9565b610a33565b6101f66103d73660046118e5565b6001600160a01b031660009081526008602052604090205490565b61034a7f000000000000000000000000000000000000000000000000000000000000000081565b6101e261042736600461196a565b610a3d565b6101f67f000000000000000000000000000000000000000000000000000000000000000081565b6101f66104613660046119a3565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61027d61049a3660046118b9565b610aef565b600e546101f6565b61027d6104b5366004611943565b610ba7565b61027d6104c83660046118e5565b610c35565b6102c86104db3660046118e5565b610cd2565b6104f36104ee366004611943565b610dbb565b604080519384526020840192909252908201526060016101c6565b60606003805461051d906119d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610549906119d1565b80156105965780601f1061056b57610100808354040283529160200191610596565b820191906000526020600020905b81548152906001019060200180831161057957829003601f168201915b5050505050905090565b60006105ad338484610ed8565b5060015b92915050565b60006105c1600080fd5b6001600160a01b03841660009081526001602090815260408083203384529091529020548281101561064b5760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b6106588533858403610ed8565b506001949350505050565b6001600160a01b038116600090815260076020526040812054600160801b906106b2906106ad906106a76106a26106998861082e565b60065490610ffc565b61100f565b9061101f565b61105d565b6105b19190611a21565b336106c5610882565b6001600160a01b0316146106eb5760405162461bcd60e51b815260040161064290611a43565b6001600160a01b0381166000908152600f602052604090205460ff161561071157600080fd5b6001600160a01b0381166000908152600f60205260408120805460ff1916600117905561073f908290611070565b61074a600a826110c9565b6040516001600160a01b038216907fa878b31040b2e6d0a9a3d3361209db3908ba62014b0dca52adbaee451d128b2590600090a250565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916105ad9185906107b8908690611a78565b610ed8565b6000806000806000806000806107d2600a5490565b89106107f7575060009650600019955085945086935083925082915081905080610821565b6000610804600a8b611204565b905061080f81610cd2565b98509850985098509850985098509850505b919395975091939597565b565b6001600160a01b031660009081526020819052604090205490565b33610852610882565b6001600160a01b0316146108785760405162461bcd60e51b815260040161064290611a43565b61082c6000611237565b6005546001600160a01b031690565b60006105b182610a07565b60606004805461051d906119d1565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561092d5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610642565b61093a3385858403610ed8565b5060019392505050565b3361094d610882565b6001600160a01b0316146109735760405162461bcd60e51b815260040161064290611a43565b600061097e60025490565b1161098857600080fd5b8015610a04576109bb61099a60025490565b6109a883600160801b610ffc565b6109b29190611a21565b60065490611289565b60065560405181815233907fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d784541165119060200160405180910390a2600954610a009082611289565b6009555b50565b6001600160a01b0381166000908152600860205260408120546105b190610a2d84610663565b90611295565b60006105ad600080fd5b600033610a48610882565b6001600160a01b031614610a6e5760405162461bcd60e51b815260040161064290611a43565b6000610a79846112a1565b90508015610ae5576001600160a01b038416600081815260106020526040908190204290555184151591907fa2c38e2d2fb7e3e1912d937fd1ca11ed6d51864dee4cfa7a7bf02becd7acf09290610ad39085815260200190565b60405180910390a360019150506105b1565b5060009392505050565b33610af8610882565b6001600160a01b031614610b1e5760405162461bcd60e51b815260040161064290611a43565b6001600160a01b0382166000908152600f602052604090205460ff16610ba3577f00000000000000000000000000000000000000000000000000000000000000008110610b8057610b6f8282611070565b610b7b600a8383611426565b610b96565b610b8b826000611070565b610b96600a836110c9565b610ba1826001610a3d565b505b5050565b33610bb0610882565b6001600160a01b031614610bd65760405162461bcd60e51b815260040161064290611a43565b610e108110158015610beb5750620151808111155b610bf457600080fd5b6011548103610c0257600080fd5b60115460405182907f474ea64804364a1e29a4487ddb63c3342a2dd826ccd8acf48825e680a0e6f20f90600090a3601155565b33610c3e610882565b6001600160a01b031614610c645760405162461bcd60e51b815260040161064290611a43565b6001600160a01b038116610cc95760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610642565b610a0481611237565b806000808080808080610ce6600a896114cf565b9650600019955060008712610d4857600e54871115610d1457600e54610d0d90889061151a565b9550610d48565b600e54600a5460009110610d29576000610d38565b600e54600a54610d3891611295565b9050610d44888261101f565b9650505b610d5188610a07565b9450610d5c88610663565b6001600160a01b038916600090815260106020526040902054909450925082610d86576000610d94565b601154610d94908490611289565b9150428211610da4576000610dae565b610dae8242611295565b9050919395975091939597565b600a5460009081908190808203610ddd575050600e5460009250829150610ed1565b600e546000805a90506000805b8984108015610df857508582105b15610ec05784610e0781611a8b565b600a5490965086109050610e1a57600094505b6000600a6000018681548110610e3257610e32611aa4565b60009182526020808320909101546001600160a01b03168083526010909152604090912054909150610e6390611557565b15610e8657610e73816001610a3d565b15610e865781610e8281611a8b565b9250505b82610e9081611a8b565b93505060005a905080851115610eb757610eb4610ead8683611295565b8790611289565b95505b9350610dea9050565b600e85905590975095509193505050505b9193909250565b6001600160a01b038316610f3a5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610642565b6001600160a01b038216610f9b5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610642565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b60006110088284611aba565b9392505050565b600081818112156105b157600080fd5b60008061102c8385611ad1565b90506000831215801561103f5750838112155b80611054575060008312801561105457508381125b61100857600080fd5b60008082121561106c57600080fd5b5090565b600061107b8361082e565b9050808211156110a35760006110918383611295565b905061109d848261157e565b50610ba1565b80821015610ba15760006110b78284611295565b90506110c384826115e2565b50505050565b6001600160a01b038116600090815260038301602052604090205460ff166110ef575050565b6001600160a01b03811660009081526003830160209081526040808320805460ff191690556001808601835281842084905560028601909252822054845490929161113991611af9565b9050600084600001828154811061115257611152611aa4565b60009182526020808320909101546001600160a01b039081168084526002890190925260408084208790559087168352822091909155855490915081908690859081106111a1576111a1611aa4565b600091825260209091200180546001600160a01b0319166001600160a01b039290921691909117905584548590806111db576111db611b0c565b600082815260209020810160001990810180546001600160a01b03191690550190555050505050565b600082600001828154811061121b5761121b611aa4565b6000918252602090912001546001600160a01b03169392505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60006110088284611a78565b60006110088284611af9565b6000806112ad83610a07565b9050801561141d576001600160a01b0383166000908152600860205260409020546112d89082611289565b6001600160a01b038416600081815260086020526040908190209290925590517fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d906113279084815260200190565b60405180910390a260405163a9059cbb60e01b81526001600160a01b038481166004830152602482018390526000917f00000000000000000000000000000000000000000000000000000000000000009091169063a9059cbb906044016020604051808303816000875af11580156113a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113c79190611b22565b905080611416576001600160a01b0384166000908152600860205260409020546113f19083611295565b6001600160a01b03909416600090815260086020526040812094909455509192915050565b5092915050565b50600092915050565b6001600160a01b038216600090815260038401602052604090205460ff161561146b576001600160a01b03821660009081526001840160205260409020819055610ba1565b6001600160a01b03821660008181526003850160209081526040808320805460ff19166001908117909155878101835281842086905587546002890184529184208290558101875586835291200180546001600160a01b0319169091179055505050565b6001600160a01b038116600090815260038301602052604081205460ff166114fa57506000196105b1565b506001600160a01b03166000908152600291909101602052604090205490565b6000806115278385611b3f565b90506000831215801561153a5750838113155b806110545750600083128015611054575083811361100857600080fd5b60004282111561156957506000919050565b6011546115764284611295565b101592915050565b6115888282611626565b6115c26115a36106a283600654610ffc90919063ffffffff16565b6001600160a01b0384166000908152600760205260409020549061151a565b6001600160a01b0390921660009081526007602052604090209190915550565b6115ec8282611707565b6115c26116076106a283600654610ffc90919063ffffffff16565b6001600160a01b0384166000908152600760205260409020549061101f565b6001600160a01b03821661167c5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610642565b61168860008383610ba1565b806002600082825461169a9190611a78565b90915550506001600160a01b038216600090815260208190526040812080548392906116c7908490611a78565b90915550506040518181526001600160a01b03831690600090600080516020611b608339815191529060200160405180910390a3610ba360008383610ba1565b6001600160a01b0382166117675760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610642565b61177382600083610ba1565b6001600160a01b038216600090815260208190526040902054818110156117e75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610642565b6001600160a01b0383166000908152602081905260408120838303905560028054849290611816908490611af9565b90915550506040518281526000906001600160a01b03851690600080516020611b608339815191529060200160405180910390a3610ba183600084610ba1565b600060208083528351808285015260005b8181101561188357858101830151858201604001528201611867565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b0381168114610a0457600080fd5b600080604083850312156118cc57600080fd5b82356118d7816118a4565b946020939093013593505050565b6000602082840312156118f757600080fd5b8135611008816118a4565b60008060006060848603121561191757600080fd5b8335611922816118a4565b92506020840135611932816118a4565b929592945050506040919091013590565b60006020828403121561195557600080fd5b5035919050565b8015158114610a0457600080fd5b6000806040838503121561197d57600080fd5b8235611988816118a4565b915060208301356119988161195c565b809150509250929050565b600080604083850312156119b657600080fd5b82356119c1816118a4565b91506020830135611998816118a4565b600181811c908216806119e557607f821691505b602082108103611a0557634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600082611a3e57634e487b7160e01b600052601260045260246000fd5b500490565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b808201808211156105b1576105b1611a0b565b600060018201611a9d57611a9d611a0b565b5060010190565b634e487b7160e01b600052603260045260246000fd5b80820281158282048414176105b1576105b1611a0b565b8082018281126000831280158216821582161715611af157611af1611a0b565b505092915050565b818103818111156105b1576105b1611a0b565b634e487b7160e01b600052603160045260246000fd5b600060208284031215611b3457600080fd5b81516110088161195c565b818103600083128015838313168383128216171561141657611416611a0b56feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa26469706673582212201391377b7fa6aed5f91ac601f33f34e7e9534dd2f9876664edf3b5b10f4fca4764736f6c63430008110033a2646970667358221220b42ba2d3d68229bd47c29f76da815e2e4c47a1fde4fdc1eb54bc254ff0c5511664736f6c63430008110033

Deployed Bytecode Sourcemap

30000:23556:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36332:133;;;;;;;;;;;;;:::i;:::-;;38716:753;;;;;;;;;;-1:-1:-1;38716:753:0;;;;;:::i;:::-;;:::i;31555:88::-;;;;;;;;;;;;31600:42;31555:88;;;;;;;;;:::i;:::-;;;;;;;;31339:82;;;;;;;;;;-1:-1:-1;31339:82:0;;;;-1:-1:-1;;;;;31339:82:0;;;16641:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;32052:52::-;;;;;;;;;;-1:-1:-1;32052:52:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;2117:14:1;;2110:22;2092:41;;2080:2;2065:18;32052:52:0;1952:187:1;18118:169:0;;;;;;;;;;-1:-1:-1;18118:169:0;;;;;:::i;:::-;;:::i;30543:41::-;;;;;;;;;;-1:-1:-1;30543:41:0;;;;-1:-1:-1;;;;;30543:41:0;;;17194:108;;;;;;;;;;-1:-1:-1;17282:12:0;;17194:108;;;2844:25:1;;;2832:2;2817:18;17194:108:0;2698:177:1;18423:492:0;;;;;;;;;;-1:-1:-1;18423:492:0;;;;;:::i;:::-;;:::i;46694:132::-;;;;;;;;;;-1:-1:-1;46694:132:0;;;;;:::i;:::-;;:::i;30512:22::-;;;;;;;;;;-1:-1:-1;30512:22:0;;;;;;;;;;;;;;;-1:-1:-1;;;30512:22:0;;;;;-1:-1:-1;;;30512:22:0;;;;;-1:-1:-1;;;30512:22:0;;;;;-1:-1:-1;;;30512:22:0;;;;;-1:-1:-1;;;30512:22:0;;;;;;;;;;4162:6:1;4195:15;;;4177:34;;4247:15;;;4242:2;4227:18;;4220:43;4299:15;;;4279:18;;;4272:43;;;;4351:15;;;4346:2;4331:18;;4324:43;4404:15;;4398:3;4383:19;;4376:44;4457:15;;4451:3;4436:19;;4429:44;4510:15;;;4504:3;4489:19;;4482:44;4139:3;4124:19;30512:22:0;3851:681:1;30788:43:0;;;;;;;;;;-1:-1:-1;30788:43:0;;;;-1:-1:-1;;;;;30788:43:0;;;30656:22;;;;;;;;;;-1:-1:-1;30656:22:0;;;;-1:-1:-1;;;30656:22:0;;;;;;17008:93;;;;;;;;;;-1:-1:-1;17008:93:0;;17091:2;4916:36:1;;4904:2;4889:18;17008:93:0;4774:184:1;41701:130:0;;;;;;;;;;-1:-1:-1;41701:130:0;;;;;:::i;:::-;;:::i;35606:619::-;;;;;;;;;;-1:-1:-1;35606:619:0;;;;;:::i;:::-;;:::i;19000:215::-;;;;;;;;;;-1:-1:-1;19000:215:0;;;;;:::i;:::-;;:::i;31446:84::-;;;;;;;;;;-1:-1:-1;31446:84:0;;;;-1:-1:-1;;;;;31446:84:0;;;30485:20;;;;;;;;;;-1:-1:-1;30485:20:0;;;;;;;;;;;;;;;-1:-1:-1;;;30485:20:0;;;;;-1:-1:-1;;;30485:20:0;;;;;-1:-1:-1;;;30485:20:0;;;;;-1:-1:-1;;;30485:20:0;;;;;-1:-1:-1;;;30485:20:0;;;;;;30591:28;;;;;;;;;;-1:-1:-1;30591:28:0;;;;-1:-1:-1;;;;;30591:28:0;;;42123:103;;;;;;;;;;;;;:::i;41453:126::-;;;;;;;;;;-1:-1:-1;41453:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;41543:28:0;41519:4;41543:28;;;:19;:28;;;;;;;;;41453:126;37897:737;;;;;;;;;;-1:-1:-1;37897:737:0;;;;;:::i;:::-;;:::i;36925:112::-;;;;;;;;;;;;;:::i;46394:151::-;;;;;;;;;;-1:-1:-1;46394:151:0;;;;;:::i;:::-;;:::i;52172:327::-;;;;;;;;;;-1:-1:-1;52172:327:0;;;;;:::i;:::-;;:::i;17387:127::-;;;;;;;;;;-1:-1:-1;17387:127:0;;;;;:::i;:::-;;:::i;14726:94::-;;;;;;;;;;;;;:::i;46974:140::-;;;;;;;;;;-1:-1:-1;46974:140:0;;;;;:::i;:::-;;:::i;30754:25::-;;;;;;;;;;;;;;;;52717:117;;;;;;;;;;-1:-1:-1;52717:117:0;;;;;:::i;:::-;;:::i;37569:248::-;;;;;;;;;;-1:-1:-1;37569:248:0;;;;;:::i;:::-;;:::i;40766:336::-;;;;;;;;;;-1:-1:-1;40766:336:0;;;;;:::i;:::-;;:::i;31753:26::-;;;;;;;;;;;;;;;;14503:87;;;;;;;;;;;;;:::i;31125:77::-;;;;;;;;;;-1:-1:-1;31125:77:0;;;;-1:-1:-1;;;;;31125:77:0;;;41947:114;;;;;;;;;;-1:-1:-1;41947:114:0;;;;;:::i;:::-;;:::i;16810:104::-;;;;;;;;;;;;;:::i;39582:230::-;;;;;;;;;;-1:-1:-1;39582:230:0;;;;;:::i;:::-;;:::i;31891:40::-;;;;;;;;;;;;;;;;19299:413;;;;;;;;;;-1:-1:-1;19299:413:0;;;;;:::i;:::-;;:::i;17585:175::-;;;;;;;;;;-1:-1:-1;17585:175:0;;;;;:::i;:::-;;:::i;30970:81::-;;;;;;;;;;-1:-1:-1;30970:81:0;;;;-1:-1:-1;;;;;30970:81:0;;;40537:119;;;;;;;;;;-1:-1:-1;40537:119:0;;;;;:::i;:::-;;:::i;32330:57::-;;;;;;;;;;-1:-1:-1;32330:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;46079:147;;;;;;;;;;-1:-1:-1;46079:147:0;;;;;:::i;:::-;;:::i;37153:299::-;;;;;;;;;;-1:-1:-1;37153:299:0;;;;;:::i;:::-;;:::i;32111:56::-;;;;;;;;;;-1:-1:-1;32111:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;42303:198;;;;;;;;;;-1:-1:-1;42303:198:0;;;;;:::i;:::-;;:::i;31224:86::-;;;;;;;;;;-1:-1:-1;31224:86:0;;;;-1:-1:-1;;;;;31224:86:0;;;17873:151;;;;;;;;;;-1:-1:-1;17873:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;17989:18:0;;;17962:7;17989:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;17873:151;31667:50;;;;;;;;;;;;;;;;41210:124;;;;;;;;;;-1:-1:-1;41210:124:0;;;;;:::i;:::-;;:::i;14828:192::-;;;;;;;;;;-1:-1:-1;14828:192:0;;;;;:::i;:::-;;:::i;30840:87::-;;;;;;;;;;-1:-1:-1;30840:87:0;;;;-1:-1:-1;;;;;30840:87:0;;;31786:24;;;;;;;;;;;;;;;;36585:226;;;;;;;;;;-1:-1:-1;36585:226:0;;;;;:::i;:::-;;:::i;36332:133::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;;;;;;;;;36389:10:::1;::::0;:15;36380:49:::1;;;::::0;-1:-1:-1;;;36380:49:0;;7930:2:1;36380:49:0::1;::::0;::::1;7912:21:1::0;7969:2;7949:18;;;7942:30;-1:-1:-1;;;7988:18:1;;;7981:50;8048:18;;36380:49:0::1;7728:344:1::0;36380:49:0::1;36440:10;:17:::0;;-1:-1:-1;;;;36440:17:0::1;-1:-1:-1::0;;;36440:17:0::1;::::0;;36332:133::o;38716:753::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;38971:8:::1;38953:7;:15;;;:26;;;;;;;;;;;;;;;;;;39004:4;38990:7;:11;;;:18;;;;;;;;;;;;;;;;;;39036:7;39019;:14;;;:24;;;;;;;;;;;;;;;;;;39069:5;39054:7;:12;;;:20;;;;;;;;;;;;;;;;;;39104:9;39085:7;:16;;;:28;;;;;;;;;;;;;;;;;;39142:8;39124:7;:15;;;:26;;;;;;;;;;;;;;;;;;39183:12;39161:7;:19;;;:34;;;;;;;;;;;;;;;;;;39334:6;:18;;;;;;;;;;;;39316:7;:15;;;;;;;;;;;;39287:7;:16;;;;;;;;;;;;39272:7;:12;;;;;;;;;;;;39255:7;:14;;;;;;;;;;;;39241:7;:11;;;;;;;;;;;;39223:7;:15;;;;;;;;;;;;:29;;;;:::i;:::-;:46;;;;:::i;:::-;:61;;;;:::i;:::-;:80;;;;:::i;:::-;:108;;;;:::i;:::-;:129;;;;:::i;:::-;39208:12;:144:::0;;-1:-1:-1;;;;39208:144:0::1;-1:-1:-1::0;;;39208:144:0::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;39456:4:::1;39441:12:::0;::::1;::::0;;::::1;:19;;39432:29;;;::::0;::::1;;38716:753:::0;;;;;;;:::o;16641:100::-;16695:13;16728:5;16721:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16641:100;:::o;18118:169::-;18201:4;18218:39;14136:10;18241:7;18250:6;18218:8;:39::i;:::-;-1:-1:-1;18275:4:0;18118:169;;;;;:::o;18423:492::-;18563:4;18580:36;18590:6;18598:9;18609:6;18580:9;:36::i;:::-;-1:-1:-1;;;;;18656:19:0;;18629:24;18656:19;;;:11;:19;;;;;;;;14136:10;18656:33;;;;;;;;18708:26;;;;18700:79;;;;-1:-1:-1;;;18700:79:0;;8969:2:1;18700:79:0;;;8951:21:1;9008:2;8988:18;;;8981:30;9047:34;9027:18;;;9020:62;-1:-1:-1;;;9098:18:1;;;9091:38;9146:19;;18700:79:0;8767:404:1;18700:79:0;18815:57;18824:6;14136:10;18865:6;18846:16;:25;18815:8;:57::i;:::-;-1:-1:-1;18903:4:0;;18423:492;-1:-1:-1;;;;18423:492:0:o;46694:132::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;46783:27:0;;;::::1;;::::0;;;:20:::1;:27;::::0;;;;:35;;-1:-1:-1;;46783:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46694:132::o;41701:130::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;41778:15:::1;::::0;:45:::1;::::0;-1:-1:-1;;;41778:45:0;;-1:-1:-1;;;;;41778:15:0;;::::1;::::0;:36:::1;::::0;:45:::1;::::0;41815:7;;41778:45:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41701:130:::0;:::o;35606:619::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;35680:39:::1;35761:8;35722:58;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;35793:68:0::1;::::0;-1:-1:-1;;;35793:68:0;;35680:100;;-1:-1:-1;;;;;;35793:39:0;::::1;::::0;::::1;::::0;:68:::1;::::0;35680:100;;35793:68:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;35872:54:0::1;::::0;-1:-1:-1;;;35872:54:0;;-1:-1:-1;;;;;35872:39:0;::::1;::::0;-1:-1:-1;35872:39:0::1;::::0;-1:-1:-1;35872:54:0::1;::::0;35920:4:::1;::::0;35872:54:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;35937:18;-1:-1:-1::0;;;;;35937:39:0::1;;35977:7;:5;:7::i;:::-;35937:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;36044:15:0::1;::::0;35996:65:::1;::::0;-1:-1:-1;;;35996:65:0;;-1:-1:-1;;;;;35996:39:0;;::::1;::::0;-1:-1:-1;35996:39:0::1;::::0;-1:-1:-1;35996:65:0::1;::::0;36044:15:::1;::::0;35996:65:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;36074:12:0::1;:23:::0;;-1:-1:-1;;;;;36074:23:0;;::::1;-1:-1:-1::0;;;;;;36074:23:0;;::::1;::::0;::::1;::::0;;;36108:15:::1;:36:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;36160:57:::1;::::0;36108:36;;-1:-1:-1;36074:23:0;;-1:-1:-1;36160:57:0::1;::::0;36074:12:::1;::::0;36160:57:::1;35669:556;35606:619:::0;:::o;19000:215::-;14136:10;19088:4;19137:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19137:34:0;;;;;;;;;;19088:4;;19105:80;;19128:7;;19137:47;;19174:10;;19137:47;:::i;:::-;19105:8;:80::i;42123:103::-;42160:15;;:58;;-1:-1:-1;;;42160:58:0;;-1:-1:-1;;;;;42160:15:0;;;;:30;;:58;;42199:10;;42160:15;;:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42123:103::o;37897:737::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;38150:8:::1;38133:6;:14;;;:25;;;;;;;;;;;;;;;;;;38182:4;38169:6;:10;;;:17;;;;;;;;;;;;;;;;;;38213:7;38197:6;:13;;;:23;;;;;;;;;;;;;;;;;;38245:5;38231:6;:11;;;:19;;;;;;;;;;;;;;;;;;38279:9;38261:6;:15;;;:27;;;;;;;;;;;;;;;;;;38316:8;38299:6;:14;;;:25;;;;;;;;;;;;;;;;;;38356:12;38335:6;:18;;;:33;;;;;;;;;;;;;;;;;;38500:6;:18;;;;;;;;;;;;38483:6;:14;;;;;;;;;;;;38455:6;:15;;;;;;;;;;;;38441:6;:11;;;;;;;;;;;;38425:6;:13;;;;;;;;;;;;38412:6;:10;;;;;;;;;;;;38395:6;:14;;;;;;;;;;;;:27;;;;:::i;:::-;:43;;;;:::i;:::-;:57;;;;:::i;:::-;:75;;;;:::i;:::-;:102;;;;:::i;:::-;:123;;;;:::i;:::-;38381:11;:137:::0;;-1:-1:-1;;;;38381:137:0::1;-1:-1:-1::0;;;38381:137:0::1;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;38621:4:::1;38607:11:::0;::::1;::::0;;::::1;:18;;38598:28;;;::::0;::::1;36925:112:::0;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;36978:51:::1;::::0;36986:10:::1;::::0;37007:21:::1;36978:51:::0;::::1;;;::::0;::::1;::::0;;;37007:21;36986:10;36978:51;::::1;;;;;;;;;;;;;::::0;::::1;;;;46394:151:::0;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;46483:22:::1;46501:3;46483:13;17282:12:::0;;;17194:108;46483:13:::1;:17:::0;::::1;:22::i;:::-;46472:6;:34;;46463:44;;;::::0;::::1;;46518:9;:18:::0;46394:151::o;52172:327::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;52299:34;;::::1;52277:57;;;::::0;::::1;;52376:9;52372:120;52390:20:::0;;::::1;52372:120;;;52427:54;52437:10;52449:9;;52459:1;52449:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;52463:7;;52471:1;52463:10;;;;;;;:::i;:::-;;;;;;;52476:4;52463:17;;;;:::i;:::-;52427:9;:54::i;:::-;52412:3:::0;::::1;::::0;::::1;:::i;:::-;;;;52372:120;;17387:127:::0;-1:-1:-1;;;;;17488:18:0;17461:7;17488:18;;;;;;;;;;;;17387:127::o;14726:94::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;14791:21:::1;14809:1;14791:9;:21::i;:::-;14726:94::o:0;46974:140::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;47067:31:0;;;::::1;;::::0;;;:24:::1;:31;::::0;;;;:39;;-1:-1:-1;;47067:39:0::1;::::0;::::1;;::::0;;;::::1;::::0;;46974:140::o;52717:117::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;52791:13:::1;::::0;52781:45:::1;::::0;-1:-1:-1;;;;;52791:13:0::1;31600:42;52818:7:::0;52781:9:::1;:45::i;37569:248::-:0;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;37686:9:::1;:16:::0;;-1:-1:-1;;;;;37686:16:0;;::::1;-1:-1:-1::0;;;;;;37686:16:0;;::::1;;::::0;;;37713:17:::1;:24:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;37748:14:::1;:26:::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;37785:13:::1;:24:::0;;;;;::::1;::::0;::::1;;::::0;;37569:248::o;40766:336::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;40878:6:::1;40866:8;:18;;:40;;;;;40900:6;40888:8;:18;;40866:40;40844:73;;;::::0;::::1;;40962:16;;40950:8;:28:::0;40928:61:::1;;;::::0;::::1;;41039:16;::::0;41005:51:::1;::::0;41029:8;;41005:51:::1;::::0;;;::::1;41067:16;:27:::0;40766:336::o;14503:87::-;14576:6;;-1:-1:-1;;;;;14576:6:0;;14503:87::o;41947:114::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;42025:17:::1;:28:::0;;-1:-1:-1;;;;;;42025:28:0::1;-1:-1:-1::0;;;;;42025:28:0;;;::::1;::::0;;;::::1;::::0;;41947:114::o;16810:104::-;16866:13;16899:7;16892:14;;;;;:::i;39582:230::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;39726:13:::1;::::0;-1:-1:-1;;;;;39726:13:0;;::::1;39718:21:::0;;::::1;::::0;39696:54:::1;;;::::0;::::1;;39763:41;39792:4;39798:5;39763:28;:41::i;:::-;39582:230:::0;;:::o;19299:413::-;14136:10;19392:4;19436:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;19436:34:0;;;;;;;;;;19489:35;;;;19481:85;;;;-1:-1:-1;;;19481:85:0;;10508:2:1;19481:85:0;;;10490:21:1;10547:2;10527:18;;;10520:30;10586:34;10566:18;;;10559:62;-1:-1:-1;;;10637:18:1;;;10630:35;10682:19;;19481:85:0;10306:401:1;19481:85:0;19602:67;14136:10;19625:7;19653:15;19634:16;:34;19602:8;:67::i;:::-;-1:-1:-1;19700:4:0;;19299:413;-1:-1:-1;;;19299:413:0:o;17585:175::-;17671:4;17688:42;14136:10;17712:9;17723:6;17688:9;:42::i;40537:119::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;40635:13:::1;:6:::0;40644:4:::1;40635:13;:::i;:::-;40614:18;:34:::0;-1:-1:-1;40537:119:0:o;46079:147::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;46163:22:::1;46181:3;46163:13;17282:12:::0;;;17194:108;46163:22:::1;46152:6;:34;;46144:43;;;::::0;::::1;;46198:11;:20:::0;46079:147::o;37153:299::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37260:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;:40;::::1;;:28;::::0;;::::1;:40;;::::0;37238:63:::1;;;::::0;::::1;;-1:-1:-1::0;;;;;37353:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;37353:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;37410:34;;2092:41:1;;;37410:34:0::1;::::0;2065:18:1;37410:34:0::1;;;;;;;37153:299:::0;;:::o;42303:198::-;42440:53;;-1:-1:-1;;;42440:53:0;;42421:7;;-1:-1:-1;;;;;42440:25:0;;;;;:53;;42474:10;;42366:31;;42440:53;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42355:146;42303:198;:::o;41210:124::-;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;41284:15:::1;::::0;:42:::1;::::0;-1:-1:-1;;;41284:42:0;;::::1;::::0;::::1;2844:25:1::0;;;-1:-1:-1;;;;;41284:15:0;;::::1;::::0;:31:::1;::::0;2817:18:1;;41284:42:0::1;2698:177:1::0;14828:192:0;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14917:22:0;::::1;14909:73;;;::::0;-1:-1:-1;;;14909:73:0;;10914:2:1;14909:73:0::1;::::0;::::1;10896:21:1::0;10953:2;10933:18;;;10926:30;10992:34;10972:18;;;10965:62;-1:-1:-1;;;11043:18:1;;;11036:36;11089:19;;14909:73:0::1;10712:402:1::0;14909:73:0::1;14993:19;15003:8;14993:9;:19::i;36585:226::-:0;14136:10;14638:7;:5;:7::i;:::-;-1:-1:-1;;;;;14638:23:0;;14630:68;;;;-1:-1:-1;;;14630:68:0;;;;;;;:::i;:::-;36720:35:::1;::::0;-1:-1:-1;;;36720:35:0;;36684:6;;36657:17:::1;::::0;-1:-1:-1;;;;;36720:20:0;::::1;::::0;::::1;::::0;:35:::1;::::0;36749:4:::1;::::0;36720:35:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36702:53;;36766:10;-1:-1:-1::0;;;;;36766:19:0::1;;36786:7;:5;:7::i;:::-;36795;36766:37;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36646:165;;36585:226:::0;:::o;12956:98::-;13014:7;13041:5;13045:1;13041;:5;:::i;:::-;13034:12;12956:98;-1:-1:-1;;;12956:98:0:o;13066:::-;13124:7;13151:5;13155:1;13151;:5;:::i;21696:380::-;-1:-1:-1;;;;;21832:19:0;;21824:68;;;;-1:-1:-1;;;21824:68:0;;12046:2:1;21824:68:0;;;12028:21:1;12085:2;12065:18;;;12058:30;12124:34;12104:18;;;12097:62;-1:-1:-1;;;12175:18:1;;;12168:34;12219:19;;21824:68:0;11844:400:1;21824:68:0;-1:-1:-1;;;;;21911:21:0;;21903:68;;;;-1:-1:-1;;;21903:68:0;;12451:2:1;21903:68:0;;;12433:21:1;12490:2;12470:18;;;12463:30;12529:34;12509:18;;;12502:62;-1:-1:-1;;;12580:18:1;;;12573:32;12622:19;;21903:68:0;12249:398:1;21903:68:0;-1:-1:-1;;;;;21984:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;22036:32;;2844:25:1;;;22036:32:0;;2817:18:1;22036:32:0;;;;;;;21696:380;;;:::o;42612:3296::-;-1:-1:-1;;;;;42744:18:0;;42736:68;;;;-1:-1:-1;;;42736:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42823:16:0;;42815:64;;;;-1:-1:-1;;;42815:64:0;;;;;;;:::i;:::-;42894:6;42904:1;42894:11;42890:93;;42922:28;42938:4;42944:2;42948:1;42922:15;:28::i;42890:93::-;-1:-1:-1;;;;;43000:25:0;;;;;;:19;:25;;;;;;;;42995:107;;43050:10;;-1:-1:-1;;;43050:10:0;;;;43041:49;;;;-1:-1:-1;;;43041:49:0;;13664:2:1;43041:49:0;;;13646:21:1;13703:2;13683:18;;;13676:30;-1:-1:-1;;;13722:18:1;;;13715:55;13787:18;;43041:49:0;13462:349:1;43041:49:0;43114:28;43145:24;43163:4;43145:9;:24::i;:::-;43221:18;;43114:55;;-1:-1:-1;43197:42:0;;;;;;;43270:33;;-1:-1:-1;43295:8:0;;-1:-1:-1;;;43295:8:0;;;;43294:9;43270:33;:82;;;;-1:-1:-1;;;;;;43321:31:0;;;;;;:25;:31;;;;;;;;43320:32;43270:82;:114;;;;;43377:7;:5;:7::i;:::-;-1:-1:-1;;;;;43369:15:0;:4;-1:-1:-1;;;;;43369:15:0;;;43270:114;:144;;;;;43407:7;:5;:7::i;:::-;-1:-1:-1;;;;;43401:13:0;:2;-1:-1:-1;;;;;43401:13:0;;;43270:144;43252:313;;;43441:8;:15;;-1:-1:-1;;;;43441:15:0;-1:-1:-1;;;43441:15:0;;;43473:36;43488:20;43473:14;:36::i;:::-;43537:8;:16;;-1:-1:-1;;;;43537:16:0;;;43252:313;43593:8;;-1:-1:-1;;;;;43703:25:0;;43577:12;43703:25;;;:19;:25;;;;;;43593:8;-1:-1:-1;;;43593:8:0;;;;;43592:9;;43703:25;;:52;;-1:-1:-1;;;;;;43732:23:0;;;;;;:19;:23;;;;;;;;43703:52;43699:100;;;-1:-1:-1;43782:5:0;43699:100;43814:7;43810:1327;;;-1:-1:-1;;;;;43903:29:0;;43838:12;43903:29;;;:25;:29;;;;;;43838:12;;43903:29;;43902:30;:63;;;;-1:-1:-1;;;;;;43937:28:0;;;;;;:24;:28;;;;;;;;43936:29;43902:63;43898:252;;;44042:9;;44032:6;44016:13;44026:2;44016:9;:13::i;:::-;:22;;;;:::i;:::-;:35;;43986:148;;;;-1:-1:-1;;;43986:148:0;;14018:2:1;43986:148:0;;;14000:21:1;14057:2;14037:18;;;14030:30;14096:34;14076:18;;;14069:62;-1:-1:-1;;;14147:18:1;;;14140:37;14194:19;;43986:148:0;13816:403:1;43986:148:0;-1:-1:-1;;;;;44186:31:0;;;;;;:25;:31;;;;;;;;:60;;;;-1:-1:-1;;;;;;44222:24:0;;;;;;:20;:24;;;;;;;;44221:25;44186:60;44182:659;;;44286:11;;44276:6;:21;;44267:60;;;;-1:-1:-1;;;44267:60:0;;14426:2:1;44267:60:0;;;14408:21:1;14465:2;14445:18;;;14438:30;-1:-1:-1;;;14484:18:1;;;14477:55;14549:18;;44267:60:0;14224:349:1;44267:60:0;44364:11;;44353:34;;44381:5;;44353:23;;:6;;-1:-1:-1;;;44364:11:0;;;;44353:10;:23::i;:34::-;44445:11;;44428:6;:11;44346:41;;-1:-1:-1;44419:38:0;;44445:11;-1:-1:-1;;;44445:11:0;;;;;;44419:21;;44346:41;;44428:11;;;;;44419:8;:21::i;:38::-;44406:51;;44182:659;;;-1:-1:-1;;;;;44519:29:0;;;;;;:25;:29;;;;;;;;:60;;;;-1:-1:-1;;;;;;44553:26:0;;;;;;:20;:26;;;;;;;;44552:27;44519:60;44515:326;;;44618:11;;44609:6;:20;44600:60;;;;-1:-1:-1;;;44600:60:0;;14780:2:1;44600:60:0;;;14762:21:1;14819:2;14799:18;;;14792:30;-1:-1:-1;;;14838:18:1;;;14831:56;14904:18;;44600:60:0;14578:350:1;44600:60:0;44697:12;;44686:35;;44715:5;;44686:24;;:6;;-1:-1:-1;;;44697:12:0;;;;44686:10;:24::i;:35::-;44779:11;;44762:6;:11;44679:42;;-1:-1:-1;44753:38:0;;44779:11;-1:-1:-1;;;44779:11:0;;;;;;44753:21;;44679:42;;44762:11;;;;;44753:8;:21::i;:38::-;44740:51;;44515:326;44861:8;;44857:269;;44899:16;:6;44910:4;44899:10;:16::i;:::-;44890:25;-1:-1:-1;44934:55:0;44950:4;44964;44971:17;44978:10;44971:4;:17;:::i;:::-;44934:15;:55::i;:::-;45012:14;;45008:103;;45046:45;45062:4;31600:42;45080:10;45046:15;:45::i;:::-;43823:1314;;43810:1327;45149:33;45165:4;45171:2;45175:6;45149:15;:33::i;:::-;45199:15;;-1:-1:-1;;;;;45199:15:0;:26;45234:4;45241:15;45234:4;45241:9;:15::i;:::-;45199:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45195:74;45283:15;;-1:-1:-1;;;;;45283:15:0;:26;45318:2;45323:13;45318:2;45323:9;:13::i;:::-;45283:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45279:70;45366:8;;-1:-1:-1;;;45366:8:0;;;;45361:540;;45405:16;;45442:15;;:28;;-1:-1:-1;;;;;;45442:28:0;;;;;2844:25:1;;;-1:-1:-1;;;;;45442:15:0;;;;:23;;2817:18:1;;45442:28:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;45442:28:0;;;;;;;;-1:-1:-1;;45442:28:0;;;;;;;;;;;;:::i;:::-;;;45438:452;;;45634:231;;;15903:25:1;;;15959:2;15944:18;;15937:34;;;15987:18;;;15980:34;;;16045:2;16030:18;;16023:34;;;45837:9:0;;45784:4;;45634:231;;15890:3:1;15875:19;45634:231:0;;;;;;;45471:410;;;45376:525;45361:540;42725:3183;;;42612:3296;;;:::o;15028:173::-;15103:6;;;-1:-1:-1;;;;;15120:17:0;;;-1:-1:-1;;;;;;15120:17:0;;;;;;;15153:40;;15103:6;;;15120:17;15103:6;;15153:40;;15084:16;;15153:40;15073:128;15028:173;:::o;39965:446::-;-1:-1:-1;;;;;40070:31:0;;;;;;:25;:31;;;;;;:40;;;:31;;;;:40;;;40048:155;;;;-1:-1:-1;;;40048:155:0;;16270:2:1;40048:155:0;;;16252:21:1;16309:2;16289:18;;;16282:30;16348:34;16328:18;;;16321:62;16419:34;16399:18;;;16392:62;-1:-1:-1;;;16470:19:1;;;16463:32;16512:19;;40048:155:0;16068:469:1;40048:155:0;-1:-1:-1;;;;;40214:31:0;;;;;;:25;:31;;;;;:39;;-1:-1:-1;;40214:39:0;;;;;;;;;;;;40266:80;;40292:15;;:42;;-1:-1:-1;;;40292:42:0;;-1:-1:-1;;;;;40292:15:0;;;;:36;;:42;;40329:4;;40292:42;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40266:80;40363:40;;;;;;-1:-1:-1;;;;;40363:40:0;;;;;;;;39965:446;;:::o;19823:733::-;-1:-1:-1;;;;;19963:20:0;;19955:70;;;;-1:-1:-1;;;19955:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20044:23:0;;20036:71;;;;-1:-1:-1;;;20036:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;20204:17:0;;20180:21;20204:17;;;;;;;;;;;20240:23;;;;20232:74;;;;-1:-1:-1;;;20232:74:0;;16744:2:1;20232:74:0;;;16726:21:1;16783:2;16763:18;;;16756:30;16822:34;16802:18;;;16795:62;-1:-1:-1;;;16873:18:1;;;16866:36;16919:19;;20232:74:0;16542:402:1;20232:74:0;-1:-1:-1;;;;;20342:17:0;;;:9;:17;;;;;;;;;;;20362:22;;;20342:42;;20406:20;;;;;;;;:30;;20378:6;;20342:9;20406:30;;20378:6;;20406:30;:::i;:::-;;;;;;;;20471:9;-1:-1:-1;;;;;20454:35:0;20463:6;-1:-1:-1;;;;;20454:35:0;;20482:6;20454:35;;;;2844:25:1;;2832:2;2817:18;;2698:177;20454:35:0;;;;;;;;20502:46;42303:198;47187:2103;47365:7;:12;47351:6;:11;47336:12;;47271:21;;47246:22;;47365:12;;;;;;;;;47351:11;;;;;;;47322:26;;-1:-1:-1;;;47336:12:0;;;;;-1:-1:-1;;;47322:11:0;;;:26;:::i;:::-;:40;;;;:::i;:::-;:55;;;;:::i;:::-;47694:7;:19;47673:6;:18;47303:74;;;;;-1:-1:-1;47388:18:0;;47409:319;;47303:74;;47409:305;;-1:-1:-1;;;47694:19:0;;;;;;47673:18;;;;;;-1:-1:-1;;;47655:15:0;;;;;;47597:14;;;;;;-1:-1:-1;;;47578:16:0;;;;;;47560:15;;;;;;-1:-1:-1;;;47546:11:0;;;;;;47533:10;;;;;;47488:1;;47456:30;;-1:-1:-1;;;47472:14:0;;;;;;;47456:13;;:30;:::i;:::-;47455:34;;;;:::i;:::-;47437:7;:15;47420:6;:14;:32;;47437:15;;;;;47420:14;:32;:::i;:::-;:69;;;;:::i;:::-;:123;;;;:::i;:::-;:137;;;;:::i;:::-;:155;;;;:::i;:::-;:174;;;;:::i;:::-;:191;;;;:::i;:::-;:250;;;;:::i;:::-;:271;;;;:::i;:::-;:293;;;;:::i;:::-;47409:6;;:305;;:10;:305::i;:319::-;47388:340;-1:-1:-1;47739:17:0;47759:19;47388:340;47759:6;:19;:::i;:::-;47739:39;;47789:28;47806:10;47789:16;:28::i;:::-;47863:7;:14;47847:6;:13;47828:15;;47879:1;;47847:30;;47863:14;-1:-1:-1;;;47863:14:0;;;;;;;47847:13;;;;;:30;:::i;:::-;47846:34;;;;:::i;:::-;47828:52;;;-1:-1:-1;47893:18:0;47914:41;:21;47940:14;47914:25;:41::i;:::-;47893:62;-1:-1:-1;47966:19:0;47988:106;48075:18;48086:7;48075:8;:18;:::i;:::-;48020:7;:15;48003:6;:14;47988:48;;48003:32;;48020:15;;;;;48003:14;:32;:::i;:::-;47988:10;;:48;;:14;:48::i;:106::-;47966:128;-1:-1:-1;48105:20:0;48128:107;48217:17;48227:7;48217:8;:17;:::i;:::-;48161:7;:16;48143:6;:15;48128:50;;48143:34;;48161:16;-1:-1:-1;;;48161:16:0;;;;;;;48143:15;;;;:34;:::i;:::-;48128:10;;:50;;:14;:50::i;:107::-;48105:130;-1:-1:-1;48246:19:0;48268:106;48355:18;48366:7;48355:8;:18;:::i;:::-;48300:7;:15;48283:6;:14;48268:48;;48283:32;;48300:15;-1:-1:-1;;;48300:15:0;;;;;;;48283:14;;;;:32;:::i;48268:106::-;48246:128;-1:-1:-1;48388:15:0;48406:64;48451:18;48462:7;48451:8;:18;:::i;:::-;48434:7;:11;;48421:10;48406:40;;48421:24;;48434:11;-1:-1:-1;;;48434:11:0;;;;;;;48421:10;;;;:24;:::i;:::-;48406:10;;:40;;:14;:40::i;:64::-;48388:82;-1:-1:-1;48481:23:0;48507:80;48568:18;48579:7;48568:8;:18;:::i;:::-;48543:7;:19;48522:6;:18;48507:56;;48522:40;;48543:19;-1:-1:-1;;;48543:19:0;;;;;;;48522:18;;;;:40;:::i;:::-;48507:10;;:56;;:14;:56::i;:80::-;48481:106;-1:-1:-1;48642:15:0;;48638:70;;48669:26;48683:11;48669:13;:26::i;:::-;48722:19;;48718:86;;48754:38;48776:15;48754:21;:38::i;:::-;48818:11;;48814:80;;48862:9;;48841:41;;-1:-1:-1;;;;;48862:9:0;48874:7;48841:12;:41::i;:::-;48908:16;;48904:96;;48958:14;;48937:51;;-1:-1:-1;;;;;48958:14:0;48975:12;48937;:51::i;:::-;49014:15;;49010:92;;49062:13;;49041:49;;-1:-1:-1;;;;;49062:13:0;49078:11;49041:12;:49::i;:::-;49118:21;:25;49114:169;;49165:106;49178:9;49259:11;49241:15;49231:7;49216:12;49189:24;49202:11;49189:10;:24;:::i;:::-;:39;;;;:::i;:::-;:49;;;;:::i;:::-;:67;;;;:::i;:::-;:81;;;;:::i;:::-;49165:12;:106::i;:::-;47235:2055;;;;;;;;;;;47187:2103;:::o;12846:98::-;12904:7;12931:5;12935:1;12931;:5;:::i;50284:589::-;50434:16;;;50448:1;50434:16;;;;;;;;50410:21;;50434:16;;;;;;;;;;-1:-1:-1;50434:16:0;50410:40;;50479:4;50461;50466:1;50461:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50461:23:0;;;:7;;;;;;;;;;:23;;;;50505:15;;:22;;;-1:-1:-1;;;50505:22:0;;;;:15;;;;;:20;;:22;;;;;50461:7;;50505:22;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50495:4;50500:1;50495:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;50495:32:0;;;:7;;;;;;;;;:32;50572:15;;50540:62;;50557:4;;50572:15;50590:11;50540:8;:62::i;:::-;50641:15;;:224;;-1:-1:-1;;;50641:224:0;;-1:-1:-1;;;;;50641:15:0;;;;:66;;:224;;50722:11;;50641:15;;50792:4;;50819;;50839:15;;50641:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;52939:614;53041:12;;53034:45;;-1:-1:-1;;;53034:45:0;;52997:34;;-1:-1:-1;;;;;53041:12:0;;53034:30;;:45;;53073:4;;53034:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;52997:82;;53092:33;53118:6;53092:25;:33::i;:::-;53167:12;;53160:45;;-1:-1:-1;;;53160:45:0;;53138:18;;53159:103;;53225:26;;-1:-1:-1;;;;;53167:12:0;;53160:30;;:45;;53199:4;;53160:45;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53159:51;;:103::i;:::-;53295:12;;53340:15;;53288:106;;-1:-1:-1;;;53288:106:0;;53138:124;;-1:-1:-1;53273:12:0;;-1:-1:-1;;;;;53295:12:0;;;;53288:29;;:106;;53340:15;;;53138:124;;53288:106;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;53273:121;;53411:7;53407:139;;;53435:15;;:54;;-1:-1:-1;;;53435:54:0;;;;;2844:25:1;;;-1:-1:-1;;;;;53435:15:0;;;;:42;;2817:18:1;;53435:54:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53509:25;53523:10;53509:25;;;;2844::1;;2832:2;2817:18;;2698:177;53509:25:0;;;;;;;;52986:567;;;52939:614;:::o;51014:468::-;51104:16;;;51118:1;51104:16;;;;;;;;51080:21;;51104:16;;;;;;;;-1:-1:-1;;51141:15:0;;:22;;;-1:-1:-1;;;51141:22:0;;;;51080:40;;-1:-1:-1;;;;;;51141:15:0;;;;:20;;-1:-1:-1;51141:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51131:4;51136:1;51131:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;51131:32:0;;;:7;;;;;;;;;:32;51184:17;;51174:7;;51184:17;;;51174:4;;51184:17;;51174:7;;;;;;:::i;:::-;-1:-1:-1;;;;;51174:27:0;;;:7;;;;;;;;;:27;51240:15;;51397:17;;51240:234;;-1:-1:-1;;;51240:234:0;;:15;;;;:37;;51299:6;;51240:234;;:15;;51378:4;;51397:17;;;;51448:15;;51240:234;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;51240:234:0;;;;;;;;;;;;:::i;49385:185::-;49467:12;49484:6;-1:-1:-1;;;;;49484:11:0;49502:6;49484:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49466:47;;;49532:7;49524:38;;;;-1:-1:-1;;;49524:38:0;;20795:2:1;49524:38:0;;;20777:21:1;20834:2;20814:18;;;20807:30;-1:-1:-1;;;20853:18:1;;;20846:49;20912:18;;49524:38:0;20593:343:1;49659:518:0;49841:15;;49809:62;;49826:4;;-1:-1:-1;;;;;49841:15:0;49859:11;49809:8;:62::i;:::-;49914:15;;:255;;-1:-1:-1;;;49914:255:0;;49986:4;49914:255;;;21282:34:1;21332:18;;;21325:34;;;49914:15:0;21375:18:1;;;21368:34;;;21418:18;;;21411:34;;;21461:19;;;21454:44;50143:15:0;21514:19:1;;;21507:35;-1:-1:-1;;;;;49914:15:0;;;;:31;;49953:9;;21216:19:1;;49914:255:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;51619:454::-;51713:16;;;51727:1;51713:16;;;;;;;;51689:21;;51713:16;;;;;;;;-1:-1:-1;;51750:15:0;;:22;;;-1:-1:-1;;;51750:22:0;;;;51689:40;;-1:-1:-1;;;;;;51750:15:0;;;;:20;;-1:-1:-1;51750:22:0;;;;;;;;;;;;;;:15;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51740:4;51745:1;51740:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;51740:32:0;;;:7;;;;;;;;;:32;51793:12;;51783:7;;51793:12;;;51783:4;;51793:12;;51783:7;;;;;;:::i;:::-;-1:-1:-1;;;;;51783:22:0;;;:7;;;;;;;;;:22;51844:15;;;:37;51903:6;51844:15;51982:4;52009;52030:24;:15;52050:3;52030:19;:24::i;:::-;51844:221;;;;;;;;;;;;;;;;;;:::i;12740:98::-;12798:7;12825:5;12829:1;12825;:5;:::i;-1:-1:-1:-;;;;;;;;:::o;14:159:1:-;81:20;;141:6;130:18;;120:29;;110:57;;163:1;160;153:12;110:57;14:159;;;:::o;178:620::-;284:6;292;300;308;316;324;332;385:3;373:9;364:7;360:23;356:33;353:53;;;402:1;399;392:12;353:53;425:28;443:9;425:28;:::i;:::-;415:38;;472:37;505:2;494:9;490:18;472:37;:::i;:::-;462:47;;528:37;561:2;550:9;546:18;528:37;:::i;:::-;518:47;;584:37;617:2;606:9;602:18;584:37;:::i;:::-;574:47;;640:38;673:3;662:9;658:19;640:38;:::i;:::-;630:48;;697:38;730:3;719:9;715:19;697:38;:::i;:::-;687:48;;754:38;787:3;776:9;772:19;754:38;:::i;:::-;744:48;;178:620;;;;;;;;;;:::o;803:203::-;-1:-1:-1;;;;;967:32:1;;;;949:51;;937:2;922:18;;803:203::o;1011:548::-;1123:4;1152:2;1181;1170:9;1163:21;1213:6;1207:13;1256:6;1251:2;1240:9;1236:18;1229:34;1281:1;1291:140;1305:6;1302:1;1299:13;1291:140;;;1400:14;;;1396:23;;1390:30;1366:17;;;1385:2;1362:26;1355:66;1320:10;;1291:140;;;1295:3;1480:1;1475:2;1466:6;1455:9;1451:22;1447:31;1440:42;1550:2;1543;1539:7;1534:2;1526:6;1522:15;1518:29;1507:9;1503:45;1499:54;1491:62;;;;1011:548;;;;:::o;1564:131::-;-1:-1:-1;;;;;1639:31:1;;1629:42;;1619:70;;1685:1;1682;1675:12;1700:247;1759:6;1812:2;1800:9;1791:7;1787:23;1783:32;1780:52;;;1828:1;1825;1818:12;1780:52;1867:9;1854:23;1886:31;1911:5;1886:31;:::i;2144:315::-;2212:6;2220;2273:2;2261:9;2252:7;2248:23;2244:32;2241:52;;;2289:1;2286;2279:12;2241:52;2328:9;2315:23;2347:31;2372:5;2347:31;:::i;:::-;2397:5;2449:2;2434:18;;;;2421:32;;-1:-1:-1;;;2144:315:1:o;2880:456::-;2957:6;2965;2973;3026:2;3014:9;3005:7;3001:23;2997:32;2994:52;;;3042:1;3039;3032:12;2994:52;3081:9;3068:23;3100:31;3125:5;3100:31;:::i;:::-;3150:5;-1:-1:-1;3207:2:1;3192:18;;3179:32;3220:33;3179:32;3220:33;:::i;:::-;2880:456;;3272:7;;-1:-1:-1;;;3326:2:1;3311:18;;;;3298:32;;2880:456::o;3341:118::-;3427:5;3420:13;3413:21;3406:5;3403:32;3393:60;;3449:1;3446;3439:12;3464:382;3529:6;3537;3590:2;3578:9;3569:7;3565:23;3561:32;3558:52;;;3606:1;3603;3596:12;3558:52;3645:9;3632:23;3664:31;3689:5;3664:31;:::i;:::-;3714:5;-1:-1:-1;3771:2:1;3756:18;;3743:32;3784:30;3743:32;3784:30;:::i;:::-;3833:7;3823:17;;;3464:382;;;;;:::o;4963:180::-;5022:6;5075:2;5063:9;5054:7;5050:23;5046:32;5043:52;;;5091:1;5088;5081:12;5043:52;-1:-1:-1;5114:23:1;;4963:180;-1:-1:-1;4963:180:1:o;5148:367::-;5211:8;5221:6;5275:3;5268:4;5260:6;5256:17;5252:27;5242:55;;5293:1;5290;5283:12;5242:55;-1:-1:-1;5316:20:1;;-1:-1:-1;;;;;5348:30:1;;5345:50;;;5391:1;5388;5381:12;5345:50;5428:4;5420:6;5416:17;5404:29;;5488:3;5481:4;5471:6;5468:1;5464:14;5456:6;5452:27;5448:38;5445:47;5442:67;;;5505:1;5502;5495:12;5442:67;5148:367;;;;;:::o;5520:773::-;5642:6;5650;5658;5666;5719:2;5707:9;5698:7;5694:23;5690:32;5687:52;;;5735:1;5732;5725:12;5687:52;5762:23;;-1:-1:-1;;;;;5834:14:1;;;5831:34;;;5861:1;5858;5851:12;5831:34;5900:70;5962:7;5953:6;5942:9;5938:22;5900:70;:::i;:::-;5989:8;;-1:-1:-1;5874:96:1;-1:-1:-1;6077:2:1;6062:18;;6049:32;;-1:-1:-1;6093:16:1;;;6090:36;;;6122:1;6119;6112:12;6090:36;;6161:72;6225:7;6214:8;6203:9;6199:24;6161:72;:::i;:::-;5520:773;;;;-1:-1:-1;6252:8:1;-1:-1:-1;;;;5520:773:1:o;6298:671::-;6384:6;6392;6400;6408;6461:3;6449:9;6440:7;6436:23;6432:33;6429:53;;;6478:1;6475;6468:12;6429:53;6517:9;6504:23;6536:31;6561:5;6536:31;:::i;:::-;6586:5;-1:-1:-1;6643:2:1;6628:18;;6615:32;6656:33;6615:32;6656:33;:::i;:::-;6708:7;-1:-1:-1;6767:2:1;6752:18;;6739:32;6780:33;6739:32;6780:33;:::i;:::-;6832:7;-1:-1:-1;6891:2:1;6876:18;;6863:32;6904:33;6863:32;6904:33;:::i;:::-;6298:671;;;;-1:-1:-1;6298:671:1;;-1:-1:-1;;6298:671:1:o;6974:388::-;7042:6;7050;7103:2;7091:9;7082:7;7078:23;7074:32;7071:52;;;7119:1;7116;7109:12;7071:52;7158:9;7145:23;7177:31;7202:5;7177:31;:::i;:::-;7227:5;-1:-1:-1;7284:2:1;7269:18;;7256:32;7297:33;7256:32;7297:33;:::i;7367:356::-;7569:2;7551:21;;;7588:18;;;7581:30;7647:34;7642:2;7627:18;;7620:62;7714:2;7699:18;;7367:356::o;8077:127::-;8138:10;8133:3;8129:20;8126:1;8119:31;8169:4;8166:1;8159:15;8193:4;8190:1;8183:15;8209:168;8276:6;8302:10;;;8314;;;8298:27;;8337:11;;;8334:37;;;8351:18;;:::i;:::-;8334:37;8209:168;;;;:::o;8382:380::-;8461:1;8457:12;;;;8504;;;8525:61;;8579:4;8571:6;8567:17;8557:27;;8525:61;8632:2;8624:6;8621:14;8601:18;8598:38;8595:161;;8678:10;8673:3;8669:20;8666:1;8659:31;8713:4;8710:1;8703:15;8741:4;8738:1;8731:15;8595:161;;8382:380;;;:::o;9176:125::-;9241:9;;;9262:10;;;9259:36;;;9275:18;;:::i;9306:300::-;-1:-1:-1;;;;;9508:32:1;;;;9490:51;;9584:14;9577:22;9572:2;9557:18;;9550:50;9478:2;9463:18;;9306:300::o;9611:245::-;9678:6;9731:2;9719:9;9710:7;9706:23;9702:32;9699:52;;;9747:1;9744;9737:12;9699:52;9779:9;9773:16;9798:28;9820:5;9798:28;:::i;9861:127::-;9922:10;9917:3;9913:20;9910:1;9903:31;9953:4;9950:1;9943:15;9977:4;9974:1;9967:15;9993:168;10066:9;;;10097;;10114:15;;;10108:22;;10094:37;10084:71;;10135:18;;:::i;10166:135::-;10205:3;10226:17;;;10223:43;;10246:18;;:::i;:::-;-1:-1:-1;10293:1:1;10282:13;;10166:135::o;11119:184::-;11189:6;11242:2;11230:9;11221:7;11217:23;11213:32;11210:52;;;11258:1;11255;11248:12;11210:52;-1:-1:-1;11281:16:1;;11119:184;-1:-1:-1;11119:184:1:o;11308:274::-;-1:-1:-1;;;;;11500:32:1;;;;11482:51;;11564:2;11549:18;;11542:34;11470:2;11455:18;;11308:274::o;11587:127::-;11648:10;11643:3;11639:20;11636:1;11629:31;11679:4;11676:1;11669:15;11703:4;11700:1;11693:15;11719:120;11759:1;11785;11775:35;;11790:18;;:::i;:::-;-1:-1:-1;11824:9:1;;11719:120::o;12652:401::-;12854:2;12836:21;;;12893:2;12873:18;;;12866:30;12932:34;12927:2;12912:18;;12905:62;-1:-1:-1;;;12998:2:1;12983:18;;12976:35;13043:3;13028:19;;12652:401::o;13058:399::-;13260:2;13242:21;;;13299:2;13279:18;;;13272:30;13338:34;13333:2;13318:18;;13311:62;-1:-1:-1;;;13404:2:1;13389:18;;13382:33;13447:3;13432:19;;13058:399::o;14933:128::-;15000:9;;;15021:11;;;15018:37;;;15035:18;;:::i;15361:306::-;15449:6;15457;15465;15518:2;15506:9;15497:7;15493:23;15489:32;15486:52;;;15534:1;15531;15524:12;15486:52;15563:9;15557:16;15547:26;;15613:2;15602:9;15598:18;15592:25;15582:35;;15657:2;15646:9;15642:18;15636:25;15626:35;;15361:306;;;;;:::o;16949:171::-;17017:6;17056:10;;;17044;;;17040:27;;17079:12;;;17076:38;;;17094:18;;:::i;17125:187::-;17164:1;17190:6;17223:2;17220:1;17216:10;17245:3;17235:37;;17252:18;;:::i;:::-;17290:10;;17286:20;;;;;17125:187;-1:-1:-1;;17125:187:1:o;17317:127::-;17378:10;17373:3;17369:20;17366:1;17359:31;17409:4;17406:1;17399:15;17433:4;17430:1;17423:15;17449:251;17519:6;17572:2;17560:9;17551:7;17547:23;17543:32;17540:52;;;17588:1;17585;17578:12;17540:52;17620:9;17614:16;17639:31;17664:5;17639:31;:::i;17705:461::-;17758:3;17796:5;17790:12;17823:6;17818:3;17811:19;17849:4;17878:2;17873:3;17869:12;17862:19;;17915:2;17908:5;17904:14;17936:1;17946:195;17960:6;17957:1;17954:13;17946:195;;;18025:13;;-1:-1:-1;;;;;18021:39:1;18009:52;;18081:12;;;;18116:15;;;;18057:1;17975:9;17946:195;;;-1:-1:-1;18157:3:1;;17705:461;-1:-1:-1;;;;;17705:461:1:o;18171:582::-;18470:6;18459:9;18452:25;18513:6;18508:2;18497:9;18493:18;18486:34;18556:3;18551:2;18540:9;18536:18;18529:31;18433:4;18577:57;18629:3;18618:9;18614:19;18606:6;18577:57;:::i;:::-;-1:-1:-1;;;;;18670:32:1;;;;18665:2;18650:18;;18643:60;-1:-1:-1;18734:3:1;18719:19;18712:35;18569:65;18171:582;-1:-1:-1;;;18171:582:1:o;18758:510::-;19029:6;19018:9;19011:25;19072:3;19067:2;19056:9;19052:18;19045:31;18992:4;19093:57;19145:3;19134:9;19130:19;19122:6;19093:57;:::i;:::-;-1:-1:-1;;;;;19186:32:1;;;;19181:2;19166:18;;19159:60;-1:-1:-1;19250:2:1;19235:18;19228:34;19085:65;18758:510;-1:-1:-1;;18758:510:1:o;19273:1105::-;19368:6;19399:2;19442;19430:9;19421:7;19417:23;19413:32;19410:52;;;19458:1;19455;19448:12;19410:52;19485:16;;-1:-1:-1;;;;;19550:14:1;;;19547:34;;;19577:1;19574;19567:12;19547:34;19615:6;19604:9;19600:22;19590:32;;19660:7;19653:4;19649:2;19645:13;19641:27;19631:55;;19682:1;19679;19672:12;19631:55;19711:2;19705:9;19733:2;19729;19726:10;19723:36;;;19739:18;;:::i;:::-;19785:2;19782:1;19778:10;19817:2;19811:9;19880:2;19876:7;19871:2;19867;19863:11;19859:25;19851:6;19847:38;19935:6;19923:10;19920:22;19915:2;19903:10;19900:18;19897:46;19894:72;;;19946:18;;:::i;:::-;19982:2;19975:22;20032:18;;;20066:15;;;;-1:-1:-1;20108:11:1;;;20104:20;;;20136:19;;;20133:39;;;20168:1;20165;20158:12;20133:39;20192:11;;;;20212:135;20228:6;20223:3;20220:15;20212:135;;;20294:10;;20282:23;;20245:12;;;;20325;;;;20212:135;;;20366:6;19273:1105;-1:-1:-1;;;;;;;;19273:1105:1:o

Swarm Source

ipfs://1391377b7fa6aed5f91ac601f33f34e7e9534dd2f9876664edf3b5b10f4fca47

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

OVERVIEW

PIXIA is an AI that can generate art, create NFT collections, staking contracts and much more!

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
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.