ETH Price: $3,419.78 (+2.04%)
Gas: 5 Gwei

Token

Raku Doge (RAKUDOGE)
 

Overview

Max Total Supply

1,000,000 RAKUDOGE

Holders

178 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
407.540769684765333835 RAKUDOGE

Value
$0.00
0x9e35260bb78440195b211921c3d256cfc2672611
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Raku Doge is Raku Coin’s Reward Eco-System token with a low supply to be used with Raku Vault for harvest or staking.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
RakuCoin

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-07-06
*/

// SPDX-License-Identifier: MIT License
pragma solidity ^0.6.12;

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

        function _msgData() internal view virtual returns (bytes memory) {
            this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
            return msg.data;
        }
    }

    interface IERC20 {
        /**
        * @dev Returns the amount of tokens in existence.
        */
        function totalSupply() external view returns (uint256);

        /**
        * @dev Returns the amount of tokens owned by `account`.
        */
        function balanceOf(address account) external view returns (uint256);

        /**
        * @dev Moves `amount` tokens from the caller's account to `recipient`.
        *
        * Returns a boolean value indicating whether the operation succeeded.
        *
        * Emits a {Transfer} event.
        */
        function transfer(address recipient, uint256 amount) external returns (bool);

        /**
        * @dev Returns the remaining number of tokens that `spender` will be
        * allowed to spend on behalf of `owner` through {transferFrom}. This is
        * zero by default.
        *
        * This value changes when {approve} or {transferFrom} are called.
        */
        function allowance(address owner, address spender) external view returns (uint256);

        /**
        * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
        *
        * Returns a boolean value indicating whether the operation succeeded.
        *
        * IMPORTANT: Beware that changing an allowance with this method brings the risk
        * that someone may use both the old and the new allowance by unfortunate
        * transaction ordering. One possible solution to mitigate this race
        * condition is to first reduce the spender's allowance to 0 and set the
        * desired value afterwards:
        * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
        *
        * Emits an {Approval} event.
        */
        function approve(address spender, uint256 amount) external returns (bool);

        /**
        * @dev Moves `amount` tokens from `sender` to `recipient` using the
        * allowance mechanism. `amount` is then deducted from the caller's
        * allowance.
        *
        * Returns a boolean value indicating whether the operation succeeded.
        *
        * Emits a {Transfer} event.
        */
        function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

        /**
        * @dev Emitted when `value` tokens are moved from one account (`from`) to
        * another (`to`).
        *
        * Note that `value` may be zero.
        */
        event Transfer(address indexed from, address indexed to, uint256 value);

        /**
        * @dev Emitted when the allowance of a `spender` for an `owner` is set by
        * a call to {approve}. `value` is the new allowance.
        */
        event Approval(address indexed owner, address indexed spender, uint256 value);
    }

    library SafeMath {
        /**
        * @dev Returns the addition of two unsigned integers, reverting on
        * overflow.
        *
        * Counterpart to Solidity's `+` operator.
        *
        * Requirements:
        *
        * - Addition cannot overflow.
        */
        function add(uint256 a, uint256 b) internal pure returns (uint256) {
            uint256 c = a + b;
            require(c >= a, "SafeMath: addition overflow");

            return c;
        }

        /**
        * @dev Returns the subtraction of two unsigned integers, reverting on
        * overflow (when the result is negative).
        *
        * Counterpart to Solidity's `-` operator.
        *
        * Requirements:
        *
        * - Subtraction cannot overflow.
        */
        function sub(uint256 a, uint256 b) internal pure returns (uint256) {
            return sub(a, b, "SafeMath: subtraction overflow");
        }

        /**
        * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
        * overflow (when the result is negative).
        *
        * Counterpart to Solidity's `-` operator.
        *
        * Requirements:
        *
        * - Subtraction cannot overflow.
        */
        function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            require(b <= a, errorMessage);
            uint256 c = a - b;

            return c;
        }

        /**
        * @dev Returns the multiplication of two unsigned integers, reverting on
        * overflow.
        *
        * Counterpart to Solidity's `*` operator.
        *
        * Requirements:
        *
        * - Multiplication cannot overflow.
        */
        function mul(uint256 a, uint256 b) internal pure returns (uint256) {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) {
                return 0;
            }

            uint256 c = a * b;
            require(c / a == b, "SafeMath: multiplication overflow");

            return c;
        }

        /**
        * @dev Returns the integer division of two unsigned integers. Reverts on
        * division by zero. The result is rounded towards zero.
        *
        * Counterpart to Solidity's `/` operator. Note: this function uses a
        * `revert` opcode (which leaves remaining gas untouched) while Solidity
        * uses an invalid opcode to revert (consuming all remaining gas).
        *
        * Requirements:
        *
        * - The divisor cannot be zero.
        */
        function div(uint256 a, uint256 b) internal pure returns (uint256) {
            return div(a, b, "SafeMath: division by zero");
        }

        /**
        * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
        * division by zero. The result is rounded towards zero.
        *
        * Counterpart to Solidity's `/` operator. Note: this function uses a
        * `revert` opcode (which leaves remaining gas untouched) while Solidity
        * uses an invalid opcode to revert (consuming all remaining gas).
        *
        * Requirements:
        *
        * - The divisor cannot be zero.
        */
        function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            require(b > 0, errorMessage);
            uint256 c = a / b;
            // assert(a == b * c + a % b); // There is no case in which this doesn't hold

            return c;
        }

        /**
        * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
        * Reverts when dividing by zero.
        *
        * Counterpart to Solidity's `%` operator. This function uses a `revert`
        * opcode (which leaves remaining gas untouched) while Solidity uses an
        * invalid opcode to revert (consuming all remaining gas).
        *
        * Requirements:
        *
        * - The divisor cannot be zero.
        */
        function mod(uint256 a, uint256 b) internal pure returns (uint256) {
            return mod(a, b, "SafeMath: modulo by zero");
        }

        /**
        * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
        * Reverts with custom message when dividing by zero.
        *
        * Counterpart to Solidity's `%` operator. This function uses a `revert`
        * opcode (which leaves remaining gas untouched) while Solidity uses an
        * invalid opcode to revert (consuming all remaining gas).
        *
        * Requirements:
        *
        * - The divisor cannot be zero.
        */
        function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
            require(b != 0, errorMessage);
            return a % b;
        }
    }

    library Address {
        /**
        * @dev Returns true if `account` is a contract.
        *
        * [IMPORTANT]
        * ====
        * It is unsafe to assume that an address for which this function returns
        * false is an externally-owned account (EOA) and not a contract.
        *
        * Among others, `isContract` will return false for the following
        * types of addresses:
        *
        *  - an externally-owned account
        *  - a contract in construction
        *  - an address where a contract will be created
        *  - an address where a contract lived, but was destroyed
        * ====
        */
        function isContract(address account) internal view returns (bool) {
            // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
            // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
            // for accounts without code, i.e. `keccak256('')`
            bytes32 codehash;
            bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
            // solhint-disable-next-line no-inline-assembly
            assembly { codehash := extcodehash(account) }
            return (codehash != accountHash && codehash != 0x0);
        }

        /**
        * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
        * `recipient`, forwarding all available gas and reverting on errors.
        *
        * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
        * of certain opcodes, possibly making contracts go over the 2300 gas limit
        * imposed by `transfer`, making them unable to receive funds via
        * `transfer`. {sendValue} removes this limitation.
        *
        * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
        *
        * IMPORTANT: because control is transferred to `recipient`, care must be
        * taken to not create reentrancy vulnerabilities. Consider using
        * {ReentrancyGuard} or the
        * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
        */
        function sendValue(address payable recipient, uint256 amount) internal {
            require(address(this).balance >= amount, "Address: insufficient balance");

            // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
            (bool success, ) = recipient.call{ value: amount }("");
            require(success, "Address: unable to send value, recipient may have reverted");
        }

        /**
        * @dev Performs a Solidity function call using a low level `call`. A
        * plain`call` is an unsafe replacement for a function call: use this
        * function instead.
        *
        * If `target` reverts with a revert reason, it is bubbled up by this
        * function (like regular Solidity function calls).
        *
        * Returns the raw returned data. To convert to the expected return value,
        * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
        *
        * Requirements:
        *
        * - `target` must be a contract.
        * - calling `target` with `data` must not revert.
        *
        * _Available since v3.1._
        */
        function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
        }

        /**
        * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
        * `errorMessage` as a fallback revert reason when `target` reverts.
        *
        * _Available since v3.1._
        */
        function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
            return _functionCallWithValue(target, data, 0, errorMessage);
        }

        /**
        * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
        * but also transferring `value` wei to `target`.
        *
        * Requirements:
        *
        * - the calling contract must have an ETH balance of at least `value`.
        * - the called Solidity function must be `payable`.
        *
        * _Available since v3.1._
        */
        function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) {
            return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
        }

        /**
        * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
        * with `errorMessage` as a fallback revert reason when `target` reverts.
        *
        * _Available since v3.1._
        */
        function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
            require(address(this).balance >= value, "Address: insufficient balance for call");
            return _functionCallWithValue(target, data, value, errorMessage);
        }

        function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
            require(isContract(target), "Address: call to non-contract");

            // solhint-disable-next-line avoid-low-level-calls
            (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
            if (success) {
                return returndata;
            } else {
                // Look for revert reason and bubble it up if present
                if (returndata.length > 0) {
                    // The easiest way to bubble the revert reason is using memory via assembly

                    // solhint-disable-next-line no-inline-assembly
                    assembly {
                        let returndata_size := mload(returndata)
                        revert(add(32, returndata), returndata_size)
                    }
                } else {
                    revert(errorMessage);
                }
            }
        }
    }

    contract Ownable is Context {
        address private _owner;
        address private _previousOwner;
        uint256 private _lockTime;

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

        /**
        * @dev Initializes the contract setting the deployer as the initial owner.
        */
        constructor () internal {
            address msgSender = _msgSender();
            _owner = msgSender;
            emit OwnershipTransferred(address(0), msgSender);
        }

        /**
        * @dev Returns the address of the current owner.
        */
        function owner() public view returns (address) {
            return _owner;
        }

        /**
        * @dev Throws if called by any account other than the owner.
        */
        modifier onlyOwner() {
            require(_owner == _msgSender(), "Ownable: caller is not the owner");
            _;
        }

        /**
        * @dev Leaves the contract without owner. It will not be possible to call
        * `onlyOwner` functions anymore. Can only be called by the current owner.
        *
        * NOTE: Renouncing ownership will leave the contract without an owner,
        * thereby removing any functionality that is only available to the owner.
        */
        function renounceOwnership() public virtual onlyOwner {
            emit OwnershipTransferred(_owner, address(0));
            _owner = address(0);
        }

        /**
        * @dev Transfers ownership of the contract to a new account (`newOwner`).
        * Can only be called by the current owner.
        */
        function transferOwnership(address newOwner) public virtual onlyOwner {
            require(newOwner != address(0), "Ownable: new owner is the zero address");
            emit OwnershipTransferred(_owner, newOwner);
            _owner = newOwner;
        }

        function geUnlockTime() public view returns (uint256) {
            return _lockTime;
        }

        //Locks the contract for owner for the amount of time provided
        function lock(uint256 time) public virtual onlyOwner {
            _previousOwner = _owner;
            _owner = address(0);
            _lockTime = now + time;
            emit OwnershipTransferred(_owner, address(0));
        }
        
        //Unlocks the contract for owner when _lockTime is exceeds
        function unlock() public virtual {
            require(_previousOwner == msg.sender, "You don't have permission to unlock");
            require(now > _lockTime , "Contract is locked until 7 days");
            emit OwnershipTransferred(_owner, _previousOwner);
            _owner = _previousOwner;
        }
    }  

    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;
    } 

    interface IUniswapV2Pair {
        event Approval(address indexed owner, address indexed spender, uint value);
        event Transfer(address indexed from, address indexed to, uint value);

        function name() external pure returns (string memory);
        function symbol() external pure returns (string memory);
        function decimals() external pure returns (uint8);
        function totalSupply() external view returns (uint);
        function balanceOf(address owner) external view returns (uint);
        function allowance(address owner, address spender) external view returns (uint);

        function approve(address spender, uint value) external returns (bool);
        function transfer(address to, uint value) external returns (bool);
        function transferFrom(address from, address to, uint value) external returns (bool);

        function DOMAIN_SEPARATOR() external view returns (bytes32);
        function PERMIT_TYPEHASH() external pure returns (bytes32);
        function nonces(address owner) external view returns (uint);

        function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;

        event Mint(address indexed sender, uint amount0, uint amount1);
        event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
        event Swap(
            address indexed sender,
            uint amount0In,
            uint amount1In,
            uint amount0Out,
            uint amount1Out,
            address indexed to
        );
        event Sync(uint112 reserve0, uint112 reserve1);

        function MINIMUM_LIQUIDITY() external pure returns (uint);
        function factory() external view returns (address);
        function token0() external view returns (address);
        function token1() external view returns (address);
        function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
        function price0CumulativeLast() external view returns (uint);
        function price1CumulativeLast() external view returns (uint);
        function kLast() external view returns (uint);

        function mint(address to) external returns (uint liquidity);
        function burn(address to) external returns (uint amount0, uint amount1);
        function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
        function skim(address to) external;
        function sync() external;

        function initialize(address, address) external;
    }

    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;
    }

    // Contract implementation
    contract RakuCoin is Context, IERC20, Ownable {
        using SafeMath for uint256;
        using Address for address;

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

        mapping (address => bool) private _isExcludedFromFee;

        mapping (address => bool) private _isExcluded;
        address[] private _excluded;
        
        mapping (address => bool) private _isSniper;
        address[] private _confirmedSnipers;
    
        uint256 private constant MAX = ~uint256(0);
        uint256 private _tTotal = 1000000 * 10**18;
        uint256 private _rTotal = (MAX - (MAX % _tTotal));
        uint256 private _tFeeTotal;

        string private _name = 'Raku Doge';
        string private _symbol = 'RAKUDOGE';
        uint8 private _decimals = 18;
        
        // Tax and MarketingPool fees will start at 0 so we don't have a big impact when deploying to Uniswap
        // MarketingPool wallet address is null but the method to set the address is exposed
        uint256 private _taxFee = 0; 
        uint256 private _staketaxFee = 0; 
        uint256 private _MarketingPoolFee = 0;
        uint256 private _buytaxFee = 3; 
        uint256 private _buystaketaxFee = 4; 
        uint256 private _buyMarketingPoolFee = 3;
        uint256 private _selltaxFee = 5; 
        uint256 private _sellstaketaxFee = 7; 
        uint256 private _sellMarketingPoolFee = 3;
        
        uint256 private _previousTaxFee = _taxFee;
        uint256 private _previousMarketingPoolFee = _MarketingPoolFee;
        uint256 private _previousStakeTaxFee = _staketaxFee;

        address payable private _MarketingPoolWalletAddress;
        address payable private _StakePoolWalletAddress;
        
        IUniswapV2Router02 public immutable uniswapV2Router;
        address public immutable uniswapV2Pair;

        bool inSwap = false;
        bool public swapEnabled = false;
        bool public tradingOpen = false; //once switched on, can never be switched off.
        bool public uniswapOnly = false;
        uint256 public launchTime;

        uint256 public walletlimit = 10000 * 10**18;
        uint256 private _maxTxAmount = 5000 * 10**18;
        // We will set a minimum amount of tokens to be swaped => 500K
        uint256 private _numOfTokensToExchangeForMarketingPool = 1 * 10**18;

        event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap);
        event SwapEnabledUpdated(bool enabled);

        modifier lockTheSwap {
            inSwap = true;
            _;
            inSwap = false;
        }

        constructor (address payable MarketingPoolWalletAddress,address payable StakePoolWalletAddress) public {
            _MarketingPoolWalletAddress = MarketingPoolWalletAddress;
            _StakePoolWalletAddress = StakePoolWalletAddress;
            
            _rOwned[_msgSender()] = _rTotal;

            IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // PancakeV2 for BSC network
            // Create a uniswap pair for this new token
            uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
                .createPair(address(this), _uniswapV2Router.WETH());

            // set the rest of the contract variables
            uniswapV2Router = _uniswapV2Router;

            // Exclude owner and this contract from fee
            _isExcludedFromFee[owner()] = true;
            _isExcludedFromFee[address(this)] = true;

            emit Transfer(address(0), _msgSender(), _tTotal);
        }

        function initContract() external onlyOwner() {
    
    // List of front-runner & sniper bots from t.me/FairLaunchCalls
        _isSniper[address(0x7589319ED0fD750017159fb4E4d96C63966173C1)] = true;
        _confirmedSnipers.push(address(0x7589319ED0fD750017159fb4E4d96C63966173C1));

        _isSniper[address(0x65A67DF75CCbF57828185c7C050e34De64d859d0)] = true;
        _confirmedSnipers.push(address(0x65A67DF75CCbF57828185c7C050e34De64d859d0));

        _isSniper[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true;
        _confirmedSnipers.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce));

        _isSniper[address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce)] = true;
        _confirmedSnipers.push(address(0xE031b36b53E53a292a20c5F08fd1658CDdf74fce));

        _isSniper[address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345)] = true;
        _confirmedSnipers.push(address(0xe516bDeE55b0b4e9bAcaF6285130De15589B1345));

        _isSniper[address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b)] = true;
        _confirmedSnipers.push(address(0xa1ceC245c456dD1bd9F2815a6955fEf44Eb4191b));

        _isSniper[address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95)] = true;
        _confirmedSnipers.push(address(0xd7d3EE77D35D0a56F91542D4905b1a2b1CD7cF95));

        _isSniper[address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964)] = true;
        _confirmedSnipers.push(address(0xFe76f05dc59fEC04184fA0245AD0C3CF9a57b964));

        _isSniper[address(0xDC81a3450817A58D00f45C86d0368290088db848)] = true;
        _confirmedSnipers.push(address(0xDC81a3450817A58D00f45C86d0368290088db848));

        _isSniper[address(0x45fD07C63e5c316540F14b2002B085aEE78E3881)] = true;
        _confirmedSnipers.push(address(0x45fD07C63e5c316540F14b2002B085aEE78E3881));

        _isSniper[address(0x27F9Adb26D532a41D97e00206114e429ad58c679)] = true;
        _confirmedSnipers.push(address(0x27F9Adb26D532a41D97e00206114e429ad58c679));

        _isSniper[address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7)] = true;
        _confirmedSnipers.push(address(0x9282dc5c422FA91Ff2F6fF3a0b45B7BF97CF78E7));

        _isSniper[address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533)] = true;
        _confirmedSnipers.push(address(0xfad95B6089c53A0D1d861eabFaadd8901b0F8533));

        _isSniper[address(0x1d6E8BAC6EA3730825bde4B005ed7B2B39A2932d)] = true;
        _confirmedSnipers.push(address(0x1d6E8BAC6EA3730825bde4B005ed7B2B39A2932d));

        _isSniper[address(0x000000000000084e91743124a982076C59f10084)] = true;
        _confirmedSnipers.push(address(0x000000000000084e91743124a982076C59f10084));

        _isSniper[address(0x6dA4bEa09C3aA0761b09b19837D9105a52254303)] = true;
        _confirmedSnipers.push(address(0x6dA4bEa09C3aA0761b09b19837D9105a52254303));

        _isSniper[address(0x323b7F37d382A68B0195b873aF17CeA5B67cd595)] = true;
        _confirmedSnipers.push(address(0x323b7F37d382A68B0195b873aF17CeA5B67cd595));

        _isSniper[address(0x000000005804B22091aa9830E50459A15E7C9241)] = true;
        _confirmedSnipers.push(address(0x000000005804B22091aa9830E50459A15E7C9241));

        _isSniper[address(0xA3b0e79935815730d942A444A84d4Bd14A339553)] = true;
        _confirmedSnipers.push(address(0xA3b0e79935815730d942A444A84d4Bd14A339553));

        _isSniper[address(0xf6da21E95D74767009acCB145b96897aC3630BaD)] = true;
        _confirmedSnipers.push(address(0xf6da21E95D74767009acCB145b96897aC3630BaD));

        _isSniper[address(0x0000000000007673393729D5618DC555FD13f9aA)] = true;
        _confirmedSnipers.push(address(0x0000000000007673393729D5618DC555FD13f9aA));

        _isSniper[address(0x00000000000003441d59DdE9A90BFfb1CD3fABf1)] = true;
        _confirmedSnipers.push(address(0x00000000000003441d59DdE9A90BFfb1CD3fABf1));

        _isSniper[address(0x59903993Ae67Bf48F10832E9BE28935FEE04d6F6)] = true;
        _confirmedSnipers.push(address(0x59903993Ae67Bf48F10832E9BE28935FEE04d6F6));

        _isSniper[address(0x000000917de6037d52b1F0a306eeCD208405f7cd)] = true;
        _confirmedSnipers.push(address(0x000000917de6037d52b1F0a306eeCD208405f7cd));

        _isSniper[address(0x7100e690554B1c2FD01E8648db88bE235C1E6514)] = true;
        _confirmedSnipers.push(address(0x7100e690554B1c2FD01E8648db88bE235C1E6514));

        _isSniper[address(0x72b30cDc1583224381132D379A052A6B10725415)] = true;
        _confirmedSnipers.push(address(0x72b30cDc1583224381132D379A052A6B10725415));

        _isSniper[address(0x9eDD647D7d6Eceae6bB61D7785Ef66c5055A9bEE)] = true;
        _confirmedSnipers.push(address(0x9eDD647D7d6Eceae6bB61D7785Ef66c5055A9bEE));

        _isSniper[address(0xfe9d99ef02E905127239E85A611c29ad32c31c2F)] = true;
        _confirmedSnipers.push(address(0xfe9d99ef02E905127239E85A611c29ad32c31c2F));

        _isSniper[address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b)] = true;
        _confirmedSnipers.push(address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b));

        _isSniper[address(0xc496D84215d5018f6F53E7F6f12E45c9b5e8e8A9)] = true;
        _confirmedSnipers.push(address(0xc496D84215d5018f6F53E7F6f12E45c9b5e8e8A9));

        _isSniper[address(0x59341Bc6b4f3Ace878574b05914f43309dd678c7)] = true;
        _confirmedSnipers.push(address(0x59341Bc6b4f3Ace878574b05914f43309dd678c7));

        _isSniper[address(0xe986d48EfeE9ec1B8F66CD0b0aE8e3D18F091bDF)] = true;
        _confirmedSnipers.push(address(0xe986d48EfeE9ec1B8F66CD0b0aE8e3D18F091bDF));

        _isSniper[address(0x4aEB32e16DcaC00B092596ADc6CD4955EfdEE290)] = true;
        _confirmedSnipers.push(address(0x4aEB32e16DcaC00B092596ADc6CD4955EfdEE290));

        _isSniper[address(0x136F4B5b6A306091b280E3F251fa0E21b1280Cd5)] = true;
        _confirmedSnipers.push(address(0x136F4B5b6A306091b280E3F251fa0E21b1280Cd5));

        _isSniper[address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b)] = true;
        _confirmedSnipers.push(address(0x39608b6f20704889C51C0Ae28b1FCA8F36A5239b));

        _isSniper[address(0x5B83A351500B631cc2a20a665ee17f0dC66e3dB7)] = true;
        _confirmedSnipers.push(address(0x5B83A351500B631cc2a20a665ee17f0dC66e3dB7));

        _isSniper[address(0xbCb05a3F85d34f0194C70d5914d5C4E28f11Cc02)] = true;
        _confirmedSnipers.push(address(0xbCb05a3F85d34f0194C70d5914d5C4E28f11Cc02));

        _isSniper[address(0x22246F9BCa9921Bfa9A3f8df5baBc5Bc8ee73850)] = true;
        _confirmedSnipers.push(address(0x22246F9BCa9921Bfa9A3f8df5baBc5Bc8ee73850));

        _isSniper[address(0x42d4C197036BD9984cA652303e07dD29fA6bdB37)] = true;
        _confirmedSnipers.push(address(0x42d4C197036BD9984cA652303e07dD29fA6bdB37));

        _isSniper[address(0x00000000003b3cc22aF3aE1EAc0440BcEe416B40)] = true;
        _confirmedSnipers.push(address(0x00000000003b3cc22aF3aE1EAc0440BcEe416B40));

        _isSniper[address(0x231DC6af3C66741f6Cf618884B953DF0e83C1A2A)] = true;
        _confirmedSnipers.push(address(0x231DC6af3C66741f6Cf618884B953DF0e83C1A2A));

        _isSniper[address(0xC6bF34596f74eb22e066a878848DfB9fC1CF4C65)] = true;
        _confirmedSnipers.push(address(0xC6bF34596f74eb22e066a878848DfB9fC1CF4C65));

        _isSniper[address(0x20f6fCd6B8813c4f98c0fFbD88C87c0255040Aa3)] = true;
        _confirmedSnipers.push(address(0x20f6fCd6B8813c4f98c0fFbD88C87c0255040Aa3));

        _isSniper[address(0xD334C5392eD4863C81576422B968C6FB90EE9f79)] = true;
        _confirmedSnipers.push(address(0xD334C5392eD4863C81576422B968C6FB90EE9f79));

        _isSniper[address(0xFFFFF6E70842330948Ca47254F2bE673B1cb0dB7)] = true;
        _confirmedSnipers.push(address(0xFFFFF6E70842330948Ca47254F2bE673B1cb0dB7));

        _isSniper[address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a)] = true;
        _confirmedSnipers.push(address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a));

        _isSniper[address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a)] = true;
        _confirmedSnipers.push(address(0xA39C50bf86e15391180240938F469a7bF4fDAe9a));
        
        }

        function openTrading() external onlyOwner() {
        
        tradingOpen = true;
        launchTime = block.timestamp;
        swapEnabled = true;

        }
        
        function setWalletlimit(uint256 _walletlimit) external onlyOwner() {
            
            walletlimit = _walletlimit;
        }
        
        function addDestLimit() external onlyOwner() {
        uniswapOnly = true;
        }
        
        function removeDestLimit() external onlyOwner() {
        uniswapOnly = false;
        }
        
        function isBlackListed(address account) public view returns (bool) {
        return _isSniper[account];
        }
        
        function name() public view returns (string memory) {
            return _name;
        }

        function symbol() public view returns (string memory) {
            return _symbol;
        }

        function decimals() public view returns (uint8) {
            return _decimals;
        }

        function totalSupply() public view override returns (uint256) {
            return _tTotal;
        }

        function balanceOf(address account) public view override returns (uint256) {
            if (_isExcluded[account]) return _tOwned[account];
            return tokenFromReflection(_rOwned[account]);
        }

        function transfer(address recipient, uint256 amount) public override returns (bool) {
            _transfer(_msgSender(), recipient, amount);
            return true;
        }

        function allowance(address owner, address spender) public view override returns (uint256) {
            return _allowances[owner][spender];
        }

        function approve(address spender, uint256 amount) public override returns (bool) {
            _approve(_msgSender(), spender, amount);
            return true;
        }

        function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
            _transfer(sender, recipient, amount);
            _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
            return true;
        }

        function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
            _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue));
            return true;
        }

        function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
            _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
            return true;
        }

        function isExcluded(address account) public view returns (bool) {
            return _isExcluded[account];
        }

        function setExcludeFromFee(address account, bool excluded) external onlyOwner() {
            _isExcludedFromFee[account] = excluded;
        }

        function totalFees() public view returns (uint256) {
            return _tFeeTotal;
        }
        
        function RemoveSniper(address account) external onlyOwner() {
        require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not blacklist Uniswap router.');
        require(!_isSniper[account], "Account is already blacklisted");
        _isSniper[account] = true;
        _confirmedSnipers.push(account);
        }
        
        function amnestySniper(address account) external onlyOwner() {
        require(_isSniper[account], "Account is not blacklisted");
        for (uint256 i = 0; i < _confirmedSnipers.length; i++) {
            if (_confirmedSnipers[i] == account) {
                _confirmedSnipers[i] = _confirmedSnipers[_confirmedSnipers.length - 1];
                _isSniper[account] = false;
                _confirmedSnipers.pop();
                break;
            }
        }
    }

        function deliver(uint256 tAmount) public {
            address sender = _msgSender();
            require(!_isExcluded[sender], "Excluded addresses cannot call this function");
            (uint256 rAmount,,,,,,) = _getValues(tAmount);
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rTotal = _rTotal.sub(rAmount);
            _tFeeTotal = _tFeeTotal.add(tAmount);
        }

        function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) {
            require(tAmount <= _tTotal, "Amount must be less than supply");
            if (!deductTransferFee) {
                (uint256 rAmount,,,,,,) = _getValues(tAmount);
                return rAmount;
            } else {
                (,uint256 rTransferAmount,,,,,) = _getValues(tAmount);
                return rTransferAmount;
            }
        }

        function tokenFromReflection(uint256 rAmount) public view returns(uint256) {
            require(rAmount <= _rTotal, "Amount must be less than total reflections");
            uint256 currentRate =  _getRate();
            return rAmount.div(currentRate);
        }

        function excludeAccount(address account) external onlyOwner() {
            require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.');
            require(!_isExcluded[account], "Account is already excluded");
            if(_rOwned[account] > 0) {
                _tOwned[account] = tokenFromReflection(_rOwned[account]);
            }
            _isExcluded[account] = true;
            _excluded.push(account);
        }

        function includeAccount(address account) external onlyOwner() {
            require(_isExcluded[account], "Account is already excluded");
            for (uint256 i = 0; i < _excluded.length; i++) {
                if (_excluded[i] == account) {
                    _excluded[i] = _excluded[_excluded.length - 1];
                    _tOwned[account] = 0;
                    _isExcluded[account] = false;
                    _excluded.pop();
                    break;
                }
            }
        }

        function removeAllFee() private {
            if(_taxFee == 0 && _MarketingPoolFee == 0 && _staketaxFee == 0) return;
            
            _previousTaxFee = _taxFee;
            _previousMarketingPoolFee = _MarketingPoolFee;
            _previousStakeTaxFee = _staketaxFee;
            
            _taxFee = 0;
            _MarketingPoolFee = 0;
            _staketaxFee = 0;
        }
    
        function restoreAllFee() private {
            _taxFee = _previousTaxFee;
            _MarketingPoolFee = _previousMarketingPoolFee;
            _staketaxFee = _previousStakeTaxFee;
        }
    
        function isExcludedFromFee(address account) public view returns(bool) {
            return _isExcludedFromFee[account];
        }

        function _approve(address owner, address spender, uint256 amount) private {
            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 _transfer(address sender, address recipient, uint256 amount) private {
            if(sender != owner() && recipient != owner()) {
            require(sender != address(0), "ERC20: transfer from the zero address");
            require(recipient != address(0), "ERC20: transfer to the zero address");
            require(amount > 0, "Transfer amount must be greater than zero");

            }
            
            if(sender != owner() && recipient != owner() && recipient != uniswapV2Pair && recipient != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D) 
             && recipient != address(uniswapV2Router)) {
            require(amount + balanceOf(address(recipient)) <= walletlimit , "You have reached the limit of tokens in this wallet");
             }
            
            
            if(sender != owner() && recipient != owner())
                require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount.");
                require(!_isSniper[recipient], "You have no power here!"); 
                require(!_isSniper[msg.sender], "You have no power here!");
                
                
            if(sender != owner() && recipient != owner()) {

            if (!tradingOpen) {
                if (!(sender == address(this) || recipient == address(this)
                || sender == address(owner()) || recipient == address(owner()))) {
                    require(tradingOpen, "Trading is not enabled");
                }
            }

            if (uniswapOnly) {
                if (
                    sender != address(this) &&
                    recipient != address(this) &&
                    sender != address(uniswapV2Router) &&
                    recipient != address(uniswapV2Router)
                ) {
                    require(
                        _msgSender() == address(uniswapV2Router) ||
                        _msgSender() == uniswapV2Pair,
                        "ERR: Uniswap only"
                    );
                }
            }

            if (block.timestamp < launchTime + 5 seconds) {
                if (sender != uniswapV2Pair
                && sender != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)
                    && sender != address(uniswapV2Router)) {
                    _isSniper[sender] = true;
                    _confirmedSnipers.push(sender);
                }
            }


        }

            // is the token balance of this contract address over the min number of
            // tokens that we need to initiate a swap?
            // also, don't get caught in a circular MarketingPool event.
            // also, don't swap if sender is uniswap pair.
            
            
            uint256 contractTokenBalance = balanceOf(address(this));
            
            if(contractTokenBalance >= _maxTxAmount)
            {
                contractTokenBalance = _maxTxAmount;
            }
            
            bool overMinTokenBalance = contractTokenBalance >= _numOfTokensToExchangeForMarketingPool;
            if (!inSwap && swapEnabled && overMinTokenBalance && sender != uniswapV2Pair) {
                // We need to swap the current tokens to ETH and send to the MarketingPool wallet
                swapTokensForEth(contractTokenBalance);
                
                uint256 contractETHBalance = address(this).balance;
                if(contractETHBalance > 0) {
                    sendETHToMarketingPool(address(this).balance);
                }
            }
            
            //indicates if fee should be deducted from transfer
            bool takeFee = true;
            
            //if any account belongs to _isExcludedFromFee account then remove the fee
            if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){
                takeFee = false;
            }
            else{
            // Buy
            if(sender == uniswapV2Pair || sender == address(uniswapV2Router)){
                removeAllFee();
                _taxFee = _buytaxFee;
                _staketaxFee = _buystaketaxFee;
                _MarketingPoolFee = _buyMarketingPoolFee;
                
            }
            // Sell
            if(recipient == uniswapV2Pair || recipient == address(uniswapV2Router)){
                removeAllFee();
                _taxFee = _selltaxFee;
                _staketaxFee = _sellstaketaxFee;
                _MarketingPoolFee = _sellMarketingPoolFee;
                
            }
            
        }
        
            //transfer amount, it will take tax and MarketingPool fee
            _tokenTransfer(sender,recipient,amount,takeFee);
        
            
}

        function swapTokensForEth(uint256 tokenAmount) private lockTheSwap{
            // 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
            );
        }
        
        function sendETHToMarketingPool(uint256 amount) private {
            _MarketingPoolWalletAddress.transfer(amount);
  
       }
        
        // We are exposing these functions to be able to manual swap and send
        // in case the token is highly valued and 5M becomes too much
        function manualSwap() external onlyOwner() {
            uint256 contractBalance = balanceOf(address(this));
            swapTokensForEth(contractBalance);
        }
        
        function manualSend() external onlyOwner() {
            uint256 contractETHBalance = address(this).balance;
            sendETHToMarketingPool(contractETHBalance);
        }

        function setSwapEnabled(bool enabled) external onlyOwner(){
            swapEnabled = enabled;
        }
        
        function _tokenTransfer(address sender, address recipient, uint256 amount, bool takeFee) private {
            if(!takeFee)
                removeAllFee();


            if (_isExcluded[sender] && !_isExcluded[recipient]) {
                _transferFromExcluded(sender, recipient, amount);
            } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
                _transferToExcluded(sender, recipient, amount);
            } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
                _transferStandard(sender, recipient, amount);
            } else if (_isExcluded[sender] && _isExcluded[recipient]) {
                _transferBothExcluded(sender, recipient, amount);
            } else {
                _transferStandard(sender, recipient, amount);
            }
            
                restoreAllFee();
        }

        function _transferStandard(address sender, address recipient, uint256 tAmount) private {
            (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingPool,uint256 tStakePool) = _getValues(tAmount);
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); 
            _takeMarketingPool(tMarketingPool);
            _takeStakePool(tStakePool);  
            _reflectFee(rFee, tFee);
            emit Transfer(sender, recipient, tTransferAmount);
        }

        function _transferToExcluded(address sender, address recipient, uint256 tAmount) private {
            (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingPool,uint256 tStakePool) = _getValues(tAmount);
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);    
            _takeMarketingPool(tMarketingPool);
            _takeStakePool(tStakePool);  
            _reflectFee(rFee, tFee);
            emit Transfer(sender, recipient, tTransferAmount);
        }

        function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private {
            (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingPool,uint256 tStakePool) = _getValues(tAmount);

            _tOwned[sender] = _tOwned[sender].sub(tAmount);
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); 
            _takeMarketingPool(tMarketingPool);
            _takeStakePool(tStakePool);  
            _reflectFee(rFee, tFee);
            emit Transfer(sender, recipient, tTransferAmount);
        }

        function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private {
            (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketingPool,uint256 tStakePool) = _getValues(tAmount);
            _tOwned[sender] = _tOwned[sender].sub(tAmount);
            _rOwned[sender] = _rOwned[sender].sub(rAmount);
            _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount);
            _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount);   
            _takeMarketingPool(tMarketingPool);
            _takeStakePool(tStakePool);  
            _reflectFee(rFee, tFee);
            emit Transfer(sender, recipient, tTransferAmount);
        }

        function _takeMarketingPool(uint256 tMarketingPool) private {
            uint256 currentRate =  _getRate();
            uint256 rMarketingPool = tMarketingPool.mul(currentRate);
            _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingPool);
            if(_isExcluded[address(this)])
                _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingPool);
        }

        function _takeStakePool(uint256 tStakePool) private {
            uint256 currentRate =  _getRate();
            uint256 rStakePool = tStakePool.mul(currentRate);
            _rOwned[address(_StakePoolWalletAddress)] = _rOwned[address(_StakePoolWalletAddress)].add(rStakePool);
            if(_isExcluded[address(_StakePoolWalletAddress)])
                _tOwned[address(_StakePoolWalletAddress)] = _tOwned[address(_StakePoolWalletAddress)].add(tStakePool);
        }

        function _reflectFee(uint256 rFee, uint256 tFee) private {
            _rTotal = _rTotal.sub(rFee);
            _tFeeTotal = _tFeeTotal.add(tFee);
        }

         //to recieve ETH from uniswapV2Router when swaping
        receive() external payable {}

        function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) {
            (uint256 tTransferAmount, uint256 tFee, uint256 tMarketingPool, uint256 tStakePool) = _getTValues(tAmount, _taxFee, _MarketingPoolFee, _staketaxFee);
            
             (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getValues2(tAmount,tFee);
            
            return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketingPool, tStakePool);
        }
        
        function _getValues2(uint256 tAmount,uint256 tFee) private view returns (uint256, uint256, uint256) {
 
            uint256 currentRate =  _getRate();
            
            (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, currentRate);
            
            return (rAmount, rTransferAmount, rFee);
        }


        function _getTValues(uint256 tAmount, uint256 taxFee, uint256 MarketingPoolFee, uint256 StakePoolFee) private pure returns (uint256, uint256, uint256, uint256) {
           
            uint256 tFee = tAmount.mul(taxFee).div(100);
            uint256 tMarketingPool = tAmount.mul(MarketingPoolFee).div(100);
            uint256 tStakePoolFee = tAmount.mul(StakePoolFee).div(100);
            
            return (_addonvalues(tAmount,tMarketingPool,tStakePoolFee, tFee) , tFee, tMarketingPool, tStakePoolFee );
        }
        
        function _addonvalues(uint256 a, uint256 b, uint256 c,uint256 tFee) private pure returns (uint256){
 
        uint256 tTransferAmount = a.sub(tFee).sub(b).sub(c) ;
            
            return tTransferAmount;
        }

        function _getRValues(uint256 tAmount, uint256 tFee, uint256 currentRate) private pure returns (uint256, uint256, uint256) {
            uint256 rAmount = tAmount.mul(currentRate);
            uint256 rFee = tFee.mul(currentRate);
            uint256 rTransferAmount = rAmount.sub(rFee);
            return (rAmount, rTransferAmount, rFee);
        }

        function _getRate() private view returns(uint256) {
            (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
            return rSupply.div(tSupply);
        }

        function _getCurrentSupply() private view returns(uint256, uint256) {
            uint256 rSupply = _rTotal;
            uint256 tSupply = _tTotal;      
            for (uint256 i = 0; i < _excluded.length; i++) {
                if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal);
                rSupply = rSupply.sub(_rOwned[_excluded[i]]);
                tSupply = tSupply.sub(_tOwned[_excluded[i]]);
            }
            if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
            return (rSupply, tSupply);
        }
        
        function _getTaxFee() private view returns(uint256) {
            return _taxFee;
        }

        function _getMaxTxAmount() private view returns(uint256) {
            return _maxTxAmount;
        }

        function _getETHBalance() public view returns(uint256 balance) {
            return address(this).balance;
        }
        
        function _setTaxFee(uint256 taxFee) external onlyOwner() {
            require(taxFee >= 0 && taxFee <= 10, 'taxFee should be in 0 - 10');
            _taxFee = taxFee;
            _previousTaxFee = taxFee;
        }

        function _setbuyTaxFee(uint256 buytaxFee) external onlyOwner() {
            require(buytaxFee >= 0 && buytaxFee <= 10, 'taxFee should be in 0 - 10');
            _buytaxFee = buytaxFee;
        }
        
        function _setsellTaxFee(uint256 selltaxFee) external onlyOwner() {
            require(selltaxFee >= 0 && selltaxFee <= 10, 'taxFee should be in 0 - 10');
            _selltaxFee = selltaxFee;
        }
        
        function _setStakeFee(uint256 stakeFee) external onlyOwner() {
            require(stakeFee >= 0 && stakeFee <= 11, 'stakeFee should be in 0 - 11');
            _staketaxFee = stakeFee;
            _previousStakeTaxFee = stakeFee;
        }
        function _setbuystakeFee(uint256 buystakeFee) external onlyOwner() {
            require(buystakeFee >= 0 && buystakeFee <= 11, 'stakeFee should be in 0 - 11');
            _buystaketaxFee = buystakeFee;
        }
        function _setsellstakeFee(uint256 sellstakeFee) external onlyOwner() {
            require(sellstakeFee >= 0 && sellstakeFee <= 11, 'stakeFee should be in 0 - 11');
            _sellstaketaxFee = sellstakeFee;
        }
        
        function _setMarketingPoolFee(uint256 MarketingPoolFee) external onlyOwner() {
            require(MarketingPoolFee >= 0 && MarketingPoolFee <= 11, 'MarketingPoolFee should be in 0 - 11');
            _MarketingPoolFee = MarketingPoolFee;
            _previousMarketingPoolFee = MarketingPoolFee;
        }
        
        function _setbuyMarketingPoolFee(uint256 buyMarketingPoolFee) external onlyOwner() {
            require(buyMarketingPoolFee >= 0 && buyMarketingPoolFee <= 11, 'MarketingPoolFee should be in 0 - 11');
            _buyMarketingPoolFee = buyMarketingPoolFee;
        }
        
        function _setsellMarketingPoolFee(uint256 sellMarketingPoolFee) external onlyOwner() {
            require(sellMarketingPoolFee >= 0 && sellMarketingPoolFee <= 11, 'MarketingPoolFee should be in 0 - 11');
            _sellMarketingPoolFee = sellMarketingPoolFee;
        }
        
        function _setMarketingPoolWallet(address payable MarketingPoolWalletAddress) external onlyOwner() {
            _MarketingPoolWalletAddress = MarketingPoolWalletAddress;
        }
        
        function _setStakePoolAddress(address payable StakePoolAddress) external onlyOwner() {
            _StakePoolWalletAddress = StakePoolAddress;
        }
        
        function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() {
            _maxTxAmount = maxTxAmount;
        }
    }

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address payable","name":"MarketingPoolWalletAddress","type":"address"},{"internalType":"address payable","name":"StakePoolWalletAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":"bool","name":"enabled","type":"bool"}],"name":"SwapEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"RemoveSniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_getETHBalance","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"MarketingPoolFee","type":"uint256"}],"name":"_setMarketingPoolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"MarketingPoolWalletAddress","type":"address"}],"name":"_setMarketingPoolWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"stakeFee","type":"uint256"}],"name":"_setStakeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"StakePoolAddress","type":"address"}],"name":"_setStakePoolAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"_setTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buyMarketingPoolFee","type":"uint256"}],"name":"_setbuyMarketingPoolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buytaxFee","type":"uint256"}],"name":"_setbuyTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"buystakeFee","type":"uint256"}],"name":"_setbuystakeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellMarketingPoolFee","type":"uint256"}],"name":"_setsellMarketingPoolFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"selltaxFee","type":"uint256"}],"name":"_setsellTaxFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"sellstakeFee","type":"uint256"}],"name":"_setsellstakeFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"addDestLimit","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":"account","type":"address"}],"name":"amnestySniper","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","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":"initContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBlackListed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"launchTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeDestLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"setExcludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_walletlimit","type":"uint256"}],"name":"setWalletlimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"uniswapOnly","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"walletlimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

69d3c21bcecceda1000000600b5569085afffa6ff50bffffff19600c55610100604052600960c08190526852616b7520446f676560b81b60e09081526200004a91600e919062000452565b506040805180820190915260088082526752414b55444f474560c01b60209092019182526200007c91600f9162000452565b506010805460ff1916601290811790915560006011819055908190556013819055600360148190556004601555601681905560056017556007601855601955601a819055601b819055601c55601e805463ffffffff60a01b1916905569021e19e0c9bab240000060205569010f0cf064dd59200000602155670de0b6b3a76400006022553480156200010d57600080fd5b50604051620055b8380380620055b8833981810160405260408110156200013357600080fd5b5080516020909101516000620001486200043f565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601d80546001600160a01b038085166001600160a01b031992831617909255601e805492841692909116919091179055600c5460036000620001d36200043f565b6001600160a01b03166001600160a01b03168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200024a57600080fd5b505afa1580156200025f573d6000803e3d6000fd5b505050506040513d60208110156200027657600080fd5b5051604080516315ab88c960e31b815290516001600160a01b039283169263c9c653969230929186169163ad5c464891600480820192602092909190829003018186803b158015620002c757600080fd5b505afa158015620002dc573d6000803e3d6000fd5b505050506040513d6020811015620002f357600080fd5b5051604080516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301525160448083019260209291908290030181600087803b1580156200034657600080fd5b505af11580156200035b573d6000803e3d6000fd5b505050506040513d60208110156200037257600080fd5b50516001600160601b0319606091821b811660a0529082901b166080526001600660006200039f62000443565b6001600160a01b0316815260208082019290925260409081016000908120805494151560ff199586161790553081526006909252902080549091166001179055620003e96200043f565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600b546040518082815260200191505060405180910390a3505050620004ee565b3390565b6000546001600160a01b031690565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200049557805160ff1916838001178555620004c5565b82800160010185558215620004c5579182015b82811115620004c5578251825591602001919060010190620004a8565b50620004d3929150620004d7565b5090565b5b80821115620004d35760008155600101620004d8565b60805160601c60a05160601c615050620005686000398061157252806137a45280613bf05280613c7f5280613ddd5280613e835280613f14525080611079528061380b5280613b345280613b725280613bae5280613ce55280613ebe5280613f4f528061421352806142cb52806142f252506150506000f3fe60806040526004361061037a5760003560e01c8063790ca413116101d1578063c9567bf911610102578063e47d6060116100a0578063f815a8421161006f578063f815a84214610c3e578063f84354f114610c53578063fe76374f14610c86578063ffb54a9914610c9b57610381565b8063e47d606014610b90578063f2cc0c1814610bc3578063f2fde38b14610bf6578063f429389014610c2957610381565b8063d67fcde2116100dc578063d67fcde214610acc578063dd46706414610aff578063dd62ed3e14610b29578063e01af92c14610b6457610381565b8063c9567bf914610a51578063cba0e99614610a66578063cca7a84714610a9957610381565b8063a457c2d71161016f578063af9549e011610149578063af9549e0146109c2578063b0be31c0146109fd578063b6c5232414610a27578063ba493f6b14610a3c57610381565b8063a457c2d71461093b578063a69df4b514610974578063a9059cbb1461098957610381565b8063890dfb63116101ab578063890dfb63146108d25780638da5cb5b146108fc5780638e3b4c4e1461091157806395d89b411461092657610381565b8063790ca413146108755780638203f5fe1461088a57806383b61c8b1461089f57610381565b8063313ce567116102ab5780635342acb41161024957806363579cfc1161022357806363579cfc146107ee5780636ddd17131461081857806370a082311461082d578063715018a61461086057610381565b80635342acb4146107675780635880b8731461079a578063617d3f46146107c457610381565b80634549b039116102855780634549b039146106e157806349bd5a5e146107135780634dd480cf1461072857806351bc3c851461075257610381565b8063313ce56714610653578063395093511461067e5780633bd5d173146106b757610381565b806318160ddd1161031857806323b872dd116102f257806323b872dd146105a75780632c441520146105ea5780632d838119146106145780632f46da591461063e57610381565b806318160ddd1461053e5780631bbae6e01461055357806320da108d1461057d57610381565b80630cc10186116103545780630cc10186146104925780630e248be8146104bc57806313114a9d146104e65780631694505e1461050d57610381565b806306fdde0314610386578063095ea7b3146104105780630b2a808c1461045d57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610cb0565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d55781810151838201526020016103bd565b50505050905090810190601f1680156104025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041c57600080fd5b506104496004803603604081101561043357600080fd5b506001600160a01b038135169060200135610d46565b604080519115158252519081900360200190f35b34801561046957600080fd5b506104906004803603602081101561048057600080fd5b50356001600160a01b0316610d64565b005b34801561049e57600080fd5b50610490600480360360208110156104b557600080fd5b5035610f1c565b3480156104c857600080fd5b50610490600480360360208110156104df57600080fd5b5035610fd4565b3480156104f257600080fd5b506104fb611071565b60408051918252519081900360200190f35b34801561051957600080fd5b50610522611077565b604080516001600160a01b039092168252519081900360200190f35b34801561054a57600080fd5b506104fb61109b565b34801561055f57600080fd5b506104906004803603602081101561057657600080fd5b50356110a1565b34801561058957600080fd5b50610490600480360360208110156105a057600080fd5b50356110fe565b3480156105b357600080fd5b50610449600480360360608110156105ca57600080fd5b506001600160a01b038135811691602081013590911690604001356111a0565b3480156105f657600080fd5b506104906004803603602081101561060d57600080fd5b5035611227565b34801561062057600080fd5b506104fb6004803603602081101561063757600080fd5b50356112da565b34801561064a57600080fd5b5061049061133c565b34801561065f57600080fd5b506106686113a9565b6040805160ff9092168252519081900360200190f35b34801561068a57600080fd5b50610449600480360360408110156106a157600080fd5b506001600160a01b0381351690602001356113b2565b3480156106c357600080fd5b50610490600480360360208110156106da57600080fd5b5035611400565b3480156106ed57600080fd5b506104fb6004803603604081101561070457600080fd5b508035906020013515156114dc565b34801561071f57600080fd5b50610522611570565b34801561073457600080fd5b506104906004803603602081101561074b57600080fd5b5035611594565b34801561075e57600080fd5b50610490611647565b34801561077357600080fd5b506104496004803603602081101561078a57600080fd5b50356001600160a01b03166116b8565b3480156107a657600080fd5b50610490600480360360208110156107bd57600080fd5b50356116d6565b3480156107d057600080fd5b50610490600480360360208110156107e757600080fd5b503561178b565b3480156107fa57600080fd5b506104906004803603602081101561081157600080fd5b5035611828565b34801561082457600080fd5b506104496118d8565b34801561083957600080fd5b506104fb6004803603602081101561085057600080fd5b50356001600160a01b03166118e8565b34801561086c57600080fd5b5061049061194a565b34801561088157600080fd5b506104fb6119da565b34801561089657600080fd5b506104906119e0565b3480156108ab57600080fd5b50610490600480360360208110156108c257600080fd5b50356001600160a01b0316612821565b3480156108de57600080fd5b50610490600480360360208110156108f557600080fd5b50356129a9565b34801561090857600080fd5b50610522612a59565b34801561091d57600080fd5b506104fb612a68565b34801561093257600080fd5b5061039b612a6e565b34801561094757600080fd5b506104496004803603604081101561095e57600080fd5b506001600160a01b038135169060200135612acf565b34801561098057600080fd5b50610490612b37565b34801561099557600080fd5b50610449600480360360408110156109ac57600080fd5b506001600160a01b038135169060200135612c25565b3480156109ce57600080fd5b50610490600480360360408110156109e557600080fd5b506001600160a01b0381351690602001351515612c39565b348015610a0957600080fd5b5061049060048036036020811015610a2057600080fd5b5035612cbc565b348015610a3357600080fd5b506104fb612d19565b348015610a4857600080fd5b50610490612d1f565b348015610a5d57600080fd5b50610490612d86565b348015610a7257600080fd5b5061044960048036036020811015610a8957600080fd5b50356001600160a01b0316612e06565b348015610aa557600080fd5b5061049060048036036020811015610abc57600080fd5b50356001600160a01b0316612e24565b348015610ad857600080fd5b5061049060048036036020811015610aef57600080fd5b50356001600160a01b0316612e9e565b348015610b0b57600080fd5b5061049060048036036020811015610b2257600080fd5b5035612f18565b348015610b3557600080fd5b506104fb60048036036040811015610b4c57600080fd5b506001600160a01b0381358116916020013516612fb6565b348015610b7057600080fd5b5061049060048036036020811015610b8757600080fd5b50351515612fe1565b348015610b9c57600080fd5b5061044960048036036020811015610bb357600080fd5b50356001600160a01b0316613057565b348015610bcf57600080fd5b5061049060048036036020811015610be657600080fd5b50356001600160a01b0316613075565b348015610c0257600080fd5b5061049060048036036020811015610c1957600080fd5b50356001600160a01b0316613257565b348015610c3557600080fd5b5061049061333d565b348015610c4a57600080fd5b506104fb61339f565b348015610c5f57600080fd5b5061049060048036036020811015610c7657600080fd5b50356001600160a01b03166133a3565b348015610c9257600080fd5b50610449613539565b348015610ca757600080fd5b50610449613549565b600e8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d3c5780601f10610d1157610100808354040283529160200191610d3c565b820191906000526020600020905b815481529060010190602001808311610d1f57829003601f168201915b5050505050905090565b6000610d5a610d53613559565b848461355d565b5060015b92915050565b610d6c613559565b6000546001600160a01b03908116911614610dbc576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526009602052604090205460ff16610e29576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b600a54811015610f1857816001600160a01b0316600a8281548110610e4d57fe5b6000918252602090912001546001600160a01b03161415610f1057600a80546000198101908110610e7a57fe5b600091825260209091200154600a80546001600160a01b039092169183908110610ea057fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600990915260409020805460ff19169055600a805480610ee957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610f18565b600101610e2c565b5050565b610f24613559565b6000546001600160a01b03908116911614610f74576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600b811115610fca576040805162461bcd60e51b815260206004820152601c60248201527f7374616b654665652073686f756c6420626520696e2030202d20313100000000604482015290519081900360640190fd5b6012819055601c55565b610fdc613559565b6000546001600160a01b0390811691161461102c576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600b81111561106c5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f616024913960400191505060405180910390fd5b601955565b600d5490565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5490565b6110a9613559565b6000546001600160a01b039081169116146110f9576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b602155565b611106613559565b6000546001600160a01b03908116911614611156576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600b8111156111965760405162461bcd60e51b8152600401808060200182810382526024815260200180614f616024913960400191505060405180910390fd5b6013819055601b55565b60006111ad848484613649565b61121d846111b9613559565b61121885604051806060016040528060288152602001614e30602891396001600160a01b038a166000908152600560205260408120906111f7613559565b6001600160a01b031681526020810191909152604001600020549190613fb7565b61355d565b5060019392505050565b61122f613559565b6000546001600160a01b0390811691161461127f576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600b8111156112d5576040805162461bcd60e51b815260206004820152601c60248201527f7374616b654665652073686f756c6420626520696e2030202d20313100000000604482015290519081900360640190fd5b601555565b6000600c5482111561131d5760405162461bcd60e51b815260040180806020018281038252602a815260200180614d75602a913960400191505060405180910390fd5b600061132761404e565b90506113338382614071565b9150505b919050565b611344613559565b6000546001600160a01b03908116911614611394576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b601e805460ff60b81b1916600160b81b179055565b60105460ff1690565b6000610d5a6113bf613559565b8461121885600560006113d0613559565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906140ba565b600061140a613559565b6001600160a01b03811660009081526007602052604090205490915060ff16156114655760405162461bcd60e51b815260040180806020018281038252602c815260200180614fa7602c913960400191505060405180910390fd5b600061147083614114565b5050506001600160a01b03861660009081526003602052604090205493945061149e9392508491505061416e565b6001600160a01b038316600090815260036020526040902055600c546114c4908261416e565b600c55600d546114d490846140ba565b600d55505050565b6000600b54831115611535576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161155557600061154584614114565b50949650610d5e95505050505050565b600061156084614114565b50939650610d5e95505050505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61159c613559565b6000546001600160a01b039081169116146115ec576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600b811115611642576040805162461bcd60e51b815260206004820152601c60248201527f7374616b654665652073686f756c6420626520696e2030202d20313100000000604482015290519081900360640190fd5b601855565b61164f613559565b6000546001600160a01b0390811691161461169f576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b60006116aa306118e8565b90506116b5816141b0565b50565b6001600160a01b031660009081526006602052604090205460ff1690565b6116de613559565b6000546001600160a01b0390811691161461172e576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600a811115611781576040805162461bcd60e51b815260206004820152601a60248201527907461784665652073686f756c6420626520696e2030202d2031360341b604482015290519081900360640190fd5b6011819055601a55565b611793613559565b6000546001600160a01b039081169116146117e3576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600b8111156118235760405162461bcd60e51b8152600401808060200182810382526024815260200180614f616024913960400191505060405180910390fd5b601655565b611830613559565b6000546001600160a01b03908116911614611880576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600a8111156118d3576040805162461bcd60e51b815260206004820152601a60248201527907461784665652073686f756c6420626520696e2030202d2031360341b604482015290519081900360640190fd5b601455565b601e54600160a81b900460ff1681565b6001600160a01b03811660009081526007602052604081205460ff161561192857506001600160a01b038116600090815260046020526040902054611337565b6001600160a01b038216600090815260036020526040902054610d5e906112da565b611952613559565b6000546001600160a01b039081169116146119a2576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020614e78833981519152908390a3600080546001600160a01b0319169055565b601f5481565b6119e8613559565b6000546001600160a01b03908116911614611a38576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b60096020527fe4fb7c0c28ac682fc02b5628b59009fdf955a66c0684bd7bf46b9fda76dca868805460ff199081166001908117909255600a805480840182557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890810180546001600160a01b0319908116737589319ed0fd750017159fb4e4d96c63966173c1179091557fdadde755370fabc52d35b4080d88dae6200c230118bef9c9c0a73813794aef4e8054851686179055825480860184558201805482167365a67df75ccbf57828185c7c050e34de64d859d01790557f1f039d7054c60544da001ada2885c2098966bf59108af37aa0047e53180c227d80548516861781558354808701855583018054831673e031b36b53e53a292a20c5f08fd1658cddf74fce9081179091558154861687179091558354808701855583018054831690911790557ff4b93d2837107f43e5b3215c8cfd55bc8f0ec1fef4e888737a6685e72730fd0e80548516861790558254808601845582018054821673e516bdee55b0b4e9bacaf6285130de15589b13451790557f404b5b762e8059f6055e90a7bf5e88e1e2f628911a8da7857df40bf26352e21280548516861790558254808601845582018054821673a1cec245c456dd1bd9f2815a6955fef44eb4191b1790557fd06f72f8dd06466bcc52a7fc6bddce65222c1efb674ce288f26d72607f32c02680548516861790558254808601845582018054821673d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf951790557fb180cbdf50fc8306102fae658ae8eddf6673addd522d5a575c2b6924f832977480548516861790558254808601845582018054821673fe76f05dc59fec04184fa0245ad0c3cf9a57b9641790557fd74310044b3dfbf8c3bb19b279a8662cf43f021fe4e68d5726f62fc6b584af7980548516861790558254808601845582018054821673dc81a3450817a58d00f45c86d0368290088db8481790557f72b3a1de74eb1a0841083ea090998865c5194ff1fc7be394ec133e28cacbdd9d8054851686179055825480860184558201805482167345fd07c63e5c316540f14b2002b085aee78e38811790557f82951a08c86bbc382122443ed556bc8073b7e0bdf3bbfb811f503389aad35bfc8054851686179055825480860184558201805482167327f9adb26d532a41d97e00206114e429ad58c6791790557f3ee2bfab112ce489483443731da982ac406a17d09137224e74d494a6037142ad805485168617905582548086018455820180548216739282dc5c422fa91ff2f6ff3a0b45b7bf97cf78e71790557fb7baecc9aa863a1182bccd59d3b8aaee484658aee9400a94283dad2dbafd9d1d80548516861790558254808601845582018054821673fad95b6089c53a0d1d861eabfaadd8901b0f85331790557fac880b0698f6a24b725a531b87fe801fab0b12d27bd162739065e7572f5404d9805485168617905582548086018455820180548216731d6e8bac6ea3730825bde4b005ed7b2b39a2932d1790557f6ef6d708eb37b8bda6da62f8191bcb1b8f30d7bf24789d111afaa48e2abcfa788054851686179055825480860184558201805482166d084e91743124a982076c59f100841790557fd73d5f8f968995abf730ad6b9b8e37da64ea9c3ba0bbce58d3bab4147a285736805485168617905582548086018455820180548216736da4bea09c3aa0761b09b19837d9105a522543031790557f78985dca206f219a6b3560fdc7a11aef1d23931d984660a7cdae9bbf47c0d96580548516861790558254808601845582018054821673323b7f37d382a68b0195b873af17cea5b67cd5951790557f0cfa4edf9477e1d54a3587993034fa6573860afb2e4b0a115c4c484a9a330a428054851686179055825480860184558201805482166f5804b22091aa9830e50459a15e7c92411790557fd6b7d69e6a823375dcf433a269665ea33193c6767d33bd6b4df5811fa6e1c82c80548516861790558254808601845582018054821673a3b0e79935815730d942a444a84d4bd14a3395531790557f13992d03d159acc9a62957c120a113863deff202e489fa07518ad14e9a3c180780548516861790558254808601845582018054821673f6da21e95d74767009accb145b96897ac3630bad1790557f9531ce70ac5d2bbefb64276f65d45e190dc5cb49d659eae0ae43c2307446dc538054851686179055825480860184558201805482166d7673393729d5618dc555fd13f9aa1790557ff5ad3fffe9a691dce1e4a825d1e8152a24d541272410b219bc6d31e16fa5f9be8054851686179055825480860184558201805482166d03441d59dde9a90bffb1cd3fabf11790557f5888754549269951f658dc38abd8b5f599e7f578f09c1c082ddee052681ef5aa8054851686179055825480860184558201805482167359903993ae67bf48f10832e9be28935fee04d6f61790557f69b77005f9173f1fd98e76d50566ec8d29499be8f194d19d204baecdcc85d76280548516861790558254808601845582018054821670917de6037d52b1f0a306eecd208405f7cd1790557f4f79f1067e9d05cffa01ea21e2293206a7d7e21e1204a7a91ce5038960641699805485168617905582548086018455820180548216737100e690554b1c2fd01e8648db88be235c1e65141790557ff5949e903094d0c003182832401f2f1e7e902a7afa53a9b4fc91227edcb81c2c8054851686179055825480860184558201805482167372b30cdc1583224381132d379a052a6b107254151790557ff3e918d4ba10715278cdbb619ad598c0463cbe5d7f5f568a2fb54f232047d9a9805485168617905582548086018455820180548216739edd647d7d6eceae6bb61d7785ef66c5055a9bee1790557fab5495752a9187414227aebaa8b39a4bffdb32802987cba6aff3f20498292a7180548516861790558254808601845582018054821673fe9d99ef02e905127239e85a611c29ad32c31c2f1790557ff248d283b19d8012b3a5799c17555d9562b55bb7f8a9573294b68b31e40bc2e08054851686178155835480870185558301805483167339608b6f20704889c51c0ae28b1fca8f36a5239b9081179091557f63fa2d6ca420f9a726a126cd4ecb6c1cc9a862c11b8b23634e14766ea0a5830c80548716881790558454808801865584018054841673c496d84215d5018f6f53e7f6f12e45c9b5e8e8a91790557f942ebcb2565846ab429e313119fc37882c100e43cc02a57b5525c115ad4f72998054871688179055845480880186558401805484167359341bc6b4f3ace878574b05914f43309dd678c71790557f5af94c70cd57260eec3231b2f06ace7b65cdeb3d90a0722d811f34a9c53f613480548716881790558454808801865584018054841673e986d48efee9ec1b8f66cd0b0ae8e3d18f091bdf1790557f2418a7599ba98f17273e05153250af4e64021166f87000ebb8faf0b96cdbcc54805487168817905584548088018655840180548416734aeb32e16dcac00b092596adc6cd4955efdee2901790557f11c8caefcbc9afecd5b2153811f415fe306a1f3884466a0ddf30ba3939464b1e80548716881790558454808801865584018054841673136f4b5b6a306091b280e3f251fa0e21b1280cd51790558154861687179091558354808701855583018054831690911790557ff39ac1e13c447fb096f87169ad2be19cda4b1a700a885a7d267b0c86db6dd64e805485168617905582548086018455820180548216735b83a351500b631cc2a20a665ee17f0dc66e3db71790557f8bd97214c00f3c37f3cd2026944d2dbd2e75b6bb5519f61faad99a7979474bd180548516861790558254808601845582018054821673bcb05a3f85d34f0194c70d5914d5c4e28f11cc021790557f07e254c4ca20656c5ab177c8c6b7d011a80e9d776cea755f6a6f6ad7d92b9c5f8054851686179055825480860184558201805482167322246f9bca9921bfa9a3f8df5babc5bc8ee738501790557f2d690ff6d1abf7d1f179e3ce0a56ecfcf647046a92b4ed991499534ea5ae21118054851686179055825480860184558201805482167342d4c197036bd9984ca652303e07dd29fa6bdb371790557fbf9ee777cf4683df01da9dfd7aeab60490278463b1d516455d67d23c750f96dc8054851686179055825480860184558201805482166e3b3cc22af3ae1eac0440bcee416b401790557f013630202be18d772bff0a66bfe4ec9a35d5fa99943a49883993ea705fa07b1d80548516861790558254808601845582018054821673231dc6af3c66741f6cf618884b953df0e83c1a2a1790557f1f1795081809f7dd1c455a73f7571f61b2522f6d392ab8dd06457c3cd16c965b80548516861790558254808601845582018054821673c6bf34596f74eb22e066a878848dfb9fc1cf4c651790557fbc023c8a7355a1da47ae5ca486c9d528cf9820e9742773d0445e97092cafad9d8054851686179055825480860184558201805482167320f6fcd6b8813c4f98c0ffbd88c87c0255040aa31790557fd5ca46fef3a1ae511b6233669e4cfc94abc758850c782c0f7ea1639b3c1aceb580548516861790558254808601845582018054821673d334c5392ed4863c81576422b968c6fb90ee9f791790557f52cca0c9f573d361aac90e85de0250b4501aeeb9e7fe85dae3afaedc2f56acd480548516861790558254808601845582018054821673fffff6e70842330948ca47254f2be673b1cb0db71790557f1c6ea9d838b443ab32c91ff4918ab0ee39d0626b3f3c9dcaddfd06aa0317325780548516861781558354808701855583018054831673a39c50bf86e15391180240938f469a7bf4fdae9a90811790915581549095168617905582549485018355600092909252929092018054909216179055565b612829613559565b6000546001600160a01b03908116911614612879576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156128d55760405162461bcd60e51b8152600401808060200182810382526024815260200180614ec16024913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff1615612943576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6129b1613559565b6000546001600160a01b03908116911614612a01576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600a811115612a54576040805162461bcd60e51b815260206004820152601a60248201527907461784665652073686f756c6420626520696e2030202d2031360341b604482015290519081900360640190fd5b601755565b6000546001600160a01b031690565b60205481565b600f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d3c5780601f10610d1157610100808354040283529160200191610d3c565b6000610d5a612adc613559565b8461121885604051806060016040528060258152602001614ff66025913960056000612b06613559565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190613fb7565b6001546001600160a01b03163314612b805760405162461bcd60e51b8152600401808060200182810382526023815260200180614fd36023913960400191505060405180910390fd5b6002544211612bd6576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b039384169390911691600080516020614e7883398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610d5a612c32613559565b8484613649565b612c41613559565b6000546001600160a01b03908116911614612c91576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b612cc4613559565b6000546001600160a01b03908116911614612d14576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b602055565b60025490565b612d27613559565b6000546001600160a01b03908116911614612d77576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b601e805460ff60b81b19169055565b612d8e613559565b6000546001600160a01b03908116911614612dde576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b601e805442601f5560ff60a81b1960ff60b01b19909116600160b01b1716600160a81b179055565b6001600160a01b031660009081526007602052604090205460ff1690565b612e2c613559565b6000546001600160a01b03908116911614612e7c576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b612ea6613559565b6000546001600160a01b03908116911614612ef6576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b612f20613559565b6000546001600160a01b03908116911614612f70576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020614e78833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b612fe9613559565b6000546001600160a01b03908116911614613039576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b601e8054911515600160a81b0260ff60a81b19909216919091179055565b6001600160a01b031660009081526009602052604090205460ff1690565b61307d613559565b6000546001600160a01b039081169116146130cd576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156131295760405162461bcd60e51b8152600401808060200182810382526022815260200180614f856022913960400191505060405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff1615613197576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260036020526040902054156131f1576001600160a01b0381166000908152600360205260409020546131d7906112da565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b61325f613559565b6000546001600160a01b039081169116146132af576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b6001600160a01b0381166132f45760405162461bcd60e51b8152600401808060200182810382526026815260200180614d9f6026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020614e7883398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b613345613559565b6000546001600160a01b03908116911614613395576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b476116b5816143e7565b4790565b6133ab613559565b6000546001600160a01b039081169116146133fb576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16613468576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600854811015610f1857816001600160a01b03166008828154811061348c57fe5b6000918252602090912001546001600160a01b03161415613531576008805460001981019081106134b957fe5b600091825260209091200154600880546001600160a01b0390921691839081106134df57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610ee957fe5b60010161346b565b601e54600160b81b900460ff1681565b601e54600160b01b900460ff1681565b3390565b6001600160a01b0383166135a25760405162461bcd60e51b8152600401808060200182810382526024815260200180614f3d6024913960400191505060405180910390fd5b6001600160a01b0382166135e75760405162461bcd60e51b8152600401808060200182810382526022815260200180614dc56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b613651612a59565b6001600160a01b0316836001600160a01b03161415801561368b5750613675612a59565b6001600160a01b0316826001600160a01b031614155b15613759576001600160a01b0383166136d55760405162461bcd60e51b8152600401808060200182810382526025815260200180614ee56025913960400191505060405180910390fd5b6001600160a01b03821661371a5760405162461bcd60e51b8152600401808060200182810382526023815260200180614d526023913960400191505060405180910390fd5b600081116137595760405162461bcd60e51b8152600401808060200182810382526029815260200180614e986029913960400191505060405180910390fd5b613761612a59565b6001600160a01b0316836001600160a01b03161415801561379b5750613785612a59565b6001600160a01b0316826001600160a01b031614155b80156137d957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b801561380257506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b801561384057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b1561389057602054613851836118e8565b820111156138905760405162461bcd60e51b8152600401808060200182810382526033815260200180614f0a6033913960400191505060405180910390fd5b613898612a59565b6001600160a01b0316836001600160a01b0316141580156138d257506138bc612a59565b6001600160a01b0316826001600160a01b031614155b15613918576021548111156139185760405162461bcd60e51b8152600401808060200182810382526028815260200180614de76028913960400191505060405180910390fd5b6001600160a01b03821660009081526009602052604090205460ff1615613980576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b3360009081526009602052604090205460ff16156139df576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b6139e7612a59565b6001600160a01b0316836001600160a01b031614158015613a215750613a0b612a59565b6001600160a01b0316826001600160a01b031614155b15613d8557601e54600160b01b900460ff16613af7576001600160a01b038316301480613a5657506001600160a01b03821630145b80613a795750613a64612a59565b6001600160a01b0316836001600160a01b0316145b80613a9c5750613a87612a59565b6001600160a01b0316826001600160a01b0316145b613af757601e54600160b01b900460ff16613af7576040805162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b604482015290519081900360640190fd5b601e54600160b81b900460ff1615613c70576001600160a01b0383163014801590613b2b57506001600160a01b0382163014155b8015613b6957507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b8015613ba757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b15613c70577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613bde613559565b6001600160a01b03161480613c2b57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316613c20613559565b6001600160a01b0316145b613c70576040805162461bcd60e51b81526020600482015260116024820152704552523a20556e6973776170206f6e6c7960781b604482015290519081900360640190fd5b601f54600501421015613d85577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614158015613cdc57506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b8015613d1a57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b15613d85576001600160a01b0383166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b03191690911790555b6000613d90306118e8565b90506021548110613da057506021545b602254601e549082101590600160a01b900460ff16158015613dcb5750601e54600160a81b900460ff165b8015613dd45750805b8015613e1257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b15613e3257613e20826141b0565b478015613e3057613e30476143e7565b505b6001600160a01b03851660009081526006602052604090205460019060ff1680613e7457506001600160a01b03851660009081526006602052604090205460ff165b15613e8157506000613fa3565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b03161480613ef257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316145b15613f1257613eff614421565b6014546011556015546012556016546013555b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b03161480613f8357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316145b15613fa357613f90614421565b6017546011556018546012556019546013555b613faf8686868461446a565b505050505050565b600081848411156140465760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561400b578181015183820152602001613ff3565b50505050905090810190601f1680156140385780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600061405b6145d9565b909250905061406a8282614071565b9250505090565b60006140b383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061473c565b9392505050565b6000828201838110156140b3576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060008060006141378c6011546013546012546147a1565b9350935093509350600080600061414e8f87614801565b919f509d509b509599509397509195509350505050919395979092949650565b60006140b383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613fb7565b601e805460ff60a01b1916600160a01b179055604080516002808252606080830184529260208301908036833701905050905030816000815181106141f157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561426a57600080fd5b505afa15801561427e573d6000803e3d6000fd5b505050506040513d602081101561429457600080fd5b50518151829060019081106142a557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506142f0307f00000000000000000000000000000000000000000000000000000000000000008461355d565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561439557818101518382015260200161437d565b505050509050019650505050505050600060405180830381600087803b1580156143be57600080fd5b505af11580156143d2573d6000803e3d6000fd5b5050601e805460ff60a01b1916905550505050565b601d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610f18573d6000803e3d6000fd5b6011541580156144315750601354155b801561443d5750601254155b1561444757614468565b60118054601a5560138054601b5560128054601c5560009283905590829055555b565b8061447757614477614421565b6001600160a01b03841660009081526007602052604090205460ff1680156144b857506001600160a01b03831660009081526007602052604090205460ff16155b156144cd576144c8848484614833565b6145cb565b6001600160a01b03841660009081526007602052604090205460ff1615801561450e57506001600160a01b03831660009081526007602052604090205460ff165b1561451e576144c8848484614977565b6001600160a01b03841660009081526007602052604090205460ff1615801561456057506001600160a01b03831660009081526007602052604090205460ff16155b15614570576144c8848484614a36565b6001600160a01b03841660009081526007602052604090205460ff1680156145b057506001600160a01b03831660009081526007602052604090205460ff165b156145c0576144c8848484614a90565b6145cb848484614a36565b6145d3614b19565b50505050565b600c54600b546000918291825b60085481101561470a5782600360006008848154811061460257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180614667575081600460006008848154811061464057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561467e57600c54600b5494509450505050614738565b6146be600360006008848154811061469257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061416e565b925061470060046000600884815481106146d457fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061416e565b91506001016145e6565b50600b54600c5461471a91614071565b82101561473257600c54600b54935093505050614738565b90925090505b9091565b6000818361478b5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561400b578181015183820152602001613ff3565b50600083858161479757fe5b0495945050505050565b6000808080806147bc60646147b68b8b614b2d565b90614071565b905060006147cf60646147b68c8b614b2d565b905060006147e260646147b68d8b614b2d565b90506147f08b838386614b86565b9b929a509098509650945050505050565b60008060008061480f61404e565b90506000806000614821898986614ba9565b91985096509450505050509250925092565b600080600080600080600061484788614114565b965096509650965096509650965061488d88600460008d6001600160a01b03166001600160a01b031681526020019081526020016000205461416e90919063ffffffff16565b6001600160a01b038b166000908152600460209081526040808320939093556003905220546148bc908861416e565b6001600160a01b03808c1660009081526003602052604080822093909355908b16815220546148eb90876140ba565b6001600160a01b038a1660009081526003602052604090205561490d82614be5565b61491681614c6e565b6149208584614d2d565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061498b88614114565b96509650965096509650965096506149d187600360008d6001600160a01b03166001600160a01b031681526020019081526020016000205461416e90919063ffffffff16565b6001600160a01b03808c16600090815260036020908152604080832094909455918c16815260049091522054614a0790856140ba565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546148eb90876140ba565b6000806000806000806000614a4a88614114565b96509650965096509650965096506148bc87600360008d6001600160a01b03166001600160a01b031681526020019081526020016000205461416e90919063ffffffff16565b6000806000806000806000614aa488614114565b9650965096509650965096509650614aea88600460008d6001600160a01b03166001600160a01b031681526020019081526020016000205461416e90919063ffffffff16565b6001600160a01b038b166000908152600460209081526040808320939093556003905220546149d1908861416e565b601a54601155601b54601355601c54601255565b600082614b3c57506000610d5e565b82820282848281614b4957fe5b04146140b35760405162461bcd60e51b8152600401808060200182810382526021815260200180614e0f6021913960400191505060405180910390fd5b600080614b9f84614b9987818a8861416e565b9061416e565b9695505050505050565b6000808080614bb88786614b2d565b90506000614bc68787614b2d565b90506000614bd4838361416e565b929992985090965090945050505050565b6000614bef61404e565b90506000614bfd8383614b2d565b30600090815260036020526040902054909150614c1a90826140ba565b3060009081526003602090815260408083209390935560079052205460ff1615614c695730600090815260046020526040902054614c5890846140ba565b306000908152600460205260409020555b505050565b6000614c7861404e565b90506000614c868383614b2d565b601e546001600160a01b0316600090815260036020526040902054909150614cae90826140ba565b601e80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff1615614c6957601e546001600160a01b0316600090815260046020526040902054614d0d90846140ba565b601e546001600160a01b0316600090815260046020526040902055505050565b600c54614d3a908361416e565b600c55600d54614d4a90826140ba565b600d55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373596f752068617665207265616368656420746865206c696d6974206f6620746f6b656e7320696e20746869732077616c6c657445524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734d61726b6574696e67506f6f6c4665652073686f756c6420626520696e2030202d20313157652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122094349ce6568210dc75ebf46407b26467e18e9e679307ca682da1589b8f63941164736f6c634300060c0033000000000000000000000000e53d3d3c52bbf919e28ad0b59bfcab4822a37c70000000000000000000000000e53d3d3c52bbf919e28ad0b59bfcab4822a37c70

Deployed Bytecode

0x60806040526004361061037a5760003560e01c8063790ca413116101d1578063c9567bf911610102578063e47d6060116100a0578063f815a8421161006f578063f815a84214610c3e578063f84354f114610c53578063fe76374f14610c86578063ffb54a9914610c9b57610381565b8063e47d606014610b90578063f2cc0c1814610bc3578063f2fde38b14610bf6578063f429389014610c2957610381565b8063d67fcde2116100dc578063d67fcde214610acc578063dd46706414610aff578063dd62ed3e14610b29578063e01af92c14610b6457610381565b8063c9567bf914610a51578063cba0e99614610a66578063cca7a84714610a9957610381565b8063a457c2d71161016f578063af9549e011610149578063af9549e0146109c2578063b0be31c0146109fd578063b6c5232414610a27578063ba493f6b14610a3c57610381565b8063a457c2d71461093b578063a69df4b514610974578063a9059cbb1461098957610381565b8063890dfb63116101ab578063890dfb63146108d25780638da5cb5b146108fc5780638e3b4c4e1461091157806395d89b411461092657610381565b8063790ca413146108755780638203f5fe1461088a57806383b61c8b1461089f57610381565b8063313ce567116102ab5780635342acb41161024957806363579cfc1161022357806363579cfc146107ee5780636ddd17131461081857806370a082311461082d578063715018a61461086057610381565b80635342acb4146107675780635880b8731461079a578063617d3f46146107c457610381565b80634549b039116102855780634549b039146106e157806349bd5a5e146107135780634dd480cf1461072857806351bc3c851461075257610381565b8063313ce56714610653578063395093511461067e5780633bd5d173146106b757610381565b806318160ddd1161031857806323b872dd116102f257806323b872dd146105a75780632c441520146105ea5780632d838119146106145780632f46da591461063e57610381565b806318160ddd1461053e5780631bbae6e01461055357806320da108d1461057d57610381565b80630cc10186116103545780630cc10186146104925780630e248be8146104bc57806313114a9d146104e65780631694505e1461050d57610381565b806306fdde0314610386578063095ea7b3146104105780630b2a808c1461045d57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610cb0565b6040805160208082528351818301528351919283929083019185019080838360005b838110156103d55781810151838201526020016103bd565b50505050905090810190601f1680156104025780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561041c57600080fd5b506104496004803603604081101561043357600080fd5b506001600160a01b038135169060200135610d46565b604080519115158252519081900360200190f35b34801561046957600080fd5b506104906004803603602081101561048057600080fd5b50356001600160a01b0316610d64565b005b34801561049e57600080fd5b50610490600480360360208110156104b557600080fd5b5035610f1c565b3480156104c857600080fd5b50610490600480360360208110156104df57600080fd5b5035610fd4565b3480156104f257600080fd5b506104fb611071565b60408051918252519081900360200190f35b34801561051957600080fd5b50610522611077565b604080516001600160a01b039092168252519081900360200190f35b34801561054a57600080fd5b506104fb61109b565b34801561055f57600080fd5b506104906004803603602081101561057657600080fd5b50356110a1565b34801561058957600080fd5b50610490600480360360208110156105a057600080fd5b50356110fe565b3480156105b357600080fd5b50610449600480360360608110156105ca57600080fd5b506001600160a01b038135811691602081013590911690604001356111a0565b3480156105f657600080fd5b506104906004803603602081101561060d57600080fd5b5035611227565b34801561062057600080fd5b506104fb6004803603602081101561063757600080fd5b50356112da565b34801561064a57600080fd5b5061049061133c565b34801561065f57600080fd5b506106686113a9565b6040805160ff9092168252519081900360200190f35b34801561068a57600080fd5b50610449600480360360408110156106a157600080fd5b506001600160a01b0381351690602001356113b2565b3480156106c357600080fd5b50610490600480360360208110156106da57600080fd5b5035611400565b3480156106ed57600080fd5b506104fb6004803603604081101561070457600080fd5b508035906020013515156114dc565b34801561071f57600080fd5b50610522611570565b34801561073457600080fd5b506104906004803603602081101561074b57600080fd5b5035611594565b34801561075e57600080fd5b50610490611647565b34801561077357600080fd5b506104496004803603602081101561078a57600080fd5b50356001600160a01b03166116b8565b3480156107a657600080fd5b50610490600480360360208110156107bd57600080fd5b50356116d6565b3480156107d057600080fd5b50610490600480360360208110156107e757600080fd5b503561178b565b3480156107fa57600080fd5b506104906004803603602081101561081157600080fd5b5035611828565b34801561082457600080fd5b506104496118d8565b34801561083957600080fd5b506104fb6004803603602081101561085057600080fd5b50356001600160a01b03166118e8565b34801561086c57600080fd5b5061049061194a565b34801561088157600080fd5b506104fb6119da565b34801561089657600080fd5b506104906119e0565b3480156108ab57600080fd5b50610490600480360360208110156108c257600080fd5b50356001600160a01b0316612821565b3480156108de57600080fd5b50610490600480360360208110156108f557600080fd5b50356129a9565b34801561090857600080fd5b50610522612a59565b34801561091d57600080fd5b506104fb612a68565b34801561093257600080fd5b5061039b612a6e565b34801561094757600080fd5b506104496004803603604081101561095e57600080fd5b506001600160a01b038135169060200135612acf565b34801561098057600080fd5b50610490612b37565b34801561099557600080fd5b50610449600480360360408110156109ac57600080fd5b506001600160a01b038135169060200135612c25565b3480156109ce57600080fd5b50610490600480360360408110156109e557600080fd5b506001600160a01b0381351690602001351515612c39565b348015610a0957600080fd5b5061049060048036036020811015610a2057600080fd5b5035612cbc565b348015610a3357600080fd5b506104fb612d19565b348015610a4857600080fd5b50610490612d1f565b348015610a5d57600080fd5b50610490612d86565b348015610a7257600080fd5b5061044960048036036020811015610a8957600080fd5b50356001600160a01b0316612e06565b348015610aa557600080fd5b5061049060048036036020811015610abc57600080fd5b50356001600160a01b0316612e24565b348015610ad857600080fd5b5061049060048036036020811015610aef57600080fd5b50356001600160a01b0316612e9e565b348015610b0b57600080fd5b5061049060048036036020811015610b2257600080fd5b5035612f18565b348015610b3557600080fd5b506104fb60048036036040811015610b4c57600080fd5b506001600160a01b0381358116916020013516612fb6565b348015610b7057600080fd5b5061049060048036036020811015610b8757600080fd5b50351515612fe1565b348015610b9c57600080fd5b5061044960048036036020811015610bb357600080fd5b50356001600160a01b0316613057565b348015610bcf57600080fd5b5061049060048036036020811015610be657600080fd5b50356001600160a01b0316613075565b348015610c0257600080fd5b5061049060048036036020811015610c1957600080fd5b50356001600160a01b0316613257565b348015610c3557600080fd5b5061049061333d565b348015610c4a57600080fd5b506104fb61339f565b348015610c5f57600080fd5b5061049060048036036020811015610c7657600080fd5b50356001600160a01b03166133a3565b348015610c9257600080fd5b50610449613539565b348015610ca757600080fd5b50610449613549565b600e8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d3c5780601f10610d1157610100808354040283529160200191610d3c565b820191906000526020600020905b815481529060010190602001808311610d1f57829003601f168201915b5050505050905090565b6000610d5a610d53613559565b848461355d565b5060015b92915050565b610d6c613559565b6000546001600160a01b03908116911614610dbc576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526009602052604090205460ff16610e29576040805162461bcd60e51b815260206004820152601a60248201527f4163636f756e74206973206e6f7420626c61636b6c6973746564000000000000604482015290519081900360640190fd5b60005b600a54811015610f1857816001600160a01b0316600a8281548110610e4d57fe5b6000918252602090912001546001600160a01b03161415610f1057600a80546000198101908110610e7a57fe5b600091825260209091200154600a80546001600160a01b039092169183908110610ea057fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600990915260409020805460ff19169055600a805480610ee957fe5b600082815260209020810160001990810180546001600160a01b0319169055019055610f18565b600101610e2c565b5050565b610f24613559565b6000546001600160a01b03908116911614610f74576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600b811115610fca576040805162461bcd60e51b815260206004820152601c60248201527f7374616b654665652073686f756c6420626520696e2030202d20313100000000604482015290519081900360640190fd5b6012819055601c55565b610fdc613559565b6000546001600160a01b0390811691161461102c576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600b81111561106c5760405162461bcd60e51b8152600401808060200182810382526024815260200180614f616024913960400191505060405180910390fd5b601955565b600d5490565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600b5490565b6110a9613559565b6000546001600160a01b039081169116146110f9576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b602155565b611106613559565b6000546001600160a01b03908116911614611156576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600b8111156111965760405162461bcd60e51b8152600401808060200182810382526024815260200180614f616024913960400191505060405180910390fd5b6013819055601b55565b60006111ad848484613649565b61121d846111b9613559565b61121885604051806060016040528060288152602001614e30602891396001600160a01b038a166000908152600560205260408120906111f7613559565b6001600160a01b031681526020810191909152604001600020549190613fb7565b61355d565b5060019392505050565b61122f613559565b6000546001600160a01b0390811691161461127f576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600b8111156112d5576040805162461bcd60e51b815260206004820152601c60248201527f7374616b654665652073686f756c6420626520696e2030202d20313100000000604482015290519081900360640190fd5b601555565b6000600c5482111561131d5760405162461bcd60e51b815260040180806020018281038252602a815260200180614d75602a913960400191505060405180910390fd5b600061132761404e565b90506113338382614071565b9150505b919050565b611344613559565b6000546001600160a01b03908116911614611394576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b601e805460ff60b81b1916600160b81b179055565b60105460ff1690565b6000610d5a6113bf613559565b8461121885600560006113d0613559565b6001600160a01b03908116825260208083019390935260409182016000908120918c1681529252902054906140ba565b600061140a613559565b6001600160a01b03811660009081526007602052604090205490915060ff16156114655760405162461bcd60e51b815260040180806020018281038252602c815260200180614fa7602c913960400191505060405180910390fd5b600061147083614114565b5050506001600160a01b03861660009081526003602052604090205493945061149e9392508491505061416e565b6001600160a01b038316600090815260036020526040902055600c546114c4908261416e565b600c55600d546114d490846140ba565b600d55505050565b6000600b54831115611535576040805162461bcd60e51b815260206004820152601f60248201527f416d6f756e74206d757374206265206c657373207468616e20737570706c7900604482015290519081900360640190fd5b8161155557600061154584614114565b50949650610d5e95505050505050565b600061156084614114565b50939650610d5e95505050505050565b7f00000000000000000000000087cbd73db17d2222d4f3a1a26f9e10a99c37595781565b61159c613559565b6000546001600160a01b039081169116146115ec576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600b811115611642576040805162461bcd60e51b815260206004820152601c60248201527f7374616b654665652073686f756c6420626520696e2030202d20313100000000604482015290519081900360640190fd5b601855565b61164f613559565b6000546001600160a01b0390811691161461169f576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b60006116aa306118e8565b90506116b5816141b0565b50565b6001600160a01b031660009081526006602052604090205460ff1690565b6116de613559565b6000546001600160a01b0390811691161461172e576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600a811115611781576040805162461bcd60e51b815260206004820152601a60248201527907461784665652073686f756c6420626520696e2030202d2031360341b604482015290519081900360640190fd5b6011819055601a55565b611793613559565b6000546001600160a01b039081169116146117e3576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600b8111156118235760405162461bcd60e51b8152600401808060200182810382526024815260200180614f616024913960400191505060405180910390fd5b601655565b611830613559565b6000546001600160a01b03908116911614611880576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600a8111156118d3576040805162461bcd60e51b815260206004820152601a60248201527907461784665652073686f756c6420626520696e2030202d2031360341b604482015290519081900360640190fd5b601455565b601e54600160a81b900460ff1681565b6001600160a01b03811660009081526007602052604081205460ff161561192857506001600160a01b038116600090815260046020526040902054611337565b6001600160a01b038216600090815260036020526040902054610d5e906112da565b611952613559565b6000546001600160a01b039081169116146119a2576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600080546040516001600160a01b0390911690600080516020614e78833981519152908390a3600080546001600160a01b0319169055565b601f5481565b6119e8613559565b6000546001600160a01b03908116911614611a38576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b60096020527fe4fb7c0c28ac682fc02b5628b59009fdf955a66c0684bd7bf46b9fda76dca868805460ff199081166001908117909255600a805480840182557fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a890810180546001600160a01b0319908116737589319ed0fd750017159fb4e4d96c63966173c1179091557fdadde755370fabc52d35b4080d88dae6200c230118bef9c9c0a73813794aef4e8054851686179055825480860184558201805482167365a67df75ccbf57828185c7c050e34de64d859d01790557f1f039d7054c60544da001ada2885c2098966bf59108af37aa0047e53180c227d80548516861781558354808701855583018054831673e031b36b53e53a292a20c5f08fd1658cddf74fce9081179091558154861687179091558354808701855583018054831690911790557ff4b93d2837107f43e5b3215c8cfd55bc8f0ec1fef4e888737a6685e72730fd0e80548516861790558254808601845582018054821673e516bdee55b0b4e9bacaf6285130de15589b13451790557f404b5b762e8059f6055e90a7bf5e88e1e2f628911a8da7857df40bf26352e21280548516861790558254808601845582018054821673a1cec245c456dd1bd9f2815a6955fef44eb4191b1790557fd06f72f8dd06466bcc52a7fc6bddce65222c1efb674ce288f26d72607f32c02680548516861790558254808601845582018054821673d7d3ee77d35d0a56f91542d4905b1a2b1cd7cf951790557fb180cbdf50fc8306102fae658ae8eddf6673addd522d5a575c2b6924f832977480548516861790558254808601845582018054821673fe76f05dc59fec04184fa0245ad0c3cf9a57b9641790557fd74310044b3dfbf8c3bb19b279a8662cf43f021fe4e68d5726f62fc6b584af7980548516861790558254808601845582018054821673dc81a3450817a58d00f45c86d0368290088db8481790557f72b3a1de74eb1a0841083ea090998865c5194ff1fc7be394ec133e28cacbdd9d8054851686179055825480860184558201805482167345fd07c63e5c316540f14b2002b085aee78e38811790557f82951a08c86bbc382122443ed556bc8073b7e0bdf3bbfb811f503389aad35bfc8054851686179055825480860184558201805482167327f9adb26d532a41d97e00206114e429ad58c6791790557f3ee2bfab112ce489483443731da982ac406a17d09137224e74d494a6037142ad805485168617905582548086018455820180548216739282dc5c422fa91ff2f6ff3a0b45b7bf97cf78e71790557fb7baecc9aa863a1182bccd59d3b8aaee484658aee9400a94283dad2dbafd9d1d80548516861790558254808601845582018054821673fad95b6089c53a0d1d861eabfaadd8901b0f85331790557fac880b0698f6a24b725a531b87fe801fab0b12d27bd162739065e7572f5404d9805485168617905582548086018455820180548216731d6e8bac6ea3730825bde4b005ed7b2b39a2932d1790557f6ef6d708eb37b8bda6da62f8191bcb1b8f30d7bf24789d111afaa48e2abcfa788054851686179055825480860184558201805482166d084e91743124a982076c59f100841790557fd73d5f8f968995abf730ad6b9b8e37da64ea9c3ba0bbce58d3bab4147a285736805485168617905582548086018455820180548216736da4bea09c3aa0761b09b19837d9105a522543031790557f78985dca206f219a6b3560fdc7a11aef1d23931d984660a7cdae9bbf47c0d96580548516861790558254808601845582018054821673323b7f37d382a68b0195b873af17cea5b67cd5951790557f0cfa4edf9477e1d54a3587993034fa6573860afb2e4b0a115c4c484a9a330a428054851686179055825480860184558201805482166f5804b22091aa9830e50459a15e7c92411790557fd6b7d69e6a823375dcf433a269665ea33193c6767d33bd6b4df5811fa6e1c82c80548516861790558254808601845582018054821673a3b0e79935815730d942a444a84d4bd14a3395531790557f13992d03d159acc9a62957c120a113863deff202e489fa07518ad14e9a3c180780548516861790558254808601845582018054821673f6da21e95d74767009accb145b96897ac3630bad1790557f9531ce70ac5d2bbefb64276f65d45e190dc5cb49d659eae0ae43c2307446dc538054851686179055825480860184558201805482166d7673393729d5618dc555fd13f9aa1790557ff5ad3fffe9a691dce1e4a825d1e8152a24d541272410b219bc6d31e16fa5f9be8054851686179055825480860184558201805482166d03441d59dde9a90bffb1cd3fabf11790557f5888754549269951f658dc38abd8b5f599e7f578f09c1c082ddee052681ef5aa8054851686179055825480860184558201805482167359903993ae67bf48f10832e9be28935fee04d6f61790557f69b77005f9173f1fd98e76d50566ec8d29499be8f194d19d204baecdcc85d76280548516861790558254808601845582018054821670917de6037d52b1f0a306eecd208405f7cd1790557f4f79f1067e9d05cffa01ea21e2293206a7d7e21e1204a7a91ce5038960641699805485168617905582548086018455820180548216737100e690554b1c2fd01e8648db88be235c1e65141790557ff5949e903094d0c003182832401f2f1e7e902a7afa53a9b4fc91227edcb81c2c8054851686179055825480860184558201805482167372b30cdc1583224381132d379a052a6b107254151790557ff3e918d4ba10715278cdbb619ad598c0463cbe5d7f5f568a2fb54f232047d9a9805485168617905582548086018455820180548216739edd647d7d6eceae6bb61d7785ef66c5055a9bee1790557fab5495752a9187414227aebaa8b39a4bffdb32802987cba6aff3f20498292a7180548516861790558254808601845582018054821673fe9d99ef02e905127239e85a611c29ad32c31c2f1790557ff248d283b19d8012b3a5799c17555d9562b55bb7f8a9573294b68b31e40bc2e08054851686178155835480870185558301805483167339608b6f20704889c51c0ae28b1fca8f36a5239b9081179091557f63fa2d6ca420f9a726a126cd4ecb6c1cc9a862c11b8b23634e14766ea0a5830c80548716881790558454808801865584018054841673c496d84215d5018f6f53e7f6f12e45c9b5e8e8a91790557f942ebcb2565846ab429e313119fc37882c100e43cc02a57b5525c115ad4f72998054871688179055845480880186558401805484167359341bc6b4f3ace878574b05914f43309dd678c71790557f5af94c70cd57260eec3231b2f06ace7b65cdeb3d90a0722d811f34a9c53f613480548716881790558454808801865584018054841673e986d48efee9ec1b8f66cd0b0ae8e3d18f091bdf1790557f2418a7599ba98f17273e05153250af4e64021166f87000ebb8faf0b96cdbcc54805487168817905584548088018655840180548416734aeb32e16dcac00b092596adc6cd4955efdee2901790557f11c8caefcbc9afecd5b2153811f415fe306a1f3884466a0ddf30ba3939464b1e80548716881790558454808801865584018054841673136f4b5b6a306091b280e3f251fa0e21b1280cd51790558154861687179091558354808701855583018054831690911790557ff39ac1e13c447fb096f87169ad2be19cda4b1a700a885a7d267b0c86db6dd64e805485168617905582548086018455820180548216735b83a351500b631cc2a20a665ee17f0dc66e3db71790557f8bd97214c00f3c37f3cd2026944d2dbd2e75b6bb5519f61faad99a7979474bd180548516861790558254808601845582018054821673bcb05a3f85d34f0194c70d5914d5c4e28f11cc021790557f07e254c4ca20656c5ab177c8c6b7d011a80e9d776cea755f6a6f6ad7d92b9c5f8054851686179055825480860184558201805482167322246f9bca9921bfa9a3f8df5babc5bc8ee738501790557f2d690ff6d1abf7d1f179e3ce0a56ecfcf647046a92b4ed991499534ea5ae21118054851686179055825480860184558201805482167342d4c197036bd9984ca652303e07dd29fa6bdb371790557fbf9ee777cf4683df01da9dfd7aeab60490278463b1d516455d67d23c750f96dc8054851686179055825480860184558201805482166e3b3cc22af3ae1eac0440bcee416b401790557f013630202be18d772bff0a66bfe4ec9a35d5fa99943a49883993ea705fa07b1d80548516861790558254808601845582018054821673231dc6af3c66741f6cf618884b953df0e83c1a2a1790557f1f1795081809f7dd1c455a73f7571f61b2522f6d392ab8dd06457c3cd16c965b80548516861790558254808601845582018054821673c6bf34596f74eb22e066a878848dfb9fc1cf4c651790557fbc023c8a7355a1da47ae5ca486c9d528cf9820e9742773d0445e97092cafad9d8054851686179055825480860184558201805482167320f6fcd6b8813c4f98c0ffbd88c87c0255040aa31790557fd5ca46fef3a1ae511b6233669e4cfc94abc758850c782c0f7ea1639b3c1aceb580548516861790558254808601845582018054821673d334c5392ed4863c81576422b968c6fb90ee9f791790557f52cca0c9f573d361aac90e85de0250b4501aeeb9e7fe85dae3afaedc2f56acd480548516861790558254808601845582018054821673fffff6e70842330948ca47254f2be673b1cb0db71790557f1c6ea9d838b443ab32c91ff4918ab0ee39d0626b3f3c9dcaddfd06aa0317325780548516861781558354808701855583018054831673a39c50bf86e15391180240938f469a7bf4fdae9a90811790915581549095168617905582549485018355600092909252929092018054909216179055565b612829613559565b6000546001600160a01b03908116911614612879576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156128d55760405162461bcd60e51b8152600401808060200182810382526024815260200180614ec16024913960400191505060405180910390fd5b6001600160a01b03811660009081526009602052604090205460ff1615612943576040805162461bcd60e51b815260206004820152601e60248201527f4163636f756e7420697320616c726561647920626c61636b6c69737465640000604482015290519081900360640190fd5b6001600160a01b03166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6129b1613559565b6000546001600160a01b03908116911614612a01576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b600a811115612a54576040805162461bcd60e51b815260206004820152601a60248201527907461784665652073686f756c6420626520696e2030202d2031360341b604482015290519081900360640190fd5b601755565b6000546001600160a01b031690565b60205481565b600f8054604080516020601f6002600019610100600188161502019095169490940493840181900481028201810190925282815260609390929091830182828015610d3c5780601f10610d1157610100808354040283529160200191610d3c565b6000610d5a612adc613559565b8461121885604051806060016040528060258152602001614ff66025913960056000612b06613559565b6001600160a01b03908116825260208083019390935260409182016000908120918d16815292529020549190613fb7565b6001546001600160a01b03163314612b805760405162461bcd60e51b8152600401808060200182810382526023815260200180614fd36023913960400191505060405180910390fd5b6002544211612bd6576040805162461bcd60e51b815260206004820152601f60248201527f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300604482015290519081900360640190fd5b600154600080546040516001600160a01b039384169390911691600080516020614e7883398151915291a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b6000610d5a612c32613559565b8484613649565b612c41613559565b6000546001600160a01b03908116911614612c91576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b612cc4613559565b6000546001600160a01b03908116911614612d14576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b602055565b60025490565b612d27613559565b6000546001600160a01b03908116911614612d77576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b601e805460ff60b81b19169055565b612d8e613559565b6000546001600160a01b03908116911614612dde576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b601e805442601f5560ff60a81b1960ff60b01b19909116600160b01b1716600160a81b179055565b6001600160a01b031660009081526007602052604090205460ff1690565b612e2c613559565b6000546001600160a01b03908116911614612e7c576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b612ea6613559565b6000546001600160a01b03908116911614612ef6576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b612f20613559565b6000546001600160a01b03908116911614612f70576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b60008054600180546001600160a01b03199081166001600160a01b038416179091551681554282016002556040518190600080516020614e78833981519152908290a350565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b612fe9613559565b6000546001600160a01b03908116911614613039576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b601e8054911515600160a81b0260ff60a81b19909216919091179055565b6001600160a01b031660009081526009602052604090205460ff1690565b61307d613559565b6000546001600160a01b039081169116146130cd576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b03821614156131295760405162461bcd60e51b8152600401808060200182810382526022815260200180614f856022913960400191505060405180910390fd5b6001600160a01b03811660009081526007602052604090205460ff1615613197576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b6001600160a01b038116600090815260036020526040902054156131f1576001600160a01b0381166000908152600360205260409020546131d7906112da565b6001600160a01b0382166000908152600460205260409020555b6001600160a01b03166000818152600760205260408120805460ff191660019081179091556008805491820181559091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319169091179055565b61325f613559565b6000546001600160a01b039081169116146132af576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b6001600160a01b0381166132f45760405162461bcd60e51b8152600401808060200182810382526026815260200180614d9f6026913960400191505060405180910390fd5b600080546040516001600160a01b0380851693921691600080516020614e7883398151915291a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b613345613559565b6000546001600160a01b03908116911614613395576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b476116b5816143e7565b4790565b6133ab613559565b6000546001600160a01b039081169116146133fb576040805162461bcd60e51b81526020600482018190526024820152600080516020614e58833981519152604482015290519081900360640190fd5b6001600160a01b03811660009081526007602052604090205460ff16613468576040805162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015290519081900360640190fd5b60005b600854811015610f1857816001600160a01b03166008828154811061348c57fe5b6000918252602090912001546001600160a01b03161415613531576008805460001981019081106134b957fe5b600091825260209091200154600880546001600160a01b0390921691839081106134df57fe5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600482526040808220829055600790925220805460ff191690556008805480610ee957fe5b60010161346b565b601e54600160b81b900460ff1681565b601e54600160b01b900460ff1681565b3390565b6001600160a01b0383166135a25760405162461bcd60e51b8152600401808060200182810382526024815260200180614f3d6024913960400191505060405180910390fd5b6001600160a01b0382166135e75760405162461bcd60e51b8152600401808060200182810382526022815260200180614dc56022913960400191505060405180910390fd5b6001600160a01b03808416600081815260056020908152604080832094871680845294825291829020859055815185815291517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259281900390910190a3505050565b613651612a59565b6001600160a01b0316836001600160a01b03161415801561368b5750613675612a59565b6001600160a01b0316826001600160a01b031614155b15613759576001600160a01b0383166136d55760405162461bcd60e51b8152600401808060200182810382526025815260200180614ee56025913960400191505060405180910390fd5b6001600160a01b03821661371a5760405162461bcd60e51b8152600401808060200182810382526023815260200180614d526023913960400191505060405180910390fd5b600081116137595760405162461bcd60e51b8152600401808060200182810382526029815260200180614e986029913960400191505060405180910390fd5b613761612a59565b6001600160a01b0316836001600160a01b03161415801561379b5750613785612a59565b6001600160a01b0316826001600160a01b031614155b80156137d957507f00000000000000000000000087cbd73db17d2222d4f3a1a26f9e10a99c3759576001600160a01b0316826001600160a01b031614155b801561380257506001600160a01b038216737a250d5630b4cf539739df2c5dacb4c659f2488d14155b801561384057507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b1561389057602054613851836118e8565b820111156138905760405162461bcd60e51b8152600401808060200182810382526033815260200180614f0a6033913960400191505060405180910390fd5b613898612a59565b6001600160a01b0316836001600160a01b0316141580156138d257506138bc612a59565b6001600160a01b0316826001600160a01b031614155b15613918576021548111156139185760405162461bcd60e51b8152600401808060200182810382526028815260200180614de76028913960400191505060405180910390fd5b6001600160a01b03821660009081526009602052604090205460ff1615613980576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b3360009081526009602052604090205460ff16156139df576040805162461bcd60e51b8152602060048201526017602482015276596f752068617665206e6f20706f77657220686572652160481b604482015290519081900360640190fd5b6139e7612a59565b6001600160a01b0316836001600160a01b031614158015613a215750613a0b612a59565b6001600160a01b0316826001600160a01b031614155b15613d8557601e54600160b01b900460ff16613af7576001600160a01b038316301480613a5657506001600160a01b03821630145b80613a795750613a64612a59565b6001600160a01b0316836001600160a01b0316145b80613a9c5750613a87612a59565b6001600160a01b0316826001600160a01b0316145b613af757601e54600160b01b900460ff16613af7576040805162461bcd60e51b8152602060048201526016602482015275151c98591a5b99c81a5cc81b9bdd08195b98589b195960521b604482015290519081900360640190fd5b601e54600160b81b900460ff1615613c70576001600160a01b0383163014801590613b2b57506001600160a01b0382163014155b8015613b6957507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b031614155b8015613ba757507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316826001600160a01b031614155b15613c70577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316613bde613559565b6001600160a01b03161480613c2b57507f00000000000000000000000087cbd73db17d2222d4f3a1a26f9e10a99c3759576001600160a01b0316613c20613559565b6001600160a01b0316145b613c70576040805162461bcd60e51b81526020600482015260116024820152704552523a20556e6973776170206f6e6c7960781b604482015290519081900360640190fd5b601f54600501421015613d85577f00000000000000000000000087cbd73db17d2222d4f3a1a26f9e10a99c3759576001600160a01b0316836001600160a01b031614158015613cdc57506001600160a01b038316737a250d5630b4cf539739df2c5dacb4c659f2488d14155b8015613d1a57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316836001600160a01b031614155b15613d85576001600160a01b0383166000818152600960205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b03191690911790555b6000613d90306118e8565b90506021548110613da057506021545b602254601e549082101590600160a01b900460ff16158015613dcb5750601e54600160a81b900460ff165b8015613dd45750805b8015613e1257507f00000000000000000000000087cbd73db17d2222d4f3a1a26f9e10a99c3759576001600160a01b0316856001600160a01b031614155b15613e3257613e20826141b0565b478015613e3057613e30476143e7565b505b6001600160a01b03851660009081526006602052604090205460019060ff1680613e7457506001600160a01b03851660009081526006602052604090205460ff165b15613e8157506000613fa3565b7f00000000000000000000000087cbd73db17d2222d4f3a1a26f9e10a99c3759576001600160a01b0316866001600160a01b03161480613ef257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316866001600160a01b0316145b15613f1257613eff614421565b6014546011556015546012556016546013555b7f00000000000000000000000087cbd73db17d2222d4f3a1a26f9e10a99c3759576001600160a01b0316856001600160a01b03161480613f8357507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316856001600160a01b0316145b15613fa357613f90614421565b6017546011556018546012556019546013555b613faf8686868461446a565b505050505050565b600081848411156140465760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561400b578181015183820152602001613ff3565b50505050905090810190601f1680156140385780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600080600061405b6145d9565b909250905061406a8282614071565b9250505090565b60006140b383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061473c565b9392505050565b6000828201838110156140b3576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b60008060008060008060008060008060006141378c6011546013546012546147a1565b9350935093509350600080600061414e8f87614801565b919f509d509b509599509397509195509350505050919395979092949650565b60006140b383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613fb7565b601e805460ff60a01b1916600160a01b179055604080516002808252606080830184529260208301908036833701905050905030816000815181106141f157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561426a57600080fd5b505afa15801561427e573d6000803e3d6000fd5b505050506040513d602081101561429457600080fd5b50518151829060019081106142a557fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506142f0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461355d565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663791ac9478360008430426040518663ffffffff1660e01b81526004018086815260200185815260200180602001846001600160a01b03168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b8381101561439557818101518382015260200161437d565b505050509050019650505050505050600060405180830381600087803b1580156143be57600080fd5b505af11580156143d2573d6000803e3d6000fd5b5050601e805460ff60a01b1916905550505050565b601d546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015610f18573d6000803e3d6000fd5b6011541580156144315750601354155b801561443d5750601254155b1561444757614468565b60118054601a5560138054601b5560128054601c5560009283905590829055555b565b8061447757614477614421565b6001600160a01b03841660009081526007602052604090205460ff1680156144b857506001600160a01b03831660009081526007602052604090205460ff16155b156144cd576144c8848484614833565b6145cb565b6001600160a01b03841660009081526007602052604090205460ff1615801561450e57506001600160a01b03831660009081526007602052604090205460ff165b1561451e576144c8848484614977565b6001600160a01b03841660009081526007602052604090205460ff1615801561456057506001600160a01b03831660009081526007602052604090205460ff16155b15614570576144c8848484614a36565b6001600160a01b03841660009081526007602052604090205460ff1680156145b057506001600160a01b03831660009081526007602052604090205460ff165b156145c0576144c8848484614a90565b6145cb848484614a36565b6145d3614b19565b50505050565b600c54600b546000918291825b60085481101561470a5782600360006008848154811061460257fe5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180614667575081600460006008848154811061464057fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1561467e57600c54600b5494509450505050614738565b6146be600360006008848154811061469257fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054849061416e565b925061470060046000600884815481106146d457fe5b60009182526020808320909101546001600160a01b03168352820192909252604001902054839061416e565b91506001016145e6565b50600b54600c5461471a91614071565b82101561473257600c54600b54935093505050614738565b90925090505b9091565b6000818361478b5760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561400b578181015183820152602001613ff3565b50600083858161479757fe5b0495945050505050565b6000808080806147bc60646147b68b8b614b2d565b90614071565b905060006147cf60646147b68c8b614b2d565b905060006147e260646147b68d8b614b2d565b90506147f08b838386614b86565b9b929a509098509650945050505050565b60008060008061480f61404e565b90506000806000614821898986614ba9565b91985096509450505050509250925092565b600080600080600080600061484788614114565b965096509650965096509650965061488d88600460008d6001600160a01b03166001600160a01b031681526020019081526020016000205461416e90919063ffffffff16565b6001600160a01b038b166000908152600460209081526040808320939093556003905220546148bc908861416e565b6001600160a01b03808c1660009081526003602052604080822093909355908b16815220546148eb90876140ba565b6001600160a01b038a1660009081526003602052604090205561490d82614be5565b61491681614c6e565b6149208584614d2d565b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef866040518082815260200191505060405180910390a350505050505050505050565b600080600080600080600061498b88614114565b96509650965096509650965096506149d187600360008d6001600160a01b03166001600160a01b031681526020019081526020016000205461416e90919063ffffffff16565b6001600160a01b03808c16600090815260036020908152604080832094909455918c16815260049091522054614a0790856140ba565b6001600160a01b038a166000908152600460209081526040808320939093556003905220546148eb90876140ba565b6000806000806000806000614a4a88614114565b96509650965096509650965096506148bc87600360008d6001600160a01b03166001600160a01b031681526020019081526020016000205461416e90919063ffffffff16565b6000806000806000806000614aa488614114565b9650965096509650965096509650614aea88600460008d6001600160a01b03166001600160a01b031681526020019081526020016000205461416e90919063ffffffff16565b6001600160a01b038b166000908152600460209081526040808320939093556003905220546149d1908861416e565b601a54601155601b54601355601c54601255565b600082614b3c57506000610d5e565b82820282848281614b4957fe5b04146140b35760405162461bcd60e51b8152600401808060200182810382526021815260200180614e0f6021913960400191505060405180910390fd5b600080614b9f84614b9987818a8861416e565b9061416e565b9695505050505050565b6000808080614bb88786614b2d565b90506000614bc68787614b2d565b90506000614bd4838361416e565b929992985090965090945050505050565b6000614bef61404e565b90506000614bfd8383614b2d565b30600090815260036020526040902054909150614c1a90826140ba565b3060009081526003602090815260408083209390935560079052205460ff1615614c695730600090815260046020526040902054614c5890846140ba565b306000908152600460205260409020555b505050565b6000614c7861404e565b90506000614c868383614b2d565b601e546001600160a01b0316600090815260036020526040902054909150614cae90826140ba565b601e80546001600160a01b03908116600090815260036020908152604080832095909555925490911681526007909152205460ff1615614c6957601e546001600160a01b0316600090815260046020526040902054614d0d90846140ba565b601e546001600160a01b0316600090815260046020526040902055505050565b600c54614d3a908361416e565b600c55600d54614d4a90826140ba565b600d55505056fe45524332303a207472616e7366657220746f20746865207a65726f2061646472657373416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f20616464726573735472616e7366657220616d6f756e74206578636565647320746865206d61785478416d6f756e742e536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63654f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65728be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f57652063616e206e6f7420626c61636b6c69737420556e697377617020726f757465722e45524332303a207472616e736665722066726f6d20746865207a65726f2061646472657373596f752068617665207265616368656420746865206c696d6974206f6620746f6b656e7320696e20746869732077616c6c657445524332303a20617070726f76652066726f6d20746865207a65726f20616464726573734d61726b6574696e67506f6f6c4665652073686f756c6420626520696e2030202d20313157652063616e206e6f74206578636c75646520556e697377617020726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122094349ce6568210dc75ebf46407b26467e18e9e679307ca682da1589b8f63941164736f6c634300060c0033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000e53d3d3c52bbf919e28ad0b59bfcab4822a37c70000000000000000000000000e53d3d3c52bbf919e28ad0b59bfcab4822a37c70

-----Decoded View---------------
Arg [0] : MarketingPoolWalletAddress (address): 0xe53d3d3C52BbF919E28AD0B59BFCaB4822A37c70
Arg [1] : StakePoolWalletAddress (address): 0xe53d3d3C52BbF919E28AD0B59BFCaB4822A37c70

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000e53d3d3c52bbf919e28ad0b59bfcab4822a37c70
Arg [1] : 000000000000000000000000e53d3d3c52bbf919e28ad0b59bfcab4822a37c70


Deployed Bytecode Sourcemap

26520:36298:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39008:91;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40012:173;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40012:173:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;41831:481;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41831:481:0;-1:-1:-1;;;;;41831:481:0;;:::i;:::-;;60680:244;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60680:244:0;;:::i;62021:275::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62021:275:0;;:::i;41360:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;28411:51;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;28411:51:0;;;;;;;;;;;;;;39321:103;;;;;;;;;;;;;:::i;62691:120::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62691:120:0;;:::i;61402:310::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61402:310:0;;:::i;40197:329::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40197:329:0;;;;;;;;;;;;;;;;;:::i;60934:216::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60934:216:0;;:::i;43228:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43228:269:0;;:::i;38657:86::-;;;;;;;;;;;;;:::i;39218:91::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;40538:230;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40538:230:0;;;;;;;;:::i;42324:406::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42324:406:0;;:::i;42742:474::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;42742:474:0;;;;;;;;;:::i;28473:38::-;;;;;;;;;;;;;:::i;61160:222::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61160:222:0;;:::i;51447:168::-;;;;;;;;;;;;;:::i;45157:131::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;45157:131:0;-1:-1:-1;;;;;45157:131:0;;:::i;60004:220::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60004:220:0;;:::i;61732:269::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;61732:269:0;;:::i;60236:199::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60236:199:0;;:::i;28554:31::-;;;;;;;;;;;;;:::i;39436:210::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39436:210:0;-1:-1:-1;;;;;39436:210:0;;:::i;16355:160::-;;;;;;;;;;;;;:::i;28727:25::-;;;;;;;;;;;;;:::i;30270:8036::-;;;;;;;;;;;;;:::i;41475:336::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41475:336:0;-1:-1:-1;;;;;41475:336:0;;:::i;60455:205::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;60455:205:0;;:::i;15653:87::-;;;;;;;;;;;;;:::i;28765:43::-;;;;;;;;;;;;;:::i;39111:95::-;;;;;;;;;;;;;:::i;40780:281::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;40780:281:0;;;;;;;;:::i;17462:313::-;;;;;;;;;;;;;:::i;39658:179::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39658:179:0;;;;;;;;:::i;41203:145::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;41203:145:0;;;;;;;;;;:::i;38503:134::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38503:134:0;;:::i;16959:97::-;;;;;;;;;;;;;:::i;38763:90::-;;;;;;;;;;;;;:::i;38318:165::-;;;;;;;;;;;;;:::i;41073:118::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;41073:118:0;-1:-1:-1;;;;;41073:118:0;;:::i;62517:154::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62517:154:0;-1:-1:-1;;;;;62517:154:0;;:::i;62316:181::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;62316:181:0;-1:-1:-1;;;;;62316:181:0;;:::i;17140:234::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17140:234:0;;:::i;39849:151::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;39849:151:0;;;;;;;;;;:::i;51824:106::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;51824:106:0;;;;:::i;38873:115::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;38873:115:0;-1:-1:-1;;;;;38873:115:0;;:::i;43509:475::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43509:475:0;-1:-1:-1;;;;;43509:475:0;;:::i;16687:260::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16687:260:0;-1:-1:-1;;;;;16687:260:0;;:::i;51635:177::-;;;;;;;;;;;;;:::i;59866:118::-;;;;;;;;;;;;;:::i;43996:522::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;43996:522:0;-1:-1:-1;;;;;43996:522:0;;:::i;28685:31::-;;;;;;;;;;;;;:::i;28596:::-;;;;;;;;;;;;;:::i;39008:91::-;39082:5;39075:12;;;;;;;;-1:-1:-1;;39075:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39045:13;;39075:12;;39082:5;;39075:12;;39082:5;39075:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39008:91;:::o;40012:173::-;40087:4;40108:39;40117:12;:10;:12::i;:::-;40131:7;40140:6;40108:8;:39::i;:::-;-1:-1:-1;40169:4:0;40012:173;;;;;:::o;41831:481::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;41911:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;41903:57;;;::::0;;-1:-1:-1;;;41903:57:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;41976:9;41971:334;41995:17;:24:::0;41991:28;::::1;41971:334;;;42069:7;-1:-1:-1::0;;;;;42045:31:0::1;:17;42063:1;42045:20;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;42045:20:0::1;:31;42041:253;;;42120:17;42138:24:::0;;-1:-1:-1;;42138:28:0;;;42120:47;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;42097:17:::1;:20:::0;;-1:-1:-1;;;;;42120:47:0;;::::1;::::0;42115:1;;42097:20;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:70:::0;;-1:-1:-1;;;;;;42097:70:0::1;-1:-1:-1::0;;;;;42097:70:0;;::::1;;::::0;;42186:18;;::::1;::::0;;:9:::1;:18:::0;;;;;;:26;;-1:-1:-1;;42186:26:0::1;::::0;;42231:17:::1;:23:::0;;;::::1;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;42231:23:0;;;;;-1:-1:-1;;;;;;42231:23:0::1;::::0;;;;;42273:5:::1;;42041:253;42021:3;;41971:334;;;;41831:481:::0;:::o;60680:244::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;60793:2:::1;60781:8;:14;;60756:72;;;::::0;;-1:-1:-1;;;60756:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;60843:12;:23:::0;;;60881:20:::1;:31:::0;60680:244::o;62021:275::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;62182:2:::1;62158:20;:26;;62121:104;;;;-1:-1:-1::0;;;62121:104:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;62240:21;:44:::0;62021:275::o;41360:95::-;41433:10;;41360:95;:::o;28411:51::-;;;:::o;39321:103::-;39405:7;;39321:103;:::o;62691:120::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;62773:12:::1;:26:::0;62691:120::o;61402:310::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;61547:2:::1;61527:16;:22;;61494:96;;;;-1:-1:-1::0;;;61494:96:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61605:17;:36:::0;;;61656:25:::1;:44:::0;61402:310::o;40197:329::-;40295:4;40316:36;40326:6;40334:9;40345:6;40316:9;:36::i;:::-;40367:121;40376:6;40384:12;:10;:12::i;:::-;40398:89;40436:6;40398:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;40398:19:0;;;;;;:11;:19;;;;;;40418:12;:10;:12::i;:::-;-1:-1:-1;;;;;40398:33:0;;;;;;;;;;;;-1:-1:-1;40398:33:0;;;:89;:37;:89::i;:::-;40367:8;:121::i;:::-;-1:-1:-1;40510:4:0;40197:329;;;;;:::o;60934:216::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;61059:2:::1;61044:11;:17;;61016:78;;;::::0;;-1:-1:-1;;;61016:78:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;61109:15;:29:::0;60934:216::o;43228:269::-;43294:7;43337;;43326;:18;;43318:73;;;;-1:-1:-1;;;43318:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43406:19;43429:10;:8;:10::i;:::-;43406:33;-1:-1:-1;43461:24:0;:7;43406:33;43461:11;:24::i;:::-;43454:31;;;43228:269;;;;:::o;38657:86::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;38713:11:::1;:18:::0;;-1:-1:-1;;;;38713:18:0::1;-1:-1:-1::0;;;38713:18:0::1;::::0;;38657:86::o;39218:91::-;39288:9;;;;39218:91;:::o;40538:230::-;40626:4;40647:83;40656:12;:10;:12::i;:::-;40670:7;40679:50;40718:10;40679:11;:25;40691:12;:10;:12::i;:::-;-1:-1:-1;;;;;40679:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;40679:25:0;;;:34;;;;;;;;;;;:38;:50::i;42324:406::-;42380:14;42397:12;:10;:12::i;:::-;-1:-1:-1;;;;;42433:19:0;;;;;;:11;:19;;;;;;42380:29;;-1:-1:-1;42433:19:0;;42432:20;42424:77;;;;-1:-1:-1;;;42424:77:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42517:15;42542:19;42553:7;42542:10;:19::i;:::-;-1:-1:-1;;;;;;;;42594:15:0;;;;;;:7;:15;;;;;;42516:45;;-1:-1:-1;42594:28:0;;:15;-1:-1:-1;42516:45:0;;-1:-1:-1;;42594:19:0;:28::i;:::-;-1:-1:-1;;;;;42576:15:0;;;;;;:7;:15;;;;;:46;42647:7;;:20;;42659:7;42647:11;:20::i;:::-;42637:7;:30;42695:10;;:23;;42710:7;42695:14;:23::i;:::-;42682:10;:36;-1:-1:-1;;;42324:406:0:o;42742:474::-;42832:7;42875;;42864;:18;;42856:62;;;;;-1:-1:-1;;;42856:62:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;42938:17;42933:272;;42977:15;43002:19;43013:7;43002:10;:19::i;:::-;-1:-1:-1;42976:45:0;;-1:-1:-1;43040:14:0;;-1:-1:-1;;;;;;43040:14:0;42933:272;43097:23;43129:19;43140:7;43129:10;:19::i;:::-;-1:-1:-1;43095:53:0;;-1:-1:-1;43167:22:0;;-1:-1:-1;;;;;;43167:22:0;28473:38;;;:::o;61160:222::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;61289:2:::1;61273:12;:18;;61244:80;;;::::0;;-1:-1:-1;;;61244:80:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;61339:16;:31:::0;61160:222::o;51447:168::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;51505:23:::1;51531:24;51549:4;51531:9;:24::i;:::-;51505:50;;51570:33;51587:15;51570:16;:33::i;:::-;15965:1;51447:168::o:0;45157:131::-;-1:-1:-1;;;;;45249:27:0;45221:4;45249:27;;;:18;:27;;;;;;;;;45157:131::o;60004:220::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;60109:2:::1;60099:6;:12;;60076:66;;;::::0;;-1:-1:-1;;;60076:66:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;60076:66:0;;;;;;;;;;;;;::::1;;60157:7;:16:::0;;;60188:15:::1;:24:::0;60004:220::o;61732:269::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;61889:2:::1;61866:19;:25;;61830:102;;;;-1:-1:-1::0;;;61830:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;61947:20;:42:::0;61732:269::o;60236:199::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;60353:2:::1;60340:9;:15;;60314:72;;;::::0;;-1:-1:-1;;;60314:72:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;60314:72:0;;;;;;;;;;;;;::::1;;60401:10;:22:::0;60236:199::o;28554:31::-;;;-1:-1:-1;;;28554:31:0;;;;;:::o;39436:210::-;-1:-1:-1;;;;;39530:20:0;;39502:7;39530:20;;;:11;:20;;;;;;;;39526:49;;;-1:-1:-1;;;;;;39559:16:0;;;;;;:7;:16;;;;;;39552:23;;39526:49;-1:-1:-1;;;;;39617:16:0;;;;;;:7;:16;;;;;;39597:37;;:19;:37::i;16355:160::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;16466:1:::1;16450:6:::0;;16429:40:::1;::::0;-1:-1:-1;;;;;16450:6:0;;::::1;::::0;-1:-1:-1;;;;;;;;;;;16429:40:0;16466:1;;16429:40:::1;16501:1;16484:19:::0;;-1:-1:-1;;;;;;16484:19:0::1;::::0;;16355:160::o;28727:25::-;;;;:::o;30270:8036::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;30401:9:::1;:62;::::0;;:69;;-1:-1:-1;;30401:69:0;;::::1;30466:4;30401:69:::0;;::::1;::::0;;;30481:17:::1;:75:::0;;;;::::1;::::0;;;;;::::1;::::0;;-1:-1:-1;;;;;;30481:75:0;;::::1;30419:42;30481:75;::::0;;;30569:62;:69;;;::::1;::::0;::::1;::::0;;30649:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;30587:42;30649:75;::::0;;30737:62;:69;;;::::1;::::0;::::1;::::0;;30817:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;30755:42;30817:75:::0;;::::1;::::0;;;30905:69;;;::::1;::::0;::::1;::::0;;;30985:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;31073:62;:69;;;::::1;::::0;::::1;::::0;;31153:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;31091:42;31153:75;::::0;;31241:62;:69;;;::::1;::::0;::::1;::::0;;31321:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;31259:42;31321:75;::::0;;31409:62;:69;;;::::1;::::0;::::1;::::0;;31489:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;31427:42;31489:75;::::0;;31577:62;:69;;;::::1;::::0;::::1;::::0;;31657:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;31595:42;31657:75;::::0;;31745:62;:69;;;::::1;::::0;::::1;::::0;;31825:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;31763:42;31825:75;::::0;;31913:62;:69;;;::::1;::::0;::::1;::::0;;31993:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;31931:42;31993:75;::::0;;32081:62;:69;;;::::1;::::0;::::1;::::0;;32161:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;32099:42;32161:75;::::0;;32249:62;:69;;;::::1;::::0;::::1;::::0;;32329:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;32267:42;32329:75;::::0;;32417:62;:69;;;::::1;::::0;::::1;::::0;;32497:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;32435:42;32497:75;::::0;;32585:62;:69;;;::::1;::::0;::::1;::::0;;32665:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;32603:42;32665:75;::::0;;32753:62;:69;;;::::1;::::0;::::1;::::0;;32833:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;32771:42;32833:75;::::0;;32921:62;:69;;;::::1;::::0;::::1;::::0;;33001:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;32939:42;33001:75;::::0;;33089:62;:69;;;::::1;::::0;::::1;::::0;;33169:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;33107:42;33169:75;::::0;;33257:62;:69;;;::::1;::::0;::::1;::::0;;33337:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;33275:42;33337:75;::::0;;33425:62;:69;;;::::1;::::0;::::1;::::0;;33505:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;33443:42;33505:75;::::0;;33593:62;:69;;;::::1;::::0;::::1;::::0;;33673:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;33611:42;33673:75;::::0;;33761:62;:69;;;::::1;::::0;::::1;::::0;;33841:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;33779:42;33841:75;::::0;;33929:62;:69;;;::::1;::::0;::::1;::::0;;34009:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;33947:42;34009:75;::::0;;34097:62;:69;;;::::1;::::0;::::1;::::0;;34177:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;34115:42;34177:75;::::0;;34265:62;:69;;;::::1;::::0;::::1;::::0;;34345:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;34283:42;34345:75;::::0;;34433:62;:69;;;::::1;::::0;::::1;::::0;;34513:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;34451:42;34513:75;::::0;;34601:62;:69;;;::::1;::::0;::::1;::::0;;34681:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;34619:42;34681:75;::::0;;34769:62;:69;;;::::1;::::0;::::1;::::0;;34849:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;34787:42;34849:75;::::0;;34937:62;:69;;;::::1;::::0;::::1;::::0;;35017:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;34955:42;35017:75;::::0;;35105:62;:69;;;::::1;::::0;::::1;::::0;;35185:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;35123:42;35185:75:::0;;::::1;::::0;;;35273:62;:69;;;::::1;::::0;::::1;::::0;;35353:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;35291:42;35353:75;::::0;;35441:62;:69;;;::::1;::::0;::::1;::::0;;35521:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;35459:42;35521:75;::::0;;35609:62;:69;;;::::1;::::0;::::1;::::0;;35689:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;35627:42;35689:75;::::0;;35777:62;:69;;;::::1;::::0;::::1;::::0;;35857:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;35795:42;35857:75;::::0;;35945:62;:69;;;::::1;::::0;::::1;::::0;;36025:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;35963:42;36025:75;::::0;;36113:69;;;::::1;::::0;::::1;::::0;;;36193:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;36281:62;:69;;;::::1;::::0;::::1;::::0;;36361:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;36299:42;36361:75;::::0;;36449:62;:69;;;::::1;::::0;::::1;::::0;;36529:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;36467:42;36529:75;::::0;;36617:62;:69;;;::::1;::::0;::::1;::::0;;36697:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;36635:42;36697:75;::::0;;36785:62;:69;;;::::1;::::0;::::1;::::0;;36865:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;36803:42;36865:75;::::0;;36953:62;:69;;;::::1;::::0;::::1;::::0;;37033:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;36971:42;37033:75;::::0;;37121:62;:69;;;::::1;::::0;::::1;::::0;;37201:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;37139:42;37201:75;::::0;;37289:62;:69;;;::::1;::::0;::::1;::::0;;37369:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;37307:42;37369:75;::::0;;37457:62;:69;;;::::1;::::0;::::1;::::0;;37537:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;37475:42;37537:75;::::0;;37625:62;:69;;;::::1;::::0;::::1;::::0;;37705:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;37643:42;37705:75;::::0;;37793:62;:69;;;::::1;::::0;::::1;::::0;;37873:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;37811:42;37873:75;::::0;;37961:62;:69;;;::::1;::::0;::::1;::::0;;38041:75;;;;::::1;::::0;;;::::1;::::0;;;::::1;37979:42;38041:75:::0;;::::1;::::0;;;38129:69;;;;::::1;::::0;::::1;::::0;;38209:75;;;;::::1;::::0;;30401:62:::1;38209:75:::0;;;;;;;::::1;::::0;;;;::::1;;::::0;;30270:8036::o;41475:336::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;41565:42:::1;-1:-1:-1::0;;;;;41554:53:0;::::1;;;41546:102;;;;-1:-1:-1::0;;;41546:102:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;41668:18:0;::::1;;::::0;;;:9:::1;:18;::::0;;;;;::::1;;41667:19;41659:62;;;::::0;;-1:-1:-1;;;41659:62:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;41732:18:0::1;;::::0;;;:9:::1;:18;::::0;;;;:25;;-1:-1:-1;;41732:25:0::1;41753:4;41732:25:::0;;::::1;::::0;;;41768:17:::1;:31:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;41768:31:0::1;::::0;;::::1;::::0;;41475:336::o;60455:205::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;60576:2:::1;60562:10;:16;;60535:74;;;::::0;;-1:-1:-1;;;60535:74:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;60535:74:0;;;;;;;;;;;;;::::1;;60624:11;:24:::0;60455:205::o;15653:87::-;15691:7;15722:6;-1:-1:-1;;;;;15722:6:0;15653:87;:::o;28765:43::-;;;;:::o;39111:95::-;39187:7;39180:14;;;;;;;;-1:-1:-1;;39180:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39150:13;;39180:14;;39187:7;;39180:14;;39187:7;39180:14;;;;;;;;;;;;;;;;;;;;;;;;40780:281;40873:4;40894:129;40903:12;:10;:12::i;:::-;40917:7;40926:96;40965:15;40926:96;;;;;;;;;;;;;;;;;:11;:25;40938:12;:10;:12::i;:::-;-1:-1:-1;;;;;40926:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;40926:25:0;;;:34;;;;;;;;;;;:96;:38;:96::i;17462:313::-;17518:14;;-1:-1:-1;;;;;17518:14:0;17536:10;17518:28;17510:76;;;;-1:-1:-1;;;17510:76:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17615:9;;17609:3;:15;17601:60;;;;;-1:-1:-1;;;17601:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;17710:14;;;17702:6;;17681:44;;-1:-1:-1;;;;;17710:14:0;;;;17702:6;;;;-1:-1:-1;;;;;;;;;;;17681:44:0;;17749:14;;;17740:23;;-1:-1:-1;;;;;;17740:23:0;-1:-1:-1;;;;;17749:14:0;;;17740:23;;;;;;17462:313::o;39658:179::-;39736:4;39757:42;39767:12;:10;:12::i;:::-;39781:9;39792:6;39757:9;:42::i;41203:145::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;41298:27:0;;;::::1;;::::0;;;:18:::1;:27;::::0;;;;:38;;-1:-1:-1;;41298:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;41203:145::o;38503:134::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;38599:11:::1;:26:::0;38503:134::o;16959:97::-;17035:9;;16959:97;:::o;38763:90::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;38822:11:::1;:19:::0;;-1:-1:-1;;;;38822:19:0::1;::::0;;38763:90::o;38318:165::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;38383:11:::1;:18:::0;;38425:15:::1;38412:10;:28:::0;-1:-1:-1;;;;;;;;38383:18:0;;::::1;-1:-1:-1::0;;;38383:18:0::1;38451;-1:-1:-1::0;;;38451:18:0::1;::::0;;38318:165::o;41073:118::-;-1:-1:-1;;;;;41159:20:0;41131:4;41159:20;;;:11;:20;;;;;;;;;41073:118::o;62517:154::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;62617:23:::1;:42:::0;;-1:-1:-1;;;;;;62617:42:0::1;-1:-1:-1::0;;;;;62617:42:0;;;::::1;::::0;;;::::1;::::0;;62517:154::o;62316:181::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;62429:27:::1;:56:::0;;-1:-1:-1;;;;;;62429:56:0::1;-1:-1:-1::0;;;;;62429:56:0;;;::::1;::::0;;;::::1;::::0;;62316:181::o;17140:234::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;17225:6:::1;::::0;;;17208:23;;-1:-1:-1;;;;;;17208:23:0;;::::1;-1:-1:-1::0;;;;;17225:6:0;::::1;17208:23;::::0;;;17246:19:::1;::::0;;17292:3:::1;:10:::0;::::1;17280:9;:22:::0;17322:40:::1;::::0;17225:6;;-1:-1:-1;;;;;;;;;;;17322:40:0;17225:6;;17322:40:::1;17140:234:::0;:::o;39849:151::-;-1:-1:-1;;;;;39961:18:0;;;39930:7;39961:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;39849:151::o;51824:106::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;51897:11:::1;:21:::0;;;::::1;;-1:-1:-1::0;;;51897:21:0::1;-1:-1:-1::0;;;;51897:21:0;;::::1;::::0;;;::::1;::::0;;51824:106::o;38873:115::-;-1:-1:-1;;;;;38958:18:0;38934:4;38958:18;;;:9;:18;;;;;;;;;38873:115::o;43509:475::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;43605:42:::1;-1:-1:-1::0;;;;;43594:53:0;::::1;;;43586:100;;;;-1:-1:-1::0;;;43586:100:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;43710:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;43709:21;43701:61;;;::::0;;-1:-1:-1;;;43701:61:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;-1:-1:-1::0;;;;;43780:16:0;::::1;43799:1;43780:16:::0;;;:7:::1;:16;::::0;;;;;:20;43777:116:::1;;-1:-1:-1::0;;;;;43860:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;43840:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;43821:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;43777:116:::1;-1:-1:-1::0;;;;;43907:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;43907:27:0::1;43930:4;43907:27:::0;;::::1;::::0;;;43949:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;43949:23:0::1;::::0;;::::1;::::0;;43509:475::o;16687:260::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;16780:22:0;::::1;16772:73;;;;-1:-1:-1::0;;;16772:73:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16886:6;::::0;;16865:38:::1;::::0;-1:-1:-1;;;;;16865:38:0;;::::1;::::0;16886:6;::::1;::::0;-1:-1:-1;;;;;;;;;;;16865:38:0;::::1;16918:6;:17:::0;;-1:-1:-1;;;;;;16918:17:0::1;-1:-1:-1::0;;;;;16918:17:0;;;::::1;::::0;;;::::1;::::0;;16687:260::o;51635:177::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;51722:21:::1;51758:42;51722:21:::0;51758:22:::1;:42::i;59866:118::-:0;59951:21;59866:118;:::o;43996:522::-;15901:12;:10;:12::i;:::-;15891:6;;-1:-1:-1;;;;;15891:6:0;;;:22;;;15883:67;;;;;-1:-1:-1;;;15883:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;15883:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;44081:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;44073:60;;;::::0;;-1:-1:-1;;;44073:60:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;;;;;;;;;;;;;::::1;;44153:9;44148:359;44172:9;:16:::0;44168:20;::::1;44148:359;;;44234:7;-1:-1:-1::0;;;;;44218:23:0::1;:9;44228:1;44218:12;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;44218:12:0::1;:23;44214:278;;;44281:9;44291:16:::0;;-1:-1:-1;;44291:20:0;;;44281:31;::::1;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;44266:9:::1;:12:::0;;-1:-1:-1;;;;;44281:31:0;;::::1;::::0;44276:1;;44266:12;::::1;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;44266:46:0::1;-1:-1:-1::0;;;;;44266:46:0;;::::1;;::::0;;44335:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;44378:11:::1;:20:::0;;;;:28;;-1:-1:-1;;44378:28:0::1;::::0;;44429:9:::1;:15:::0;;;::::1;;;44214:278;44190:3;;44148:359;;28685:31:::0;;;-1:-1:-1;;;28685:31:0;;;;;:::o;28596:::-;;;-1:-1:-1;;;28596:31:0;;;;;:::o;110:114::-;202:10;110:114;:::o;45300:357::-;-1:-1:-1;;;;;45397:19:0;;45389:68;;;;-1:-1:-1;;;45389:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45480:21:0;;45472:68;;;;-1:-1:-1;;;45472:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45557:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;45613:32;;;;;;;;;;;;;;;;;45300:357;;;:::o;45669:4790::-;45775:7;:5;:7::i;:::-;-1:-1:-1;;;;;45765:17:0;:6;-1:-1:-1;;;;;45765:17:0;;;:41;;;;;45799:7;:5;:7::i;:::-;-1:-1:-1;;;;;45786:20:0;:9;-1:-1:-1;;;;;45786:20:0;;;45765:41;45762:314;;;-1:-1:-1;;;;;45831:20:0;;45823:70;;;;-1:-1:-1;;;45823:70:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;45916:23:0;;45908:71;;;;-1:-1:-1;;;45908:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46011:1;46002:6;:10;45994:64;;;;-1:-1:-1;;;45994:64:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46117:7;:5;:7::i;:::-;-1:-1:-1;;;;;46107:17:0;:6;-1:-1:-1;;;;;46107:17:0;;;:41;;;;;46141:7;:5;:7::i;:::-;-1:-1:-1;;;;;46128:20:0;:9;-1:-1:-1;;;;;46128:20:0;;;46107:41;:71;;;;;46165:13;-1:-1:-1;;;;;46152:26:0;:9;-1:-1:-1;;;;;46152:26:0;;;46107:71;:139;;;;-1:-1:-1;;;;;;46182:64:0;;46203:42;46182:64;;46107:139;:195;;;;;46286:15;-1:-1:-1;;;;;46265:37:0;:9;-1:-1:-1;;;;;46265:37:0;;;46107:195;46104:350;;;46369:11;;46336:29;46354:9;46336;:29::i;:::-;46327:6;:38;:53;;46319:118;;;;-1:-1:-1;;;46319:118:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46509:7;:5;:7::i;:::-;-1:-1:-1;;;;;46499:17:0;:6;-1:-1:-1;;;;;46499:17:0;;;:41;;;;;46533:7;:5;:7::i;:::-;-1:-1:-1;;;;;46520:20:0;:9;-1:-1:-1;;;;;46520:20:0;;;46499:41;46496:138;;;46577:12;;46567:6;:22;;46559:75;;;;-1:-1:-1;;;46559:75:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;46662:20:0;;;;;;:9;:20;;;;;;;;46661:21;46653:57;;;;;-1:-1:-1;;;46653:57:0;;;;;;;;;;;;-1:-1:-1;;;46653:57:0;;;;;;;;;;;;;;;46749:10;46739:21;;;;:9;:21;;;;;;;;46738:22;46730:58;;;;;-1:-1:-1;;;46730:58:0;;;;;;;;;;;;-1:-1:-1;;;46730:58:0;;;;;;;;;;;;;;;46852:7;:5;:7::i;:::-;-1:-1:-1;;;;;46842:17:0;:6;-1:-1:-1;;;;;46842:17:0;;;:41;;;;;46876:7;:5;:7::i;:::-;-1:-1:-1;;;;;46863:20:0;:9;-1:-1:-1;;;;;46863:20:0;;;46842:41;46839:1299;;;46907:11;;-1:-1:-1;;;46907:11:0;;;;46902:283;;-1:-1:-1;;;;;46945:23:0;;46963:4;46945:23;;:53;;-1:-1:-1;;;;;;46972:26:0;;46993:4;46972:26;46945:53;:100;;;;47037:7;:5;:7::i;:::-;-1:-1:-1;;;;;47019:26:0;:6;-1:-1:-1;;;;;47019:26:0;;46945:100;:133;;;;47070:7;:5;:7::i;:::-;-1:-1:-1;;;;;47049:29:0;:9;-1:-1:-1;;;;;47049:29:0;;46945:133;46939:231;;47112:11;;-1:-1:-1;;;47112:11:0;;;;47104:46;;;;;-1:-1:-1;;;47104:46:0;;;;;;;;;;;;-1:-1:-1;;;47104:46:0;;;;;;;;;;;;;;;47205:11;;-1:-1:-1;;;47205:11:0;;;;47201:536;;;-1:-1:-1;;;;;47263:23:0;;47281:4;47263:23;;;;:74;;-1:-1:-1;;;;;;47311:26:0;;47332:4;47311:26;;47263:74;:133;;;;;47380:15;-1:-1:-1;;;;;47362:34:0;:6;-1:-1:-1;;;;;47362:34:0;;;47263:133;:195;;;;;47442:15;-1:-1:-1;;;;;47421:37:0;:9;-1:-1:-1;;;;;47421:37:0;;;47263:195;47237:485;;;47559:15;-1:-1:-1;;;;;47535:40:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;47535:40:0;;:98;;;;47620:13;-1:-1:-1;;;;;47604:29:0;:12;:10;:12::i;:::-;-1:-1:-1;;;;;47604:29:0;;47535:98;47501:201;;;;;-1:-1:-1;;;47501:201:0;;;;;;;;;;;;-1:-1:-1;;;47501:201:0;;;;;;;;;;;;;;;47775:10;;47788:9;47775:22;47757:15;:40;47753:370;;;47832:13;-1:-1:-1;;;;;47822:23:0;:6;-1:-1:-1;;;;;47822:23:0;;;:105;;;;-1:-1:-1;;;;;;47866:61:0;;47884:42;47866:61;;47822:105;:164;;;;;47970:15;-1:-1:-1;;;;;47952:34:0;:6;-1:-1:-1;;;;;47952:34:0;;;47822:164;47818:290;;;-1:-1:-1;;;;;48011:17:0;;;;;;:9;:17;;;;;:24;;-1:-1:-1;;48011:24:0;48031:4;48011:24;;;;;;48058:17;:30;;;;;;;;;;;;;;-1:-1:-1;;;;;;48058:30:0;;;;;;47818:290;48457:28;48488:24;48506:4;48488:9;:24::i;:::-;48457:55;;48568:12;;48544:20;:36;48541:124;;-1:-1:-1;48637:12:0;;48541:124;48744:38;;48802:6;;48720:62;;;;;-1:-1:-1;;;48802:6:0;;;;48801:7;:22;;;;-1:-1:-1;48812:11:0;;-1:-1:-1;;;48812:11:0;;;;48801:22;:45;;;;;48827:19;48801:45;:72;;;;;48860:13;-1:-1:-1;;;;;48850:23:0;:6;-1:-1:-1;;;;;48850:23:0;;;48801:72;48797:470;;;48993:38;49010:20;48993:16;:38::i;:::-;49097:21;49140:22;;49137:115;;49187:45;49210:21;49187:22;:45::i;:::-;48797:470;;-1:-1:-1;;;;;49499:26:0;;49360:12;49499:26;;;:18;:26;;;;;;49375:4;;49499:26;;;:59;;-1:-1:-1;;;;;;49529:29:0;;;;;;:18;:29;;;;;;;;49499:59;49496:793;;;-1:-1:-1;49588:5:0;49496:793;;;49675:13;-1:-1:-1;;;;;49665:23:0;:6;-1:-1:-1;;;;;49665:23:0;;:61;;;;49710:15;-1:-1:-1;;;;;49692:34:0;:6;-1:-1:-1;;;;;49692:34:0;;49665:61;49662:279;;;49746:14;:12;:14::i;:::-;49789:10;;49779:7;:20;49833:15;;49818:12;:30;49887:20;;49867:17;:40;49662:279;49992:13;-1:-1:-1;;;;;49979:26:0;:9;-1:-1:-1;;;;;49979:26:0;;:67;;;;50030:15;-1:-1:-1;;;;;50009:37:0;:9;-1:-1:-1;;;;;50009:37:0;;49979:67;49976:288;;;50066:14;:12;:14::i;:::-;50109:11;;50099:7;:21;50154:16;;50139:12;:31;50209:21;;50189:17;:41;49976:288;50384:47;50399:6;50406:9;50416:6;50423:7;50384:14;:47::i;:::-;45669:4790;;;;;;:::o;4637:208::-;4723:7;4763:12;4755:6;;;;4747:29;;;;-1:-1:-1;;;4747:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4803:5:0;;;4637:208::o;58838:175::-;58879:7;58904:15;58921;58940:19;:17;:19::i;:::-;58903:56;;-1:-1:-1;58903:56:0;-1:-1:-1;58981:20:0;58903:56;;58981:11;:20::i;:::-;58974:27;;;;58838:175;:::o;6167:140::-;6225:7;6256:39;6260:1;6263;6256:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6249:46;6167:140;-1:-1:-1;;;6167:140:0:o;3640:197::-;3698:7;3734:5;;;3762:6;;;;3754:46;;;;;-1:-1:-1;;;3754:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;56764:530;56823:7;56832;56841;56850;56859;56868;56877;56902:23;56927:12;56941:22;56965:18;56987:62;56999:7;57008;;57017:17;;57036:12;;56987:11;:62::i;:::-;56901:148;;;;;;;;57080:15;57097:23;57122:12;57138:25;57150:7;57158:4;57138:11;:25::i;:::-;57079:84;;-1:-1:-1;57079:84:0;-1:-1:-1;57079:84:0;-1:-1:-1;57232:15:0;;-1:-1:-1;57249:4:0;;-1:-1:-1;57255:14:0;;-1:-1:-1;57271:10:0;-1:-1:-1;;;;56764:530:0;;;;;;;;;:::o;4155:144::-;4213:7;4244:43;4248:1;4251;4244:43;;;;;;;;;;;;;;;;;:3;:43::i;50471:656::-;29185:6;:13;;-1:-1:-1;;;;29185:13:0;-1:-1:-1;;;29185:13:0;;;50640:16:::1;::::0;;50654:1:::1;50640:16:::0;;;50616:21:::1;50640:16:::0;;::::1;::::0;;50616:21;50640:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;50640:16:0::1;50616:40;;50689:4;50671;50676:1;50671:7;;;;;;;;;;;;;:23;-1:-1:-1::0;;;;;50671:23:0::1;;;-1:-1:-1::0;;;;;50671:23:0::1;;;::::0;::::1;50719:15;-1:-1:-1::0;;;;;50719:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;50719:22:0;50709:7;;:4;;50714:1:::1;::::0;50709:7;::::1;;;;;;;;;;:32;-1:-1:-1::0;;;;;50709:32:0::1;;;-1:-1:-1::0;;;;;50709:32:0::1;;;::::0;::::1;50758:62;50775:4;50790:15;50808:11;50758:8;:62::i;:::-;50867:15;-1:-1:-1::0;;;;;50867:66:0::1;;50952:11;50982:1;51030:4;51061;51085:15;50867:248;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;50867:248:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;::::1;::::0;;;::::1;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;29229:6:0;:14;;-1:-1:-1;;;;29229:14:0;;;-1:-1:-1;;;;50471:656:0:o;51147:130::-;51218:27;;:44;;-1:-1:-1;;;;;51218:27:0;;;;:44;;;;;51255:6;;51218:27;:44;:27;:44;51255:6;51218:27;:44;;;;;;;;;;;;;;;;;;;44530:400;44580:7;;:12;:38;;;;-1:-1:-1;44596:17:0;;:22;44580:38;:59;;;;-1:-1:-1;44622:12:0;;:17;44580:59;44577:71;;;44641:7;;44577:71;44694:7;;;44676:15;:25;44744:17;;;44716:25;:45;44799:12;;;44776:20;:35;-1:-1:-1;44840:11:0;;;;44866:21;;;;44902:16;44530:400;:::o;51950:871::-;52066:7;52062:44;;52092:14;:12;:14::i;:::-;-1:-1:-1;;;;;52129:19:0;;;;;;:11;:19;;;;;;;;:46;;;;-1:-1:-1;;;;;;52153:22:0;;;;;;:11;:22;;;;;;;;52152:23;52129:46;52125:637;;;52196:48;52218:6;52226:9;52237:6;52196:21;:48::i;:::-;52125:637;;;-1:-1:-1;;;;;52271:19:0;;;;;;:11;:19;;;;;;;;52270:20;:46;;;;-1:-1:-1;;;;;;52294:22:0;;;;;;:11;:22;;;;;;;;52270:46;52266:496;;;52337:46;52357:6;52365:9;52376:6;52337:19;:46::i;52266:496::-;-1:-1:-1;;;;;52410:19:0;;;;;;:11;:19;;;;;;;;52409:20;:47;;;;-1:-1:-1;;;;;;52434:22:0;;;;;;:11;:22;;;;;;;;52433:23;52409:47;52405:357;;;52477:44;52495:6;52503:9;52514:6;52477:17;:44::i;52405:357::-;-1:-1:-1;;;;;52547:19:0;;;;;;:11;:19;;;;;;;;:45;;;;-1:-1:-1;;;;;;52570:22:0;;;;;;:11;:22;;;;;;;;52547:45;52543:219;;;52613:48;52635:6;52643:9;52654:6;52613:21;:48::i;52543:219::-;52702:44;52720:6;52728:9;52739:6;52702:17;:44::i;:::-;52794:15;:13;:15::i;:::-;51950:871;;;;:::o;59025:601::-;59126:7;;59166;;59075;;;;;59194:305;59218:9;:16;59214:20;;59194:305;;;59288:7;59264;:21;59272:9;59282:1;59272:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;59272:12:0;59264:21;;;;;;;;;;;;;:31;;:66;;;59323:7;59299;:21;59307:9;59317:1;59307:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;59307:12:0;59299:21;;;;;;;;;;;;;:31;59264:66;59260:97;;;59340:7;;59349;;59332:25;;;;;;;;;59260:97;59386:34;59398:7;:21;59406:9;59416:1;59406:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;59406:12:0;59398:21;;;;;;;;;;;;;59386:7;;:11;:34::i;:::-;59376:44;;59449:34;59461:7;:21;59469:9;59479:1;59469:12;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;59469:12:0;59461:21;;;;;;;;;;;;;59449:7;;:11;:34::i;:::-;59439:44;-1:-1:-1;59236:3:0;;59194:305;;;-1:-1:-1;59539:7:0;;59527;;:20;;:11;:20::i;:::-;59517:7;:30;59513:61;;;59557:7;;59566;;59549:25;;;;;;;;59513:61;59597:7;;-1:-1:-1;59606:7:0;-1:-1:-1;59025:601:0;;;:::o;6844:298::-;6930:7;6969:12;6962:5;6954:28;;;;-1:-1:-1;;;6954:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6997:9;7013:1;7009;:5;;;;;;;6844:298;-1:-1:-1;;;;;6844:298:0:o;57686:527::-;57810:7;;;;;57889:28;57913:3;57889:19;:7;57901:6;57889:11;:19::i;:::-;:23;;:28::i;:::-;57874:43;-1:-1:-1;57932:22:0;57957:38;57991:3;57957:29;:7;57969:16;57957:11;:29::i;:38::-;57932:63;-1:-1:-1;58010:21:0;58034:34;58064:3;58034:25;:7;58046:12;58034:11;:25::i;:34::-;58010:58;;58105:56;58118:7;58126:14;58141:13;58156:4;58105:12;:56::i;:::-;58097:104;58164:4;;-1:-1:-1;58170:14:0;;-1:-1:-1;58164:4:0;-1:-1:-1;57686:527:0;-1:-1:-1;;;;;57686:527:0:o;57314:358::-;57387:7;57396;57405;57432:19;57455:10;:8;:10::i;:::-;57432:33;;57495:15;57512:23;57537:12;57553:39;57565:7;57574:4;57580:11;57553;:39::i;:::-;57494:98;;-1:-1:-1;57494:98:0;-1:-1:-1;57494:98:0;-1:-1:-1;;;;;57314:358:0;;;;;:::o;54147:672::-;54254:15;54271:23;54296:12;54310:23;54335:12;54349:22;54372:18;54394:19;54405:7;54394:10;:19::i;:::-;54253:160;;;;;;;;;;;;;;54448:28;54468:7;54448;:15;54456:6;-1:-1:-1;;;;;54448:15:0;-1:-1:-1;;;;;54448:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;54430:15:0;;;;;;:7;:15;;;;;;;;:46;;;;54509:7;:15;;;;:28;;54529:7;54509:19;:28::i;:::-;-1:-1:-1;;;;;54491:15:0;;;;;;;:7;:15;;;;;;:46;;;;54573:18;;;;;;;:39;;54596:15;54573:22;:39::i;:::-;-1:-1:-1;;;;;54552:18:0;;;;;;:7;:18;;;;;:60;54628:34;54647:14;54628:18;:34::i;:::-;54677:26;54692:10;54677:14;:26::i;:::-;54720:23;54732:4;54738;54720:11;:23::i;:::-;54780:9;-1:-1:-1;;;;;54763:44:0;54772:6;-1:-1:-1;;;;;54763:44:0;;54791:15;54763:44;;;;;;;;;;;;;;;;;;54147:672;;;;;;;;;;:::o;53450:685::-;53555:15;53572:23;53597:12;53611:23;53636:12;53650:22;53673:18;53695:19;53706:7;53695:10;:19::i;:::-;53554:160;;;;;;;;;;;;;;53747:28;53767:7;53747;:15;53755:6;-1:-1:-1;;;;;53747:15:0;-1:-1:-1;;;;;53747:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;53729:15:0;;;;;;;:7;:15;;;;;;;;:46;;;;53811:18;;;;;:7;:18;;;;;:39;;53834:15;53811:22;:39::i;:::-;-1:-1:-1;;;;;53790:18:0;;;;;;:7;:18;;;;;;;;:60;;;;53886:7;:18;;;;:39;;53909:15;53886:22;:39::i;52833:605::-;52936:15;52953:23;52978:12;52992:23;53017:12;53031:22;53054:18;53076:19;53087:7;53076:10;:19::i;:::-;52935:160;;;;;;;;;;;;;;53128:28;53148:7;53128;:15;53136:6;-1:-1:-1;;;;;53128:15:0;-1:-1:-1;;;;;53128:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;54831:747::-;54938:15;54955:23;54980:12;54994:23;55019:12;55033:22;55056:18;55078:19;55089:7;55078:10;:19::i;:::-;54937:160;;;;;;;;;;;;;;55130:28;55150:7;55130;:15;55138:6;-1:-1:-1;;;;;55130:15:0;-1:-1:-1;;;;;55130:15:0;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;-1:-1:-1;;;;;55112:15:0;;;;;;:7;:15;;;;;;;;:46;;;;55191:7;:15;;;;:28;;55211:7;55191:19;:28::i;44946:195::-;45004:15;;44994:7;:25;45054;;45034:17;:45;45109:20;;45094:12;:35;44946:195::o;5139:511::-;5197:7;5458:6;5454:55;;-1:-1:-1;5492:1:0;5485:8;;5454:55;5537:5;;;5541:1;5537;:5;:1;5565:5;;;;;:10;5557:56;;;;-1:-1:-1;;;5557:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;58233:227;58323:7;;58371:25;58394:1;58371:18;58387:1;58371:18;:1;58377:4;58371:5;:11::i;:::-;:15;;:18::i;:25::-;58345:51;58233:227;-1:-1:-1;;;;;;58233:227:0:o;58472:354::-;58567:7;;;;58627:24;:7;58639:11;58627;:24::i;:::-;58609:42;-1:-1:-1;58666:12:0;58681:21;:4;58690:11;58681:8;:21::i;:::-;58666:36;-1:-1:-1;58717:23:0;58743:17;:7;58666:36;58743:11;:17::i;:::-;58783:7;;;;-1:-1:-1;58809:4:0;;-1:-1:-1;58472:354:0;;-1:-1:-1;;;;;58472:354:0:o;55590:403::-;55665:19;55688:10;:8;:10::i;:::-;55665:33;-1:-1:-1;55713:22:0;55738:31;:14;55665:33;55738:18;:31::i;:::-;55825:4;55809:22;;;;:7;:22;;;;;;55713:56;;-1:-1:-1;55809:42:0;;55713:56;55809:26;:42::i;:::-;55800:4;55784:22;;;;:7;:22;;;;;;;;:67;;;;55869:11;:26;;;;;;55866:115;;;55955:4;55939:22;;;;:7;:22;;;;;;:42;;55966:14;55939:26;:42::i;:::-;55930:4;55914:22;;;;:7;:22;;;;;:67;55866:115;55590:403;;;:::o;56005:474::-;56072:19;56095:10;:8;:10::i;:::-;56072:33;-1:-1:-1;56120:18:0;56141:27;:10;56072:33;56141:14;:27::i;:::-;56243:23;;-1:-1:-1;;;;;56243:23:0;56227:41;;;;:7;:41;;;;;;56120:48;;-1:-1:-1;56227:57:0;;56120:48;56227:45;:57::i;:::-;56199:23;;;-1:-1:-1;;;;;56199:23:0;;;56183:41;;;;:7;:41;;;;;;;;:101;;;;56322:23;;;;;56302:45;;:11;:45;;;;;;;56299:168;;;56426:23;;-1:-1:-1;;;;;56426:23:0;56410:41;;;;:7;:41;;;;;;:57;;56456:10;56410:45;:57::i;:::-;56382:23;;-1:-1:-1;;;;;56382:23:0;56366:41;;;;:7;:41;;;;;:101;56005:474;;;:::o;56491:159::-;56573:7;;:17;;56585:4;56573:11;:17::i;:::-;56563:7;:27;56618:10;;:20;;56633:4;56618:14;:20::i;:::-;56605:10;:33;-1:-1:-1;;56491:159:0:o

Swarm Source

ipfs://94349ce6568210dc75ebf46407b26467e18e9e679307ca682da1589b8f639411
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.