ETH Price: $3,437.71 (-1.44%)
Gas: 9 Gwei

Token

Milady Wealth Protocol (MILADY)
 

Overview

Max Total Supply

2,100,000,000 MILADY

Holders

125

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
2,270,542.429872472101427464 MILADY

Value
$0.00
0xcdff367e0d2029478facf52eab786a97e98d1b46
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Milady

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-27
*/

// SPDX-License-Identifier: MIT

// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMK:. .'cx0XWMMMMMMMMMMM
// MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMO'      .,:oxOXWMMMMMM
// MMMMMMMMMMMMMMMMWXKOxolclxXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW0xoc;'.      .;oONMMM
// MMMMMMMMMMMMN0xc;..      'OMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWNKOxoc;..  .:kNM
// MMMMMMMMMW0o,.     ..';coONMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWN0xc' .:0
// MMMMMMMWO:.  .';ldk0XNWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWXx,.'
// MMMMMWO:. .,o0NWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNko
// MMMWOc. .;kNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWXkolc::coONMMMMMMM
// MW0c. .;kNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMXd'..       ;OWMMMMM
// Nd. .:kNMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMW0; .o0o.      .xWMMMM
// c..:ONMMMMMMMMMMMWNXXXNWWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWk.  'OMX:    .'..kWMMM
// ',xNMMMMMMMMMNOdc;,...',:okXWMMMMMMMMMMMMMMMMMMMMMMMMMMMMO'   .cko.    .:'.,OMMM
// KXWMMMMMMMW0o,. ...        'dXMMMMMMMMMMMMMMMMMMMMMMMMMMWl..           'l;:oOWMM
// MMMMMMMMNO:.  .lOKo.         ;0WMMMMMMMMMMMMMMMMMMMMMMMMX;.:'          ;l,kWMMMM
// MMMMMMWO:. .   .,;.           ;KMMMMMMMMMMMMMMMMMMMMMMMMX;.xl         .l:;0WMMMM
// MMMMMNd.  ,d,                 .oWMMMMMMMMMMMMMMMMMMMMMMMNc'kO'        :d,cXMMMMM
// MMMMWk'.,.'Ok.              ,o':XMMMMMMMMMMMMMMMMMMMMMMMMx,xNk,     ..,',kWMMMMM
// MMMMNc.dO,.dXd.            .oXl:KMMMMMMMMMMMMMMMMMMMMMMMMKccXWKd,...,c'.lNMMMMMM
// MMMMNxxXNo.,ONx.           .xWd:0MMMMMMMMMMMMMMMMMMMMMMMMMKdox0XXKKXO;.lXMMMMMMM
// MMMMMMMMMXc.:0N0c.       .,',d:lNMMMMMMMMMMMMMMMMMMMMMMMMMMWXOxdodddc;dXMMMMMMMM
// MMMMMMMMMMKc.,kNN0dc:;;:..xl..;0MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWKOxl::dXMMMMMMMM
// MMMMMMMMMMMNx;.;xXWMWWWNx,'..;OWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMWXNWMMMMMMMM
// MMMMMMMMMMMMMNk:.'cx0XNXOc.'oXMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMO,   .';::cdKWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
// MMMMMMMMMMMMMMMXd,..,cd0XWMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM

// Milady Wealth Protocol (MILADY)
// Milady Wealth Protocol aims to restore balance to the network through reflections, creating an everflowing river of abundance.
// Telegram: https://t.me/miladyprotocol
// Twitter: https://twitter.com/miladyprotocol
// Website: https://miladyprotocol.com

// File: @openzeppelin/contracts/utils/math/SafeMath.sol


// OpenZeppelin Contracts (last updated v4.9.0) (utils/math/SafeMath.sol)

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // 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 (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @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) {
        return a + b;
    }

    /**
     * @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 a - b;
    }

    /**
     * @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) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting 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 a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * 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) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @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);

    /**
     * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        uint256 amount
    ) external returns (bool);
}

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Pair.sol

pragma solidity >=0.5.0;

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

// File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.5.0;

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol

pragma solidity >=0.6.2;

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

// File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol

pragma solidity >=0.6.2;


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

// File: contracts/Milady.sol



pragma solidity ^0.8.19;


contract Milady is IERC20, Ownable {
    using SafeMath for uint256;
    /* -------------------------------------------------------------------------- */
    /*                                   events                                   */
    /* -------------------------------------------------------------------------- */
    event ReflectAccumulated(uint256 amountAdded, uint256 totalAmountAccumulated);
    event ReflectDistributed(uint256 amountDistributer);
    event ReflectNotification(string message);
    event ModeChanged(string mode);
    event HolderMinimumChanged(uint256 newMinimum);
    event LogInfo(string info);
    event LogError(string error);

    /* -------------------------------------------------------------------------- */
    /*                                  constants                                 */
    /* -------------------------------------------------------------------------- */
    address constant DEAD = 0x000000000000000000000000000000000000dEaD;
    address constant ZERO = 0x0000000000000000000000000000000000000000;

    /* -------------------------------------------------------------------------- */
    /*                                   states                                   */
    /* -------------------------------------------------------------------------- */
    IUniswapV2Router02 public constant UNISWAP_V2_ROUTER =
        IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
    address public immutable UNISWAP_V2_PAIR;

    struct Fee {
        uint8 reflection;
        uint8 milady;
        uint8 devs;
        uint128 total;
    }
    
    struct HolderInfo {
        uint256 balance;
        uint256 eventReflection;
        uint256 baseReflection;
        uint256 holdingTime;
        uint256 lastBuy;
        uint256 lastSell;
        uint256 keyIndex;
        bool isHolder;
    }

    string _name = "Milady Wealth Protocol";
    string _symbol = "MILADY";

    uint256 _totalSupply = 21e8 ether;

    uint256 public _swapThreshold = (_totalSupply * 10) / 10000;
    uint256 public _minSupplyHolding = 69e4 ether;
    uint256 public _maxWalletSize = _totalSupply / 100;

    mapping(address => uint256) public _balances;
    mapping(address => uint256) public _baseReflection;
    mapping(address => uint256) public _historyReflectionTransfered;
    mapping(address => uint256) public _holdingTime;
    mapping(address => uint256) public _lastBuy;
    mapping(address => uint256) public _lastSell;
    mapping(address => uint256) public _keyIndex;
    mapping(address => bool) public _isHolder;

    address[] public holderAddresses;

    uint256 public totalReflections = 0;
    uint256 public normalReflectedToken = 0;
    uint256 public totalRemainder = 0;

    string public currentTokenMode = "sniper";

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

    bool public enableTrading = false;
    bool public enableAutoAdjust = false;
    mapping(address => bool) public isFeeExempt;
    mapping(address => bool) public isReflectionExempt;

    Fee public sniper = Fee({reflection: 0, milady: 0, devs: 30, total: 30});
    Fee public pajeetBuy = Fee({reflection: 1, milady: 1, devs: 1, total: 3});
    Fee public pajeetSell = Fee({reflection: 4, milady: 2, devs: 3, total: 9});
    Fee public milady = Fee({reflection: 2, milady: 1, devs: 2, total: 5});

    Fee public buyFee;
    Fee public sellFee;

    address private miladyFeeReceiver;
    address private devsFeeReceiver;

    bool public claimingFees = true;
    bool inSwap;
    mapping(address => bool) public blacklists;

    /* -------------------------------------------------------------------------- */
    /*                                  modifiers                                 */
    /* -------------------------------------------------------------------------- */
    modifier swapping() {
        inSwap = true;
        _;
        inSwap = false;
    }

    /* -------------------------------------------------------------------------- */
    /*                                 constructor                                */
    /* -------------------------------------------------------------------------- */
    constructor() payable {
        // create uniswap pair
        address _uniswapPair = IUniswapV2Factory(UNISWAP_V2_ROUTER.factory()).createPair(address(this), UNISWAP_V2_ROUTER.WETH());
        UNISWAP_V2_PAIR = _uniswapPair;

        _allowances[address(this)][address(UNISWAP_V2_ROUTER)] = type(uint256).max;
        _allowances[address(this)][msg.sender] = type(uint256).max;

        miladyFeeReceiver = address(0x11bd6E7e5409d0Aad2e952d5703Efc5B7dA9348B);
        devsFeeReceiver = address(0x4352e0152413b57a530f1BC7daFe1e539133baCD);

        isFeeExempt[msg.sender] = true;
        isFeeExempt[miladyFeeReceiver] = true;
        isFeeExempt[devsFeeReceiver] = true;
        isFeeExempt[ZERO] = true;
        isFeeExempt[DEAD] = true;

        isReflectionExempt[address(this)] = true;
        isReflectionExempt[address(UNISWAP_V2_ROUTER)] = true;
        isReflectionExempt[_uniswapPair] = true;
        isReflectionExempt[msg.sender] = true;
        isReflectionExempt[miladyFeeReceiver] = true;
        isReflectionExempt[devsFeeReceiver] = true;
        isReflectionExempt[ZERO] = true;
        isReflectionExempt[DEAD] = true;

        buyFee = sniper;
        sellFee = sniper;

        _balances[address(this)] = _totalSupply;
        emit Transfer(address(0), address(this), _totalSupply);

        emit ModeChanged(currentTokenMode);
    }

    receive() external payable {}

    /* -------------------------------------------------------------------------- */
    /*                                    ERC20                                   */
    /* -------------------------------------------------------------------------- */
    function approve(address spender, uint256 amount) public override returns (bool) {
        _allowances[msg.sender][spender] = amount;
        emit Approval(msg.sender, spender, amount);
        return true;
    }

    function approveMax(address spender) external returns (bool) {
        return approve(spender, type(uint256).max);
    }

    function transfer(address recipient, uint256 amount) external override returns (bool) {
        return _transferFrom(msg.sender, recipient, amount);
    }

    function transferFrom(address sender, address recipient, uint256 amount) external override returns (bool) {
        if (_allowances[sender][msg.sender] != type(uint256).max) {
            require(_allowances[sender][msg.sender] >= amount, "ERC20: insufficient allowance");
            _allowances[sender][msg.sender] = _allowances[sender][msg.sender] - amount;
        }

        return _transferFrom(sender, recipient, amount);
    }

    /* -------------------------------------------------------------------------- */
    /*                                    views                                   */
    /* -------------------------------------------------------------------------- */
    function totalSupply() external view override returns (uint256) {
        return _totalSupply;
    }

    function decimals() external pure returns (uint8) {
        return 18;
    }

    function name() external view returns (string memory) {
        return _name;
    }

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

    function balanceOf(address account) public view override returns (uint256) {
        uint256 balanceNormalReflection = 0;
        if (isHolder(account)){
            if (holderAddresses.length > 0 && normalReflectedToken > 0) {
                uint256 baseReflection = 0;
                if (_baseReflection[account] > 0) {
                    baseReflection = _baseReflection[account];
                }
                uint256 calculatePersonnalReflection = normalReflectedToken / holderAddresses.length;
                if (calculatePersonnalReflection > baseReflection) {
                    balanceNormalReflection = calculatePersonnalReflection - baseReflection;
                }
            }
        }

        uint256 totalBalance = _balances[account];
        if (balanceNormalReflection > 0) {
            totalBalance += balanceNormalReflection;
        }

        return totalBalance;
    }

    function getHolderNormalReflection(address account) public view returns (uint256) {
        uint256 balanceNormalReflection = 0;
        if (isHolder(account)){
            if (holderAddresses.length > 0 && normalReflectedToken > 0) {
                uint256 baseReflection = 0;
                if (_baseReflection[account] > 0) {
                    baseReflection = _baseReflection[account];
                }
                uint256 calculatePersonnalReflection = normalReflectedToken / holderAddresses.length;
                if (calculatePersonnalReflection > baseReflection) {
                    balanceNormalReflection = calculatePersonnalReflection - baseReflection;
                }
            }
        }
        return balanceNormalReflection;
    }

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

    function getCirculatingSupply() public view returns (uint256) {
        return _totalSupply - balanceOf(DEAD) - balanceOf(ZERO);
    }
    
    function isHolder(address holderAddress) public view returns (bool) {
        if (isReflectionExempt[holderAddress] || blacklists[holderAddress]){
            return false;
        }
        return _balances[holderAddress] >= _minSupplyHolding;
    }

    function isHolderInArray(address holderAddress) public view returns (bool) {
        return _isHolder[holderAddress];
    }

    function addressToString(address _address) internal pure returns (string memory) {
        bytes32 value = bytes32(uint256(uint160(_address)));
        bytes memory alphabet = "0123456789abcdef";
        bytes memory str = new bytes(42);
        str[0] = '0';
        str[1] = 'x';
        for (uint256 i = 0; i < 20; i++) {
            str[2 + i * 2] = alphabet[uint8(value[i + 12] >> 4)];
            str[3 + i * 2] = alphabet[uint8(value[i + 12] & 0x0f)];
        }
        return string(str);
    }

    /* -------------------------------------------------------------------------- */
    /*                                   owners                                   */
    /* -------------------------------------------------------------------------- */

    function setMode(string calldata modeName) external {
        require(msg.sender == owner() || msg.sender == devsFeeReceiver, "setMode: Forbidden");

        if (compareStrings(modeName, "pajeet")) {
            buyFee = pajeetBuy;
            sellFee = pajeetSell;
        } else {
            // milady mode in every other cases
            buyFee = milady;
            sellFee = milady;
        }

        currentTokenMode = modeName;
        emit ModeChanged(modeName);
    }

    function getCurrentMode() external view returns (string memory) {
        return currentTokenMode;
    }

    function clearStuckBalance() external {
        require(msg.sender == owner() || msg.sender == devsFeeReceiver, "Forbidden");
        (bool success,) = payable(msg.sender).call{value: address(this).balance}("");
        require(success);
    }
    function clearStuckToken() external {
        require(msg.sender == owner() || msg.sender == devsFeeReceiver, "Forbidden");
        _transferFrom(address(this), msg.sender, balanceOf(address(this)));
    }

    function setSwapBackSettings(bool _enabled, uint256 _pt) external onlyOwner {
        claimingFees = _enabled;
        _swapThreshold = (_totalSupply * _pt) / 10000;
    }

    function manualSwapBack() external onlyOwner {
        if (_shouldSwapBack()) {
            _swapBack();
        }
    }

    function startTrading() external onlyOwner {
        UNISWAP_V2_ROUTER.addLiquidityETH{value: address(this).balance}(address(this),balanceOf(address(this)),0,0,owner(),block.timestamp);
        enableTrading = true;
    }

    function setIsFeeExempt(address holder, bool exempt) external onlyOwner {
        isFeeExempt[holder] = exempt;
    }

    function setIsReflectionExempt(address holder, bool exempt) external onlyOwner {
        isReflectionExempt[holder] = exempt;
    }

    function setEnableAutoAdjust(bool e_) external onlyOwner {
        enableAutoAdjust = e_;
    }

    function blacklist(address _address, bool _isBlacklisting) external onlyOwner {
        blacklists[_address] = _isBlacklisting;
    }

    function sendAutoAdjustHolding() external onlyOwner {
        adjustMinimumHolding();
    }

    function removeLimits() external onlyOwner{
        _maxWalletSize = _totalSupply;
        _swapThreshold = (_totalSupply * 2) / 10000;
    }

    /* -------------------------------------------------------------------------- */
    /*                                   private                                  */
    /* -------------------------------------------------------------------------- */

    function adjustMinimumHolding() internal {
        address[] memory path = new address[](2);
        path[0] = UNISWAP_V2_ROUTER.WETH();
        path[1] = address(this);

        uint256[] memory amounts = UNISWAP_V2_ROUTER.getAmountsOut(0.05 ether, path);

        uint256 amountAdjusted = amounts[1];

        _minSupplyHolding = amountAdjusted;
    }

    function _claim(address holder) internal {
        uint256 balanceNormalReflection = 0;
        if (isHolder(holder)){
            if (holderAddresses.length > 0 && normalReflectedToken > 0) {
                uint256 baseReflection = 0;
                if (_baseReflection[holder] > 0) {
                    baseReflection = _baseReflection[holder];
                }
                uint256 calculatePersonnalReflection = normalReflectedToken / holderAddresses.length;
                if (calculatePersonnalReflection > baseReflection) {
                    balanceNormalReflection = calculatePersonnalReflection - baseReflection;
                }
            }
        }

        uint256 totalBalance = _balances[holder];
        if (balanceNormalReflection > 0) {
            totalBalance += balanceNormalReflection;
        }
        uint256 amountReflection = balanceNormalReflection;
        if (amountReflection > 0){
            _basicTransfer(address(this), holder, amountReflection);
            _historyReflectionTransfered[holder] = _historyReflectionTransfered[holder] + amountReflection;
            if (balanceNormalReflection > 0) {
                _baseReflection[holder] = _baseReflection[holder] + balanceNormalReflection;
                normalReflectedToken -= balanceNormalReflection;
            }
        }
    }

    function _transferFrom(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(!blacklists[recipient] && !blacklists[sender], "Blacklisted");
        require(amount > 0, "Transfer amount must be greater than zero");
        require(sender != DEAD && sender != ZERO, "Please use a good address");

        if (recipient != UNISWAP_V2_PAIR && recipient != address(this)) {
            require(balanceOf(recipient) + amount <= _maxWalletSize, "Exceeds max wallet size");
        }

        if (inSwap) {
            return _basicTransfer(sender, recipient, amount);
        }

        if (!enableTrading) {
            if (sender == address(this) || sender == owner() || sender == devsFeeReceiver){
                emit LogInfo("bypass enableTrading");
                return _basicTransfer(sender, recipient, amount);
            } else {
                revert(string(abi.encodePacked("Trading not enabled yet, please wait. Sender: ", addressToString(sender), " Recipient: ", addressToString(recipient))));
            }
        } else {
            if (sender == owner() || sender == devsFeeReceiver){
                return _basicTransfer(sender, recipient, amount);
            }
        }

        if (_shouldSwapBack()) {
            _swapBack();
        }

        if (!isReflectionExempt[sender]){
            _claim(sender);
        }

        require(_balances[sender] >= amount, "Insufficient Real Balance");
        _balances[sender] = _balances[sender] - amount;

        updateStateHolder(sender);

        if (sender != UNISWAP_V2_PAIR) { // WHEN SELL
            _lastSell[sender] = block.timestamp;
        }

        uint256 fees = _takeFees(sender, recipient, amount);
        uint256 amountWithoutFees = amount;
        if (fees > 0) {
            amountWithoutFees -= fees;
            _balances[address(this)] = _balances[address(this)] + fees;
            emit Transfer(sender, address(this), fees);
        }

        _balances[recipient] = _balances[recipient] + amountWithoutFees;
        
        updateStateHolder(recipient);

        if (sender == UNISWAP_V2_PAIR) { // WHEN BUY
            _lastBuy[recipient] = block.timestamp;
        }

        emit Transfer(sender, recipient, amountWithoutFees);
        if (sender == UNISWAP_V2_PAIR || recipient == UNISWAP_V2_PAIR) { 
            if (enableAutoAdjust) {
                adjustMinimumHolding();
            }
        }
        return true;
    }

    function _basicTransfer(address sender, address recipient, uint256 amount) internal returns (bool) {
        require(_balances[sender] >= amount, "Insufficient Balance");
        _balances[sender] = _balances[sender] - amount;
        updateStateHolder(sender);
        _balances[recipient] = _balances[recipient] + amount;
        updateStateHolder(recipient);
        _lastBuy[recipient] = block.timestamp;
        emit Transfer(sender, recipient, amount);
        if (sender == UNISWAP_V2_PAIR || recipient == UNISWAP_V2_PAIR) { 
            if (enableAutoAdjust) {
                adjustMinimumHolding();
            }
        }
        return true;
    }

    function _takeFees(address sender, address recipient, uint256 amount) internal returns (uint256) {
        uint256 fees = 0;
        Fee memory __buyFee = buyFee;
        Fee memory __sellFee = sellFee;
        if(_shouldTakeFee(sender, recipient))
        {
            uint256 proportionReflected = 0;
            if (sender == UNISWAP_V2_PAIR) {
                fees = amount.mul(__buyFee.total).div(100);
                proportionReflected = fees.mul(__buyFee.reflection).div(__buyFee.total);
            } else {
                fees = amount.mul(__sellFee.total).div(100);
                proportionReflected = fees.mul(__sellFee.reflection).div(__sellFee.total);
            }

            if (proportionReflected > 0) {
                totalReflections += proportionReflected;
                normalReflectedToken += proportionReflected;
                emit ReflectAccumulated(proportionReflected, totalReflections);
            }
        }
        return fees;
    }

    function _checkBalanceForSwapping() internal view returns (bool) {
        uint256 totalBalance = _balances[address(this)];
        uint256 totalToSub = normalReflectedToken + totalRemainder;
        if (totalToSub > totalBalance) {
            return false;
        }
        totalBalance -= totalToSub;
        return totalBalance >= _swapThreshold;
    }

    function _shouldSwapBack() internal view returns (bool) {
        return msg.sender != UNISWAP_V2_PAIR && !inSwap && claimingFees && _checkBalanceForSwapping();
    }

    function _swapBack() internal swapping {
        Fee memory __sellFee = sellFee;

        uint256 amountToSwap = _swapThreshold;
        approve(address(UNISWAP_V2_ROUTER), amountToSwap);

        // swap
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = UNISWAP_V2_ROUTER.WETH();

        UNISWAP_V2_ROUTER.swapExactTokensForETHSupportingFeeOnTransferTokens(
            amountToSwap, 0, path, address(this), block.timestamp
        );

        uint256 amountETH = address(this).balance;

        uint256 totalSwapFee = __sellFee.total - __sellFee.reflection;
        uint256 amountETHMilady = amountETH * __sellFee.milady / totalSwapFee;
        uint256 amountETHDevs = amountETH * __sellFee.devs / totalSwapFee;

        // send
        if (amountETHMilady > 0) {
            (bool tmpSuccess,) = payable(miladyFeeReceiver).call{value: amountETHMilady}("");
        }
        if (amountETHDevs > 0) {
            (bool tmpSuccess,) = payable(devsFeeReceiver).call{value: amountETHDevs}("");
        }
    }

    function _shouldTakeFee(address sender, address recipient) internal view returns (bool) {
        return !isFeeExempt[sender] && !isFeeExempt[recipient];
    }

    function compareStrings(string memory a, string memory b) internal pure returns (bool) {
        return keccak256(bytes(a)) == keccak256(bytes(b));
    }

    /* -------------------------------------------------------------------------- */
    /*                                   public                                   */
    /* -------------------------------------------------------------------------- */

    function updateStateHolder(address holder) public {
        if (!isReflectionExempt[holder]){
            if (isHolder(holder)){
                if (_isHolder[holder] == false){
                    _isHolder[holder] = true;
                    _holdingTime[holder] = block.timestamp;
                    holderAddresses.push(holder);
                    _keyIndex[holder] = holderAddresses.length - 1;
                }
            } else {
                if (_isHolder[holder] == true){
                    _isHolder[holder] = false;
                    _holdingTime[holder] = 0;
                    _keyIndex[holderAddresses[holderAddresses.length - 1]] = _keyIndex[holder];
                    holderAddresses[_keyIndex[holder]] = holderAddresses[holderAddresses.length - 1];
                    holderAddresses.pop();
                }
            }
        }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"newMinimum","type":"uint256"}],"name":"HolderMinimumChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"error","type":"string"}],"name":"LogError","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"info","type":"string"}],"name":"LogInfo","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"mode","type":"string"}],"name":"ModeChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountAdded","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"totalAmountAccumulated","type":"uint256"}],"name":"ReflectAccumulated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amountDistributer","type":"uint256"}],"name":"ReflectDistributed","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"ReflectNotification","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"UNISWAP_V2_PAIR","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"UNISWAP_V2_ROUTER","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_baseReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_historyReflectionTransfered","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_holdingTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_keyIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_minSupplyHolding","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"approveMax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_isBlacklisting","type":"bool"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"milady","type":"uint8"},{"internalType":"uint8","name":"devs","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimingFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"clearStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentTokenMode","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"enableAutoAdjust","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCirculatingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getCurrentMode","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getHolderNormalReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"holderAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isFeeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holderAddress","type":"address"}],"name":"isHolder","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holderAddress","type":"address"}],"name":"isHolderInArray","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReflectionExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwapBack","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"milady","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"milady","type":"uint8"},{"internalType":"uint8","name":"devs","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"normalReflectedToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pajeetBuy","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"milady","type":"uint8"},{"internalType":"uint8","name":"devs","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pajeetSell","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"milady","type":"uint8"},{"internalType":"uint8","name":"devs","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"milady","type":"uint8"},{"internalType":"uint8","name":"devs","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sendAutoAdjustHolding","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"e_","type":"bool"}],"name":"setEnableAutoAdjust","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"},{"internalType":"bool","name":"exempt","type":"bool"}],"name":"setIsReflectionExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"modeName","type":"string"}],"name":"setMode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_pt","type":"uint256"}],"name":"setSwapBackSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sniper","outputs":[{"internalType":"uint8","name":"reflection","type":"uint8"},{"internalType":"uint8","name":"milady","type":"uint8"},{"internalType":"uint8","name":"devs","type":"uint8"},{"internalType":"uint128","name":"total","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflections","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalRemainder","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"updateStateHolder","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e0604052601660a09081527f4d696c616479205765616c74682050726f746f636f6c0000000000000000000060c0526001906200003e908262000760565b506040805180820190915260068152654d494c41445960d01b60208201526002906200006b908262000760565b506b06c9144c1c690d4cb4000000600355612710600354600a6200009091906200082c565b6200009c919062000858565b60045569921cf9965f520b4000006005556064600354620000be919062000858565b6006556000601055600060115560006012556040518060400160405280600681526020016539b734b832b960d11b81525060139081620000ff919062000760565b506015805461ffff1916905560408051608080820183526000808352602080840191909152601e838501819052606093840152601880546001600160981b0319908116631e1e000017909155845180840186526001808252818401819052818701819052600391860182905260198054841663030101011790558651808601885260048152600281860181905281890193909352600990870152601a8054841663090302041790558651948501875281855292840192909252938201526005910152601b80549091166305020102179055601f8054600160a01b60ff60a01b19909116179055620001f7620001f13390565b6200066b565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200024c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200027291906200087b565b6001600160a01b031663c9c6539630737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fa91906200087b565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af115801562000348573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200036e91906200087b565b6001600160a01b038082166080819052306000818152601460209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d8452808352818420600019908190553380865291845282852055601e80546001600160a01b03199081167311bd6e7e5409d0aad2e952d5703efc5b7da9348b178255601f8054909116734352e0152413b57a530f1bc7dafe1e539133bacd17815560168552838620805460ff19908116600190811790925583548b168852858820805482168317905582548b16885285882080548216831790557f0263c2b778d062355049effc2dece97bc6547ff8a88a3258daa512061c2153dd80548216831790557f290d80ce586bfe95e1ebf348e3ba109df813891ad867417e64d38c5a50473b5780548216831790558888526017875285882080548216831790557f6ed4a2ad7fcc8c909e132e6944330e092422b135566df0c96615e85c6f709ad8805482168317905598875284872080548a16821790559286528386208054891684179055905488168552828520805488168317905554909616835280832080548616871790557fd840e16649f6b9a295d95876f4633d3a6b10b55e8162971cf78afd886d5ec89b80548616871790557f43fedf50e12e5c047fbe3576d03ab50250348e9a6030f531ab6d4ce10f5b03038054909516909517909355601854601c80546001600160801b03630100000080850491909116026301000000600160981b03196201000080860460ff9081169091029190911662010000600160981b031961010080880484160261ffff19958616979093169687178317811682178417909555601d80549094169095171790921690921717905560035482825260079093528381208390559251939450927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91620006229190815260200190565b60405180910390a37fdfa3bc64f063fb1a0e870a075a05b582b32c293bb287f721458f31ee6a32f52860136040516200065c9190620008ad565b60405180910390a15062000940565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620006e657607f821691505b6020821081036200070757634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200075b57600081815260208120601f850160051c81016020861015620007365750805b601f850160051c820191505b81811015620007575782815560010162000742565b5050505b505050565b81516001600160401b038111156200077c576200077c620006bb565b62000794816200078d8454620006d1565b846200070d565b602080601f831160018114620007cc5760008415620007b35750858301515b600019600386901b1c1916600185901b17855562000757565b600085815260208120601f198616915b82811015620007fd57888601518255948401946001909101908401620007dc565b50858210156200081c5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b80820281158282048414176200085257634e487b7160e01b600052601160045260246000fd5b92915050565b6000826200087657634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200088e57600080fd5b81516001600160a01b0381168114620008a657600080fd5b9392505050565b6000602080835260008454620008c381620006d1565b80848701526040600180841660008114620008e75760018114620009025762000932565b60ff1985168984015283151560051b89018301955062000932565b896000528660002060005b858110156200092a5781548b82018601529083019088016200090d565b8a0184019650505b509398975050505050505050565b6080516135896200099b60003960008181610c5d01528181611b4501528181611e4001528181611f730152818161201501528181612050015281816122bc015281816127e10152818161281c0152612c6b01526135896000f3fe6080604052600436106103a65760003560e01c80636925eab7116101e7578063a9059cbb1161010d578063d85a2828116100a0578063f2357b411161006f578063f2357b4114610c0c578063f2fde38b14610c2b578063f40acc3d14610c4b578063f417fb8a14610c7f57600080fd5b8063d85a282814610b7b578063dd62ed3e14610b90578063df20fd4914610bd6578063e73cb8a814610bf657600080fd5b8063b2aff2b6116100dc578063b2aff2b614610ac5578063bc56222614610b02578063cb05f19614610b22578063d4d7b19a14610b5b57600080fd5b8063a9059cbb14610a34578063ab46628b14610a54578063b0f7ec3814610a74578063b1bd377414610a9557600080fd5b80638a8c523c1161018557806391ce311a1161015457806391ce311a1461099a57806395d89b41146109d7578063a82ed9ec146109ec578063a84fd0ed14610a1457600080fd5b80638a8c523c1461091f5780638c3fe56f146109395780638da5cb5b146109665780638f9a55c01461098457600080fd5b80636f4366ab116101c15780636f4366ab146108a857806370a08231146108d5578063715018a6146108f5578063751039fc1461090a57600080fd5b80636925eab7146108395780636a1faa98146108665780636ebcf6071461087b57600080fd5b80632b112e49116102cc578063404e51291161026a57806358967f281161023957806358967f28146107a75780635ee6d675146107d4578063658d4b7f1461080457806366eb37851461082457600080fd5b8063404e5129146107145780634706240214610734578063524ec53314610771578063571ac8b01461078757600080fd5b8063313ce567116102a6578063313ce567146106935780633307d372146106af578063364333f4146106cf5780633f4218e0146106e457600080fd5b80632b112e49146106145780632b14ca56146106295780632de508641461066657600080fd5b806314e274461161034457806321fb1f791161031357806321fb1f79146105b257806323b872dd146105c8578063276dcff9146105e8578063293230b8146105ff57600080fd5b806314e274461461051c578063153705981461055957806316c021291461056e57806318160ddd1461059d57600080fd5b8063095ea7b311610380578063095ea7b3146104715780630c9506a4146104a15780630e5a9231146104ce5780630f8c9e28146104e457600080fd5b8063018763ed146103b25780630300b50a146103db57806306fdde031461044f57600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c860105481565b6040519081526020015b60405180910390f35b3480156103e757600080fd5b506018546104189060ff8082169161010081048216916201000082041690630100000090046001600160801b031684565b6040516103d2949392919060ff94851681529284166020840152921660408201526001600160801b03909116606082015260800190565b34801561045b57600080fd5b50610464610c9f565b6040516103d29190612ea3565b34801561047d57600080fd5b5061049161048c366004612eeb565b610d31565b60405190151581526020016103d2565b3480156104ad57600080fd5b506103c86104bc366004612f17565b600b6020526000908152604090205481565b3480156104da57600080fd5b506103c860045481565b3480156104f057600080fd5b506105046104ff366004612f34565b610d9e565b6040516001600160a01b0390911681526020016103d2565b34801561052857600080fd5b50601a546104189060ff8082169161010081048216916201000082041690630100000090046001600160801b031684565b34801561056557600080fd5b50610464610dc8565b34801561057a57600080fd5b50610491610589366004612f17565b602080526000908152604090205460ff1681565b3480156105a957600080fd5b506003546103c8565b3480156105be57600080fd5b506103c860115481565b3480156105d457600080fd5b506104916105e3366004612f4d565b610dd7565b3480156105f457600080fd5b506105fd610ee4565b005b34801561060b57600080fd5b506105fd610ef6565b34801561062057600080fd5b506103c8610fd7565b34801561063557600080fd5b50601d546104189060ff8082169161010081048216916201000082041690630100000090046001600160801b031684565b34801561067257600080fd5b506103c8610681366004612f17565b600c6020526000908152604090205481565b34801561069f57600080fd5b50604051601281526020016103d2565b3480156106bb57600080fd5b506105fd6106ca366004612fa3565b61100a565b3480156106db57600080fd5b506105fd61103d565b3480156106f057600080fd5b506104916106ff366004612f17565b60166020526000908152604090205460ff1681565b34801561072057600080fd5b506105fd61072f366004612fa3565b6110f0565b34801561074057600080fd5b50601c546104189060ff8082169161010081048216916201000082041690630100000090046001600160801b031684565b34801561077d57600080fd5b506103c860055481565b34801561079357600080fd5b506104916107a2366004612f17565b611122565b3480156107b357600080fd5b506103c86107c2366004612f17565b60096020526000908152604090205481565b3480156107e057600080fd5b506104916107ef366004612f17565b600e6020526000908152604090205460ff1681565b34801561081057600080fd5b506105fd61081f366004612fa3565b611130565b34801561083057600080fd5b506105fd611163565b34801561084557600080fd5b506103c8610854366004612f17565b600a6020526000908152604090205481565b34801561087257600080fd5b50610464611180565b34801561088757600080fd5b506103c8610896366004612f17565b60076020526000908152604090205481565b3480156108b457600080fd5b506103c86108c3366004612f17565b60086020526000908152604090205481565b3480156108e157600080fd5b506103c86108f0366004612f17565b61120e565b34801561090157600080fd5b506105fd6112c5565b34801561091657600080fd5b506105fd6112d7565b34801561092b57600080fd5b506015546104919060ff1681565b34801561094557600080fd5b506103c8610954366004612f17565b600d6020526000908152604090205481565b34801561097257600080fd5b506000546001600160a01b0316610504565b34801561099057600080fd5b506103c860065481565b3480156109a657600080fd5b506019546104189060ff8082169161010081048216916201000082041690630100000090046001600160801b031684565b3480156109e357600080fd5b50610464611305565b3480156109f857600080fd5b50610504737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610a2057600080fd5b506105fd610a2f366004612fd8565b611314565b348015610a4057600080fd5b50610491610a4f366004612eeb565b61154e565b348015610a6057600080fd5b506103c8610a6f366004612f17565b61155b565b348015610a8057600080fd5b50601f5461049190600160a01b900460ff1681565b348015610aa157600080fd5b50610491610ab0366004612f17565b60176020526000908152604090205460ff1681565b348015610ad157600080fd5b50601b546104189060ff8082169161010081048216916201000082041690630100000090046001600160801b031684565b348015610b0e57600080fd5b506105fd610b1d366004612f17565b6115ee565b348015610b2e57600080fd5b50610491610b3d366004612f17565b6001600160a01b03166000908152600e602052604090205460ff1690565b348015610b6757600080fd5b50610491610b76366004612f17565b611842565b348015610b8757600080fd5b506105fd6118b0565b348015610b9c57600080fd5b506103c8610bab36600461304a565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b348015610be257600080fd5b506105fd610bf1366004613083565b61191e565b348015610c0257600080fd5b506103c860125481565b348015610c1857600080fd5b5060155461049190610100900460ff1681565b348015610c3757600080fd5b506105fd610c46366004612f17565b611960565b348015610c5757600080fd5b506105047f000000000000000000000000000000000000000000000000000000000000000081565b348015610c8b57600080fd5b506105fd610c9a36600461309f565b6119d6565b606060018054610cae906130ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610cda906130ba565b8015610d275780601f10610cfc57610100808354040283529160200191610d27565b820191906000526020600020905b815481529060010190602001808311610d0a57829003601f168201915b5050505050905090565b3360008181526014602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d8c9086815260200190565b60405180910390a35060015b92915050565b600f8181548110610dae57600080fd5b6000918252602090912001546001600160a01b0316905081565b606060138054610cae906130ba565b6001600160a01b038316600090815260146020908152604080832033845290915281205460001914610ecf576001600160a01b0384166000908152601460209081526040808320338452909152902054821115610e7b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b6001600160a01b0384166000908152601460209081526040808320338452909152902054610eaa90839061310a565b6001600160a01b03851660009081526014602090815260408083203384529091529020555b610eda8484846119f8565b90505b9392505050565b610eec6120ad565b610ef4612107565b565b610efe6120ad565b737a250d5630b4cf539739df2c5dacb4c659f2488d63f305d7194730610f238161120e565b600080610f386000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610fa0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fc5919061311d565b50506015805460ff1916600117905550565b6000610fe3600061120e565b610fee61dead61120e565b600354610ffb919061310a565b611005919061310a565b905090565b6110126120ad565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314806110605750601f546001600160a01b031633145b6110985760405162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b6044820152606401610e72565b604051600090339047908381818185875af1925050503d80600081146110da576040519150601f19603f3d011682016040523d82523d6000602084013e6110df565b606091505b50509050806110ed57600080fd5b50565b6110f86120ad565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6000610d9882600019610d31565b6111386120ad565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b61116b6120ad565b6111736122af565b15610ef457610ef4612318565b6013805461118d906130ba565b80601f01602080910402602001604051908101604052809291908181526020018280546111b9906130ba565b80156112065780601f106111db57610100808354040283529160200191611206565b820191906000526020600020905b8154815290600101906020018083116111e957829003601f168201915b505050505081565b60008061121a83611842565b1561129c57600f541580159061123257506000601154115b1561129c576001600160a01b0383166000908152600860205260408120541561127057506001600160a01b0383166000908152600860205260409020545b600f546011546000916112829161314b565b90508181111561129957611296828261310a565b92505b50505b6001600160a01b0383166000908152600760205260409020548115610edd57610eda828261316d565b6112cd6120ad565b610ef46000612633565b6112df6120ad565b6003546006819055612710906112f6906002613180565b611300919061314b565b600455565b606060028054610cae906130ba565b6000546001600160a01b03163314806113375750601f546001600160a01b031633145b6113785760405162461bcd60e51b815260206004820152601260248201527139b2ba26b7b2329d102337b93134b23232b760711b6044820152606401610e72565b6113d582828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260068152651c185a99595d60d21b602082015291506126839050565b1561148457601954601c805460ff80841661ffff1992831617610100808604831681029190911762010000600160981b031990811662010000808804851681026301000000600160981b0319908116929092176301000000988990046001600160801b039081168a0291909117909755601a54601d8054828816981697909717858204871690950294909417909216828404909416909102169190911790849004909216909202179055611503565b601b54601c80546001600160801b03630100000080850491909116026301000000600160981b03196201000080860460ff9081169091029190911662010000600160981b031961010080880484160261ffff19958616939097169283178717811682178417909555601d80549094169091179094179092169092171790555b60136115108284836131fc565b507fdfa3bc64f063fb1a0e870a075a05b582b32c293bb287f721458f31ee6a32f52882826040516115429291906132bd565b60405180910390a15050565b6000610edd3384846119f8565b60008061156783611842565b15610d9857600f541580159061157f57506000601154115b15610d98576001600160a01b038316600090815260086020526040812054156115bd57506001600160a01b0383166000908152600860205260409020545b600f546011546000916115cf9161314b565b9050818111156115e6576115e3828261310a565b92505b505092915050565b6001600160a01b03811660009081526017602052604090205460ff166110ed5761161781611842565b156116dd576001600160a01b0381166000908152600e602052604081205460ff16151590036110ed576001600160a01b0381166000818152600e60209081526040808320805460ff19166001908117909155600a9092528220429055600f80548083018255928190527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290920180546001600160a01b031916909317909255546116c1919061310a565b6001600160a01b0382166000908152600d602052604090205550565b6001600160a01b0381166000908152600e602052604090205460ff1615156001036110ed576001600160a01b0381166000908152600e60209081526040808320805460ff19169055600a8252808320839055600d91829052822054600f805491939161174b9060019061310a565b8154811061175b5761175b6132ec565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600f80546117909060019061310a565b815481106117a0576117a06132ec565b60009182526020808320909101546001600160a01b038481168452600d909252604090922054600f805492909316929181106117de576117de6132ec565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600f80548061181d5761181d613302565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6001600160a01b03811660009081526017602052604081205460ff168061188057506001600160a01b038216600090815260208052604090205460ff165b1561188d57506000919050565b506005546001600160a01b03909116600090815260076020526040902054101590565b6000546001600160a01b03163314806118d35750601f546001600160a01b031633145b61190b5760405162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b6044820152606401610e72565b6110ed30336119193061120e565b6119f8565b6119266120ad565b601f805460ff60a01b1916600160a01b841515021790556003546127109061194f908390613180565b611959919061314b565b6004555050565b6119686120ad565b6001600160a01b0381166119cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e72565b6110ed81612633565b6119de6120ad565b601580549115156101000261ff0019909216919091179055565b6001600160a01b038216600090815260208052604081205460ff16158015611a3857506001600160a01b038416600090815260208052604090205460ff16155b611a725760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610e72565b60008211611ad45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e72565b6001600160a01b03841661dead14801590611af757506001600160a01b03841615155b611b435760405162461bcd60e51b815260206004820152601960248201527f506c6561736520757365206120676f6f642061646472657373000000000000006044820152606401610e72565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614158015611b8e57506001600160a01b0383163014155b15611bf85760065482611ba08561120e565b611baa919061316d565b1115611bf85760405162461bcd60e51b815260206004820152601760248201527f45786365656473206d61782077616c6c65742073697a650000000000000000006044820152606401610e72565b601f54600160a81b900460ff1615611c1c57611c15848484612699565b9050610edd565b60155460ff16611d19576001600160a01b038416301480611c4a57506000546001600160a01b038581169116145b80611c625750601f546001600160a01b038581169116145b15611cd0577ffee95ecae0c8f7f0743ec0ad254c78ab75e5ecca9f1ddcd9f11f9a98124b96bc604051611cbd9060208082526014908201527362797061737320656e61626c6554726164696e6760601b604082015260600190565b60405180910390a1611c15848484612699565b611cd984612877565b611ce284612877565b604051602001611cf3929190613318565b60408051601f198184030181529082905262461bcd60e51b8252610e7291600401612ea3565b6000546001600160a01b0385811691161480611d425750601f546001600160a01b038581169116145b15611d5257611c15848484612699565b611d5a6122af565b15611d6757611d67612318565b6001600160a01b03841660009081526017602052604090205460ff16611d9057611d9084612a62565b6001600160a01b038416600090815260076020526040902054821115611df85760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e74205265616c2042616c616e6365000000000000006044820152606401610e72565b6001600160a01b038416600090815260076020526040902054611e1c90839061310a565b6001600160a01b038516600090815260076020526040902055611e3e846115ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614611e93576001600160a01b0384166000908152600c602052604090204290555b6000611ea0858585612bcf565b9050828115611f2b57611eb3828261310a565b30600090815260076020526040902054909150611ed190839061316d565b30600081815260076020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f229086815260200190565b60405180910390a35b6001600160a01b038516600090815260076020526040902054611f4f90829061316d565b6001600160a01b038616600090815260076020526040902055611f71856115ee565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b031603611fc6576001600160a01b0385166000908152600b602052604090204290555b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161200b91815260200190565b60405180910390a37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316866001600160a01b0316148061208457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b0316145b156120a157601554610100900460ff16156120a1576120a1612107565b50600195945050505050565b6000546001600160a01b03163314610ef45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e72565b604080516002808252606082018352600092602083019080368337019050509050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561217a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219e919061339f565b816000815181106121b1576121b16132ec565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106121e5576121e56132ec565b6001600160a01b039092166020928302919091019091015260405163d06ca61f60e01b8152600090737a250d5630b4cf539739df2c5dacb4c659f2488d9063d06ca61f906122409066b1a2bc2ec50000908690600401613400565b600060405180830381865afa15801561225d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122859190810190613419565b905060008160018151811061229c5761229c6132ec565b6020908102919091010151600555505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906122f45750601f54600160a81b900460ff16155b80156123095750601f54600160a01b900460ff165b80156110055750611005612dd7565b601f8054600160a81b60ff60a81b1990911617905560408051608081018252601d5460ff8082168352610100820481166020840152620100008204169282019290925263010000009091046001600160801b03166060820152600454612392737a250d5630b4cf539739df2c5dacb4c659f2488d82610d31565b5060408051600280825260608201835260009260208301908036833701905050905030816000815181106123c8576123c86132ec565b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561243a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245e919061339f565b81600181518110612471576124716132ec565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac947906124c99085906000908690309042906004016134d7565b600060405180830381600087803b1580156124e357600080fd5b505af11580156124f7573d6000803e3d6000fd5b505084516060860151479350600092506125149160ff1690613513565b6001600160801b03169050600081866020015160ff16846125359190613180565b61253f919061314b565b9050600082876040015160ff16856125579190613180565b612561919061314b565b905081156125c057601e546040516000916001600160a01b03169084908381818185875af1925050503d80600081146125b6576040519150601f19603f3d011682016040523d82523d6000602084013e6125bb565b606091505b505050505b801561261d57601f546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612613576040519150601f19603f3d011682016040523d82523d6000602084013e612618565b606091505b505050505b5050601f805460ff60a81b191690555050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051602091820120825192909101919091201490565b6001600160a01b0383166000908152600760205260408120548211156126f85760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610e72565b6001600160a01b03841660009081526007602052604090205461271c90839061310a565b6001600160a01b03851660009081526007602052604090205561273e846115ee565b6001600160a01b03831660009081526007602052604090205461276290839061316d565b6001600160a01b038416600090815260076020526040902055612784836115ee565b6001600160a01b038084166000818152600b6020526040908190204290555190918616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127d79086815260200190565b60405180910390a37f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b0316148061285057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b0316145b1561286d57601554610100900460ff161561286d5761286d612107565b5060019392505050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b0385169291600091602082018180368337019050509050600360fc1b816000815181106128e2576128e26132ec565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612911576129116132ec565b60200101906001600160f81b031916908160001a90535060005b6014811015612a59578260048561294384600c61316d565b60208110612953576129536132ec565b1a60f81b6001600160f81b031916901c60f81c60ff1681518110612979576129796132ec565b01602001516001600160f81b03191682612994836002613180565b61299f90600261316d565b815181106129af576129af6132ec565b60200101906001600160f81b031916908160001a90535082846129d383600c61316d565b602081106129e3576129e36132ec565b825191901a600f169081106129fa576129fa6132ec565b01602001516001600160f81b03191682612a15836002613180565b612a2090600361316d565b81518110612a3057612a306132ec565b60200101906001600160f81b031916908160001a90535080612a518161353a565b91505061292b565b50949350505050565b6000612a6d82611842565b15612aef57600f5415801590612a8557506000601154115b15612aef576001600160a01b03821660009081526008602052604081205415612ac357506001600160a01b0382166000908152600860205260409020545b600f54601154600091612ad59161314b565b905081811115612aec57612ae9828261310a565b92505b50505b6001600160a01b0382166000908152600760205260409020548115612b1b57612b18828261316d565b90505b818015612bc957612b2d308583612699565b506001600160a01b038416600090815260096020526040902054612b5290829061316d565b6001600160a01b0385166000908152600960205260409020558215612bc9576001600160a01b038416600090815260086020526040902054612b9590849061316d565b6001600160a01b03851660009081526008602052604081209190915560118054859290612bc390849061310a565b90915550505b50505050565b6040805160808082018352601c5460ff80821684526101008083048216602080870191909152620100008085048416878901526001600160801b0363010000009586900481166060808a019190915289519788018a52601d54808716895294850486169388019390935290830490931696850196909652919091041692810192909252600091829190612c628787612e21565b15612dcc5760007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316886001600160a01b031603612d0157612ccd6064612cc785606001516001600160801b031689612e6790919063ffffffff16565b90612e73565b9350612cfa83606001516001600160801b0316612cc7856000015160ff1687612e6790919063ffffffff16565b9050612d56565b612d266064612cc784606001516001600160801b031689612e6790919063ffffffff16565b9350612d5382606001516001600160801b0316612cc7846000015160ff1687612e6790919063ffffffff16565b90505b8015612dca578060106000828254612d6e919061316d565b925050819055508060116000828254612d87919061316d565b90915550506010546040805183815260208101929092527f18eb4f38dd44e95e8a1c75cca7d7ff27a98c255ffece0e32f334fb4184e1280a910160405180910390a15b505b509095945050505050565b306000908152600760205260408120546012546011548391612df89161316d565b905081811115612e0b5760009250505090565b612e15818361310a565b60045411159392505050565b6001600160a01b03821660009081526016602052604081205460ff16158015610edd5750506001600160a01b031660009081526016602052604090205460ff1615919050565b6000610edd8284613180565b6000610edd828461314b565b60005b83811015612e9a578181015183820152602001612e82565b50506000910152565b6020815260008251806020840152612ec2816040850160208701612e7f565b601f01601f19169190910160400192915050565b6001600160a01b03811681146110ed57600080fd5b60008060408385031215612efe57600080fd5b8235612f0981612ed6565b946020939093013593505050565b600060208284031215612f2957600080fd5b8135610edd81612ed6565b600060208284031215612f4657600080fd5b5035919050565b600080600060608486031215612f6257600080fd5b8335612f6d81612ed6565b92506020840135612f7d81612ed6565b929592945050506040919091013590565b80358015158114612f9e57600080fd5b919050565b60008060408385031215612fb657600080fd5b8235612fc181612ed6565b9150612fcf60208401612f8e565b90509250929050565b60008060208385031215612feb57600080fd5b823567ffffffffffffffff8082111561300357600080fd5b818501915085601f83011261301757600080fd5b81358181111561302657600080fd5b86602082850101111561303857600080fd5b60209290920196919550909350505050565b6000806040838503121561305d57600080fd5b823561306881612ed6565b9150602083013561307881612ed6565b809150509250929050565b6000806040838503121561309657600080fd5b612f0983612f8e565b6000602082840312156130b157600080fd5b610edd82612f8e565b600181811c908216806130ce57607f821691505b6020821081036130ee57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d9857610d986130f4565b60008060006060848603121561313257600080fd5b8351925060208401519150604084015190509250925092565b60008261316857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d9857610d986130f4565b8082028115828204841417610d9857610d986130f4565b634e487b7160e01b600052604160045260246000fd5b601f8211156131f757600081815260208120601f850160051c810160208610156131d45750805b601f850160051c820191505b818110156131f3578281556001016131e0565b5050505b505050565b67ffffffffffffffff83111561321457613214613197565b6132288361322283546130ba565b836131ad565b6000601f84116001811461325c57600085156132445750838201355b600019600387901b1c1916600186901b1783556132b6565b600083815260209020601f19861690835b8281101561328d578685013582556020948501946001909201910161326d565b50868210156132aa5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b7f54726164696e67206e6f7420656e61626c6564207965742c20706c656173652081526d03bb0b4ba171029b2b73232b91d160951b60208201526000835161336781602e850160208801612e7f565b6b0102932b1b4b834b2b73a1d160a51b602e91840191820152835161339381603a840160208801612e7f565b01603a01949350505050565b6000602082840312156133b157600080fd5b8151610edd81612ed6565b600081518084526020808501945080840160005b838110156133f55781516001600160a01b0316875295820195908201906001016133d0565b509495945050505050565b828152604060208201526000610eda60408301846133bc565b6000602080838503121561342c57600080fd5b825167ffffffffffffffff8082111561344457600080fd5b818501915085601f83011261345857600080fd5b81518181111561346a5761346a613197565b8060051b604051601f19603f8301168101818110858211171561348f5761348f613197565b6040529182528482019250838101850191888311156134ad57600080fd5b938501935b828510156134cb578451845293850193928501926134b2565b98975050505050505050565b85815284602082015260a0604082015260006134f660a08301866133bc565b6001600160a01b0394909416606083015250608001529392505050565b6001600160801b03828116828216039080821115613533576135336130f4565b5092915050565b60006001820161354c5761354c6130f4565b506001019056fea2646970667358221220fd5c2b82fdd1cc58f43b407262ad5e75c1fbb71f4eba97883bd6943a84e6bd4364736f6c63430008130033

Deployed Bytecode

0x6080604052600436106103a65760003560e01c80636925eab7116101e7578063a9059cbb1161010d578063d85a2828116100a0578063f2357b411161006f578063f2357b4114610c0c578063f2fde38b14610c2b578063f40acc3d14610c4b578063f417fb8a14610c7f57600080fd5b8063d85a282814610b7b578063dd62ed3e14610b90578063df20fd4914610bd6578063e73cb8a814610bf657600080fd5b8063b2aff2b6116100dc578063b2aff2b614610ac5578063bc56222614610b02578063cb05f19614610b22578063d4d7b19a14610b5b57600080fd5b8063a9059cbb14610a34578063ab46628b14610a54578063b0f7ec3814610a74578063b1bd377414610a9557600080fd5b80638a8c523c1161018557806391ce311a1161015457806391ce311a1461099a57806395d89b41146109d7578063a82ed9ec146109ec578063a84fd0ed14610a1457600080fd5b80638a8c523c1461091f5780638c3fe56f146109395780638da5cb5b146109665780638f9a55c01461098457600080fd5b80636f4366ab116101c15780636f4366ab146108a857806370a08231146108d5578063715018a6146108f5578063751039fc1461090a57600080fd5b80636925eab7146108395780636a1faa98146108665780636ebcf6071461087b57600080fd5b80632b112e49116102cc578063404e51291161026a57806358967f281161023957806358967f28146107a75780635ee6d675146107d4578063658d4b7f1461080457806366eb37851461082457600080fd5b8063404e5129146107145780634706240214610734578063524ec53314610771578063571ac8b01461078757600080fd5b8063313ce567116102a6578063313ce567146106935780633307d372146106af578063364333f4146106cf5780633f4218e0146106e457600080fd5b80632b112e49146106145780632b14ca56146106295780632de508641461066657600080fd5b806314e274461161034457806321fb1f791161031357806321fb1f79146105b257806323b872dd146105c8578063276dcff9146105e8578063293230b8146105ff57600080fd5b806314e274461461051c578063153705981461055957806316c021291461056e57806318160ddd1461059d57600080fd5b8063095ea7b311610380578063095ea7b3146104715780630c9506a4146104a15780630e5a9231146104ce5780630f8c9e28146104e457600080fd5b8063018763ed146103b25780630300b50a146103db57806306fdde031461044f57600080fd5b366103ad57005b600080fd5b3480156103be57600080fd5b506103c860105481565b6040519081526020015b60405180910390f35b3480156103e757600080fd5b506018546104189060ff8082169161010081048216916201000082041690630100000090046001600160801b031684565b6040516103d2949392919060ff94851681529284166020840152921660408201526001600160801b03909116606082015260800190565b34801561045b57600080fd5b50610464610c9f565b6040516103d29190612ea3565b34801561047d57600080fd5b5061049161048c366004612eeb565b610d31565b60405190151581526020016103d2565b3480156104ad57600080fd5b506103c86104bc366004612f17565b600b6020526000908152604090205481565b3480156104da57600080fd5b506103c860045481565b3480156104f057600080fd5b506105046104ff366004612f34565b610d9e565b6040516001600160a01b0390911681526020016103d2565b34801561052857600080fd5b50601a546104189060ff8082169161010081048216916201000082041690630100000090046001600160801b031684565b34801561056557600080fd5b50610464610dc8565b34801561057a57600080fd5b50610491610589366004612f17565b602080526000908152604090205460ff1681565b3480156105a957600080fd5b506003546103c8565b3480156105be57600080fd5b506103c860115481565b3480156105d457600080fd5b506104916105e3366004612f4d565b610dd7565b3480156105f457600080fd5b506105fd610ee4565b005b34801561060b57600080fd5b506105fd610ef6565b34801561062057600080fd5b506103c8610fd7565b34801561063557600080fd5b50601d546104189060ff8082169161010081048216916201000082041690630100000090046001600160801b031684565b34801561067257600080fd5b506103c8610681366004612f17565b600c6020526000908152604090205481565b34801561069f57600080fd5b50604051601281526020016103d2565b3480156106bb57600080fd5b506105fd6106ca366004612fa3565b61100a565b3480156106db57600080fd5b506105fd61103d565b3480156106f057600080fd5b506104916106ff366004612f17565b60166020526000908152604090205460ff1681565b34801561072057600080fd5b506105fd61072f366004612fa3565b6110f0565b34801561074057600080fd5b50601c546104189060ff8082169161010081048216916201000082041690630100000090046001600160801b031684565b34801561077d57600080fd5b506103c860055481565b34801561079357600080fd5b506104916107a2366004612f17565b611122565b3480156107b357600080fd5b506103c86107c2366004612f17565b60096020526000908152604090205481565b3480156107e057600080fd5b506104916107ef366004612f17565b600e6020526000908152604090205460ff1681565b34801561081057600080fd5b506105fd61081f366004612fa3565b611130565b34801561083057600080fd5b506105fd611163565b34801561084557600080fd5b506103c8610854366004612f17565b600a6020526000908152604090205481565b34801561087257600080fd5b50610464611180565b34801561088757600080fd5b506103c8610896366004612f17565b60076020526000908152604090205481565b3480156108b457600080fd5b506103c86108c3366004612f17565b60086020526000908152604090205481565b3480156108e157600080fd5b506103c86108f0366004612f17565b61120e565b34801561090157600080fd5b506105fd6112c5565b34801561091657600080fd5b506105fd6112d7565b34801561092b57600080fd5b506015546104919060ff1681565b34801561094557600080fd5b506103c8610954366004612f17565b600d6020526000908152604090205481565b34801561097257600080fd5b506000546001600160a01b0316610504565b34801561099057600080fd5b506103c860065481565b3480156109a657600080fd5b506019546104189060ff8082169161010081048216916201000082041690630100000090046001600160801b031684565b3480156109e357600080fd5b50610464611305565b3480156109f857600080fd5b50610504737a250d5630b4cf539739df2c5dacb4c659f2488d81565b348015610a2057600080fd5b506105fd610a2f366004612fd8565b611314565b348015610a4057600080fd5b50610491610a4f366004612eeb565b61154e565b348015610a6057600080fd5b506103c8610a6f366004612f17565b61155b565b348015610a8057600080fd5b50601f5461049190600160a01b900460ff1681565b348015610aa157600080fd5b50610491610ab0366004612f17565b60176020526000908152604090205460ff1681565b348015610ad157600080fd5b50601b546104189060ff8082169161010081048216916201000082041690630100000090046001600160801b031684565b348015610b0e57600080fd5b506105fd610b1d366004612f17565b6115ee565b348015610b2e57600080fd5b50610491610b3d366004612f17565b6001600160a01b03166000908152600e602052604090205460ff1690565b348015610b6757600080fd5b50610491610b76366004612f17565b611842565b348015610b8757600080fd5b506105fd6118b0565b348015610b9c57600080fd5b506103c8610bab36600461304a565b6001600160a01b03918216600090815260146020908152604080832093909416825291909152205490565b348015610be257600080fd5b506105fd610bf1366004613083565b61191e565b348015610c0257600080fd5b506103c860125481565b348015610c1857600080fd5b5060155461049190610100900460ff1681565b348015610c3757600080fd5b506105fd610c46366004612f17565b611960565b348015610c5757600080fd5b506105047f0000000000000000000000000ca8c8d5ee44d804d7649c9bd5e24b3f1449a21381565b348015610c8b57600080fd5b506105fd610c9a36600461309f565b6119d6565b606060018054610cae906130ba565b80601f0160208091040260200160405190810160405280929190818152602001828054610cda906130ba565b8015610d275780601f10610cfc57610100808354040283529160200191610d27565b820191906000526020600020905b815481529060010190602001808311610d0a57829003601f168201915b5050505050905090565b3360008181526014602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610d8c9086815260200190565b60405180910390a35060015b92915050565b600f8181548110610dae57600080fd5b6000918252602090912001546001600160a01b0316905081565b606060138054610cae906130ba565b6001600160a01b038316600090815260146020908152604080832033845290915281205460001914610ecf576001600160a01b0384166000908152601460209081526040808320338452909152902054821115610e7b5760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064015b60405180910390fd5b6001600160a01b0384166000908152601460209081526040808320338452909152902054610eaa90839061310a565b6001600160a01b03851660009081526014602090815260408083203384529091529020555b610eda8484846119f8565b90505b9392505050565b610eec6120ad565b610ef4612107565b565b610efe6120ad565b737a250d5630b4cf539739df2c5dacb4c659f2488d63f305d7194730610f238161120e565b600080610f386000546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af1158015610fa0573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610fc5919061311d565b50506015805460ff1916600117905550565b6000610fe3600061120e565b610fee61dead61120e565b600354610ffb919061310a565b611005919061310a565b905090565b6110126120ad565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314806110605750601f546001600160a01b031633145b6110985760405162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b6044820152606401610e72565b604051600090339047908381818185875af1925050503d80600081146110da576040519150601f19603f3d011682016040523d82523d6000602084013e6110df565b606091505b50509050806110ed57600080fd5b50565b6110f86120ad565b6001600160a01b039190911660009081526020805260409020805460ff1916911515919091179055565b6000610d9882600019610d31565b6111386120ad565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b61116b6120ad565b6111736122af565b15610ef457610ef4612318565b6013805461118d906130ba565b80601f01602080910402602001604051908101604052809291908181526020018280546111b9906130ba565b80156112065780601f106111db57610100808354040283529160200191611206565b820191906000526020600020905b8154815290600101906020018083116111e957829003601f168201915b505050505081565b60008061121a83611842565b1561129c57600f541580159061123257506000601154115b1561129c576001600160a01b0383166000908152600860205260408120541561127057506001600160a01b0383166000908152600860205260409020545b600f546011546000916112829161314b565b90508181111561129957611296828261310a565b92505b50505b6001600160a01b0383166000908152600760205260409020548115610edd57610eda828261316d565b6112cd6120ad565b610ef46000612633565b6112df6120ad565b6003546006819055612710906112f6906002613180565b611300919061314b565b600455565b606060028054610cae906130ba565b6000546001600160a01b03163314806113375750601f546001600160a01b031633145b6113785760405162461bcd60e51b815260206004820152601260248201527139b2ba26b7b2329d102337b93134b23232b760711b6044820152606401610e72565b6113d582828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250506040805180820190915260068152651c185a99595d60d21b602082015291506126839050565b1561148457601954601c805460ff80841661ffff1992831617610100808604831681029190911762010000600160981b031990811662010000808804851681026301000000600160981b0319908116929092176301000000988990046001600160801b039081168a0291909117909755601a54601d8054828816981697909717858204871690950294909417909216828404909416909102169190911790849004909216909202179055611503565b601b54601c80546001600160801b03630100000080850491909116026301000000600160981b03196201000080860460ff9081169091029190911662010000600160981b031961010080880484160261ffff19958616939097169283178717811682178417909555601d80549094169091179094179092169092171790555b60136115108284836131fc565b507fdfa3bc64f063fb1a0e870a075a05b582b32c293bb287f721458f31ee6a32f52882826040516115429291906132bd565b60405180910390a15050565b6000610edd3384846119f8565b60008061156783611842565b15610d9857600f541580159061157f57506000601154115b15610d98576001600160a01b038316600090815260086020526040812054156115bd57506001600160a01b0383166000908152600860205260409020545b600f546011546000916115cf9161314b565b9050818111156115e6576115e3828261310a565b92505b505092915050565b6001600160a01b03811660009081526017602052604090205460ff166110ed5761161781611842565b156116dd576001600160a01b0381166000908152600e602052604081205460ff16151590036110ed576001600160a01b0381166000818152600e60209081526040808320805460ff19166001908117909155600a9092528220429055600f80548083018255928190527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac80290920180546001600160a01b031916909317909255546116c1919061310a565b6001600160a01b0382166000908152600d602052604090205550565b6001600160a01b0381166000908152600e602052604090205460ff1615156001036110ed576001600160a01b0381166000908152600e60209081526040808320805460ff19169055600a8252808320839055600d91829052822054600f805491939161174b9060019061310a565b8154811061175b5761175b6132ec565b60009182526020808320909101546001600160a01b03168352820192909252604001902055600f80546117909060019061310a565b815481106117a0576117a06132ec565b60009182526020808320909101546001600160a01b038481168452600d909252604090922054600f805492909316929181106117de576117de6132ec565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600f80548061181d5761181d613302565b600082815260209020810160001990810180546001600160a01b031916905501905550565b6001600160a01b03811660009081526017602052604081205460ff168061188057506001600160a01b038216600090815260208052604090205460ff165b1561188d57506000919050565b506005546001600160a01b03909116600090815260076020526040902054101590565b6000546001600160a01b03163314806118d35750601f546001600160a01b031633145b61190b5760405162461bcd60e51b81526020600482015260096024820152682337b93134b23232b760b91b6044820152606401610e72565b6110ed30336119193061120e565b6119f8565b6119266120ad565b601f805460ff60a01b1916600160a01b841515021790556003546127109061194f908390613180565b611959919061314b565b6004555050565b6119686120ad565b6001600160a01b0381166119cd5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e72565b6110ed81612633565b6119de6120ad565b601580549115156101000261ff0019909216919091179055565b6001600160a01b038216600090815260208052604081205460ff16158015611a3857506001600160a01b038416600090815260208052604090205460ff16155b611a725760405162461bcd60e51b815260206004820152600b60248201526a109b1858dadb1a5cdd195960aa1b6044820152606401610e72565b60008211611ad45760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b6064820152608401610e72565b6001600160a01b03841661dead14801590611af757506001600160a01b03841615155b611b435760405162461bcd60e51b815260206004820152601960248201527f506c6561736520757365206120676f6f642061646472657373000000000000006044820152606401610e72565b7f0000000000000000000000000ca8c8d5ee44d804d7649c9bd5e24b3f1449a2136001600160a01b0316836001600160a01b031614158015611b8e57506001600160a01b0383163014155b15611bf85760065482611ba08561120e565b611baa919061316d565b1115611bf85760405162461bcd60e51b815260206004820152601760248201527f45786365656473206d61782077616c6c65742073697a650000000000000000006044820152606401610e72565b601f54600160a81b900460ff1615611c1c57611c15848484612699565b9050610edd565b60155460ff16611d19576001600160a01b038416301480611c4a57506000546001600160a01b038581169116145b80611c625750601f546001600160a01b038581169116145b15611cd0577ffee95ecae0c8f7f0743ec0ad254c78ab75e5ecca9f1ddcd9f11f9a98124b96bc604051611cbd9060208082526014908201527362797061737320656e61626c6554726164696e6760601b604082015260600190565b60405180910390a1611c15848484612699565b611cd984612877565b611ce284612877565b604051602001611cf3929190613318565b60408051601f198184030181529082905262461bcd60e51b8252610e7291600401612ea3565b6000546001600160a01b0385811691161480611d425750601f546001600160a01b038581169116145b15611d5257611c15848484612699565b611d5a6122af565b15611d6757611d67612318565b6001600160a01b03841660009081526017602052604090205460ff16611d9057611d9084612a62565b6001600160a01b038416600090815260076020526040902054821115611df85760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e74205265616c2042616c616e6365000000000000006044820152606401610e72565b6001600160a01b038416600090815260076020526040902054611e1c90839061310a565b6001600160a01b038516600090815260076020526040902055611e3e846115ee565b7f0000000000000000000000000ca8c8d5ee44d804d7649c9bd5e24b3f1449a2136001600160a01b0316846001600160a01b031614611e93576001600160a01b0384166000908152600c602052604090204290555b6000611ea0858585612bcf565b9050828115611f2b57611eb3828261310a565b30600090815260076020526040902054909150611ed190839061316d565b30600081815260076020526040908190209290925590516001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90611f229086815260200190565b60405180910390a35b6001600160a01b038516600090815260076020526040902054611f4f90829061316d565b6001600160a01b038616600090815260076020526040902055611f71856115ee565b7f0000000000000000000000000ca8c8d5ee44d804d7649c9bd5e24b3f1449a2136001600160a01b0316866001600160a01b031603611fc6576001600160a01b0385166000908152600b602052604090204290555b846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161200b91815260200190565b60405180910390a37f0000000000000000000000000ca8c8d5ee44d804d7649c9bd5e24b3f1449a2136001600160a01b0316866001600160a01b0316148061208457507f0000000000000000000000000ca8c8d5ee44d804d7649c9bd5e24b3f1449a2136001600160a01b0316856001600160a01b0316145b156120a157601554610100900460ff16156120a1576120a1612107565b50600195945050505050565b6000546001600160a01b03163314610ef45760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610e72565b604080516002808252606082018352600092602083019080368337019050509050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561217a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219e919061339f565b816000815181106121b1576121b16132ec565b60200260200101906001600160a01b031690816001600160a01b03168152505030816001815181106121e5576121e56132ec565b6001600160a01b039092166020928302919091019091015260405163d06ca61f60e01b8152600090737a250d5630b4cf539739df2c5dacb4c659f2488d9063d06ca61f906122409066b1a2bc2ec50000908690600401613400565b600060405180830381865afa15801561225d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526122859190810190613419565b905060008160018151811061229c5761229c6132ec565b6020908102919091010151600555505050565b6000336001600160a01b037f0000000000000000000000000ca8c8d5ee44d804d7649c9bd5e24b3f1449a21316148015906122f45750601f54600160a81b900460ff16155b80156123095750601f54600160a01b900460ff165b80156110055750611005612dd7565b601f8054600160a81b60ff60a81b1990911617905560408051608081018252601d5460ff8082168352610100820481166020840152620100008204169282019290925263010000009091046001600160801b03166060820152600454612392737a250d5630b4cf539739df2c5dacb4c659f2488d82610d31565b5060408051600280825260608201835260009260208301908036833701905050905030816000815181106123c8576123c86132ec565b60200260200101906001600160a01b031690816001600160a01b031681525050737a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561243a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061245e919061339f565b81600181518110612471576124716132ec565b6001600160a01b039092166020928302919091019091015260405163791ac94760e01b8152737a250d5630b4cf539739df2c5dacb4c659f2488d9063791ac947906124c99085906000908690309042906004016134d7565b600060405180830381600087803b1580156124e357600080fd5b505af11580156124f7573d6000803e3d6000fd5b505084516060860151479350600092506125149160ff1690613513565b6001600160801b03169050600081866020015160ff16846125359190613180565b61253f919061314b565b9050600082876040015160ff16856125579190613180565b612561919061314b565b905081156125c057601e546040516000916001600160a01b03169084908381818185875af1925050503d80600081146125b6576040519150601f19603f3d011682016040523d82523d6000602084013e6125bb565b606091505b505050505b801561261d57601f546040516000916001600160a01b03169083908381818185875af1925050503d8060008114612613576040519150601f19603f3d011682016040523d82523d6000602084013e612618565b606091505b505050505b5050601f805460ff60a81b191690555050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051602091820120825192909101919091201490565b6001600160a01b0383166000908152600760205260408120548211156126f85760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742042616c616e636560601b6044820152606401610e72565b6001600160a01b03841660009081526007602052604090205461271c90839061310a565b6001600160a01b03851660009081526007602052604090205561273e846115ee565b6001600160a01b03831660009081526007602052604090205461276290839061316d565b6001600160a01b038416600090815260076020526040902055612784836115ee565b6001600160a01b038084166000818152600b6020526040908190204290555190918616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906127d79086815260200190565b60405180910390a37f0000000000000000000000000ca8c8d5ee44d804d7649c9bd5e24b3f1449a2136001600160a01b0316846001600160a01b0316148061285057507f0000000000000000000000000ca8c8d5ee44d804d7649c9bd5e24b3f1449a2136001600160a01b0316836001600160a01b0316145b1561286d57601554610100900460ff161561286d5761286d612107565b5060019392505050565b604080518082018252601081526f181899199a1a9b1b9c1cb0b131b232b360811b60208201528151602a80825260608281019094526001600160a01b0385169291600091602082018180368337019050509050600360fc1b816000815181106128e2576128e26132ec565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110612911576129116132ec565b60200101906001600160f81b031916908160001a90535060005b6014811015612a59578260048561294384600c61316d565b60208110612953576129536132ec565b1a60f81b6001600160f81b031916901c60f81c60ff1681518110612979576129796132ec565b01602001516001600160f81b03191682612994836002613180565b61299f90600261316d565b815181106129af576129af6132ec565b60200101906001600160f81b031916908160001a90535082846129d383600c61316d565b602081106129e3576129e36132ec565b825191901a600f169081106129fa576129fa6132ec565b01602001516001600160f81b03191682612a15836002613180565b612a2090600361316d565b81518110612a3057612a306132ec565b60200101906001600160f81b031916908160001a90535080612a518161353a565b91505061292b565b50949350505050565b6000612a6d82611842565b15612aef57600f5415801590612a8557506000601154115b15612aef576001600160a01b03821660009081526008602052604081205415612ac357506001600160a01b0382166000908152600860205260409020545b600f54601154600091612ad59161314b565b905081811115612aec57612ae9828261310a565b92505b50505b6001600160a01b0382166000908152600760205260409020548115612b1b57612b18828261316d565b90505b818015612bc957612b2d308583612699565b506001600160a01b038416600090815260096020526040902054612b5290829061316d565b6001600160a01b0385166000908152600960205260409020558215612bc9576001600160a01b038416600090815260086020526040902054612b9590849061316d565b6001600160a01b03851660009081526008602052604081209190915560118054859290612bc390849061310a565b90915550505b50505050565b6040805160808082018352601c5460ff80821684526101008083048216602080870191909152620100008085048416878901526001600160801b0363010000009586900481166060808a019190915289519788018a52601d54808716895294850486169388019390935290830490931696850196909652919091041692810192909252600091829190612c628787612e21565b15612dcc5760007f0000000000000000000000000ca8c8d5ee44d804d7649c9bd5e24b3f1449a2136001600160a01b0316886001600160a01b031603612d0157612ccd6064612cc785606001516001600160801b031689612e6790919063ffffffff16565b90612e73565b9350612cfa83606001516001600160801b0316612cc7856000015160ff1687612e6790919063ffffffff16565b9050612d56565b612d266064612cc784606001516001600160801b031689612e6790919063ffffffff16565b9350612d5382606001516001600160801b0316612cc7846000015160ff1687612e6790919063ffffffff16565b90505b8015612dca578060106000828254612d6e919061316d565b925050819055508060116000828254612d87919061316d565b90915550506010546040805183815260208101929092527f18eb4f38dd44e95e8a1c75cca7d7ff27a98c255ffece0e32f334fb4184e1280a910160405180910390a15b505b509095945050505050565b306000908152600760205260408120546012546011548391612df89161316d565b905081811115612e0b5760009250505090565b612e15818361310a565b60045411159392505050565b6001600160a01b03821660009081526016602052604081205460ff16158015610edd5750506001600160a01b031660009081526016602052604090205460ff1615919050565b6000610edd8284613180565b6000610edd828461314b565b60005b83811015612e9a578181015183820152602001612e82565b50506000910152565b6020815260008251806020840152612ec2816040850160208701612e7f565b601f01601f19169190910160400192915050565b6001600160a01b03811681146110ed57600080fd5b60008060408385031215612efe57600080fd5b8235612f0981612ed6565b946020939093013593505050565b600060208284031215612f2957600080fd5b8135610edd81612ed6565b600060208284031215612f4657600080fd5b5035919050565b600080600060608486031215612f6257600080fd5b8335612f6d81612ed6565b92506020840135612f7d81612ed6565b929592945050506040919091013590565b80358015158114612f9e57600080fd5b919050565b60008060408385031215612fb657600080fd5b8235612fc181612ed6565b9150612fcf60208401612f8e565b90509250929050565b60008060208385031215612feb57600080fd5b823567ffffffffffffffff8082111561300357600080fd5b818501915085601f83011261301757600080fd5b81358181111561302657600080fd5b86602082850101111561303857600080fd5b60209290920196919550909350505050565b6000806040838503121561305d57600080fd5b823561306881612ed6565b9150602083013561307881612ed6565b809150509250929050565b6000806040838503121561309657600080fd5b612f0983612f8e565b6000602082840312156130b157600080fd5b610edd82612f8e565b600181811c908216806130ce57607f821691505b6020821081036130ee57634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b81810381811115610d9857610d986130f4565b60008060006060848603121561313257600080fd5b8351925060208401519150604084015190509250925092565b60008261316857634e487b7160e01b600052601260045260246000fd5b500490565b80820180821115610d9857610d986130f4565b8082028115828204841417610d9857610d986130f4565b634e487b7160e01b600052604160045260246000fd5b601f8211156131f757600081815260208120601f850160051c810160208610156131d45750805b601f850160051c820191505b818110156131f3578281556001016131e0565b5050505b505050565b67ffffffffffffffff83111561321457613214613197565b6132288361322283546130ba565b836131ad565b6000601f84116001811461325c57600085156132445750838201355b600019600387901b1c1916600186901b1783556132b6565b600083815260209020601f19861690835b8281101561328d578685013582556020948501946001909201910161326d565b50868210156132aa5760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b7f54726164696e67206e6f7420656e61626c6564207965742c20706c656173652081526d03bb0b4ba171029b2b73232b91d160951b60208201526000835161336781602e850160208801612e7f565b6b0102932b1b4b834b2b73a1d160a51b602e91840191820152835161339381603a840160208801612e7f565b01603a01949350505050565b6000602082840312156133b157600080fd5b8151610edd81612ed6565b600081518084526020808501945080840160005b838110156133f55781516001600160a01b0316875295820195908201906001016133d0565b509495945050505050565b828152604060208201526000610eda60408301846133bc565b6000602080838503121561342c57600080fd5b825167ffffffffffffffff8082111561344457600080fd5b818501915085601f83011261345857600080fd5b81518181111561346a5761346a613197565b8060051b604051601f19603f8301168101818110858211171561348f5761348f613197565b6040529182528482019250838101850191888311156134ad57600080fd5b938501935b828510156134cb578451845293850193928501926134b2565b98975050505050505050565b85815284602082015260a0604082015260006134f660a08301866133bc565b6001600160a01b0394909416606083015250608001529392505050565b6001600160801b03828116828216039080821115613533576135336130f4565b5092915050565b60006001820161354c5761354c6130f4565b506001019056fea2646970667358221220fd5c2b82fdd1cc58f43b407262ad5e75c1fbb71f4eba97883bd6943a84e6bd4364736f6c63430008130033

Deployed Bytecode Sourcemap

24313:22561:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27003:35;;;;;;;;;;;;;;;;;;;160:25:1;;;148:2;133:18;27003:35:0;;;;;;;;27443:72;;;;;;;;;;-1:-1:-1;27443:72:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27443:72:0;;;;;;;;;;;;445:4:1;433:17;;;415:36;;487:17;;;482:2;467:18;;460:45;541:17;;536:2;521:18;;514:45;-1:-1:-1;;;;;595:47:1;;;590:2;575:18;;568:75;402:3;387:19;;196:453;31725:85:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;30304:216::-;;;;;;;;;;-1:-1:-1;30304:216:0;;;;;:::i;:::-;;:::i;:::-;;;1931:14:1;;1924:22;1906:41;;1894:2;1879:18;30304:216:0;1766:187:1;26760:43:0;;;;;;;;;;-1:-1:-1;26760:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;26351:59;;;;;;;;;;;;;;;;26962:32;;;;;;;;;;-1:-1:-1;26962:32:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2559:32:1;;;2541:51;;2529:2;2514:18;26962:32:0;2395:203:1;27602:74:0;;;;;;;;;;-1:-1:-1;27602:74:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27602:74:0;;;35615:106;;;;;;;;;;;;;:::i;27949:42::-;;;;;;;;;;-1:-1:-1;27949:42:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;31529:102;;;;;;;;;;-1:-1:-1;31611:12:0;;31529:102;;27045:39;;;;;;;;;;;;;;;;30822:441;;;;;;;;;;-1:-1:-1;30822:441:0;;;;;:::i;:::-;;:::i;37260:93::-;;;;;;;;;;;;;:::i;:::-;;36512:224;;;;;;;;;;;;;:::i;33789:136::-;;;;;;;;;;;;;:::i;27786:18::-;;;;;;;;;;-1:-1:-1;27786:18:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27786:18:0;;;26810:44;;;;;;;;;;-1:-1:-1;26810:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;31639:78;;;;;;;;;;-1:-1:-1;31639:78:0;;31707:2;3206:36:1;;3194:2;3179:18;31639:78:0;3064:184:1;36871:133:0;;;;;;;;;;-1:-1:-1;36871:133:0;;;;;:::i;:::-;;:::i;35729:247::-;;;;;;;;;;;;;:::i;27334:43::-;;;;;;;;;;-1:-1:-1;27334:43:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;37117:135;;;;;;;;;;-1:-1:-1;37117:135:0;;;;;:::i;:::-;;:::i;27762:17::-;;;;;;;;;;-1:-1:-1;27762:17:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27762:17:0;;;26417:45;;;;;;;;;;;;;;;;30528:122;;;;;;;;;;-1:-1:-1;30528:122:0;;;;;:::i;:::-;;:::i;26636:63::-;;;;;;;;;;-1:-1:-1;26636:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;26912:41;;;;;;;;;;-1:-1:-1;26912:41:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;36744:119;;;;;;;;;;-1:-1:-1;36744:119:0;;;;;:::i;:::-;;:::i;36380:124::-;;;;;;;;;;;;;:::i;26706:47::-;;;;;;;;;;-1:-1:-1;26706:47:0;;;;;:::i;:::-;;;;;;;;;;;;;;27133:41;;;;;;;;;;;;;:::i;26528:44::-;;;;;;;;;;-1:-1:-1;26528:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;26579:50;;;;;;;;;;-1:-1:-1;26579:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;31915:925;;;;;;;;;;-1:-1:-1;31915:925:0;;;;;:::i;:::-;;:::i;12176:103::-;;;;;;;;;;;;;:::i;37361:144::-;;;;;;;;;;;;;:::i;27251:33::-;;;;;;;;;;-1:-1:-1;27251:33:0;;;;;;;;26861:44;;;;;;;;;;-1:-1:-1;26861:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;11528:87;;;;;;;;;;-1:-1:-1;11574:7:0;11601:6;-1:-1:-1;;;;;11601:6:0;11528:87;;26469:50;;;;;;;;;;;;;;;;27522:73;;;;;;;;;;-1:-1:-1;27522:73:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27522:73:0;;;31818:89;;;;;;;;;;;;;:::i;25660:126::-;;;;;;;;;;;;25743:42;25660:126;;35114:493;;;;;;;;;;-1:-1:-1;35114:493:0;;;;;:::i;:::-;;:::i;30658:156::-;;;;;;;;;;-1:-1:-1;30658:156:0;;;;;:::i;:::-;;:::i;32848:778::-;;;;;;;;;;-1:-1:-1;32848:778:0;;;;;:::i;:::-;;:::i;27893:31::-;;;;;;;;;;-1:-1:-1;27893:31:0;;;;-1:-1:-1;;;27893:31:0;;;;;;27384:50;;;;;;;;;;-1:-1:-1;27384:50:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;27683:70;;;;;;;;;;-1:-1:-1;27683:70:0;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;27683:70:0;;;45982:889;;;;;;;;;;-1:-1:-1;45982:889:0;;;;;:::i;:::-;;:::i;34200:125::-;;;;;;;;;;-1:-1:-1;34200:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;34293:24:0;34269:4;34293:24;;;:9;:24;;;;;;;;;34200:125;33937:255;;;;;;;;;;-1:-1:-1;33937:255:0;;;;;:::i;:::-;;:::i;35982:208::-;;;;;;;;;;;;;:::i;33634:147::-;;;;;;;;;;-1:-1:-1;33634:147:0;;;;;:::i;:::-;-1:-1:-1;;;;;33745:19:0;;;33718:7;33745:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;33634:147;36198:174;;;;;;;;;;-1:-1:-1;36198:174:0;;;;;:::i;:::-;;:::i;27091:33::-;;;;;;;;;;;;;;;;27291:36;;;;;;;;;;-1:-1:-1;27291:36:0;;;;;;;;;;;12434:201;;;;;;;;;;-1:-1:-1;12434:201:0;;;;;:::i;:::-;;:::i;25793:40::-;;;;;;;;;;;;;;;37012:97;;;;;;;;;;-1:-1:-1;37012:97:0;;;;;:::i;:::-;;:::i;31725:85::-;31764:13;31797:5;31790:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31725:85;:::o;30304:216::-;30408:10;30379:4;30396:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;30396:32:0;;;;;;;;;;:41;;;30453:37;30379:4;;30396:32;;30453:37;;;;30431:6;160:25:1;;148:2;133:18;;14:177;30453:37:0;;;;;;;;-1:-1:-1;30508:4:0;30304:216;;;;;:::o;26962:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26962:32:0;;-1:-1:-1;26962:32:0;:::o;35615:106::-;35664:13;35697:16;35690:23;;;;;:::i;30822:441::-;-1:-1:-1;;;;;30943:19:0;;30922:4;30943:19;;;:11;:19;;;;;;;;30963:10;30943:31;;;;;;;;-1:-1:-1;;30943:52:0;30939:257;;-1:-1:-1;;;;;31020:19:0;;;;;;:11;:19;;;;;;;;31040:10;31020:31;;;;;;;;:41;-1:-1:-1;31020:41:0;31012:83;;;;-1:-1:-1;;;31012:83:0;;5988:2:1;31012:83:0;;;5970:21:1;6027:2;6007:18;;;6000:30;6066:31;6046:18;;;6039:59;6115:18;;31012:83:0;;;;;;;;;-1:-1:-1;;;;;31144:19:0;;;;;;:11;:19;;;;;;;;31164:10;31144:31;;;;;;;;:40;;31178:6;;31144:40;:::i;:::-;-1:-1:-1;;;;;31110:19:0;;;;;;:11;:19;;;;;;;;31130:10;31110:31;;;;;;;:74;30939:257;31215:40;31229:6;31237:9;31248:6;31215:13;:40::i;:::-;31208:47;;30822:441;;;;;;:::o;37260:93::-;11414:13;:11;:13::i;:::-;37323:22:::1;:20;:22::i;:::-;37260:93::o:0;36512:224::-;11414:13;:11;:13::i;:::-;25743:42:::1;36566:33;36607:21;36638:4;36644:24;36638:4:::0;36644:9:::1;:24::i;:::-;36669:1;36671::::0;36673:7:::1;11574::::0;11601:6;-1:-1:-1;;;;;11601:6:0;;11528:87;36673:7:::1;36566:131;::::0;::::1;::::0;;;-1:-1:-1;;;;;;36566:131:0;;;-1:-1:-1;;;;;6768:15:1;;;36566:131:0::1;::::0;::::1;6750:34:1::0;6800:18;;;6793:34;;;;6843:18;;;6836:34;;;;6886:18;;;6879:34;6950:15;;;6929:19;;;6922:44;36681:15:0::1;6982:19:1::0;;;6975:35;6684:19;;36566:131:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;36708:13:0::1;:20:::0;;-1:-1:-1;;36708:20:0::1;36724:4;36708:20;::::0;;-1:-1:-1;36512:224:0:o;33789:136::-;33842:7;33902:15;25351:42;33902:9;:15::i;:::-;33884;25278:42;33884:9;:15::i;:::-;33869:12;;:30;;;;:::i;:::-;:48;;;;:::i;:::-;33862:55;;33789:136;:::o;36871:133::-;11414:13;:11;:13::i;:::-;-1:-1:-1;;;;;36961:26:0;;;::::1;;::::0;;;:18:::1;:26;::::0;;;;:35;;-1:-1:-1;;36961:35:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36871:133::o;35729:247::-;11574:7;11601:6;-1:-1:-1;;;;;11601:6:0;35786:10;:21;;:54;;-1:-1:-1;35825:15:0;;-1:-1:-1;;;;;35825:15:0;35811:10;:29;35786:54;35778:76;;;;-1:-1:-1;;;35778:76:0;;7534:2:1;35778:76:0;;;7516:21:1;7573:1;7553:18;;;7546:29;-1:-1:-1;;;7591:18:1;;;7584:39;7640:18;;35778:76:0;7332:332:1;35778:76:0;35883:58;;35866:12;;35891:10;;35915:21;;35866:12;35883:58;35866:12;35883:58;35915:21;35891:10;35883:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35865:76;;;35960:7;35952:16;;;;;;35767:209;35729:247::o;37117:135::-;11414:13;:11;:13::i;:::-;-1:-1:-1;;;;;37206:20:0;;;::::1;;::::0;;;:10:::1;:20:::0;;;;;:38;;-1:-1:-1;;37206:38:0::1;::::0;::::1;;::::0;;;::::1;::::0;;37117:135::o;30528:122::-;30583:4;30607:35;30615:7;-1:-1:-1;;30607:7:0;:35::i;36744:119::-;11414:13;:11;:13::i;:::-;-1:-1:-1;;;;;36827:19:0;;;::::1;;::::0;;;:11:::1;:19;::::0;;;;:28;;-1:-1:-1;;36827:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;36744:119::o;36380:124::-;11414:13;:11;:13::i;:::-;36440:17:::1;:15;:17::i;:::-;36436:61;;;36474:11;:9;:11::i;27133:41::-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31915:925::-;31981:7;;32051:17;32060:7;32051:8;:17::i;:::-;32047:591;;;32088:15;:22;:26;;;;:54;;;32141:1;32118:20;;:24;32088:54;32084:543;;;-1:-1:-1;;;;;32212:24:0;;32163:22;32212:24;;;:15;:24;;;;;;:28;32208:118;;-1:-1:-1;;;;;;32282:24:0;;;;;;:15;:24;;;;;;32208:118;32406:15;:22;32383:20;;32344:36;;32383:45;;;:::i;:::-;32344:84;;32482:14;32451:28;:45;32447:165;;;32547:45;32578:14;32547:28;:45;:::i;:::-;32521:71;;32447:165;32144:483;;32084:543;-1:-1:-1;;;;;32673:18:0;;32650:20;32673:18;;;:9;:18;;;;;;32706:27;;32702:99;;32750:39;32766:23;32750:39;;:::i;12176:103::-;11414:13;:11;:13::i;:::-;12241:30:::1;12268:1;12241:18;:30::i;37361:144::-:0;11414:13;:11;:13::i;:::-;37431:12:::1;::::0;37414:14:::1;:29:::0;;;37492:5:::1;::::0;37472:16:::1;::::0;37487:1:::1;37472:16;:::i;:::-;37471:26;;;;:::i;:::-;37454:14;:43:::0;37361:144::o;31818:89::-;31859:13;31892:7;31885:14;;;;;:::i;35114:493::-;11574:7;11601:6;-1:-1:-1;;;;;11601:6:0;35185:10;:21;;:54;;-1:-1:-1;35224:15:0;;-1:-1:-1;;;;;35224:15:0;35210:10;:29;35185:54;35177:85;;;;-1:-1:-1;;;35177:85:0;;8606:2:1;35177:85:0;;;8588:21:1;8645:2;8625:18;;;8618:30;-1:-1:-1;;;8664:18:1;;;8657:48;8722:18;;35177:85:0;8404:342:1;35177:85:0;35279:34;35294:8;;35279:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35279:34:0;;;;;;;;;;;;-1:-1:-1;;;35279:34:0;;;;;-1:-1:-1;35279:14:0;;-1:-1:-1;35279:34:0:i;:::-;35275:248;;;35339:9;35330:18;:6;:18;;;;;;-1:-1:-1;;35330:18:0;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35330:18:0;;;;;;;;;;;-1:-1:-1;;;;;;35330:18:0;;;;;;;;;;;;-1:-1:-1;;;;;35330:18:0;;;;;;;;;;;;35373:10;35363:20;:7;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35275:248;;;35474:6;35465:15;:6;:15;;-1:-1:-1;;;;;35465:15:0;;;;;;;;;-1:-1:-1;;;;;;35465:15:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;;35465:15:0;;;;;;;-1:-1:-1;;35465:15:0;;;;;;;;;;;;;;;;;;;;;35495:7;:16;;;;;;;;;;;;;;;;;;;;35275:248;35535:16;:27;35554:8;;35535:16;:27;:::i;:::-;;35578:21;35590:8;;35578:21;;;;;;;:::i;:::-;;;;;;;;35114:493;;:::o;30658:156::-;30738:4;30762:44;30776:10;30788:9;30799:6;30762:13;:44::i;32848:778::-;32921:7;;32991:17;33000:7;32991:8;:17::i;:::-;32987:591;;;33028:15;:22;:26;;;;:54;;;33081:1;33058:20;;:24;33028:54;33024:543;;;-1:-1:-1;;;;;33152:24:0;;33103:22;33152:24;;;:15;:24;;;;;;:28;33148:118;;-1:-1:-1;;;;;;33222:24:0;;;;;;:15;:24;;;;;;33148:118;33346:15;:22;33323:20;;33284:36;;33323:45;;;:::i;:::-;33284:84;;33422:14;33391:28;:45;33387:165;;;33487:45;33518:14;33487:28;:45;:::i;:::-;33461:71;;33387:165;33084:483;;33595:23;32848:778;-1:-1:-1;;32848:778:0:o;45982:889::-;-1:-1:-1;;;;;46048:26:0;;;;;;:18;:26;;;;;;;;46043:821;;46094:16;46103:6;46094:8;:16::i;:::-;46090:763;;;-1:-1:-1;;;;;46134:17:0;;;;;;:9;:17;;;;;;;;:26;;;;46130:279;;-1:-1:-1;;;;;46184:17:0;;;;;;:9;:17;;;;;;;;:24;;-1:-1:-1;;46184:24:0;46204:4;46184:24;;;;;;46231:12;:20;;;;;46254:15;46231:38;;46292:15;:28;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;46292:28:0;;;;;;;46363:22;:26;;46204:4;46363:26;:::i;:::-;-1:-1:-1;;;;;46343:17:0;;;;;;:9;:17;;;;;:46;35767:209;35729:247::o;46090:763::-;-1:-1:-1;;;;;46453:17:0;;;;;;:9;:17;;;;;;;;:25;;:17;:25;46449:389;;-1:-1:-1;;;;;46502:17:0;;46522:5;46502:17;;;:9;:17;;;;;;;;:25;;-1:-1:-1;;46502:25:0;;;46550:12;:20;;;;;:24;;;46654:9;:17;;;;;;;46607:15;46623:22;;46654:17;;46522:5;46623:26;;46502:25;;46623:26;:::i;:::-;46607:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;46607:43:0;46597:54;;;;;;;;;;;;:74;46731:15;46747:22;;:26;;46607:43;;46747:26;:::i;:::-;46731:43;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;46710:17:0;;;;;:9;:17;;;;;;;;46694:15;:34;;46731:43;;;;;46694:15;:34;;;;;;:::i;:::-;;;;;;;;;:80;;;;;-1:-1:-1;;;;;46694:80:0;;;;;-1:-1:-1;;;;;46694:80:0;;;;;;46797:15;:21;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;46797:21:0;;;;;-1:-1:-1;;;;;;46797:21:0;;;;;;45982:889;:::o;33937:255::-;-1:-1:-1;;;;;34020:33:0;;33999:4;34020:33;;;:18;:33;;;;;;;;;:62;;-1:-1:-1;;;;;;34057:25:0;;;;;;:10;:25;;;;;;;;34020:62;34016:106;;;-1:-1:-1;34105:5:0;;33937:255;-1:-1:-1;33937:255:0:o;34016:106::-;-1:-1:-1;34167:17:0;;-1:-1:-1;;;;;34139:24:0;;;;;;;:9;:24;;;;;;:45;;;33937:255::o;35982:208::-;11574:7;11601:6;-1:-1:-1;;;;;11601:6:0;36037:10;:21;;:54;;-1:-1:-1;36076:15:0;;-1:-1:-1;;;;;36076:15:0;36062:10;:29;36037:54;36029:76;;;;-1:-1:-1;;;36029:76:0;;7534:2:1;36029:76:0;;;7516:21:1;7573:1;7553:18;;;7546:29;-1:-1:-1;;;7591:18:1;;;7584:39;7640:18;;36029:76:0;7332:332:1;36029:76:0;36116:66;36138:4;36145:10;36157:24;36175:4;36157:9;:24::i;:::-;36116:13;:66::i;36198:174::-;11414:13;:11;:13::i;:::-;36285:12:::1;:23:::0;;-1:-1:-1;;;;36285:23:0::1;-1:-1:-1::0;;;36285:23:0;::::1;;;;::::0;;36337:12:::1;::::0;36359:5:::1;::::0;36337:18:::1;::::0;36352:3;;36337:18:::1;:::i;:::-;36336:28;;;;:::i;:::-;36319:14;:45:::0;-1:-1:-1;;36198:174:0:o;12434:201::-;11414:13;:11;:13::i;:::-;-1:-1:-1;;;;;12523:22:0;::::1;12515:73;;;::::0;-1:-1:-1;;;12515:73:0;;11802:2:1;12515:73:0::1;::::0;::::1;11784:21:1::0;11841:2;11821:18;;;11814:30;11880:34;11860:18;;;11853:62;-1:-1:-1;;;11931:18:1;;;11924:36;11977:19;;12515:73:0::1;11600:402:1::0;12515:73:0::1;12599:28;12618:8;12599:18;:28::i;37012:97::-:0;11414:13;:11;:13::i;:::-;37080:16:::1;:21:::0;;;::::1;;;;-1:-1:-1::0;;37080:21:0;;::::1;::::0;;;::::1;::::0;;37012:97::o;39517:2532::-;-1:-1:-1;;;;;39635:21:0;;39609:4;39635:21;;;:10;:21;;;;;;;;39634:22;:45;;;;-1:-1:-1;;;;;;39661:18:0;;;;;;:10;:18;;;;;;;;39660:19;39634:45;39626:69;;;;-1:-1:-1;;;39626:69:0;;12209:2:1;39626:69:0;;;12191:21:1;12248:2;12228:18;;;12221:30;-1:-1:-1;;;12267:18:1;;;12260:41;12318:18;;39626:69:0;12007:335:1;39626:69:0;39723:1;39714:6;:10;39706:64;;;;-1:-1:-1;;;39706:64:0;;12549:2:1;39706:64:0;;;12531:21:1;12588:2;12568:18;;;12561:30;12627:34;12607:18;;;12600:62;-1:-1:-1;;;12678:18:1;;;12671:39;12727:19;;39706:64:0;12347:405:1;39706:64:0;-1:-1:-1;;;;;39789:14:0;;25278:42;39789:14;;;;:32;;-1:-1:-1;;;;;;39807:14:0;;;;39789:32;39781:70;;;;-1:-1:-1;;;39781:70:0;;12959:2:1;39781:70:0;;;12941:21:1;12998:2;12978:18;;;12971:30;13037:27;13017:18;;;13010:55;13082:18;;39781:70:0;12757:349:1;39781:70:0;39881:15;-1:-1:-1;;;;;39868:28:0;:9;-1:-1:-1;;;;;39868:28:0;;;:58;;;;-1:-1:-1;;;;;;39900:26:0;;39921:4;39900:26;;39868:58;39864:174;;;39984:14;;39974:6;39951:20;39961:9;39951;:20::i;:::-;:29;;;;:::i;:::-;:47;;39943:83;;;;-1:-1:-1;;;39943:83:0;;13313:2:1;39943:83:0;;;13295:21:1;13352:2;13332:18;;;13325:30;13391:25;13371:18;;;13364:53;13434:18;;39943:83:0;13111:347:1;39943:83:0;40054:6;;-1:-1:-1;;;40054:6:0;;;;40050:87;;;40084:41;40099:6;40107:9;40118:6;40084:14;:41::i;:::-;40077:48;;;;40050:87;40154:13;;;;40149:620;;-1:-1:-1;;;;;40188:23:0;;40206:4;40188:23;;:44;;-1:-1:-1;11574:7:0;11601:6;-1:-1:-1;;;;;40215:17:0;;;11601:6;;40215:17;40188:44;:73;;;-1:-1:-1;40246:15:0;;-1:-1:-1;;;;;40236:25:0;;;40246:15;;40236:25;40188:73;40184:408;;;40286:31;;;;;13665:2:1;13647:21;;;13704:2;13684:18;;;13677:30;-1:-1:-1;;;13738:2:1;13723:18;;13716:50;13798:2;13783:18;;13463:344;40286:31:0;;;;;;;;40343:41;40358:6;40366:9;40377:6;40343:14;:41::i;40184:408::-;40506:23;40522:6;40506:15;:23::i;:::-;40547:26;40563:9;40547:15;:26::i;:::-;40439:135;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;40439:135:0;;;;;;;;;;-1:-1:-1;;;40425:151:0;;;;;;;:::i;40149:620::-;11574:7;11601:6;-1:-1:-1;;;;;40628:17:0;;;11601:6;;40628:17;;:46;;-1:-1:-1;40659:15:0;;-1:-1:-1;;;;;40649:25:0;;;40659:15;;40649:25;40628:46;40624:134;;;40701:41;40716:6;40724:9;40735:6;40701:14;:41::i;40624:134::-;40785:17;:15;:17::i;:::-;40781:61;;;40819:11;:9;:11::i;:::-;-1:-1:-1;;;;;40859:26:0;;;;;;:18;:26;;;;;;;;40854:73;;40901:14;40908:6;40901;:14::i;:::-;-1:-1:-1;;;;;40947:17:0;;;;;;:9;:17;;;;;;:27;-1:-1:-1;40947:27:0;40939:65;;;;-1:-1:-1;;;40939:65:0;;14878:2:1;40939:65:0;;;14860:21:1;14917:2;14897:18;;;14890:30;14956:27;14936:18;;;14929:55;15001:18;;40939:65:0;14676:349:1;40939:65:0;-1:-1:-1;;;;;41035:17:0;;;;;;:9;:17;;;;;;:26;;41055:6;;41035:26;:::i;:::-;-1:-1:-1;;;;;41015:17:0;;;;;;:9;:17;;;;;:46;41074:25;41025:6;41074:17;:25::i;:::-;41126:15;-1:-1:-1;;;;;41116:25:0;:6;-1:-1:-1;;;;;41116:25:0;;41112:106;;-1:-1:-1;;;;;41171:17:0;;;;;;:9;:17;;;;;41191:15;41171:35;;41112:106;41230:12;41245:36;41255:6;41263:9;41274:6;41245:9;:36::i;:::-;41230:51;-1:-1:-1;41320:6:0;41341:8;;41337:196;;41366:25;41387:4;41366:25;;:::i;:::-;41451:4;41433:24;;;;:9;:24;;;;;;41366:25;;-1:-1:-1;41433:31:0;;41460:4;;41433:31;:::i;:::-;41424:4;41406:24;;;;:9;:24;;;;;;;:58;;;;41484:37;;-1:-1:-1;;;;;41484:37:0;;;;;;;41516:4;160:25:1;;148:2;133:18;;14:177;41484:37:0;;;;;;;;41337:196;-1:-1:-1;;;;;41568:20:0;;;;;;:9;:20;;;;;;:40;;41591:17;;41568:40;:::i;:::-;-1:-1:-1;;;;;41545:20:0;;;;;;:9;:20;;;;;:63;41629:28;41555:9;41629:17;:28::i;:::-;41684:15;-1:-1:-1;;;;;41674:25:0;:6;-1:-1:-1;;;;;41674:25:0;;41670:107;;-1:-1:-1;;;;;41728:19:0;;;;;;:8;:19;;;;;41750:15;41728:37;;41670:107;41811:9;-1:-1:-1;;;;;41794:46:0;41803:6;-1:-1:-1;;;;;41794:46:0;;41822:17;41794:46;;;;160:25:1;;148:2;133:18;;14:177;41794:46:0;;;;;;;;41865:15;-1:-1:-1;;;;;41855:25:0;:6;-1:-1:-1;;;;;41855:25:0;;:57;;;;41897:15;-1:-1:-1;;;;;41884:28:0;:9;-1:-1:-1;;;;;41884:28:0;;41855:57;41851:169;;;41934:16;;;;;;;41930:79;;;41971:22;:20;:22::i;:::-;-1:-1:-1;42037:4:0;;39517:2532;-1:-1:-1;;;;;39517:2532:0:o;11693:132::-;11574:7;11601:6;-1:-1:-1;;;;;11601:6:0;10159:10;11757:23;11749:68;;;;-1:-1:-1;;;11749:68:0;;15232:2:1;11749:68:0;;;15214:21:1;;;15251:18;;;15244:30;15310:34;15290:18;;;15283:62;15362:18;;11749:68:0;15030:356:1;37773:363:0;37849:16;;;37863:1;37849:16;;;;;;;;37825:21;;37849:16;;;;;;;;;;-1:-1:-1;37849:16:0;37825:40;;25743:42;-1:-1:-1;;;;;37886:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37876:4;37881:1;37876:7;;;;;;;;:::i;:::-;;;;;;:34;-1:-1:-1;;;;;37876:34:0;;;-1:-1:-1;;;;;37876:34:0;;;;;37939:4;37921;37926:1;37921:7;;;;;;;;:::i;:::-;-1:-1:-1;;;;;37921:23:0;;;:7;;;;;;;;;;;:23;37984:49;;-1:-1:-1;;;37984:49:0;;37957:24;;25743:42;;37984:31;;:49;;38016:10;;38028:4;;37984:49;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;37984:49:0;;;;;;;;;;;;:::i;:::-;37957:76;;38046:22;38071:7;38079:1;38071:10;;;;;;;;:::i;:::-;;;;;;;;;;;38094:17;:34;-1:-1:-1;;;37773:363:0:o;44118:168::-;44168:4;44192:10;-1:-1:-1;;;;;44206:15:0;44192:29;;;;;:40;;-1:-1:-1;44226:6:0;;-1:-1:-1;;;44226:6:0;;;;44225:7;44192:40;:56;;;;-1:-1:-1;44236:12:0;;-1:-1:-1;;;44236:12:0;;;;44192:56;:86;;;;;44252:26;:24;:26::i;44294:1088::-;28289:6;:13;;-1:-1:-1;;;;;;;28289:13:0;;;;;;44344:30:::1;::::0;;::::1;::::0;::::1;::::0;;44367:7:::1;44344:30:::0;28289:13;44344:30;;::::1;::::0;;28289:13;44344:30;::::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;;::::0;;;;;;;;;;::::1;-1:-1:-1::0;;;;;44344:30:0::1;::::0;;;;44410:14:::1;::::0;44435:49:::1;25743:42;44410:14:::0;44435:7:::1;:49::i;:::-;-1:-1:-1::0;44538:16:0::1;::::0;;44552:1:::1;44538:16:::0;;;;;::::1;::::0;;44514:21:::1;::::0;44538:16:::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;44538:16:0::1;44514:40;;44583:4;44565;44570:1;44565:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1::0;;;;;44565:23:0::1;;;-1:-1:-1::0;;;;;44565:23:0::1;;;::::0;::::1;25743:42;-1:-1:-1::0;;;;;44609:22:0::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44599:4;44604:1;44599:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;44599:34:0;;::::1;:7;::::0;;::::1;::::0;;;;;;;:34;44646:147:::1;::::0;-1:-1:-1;;;44646:147:0;;25743:42:::1;::::0;44646:68:::1;::::0;:147:::1;::::0;44729:12;;44743:1:::1;::::0;44746:4;;44760::::1;::::0;44767:15:::1;::::0;44646:147:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;44901:20:0;;44883:15:::1;::::0;::::1;::::0;44826:21:::1;::::0;-1:-1:-1;44806:17:0::1;::::0;-1:-1:-1;44883:38:0::1;::::0;::::1;;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;44860:61:0::1;;;44932:23;44989:12;44970:9;:16;;;44958:28;;:9;:28;;;;:::i;:::-;:43;;;;:::i;:::-;44932:69;;45012:21;45065:12;45048:9;:14;;;45036:26;;:9;:26;;;;:::i;:::-;:41;;;;:::i;:::-;45012:65:::0;-1:-1:-1;45111:19:0;;45107:132:::1;;45176:17;::::0;45168:59:::1;::::0;45148:15:::1;::::0;-1:-1:-1;;;;;45176:17:0::1;::::0;45207:15;;45148;45168:59;45148:15;45168:59;45207:15;45176:17;45168:59:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;45107:132:0::1;45253:17:::0;;45249:126:::1;;45316:15;::::0;45308:55:::1;::::0;45288:15:::1;::::0;-1:-1:-1;;;;;45316:15:0::1;::::0;45345:13;;45288:15;45308:55;45288:15;45308:55;45345:13;45316:15;45308:55:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;45249:126:0::1;-1:-1:-1::0;;28325:6:0;:14;;-1:-1:-1;;;;28325:14:0;;;-1:-1:-1;;;;;44294:1088:0:o;12795:191::-;12869:16;12888:6;;-1:-1:-1;;;;;12905:17:0;;;-1:-1:-1;;;;;;12905:17:0;;;;;;12938:40;;12888:6;;;;;;;12938:40;;12869:16;12938:40;12858:128;12795:191;:::o;45559:155::-;45687:19;;;;;;;45664;;;;;;;;;;:42;;45559:155::o;42057:673::-;-1:-1:-1;;;;;42175:17:0;;42150:4;42175:17;;;:9;:17;;;;;;:27;-1:-1:-1;42175:27:0;42167:60;;;;-1:-1:-1;;;42167:60:0;;18578:2:1;42167:60:0;;;18560:21:1;18617:2;18597:18;;;18590:30;-1:-1:-1;;;18636:18:1;;;18629:50;18696:18;;42167:60:0;18376:344:1;42167:60:0;-1:-1:-1;;;;;42258:17:0;;;;;;:9;:17;;;;;;:26;;42278:6;;42258:26;:::i;:::-;-1:-1:-1;;;;;42238:17:0;;;;;;:9;:17;;;;;:46;42295:25;42248:6;42295:17;:25::i;:::-;-1:-1:-1;;;;;42354:20:0;;;;;;:9;:20;;;;;;:29;;42377:6;;42354:29;:::i;:::-;-1:-1:-1;;;;;42331:20:0;;;;;;:9;:20;;;;;:52;42394:28;42341:9;42394:17;:28::i;:::-;-1:-1:-1;;;;;42433:19:0;;;;;;;:8;:19;;;;;;;42455:15;42433:37;;42486:35;42433:19;;42486:35;;;;;;;42514:6;160:25:1;;148:2;133:18;;14:177;42486:35:0;;;;;;;;42546:15;-1:-1:-1;;;;;42536:25:0;:6;-1:-1:-1;;;;;42536:25:0;;:57;;;;42578:15;-1:-1:-1;;;;;42565:28:0;:9;-1:-1:-1;;;;;42565:28:0;;42536:57;42532:169;;;42615:16;;;;;;;42611:79;;;42652:22;:20;:22::i;:::-;-1:-1:-1;42718:4:0;42057:673;;;;;:::o;34333:513::-;34487:42;;;;;;;;;;;-1:-1:-1;;;34487:42:0;;;;34559:13;;34569:2;34559:13;;;34399;34559;;;;;;-1:-1:-1;;;;;34449:26:0;;;34487:42;-1:-1:-1;;34559:13:0;;;;;;;;;;-1:-1:-1;34559:13:0;34540:32;;-1:-1:-1;;;34583:3:0;34587:1;34583:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;34583:12:0;;;;;;;;;-1:-1:-1;;;34606:3:0;34610:1;34606:6;;;;;;;;:::i;:::-;;;;:12;-1:-1:-1;;;;;34606:12:0;;;;;;;;;34634:9;34629:181;34653:2;34649:1;:6;34629:181;;;34694:8;34726:1;34709:5;34715:6;:1;34719:2;34715:6;:::i;:::-;34709:13;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;34709:18:0;;;;34703:25;;34694:35;;;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;34694:35:0;34677:3;34685:5;:1;34689;34685:5;:::i;:::-;34681:9;;:1;:9;:::i;:::-;34677:14;;;;;;;;:::i;:::-;;;;:52;-1:-1:-1;;;;;34677:52:0;;;;;;;;-1:-1:-1;34761:8:0;34776:5;34782:6;:1;34786:2;34782:6;:::i;:::-;34776:13;;;;;;;:::i;:::-;34761:37;;34776:13;;;34792:4;34770:27;;34761:37;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;34761:37:0;34744:3;34752:5;:1;34756;34752:5;:::i;:::-;34748:9;;:1;:9;:::i;:::-;34744:14;;;;;;;;:::i;:::-;;;;:54;-1:-1:-1;;;;;34744:54:0;;;;;;;;-1:-1:-1;34657:3:0;;;;:::i;:::-;;;;34629:181;;;-1:-1:-1;34834:3:0;34333:513;-1:-1:-1;;;;34333:513:0:o;38144:1365::-;38196:31;38246:16;38255:6;38246:8;:16::i;:::-;38242:588;;;38282:15;:22;:26;;;;:54;;;38335:1;38312:20;;:24;38282:54;38278:541;;;-1:-1:-1;;;;;38406:23:0;;38357:22;38406:23;;;:15;:23;;;;;;:27;38402:116;;-1:-1:-1;;;;;;38475:23:0;;;;;;:15;:23;;;;;;38402:116;38598:15;:22;38575:20;;38536:36;;38575:45;;;:::i;:::-;38536:84;;38674:14;38643:28;:45;38639:165;;;38739:45;38770:14;38739:28;:45;:::i;:::-;38713:71;;38639:165;38338:481;;38278:541;-1:-1:-1;;;;;38865:17:0;;38842:20;38865:17;;;:9;:17;;;;;;38897:27;;38893:99;;38941:39;38957:23;38941:39;;:::i;:::-;;;38893:99;39029:23;39067:20;;39063:439;;39103:55;39126:4;39133:6;39141:16;39103:14;:55::i;:::-;-1:-1:-1;;;;;;39212:36:0;;;;;;:28;:36;;;;;;:55;;39251:16;;39212:55;:::i;:::-;-1:-1:-1;;;;;39173:36:0;;;;;;:28;:36;;;;;:94;39286:27;;39282:209;;-1:-1:-1;;;;;39360:23:0;;;;;;:15;:23;;;;;;:49;;39386:23;;39360:49;:::i;:::-;-1:-1:-1;;;;;39334:23:0;;;;;;:15;:23;;;;;:75;;;;39428:20;:47;;39452:23;;39334;39428:47;;39452:23;;39428:47;:::i;:::-;;;;-1:-1:-1;;39282:209:0;38185:1324;;;38144:1365;:::o;42738:999::-;42873:28;;;;;;;;;42895:6;42873:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;42873:28:0;;;;;;;;;;;;;;;42912:30;;;;;;;42935:7;42912:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42826:7;;;;42873:28;42956:33;42971:6;42979:9;42956:14;:33::i;:::-;42953:755;;;43015:27;43075:15;-1:-1:-1;;;;;43065:25:0;:6;-1:-1:-1;;;;;43065:25:0;;43061:374;;43118:35;43149:3;43118:26;43129:8;:14;;;-1:-1:-1;;;;;43118:26:0;:6;:10;;:26;;;;:::i;:::-;:30;;:35::i;:::-;43111:42;;43194:49;43228:8;:14;;;-1:-1:-1;;;;;43194:49:0;:29;43203:8;:19;;;43194:29;;:4;:8;;:29;;;;:::i;:49::-;43172:71;;43061:374;;;43291:36;43323:3;43291:27;43302:9;:15;;;-1:-1:-1;;;;;43291:27:0;:6;:10;;:27;;;;:::i;:36::-;43284:43;;43368:51;43403:9;:15;;;-1:-1:-1;;;;;43368:51:0;:30;43377:9;:20;;;43368:30;;:4;:8;;:30;;;;:::i;:51::-;43346:73;;43061:374;43455:23;;43451:246;;43519:19;43499:16;;:39;;;;;;;:::i;:::-;;;;;;;;43581:19;43557:20;;:43;;;;;;;:::i;:::-;;;;-1:-1:-1;;43664:16:0;;43624:57;;;19039:25:1;;;19095:2;19080:18;;19073:34;;;;43624:57:0;;19012:18:1;43624:57:0;;;;;;;43451:246;43000:708;42953:755;-1:-1:-1;43725:4:0;;42738:999;-1:-1:-1;;;;;42738:999:0:o;43745:365::-;43862:4;43804;43844:24;;;:9;:24;;;;;;43923:14;;43900:20;;43804:4;;43900:37;;;:::i;:::-;43879:58;;43965:12;43952:10;:25;43948:70;;;44001:5;43994:12;;;;43745:365;:::o;43948:70::-;44028:26;44044:10;44028:26;;:::i;:::-;44088:14;;-1:-1:-1;44072:30:0;;43745:365;-1:-1:-1;;;43745:365:0:o;45390:161::-;-1:-1:-1;;;;;45497:19:0;;45472:4;45497:19;;;:11;:19;;;;;;;;45496:20;:47;;;;-1:-1:-1;;;;;;;45521:22:0;;;;;:11;:22;;;;;;;;45520:23;;45390:161;-1:-1:-1;45390:161:0:o;6075:98::-;6133:7;6160:5;6164:1;6160;:5;:::i;6474:98::-;6532:7;6559:5;6563:1;6559;:5;:::i;654:250:1:-;739:1;749:113;763:6;760:1;757:13;749:113;;;839:11;;;833:18;820:11;;;813:39;785:2;778:10;749:113;;;-1:-1:-1;;896:1:1;878:16;;871:27;654:250::o;909:396::-;1058:2;1047:9;1040:21;1021:4;1090:6;1084:13;1133:6;1128:2;1117:9;1113:18;1106:34;1149:79;1221:6;1216:2;1205:9;1201:18;1196:2;1188:6;1184:15;1149:79;:::i;:::-;1289:2;1268:15;-1:-1:-1;;1264:29:1;1249:45;;;;1296:2;1245:54;;909:396;-1:-1:-1;;909:396:1:o;1310:131::-;-1:-1:-1;;;;;1385:31:1;;1375:42;;1365:70;;1431:1;1428;1421:12;1446:315;1514:6;1522;1575:2;1563:9;1554:7;1550:23;1546:32;1543:52;;;1591:1;1588;1581:12;1543:52;1630:9;1617:23;1649:31;1674:5;1649:31;:::i;:::-;1699:5;1751:2;1736:18;;;;1723:32;;-1:-1:-1;;;1446:315:1:o;1958:247::-;2017:6;2070:2;2058:9;2049:7;2045:23;2041:32;2038:52;;;2086:1;2083;2076:12;2038:52;2125:9;2112:23;2144:31;2169:5;2144:31;:::i;2210:180::-;2269:6;2322:2;2310:9;2301:7;2297:23;2293:32;2290:52;;;2338:1;2335;2328:12;2290:52;-1:-1:-1;2361:23:1;;2210:180;-1:-1:-1;2210:180:1:o;2603:456::-;2680:6;2688;2696;2749:2;2737:9;2728:7;2724:23;2720:32;2717:52;;;2765:1;2762;2755:12;2717:52;2804:9;2791:23;2823:31;2848:5;2823:31;:::i;:::-;2873:5;-1:-1:-1;2930:2:1;2915:18;;2902:32;2943:33;2902:32;2943:33;:::i;:::-;2603:456;;2995:7;;-1:-1:-1;;;3049:2:1;3034:18;;;;3021:32;;2603:456::o;3253:160::-;3318:20;;3374:13;;3367:21;3357:32;;3347:60;;3403:1;3400;3393:12;3347:60;3253:160;;;:::o;3418:315::-;3483:6;3491;3544:2;3532:9;3523:7;3519:23;3515:32;3512:52;;;3560:1;3557;3550:12;3512:52;3599:9;3586:23;3618:31;3643:5;3618:31;:::i;:::-;3668:5;-1:-1:-1;3692:35:1;3723:2;3708:18;;3692:35;:::i;:::-;3682:45;;3418:315;;;;;:::o;3973:592::-;4044:6;4052;4105:2;4093:9;4084:7;4080:23;4076:32;4073:52;;;4121:1;4118;4111:12;4073:52;4161:9;4148:23;4190:18;4231:2;4223:6;4220:14;4217:34;;;4247:1;4244;4237:12;4217:34;4285:6;4274:9;4270:22;4260:32;;4330:7;4323:4;4319:2;4315:13;4311:27;4301:55;;4352:1;4349;4342:12;4301:55;4392:2;4379:16;4418:2;4410:6;4407:14;4404:34;;;4434:1;4431;4424:12;4404:34;4479:7;4474:2;4465:6;4461:2;4457:15;4453:24;4450:37;4447:57;;;4500:1;4497;4490:12;4447:57;4531:2;4523:11;;;;;4553:6;;-1:-1:-1;3973:592:1;;-1:-1:-1;;;;3973:592:1:o;4570:388::-;4638:6;4646;4699:2;4687:9;4678:7;4674:23;4670:32;4667:52;;;4715:1;4712;4705:12;4667:52;4754:9;4741:23;4773:31;4798:5;4773:31;:::i;:::-;4823:5;-1:-1:-1;4880:2:1;4865:18;;4852:32;4893:33;4852:32;4893:33;:::i;:::-;4945:7;4935:17;;;4570:388;;;;;:::o;4963:248::-;5028:6;5036;5089:2;5077:9;5068:7;5064:23;5060:32;5057:52;;;5105:1;5102;5095:12;5057:52;5128:26;5144:9;5128:26;:::i;5216:180::-;5272:6;5325:2;5313:9;5304:7;5300:23;5296:32;5293:52;;;5341:1;5338;5331:12;5293:52;5364:26;5380:9;5364:26;:::i;5401:380::-;5480:1;5476:12;;;;5523;;;5544:61;;5598:4;5590:6;5586:17;5576:27;;5544:61;5651:2;5643:6;5640:14;5620:18;5617:38;5614:161;;5697:10;5692:3;5688:20;5685:1;5678:31;5732:4;5729:1;5722:15;5760:4;5757:1;5750:15;5614:161;;5401:380;;;:::o;6144:127::-;6205:10;6200:3;6196:20;6193:1;6186:31;6236:4;6233:1;6226:15;6260:4;6257:1;6250:15;6276:128;6343:9;;;6364:11;;;6361:37;;;6378:18;;:::i;7021:306::-;7109:6;7117;7125;7178:2;7166:9;7157:7;7153:23;7149:32;7146:52;;;7194:1;7191;7184:12;7146:52;7223:9;7217:16;7207:26;;7273:2;7262:9;7258:18;7252:25;7242:35;;7317:2;7306:9;7302:18;7296:25;7286:35;;7021:306;;;;;:::o;7879:217::-;7919:1;7945;7935:132;;7989:10;7984:3;7980:20;7977:1;7970:31;8024:4;8021:1;8014:15;8052:4;8049:1;8042:15;7935:132;-1:-1:-1;8081:9:1;;7879:217::o;8101:125::-;8166:9;;;8187:10;;;8184:36;;;8200:18;;:::i;8231:168::-;8304:9;;;8335;;8352:15;;;8346:22;;8332:37;8322:71;;8373:18;;:::i;8751:127::-;8812:10;8807:3;8803:20;8800:1;8793:31;8843:4;8840:1;8833:15;8867:4;8864:1;8857:15;9009:545;9111:2;9106:3;9103:11;9100:448;;;9147:1;9172:5;9168:2;9161:17;9217:4;9213:2;9203:19;9287:2;9275:10;9271:19;9268:1;9264:27;9258:4;9254:38;9323:4;9311:10;9308:20;9305:47;;;-1:-1:-1;9346:4:1;9305:47;9401:2;9396:3;9392:12;9389:1;9385:20;9379:4;9375:31;9365:41;;9456:82;9474:2;9467:5;9464:13;9456:82;;;9519:17;;;9500:1;9489:13;9456:82;;;9460:3;;;9100:448;9009:545;;;:::o;9730:1206::-;9854:18;9849:3;9846:27;9843:53;;;9876:18;;:::i;:::-;9905:94;9995:3;9955:38;9987:4;9981:11;9955:38;:::i;:::-;9949:4;9905:94;:::i;:::-;10025:1;10050:2;10045:3;10042:11;10067:1;10062:616;;;;10722:1;10739:3;10736:93;;;-1:-1:-1;10795:19:1;;;10782:33;10736:93;-1:-1:-1;;9687:1:1;9683:11;;;9679:24;9675:29;9665:40;9711:1;9707:11;;;9662:57;10842:78;;10035:895;;10062:616;8956:1;8949:14;;;8993:4;8980:18;;-1:-1:-1;;10098:17:1;;;10199:9;10221:229;10235:7;10232:1;10229:14;10221:229;;;10324:19;;;10311:33;10296:49;;10431:4;10416:20;;;;10384:1;10372:14;;;;10251:12;10221:229;;;10225:3;10478;10469:7;10466:16;10463:159;;;10602:1;10598:6;10592:3;10586;10583:1;10579:11;10575:21;10571:34;10567:39;10554:9;10549:3;10545:19;10532:33;10528:79;10520:6;10513:95;10463:159;;;10665:1;10659:3;10656:1;10652:11;10648:19;10642:4;10635:33;10035:895;;;9730:1206;;;:::o;10941:390::-;11100:2;11089:9;11082:21;11139:6;11134:2;11123:9;11119:18;11112:34;11196:6;11188;11183:2;11172:9;11168:18;11155:48;11252:1;11223:22;;;11247:2;11219:31;;;11212:42;;;;11315:2;11294:15;;;-1:-1:-1;;11290:29:1;11275:45;11271:54;;10941:390;-1:-1:-1;10941:390:1:o;11336:127::-;11397:10;11392:3;11388:20;11385:1;11378:31;11428:4;11425:1;11418:15;11452:4;11449:1;11442:15;11468:127;11529:10;11524:3;11520:20;11517:1;11510:31;11560:4;11557:1;11550:15;11584:4;11581:1;11574:15;13812:859;14223:34;14218:3;14211:47;-1:-1:-1;;;14283:2:1;14278:3;14274:12;14267:38;14193:3;14334:6;14328:13;14350:73;14416:6;14411:2;14406:3;14402:12;14397:2;14389:6;14385:15;14350:73;:::i;:::-;-1:-1:-1;;;14482:2:1;14442:16;;;14474:11;;;14467:35;14527:13;;14549:74;14527:13;14609:2;14601:11;;14596:2;14584:15;;14549:74;:::i;:::-;14643:17;14662:2;14639:26;;13812:859;-1:-1:-1;;;;13812:859:1:o;15391:251::-;15461:6;15514:2;15502:9;15493:7;15489:23;15485:32;15482:52;;;15530:1;15527;15520:12;15482:52;15562:9;15556:16;15581:31;15606:5;15581:31;:::i;15647:461::-;15700:3;15738:5;15732:12;15765:6;15760:3;15753:19;15791:4;15820:2;15815:3;15811:12;15804:19;;15857:2;15850:5;15846:14;15878:1;15888:195;15902:6;15899:1;15896:13;15888:195;;;15967:13;;-1:-1:-1;;;;;15963:39:1;15951:52;;16023:12;;;;16058:15;;;;15999:1;15917:9;15888:195;;;-1:-1:-1;16099:3:1;;15647:461;-1:-1:-1;;;;;15647:461:1:o;16113:356::-;16344:6;16333:9;16326:25;16387:2;16382;16371:9;16367:18;16360:30;16307:4;16407:56;16459:2;16448:9;16444:18;16436:6;16407:56;:::i;16474:1105::-;16569:6;16600:2;16643;16631:9;16622:7;16618:23;16614:32;16611:52;;;16659:1;16656;16649:12;16611:52;16692:9;16686:16;16721:18;16762:2;16754:6;16751:14;16748:34;;;16778:1;16775;16768:12;16748:34;16816:6;16805:9;16801:22;16791:32;;16861:7;16854:4;16850:2;16846:13;16842:27;16832:55;;16883:1;16880;16873:12;16832:55;16912:2;16906:9;16934:2;16930;16927:10;16924:36;;;16940:18;;:::i;:::-;16986:2;16983:1;16979:10;17018:2;17012:9;17081:2;17077:7;17072:2;17068;17064:11;17060:25;17052:6;17048:38;17136:6;17124:10;17121:22;17116:2;17104:10;17101:18;17098:46;17095:72;;;17147:18;;:::i;:::-;17183:2;17176:22;17233:18;;;17267:15;;;;-1:-1:-1;17309:11:1;;;17305:20;;;17337:19;;;17334:39;;;17369:1;17366;17359:12;17334:39;17393:11;;;;17413:135;17429:6;17424:3;17421:15;17413:135;;;17495:10;;17483:23;;17446:12;;;;17526;;;;17413:135;;;17567:6;16474:1105;-1:-1:-1;;;;;;;;16474:1105:1:o;17584:582::-;17883:6;17872:9;17865:25;17926:6;17921:2;17910:9;17906:18;17899:34;17969:3;17964:2;17953:9;17949:18;17942:31;17846:4;17990:57;18042:3;18031:9;18027:19;18019:6;17990:57;:::i;:::-;-1:-1:-1;;;;;18083:32:1;;;;18078:2;18063:18;;18056:60;-1:-1:-1;18147:3:1;18132:19;18125:35;17982:65;17584:582;-1:-1:-1;;;17584:582:1:o;18171:200::-;-1:-1:-1;;;;;18307:10:1;;;18295;;;18291:27;;18330:12;;;18327:38;;;18345:18;;:::i;:::-;18327:38;18171:200;;;;:::o;18725:135::-;18764:3;18785:17;;;18782:43;;18805:18;;:::i;:::-;-1:-1:-1;18852:1:1;18841:13;;18725:135::o

Swarm Source

ipfs://fd5c2b82fdd1cc58f43b407262ad5e75c1fbb71f4eba97883bd6943a84e6bd43
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.