ETH Price: $2,395.14 (-0.38%)

Token

BlockBlend (BBL)
 

Overview

Max Total Supply

1,017,826,136.456009396187575486 BBL

Holders

306

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
anotherblockinthechain.eth
Balance
50 BBL

Value
$0.00
0x144c704bf25f1865e4b24fd6596ffed7d92470b0
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:
BlockBlend

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-27
*/

// SPDX-License-Identifier: MIT
/**
    ██████╗░██╗░░░░░░█████╗░░█████╗░██╗░░██╗██████╗░██╗░░░░░███████╗███╗░░██╗██████╗░
    ██╔══██╗██║░░░░░██╔══██╗██╔══██╗██║░██╔╝██╔══██╗██║░░░░░██╔════╝████╗░██║██╔══██╗
    ██████╦╝██║░░░░░██║░░██║██║░░╚═╝█████═╝░██████╦╝██║░░░░░█████╗░░██╔██╗██║██║░░██║
    ██╔══██╗██║░░░░░██║░░██║██║░░██╗██╔═██╗░██╔══██╗██║░░░░░██╔══╝░░██║╚████║██║░░██║
    ██████╦╝███████╗╚█████╔╝╚█████╔╝██║░╚██╗██████╦╝███████╗███████╗██║░╚███║██████╔╝
    ╚═════╝░╚══════╝░╚════╝░░╚════╝░╚═╝░░╚═╝╚═════╝░╚══════╝╚══════╝╚═╝░░╚══╝╚═════╝░
    Telegram - https://t.me/blockblendIO
    Audited
*/

// File: @openzeppelin/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts (last updated v4.6.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 v4.4.1 (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 Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _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: ethtoken.sol

pragma solidity ^0.8.7;



/**
 * @dev Interfaces
 */

interface IDEXFactory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);

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

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

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

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

interface IDEXRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);

    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}

interface IPancakeswapV2Pair {
    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;
}

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address to, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);

    /**
     * @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);

    /**
     * @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 Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);
}

contract BlockBlend is Context, IERC20, IERC20Metadata, Ownable {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 _totalSupply;
    uint256 _maxSupply = 100_000_000 * (10 ** decimals());
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    // fees & addresses
    mapping (string => uint) txFees;
    
    mapping (address => bool) public feeExempt;
    mapping (address => bool) public txLimitExempt;
    
    address public farmingAddress = 0xA56CC65a2aa9B7cC3A2a1819D14B67532Cf031dc;
    address public taxAddress = 0xA56CC65a2aa9B7cC3A2a1819D14B67532Cf031dc;

    // taxes for differnet levels
    struct TaxLevels {
        uint taxDiscount;
        uint amount;
    }

    struct TokenFee {
        uint forMarketing;
        uint forLiquidity;
        uint forDev;
        uint forFarming;
    }

    struct TxLimit {
        uint buyLimit;
        uint sellLimit;
        uint cooldown;
        mapping(address => uint) buys;
        mapping(address => uint) sells;
        mapping(address => uint) lastTx;
    }

    mapping (uint => TaxLevels) taxTiers;
    TxLimit txLimits;

    IDEXRouter public router;
    address public pair;
    address bridge;

    constructor(address _bridge) {
        _name = "BlockBlend";
        _symbol = "BBL";
        _decimals = 18;
        bridge = _bridge;
        
        /**
            Disable fees & limits for:
            - deployer
            - farming
            - tax collector
        */
        feeExempt[msg.sender] = true;
        txLimitExempt[msg.sender] = true;
        feeExempt[farmingAddress] = true;
        txLimitExempt[farmingAddress] = true;
        feeExempt[taxAddress] = true;
        txLimitExempt[taxAddress] = true;

        /**
            Set default buy/sell tx fees (no tax on transfers)
            - marketing, dev, liqudity, farming
        */
        txFees["marketingBuy"] = 2;
        txFees["devBuy"] = 1;
        txFees["liquidityBuy"] = 1;
        txFees["farmingBuy"] = 1;

        txFees["marketingSell"] = 3;
        txFees["devSell"] = 2;
        txFees["liquiditySell"] = 2;
        txFees["farmingSell"] = 2;

        /**
            Set default tx limits
            - Cooldown, buy limit, sell limit
        */
        txLimits.cooldown = 3 minutes;
        txLimits.buyLimit = 200_000 ether;
        txLimits.sellLimit = 50_000 ether; // 0.25%
        
        /**
            Set default tax levels.
            - 150k+ tokens: 15% discount on fees
            - 1m+ tokens: 35% discount on fees
        */
        taxTiers[0].taxDiscount = 50;
        taxTiers[0].amount = 500_000 ether;
        taxTiers[1].taxDiscount = 100;
        taxTiers[1].amount = 1_000_000 ether;

        address WBNB = 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // WETH Mainnet
        address _router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D; // Uniswap
        router = IDEXRouter(_router);
        pair = IDEXFactory(router.factory()).createPair(WBNB, address(this));
        _allowances[address(this)][address(router)] = _totalSupply;
        approve(_router, _totalSupply);
    }

    /**
        Sets buy/sell transaction fees
    */
    event Fees(
        uint _marketingBuy,
        uint _devBuy,
        uint _liquidityBuy,
        uint _farmingBuy,
        uint _marketingSell,
        uint _devSell,
        uint _liquiditySell,
        uint _farmingSell
    );

    function setFees(
        uint _marketingBuy,
        uint _devBuy,
        uint _liquidityBuy,
        uint _farmingBuy,
        uint _marketingSell,
        uint _devSell,
        uint _liquiditySell,
        uint _farmingSell
    ) external onlyOwner {
        require(_marketingBuy <= 8, "Marketing fee is too high!");
        require(_devBuy <= 8, "Dev fee is too high!");
        require(_liquidityBuy <= 8, "Liquidity fee is too high!");
        require(_farmingBuy <= 8, "Farming fee is too high!");
        require(_marketingSell <= 8, "Marketing fee is too high!");
        require(_devSell <= 8, "Dev fee is too high!");
        require(_liquiditySell <= 8, "Liquidity fee is too high!");
        require(_farmingSell <= 8, "Farming fee is too high!");

        txFees["marketingBuy"] = _marketingBuy;
        txFees["devBuy"] = _devBuy;
        txFees["liquidityBuy"] = _liquidityBuy;
        txFees["farmingBuy"] = _farmingBuy;

        txFees["marketingSell"] = _marketingSell;
        txFees["devSell"] = _devSell;
        txFees["liquiditySell"] = _liquiditySell;
        txFees["farmingSell"] = _farmingSell;

        emit Fees(
            _marketingBuy,
            _devBuy,
            _liquidityBuy,
            _farmingBuy,
            _marketingSell,
            _devSell,
            _liquiditySell,
            _farmingSell
        );
    }

    /**
        Returns buy/sell transaction fees
    */
    function getFees() public view returns(
        uint marketingBuy,
        uint devBuy,
        uint liquidityBuy,
        uint farmingBuy,
        uint marketingSell,
        uint devSell,
        uint liquiditySell,
        uint farmingSell
    ) {
        return (
            txFees["marketingBuy"],
            txFees["devBuy"],
            txFees["liquidityBuy"],
            txFees["farmingBuy"],
            txFees["marketingSell"],
            txFees["devSell"],
            txFees["liquiditySell"],
            txFees["farmingSell"]
        );
    }

    /**
        Sets the tax collector contracts
    */
    function setTaxAddress(address _farmingAddress, address _taxAddress) external onlyOwner {
        farmingAddress = _farmingAddress;
        taxAddress = _taxAddress;
    }

    /**
        Sets the tax free trading for the specific address
    */
    function setFeeExempt(address _address, bool _value) external onlyOwner {
        feeExempt[_address] = _value;
    }

    /**
        Sets the limit free trading for the specific address
    */
    function setTxLimitExempt(address _address, bool _value) external onlyOwner {
        txLimitExempt[_address] = _value;
    }

    /**
        Sets the different tax levels for buy transactions
    */
    function setTaxTiers(uint _discount1, uint _amount1, uint _discount2, uint _amount2) external onlyOwner {
        require(_discount1 > 0 && _discount2 > 0 && _amount1 > 0 && _amount2 > 0, "Values have to be bigger than zero!");
        taxTiers[0].taxDiscount = _discount1;
        taxTiers[0].amount = _amount1;
        taxTiers[1].taxDiscount = _discount2;
        taxTiers[1].amount = _amount2;
    }

    /**
        Returns the different tax levels for buy transactions
    */
    function getTaxTiers() public view returns(uint discount1, uint amount1, uint discount2, uint amount2) {
        return (taxTiers[0].taxDiscount, taxTiers[0].amount, taxTiers[1].taxDiscount, taxTiers[1].amount);
    }

    /**
        Sets the sell/buy limits & cooldown period
    */
    function setTxLimits(uint _buyLimit, uint _sellLimit, uint _cooldown) external onlyOwner {
        require(_buyLimit >= _totalSupply.div(200), "Buy transaction limit is too low!"); // 0.5%
        require(_sellLimit >= _totalSupply.div(400), "Sell transaction limit is too low!"); // 0.25%
        require(_cooldown <= 30 minutes, "Cooldown should be 30 minutes or less!");

        txLimits.buyLimit = _buyLimit;
        txLimits.sellLimit = _sellLimit;
        txLimits.cooldown = _cooldown;
    }

    /**
        Returns the sell/buy limits & cooldown period
    */
    function getTxLimits() public view returns(uint buyLimit, uint sellLimit, uint cooldown) {
        return (txLimits.buyLimit, txLimits.sellLimit, txLimits.cooldown);
    }

    /**
        Checks the BUY transaction limits for the specific user with the sent amount
    */
    function checkBuyTxLimit(address _sender, uint256 _amount) internal view {
        require(
            txLimitExempt[_sender] == true ||
            txLimits.buys[_sender].add(_amount) < txLimits.buyLimit,
            "Buy transaction limit reached!"
        );
    }

    /**
        Checks the SELL transaction limits for the specific user with the sent amount
    */
    function checkSellTxLimit(address _sender, uint256 _amount) internal view {
        require(
            txLimitExempt[_sender] == true ||
            txLimits.sells[_sender].add(_amount) < txLimits.sellLimit,
            "Sell transaction limit reached!"
        );
    }
    
    /**
        Saves the recent buy/sell transactions
        The function used by _transfer() when the cooldown/tx limit is active
    */
    function setRecentTx(bool _isSell, address _sender, uint _amount) internal {
        if(txLimits.lastTx[_sender].add(txLimits.cooldown) < block.timestamp) {
            _isSell ? txLimits.sells[_sender] = _amount : txLimits.buys[_sender] = _amount;
        } else {
            _isSell ? txLimits.sells[_sender] += _amount : txLimits.buys[_sender] += _amount;
        }

        txLimits.lastTx[_sender] = block.timestamp;
    }

    /**
        Returns the recent buys, sells and the last transaction for the specific wallet
    */
    function getRecentTx(address _address) public view returns(uint buys, uint sells, uint lastTx) {
        return (txLimits.buys[_address], txLimits.sells[_address], txLimits.lastTx[_address]);
    }

    /**
        Returns the token price
    */
    function getTokenPrice(uint _amount) public view returns(uint) {
        IPancakeswapV2Pair pcsPair = IPancakeswapV2Pair(pair);
        IERC20 token1 = IERC20(pcsPair.token1());
    
    
        (uint Res0, uint Res1,) = pcsPair.getReserves();

        // decimals
        uint res0 = Res0*(10**token1.decimals());
        //uint256 res0 = Res0*(10**decimals());
        return((_amount.mul(res0)).div(Res1)); // returns how much kaiken you will get on that eth amount
    }

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

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function decimals() public view virtual override returns (uint8) {
        return _decimals;
    }
    
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }

    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, amount);
        return true;
    }

    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");

        uint marketingFee;
        uint devFee;
        uint liquidityFee;
        uint farmingFee;

        uint taxDiscount;
        bool hasFees = true;

        // BUY
        if(from == pair) {
            checkBuyTxLimit(to, amount); // todo test

            setRecentTx(false, to, amount);

            marketingFee = txFees["marketingBuy"];
            devFee = txFees["devBuy"];
            liquidityFee = txFees["liquidityBuy"];
            farmingFee = txFees["farmingBuy"];

            // Tax levels for bigger buys
            if(amount >= taxTiers[0].amount && amount < taxTiers[1].amount) {
                taxDiscount = taxTiers[0].taxDiscount;
            } else if(amount >= taxTiers[1].amount) {
                taxDiscount = taxTiers[1].taxDiscount;
            }
        }
        // SELL
        else if(to == pair) {
            checkSellTxLimit(from, amount);

            setRecentTx(true, from, amount);

            marketingFee = txFees["marketingSell"];
            devFee = txFees["devSell"];
            liquidityFee = txFees["liquiditySell"];
            farmingFee = txFees["farmingSell"];
        }

        unchecked {
            _balances[from] = fromBalance - amount;
        }

        if(feeExempt[to] || feeExempt[from]) {
            hasFees = false;
        }

        if(hasFees && (to == pair || from == pair)) {
            TokenFee memory TokenFees;
            TokenFees.forMarketing = amount.mul(marketingFee).mul(100 - taxDiscount).div(10000);
            TokenFees.forLiquidity = amount.mul(liquidityFee).mul(100 - taxDiscount).div(10000);
            TokenFees.forDev = amount.mul(devFee).mul(100 - taxDiscount).div(10000);
            TokenFees.forFarming = amount.mul(farmingFee).mul(100 - taxDiscount).div(10000);

            uint totalFees =
                TokenFees.forMarketing
                .add(TokenFees.forLiquidity)
                .add(TokenFees.forDev)
                .add(TokenFees.forFarming);

            amount = amount.sub(totalFees);

            //_balances[farmingAddress] += TokenFees.forFarming; // farming pool
            //emit Transfer(from, farmingAddress, TokenFees.forFarming);

            _balances[taxAddress] += totalFees; // dev, lp, marketing fees (+ farming to save gas)
            emit Transfer(from, taxAddress, totalFees);
        }

        _balances[to] += amount;

        emit Transfer(from, to, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");
        require(_maxSupply <= _totalSupply + amount, "Mint error! Amount can't be more than the total supply on BSC!");

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

    function mint(address recipient, uint256 amount) public virtual onlyBridge {
        _mint(recipient, amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

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

    function burn(uint256 amount) public virtual onlyBridge {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

    /**
     * @dev Updates `owner` s allowance for `spender` based on spent `amount`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    modifier onlyBridge {
      require(msg.sender == bridge, "only bridge has access to this child token function");
      _;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_bridge","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_marketingBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_devBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_liquidityBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_farmingBuy","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_marketingSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_devSell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_liquiditySell","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_farmingSell","type":"uint256"}],"name":"Fees","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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"farmingAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"feeExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFees","outputs":[{"internalType":"uint256","name":"marketingBuy","type":"uint256"},{"internalType":"uint256","name":"devBuy","type":"uint256"},{"internalType":"uint256","name":"liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"farmingBuy","type":"uint256"},{"internalType":"uint256","name":"marketingSell","type":"uint256"},{"internalType":"uint256","name":"devSell","type":"uint256"},{"internalType":"uint256","name":"liquiditySell","type":"uint256"},{"internalType":"uint256","name":"farmingSell","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"}],"name":"getRecentTx","outputs":[{"internalType":"uint256","name":"buys","type":"uint256"},{"internalType":"uint256","name":"sells","type":"uint256"},{"internalType":"uint256","name":"lastTx","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTaxTiers","outputs":[{"internalType":"uint256","name":"discount1","type":"uint256"},{"internalType":"uint256","name":"amount1","type":"uint256"},{"internalType":"uint256","name":"discount2","type":"uint256"},{"internalType":"uint256","name":"amount2","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"getTokenPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTxLimits","outputs":[{"internalType":"uint256","name":"buyLimit","type":"uint256"},{"internalType":"uint256","name":"sellLimit","type":"uint256"},{"internalType":"uint256","name":"cooldown","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IDEXRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setFeeExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingBuy","type":"uint256"},{"internalType":"uint256","name":"_devBuy","type":"uint256"},{"internalType":"uint256","name":"_liquidityBuy","type":"uint256"},{"internalType":"uint256","name":"_farmingBuy","type":"uint256"},{"internalType":"uint256","name":"_marketingSell","type":"uint256"},{"internalType":"uint256","name":"_devSell","type":"uint256"},{"internalType":"uint256","name":"_liquiditySell","type":"uint256"},{"internalType":"uint256","name":"_farmingSell","type":"uint256"}],"name":"setFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_farmingAddress","type":"address"},{"internalType":"address","name":"_taxAddress","type":"address"}],"name":"setTaxAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_discount1","type":"uint256"},{"internalType":"uint256","name":"_amount1","type":"uint256"},{"internalType":"uint256","name":"_discount2","type":"uint256"},{"internalType":"uint256","name":"_amount2","type":"uint256"}],"name":"setTaxTiers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_address","type":"address"},{"internalType":"bool","name":"_value","type":"bool"}],"name":"setTxLimitExempt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyLimit","type":"uint256"},{"internalType":"uint256","name":"_sellLimit","type":"uint256"},{"internalType":"uint256","name":"_cooldown","type":"uint256"}],"name":"setTxLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":"","type":"address"}],"name":"txLimitExempt","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]

608060405260075460ff166200001790600a620007eb565b62000027906305f5e100620008aa565b600455600b805473a56cc65a2aa9b7cc3a2a1819d14b67532cf031dc6001600160a01b03199182168117909255600c805490911690911790553480156200006d57600080fd5b5060405162002f7638038062002f76833981016040819052620000909162000770565b6200009b3362000532565b60408051808201909152600a80825269109b1bd8dad09b195b9960b21b6020909201918252620000ce91600591620006ca565b506040805180820190915260038082526210909360ea1b6020909201918252620000fb91600691620006ca565b5060078054601260ff19918216178255601680546001600160a01b03199081166001600160a01b0386811691909117909255336000908152600960208181526040808420805488166001908117909155600a80845282862080548a1683179055600b80548916875285855283872080548b168417905580548916875281855283872080548b1684179055600c80548a16885295855283872080548b1684179055855490981686528084528286208054909916821790985581516b6d61726b6574696e6742757960a01b81526008818601819052835191829003602c90810183206002908190556564657642757960d01b84526006840183905285519384900360260184208590556b6c697175696469747942757960a01b8452968301829052845192839003018220839055696661726d696e6742757960b01b8252988101899052825190819003602a0181208290556c1b585c9ad95d1a5b99d4d95b1b609a1b8152600d8082018a9052835191829003602d9081018320600390556619195d94d95b1b60ca1b83529a82018a905283519182900360270182208690556c1b1a5c5d5a591a5d1e54d95b1b609a1b82528181018a9052835191829003909a0181208590556a19985c9b5a5b99d4d95b1b60aa1b815296870197909752805195869003602b0186209290925560b4601055692a5a058fc295ed000000600e55690a968163f0a57b400000600f5595865260327f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee556969e10de76676d08000007f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ef5593905260647ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c55569d3c21bcecceda10000007ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c65560148054909116737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915563c45a015560e01b8252915173c02aaa39b223fe8d0a0e5c4f27ead9083c756cc293839263c45a01559260048083019392829003018186803b1580156200041657600080fd5b505afa1580156200042b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000451919062000770565b6040516364e329cb60e11b81526001600160a01b038481166004830152306024830152919091169063c9c6539690604401602060405180830381600087803b1580156200049d57600080fd5b505af1158015620004b2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004d8919062000770565b601580546001600160a01b0319166001600160a01b039283161790556003543060009081526002602090815260408083206014549095168352939052919091208190556200052890829062000582565b505050506200091f565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600033620005928185856200059e565b60019150505b92915050565b6001600160a01b038316620006065760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084015b60405180910390fd5b6001600160a01b038216620006695760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401620005fd565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b828054620006d890620008cc565b90600052602060002090601f016020900481019282620006fc576000855562000747565b82601f106200071757805160ff191683800117855562000747565b8280016001018555821562000747579182015b82811115620007475782518255916020019190600101906200072a565b506200075592915062000759565b5090565b5b808211156200075557600081556001016200075a565b6000602082840312156200078357600080fd5b81516001600160a01b03811681146200079b57600080fd5b9392505050565b600181815b80851115620007e3578160001904821115620007c757620007c762000909565b80851615620007d557918102915b93841c9390800290620007a7565b509250929050565b60006200079b60ff841683600082620008075750600162000598565b81620008165750600062000598565b81600181146200082f57600281146200083a576200085a565b600191505062000598565b60ff8411156200084e576200084e62000909565b50506001821b62000598565b5060208310610133831016604e8410600b84101617156200087f575081810a62000598565b6200088b8383620007a2565b8060001904821115620008a257620008a262000909565b029392505050565b6000816000190483118215151615620008c757620008c762000909565b500290565b600181811c90821680620008e157607f821691505b602082108114156200090357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b612647806200092f6000396000f3fe608060405234801561001057600080fd5b50600436106101fa5760003560e01c80638a2ade581161011a578063a9059cbb116100ad578063dc084dd81161007c578063dc084dd814610563578063dd62ed3e14610576578063e46b3b3f14610589578063f2fde38b1461059c578063f887ea40146105af57600080fd5b8063a9059cbb146104e7578063b7bda68f146104fa578063c457fb371461050d578063db8d55f11461052057600080fd5b80638ebfc796116100e95780638ebfc796146104a657806395d89b41146104b9578063a457c2d7146104c1578063a8aa1b31146104d457600080fd5b80638a2ade58146104445780638d7a8ba71461046f5780638da5cb5b146104825780638da799291461049357600080fd5b8063395093511161019257806342966c681161016157806342966c681461036057806368e3c76d1461037357806370a0823114610413578063715018a61461043c57600080fd5b80633950935114610302578063398daa85146103155780633b7e8ae31461033857806340c10f191461034d57600080fd5b806318160ddd116101ce57806318160ddd146102a557806323b872dd146102b7578063313ce567146102ca578063361f4fb4146102df57600080fd5b806220a403146101ff57806303f3d3101461025f57806306fdde031461026d578063095ea7b314610282575b600080fd5b61023f61020d3660046120de565b6001600160a01b0316600090815260116020908152604080832054601283528184205460139093529220549192909190565b604080519384526020840192909252908201526060015b60405180910390f35b600e54600f5460105461023f565b6102756105c2565b6040516102569190612330565b6102956102903660046121c5565b610654565b6040519015158152602001610256565b6003545b604051908152602001610256565b6102956102c5366004612151565b61066e565b60075460405160ff9091168152602001610256565b6102956102ed3660046120de565b600a6020526000908152604090205460ff1681565b6102956103103660046121c5565b610692565b6102956103233660046120de565b60096020526000908152604090205460ff1681565b61034b610346366004612286565b6106b4565b005b61034b61035b3660046121c5565b6107ef565b61034b61036e366004612241565b610827565b600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee547f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ef5460016000527ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c5546000805160206125f283398151915254604080519485526020850193909352918301526060820152608001610256565b6102a96104213660046120de565b6001600160a01b031660009081526001602052604090205490565b61034b61085e565b600b54610457906001600160a01b031681565b6040516001600160a01b039091168152602001610256565b61034b61047d366004612192565b610894565b6000546001600160a01b0316610457565b61034b6104a13660046122b8565b6108e9565b61034b6104b4366004612192565b610d26565b610275610d7b565b6102956104cf3660046121c5565b610d8a565b601554610457906001600160a01b031681565b6102956104f53660046121c5565b610e05565b600c54610457906001600160a01b031681565b6102a961051b366004612241565b610e13565b610528610fca565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610256565b61034b610571366004612118565b611132565b6102a9610584366004612118565b61118a565b61034b61059736600461225a565b6111b5565b61034b6105aa3660046120de565b61131e565b601454610457906001600160a01b031681565b6060600580546105d19061256b565b80601f01602080910402602001604051908101604052809291908181526020018280546105fd9061256b565b801561064a5780601f1061061f5761010080835404028352916020019161064a565b820191906000526020600020905b81548152906001019060200180831161062d57829003601f168201915b5050505050905090565b6000336106628185856113b6565b60019150505b92915050565b60003361067c8582856114db565b610687858585611555565b506001949350505050565b6000336106628185856106a5838361118a565b6106af919061240d565b6113b6565b6000546001600160a01b031633146106e75760405162461bcd60e51b81526004016106de90612385565b60405180910390fd5b6000841180156106f75750600082115b80156107035750600083115b801561070f5750600081115b6107675760405162461bcd60e51b815260206004820152602360248201527f56616c756573206861766520746f20626520626967676572207468616e207a65604482015262726f2160e81b60648201526084016106de565b600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee939093557f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ef9190915560016000527ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c5556000805160206125f283398151915255565b6016546001600160a01b031633146108195760405162461bcd60e51b81526004016106de906123ba565b6108238282611b81565b5050565b6016546001600160a01b031633146108515760405162461bcd60e51b81526004016106de906123ba565b61085b3382611cd3565b50565b6000546001600160a01b031633146108885760405162461bcd60e51b81526004016106de90612385565b6108926000611e07565b565b6000546001600160a01b031633146108be5760405162461bcd60e51b81526004016106de90612385565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146109135760405162461bcd60e51b81526004016106de90612385565b60088811156109645760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f20686967682100000000000060448201526064016106de565b60088711156109ac5760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b60448201526064016106de565b60088611156109fd5760405162461bcd60e51b815260206004820152601a60248201527f4c69717569646974792066656520697320746f6f20686967682100000000000060448201526064016106de565b6008851115610a495760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b60448201526064016106de565b6008841115610a9a5760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f20686967682100000000000060448201526064016106de565b6008831115610ae25760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b60448201526064016106de565b6008821115610b335760405162461bcd60e51b815260206004820152601a60248201527f4c69717569646974792066656520697320746f6f20686967682100000000000060448201526064016106de565b6008811115610b7f5760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b60448201526064016106de565b876008604051610ba1906b6d61726b6574696e6742757960a01b8152600c0190565b908152604080519182900360209081018320939093556564657642757960d01b825260086006830181905281519283900360260183208b90556b6c697175696469747942757960a01b8352600c8301819052815192839003602c0183208a9055696661726d696e6742757960b01b8352600a8301819052815192839003602a0183208990556c1b585c9ad95d1a5b99d4d95b1b609a1b8352600d808401829052825193849003602d90810185208a90556619195d94d95b1b60ca1b85526007850183905283519485900360270185208990556c1b1a5c5d5a591a5d1e54d95b1b609a1b85529084018290528251938490030183208690556a19985c9b5a5b99d4d95b1b60aa1b8352600b830152805191829003602b0182208490558a8252918101899052808201889052606081018790526080810186905260a0810185905260c0810184905260e0810183905290517fc5a938c49f412d23c2707d1ea7c0aa6450bc328b6545a02f8b5fe55844d60be291610100908290030190a15050505050505050565b6000546001600160a01b03163314610d505760405162461bcd60e51b81526004016106de90612385565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6060600680546105d19061256b565b60003381610d98828661118a565b905083811015610df85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106de565b61068782868684036113b6565b600033610662818585611555565b6015546040805163d21220a760e01b815290516000926001600160a01b0316918391839163d21220a7916004808301926020929190829003018186803b158015610e5c57600080fd5b505afa158015610e70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9491906120fb565b9050600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610ed257600080fd5b505afa158015610ee6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0a91906121f1565b506001600160701b031691506001600160701b031691506000836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610f5c57600080fd5b505afa158015610f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f94919061230d565b610f9f90600a61248a565b610fa99084612535565b9050610fbf82610fb98984611e57565b90611e6a565b979650505050505050565b6000806000806000806000806008604051610ff7906b6d61726b6574696e6742757960a01b8152600c0190565b908152604051908190036020018120546564657642757960d01b825290600890600601908152604051908190036020018120546b6c697175696469747942757960a01b825290600890600c0190815260405190819003602001812054696661726d696e6742757960b01b825290600890600a01908152604051908190036020018120546c1b585c9ad95d1a5b99d4d95b1b609a1b825290600890600d01908152604051908190036020018120546619195d94d95b1b60ca1b825290600890600701908152604051908190036020018120546c1b1a5c5d5a591a5d1e54d95b1b609a1b825290600890600d01908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b825290600890600b0190815260405190819003602001902054969f959e50939c50919a509850965094509092509050565b6000546001600160a01b0316331461115c5760405162461bcd60e51b81526004016106de90612385565b600b80546001600160a01b039384166001600160a01b031991821617909155600c8054929093169116179055565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b031633146111df5760405162461bcd60e51b81526004016106de90612385565b6003546111ed9060c8611e6a565b8310156112465760405162461bcd60e51b815260206004820152602160248201527f427579207472616e73616374696f6e206c696d697420697320746f6f206c6f776044820152602160f81b60648201526084016106de565b60035461125590610190611e6a565b8210156112af5760405162461bcd60e51b815260206004820152602260248201527f53656c6c207472616e73616374696f6e206c696d697420697320746f6f206c6f604482015261772160f01b60648201526084016106de565b6107088111156113105760405162461bcd60e51b815260206004820152602660248201527f436f6f6c646f776e2073686f756c64206265203330206d696e75746573206f72604482015265206c6573732160d01b60648201526084016106de565b600e92909255600f55601055565b6000546001600160a01b031633146113485760405162461bcd60e51b81526004016106de90612385565b6001600160a01b0381166113ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106de565b61085b81611e07565b6001600160a01b0383166114185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106de565b6001600160a01b0382166114795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106de565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006114e7848461118a565b9050600019811461154f57818110156115425760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106de565b61154f84848484036113b6565b50505050565b6001600160a01b0383166115b95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106de565b6001600160a01b03821661161b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106de565b6001600160a01b038316600090815260016020526040902054818110156116935760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106de565b60155460009081908190819081906001906001600160a01b038b81169116141561184f576116c18989611e76565b6116cd60008a8a611f11565b6040516b6d61726b6574696e6742757960a01b8152600890600c01908152604051908190036020018120546564657642757960d01b82529650600890600601908152604051908190036020018120546b6c697175696469747942757960a01b82529550600890600c0190815260405190819003602001812054696661726d696e6742757960b01b82529450600890600a01908152604051602091819003820190205460008052600d9091527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ef5490935088108015906117c457506001600052600d6020526000805160206125f28339815191525488105b156117fb5760008052600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee549150611922565b6001600052600d6020526000805160206125f283398151915254881061184a576001600052600d6020527ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c55491505b611922565b6015546001600160a01b038a8116911614156119225761186f8a8961200f565b61187b60018b8a611f11565b6040516c1b585c9ad95d1a5b99d4d95b1b609a1b8152600890600d01908152604051908190036020018120546619195d94d95b1b60ca1b82529650600890600701908152604051908190036020018120546c1b1a5c5d5a591a5d1e54d95b1b609a1b82529550600890600d01908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b82529450600890600b0190815260200160405180910390205492505b6001600160a01b03808b1660009081526001602090815260408083208c8c039055928c16825260099052205460ff168061197457506001600160a01b038a1660009081526009602052604090205460ff165b1561197d575060005b8080156119ae57506015546001600160a01b038a8116911614806119ae57506015546001600160a01b038b81169116145b15611b0b576119de6040518060800160405280600081526020016000815260200160008152602001600081525090565b611a02612710610fb96119f2866064612554565b6119fc8d8c611e57565b90611e57565b8152611a22612710610fb9611a18866064612554565b6119fc8d8a611e57565b6020820152611a45612710610fb9611a3b866064612554565b6119fc8d8b611e57565b6040820152611a68612710610fb9611a5e866064612554565b6119fc8d89611e57565b60608201819052604082015160208301518351600093611a95939092611a8f9283916120aa565b906120aa565b9050611aa18a826120b6565b600c546001600160a01b031660009081526001602052604081208054929c508392909190611ad090849061240d565b9091555050600c546040518281526001600160a01b03918216918e16906000805160206125d28339815191529060200160405180910390a350505b6001600160a01b038916600090815260016020526040812080548a9290611b3390849061240d565b92505081905550886001600160a01b03168a6001600160a01b03166000805160206125d28339815191528a604051611b6d91815260200190565b60405180910390a350505050505050505050565b6001600160a01b038216611bd75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106de565b80600354611be5919061240d565b6004541115611c5c5760405162461bcd60e51b815260206004820152603e60248201527f4d696e74206572726f722120416d6f756e742063616e2774206265206d6f726560448201527f207468616e2074686520746f74616c20737570706c79206f6e2042534321000060648201526084016106de565b8060036000828254611c6e919061240d565b90915550506001600160a01b03821660009081526001602052604081208054839290611c9b90849061240d565b90915550506040518181526001600160a01b038316906000906000805160206125d28339815191529060200160405180910390a35050565b6001600160a01b038216611d335760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106de565b6001600160a01b03821660009081526001602052604090205481811015611da75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016106de565b6001600160a01b0383166000908152600160205260408120838303905560038054849290611dd6908490612554565b90915550506040518281526000906001600160a01b038516906000805160206125d2833981519152906020016114ce565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000611e638284612535565b9392505050565b6000611e638284612425565b6001600160a01b0382166000908152600a602052604090205460ff16151560011480611ec55750600e546001600160a01b038316600090815260116020526040902054611ec390836120aa565b105b6108235760405162461bcd60e51b815260206004820152601e60248201527f427579207472616e73616374696f6e206c696d6974207265616368656421000060448201526064016106de565b6010546001600160a01b0383166000908152601360205260409020544291611f3991906120aa565b1015611f885782611f65576001600160a01b038216600090815260116020526040902081905580611f82565b6001600160a01b0382166000908152601260205260409020819055805b50611ff1565b82611fc0576001600160a01b03821660009081526011602052604081208054839290611fb590849061240d565b925050819055611fef565b6001600160a01b03821660009081526012602052604081208054839290611fe890849061240d565b9250508190555b505b506001600160a01b0316600090815260136020526040902042905550565b6001600160a01b0382166000908152600a602052604090205460ff1615156001148061205e5750600f546001600160a01b03831660009081526012602052604090205461205c90836120aa565b105b6108235760405162461bcd60e51b815260206004820152601f60248201527f53656c6c207472616e73616374696f6e206c696d69742072656163686564210060448201526064016106de565b6000611e63828461240d565b6000611e638284612554565b80516001600160701b03811681146120d957600080fd5b919050565b6000602082840312156120f057600080fd5b8135611e63816125bc565b60006020828403121561210d57600080fd5b8151611e63816125bc565b6000806040838503121561212b57600080fd5b8235612136816125bc565b91506020830135612146816125bc565b809150509250929050565b60008060006060848603121561216657600080fd5b8335612171816125bc565b92506020840135612181816125bc565b929592945050506040919091013590565b600080604083850312156121a557600080fd5b82356121b0816125bc565b91506020830135801515811461214657600080fd5b600080604083850312156121d857600080fd5b82356121e3816125bc565b946020939093013593505050565b60008060006060848603121561220657600080fd5b61220f846120c2565b925061221d602085016120c2565b9150604084015163ffffffff8116811461223657600080fd5b809150509250925092565b60006020828403121561225357600080fd5b5035919050565b60008060006060848603121561226f57600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561229c57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080600080610100898b0312156122d557600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60006020828403121561231f57600080fd5b815160ff81168114611e6357600080fd5b600060208083528351808285015260005b8181101561235d57858101830151858201604001528201612341565b8181111561236f576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f6f6e6c7920627269646765206861732061636365737320746f207468697320636040820152723434b632103a37b5b2b710333ab731ba34b7b760691b606082015260800190565b60008219821115612420576124206125a6565b500190565b60008261244257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115612482578160001904821115612468576124686125a6565b8085161561247557918102915b93841c939080029061244c565b509250929050565b6000611e6360ff8416836000826124a357506001610668565b816124b057506000610668565b81600181146124c657600281146124d0576124ec565b6001915050610668565b60ff8411156124e1576124e16125a6565b50506001821b610668565b5060208310610133831016604e8410600b841016171561250f575081810a610668565b6125198383612447565b806000190482111561252d5761252d6125a6565b029392505050565b600081600019048311821515161561254f5761254f6125a6565b500290565b600082821015612566576125666125a6565b500390565b600181811c9082168061257f57607f821691505b602082108114156125a057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461085b57600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3effd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c6a26469706673582212202bd8667b5d68bff6913814497339f1d364d9965ba339573a941ad5dd28ed9a3f64736f6c634300080700330000000000000000000000008a045acab7471674c856e0cca47b2523e14f76a4

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101fa5760003560e01c80638a2ade581161011a578063a9059cbb116100ad578063dc084dd81161007c578063dc084dd814610563578063dd62ed3e14610576578063e46b3b3f14610589578063f2fde38b1461059c578063f887ea40146105af57600080fd5b8063a9059cbb146104e7578063b7bda68f146104fa578063c457fb371461050d578063db8d55f11461052057600080fd5b80638ebfc796116100e95780638ebfc796146104a657806395d89b41146104b9578063a457c2d7146104c1578063a8aa1b31146104d457600080fd5b80638a2ade58146104445780638d7a8ba71461046f5780638da5cb5b146104825780638da799291461049357600080fd5b8063395093511161019257806342966c681161016157806342966c681461036057806368e3c76d1461037357806370a0823114610413578063715018a61461043c57600080fd5b80633950935114610302578063398daa85146103155780633b7e8ae31461033857806340c10f191461034d57600080fd5b806318160ddd116101ce57806318160ddd146102a557806323b872dd146102b7578063313ce567146102ca578063361f4fb4146102df57600080fd5b806220a403146101ff57806303f3d3101461025f57806306fdde031461026d578063095ea7b314610282575b600080fd5b61023f61020d3660046120de565b6001600160a01b0316600090815260116020908152604080832054601283528184205460139093529220549192909190565b604080519384526020840192909252908201526060015b60405180910390f35b600e54600f5460105461023f565b6102756105c2565b6040516102569190612330565b6102956102903660046121c5565b610654565b6040519015158152602001610256565b6003545b604051908152602001610256565b6102956102c5366004612151565b61066e565b60075460405160ff9091168152602001610256565b6102956102ed3660046120de565b600a6020526000908152604090205460ff1681565b6102956103103660046121c5565b610692565b6102956103233660046120de565b60096020526000908152604090205460ff1681565b61034b610346366004612286565b6106b4565b005b61034b61035b3660046121c5565b6107ef565b61034b61036e366004612241565b610827565b600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee547f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ef5460016000527ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c5546000805160206125f283398151915254604080519485526020850193909352918301526060820152608001610256565b6102a96104213660046120de565b6001600160a01b031660009081526001602052604090205490565b61034b61085e565b600b54610457906001600160a01b031681565b6040516001600160a01b039091168152602001610256565b61034b61047d366004612192565b610894565b6000546001600160a01b0316610457565b61034b6104a13660046122b8565b6108e9565b61034b6104b4366004612192565b610d26565b610275610d7b565b6102956104cf3660046121c5565b610d8a565b601554610457906001600160a01b031681565b6102956104f53660046121c5565b610e05565b600c54610457906001600160a01b031681565b6102a961051b366004612241565b610e13565b610528610fca565b604080519889526020890197909752958701949094526060860192909252608085015260a084015260c083015260e082015261010001610256565b61034b610571366004612118565b611132565b6102a9610584366004612118565b61118a565b61034b61059736600461225a565b6111b5565b61034b6105aa3660046120de565b61131e565b601454610457906001600160a01b031681565b6060600580546105d19061256b565b80601f01602080910402602001604051908101604052809291908181526020018280546105fd9061256b565b801561064a5780601f1061061f5761010080835404028352916020019161064a565b820191906000526020600020905b81548152906001019060200180831161062d57829003601f168201915b5050505050905090565b6000336106628185856113b6565b60019150505b92915050565b60003361067c8582856114db565b610687858585611555565b506001949350505050565b6000336106628185856106a5838361118a565b6106af919061240d565b6113b6565b6000546001600160a01b031633146106e75760405162461bcd60e51b81526004016106de90612385565b60405180910390fd5b6000841180156106f75750600082115b80156107035750600083115b801561070f5750600081115b6107675760405162461bcd60e51b815260206004820152602360248201527f56616c756573206861766520746f20626520626967676572207468616e207a65604482015262726f2160e81b60648201526084016106de565b600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee939093557f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ef9190915560016000527ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c5556000805160206125f283398151915255565b6016546001600160a01b031633146108195760405162461bcd60e51b81526004016106de906123ba565b6108238282611b81565b5050565b6016546001600160a01b031633146108515760405162461bcd60e51b81526004016106de906123ba565b61085b3382611cd3565b50565b6000546001600160a01b031633146108885760405162461bcd60e51b81526004016106de90612385565b6108926000611e07565b565b6000546001600160a01b031633146108be5760405162461bcd60e51b81526004016106de90612385565b6001600160a01b03919091166000908152600a60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146109135760405162461bcd60e51b81526004016106de90612385565b60088811156109645760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f20686967682100000000000060448201526064016106de565b60088711156109ac5760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b60448201526064016106de565b60088611156109fd5760405162461bcd60e51b815260206004820152601a60248201527f4c69717569646974792066656520697320746f6f20686967682100000000000060448201526064016106de565b6008851115610a495760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b60448201526064016106de565b6008841115610a9a5760405162461bcd60e51b815260206004820152601a60248201527f4d61726b6574696e672066656520697320746f6f20686967682100000000000060448201526064016106de565b6008831115610ae25760405162461bcd60e51b81526020600482015260146024820152734465762066656520697320746f6f20686967682160601b60448201526064016106de565b6008821115610b335760405162461bcd60e51b815260206004820152601a60248201527f4c69717569646974792066656520697320746f6f20686967682100000000000060448201526064016106de565b6008811115610b7f5760405162461bcd60e51b81526020600482015260186024820152774661726d696e672066656520697320746f6f20686967682160401b60448201526064016106de565b876008604051610ba1906b6d61726b6574696e6742757960a01b8152600c0190565b908152604080519182900360209081018320939093556564657642757960d01b825260086006830181905281519283900360260183208b90556b6c697175696469747942757960a01b8352600c8301819052815192839003602c0183208a9055696661726d696e6742757960b01b8352600a8301819052815192839003602a0183208990556c1b585c9ad95d1a5b99d4d95b1b609a1b8352600d808401829052825193849003602d90810185208a90556619195d94d95b1b60ca1b85526007850183905283519485900360270185208990556c1b1a5c5d5a591a5d1e54d95b1b609a1b85529084018290528251938490030183208690556a19985c9b5a5b99d4d95b1b60aa1b8352600b830152805191829003602b0182208490558a8252918101899052808201889052606081018790526080810186905260a0810185905260c0810184905260e0810183905290517fc5a938c49f412d23c2707d1ea7c0aa6450bc328b6545a02f8b5fe55844d60be291610100908290030190a15050505050505050565b6000546001600160a01b03163314610d505760405162461bcd60e51b81526004016106de90612385565b6001600160a01b03919091166000908152600960205260409020805460ff1916911515919091179055565b6060600680546105d19061256b565b60003381610d98828661118a565b905083811015610df85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b60648201526084016106de565b61068782868684036113b6565b600033610662818585611555565b6015546040805163d21220a760e01b815290516000926001600160a01b0316918391839163d21220a7916004808301926020929190829003018186803b158015610e5c57600080fd5b505afa158015610e70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9491906120fb565b9050600080836001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015610ed257600080fd5b505afa158015610ee6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f0a91906121f1565b506001600160701b031691506001600160701b031691506000836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610f5c57600080fd5b505afa158015610f70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f94919061230d565b610f9f90600a61248a565b610fa99084612535565b9050610fbf82610fb98984611e57565b90611e6a565b979650505050505050565b6000806000806000806000806008604051610ff7906b6d61726b6574696e6742757960a01b8152600c0190565b908152604051908190036020018120546564657642757960d01b825290600890600601908152604051908190036020018120546b6c697175696469747942757960a01b825290600890600c0190815260405190819003602001812054696661726d696e6742757960b01b825290600890600a01908152604051908190036020018120546c1b585c9ad95d1a5b99d4d95b1b609a1b825290600890600d01908152604051908190036020018120546619195d94d95b1b60ca1b825290600890600701908152604051908190036020018120546c1b1a5c5d5a591a5d1e54d95b1b609a1b825290600890600d01908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b825290600890600b0190815260405190819003602001902054969f959e50939c50919a509850965094509092509050565b6000546001600160a01b0316331461115c5760405162461bcd60e51b81526004016106de90612385565b600b80546001600160a01b039384166001600160a01b031991821617909155600c8054929093169116179055565b6001600160a01b03918216600090815260026020908152604080832093909416825291909152205490565b6000546001600160a01b031633146111df5760405162461bcd60e51b81526004016106de90612385565b6003546111ed9060c8611e6a565b8310156112465760405162461bcd60e51b815260206004820152602160248201527f427579207472616e73616374696f6e206c696d697420697320746f6f206c6f776044820152602160f81b60648201526084016106de565b60035461125590610190611e6a565b8210156112af5760405162461bcd60e51b815260206004820152602260248201527f53656c6c207472616e73616374696f6e206c696d697420697320746f6f206c6f604482015261772160f01b60648201526084016106de565b6107088111156113105760405162461bcd60e51b815260206004820152602660248201527f436f6f6c646f776e2073686f756c64206265203330206d696e75746573206f72604482015265206c6573732160d01b60648201526084016106de565b600e92909255600f55601055565b6000546001600160a01b031633146113485760405162461bcd60e51b81526004016106de90612385565b6001600160a01b0381166113ad5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016106de565b61085b81611e07565b6001600160a01b0383166114185760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016106de565b6001600160a01b0382166114795760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016106de565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b60006114e7848461118a565b9050600019811461154f57818110156115425760405162461bcd60e51b815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e636500000060448201526064016106de565b61154f84848484036113b6565b50505050565b6001600160a01b0383166115b95760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016106de565b6001600160a01b03821661161b5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016106de565b6001600160a01b038316600090815260016020526040902054818110156116935760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b60648201526084016106de565b60155460009081908190819081906001906001600160a01b038b81169116141561184f576116c18989611e76565b6116cd60008a8a611f11565b6040516b6d61726b6574696e6742757960a01b8152600890600c01908152604051908190036020018120546564657642757960d01b82529650600890600601908152604051908190036020018120546b6c697175696469747942757960a01b82529550600890600c0190815260405190819003602001812054696661726d696e6742757960b01b82529450600890600a01908152604051602091819003820190205460008052600d9091527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ef5490935088108015906117c457506001600052600d6020526000805160206125f28339815191525488105b156117fb5760008052600d6020527f81955a0a11e65eac625c29e8882660bae4e165a75d72780094acae8ece9a29ee549150611922565b6001600052600d6020526000805160206125f283398151915254881061184a576001600052600d6020527ffd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c55491505b611922565b6015546001600160a01b038a8116911614156119225761186f8a8961200f565b61187b60018b8a611f11565b6040516c1b585c9ad95d1a5b99d4d95b1b609a1b8152600890600d01908152604051908190036020018120546619195d94d95b1b60ca1b82529650600890600701908152604051908190036020018120546c1b1a5c5d5a591a5d1e54d95b1b609a1b82529550600890600d01908152604051908190036020018120546a19985c9b5a5b99d4d95b1b60aa1b82529450600890600b0190815260200160405180910390205492505b6001600160a01b03808b1660009081526001602090815260408083208c8c039055928c16825260099052205460ff168061197457506001600160a01b038a1660009081526009602052604090205460ff165b1561197d575060005b8080156119ae57506015546001600160a01b038a8116911614806119ae57506015546001600160a01b038b81169116145b15611b0b576119de6040518060800160405280600081526020016000815260200160008152602001600081525090565b611a02612710610fb96119f2866064612554565b6119fc8d8c611e57565b90611e57565b8152611a22612710610fb9611a18866064612554565b6119fc8d8a611e57565b6020820152611a45612710610fb9611a3b866064612554565b6119fc8d8b611e57565b6040820152611a68612710610fb9611a5e866064612554565b6119fc8d89611e57565b60608201819052604082015160208301518351600093611a95939092611a8f9283916120aa565b906120aa565b9050611aa18a826120b6565b600c546001600160a01b031660009081526001602052604081208054929c508392909190611ad090849061240d565b9091555050600c546040518281526001600160a01b03918216918e16906000805160206125d28339815191529060200160405180910390a350505b6001600160a01b038916600090815260016020526040812080548a9290611b3390849061240d565b92505081905550886001600160a01b03168a6001600160a01b03166000805160206125d28339815191528a604051611b6d91815260200190565b60405180910390a350505050505050505050565b6001600160a01b038216611bd75760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f20616464726573730060448201526064016106de565b80600354611be5919061240d565b6004541115611c5c5760405162461bcd60e51b815260206004820152603e60248201527f4d696e74206572726f722120416d6f756e742063616e2774206265206d6f726560448201527f207468616e2074686520746f74616c20737570706c79206f6e2042534321000060648201526084016106de565b8060036000828254611c6e919061240d565b90915550506001600160a01b03821660009081526001602052604081208054839290611c9b90849061240d565b90915550506040518181526001600160a01b038316906000906000805160206125d28339815191529060200160405180910390a35050565b6001600160a01b038216611d335760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b60648201526084016106de565b6001600160a01b03821660009081526001602052604090205481811015611da75760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b60648201526084016106de565b6001600160a01b0383166000908152600160205260408120838303905560038054849290611dd6908490612554565b90915550506040518281526000906001600160a01b038516906000805160206125d2833981519152906020016114ce565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000611e638284612535565b9392505050565b6000611e638284612425565b6001600160a01b0382166000908152600a602052604090205460ff16151560011480611ec55750600e546001600160a01b038316600090815260116020526040902054611ec390836120aa565b105b6108235760405162461bcd60e51b815260206004820152601e60248201527f427579207472616e73616374696f6e206c696d6974207265616368656421000060448201526064016106de565b6010546001600160a01b0383166000908152601360205260409020544291611f3991906120aa565b1015611f885782611f65576001600160a01b038216600090815260116020526040902081905580611f82565b6001600160a01b0382166000908152601260205260409020819055805b50611ff1565b82611fc0576001600160a01b03821660009081526011602052604081208054839290611fb590849061240d565b925050819055611fef565b6001600160a01b03821660009081526012602052604081208054839290611fe890849061240d565b9250508190555b505b506001600160a01b0316600090815260136020526040902042905550565b6001600160a01b0382166000908152600a602052604090205460ff1615156001148061205e5750600f546001600160a01b03831660009081526012602052604090205461205c90836120aa565b105b6108235760405162461bcd60e51b815260206004820152601f60248201527f53656c6c207472616e73616374696f6e206c696d69742072656163686564210060448201526064016106de565b6000611e63828461240d565b6000611e638284612554565b80516001600160701b03811681146120d957600080fd5b919050565b6000602082840312156120f057600080fd5b8135611e63816125bc565b60006020828403121561210d57600080fd5b8151611e63816125bc565b6000806040838503121561212b57600080fd5b8235612136816125bc565b91506020830135612146816125bc565b809150509250929050565b60008060006060848603121561216657600080fd5b8335612171816125bc565b92506020840135612181816125bc565b929592945050506040919091013590565b600080604083850312156121a557600080fd5b82356121b0816125bc565b91506020830135801515811461214657600080fd5b600080604083850312156121d857600080fd5b82356121e3816125bc565b946020939093013593505050565b60008060006060848603121561220657600080fd5b61220f846120c2565b925061221d602085016120c2565b9150604084015163ffffffff8116811461223657600080fd5b809150509250925092565b60006020828403121561225357600080fd5b5035919050565b60008060006060848603121561226f57600080fd5b505081359360208301359350604090920135919050565b6000806000806080858703121561229c57600080fd5b5050823594602084013594506040840135936060013592509050565b600080600080600080600080610100898b0312156122d557600080fd5b505086359860208801359850604088013597606081013597506080810135965060a0810135955060c0810135945060e0013592509050565b60006020828403121561231f57600080fd5b815160ff81168114611e6357600080fd5b600060208083528351808285015260005b8181101561235d57858101830151858201604001528201612341565b8181111561236f576000604083870101525b50601f01601f1916929092016040019392505050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526033908201527f6f6e6c7920627269646765206861732061636365737320746f207468697320636040820152723434b632103a37b5b2b710333ab731ba34b7b760691b606082015260800190565b60008219821115612420576124206125a6565b500190565b60008261244257634e487b7160e01b600052601260045260246000fd5b500490565b600181815b80851115612482578160001904821115612468576124686125a6565b8085161561247557918102915b93841c939080029061244c565b509250929050565b6000611e6360ff8416836000826124a357506001610668565b816124b057506000610668565b81600181146124c657600281146124d0576124ec565b6001915050610668565b60ff8411156124e1576124e16125a6565b50506001821b610668565b5060208310610133831016604e8410600b841016171561250f575081810a610668565b6125198383612447565b806000190482111561252d5761252d6125a6565b029392505050565b600081600019048311821515161561254f5761254f6125a6565b500290565b600082821015612566576125666125a6565b500390565b600181811c9082168061257f57607f821691505b602082108114156125a057634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b6001600160a01b038116811461085b57600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3effd54ff1ed53f34a900b24c5ba64f85761163b5d82d98a47b9bd80e45466993c6a26469706673582212202bd8667b5d68bff6913814497339f1d364d9965ba339573a941ad5dd28ed9a3f64736f6c63430008070033

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

0000000000000000000000008a045acab7471674c856e0cca47b2523e14f76a4

-----Decoded View---------------
Arg [0] : _bridge (address): 0x8A045aCaB7471674c856e0CCa47b2523E14f76A4

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000008a045acab7471674c856e0cca47b2523e14f76a4


Deployed Bytecode Sourcemap

18345:21374:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27821:199;;;;;;:::i;:::-;-1:-1:-1;;;;;27935:23:0;27880:9;27935:23;;;:13;:23;;;;;;;;;27960:14;:24;;;;;;27986:15;:25;;;;;;27935:23;;27960:24;;27986:25;27821:199;;;;;17667:25:1;;;17723:2;17708:18;;17701:34;;;;17751:18;;;17744:34;17655:2;17640:18;27821:199:0;;;;;;;;26167:173;26275:8;:17;26294:18;;26314:17;;26167:173;;28634:100;;;:::i;:::-;;;;;;;:::i;30253:201::-;;;;;;:::i;:::-;;:::i;:::-;;;7108:14:1;;7101:22;7083:41;;7071:2;7056:18;30253:201:0;6943:187:1;29077:108:0;29165:12;;29077:108;;;17429:25:1;;;17417:2;17402:18;29077:108:0;17283:177:1;31034:295:0;;;;;;:::i;:::-;;:::i;28965:100::-;29048:9;;28965:100;;29048:9;;;;19011:36:1;;18999:2;18984:18;28965:100:0;18869:184:1;18874:46:0;;;;;;:::i;:::-;;;;;;;;;;;;;;;;31738:238;;;;;;:::i;:::-;;:::i;18825:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;24787:409;;;;;;:::i;:::-;;:::i;:::-;;36986:118;;;;;;:::i;:::-;;:::i;37913:102::-;;;;;;:::i;:::-;;:::i;25284:219::-;25406:8;:11;;;:23;25431:18;;;25327:14;25451:11;;:23;-1:-1:-1;;;;;;;;;;;25476:18:0;25284:219;;;18020:25:1;;;18076:2;18061:18;;18054:34;;;;18104:18;;;18097:34;18162:2;18147:18;;18140:34;18007:3;17992:19;25284:219:0;17789:391:1;29193:127:0;;;;;;:::i;:::-;-1:-1:-1;;;;;29294:18:0;29267:7;29294:18;;;:9;:18;;;;;;;29193:127;11236:103;;;:::i;18933:74::-;;;;;-1:-1:-1;;;;;18933:74:0;;;;;;-1:-1:-1;;;;;6899:32:1;;;6881:51;;6869:2;6854:18;18933:74:0;6735:203:1;24575:127:0;;;;;;:::i;:::-;;:::i;10585:87::-;10631:7;10658:6;-1:-1:-1;;;;;10658:6:0;10585:87;;21992:1404;;;;;;:::i;:::-;;:::i;24369:119::-;;;;;;:::i;:::-;;:::i;28853:104::-;;;:::i;32479:436::-;;;;;;:::i;:::-;;:::i;19672:19::-;;;;;-1:-1:-1;;;;;19672:19:0;;;29526:193;;;;;;:::i;:::-;;:::i;19014:70::-;;;;;-1:-1:-1;;;;;19014:70:0;;;28078:486;;;;;;:::i;:::-;;:::i;23464:579::-;;;:::i;:::-;;;;18528:25:1;;;18584:2;18569:18;;18562:34;;;;18612:18;;;18605:34;;;;18670:2;18655:18;;18648:34;;;;18713:3;18698:19;;18691:35;18757:3;18742:19;;18735:35;18801:3;18786:19;;18779:35;18845:3;18830:19;;18823:35;18515:3;18500:19;23464:579:0;18185:679:1;24110:174:0;;;;;;:::i;:::-;;:::i;29782:151::-;;;;;;:::i;:::-;;:::i;25580:507::-;;;;;;:::i;:::-;;:::i;11494:201::-;;;;;;:::i;:::-;;:::i;19641:24::-;;;;;-1:-1:-1;;;;;19641:24:0;;;28634:100;28688:13;28721:5;28714:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28634:100;:::o;30253:201::-;30336:4;9389:10;30392:32;9389:10;30408:7;30417:6;30392:8;:32::i;:::-;30442:4;30435:11;;;30253:201;;;;;:::o;31034:295::-;31165:4;9389:10;31223:38;31239:4;9389:10;31254:6;31223:15;:38::i;:::-;31272:27;31282:4;31288:2;31292:6;31272:9;:27::i;:::-;-1:-1:-1;31317:4:0;;31034:295;-1:-1:-1;;;;31034:295:0:o;31738:238::-;31826:4;9389:10;31882:64;9389:10;31898:7;31935:10;31907:25;9389:10;31898:7;31907:9;:25::i;:::-;:38;;;;:::i;:::-;31882:8;:64::i;24787:409::-;10631:7;10658:6;-1:-1:-1;;;;;10658:6:0;9389:10;10805:23;10797:68;;;;-1:-1:-1;;;10797:68:0;;;;;;;:::i;:::-;;;;;;;;;24923:1:::1;24910:10;:14;:32;;;;;24941:1;24928:10;:14;24910:32;:48;;;;;24957:1;24946:8;:12;24910:48;:64;;;;;24973:1;24962:8;:12;24910:64;24902:112;;;::::0;-1:-1:-1;;;24902:112:0;;8165:2:1;24902:112:0::1;::::0;::::1;8147:21:1::0;8204:2;8184:18;;;8177:30;8243:34;8223:18;;;8216:62;-1:-1:-1;;;8294:18:1;;;8287:33;8337:19;;24902:112:0::1;7963:399:1::0;24902:112:0::1;25025:8;:11;::::0;;:36;;;;25072:18;:29;;;;:18:::1;25025:11;25112::::0;;:36;-1:-1:-1;;;;;;;;;;;25159:29:0;24787:409::o;36986:118::-;39636:6;;-1:-1:-1;;;;;39636:6:0;39622:10;:20;39614:84;;;;-1:-1:-1;;;39614:84:0;;;;;;;:::i;:::-;37072:24:::1;37078:9;37089:6;37072:5;:24::i;:::-;36986:118:::0;;:::o;37913:102::-;39636:6;;-1:-1:-1;;;;;39636:6:0;39622:10;:20;39614:84;;;;-1:-1:-1;;;39614:84:0;;;;;;;:::i;:::-;37980:27:::1;9389:10:::0;38000:6:::1;37980:5;:27::i;:::-;37913:102:::0;:::o;11236:103::-;10631:7;10658:6;-1:-1:-1;;;;;10658:6:0;9389:10;10805:23;10797:68;;;;-1:-1:-1;;;10797:68:0;;;;;;;:::i;:::-;11301:30:::1;11328:1;11301:18;:30::i;:::-;11236:103::o:0;24575:127::-;10631:7;10658:6;-1:-1:-1;;;;;10658:6:0;9389:10;10805:23;10797:68;;;;-1:-1:-1;;;10797:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24662:23:0;;;::::1;;::::0;;;:13:::1;:23;::::0;;;;:32;;-1:-1:-1;;24662:32:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24575:127::o;21992:1404::-;10631:7;10658:6;-1:-1:-1;;;;;10658:6:0;9389:10;10805:23;10797:68;;;;-1:-1:-1;;;10797:68:0;;;;;;;:::i;:::-;22291:1:::1;22274:13;:18;;22266:57;;;::::0;-1:-1:-1;;;22266:57:0;;12025:2:1;22266:57:0::1;::::0;::::1;12007:21:1::0;12064:2;12044:18;;;12037:30;12103:28;12083:18;;;12076:56;12149:18;;22266:57:0::1;11823:350:1::0;22266:57:0::1;22353:1;22342:7;:12;;22334:45;;;::::0;-1:-1:-1;;;22334:45:0;;12380:2:1;22334:45:0::1;::::0;::::1;12362:21:1::0;12419:2;12399:18;;;12392:30;-1:-1:-1;;;12438:18:1;;;12431:50;12498:18;;22334:45:0::1;12178:344:1::0;22334:45:0::1;22415:1;22398:13;:18;;22390:57;;;::::0;-1:-1:-1;;;22390:57:0;;10545:2:1;22390:57:0::1;::::0;::::1;10527:21:1::0;10584:2;10564:18;;;10557:30;10623:28;10603:18;;;10596:56;10669:18;;22390:57:0::1;10343:350:1::0;22390:57:0::1;22481:1;22466:11;:16;;22458:53;;;::::0;-1:-1:-1;;;22458:53:0;;14733:2:1;22458:53:0::1;::::0;::::1;14715:21:1::0;14772:2;14752:18;;;14745:30;-1:-1:-1;;;14791:18:1;;;14784:54;14855:18;;22458:53:0::1;14531:348:1::0;22458:53:0::1;22548:1;22530:14;:19;;22522:58;;;::::0;-1:-1:-1;;;22522:58:0;;12025:2:1;22522:58:0::1;::::0;::::1;12007:21:1::0;12064:2;12044:18;;;12037:30;12103:28;12083:18;;;12076:56;12149:18;;22522:58:0::1;11823:350:1::0;22522:58:0::1;22611:1;22599:8;:13;;22591:46;;;::::0;-1:-1:-1;;;22591:46:0;;12380:2:1;22591:46:0::1;::::0;::::1;12362:21:1::0;12419:2;12399:18;;;12392:30;-1:-1:-1;;;12438:18:1;;;12431:50;12498:18;;22591:46:0::1;12178:344:1::0;22591:46:0::1;22674:1;22656:14;:19;;22648:58;;;::::0;-1:-1:-1;;;22648:58:0;;10545:2:1;22648:58:0::1;::::0;::::1;10527:21:1::0;10584:2;10564:18;;;10557:30;10623:28;10603:18;;;10596:56;10669:18;;22648:58:0::1;10343:350:1::0;22648:58:0::1;22741:1;22725:12;:17;;22717:54;;;::::0;-1:-1:-1;;;22717:54:0;;14733:2:1;22717:54:0::1;::::0;::::1;14715:21:1::0;14772:2;14752:18;;;14745:30;-1:-1:-1;;;14791:18:1;;;14784:54;14855:18;;22717:54:0::1;14531:348:1::0;22717:54:0::1;22809:13;22784:6;:22;;;;-1:-1:-1::0;;;6402:27:1;;6454:2;6445:12;;6200:263;22784:22:0::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;;;;;:38;;;;-1:-1:-1;;;4807:21:1;;22833:6:0::1;4853:1:1::0;4844:11;;22833:16:0;;;;;;;;;;;;;:26;;;-1:-1:-1;;;5068:27:1;;5120:2;5111:12;;22870:22:0;;;;;;;;;;;;;:38;;;-1:-1:-1;;;6136:25:1;;6186:2;6177:12;;22919:20:0;;;;;;;;;;;;;:34;;;-1:-1:-1;;;5605:28:1;;5658:2;5649:12;;;22966:23:0;;;;;;;;;;;;;;;:40;;;-1:-1:-1;;;5874:22:1;;5921:1;5912:11;;23017:17:0;;;;;;;;;;;;;:28;;;-1:-1:-1;;;5336:28:1;;5380:12;;;23056:23:0;;;;;;;;;;;;:40;;;-1:-1:-1;;;6670:26:1;;6721:2;6712:12;;23107:21:0;;;;;;;;;;;:36;;;18528:25:1;;;18569:18;;;18562:34;;;18612:18;;;18605:34;;;18670:2;18655:18;;18648:34;;;18713:3;18698:19;;18691:35;;;18757:3;18742:19;;18735:35;;;18801:3;18786:19;;18779:35;;;18845:3;18830:19;;18823:35;;;23161:227:0;;::::1;::::0;18515:3:1;23161:227:0;;;;;;::::1;21992:1404:::0;;;;;;;;:::o;24369:119::-;10631:7;10658:6;-1:-1:-1;;;;;10658:6:0;9389:10;10805:23;10797:68;;;;-1:-1:-1;;;10797:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24452:19:0;;;::::1;;::::0;;;:9:::1;:19;::::0;;;;:28;;-1:-1:-1;;24452:28:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24369:119::o;28853:104::-;28909:13;28942:7;28935:14;;;;;:::i;32479:436::-;32572:4;9389:10;32572:4;32655:25;9389:10;32672:7;32655:9;:25::i;:::-;32628:52;;32719:15;32699:16;:35;;32691:85;;;;-1:-1:-1;;;32691:85:0;;16719:2:1;32691:85:0;;;16701:21:1;16758:2;16738:18;;;16731:30;16797:34;16777:18;;;16770:62;-1:-1:-1;;;16848:18:1;;;16841:35;16893:19;;32691:85:0;16517:401:1;32691:85:0;32812:60;32821:5;32828:7;32856:15;32837:16;:34;32812:8;:60::i;29526:193::-;29605:4;9389:10;29661:28;9389:10;29678:2;29682:6;29661:9;:28::i;28078:486::-;28200:4;;28239:16;;;-1:-1:-1;;;28239:16:0;;;;28135:4;;-1:-1:-1;;;;;28200:4:0;;28135;;28200;;28239:14;;:16;;;;;;;;;;;;;;28200:4;28239:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28216:40;;28280:9;28291;28305:7;-1:-1:-1;;;;;28305:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28279:47;-1:-1:-1;;;;;28279:47:0;;;-1:-1:-1;;;;;28279:47:0;;;28360:9;28382:6;-1:-1:-1;;;;;28382:15:0;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28378:21;;:2;:21;:::i;:::-;28372:28;;:4;:28;:::i;:::-;28360:40;-1:-1:-1;28467:29:0;28491:4;28468:17;:7;28360:40;28468:11;:17::i;:::-;28467:23;;:29::i;:::-;28460:37;28078:486;-1:-1:-1;;;;;;;28078:486:0:o;23464:579::-;23513:17;23541:11;23563:17;23591:15;23617:18;23646:12;23669:18;23698:16;23755:6;:22;;;;-1:-1:-1;;;6402:27:1;;6454:2;6445:12;;6200:263;23755:22:0;;;;;;;;;;;;;;;-1:-1:-1;;;4807:21:1;;23755:22:0;23792:6;;4853:1:1;4844:11;23792:16:0;;;;;;;;;;;;;;-1:-1:-1;;;5068:27:1;;23792:16:0;23823:6;;5120:2:1;5111:12;23823:22:0;;;;;;;;;;;;;;-1:-1:-1;;;6136:25:1;;23823:22:0;23860:6;;6186:2:1;6177:12;23860:20:0;;;;;;;;;;;;;;-1:-1:-1;;;5605:28:1;;23860:20:0;23895:6;;5658:2:1;5649:12;23895:23:0;;;;;;;;;;;;;;-1:-1:-1;;;5874:22:1;;23895:23:0;23933:6;;5921:1:1;5912:11;23933:17:0;;;;;;;;;;;;;;-1:-1:-1;;;5336:28:1;;23933:17:0;23965:6;;5389:2:1;5380:12;23965:23:0;;;;;;;;;;;;;;-1:-1:-1;;;6670:26:1;;23965:23:0;24003:6;;6721:2:1;6712:12;24003:21:0;;;;;;;;;;;;;;23733:302;;;;-1:-1:-1;23733:302:0;;-1:-1:-1;23733:302:0;;-1:-1:-1;23733:302:0;-1:-1:-1;23733:302:0;-1:-1:-1;23733:302:0;-1:-1:-1;24003:21:0;;-1:-1:-1;23464:579:0;-1:-1:-1;23464:579:0:o;24110:174::-;10631:7;10658:6;-1:-1:-1;;;;;10658:6:0;9389:10;10805:23;10797:68;;;;-1:-1:-1;;;10797:68:0;;;;;;;:::i;:::-;24209:14:::1;:32:::0;;-1:-1:-1;;;;;24209:32:0;;::::1;-1:-1:-1::0;;;;;;24209:32:0;;::::1;;::::0;;;24252:10:::1;:24:::0;;;;;::::1;::::0;::::1;;::::0;;24110:174::o;29782:151::-;-1:-1:-1;;;;;29898:18:0;;;29871:7;29898:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;29782:151::o;25580:507::-;10631:7;10658:6;-1:-1:-1;;;;;10658:6:0;9389:10;10805:23;10797:68;;;;-1:-1:-1;;;10797:68:0;;;;;;;:::i;:::-;25701:12:::1;::::0;:21:::1;::::0;25718:3:::1;25701:16;:21::i;:::-;25688:9;:34;;25680:80;;;::::0;-1:-1:-1;;;25680:80:0;;12729:2:1;25680:80:0::1;::::0;::::1;12711:21:1::0;12768:2;12748:18;;;12741:30;12807:34;12787:18;;;12780:62;-1:-1:-1;;;12858:18:1;;;12851:31;12899:19;;25680:80:0::1;12527:397:1::0;25680:80:0::1;25801:12;::::0;:21:::1;::::0;25818:3:::1;25801:16;:21::i;:::-;25787:10;:35;;25779:82;;;::::0;-1:-1:-1;;;25779:82:0;;13538:2:1;25779:82:0::1;::::0;::::1;13520:21:1::0;13577:2;13557:18;;;13550:30;13616:34;13596:18;;;13589:62;-1:-1:-1;;;13667:18:1;;;13660:32;13709:19;;25779:82:0::1;13336:398:1::0;25779:82:0::1;25902:10;25889:9;:23;;25881:74;;;::::0;-1:-1:-1;;;25881:74:0;;13131:2:1;25881:74:0::1;::::0;::::1;13113:21:1::0;13170:2;13150:18;;;13143:30;13209:34;13189:18;;;13182:62;-1:-1:-1;;;13260:18:1;;;13253:36;13306:19;;25881:74:0::1;12929:402:1::0;25881:74:0::1;25968:8;:29:::0;;;;26008:18;:31;26050:17;:29;25580:507::o;11494:201::-;10631:7;10658:6;-1:-1:-1;;;;;10658:6:0;9389:10;10805:23;10797:68;;;;-1:-1:-1;;;10797:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;11583:22:0;::::1;11575:73;;;::::0;-1:-1:-1;;;11575:73:0;;9735:2:1;11575:73:0::1;::::0;::::1;9717:21:1::0;9774:2;9754:18;;;9747:30;9813:34;9793:18;;;9786:62;-1:-1:-1;;;9864:18:1;;;9857:36;9910:19;;11575:73:0::1;9533:402:1::0;11575:73:0::1;11659:28;11678:8;11659:18;:28::i;38453:380::-:0;-1:-1:-1;;;;;38589:19:0;;38581:68;;;;-1:-1:-1;;;38581:68:0;;15894:2:1;38581:68:0;;;15876:21:1;15933:2;15913:18;;;15906:30;15972:34;15952:18;;;15945:62;-1:-1:-1;;;16023:18:1;;;16016:34;16067:19;;38581:68:0;15692:400:1;38581:68:0;-1:-1:-1;;;;;38668:21:0;;38660:68;;;;-1:-1:-1;;;38660:68:0;;10142:2:1;38660:68:0;;;10124:21:1;10181:2;10161:18;;;10154:30;10220:34;10200:18;;;10193:62;-1:-1:-1;;;10271:18:1;;;10264:32;10313:19;;38660:68:0;9940:398:1;38660:68:0;-1:-1:-1;;;;;38741:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;38793:32;;17429:25:1;;;38793:32:0;;17402:18:1;38793:32:0;;;;;;;;38453:380;;;:::o;39124:453::-;39259:24;39286:25;39296:5;39303:7;39286:9;:25::i;:::-;39259:52;;-1:-1:-1;;39326:16:0;:37;39322:248;;39408:6;39388:16;:26;;39380:68;;;;-1:-1:-1;;;39380:68:0;;10900:2:1;39380:68:0;;;10882:21:1;10939:2;10919:18;;;10912:30;10978:31;10958:18;;;10951:59;11027:18;;39380:68:0;10698:353:1;39380:68:0;39492:51;39501:5;39508:7;39536:6;39517:16;:25;39492:8;:51::i;:::-;39248:329;39124:453;;;:::o;33394:2890::-;-1:-1:-1;;;;;33525:18:0;;33517:68;;;;-1:-1:-1;;;33517:68:0;;15488:2:1;33517:68:0;;;15470:21:1;15527:2;15507:18;;;15500:30;15566:34;15546:18;;;15539:62;-1:-1:-1;;;15617:18:1;;;15610:35;15662:19;;33517:68:0;15286:401:1;33517:68:0;-1:-1:-1;;;;;33604:16:0;;33596:64;;;;-1:-1:-1;;;33596:64:0;;8569:2:1;33596:64:0;;;8551:21:1;8608:2;8588:18;;;8581:30;8647:34;8627:18;;;8620:62;-1:-1:-1;;;8698:18:1;;;8691:33;8741:19;;33596:64:0;8367:399:1;33596:64:0;-1:-1:-1;;;;;33695:15:0;;33673:19;33695:15;;;:9;:15;;;;;;33729:21;;;;33721:72;;;;-1:-1:-1;;;33721:72:0;;11258:2:1;33721:72:0;;;11240:21:1;11297:2;11277:18;;;11270:30;11336:34;11316:18;;;11309:62;-1:-1:-1;;;11387:18:1;;;11380:36;11433:19;;33721:72:0;11056:402:1;33721:72:0;33998:4;;33806:17;;;;;;;;;;33954:4;;-1:-1:-1;;;;;33990:12:0;;;33998:4;;33990:12;33987:981;;;34019:27;34035:2;34039:6;34019:15;:27::i;:::-;34076:30;34088:5;34095:2;34099:6;34076:11;:30::i;:::-;34138:22;;-1:-1:-1;;;6402:27:1;;34138:6:0;;6454:2:1;6445:12;34138:22:0;;;;;;;;;;;;;;-1:-1:-1;;;4807:21:1;;34138:22:0;-1:-1:-1;34184:6:0;;4853:1:1;4844:11;34184:16:0;;;;;;;;;;;;;;-1:-1:-1;;;5068:27:1;;34184:16:0;-1:-1:-1;34230:6:0;;5120:2:1;5111:12;34230:22:0;;;;;;;;;;;;;;-1:-1:-1;;;6136:25:1;;34230:22:0;-1:-1:-1;34280:6:0;;6186:2:1;6177:12;34280:20:0;;;;;;;;;;;;;;;34373:11;;;:8;:11;;;:18;;34280:20;;-1:-1:-1;34363:28:0;;;;;:59;;-1:-1:-1;34413:1:0;34404:11;;:8;:11;;-1:-1:-1;;;;;;;;;;;34404:18:0;34395:27;;34363:59;34360:247;;;34457:11;;;:8;:11;;;:23;;-1:-1:-1;33987:981:0;;34360:247;34524:1;34515:11;;:8;:11;;-1:-1:-1;;;;;;;;;;;34515:18:0;34505:28;;34502:105;;34577:1;34568:11;;:8;:11;;;:23;;-1:-1:-1;34502:105:0;33987:981;;;34659:4;;-1:-1:-1;;;;;34653:10:0;;;34659:4;;34653:10;34650:318;;;34680:30;34697:4;34703:6;34680:16;:30::i;:::-;34727:31;34739:4;34745;34751:6;34727:11;:31::i;:::-;34790:23;;-1:-1:-1;;;5605:28:1;;34790:6:0;;5658:2:1;5649:12;34790:23:0;;;;;;;;;;;;;;-1:-1:-1;;;5874:22:1;;34790:23:0;-1:-1:-1;34837:6:0;;5921:1:1;5912:11;34837:17:0;;;;;;;;;;;;;;-1:-1:-1;;;5336:28:1;;34837:17:0;-1:-1:-1;34884:6:0;;5389:2:1;5380:12;34884:23:0;;;;;;;;;;;;;;-1:-1:-1;;;6670:26:1;;34884:23:0;-1:-1:-1;34935:6:0;;6721:2:1;6712:12;34935:21:0;;;;;;;;;;;;;34922:34;;34650:318;-1:-1:-1;;;;;35005:15:0;;;;;;;:9;:15;;;;;;;;35023:20;;;35005:38;;35070:13;;;;;:9;:13;;;;;;;:32;;-1:-1:-1;;;;;;35087:15:0;;;;;;:9;:15;;;;;;;;35070:32;35067:79;;;-1:-1:-1;35129:5:0;35067:79;35161:7;:39;;;;-1:-1:-1;35179:4:0;;-1:-1:-1;;;;;35173:10:0;;;35179:4;;35173:10;;:26;;-1:-1:-1;35195:4:0;;-1:-1:-1;;;;;35187:12:0;;;35195:4;;35187:12;35173:26;35158:1039;;;35217:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35217:25:0;35282:58;35334:5;35282:47;35311:17;35317:11;35311:3;:17;:::i;:::-;35282:24;:6;35293:12;35282:10;:24::i;:::-;:28;;:47::i;:58::-;35257:83;;35380:58;35432:5;35380:47;35409:17;35415:11;35409:3;:17;:::i;:::-;35380:24;:6;35391:12;35380:10;:24::i;:58::-;35355:22;;;:83;35472:52;35518:5;35472:41;35495:17;35501:11;35495:3;:17;:::i;:::-;35472:18;:6;35483;35472:10;:18::i;:52::-;35453:16;;;:71;35562:56;35612:5;35562:45;35589:17;35595:11;35589:3;:17;:::i;:::-;35562:22;:6;35573:10;35562;:22::i;:56::-;35539:20;;;:79;;;35760:16;;;;35714:22;;;;35669;;35635:14;;35669:152;;35539:79;;35669:108;;;;:44;:68::i;:::-;:90;;:108::i;:152::-;35635:186;-1:-1:-1;35847:21:0;:6;35635:186;35847:10;:21::i;:::-;36053:10;;-1:-1:-1;;;;;36053:10:0;36043:21;;;;:9;:21;;;;;:34;;35838:30;;-1:-1:-1;36068:9:0;;36043:21;;;:34;;36068:9;;36043:34;:::i;:::-;;;;-1:-1:-1;;36163:10:0;;36148:37;;17429:25:1;;;-1:-1:-1;;;;;36163:10:0;;;;36148:37;;;-1:-1:-1;;;;;;;;;;;36148:37:0;17417:2:1;17402:18;36148:37:0;;;;;;;35202:995;;35158:1039;-1:-1:-1;;;;;36209:13:0;;;;;;:9;:13;;;;;:23;;36226:6;;36209:13;:23;;36226:6;;36209:23;:::i;:::-;;;;;;;;36265:2;-1:-1:-1;;;;;36250:26:0;36259:4;-1:-1:-1;;;;;36250:26:0;-1:-1:-1;;;;;;;;;;;36269:6:0;36250:26;;;;17429:25:1;;17417:2;17402:18;;17283:177;36250:26:0;;;;;;;;33506:2778;;;;;;;33394:2890;;;:::o;36571:407::-;-1:-1:-1;;;;;36655:21:0;;36647:65;;;;-1:-1:-1;;;36647:65:0;;17125:2:1;36647:65:0;;;17107:21:1;17164:2;17144:18;;;17137:30;17203:33;17183:18;;;17176:61;17254:18;;36647:65:0;16923:355:1;36647:65:0;36760:6;36745:12;;:21;;;;:::i;:::-;36731:10;;:35;;36723:110;;;;-1:-1:-1;;;36723:110:0;;14302:2:1;36723:110:0;;;14284:21:1;14341:2;14321:18;;;14314:30;14380:34;14360:18;;;14353:62;14451:32;14431:18;;;14424:60;14501:19;;36723:110:0;14100:426:1;36723:110:0;36862:6;36846:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;36879:18:0;;;;;;:9;:18;;;;;:28;;36901:6;;36879:18;:28;;36901:6;;36879:28;:::i;:::-;;;;-1:-1:-1;;36933:37:0;;17429:25:1;;;-1:-1:-1;;;;;36933:37:0;;;36950:1;;-1:-1:-1;;;;;;;;;;;36933:37:0;17417:2:1;17402:18;36933:37:0;;;;;;;36571:407;;:::o;37437:468::-;-1:-1:-1;;;;;37521:21:0;;37513:67;;;;-1:-1:-1;;;37513:67:0;;15086:2:1;37513:67:0;;;15068:21:1;15125:2;15105:18;;;15098:30;15164:34;15144:18;;;15137:62;-1:-1:-1;;;15215:18:1;;;15208:31;15256:19;;37513:67:0;14884:397:1;37513:67:0;-1:-1:-1;;;;;37618:18:0;;37593:22;37618:18;;;:9;:18;;;;;;37655:24;;;;37647:71;;;;-1:-1:-1;;;37647:71:0;;8973:2:1;37647:71:0;;;8955:21:1;9012:2;8992:18;;;8985:30;9051:34;9031:18;;;9024:62;-1:-1:-1;;;9102:18:1;;;9095:32;9144:19;;37647:71:0;8771:398:1;37647:71:0;-1:-1:-1;;;;;37754:18:0;;;;;;:9;:18;;;;;37775:23;;;37754:44;;37820:12;:22;;37792:6;;37754:18;37820:22;;37792:6;;37820:22;:::i;:::-;;;;-1:-1:-1;;37860:37:0;;17429:25:1;;;37886:1:0;;-1:-1:-1;;;;;37860:37:0;;;-1:-1:-1;;;;;;;;;;;37860:37:0;17417:2:1;17402:18;37860:37:0;17283:177:1;11855:191:0;11929:16;11948:6;;-1:-1:-1;;;;;11965:17:0;;;-1:-1:-1;;;;;;11965:17:0;;;;;;11998:40;;11948:6;;;;;;;11998:40;;11929:16;11998:40;11918:128;11855:191;:::o;5203:98::-;5261:7;5288:5;5292:1;5288;:5;:::i;:::-;5281:12;5203:98;-1:-1:-1;;;5203:98:0:o;5602:::-;5660:7;5687:5;5691:1;5687;:5;:::i;26451:274::-;-1:-1:-1;;;;;26557:22:0;;;;;;:13;:22;;;;;;;;:30;;:22;:30;;:102;;-1:-1:-1;26642:8:0;:17;-1:-1:-1;;;;;26604:22:0;;26642:17;26604:22;;;:13;:22;;;;;;:35;;26631:7;26604:26;:35::i;:::-;:55;26557:102;26535:182;;;;-1:-1:-1;;;26535:182:0;;9376:2:1;26535:182:0;;;9358:21:1;9415:2;9395:18;;;9388:30;9454:32;9434:18;;;9427:60;9504:18;;26535:182:0;9174:354:1;27271:436:0;27389:17;;-1:-1:-1;;;;;27360:24:0;;;;;;:15;:24;;;;;;27410:15;;27360:47;;:24;:28;:47::i;:::-;:65;27357:288;;;27442:7;:78;;-1:-1:-1;;;;;27488:22:0;;;;;;:13;:22;;;;;:32;;;27513:7;27442:78;;;-1:-1:-1;;;;;27452:23:0;;;;;;:14;:23;;;;;:33;;;27478:7;27442:78;;27357:288;;;27553:7;:80;;-1:-1:-1;;;;;27600:22:0;;;;;;:13;:22;;;;;:33;;27626:7;;27600:22;:33;;27626:7;;27600:33;:::i;:::-;;;;;;;27553:80;;;-1:-1:-1;;;;;27563:23:0;;;;;;:14;:23;;;;;:34;;27590:7;;27563:23;:34;;27590:7;;27563:34;:::i;:::-;;;;;;;27553:80;;27357:288;-1:-1:-1;;;;;;27657:24:0;;;;;:15;:24;;;;;27684:15;27657:42;;-1:-1:-1;27271:436:0:o;26837:278::-;-1:-1:-1;;;;;26944:22:0;;;;;;:13;:22;;;;;;;;:30;;:22;:30;;:104;;-1:-1:-1;27030:18:0;;-1:-1:-1;;;;;26991:23:0;;;;;;:14;:23;;;;;;:36;;27019:7;26991:27;:36::i;:::-;:57;26944:104;26922:185;;;;-1:-1:-1;;;26922:185:0;;11665:2:1;26922:185:0;;;11647:21:1;11704:2;11684:18;;;11677:30;11743:33;11723:18;;;11716:61;11794:18;;26922:185:0;11463:355:1;4465:98:0;4523:7;4550:5;4554:1;4550;:5;:::i;4846:98::-;4904:7;4931:5;4935:1;4931;:5;:::i;14:188:1:-;93:13;;-1:-1:-1;;;;;135:42:1;;125:53;;115:81;;192:1;189;182:12;115:81;14:188;;;:::o;207:247::-;266:6;319:2;307:9;298:7;294:23;290:32;287:52;;;335:1;332;325:12;287:52;374:9;361:23;393:31;418:5;393:31;:::i;459:251::-;529:6;582:2;570:9;561:7;557:23;553:32;550:52;;;598:1;595;588:12;550:52;630:9;624:16;649:31;674:5;649:31;:::i;715:388::-;783:6;791;844:2;832:9;823:7;819:23;815:32;812:52;;;860:1;857;850:12;812:52;899:9;886:23;918:31;943:5;918:31;:::i;:::-;968:5;-1:-1:-1;1025:2:1;1010:18;;997:32;1038:33;997:32;1038:33;:::i;:::-;1090:7;1080:17;;;715:388;;;;;:::o;1108:456::-;1185:6;1193;1201;1254:2;1242:9;1233:7;1229:23;1225:32;1222:52;;;1270:1;1267;1260:12;1222:52;1309:9;1296:23;1328:31;1353:5;1328:31;:::i;:::-;1378:5;-1:-1:-1;1435:2:1;1420:18;;1407:32;1448:33;1407:32;1448:33;:::i;:::-;1108:456;;1500:7;;-1:-1:-1;;;1554:2:1;1539:18;;;;1526:32;;1108:456::o;1569:416::-;1634:6;1642;1695:2;1683:9;1674:7;1670:23;1666:32;1663:52;;;1711:1;1708;1701:12;1663:52;1750:9;1737:23;1769:31;1794:5;1769:31;:::i;:::-;1819:5;-1:-1:-1;1876:2:1;1861:18;;1848:32;1918:15;;1911:23;1899:36;;1889:64;;1949:1;1946;1939:12;1990:315;2058:6;2066;2119:2;2107:9;2098:7;2094:23;2090:32;2087:52;;;2135:1;2132;2125:12;2087:52;2174:9;2161:23;2193:31;2218:5;2193:31;:::i;:::-;2243:5;2295:2;2280:18;;;;2267:32;;-1:-1:-1;;;1990:315:1:o;2310:450::-;2397:6;2405;2413;2466:2;2454:9;2445:7;2441:23;2437:32;2434:52;;;2482:1;2479;2472:12;2434:52;2505:40;2535:9;2505:40;:::i;:::-;2495:50;;2564:49;2609:2;2598:9;2594:18;2564:49;:::i;:::-;2554:59;;2656:2;2645:9;2641:18;2635:25;2700:10;2693:5;2689:22;2682:5;2679:33;2669:61;;2726:1;2723;2716:12;2669:61;2749:5;2739:15;;;2310:450;;;;;:::o;2765:180::-;2824:6;2877:2;2865:9;2856:7;2852:23;2848:32;2845:52;;;2893:1;2890;2883:12;2845:52;-1:-1:-1;2916:23:1;;2765:180;-1:-1:-1;2765:180:1:o;2950:316::-;3027:6;3035;3043;3096:2;3084:9;3075:7;3071:23;3067:32;3064:52;;;3112:1;3109;3102:12;3064:52;-1:-1:-1;;3135:23:1;;;3205:2;3190:18;;3177:32;;-1:-1:-1;3256:2:1;3241:18;;;3228:32;;2950:316;-1:-1:-1;2950:316:1:o;3271:385::-;3357:6;3365;3373;3381;3434:3;3422:9;3413:7;3409:23;3405:33;3402:53;;;3451:1;3448;3441:12;3402:53;-1:-1:-1;;3474:23:1;;;3544:2;3529:18;;3516:32;;-1:-1:-1;3595:2:1;3580:18;;3567:32;;3646:2;3631:18;3618:32;;-1:-1:-1;3271:385:1;-1:-1:-1;3271:385:1:o;3661:661::-;3783:6;3791;3799;3807;3815;3823;3831;3839;3892:3;3880:9;3871:7;3867:23;3863:33;3860:53;;;3909:1;3906;3899:12;3860:53;-1:-1:-1;;3932:23:1;;;4002:2;3987:18;;3974:32;;-1:-1:-1;4053:2:1;4038:18;;4025:32;;4104:2;4089:18;;4076:32;;-1:-1:-1;4155:3:1;4140:19;;4127:33;;-1:-1:-1;4207:3:1;4192:19;;4179:33;;-1:-1:-1;4259:3:1;4244:19;;4231:33;;-1:-1:-1;4311:3:1;4296:19;4283:33;;-1:-1:-1;3661:661:1;-1:-1:-1;3661:661:1:o;4327:273::-;4395:6;4448:2;4436:9;4427:7;4423:23;4419:32;4416:52;;;4464:1;4461;4454:12;4416:52;4496:9;4490:16;4546:4;4539:5;4535:16;4528:5;4525:27;4515:55;;4566:1;4563;4556:12;7361:597;7473:4;7502:2;7531;7520:9;7513:21;7563:6;7557:13;7606:6;7601:2;7590:9;7586:18;7579:34;7631:1;7641:140;7655:6;7652:1;7649:13;7641:140;;;7750:14;;;7746:23;;7740:30;7716:17;;;7735:2;7712:26;7705:66;7670:10;;7641:140;;;7799:6;7796:1;7793:13;7790:91;;;7869:1;7864:2;7855:6;7844:9;7840:22;7836:31;7829:42;7790:91;-1:-1:-1;7942:2:1;7921:15;-1:-1:-1;;7917:29:1;7902:45;;;;7949:2;7898:54;;7361:597;-1:-1:-1;;;7361:597:1:o;13739:356::-;13941:2;13923:21;;;13960:18;;;13953:30;14019:34;14014:2;13999:18;;13992:62;14086:2;14071:18;;13739:356::o;16097:415::-;16299:2;16281:21;;;16338:2;16318:18;;;16311:30;16377:34;16372:2;16357:18;;16350:62;-1:-1:-1;;;16443:2:1;16428:18;;16421:49;16502:3;16487:19;;16097:415::o;19058:128::-;19098:3;19129:1;19125:6;19122:1;19119:13;19116:39;;;19135:18;;:::i;:::-;-1:-1:-1;19171:9:1;;19058:128::o;19191:217::-;19231:1;19257;19247:132;;19301:10;19296:3;19292:20;19289:1;19282:31;19336:4;19333:1;19326:15;19364:4;19361:1;19354:15;19247:132;-1:-1:-1;19393:9:1;;19191:217::o;19413:422::-;19502:1;19545:5;19502:1;19559:270;19580:7;19570:8;19567:21;19559:270;;;19639:4;19635:1;19631:6;19627:17;19621:4;19618:27;19615:53;;;19648:18;;:::i;:::-;19698:7;19688:8;19684:22;19681:55;;;19718:16;;;;19681:55;19797:22;;;;19757:15;;;;19559:270;;;19563:3;19413:422;;;;;:::o;19840:140::-;19898:5;19927:47;19968:4;19958:8;19954:19;19948:4;20034:5;20064:8;20054:80;;-1:-1:-1;20105:1:1;20119:5;;20054:80;20153:4;20143:76;;-1:-1:-1;20190:1:1;20204:5;;20143:76;20235:4;20253:1;20248:59;;;;20321:1;20316:130;;;;20228:218;;20248:59;20278:1;20269:10;;20292:5;;;20316:130;20353:3;20343:8;20340:17;20337:43;;;20360:18;;:::i;:::-;-1:-1:-1;;20416:1:1;20402:16;;20431:5;;20228:218;;20530:2;20520:8;20517:16;20511:3;20505:4;20502:13;20498:36;20492:2;20482:8;20479:16;20474:2;20468:4;20465:12;20461:35;20458:77;20455:159;;;-1:-1:-1;20567:19:1;;;20599:5;;20455:159;20646:34;20671:8;20665:4;20646:34;:::i;:::-;20716:6;20712:1;20708:6;20704:19;20695:7;20692:32;20689:58;;;20727:18;;:::i;:::-;20765:20;;19985:806;-1:-1:-1;;;19985:806:1:o;20796:168::-;20836:7;20902:1;20898;20894:6;20890:14;20887:1;20884:21;20879:1;20872:9;20865:17;20861:45;20858:71;;;20909:18;;:::i;:::-;-1:-1:-1;20949:9:1;;20796:168::o;20969:125::-;21009:4;21037:1;21034;21031:8;21028:34;;;21042:18;;:::i;:::-;-1:-1:-1;21079:9:1;;20969:125::o;21099:380::-;21178:1;21174:12;;;;21221;;;21242:61;;21296:4;21288:6;21284:17;21274:27;;21242:61;21349:2;21341:6;21338:14;21318:18;21315:38;21312:161;;;21395:10;21390:3;21386:20;21383:1;21376:31;21430:4;21427:1;21420:15;21458:4;21455:1;21448:15;21312:161;;21099:380;;;:::o;21484:127::-;21545:10;21540:3;21536:20;21533:1;21526:31;21576:4;21573:1;21566:15;21600:4;21597:1;21590:15;21616:131;-1:-1:-1;;;;;21691:31:1;;21681:42;;21671:70;;21737:1;21734;21727:12

Swarm Source

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