ETH Price: $3,274.21 (+4.68%)
 

Overview

Max Total Supply

1,000,000 ABETS

Holders

30

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 9 Decimals)

Balance
0.000000001 ABETS

Value
$0.00
0x88af4ba964994012f2837d796139915eb4e75eee
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:
ABETS

Compiler Version
v0.8.28+commit.7893614a

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-11-04
*/

// SPDX-License-Identifier: MIT

/**

* Website:  https://AlphaBett.ing
* Telegram: https://t.me/AlphaBetsPortal
* Twitter:  https://x.com/AlphaBetsERC

*/
pragma solidity ^0.8.27;

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

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

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

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

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

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

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

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to` using the
     * allowance mechanism. `value` 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 value) external returns (bool);
}

abstract contract ReentrancyGuard {
    // Booleans are more expensive than uint256 or any type that takes up a full
    // word because each write operation emits an extra SLOAD to first read the
    // slot's contents, replace the bits taken up by the boolean, and then write
    // back. This is the compiler's defense against contract upgrades and
    // pointer aliasing, and it cannot be disabled.

    // The values being non-zero value makes deployment a bit more expensive,
    // but in exchange the refund on every call to nonReentrant will be lower in
    // amount. Since refunds are capped to a percentage of the total
    // transaction's gas, it is best to keep them low in cases like this one, to
    // increase the likelihood of the full refund coming into effect.
    uint256 private constant NOT_ENTERED = 1;
    uint256 private constant ENTERED = 2;

    uint256 private _status;

    /**
     * @dev Unauthorized reentrant call.
     */
    error ReentrancyGuardReentrantCall();

    constructor() {
        _status = NOT_ENTERED;
    }

    /**
     * @dev Prevents a contract from calling itself, directly or indirectly.
     * Calling a `nonReentrant` function from another `nonReentrant`
     * function is not supported. It is possible to prevent this from happening
     * by making the `nonReentrant` function external, and making it call a
     * `private` function that does the actual work.
     */
    modifier nonReentrant() {
        _nonReentrantBefore();
        _;
        _nonReentrantAfter();
    }

    function _nonReentrantBefore() private {
        // On the first call to nonReentrant, _status will be NOT_ENTERED
        if (_status == ENTERED) {
            revert ReentrancyGuardReentrantCall();
        }

        // Any calls to nonReentrant after this point will fail
        _status = ENTERED;
    }

    function _nonReentrantAfter() private {
        // By storing the original value once again, a refund is triggered (see
        // https://eips.ethereum.org/EIPS/eip-2200)
        _status = NOT_ENTERED;
    }

    /**
     * @dev Returns true if the reentrancy guard is currently set to "entered", which indicates there is a
     * `nonReentrant` function in the call stack.
     */
    function _reentrancyGuardEntered() internal view returns (bool) {
        return _status == ENTERED;
    }
}

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

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

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

}

contract Ownable is Context {
    address private _owner;
    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    constructor () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

}

interface IUniswapV2Factory {
    function createPair(address tokenA, address tokenB) external returns (address pair);
}

interface IUniswapV2Router02 {
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
}

contract ABETS is Context, IERC20, Ownable {

    using SafeMath for uint256;

    // ======================================================================== [ STORAGE ] ======================================================================== //
    
    // The struct handling the bets.
    struct Bet {
        address initializer; // @notice The address that initializes the bet.
        string title; // @notice The title of the bet.
        uint256 deadlineBlock; // @notice The block that closes the bet.
        string[] options; // @notice The available options to bet on.
        address[] walletsBets; // @notice This array keeps track of all the wallets that bet.
        mapping(address => uint256) chosenBet; // @notice This mapping keeps track of the option the wallet bet on.
        mapping(address => uint256) balanceBet; // @notice This mapping keeps track of the bets balance placed by every wallet.
        uint256 balance; // @notice The balance stored in the bet.
        bool closed; // @notice If the bet was closed by the initializer.
    }

    uint256 public atBet = 0; // @notice Counter that keeps track of the last bet.
    mapping(uint256 => Bet) public allBets; // @notice Mapping that stores all the bets.
    uint256 public MIN_DEADLINE_DURATION = 300; // @notice The minimum deadline value for the bets.
    uint256 public MAX_BET_OPTIONS = 3; // @notice The maximum amount of options available per bet.
    uint256 public CLOSING_FEE = 5; // @notice The fee kept by the contract in tokens on bet closing. (%)

    /**
     * @notice Event emitted when a new bet is created.
     * @param betId The returned ID of the bet.
     * @param initializer The address of the initializer.
     * @param title The title of the bet.
     * @param options The available options the users can bet on.
     * @param deadlineBlock The block number at which betting will end.
     */
    event BetCreated(uint256 indexed betId, address initializer, string title, string[] options, uint256 deadlineBlock);

    /**
     * @notice Event emitted when a bet is closed.
     * @param betId The ID of the bet.
     * @param initializer The address of the initializer that closes the bet.
     * @param winningOption The option that won the bet.
     */
    event BetClosed(uint256 indexed betId, address initializer, uint256 winningOption);

    
    /**
     * @notice Event emitted when a bet is placed by an user.
     * @param betId The ID of the bet.
     * @param wallet The address of the user that places the bet.
     * @param option The user's betting option.
     */
    event BetPlaced(uint256 indexed betId, address wallet, uint256 option);

    mapping (address => uint256) private _balances;
    mapping (address => mapping (address => uint256)) private _allowances;
    mapping (address => bool) private _isExcludedFromFee;
    mapping (address => bool) private bots;
    address payable private _taxWallet;
    string private constant _name = unicode'ALPHABETS';
    string private constant _symbol = unicode'ABETS';

    uint256 private _buyTax=19;
    uint256 private _sellTax=19;
    uint256 private _finalBuyTax=0;
    uint256 private _finalSellTax=0;
    uint256 private _reduceBuyTaxAt=30;
    uint256 private _reduceSellTaxAt=30;
    uint256 private _preventSwapBefore=28;
    uint256 private _buyCount=0;

    uint8 private constant _decimals = 9;
    uint256 private constant _tTotal = 1000000 * 10**_decimals;
    uint256 public _maxTxAmount = 20000 * 10**_decimals;
    uint256 public _maxWalletSize = 20000 * 10**_decimals;
    uint256 public _taxSwapThreshold= 10000 * 10**_decimals;
    uint256 public _maxTaxSwap= 10000 * 10**_decimals;
    
    IUniswapV2Router02 private uniswapV2Router;
    address private uniswapV2Pair;
    bool private tradingOpen;
    bool private inSwap = false;
    bool private swapEnabled = false;
    uint256 private sellCount = 0;
    uint256 private lastSellBlock = 0;
    event MaxTxAmountUpdated(uint _maxTxAmount);

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

    constructor () payable {
        _taxWallet = payable(_msgSender());
        _balances[_msgSender()] = _tTotal;
        _isExcludedFromFee[owner()] = true;
        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[_taxWallet] = true; 

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

    // Example usage of the counter
   
    // ======================================================================== [ SETTERS ] ======================================================================== //

    /*
    @notice This function is used by the administrator to change the minimum deadline duration.
    @param duration The new minimum deadline duration.
    */
    function setMinDeadlineDuration(uint256 duration) external onlyOwner {
        MIN_DEADLINE_DURATION = duration;
    }

    /*
    @notice This function is used by the administrator to change the maximum betting options.
    @param duration The new maximum betting options.
    */
    function setMaxBetOptions(uint256 options) external onlyOwner {
        MAX_BET_OPTIONS = options;
    }

    /*
    @notice This function is used by the administrator to change the closing fee.
    @param duration The new closing fee.
    */
    function setClosingFee(uint8 fee) external onlyOwner {
        require(fee >= 0 && fee <= 10, "ERC837: Invalid fee.");
        CLOSING_FEE = fee;
    }

    // ======================================================================== [ GETTERS ] ======================================================================== //

    /*
    @notice This function is used internally to retrieve a bet.
    @param betId The id of the bet.
    @return the bet at the specified id.
    */
    function getBet(uint256 betId) private view returns (Bet storage) {
        Bet storage returnedBet = allBets[betId];
        require(returnedBet.initializer != address(0), "ERC837: Bet does not exist.");
        return returnedBet;
    }

    /*
    @notice This function is used to retrieve the bet's initializer.
    @param betId The id of the bet.
    @return the address of the initializer.
    */
    function getBetInitializer(uint256 betId) public view returns (address) {
        return getBet(betId).initializer;
    }

    /*
    @notice This function is used to retrieve the bet's title.
    @param betId The id of the bet.
    @return the title.
    */
    function getBetTitle(uint256 betId) public view returns (string memory) {
        return getBet(betId).title;
    }

    /*
    @notice This function is used to retrieve the bet's deadline block.
    @param betId The id of the bet.
    @return the bet's deadline block.
    */
    function getBetDeadlineBlock(uint256 betId) public view returns (uint256) {
        return getBet(betId).deadlineBlock;
    }

    /*
    @notice This function is used to retrieve the bet's options.
    @param betId The id of the bet.
    @return the bet's options.
    */
    function getBetOptions(uint256 betId) public view returns (string[] memory) {
        return getBet(betId).options;
    }

    /*
    @notice This function is used to retrieve the bet's betters.
    @param betId The id of the bet.
    @return an array with all the betters of a specific bet.
    */
    function getBetters(uint256 betId) public view returns (address[] memory) {
        return getBet(betId).walletsBets;
    }

    /*
    @notice This function is used to retrieve the bet's options.
    @param betId The id of the bet.
    @return the options of a bet.
    */
    function getWalletBetOption(uint256 betId, address wallet) public view returns (uint256) {
        return getBet(betId).chosenBet[wallet];
    }

    /*
    @notice This function is used to retrieve the bet's pooled balance.
    @param betId The id of the bet.
    @return the pooled tokens in a bet.
    */
    function getBetPooledBalance(uint256 betId) public view returns (uint256) {
        return getBet(betId).balance;
    }

    function name() public pure returns (string memory) {
        return _name;
    }

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

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

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

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

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

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

    // ======================================================================== [ LOGIC ] ======================================================================== //

    /*
    @notice This function allows an user to create a bet.
    @param _title The title of the bet.
    @param _options A string array with all the available options to bet on.
    @param deadline The deadline block of the bet.
    */
    function createBet(string memory _title, string[] memory _options, uint256 deadline) payable external returns(uint256 betId) {
        require(balanceOf(msg.sender) > 0, "ERC837: Only token holders can create bets.");
        require(deadline >= MIN_DEADLINE_DURATION, "ERC837: Deadline too short.");
        require(bytes(_title).length <= 50, "ERC837: Title cannot be longer than 50 characters.");
        require(_options.length >= 2 && _options.length <= MAX_BET_OPTIONS, "ERC837: Invalid amount of options.");

        betId = atBet;

        uint256 deadlineBlock = block.number + deadline;

        allBets[betId].initializer = msg.sender;
        allBets[betId].title = _title;
        allBets[betId].deadlineBlock = deadlineBlock;
        allBets[betId].options = _options;
        allBets[betId].balance = 0;
        allBets[betId].closed = false;
        
        atBet += 1;
        
        emit BetCreated(betId, msg.sender, _title, _options, deadlineBlock);
    }

    /*
    @notice This function allows the initializer of the bet to close it and pay the winning wallets.
    @param betId The id of the bet.
    @param option The winning option.
    */
    function closeBet(uint256 betId, uint256 option) external {
        Bet storage returnedBet = getBet(betId);
        require(returnedBet.initializer == msg.sender, "ERC837: Sender not initializer.");
        require(returnedBet.deadlineBlock >= block.number, "ERC837: This bet is still locked.");
        require(!returnedBet.closed, "ERC837: This bet is already closed.");
        require(option >= 0 && option < returnedBet.options.length, "ERC837: Invalid option.");

        if(returnedBet.walletsBets.length > 0) {
            uint256 balOnWinningOption = getBalancePlacedOnOption(betId, option);
            uint256 availableWinningsAfterFee = returnedBet.balance - ((returnedBet.balance * CLOSING_FEE) / 100);

            for(uint256 i = 0; i < returnedBet.walletsBets.length; i++) {
                address wallet = returnedBet.walletsBets[i];
                if(returnedBet.chosenBet[wallet] == option) {
                    uint256 walletBetPercentageFromWinning = returnedBet.balanceBet[wallet] * 100 / balOnWinningOption;
                    uint256 walletWinnings = (availableWinningsAfterFee * walletBetPercentageFromWinning) / 100;

                    _transfer(address(this), wallet, walletWinnings);
                }
            }
        }

        returnedBet.closed = true;
        emit BetClosed(betId, returnedBet.initializer, option);
    }

    /*
    @notice This function allows the users to place a specific bet.
    @param betId The id of the bet.
    @param option The betting option.
    @param betBalance The amount of tokens to bet.
    */
    function placeBet(uint256 betId, uint256 option, uint256 betBalance) external {
        require(balanceOf(msg.sender) > 0, "ERC837: Only token holders can place bets.");

        Bet storage returnedBet = getBet(betId);
        require(!isBetPlacedByWallet(betId, msg.sender), "ERC837: Only 1 bet allowed per wallet.");
        require(option >= 0 && option < returnedBet.options.length, "ERC837: Invalid option for bet.");
        require(betBalance >= 1 * (10 ^ decimals()), "ERC837: Bet balance must be higher than 1 token.");
        require(balanceOf(msg.sender) >= betBalance, "ERC837: Not enough tokens to bet.");

        returnedBet.walletsBets.push(msg.sender);
        returnedBet.chosenBet[msg.sender] = option;
        returnedBet.balanceBet[msg.sender] = betBalance;
        returnedBet.balance += betBalance;
        _transfer(msg.sender, address(this), betBalance);
    }

    /*
    @notice This function is used internally to get the balance placed on a specific option.
    @param betId The id of the bet.
    @param option The option to check for.
    @return the balance bet on the specific option.
    */
    function getBalancePlacedOnOption(uint256 betId, uint256 option) private view returns(uint256 balance) {
        balance = 0;
        Bet storage returnedBet = getBet(betId);
        for(uint256 i = 0; i < returnedBet.walletsBets.length; i++) {
            address wallet = returnedBet.walletsBets[i];
            if(returnedBet.chosenBet[wallet] == option)
                balance += returnedBet.balanceBet[wallet];
        }
    }

    /*
    @notice This function is used internally to check if a wallet placed a bet on a specific id.
    @param betId The id of the bet.
    @return true if the wallet placed a bet on the specific id | false if the wallet didn't place a bet on the specific id.
    */
    function isBetPlacedByWallet(uint256 betId, address wallet) private view returns(bool) {
        Bet storage returnedBet = getBet(betId);
        for(uint256 i = 0; i < returnedBet.walletsBets.length; i++) {
            if(returnedBet.walletsBets[i] == wallet)
                return true;
        }
        return false;
    }

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

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

    function _approve(address owner, address spender, uint256 amount) private {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }

    function _transfer(address from, address to, uint256 amount) private {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(amount > 0, "Transfer amount must be greater than zero");
        uint256 taxAmount=0;
        if (from != owner() && to != owner()) {
            require(!bots[from] && !bots[to]);
            taxAmount = amount.mul(_buyTax).div(100);
            
            if(_buyCount == 0){
                taxAmount = amount.mul(_buyTax).div(100);
            }
            if (from == uniswapV2Pair && to != address(uniswapV2Router) && ! _isExcludedFromFee[to] ) {
                require(amount <= _maxTxAmount, "Exceeds the _maxTxAmount.");
                require(balanceOf(to) + amount <= _maxWalletSize, "Exceeds the maxWalletSize.");
                _buyCount++;
            }

            if(to == uniswapV2Pair && from!= address(this) ){
                taxAmount = amount.mul(_sellTax).div(100);
            }

            uint256 contractTokenBalance = balanceOf(address(this));
            if (!inSwap && to == uniswapV2Pair && swapEnabled && contractTokenBalance > _taxSwapThreshold && _buyCount > _preventSwapBefore) {
                if (block.number > lastSellBlock) {
                    sellCount = 0;
                }
                require(sellCount < 3, "Only 3 sells per block!");
                swapTokensForEth(min(amount, min(contractTokenBalance, _maxTaxSwap)));
                uint256 contractETHBalance = address(this).balance;
                if (contractETHBalance > 0) {
                    sendETHToFee(address(this).balance);
                }
                sellCount++;
                lastSellBlock = block.number;
            }
        }

        if(taxAmount>0){
          _balances[address(this)]=_balances[address(this)].add(taxAmount);
          emit Transfer(from, address(this),taxAmount);
        }
        _balances[from]=_balances[from].sub(amount);
        _balances[to]=_balances[to].add(amount.sub(taxAmount));
        emit Transfer(from, to, amount.sub(taxAmount));
    }


    function min(uint256 a, uint256 b) private pure returns (uint256){
      return (a>b)?b:a;
    }

    function swapTokensForEth(uint256 tokenAmount) private lockTheSwap {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        _approve(address(this), address(uniswapV2Router), tokenAmount);
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0,
            path,
            address(this),
            block.timestamp
        );
    }

    function adjustTaxes(uint256 _buy, uint256 _sell) external onlyOwner {  
       _buyTax = _buy;
       _sellTax = _sell;
    }
    
    function removeLimits() external onlyOwner{
        _maxTxAmount = _tTotal;
        _maxWalletSize=_tTotal;
        emit MaxTxAmountUpdated(_tTotal);
    }

    function sendETHToFee(uint256 amount) private {
        _taxWallet.transfer(amount);
    }

    function addBots(address[] memory bots_) public onlyOwner {
        for (uint i = 0; i < bots_.length; i++) {
            bots[bots_[i]] = true;
        }
    }

    function delBots(address[] memory notbot) public onlyOwner {
      for (uint i = 0; i < notbot.length; i++) {
          bots[notbot[i]] = false;
      }
    }

    // return uniswapV2Pair
    function getUniswapV2Pair() public view returns (address) { 
        return uniswapV2Pair; 
    }
    // return uniswapV2Router
    function getUniswapV2Router() public view returns (address) { 
        return address(uniswapV2Router); 
    }

    function isBot(address a) public view returns (bool){
      return bots[a];
    }

    function openTrading() public onlyOwner() {
        require(!tradingOpen, "trading is already open"); 
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        _approve(address(this), address(uniswapV2Router), _tTotal);
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        uniswapV2Router.addLiquidityETH{value: address(this).balance}(address(this), balanceOf(address(this)), 0, 0, owner(), block.timestamp);
        IERC20(uniswapV2Pair).approve(address(uniswapV2Router),type(uint).max);
        swapEnabled = true; 
        tradingOpen = true; 
    }

    receive() external payable {}

    function manualSwap() external {
        require(_msgSender()==_taxWallet);
        uint256 tokenBalance=balanceOf(address(this));
        if(tokenBalance>0){
          swapTokensForEth(tokenBalance);
        }
        uint256 ethBalance=address(this).balance;
        if(ethBalance>0){
          sendETHToFee(ethBalance);
        }
    }

    function rescueETH() external {
        require(_msgSender()==_taxWallet);
        uint256 contractETHBalance = address(this).balance;
        sendETHToFee(contractETHBalance);
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"betId","type":"uint256"},{"indexed":false,"internalType":"address","name":"initializer","type":"address"},{"indexed":false,"internalType":"uint256","name":"winningOption","type":"uint256"}],"name":"BetClosed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"betId","type":"uint256"},{"indexed":false,"internalType":"address","name":"initializer","type":"address"},{"indexed":false,"internalType":"string","name":"title","type":"string"},{"indexed":false,"internalType":"string[]","name":"options","type":"string[]"},{"indexed":false,"internalType":"uint256","name":"deadlineBlock","type":"uint256"}],"name":"BetCreated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"betId","type":"uint256"},{"indexed":false,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"option","type":"uint256"}],"name":"BetPlaced","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_maxTxAmount","type":"uint256"}],"name":"MaxTxAmountUpdated","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":[],"name":"CLOSING_FEE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BET_OPTIONS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MIN_DEADLINE_DURATION","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTaxSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxWalletSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxSwapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"}],"name":"addBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buy","type":"uint256"},{"internalType":"uint256","name":"_sell","type":"uint256"}],"name":"adjustTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"allBets","outputs":[{"internalType":"address","name":"initializer","type":"address"},{"internalType":"string","name":"title","type":"string"},{"internalType":"uint256","name":"deadlineBlock","type":"uint256"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"bool","name":"closed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"atBet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"betId","type":"uint256"},{"internalType":"uint256","name":"option","type":"uint256"}],"name":"closeBet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_title","type":"string"},{"internalType":"string[]","name":"_options","type":"string[]"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"createBet","outputs":[{"internalType":"uint256","name":"betId","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address[]","name":"notbot","type":"address[]"}],"name":"delBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"}],"name":"getBetDeadlineBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"}],"name":"getBetInitializer","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"}],"name":"getBetOptions","outputs":[{"internalType":"string[]","name":"","type":"string[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"}],"name":"getBetPooledBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"}],"name":"getBetTitle","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"}],"name":"getBetters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getUniswapV2Router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"},{"internalType":"address","name":"wallet","type":"address"}],"name":"getWalletBetOption","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"a","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"betId","type":"uint256"},{"internalType":"uint256","name":"option","type":"uint256"},{"internalType":"uint256","name":"betBalance","type":"uint256"}],"name":"placeBet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"fee","type":"uint8"}],"name":"setClosingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"options","type":"uint256"}],"name":"setMaxBetOptions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"duration","type":"uint256"}],"name":"setMinDeadlineDuration","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040525f60015561012c6003556003600455600580556013600b556013600c555f600d555f600e55601e600f55601e601055601c6011555f6012556009600a61004a91906102e0565b61005690614e206102f5565b6013556100656009600a6102e0565b61007190614e206102f5565b6014556100806009600a6102e0565b61008c906127106102f5565b60155561009b6009600a6102e0565b6100a7906127106102f5565b6016556018805461ffff60a81b191690555f6019819055601a81905580546001600160a01b031916339081178255604051909182917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350600a80546001600160a01b03191633178155610120906009906102e0565b61012d90620f42406102f5565b335f8181526006602090815260408083209490945581546001600160a01b03908116835260089091528382208054600160ff1991821681179092553084528584208054821683179055600a5490921683529390912080549091169092179091556001600160a01b03165f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6101c46009600a6102e0565b6101d190620f42406102f5565b60405190815260200160405180910390a361030c565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156102365780850481111561021a5761021a6101e7565b600184161561022857908102905b60019390931c9280026101ff565b935093915050565b5f8261024c575060016102da565b8161025857505f6102da565b816001811461026e576002811461027857610294565b60019150506102da565b60ff841115610289576102896101e7565b50506001821b6102da565b5060208310610133831016604e8410600b84101617156102b7575081810a6102da565b6102c35f1984846101fb565b805f19048211156102d6576102d66101e7565b0290505b92915050565b5f6102ee60ff84168361023e565b9392505050565b80820281158282048414176102da576102da6101e7565b61307f806103195f395ff3fe608060405260043610610256575f3560e01c8063715018a61161013f578063bbd4d3e3116100b3578063d34628cc11610078578063d34628cc146106c7578063d38d75ae146106e6578063dd62ed3e14610705578063e0ced0e114610749578063e71c969714610779578063ffba44b814610798575f5ffd5b8063bbd4d3e314610655578063bf474bed1461066a578063c2ecf8001461067f578063c57b9c0c1461069e578063c9567bf9146106b3575f5ffd5b80638da5cb5b116101045780638da5cb5b1461059a5780638f9a55c0146105b6578063919594ed146105cb57806395d89b41146105ea578063a8d5742a14610617578063a9059cbb14610636575f5ffd5b8063715018a614610529578063751039fc1461053d57806377e7c655146105515780637d1db4a5146105705780637e70b75814610585575f5ffd5b806327c8e81c116101d65780634402ac731161019b5780634402ac731461046d5780634cf816de1461048c5780634d5dacd2146104ab57806351bc3c85146104d75780636f0b00ac146104eb57806370a082311461050a575f5ffd5b806327c8e81c146103d4578063313ce567146103e957806331c2d8471461040457806332ceefff146104235780633bbac57914610436575f5ffd5b80630faee56f1161021c5780630faee56f1461034d57806318160ddd146103705780631abfa6291461038457806320800a00146103a157806323b872dd146103b5575f5ffd5b806271c1751461026157806306997f3f1461029757806306fdde03146102b8578063095ea7b3146102f25780630de9d91e14610321575f5ffd5b3661025d57005b5f5ffd5b34801561026c575f5ffd5b506017546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102a2575f5ffd5b506102b66102b1366004612710565b6107b7565b005b3480156102c3575f5ffd5b50604080518082019091526009815268414c5048414245545360b81b60208201525b60405161028e919061275e565b3480156102fd575f5ffd5b5061031161030c366004612784565b61083c565b604051901515815260200161028e565b34801561032c575f5ffd5b5061034061033b3660046127ae565b610852565b60405161028e919061281f565b348015610358575f5ffd5b5061036260165481565b60405190815260200161028e565b34801561037b575f5ffd5b50610362610932565b34801561038f575f5ffd5b506018546001600160a01b031661027a565b3480156103ac575f5ffd5b506102b6610951565b3480156103c0575f5ffd5b506103116103cf366004612831565b61097d565b3480156103df575f5ffd5b5061036260015481565b3480156103f4575f5ffd5b506040516009815260200161028e565b34801561040f575f5ffd5b506102b661041e3660046128d7565b6109e4565b6103626104313660046129e2565b610a6b565b348015610441575f5ffd5b50610311610450366004612ac7565b6001600160a01b03165f9081526009602052604090205460ff1690565b348015610478575f5ffd5b506102e56104873660046127ae565b610ce9565b348015610497575f5ffd5b506103626104a63660046127ae565b610d85565b3480156104b6575f5ffd5b506104ca6104c53660046127ae565b610d99565b60405161028e9190612b25565b3480156104e2575f5ffd5b506102b6610e04565b3480156104f6575f5ffd5b506102b6610505366004612b37565b610e4e565b348015610515575f5ffd5b50610362610524366004612ac7565b610e82565b348015610534575f5ffd5b506102b6610e9c565b348015610548575f5ffd5b506102b6610f0d565b34801561055c575f5ffd5b5061027a61056b3660046127ae565b610fbb565b34801561057b575f5ffd5b5061036260135481565b348015610590575f5ffd5b5061036260045481565b3480156105a5575f5ffd5b505f546001600160a01b031661027a565b3480156105c1575f5ffd5b5061036260145481565b3480156105d6575f5ffd5b506103626105e5366004612b57565b610fd5565b3480156105f5575f5ffd5b50604080518082019091526005815264414245545360d81b60208201526102e5565b348015610622575f5ffd5b506102b66106313660046127ae565b611003565b348015610641575f5ffd5b50610311610650366004612784565b611031565b348015610660575f5ffd5b5061036260055481565b348015610675575f5ffd5b5061036260155481565b34801561068a575f5ffd5b506103626106993660046127ae565b61103d565b3480156106a9575f5ffd5b5061036260035481565b3480156106be575f5ffd5b506102b6611051565b3480156106d2575f5ffd5b506102b66106e13660046128d7565b6113e2565b3480156106f1575f5ffd5b506102b6610700366004612b37565b611466565b348015610710575f5ffd5b5061036261071f366004612b85565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b348015610754575f5ffd5b506107686107633660046127ae565b61173b565b60405161028e959493929190612bb1565b348015610784575f5ffd5b506102b6610793366004612bf3565b6117fe565b3480156107a3575f5ffd5b506102b66107b23660046127ae565b611a78565b5f546001600160a01b031633146107e95760405162461bcd60e51b81526004016107e090612c1c565b60405180910390fd5b600a8160ff1611156108345760405162461bcd60e51b815260206004820152601460248201527322a9219c199b9d1024b73b30b634b2103332b29760611b60448201526064016107e0565b60ff16600555565b5f610848338484611aa6565b5060015b92915050565b606061085d82611bc9565b600301805480602002602001604051908101604052809291908181526020015f905b82821015610927578382905f5260205f2001805461089c90612c51565b80601f01602080910402602001604051908101604052809291908181526020018280546108c890612c51565b80156109135780601f106108ea57610100808354040283529160200191610913565b820191905f5260205f20905b8154815290600101906020018083116108f657829003601f168201915b50505050508152602001906001019061087f565b505050509050919050565b5f61093f6009600a612d7a565b61094c90620f4240612d88565b905090565b600a546001600160a01b0316336001600160a01b031614610970575f5ffd5b4761097a81611c2d565b50565b5f610989848484611c64565b6109da84336109d585604051806060016040528060288152602001613022602891396001600160a01b038a165f9081526007602090815260408083203384529091529020549190612204565b611aa6565b5060019392505050565b5f546001600160a01b03163314610a0d5760405162461bcd60e51b81526004016107e090612c1c565b5f5b8151811015610a67575f60095f848481518110610a2e57610a2e612d9f565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610a0f565b5050565b5f5f610a7633610e82565b11610ad75760405162461bcd60e51b815260206004820152602b60248201527f4552433833373a204f6e6c7920746f6b656e20686f6c646572732063616e206360448201526a3932b0ba32903132ba399760a91b60648201526084016107e0565b600354821015610b295760405162461bcd60e51b815260206004820152601b60248201527f4552433833373a20446561646c696e6520746f6f2073686f72742e000000000060448201526064016107e0565b603284511115610b965760405162461bcd60e51b815260206004820152603260248201527f4552433833373a205469746c652063616e6e6f74206265206c6f6e67657220746044820152713430b7101a981031b430b930b1ba32b9399760711b60648201526084016107e0565b6002835110158015610bab5750600454835111155b610c025760405162461bcd60e51b815260206004820152602260248201527f4552433833373a20496e76616c696420616d6f756e74206f66206f7074696f6e604482015261399760f11b60648201526084016107e0565b506001545f610c118343612db3565b5f83815260026020526040902080546001600160a01b03191633178155909150600101610c3e8682612e12565b505f8281526002602081815260409092209081018390558551610c699260039092019187019061265a565b505f82815260026020526040812060078101829055600801805460ff191690556001805490918291610c9c908390612db3565b92505081905550817f1afe65692c50d05eb6a8afe7d1fd096c9a281bb1f3edf48b89cf39918aeeea4b33878785604051610cd99493929190612ecd565b60405180910390a2509392505050565b6060610cf482611bc9565b6001018054610d0290612c51565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2e90612c51565b8015610d795780601f10610d5057610100808354040283529160200191610d79565b820191905f5260205f20905b815481529060010190602001808311610d5c57829003601f168201915b50505050509050919050565b5f610d8f82611bc9565b6002015492915050565b6060610da482611bc9565b600401805480602002602001604051908101604052809291908181526020018280548015610d7957602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610ddb5750505050509050919050565b600a546001600160a01b0316336001600160a01b031614610e23575f5ffd5b5f610e2d30610e82565b90508015610e3e57610e3e8161223c565b478015610a6757610a6781611c2d565b5f546001600160a01b03163314610e775760405162461bcd60e51b81526004016107e090612c1c565b600b91909155600c55565b6001600160a01b03165f9081526006602052604090205490565b5f546001600160a01b03163314610ec55760405162461bcd60e51b81526004016107e090612c1c565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610f365760405162461bcd60e51b81526004016107e090612c1c565b610f426009600a612d7a565b610f4f90620f4240612d88565b601355610f5e6009600a612d7a565b610f6b90620f4240612d88565b6014557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610f9b6009600a612d7a565b610fa890620f4240612d88565b60405190815260200160405180910390a1565b5f610fc582611bc9565b546001600160a01b031692915050565b5f610fdf83611bc9565b6001600160a01b0383165f9081526005919091016020526040902054905092915050565b5f546001600160a01b0316331461102c5760405162461bcd60e51b81526004016107e090612c1c565b600355565b5f610848338484611c64565b5f61104782611bc9565b6007015492915050565b5f546001600160a01b0316331461107a5760405162461bcd60e51b81526004016107e090612c1c565b601854600160a01b900460ff16156110d45760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064016107e0565b601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561111c90309061110f6009600a612d7a565b6109d590620f4240612d88565b60175f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561116c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111909190612f14565b6001600160a01b031663c9c653963060175f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ef573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112139190612f14565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801561125d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112819190612f14565b601880546001600160a01b0319166001600160a01b039283161790556017541663f305d71947306112b181610e82565b5f5f6112c45f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561132a573d5f5f3e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061134f9190612f2f565b505060185460175460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af11580156113a4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c89190612f5a565b506018805462ff00ff60a01b19166201000160a01b179055565b5f546001600160a01b0316331461140b5760405162461bcd60e51b81526004016107e090612c1c565b5f5b8151811015610a6757600160095f84848151811061142d5761142d612d9f565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905560010161140d565b5f61147083611bc9565b80549091506001600160a01b031633146114cc5760405162461bcd60e51b815260206004820152601f60248201527f4552433833373a2053656e646572206e6f7420696e697469616c697a65722e0060448201526064016107e0565b438160020154101561152a5760405162461bcd60e51b815260206004820152602160248201527f4552433833373a205468697320626574206973207374696c6c206c6f636b65646044820152601760f91b60648201526084016107e0565b600881015460ff161561158b5760405162461bcd60e51b815260206004820152602360248201527f4552433833373a20546869732062657420697320616c726561647920636c6f7360448201526232b21760e91b60648201526084016107e0565b600381015482106115de5760405162461bcd60e51b815260206004820152601760248201527f4552433833373a20496e76616c6964206f7074696f6e2e00000000000000000060448201526064016107e0565b6004810154156116e0575f6115f384846123ac565b90505f6064600554846007015461160a9190612d88565b6116149190612f79565b83600701546116239190612f98565b90505f5b60048401548110156116dc575f84600401828154811061164957611649612d9f565b5f9182526020808320909101546001600160a01b0316808352600588019091526040909120549091508690036116d3576001600160a01b0381165f90815260068601602052604081205485906116a0906064612d88565b6116aa9190612f79565b90505f60646116b98387612d88565b6116c39190612f79565b90506116d0308483611c64565b50505b50600101611627565b5050505b60088101805460ff191660011790558054604080516001600160a01b0390921682526020820184905284917f7f87517059366dbdc85d3ed06c99a243c3f704a883ab3d056a97fed73016983b910160405180910390a2505050565b60026020525f9081526040902080546001820180546001600160a01b03909216929161176690612c51565b80601f016020809104026020016040519081016040528092919081815260200182805461179290612c51565b80156117dd5780601f106117b4576101008083540402835291602001916117dd565b820191905f5260205f20905b8154815290600101906020018083116117c057829003601f168201915b50505050600283015460078401546008909401549293909290915060ff1685565b5f61180833610e82565b116118685760405162461bcd60e51b815260206004820152602a60248201527f4552433833373a204f6e6c7920746f6b656e20686f6c646572732063616e20706044820152693630b1b2903132ba399760b11b60648201526084016107e0565b5f61187284611bc9565b905061187e8433612445565b156118da5760405162461bcd60e51b815260206004820152602660248201527f4552433833373a204f6e6c7920312062657420616c6c6f77656420706572207760448201526530b63632ba1760d11b60648201526084016107e0565b6003810154831061192d5760405162461bcd60e51b815260206004820152601f60248201527f4552433833373a20496e76616c6964206f7074696f6e20666f72206265742e0060448201526064016107e0565b61193960036001612fab565b60ff168210156119a45760405162461bcd60e51b815260206004820152603060248201527f4552433833373a204265742062616c616e6365206d757374206265206869676860448201526f32b9103a3430b71018903a37b5b2b71760811b60648201526084016107e0565b816119ae33610e82565b1015611a065760405162461bcd60e51b815260206004820152602160248201527f4552433833373a204e6f7420656e6f75676820746f6b656e7320746f206265746044820152601760f91b60648201526084016107e0565b6004810180546001810182555f918252602080832090910180546001600160a01b0319163390811790915582526005830181526040808320869055600684019091528120839055600782018054849290611a61908490612db3565b90915550611a729050333084611c64565b50505050565b5f546001600160a01b03163314611aa15760405162461bcd60e51b81526004016107e090612c1c565b600455565b6001600160a01b038316611b085760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107e0565b6001600160a01b038216611b695760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107e0565b6001600160a01b038381165f8181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f81815260026020526040812080546001600160a01b031661084c5760405162461bcd60e51b815260206004820152601b60248201527f4552433833373a2042657420646f6573206e6f742065786973742e000000000060448201526064016107e0565b600a546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610a67573d5f5f3e3d5ffd5b6001600160a01b038316611cc85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107e0565b6001600160a01b038216611d2a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107e0565b5f8111611d8b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107e0565b5f80546001600160a01b03858116911614801590611db657505f546001600160a01b03848116911614155b156120c7576001600160a01b0384165f9081526009602052604090205460ff16158015611dfb57506001600160a01b0383165f9081526009602052604090205460ff16155b611e03575f5ffd5b611e236064611e1d600b54856124b590919063ffffffff16565b9061253a565b90506012545f03611e4b57611e486064611e1d600b54856124b590919063ffffffff16565b90505b6018546001600160a01b038581169116148015611e7657506017546001600160a01b03848116911614155b8015611e9a57506001600160a01b0383165f9081526008602052604090205460ff16155b15611f6b57601354821115611ef15760405162461bcd60e51b815260206004820152601960248201527f4578636565647320746865205f6d61785478416d6f756e742e0000000000000060448201526064016107e0565b60145482611efe85610e82565b611f089190612db3565b1115611f565760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e00000000000060448201526064016107e0565b60128054905f611f6583612fce565b91905055505b6018546001600160a01b038481169116148015611f9157506001600160a01b0384163014155b15611fb357611fb06064611e1d600c54856124b590919063ffffffff16565b90505b5f611fbd30610e82565b601854909150600160a81b900460ff16158015611fe757506018546001600160a01b038581169116145b8015611ffc5750601854600160b01b900460ff165b8015612009575060155481115b80156120185750601154601254115b156120c557601a5443111561202c575f6019555b60036019541061207e5760405162461bcd60e51b815260206004820152601760248201527f4f6e6c7920332073656c6c732070657220626c6f636b2100000000000000000060448201526064016107e0565b61209b612096846120918460165461257b565b61257b565b61223c565b4780156120ab576120ab47611c2d565b60198054905f6120ba83612fce565b909155505043601a55505b505b801561213f57305f908152600660205260409020546120e6908261258f565b305f81815260066020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121369085815260200190565b60405180910390a35b6001600160a01b0384165f9081526006602052604090205461216190836125ed565b6001600160a01b0385165f908152600660205260409020556121a461218683836125ed565b6001600160a01b0385165f908152600660205260409020549061258f565b6001600160a01b038085165f8181526006602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6121ed85856125ed565b60405190815260200160405180910390a350505050565b5f81848411156122275760405162461bcd60e51b81526004016107e0919061275e565b505f6122338486612f98565b95945050505050565b6018805460ff60a81b1916600160a81b1790556040805160028082526060820183525f9260208301908036833701905050905030815f8151811061228257612282612d9f565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156122d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122fd9190612f14565b8160018151811061231057612310612d9f565b6001600160a01b0392831660209182029290920101526017546123369130911684611aa6565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac9479061236e9085905f90869030904290600401612fe6565b5f604051808303815f87803b158015612385575f5ffd5b505af1158015612397573d5f5f3e3d5ffd5b50506018805460ff60a81b1916905550505050565b5f806123b784611bc9565b90505f5b600482015481101561243d575f8260040182815481106123dd576123dd612d9f565b5f9182526020808320909101546001600160a01b031680835260058601909152604090912054909150859003612434576001600160a01b0381165f9081526006840160205260409020546124319085612db3565b93505b506001016123bb565b505092915050565b5f5f61245084611bc9565b90505f5b60048201548110156124ab57836001600160a01b031682600401828154811061247f5761247f612d9f565b5f918252602090912001546001600160a01b0316036124a35760019250505061084c565b600101612454565b505f949350505050565b5f825f036124c457505f61084c565b5f6124cf8385612d88565b9050826124dc8583612f79565b146125335760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107e0565b9392505050565b5f61253383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061262e565b5f8183116125895782612533565b50919050565b5f8061259b8385612db3565b9050838110156125335760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107e0565b5f61253383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612204565b5f818361264e5760405162461bcd60e51b81526004016107e0919061275e565b505f6122338486612f79565b828054828255905f5260205f2090810192821561269e579160200282015b8281111561269e578251829061268e9082612e12565b5091602001919060010190612678565b506126aa9291506126ae565b5090565b808211156126aa575f6126c182826126ca565b506001016126ae565b5080546126d690612c51565b5f825580601f106126e5575050565b601f0160209004905f5260205f209081019061097a91905b808211156126aa575f81556001016126fd565b5f60208284031215612720575f5ffd5b813560ff81168114612533575f5ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6125336020830184612730565b6001600160a01b038116811461097a575f5ffd5b5f5f60408385031215612795575f5ffd5b82356127a081612770565b946020939093013593505050565b5f602082840312156127be575f5ffd5b5035919050565b5f82825180855260208501945060208160051b830101602085015f5b8381101561281357601f198584030188526127fd838351612730565b60209889019890935091909101906001016127e1565b50909695505050505050565b602081525f61253360208301846127c5565b5f5f5f60608486031215612843575f5ffd5b833561284e81612770565b9250602084013561285e81612770565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128ac576128ac61286f565b604052919050565b5f67ffffffffffffffff8211156128cd576128cd61286f565b5060051b60200190565b5f602082840312156128e7575f5ffd5b813567ffffffffffffffff8111156128fd575f5ffd5b8201601f8101841361290d575f5ffd5b803561292061291b826128b4565b612883565b8082825260208201915060208360051b850101925086831115612941575f5ffd5b6020840193505b8284101561296c57833561295b81612770565b825260209384019390910190612948565b9695505050505050565b5f82601f830112612985575f5ffd5b813567ffffffffffffffff81111561299f5761299f61286f565b6129b2601f8201601f1916602001612883565b8181528460208386010111156129c6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f606084860312156129f4575f5ffd5b833567ffffffffffffffff811115612a0a575f5ffd5b612a1686828701612976565b935050602084013567ffffffffffffffff811115612a32575f5ffd5b8401601f81018613612a42575f5ffd5b8035612a5061291b826128b4565b8082825260208201915060208360051b850101925088831115612a71575f5ffd5b602084015b83811015612ab257803567ffffffffffffffff811115612a94575f5ffd5b612aa38b602083890101612976565b84525060209283019201612a76565b50959895975050505060409390930135925050565b5f60208284031215612ad7575f5ffd5b813561253381612770565b5f8151808452602084019350602083015f5b82811015612b1b5781516001600160a01b0316865260209586019590910190600101612af4565b5093949350505050565b602081525f6125336020830184612ae2565b5f5f60408385031215612b48575f5ffd5b50508035926020909101359150565b5f5f60408385031215612b68575f5ffd5b823591506020830135612b7a81612770565b809150509250929050565b5f5f60408385031215612b96575f5ffd5b8235612ba181612770565b91506020830135612b7a81612770565b6001600160a01b038616815260a0602082018190525f90612bd490830187612730565b6040830195909552506060810192909252151560809091015292915050565b5f5f5f60608486031215612c05575f5ffd5b505081359360208301359350604090920135919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612c6557607f821691505b60208210810361258957634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115612cd257808504811115612cb657612cb6612c83565b6001841615612cc457908102905b60019390931c928002612c9b565b935093915050565b5f82612ce85750600161084c565b81612cf457505f61084c565b8160018114612d0a5760028114612d1457612d30565b600191505061084c565b60ff841115612d2557612d25612c83565b50506001821b61084c565b5060208310610133831016604e8410600b8410161715612d53575081810a61084c565b612d5f5f198484612c97565b805f1904821115612d7257612d72612c83565b029392505050565b5f61253360ff841683612cda565b808202811582820484141761084c5761084c612c83565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561084c5761084c612c83565b601f821115612e0d57805f5260205f20601f840160051c81016020851015612deb5750805b601f840160051c820191505b81811015612e0a575f8155600101612df7565b50505b505050565b815167ffffffffffffffff811115612e2c57612e2c61286f565b612e4081612e3a8454612c51565b84612dc6565b6020601f821160018114612e72575f8315612e5b5750848201515b5f19600385901b1c1916600184901b178455612e0a565b5f84815260208120601f198516915b82811015612ea15787850151825560209485019460019092019101612e81565b5084821015612ebe57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03851681526080602082018190525f90612ef090830186612730565b8281036040840152612f0281866127c5565b91505082606083015295945050505050565b5f60208284031215612f24575f5ffd5b815161253381612770565b5f5f5f60608486031215612f41575f5ffd5b5050815160208301516040909301519094929350919050565b5f60208284031215612f6a575f5ffd5b81518015158114612533575f5ffd5b5f82612f9357634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561084c5761084c612c83565b60ff8181168382160290811690818114612fc757612fc7612c83565b5092915050565b5f60018201612fdf57612fdf612c83565b5060010190565b85815284602082015260a060408201525f61300460a0830186612ae2565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212201febe2586f7dd86cd9ad7f3ba2fc860b41e3341a60768d68ec5e8ca74bac826c64736f6c634300081c0033

Deployed Bytecode

0x608060405260043610610256575f3560e01c8063715018a61161013f578063bbd4d3e3116100b3578063d34628cc11610078578063d34628cc146106c7578063d38d75ae146106e6578063dd62ed3e14610705578063e0ced0e114610749578063e71c969714610779578063ffba44b814610798575f5ffd5b8063bbd4d3e314610655578063bf474bed1461066a578063c2ecf8001461067f578063c57b9c0c1461069e578063c9567bf9146106b3575f5ffd5b80638da5cb5b116101045780638da5cb5b1461059a5780638f9a55c0146105b6578063919594ed146105cb57806395d89b41146105ea578063a8d5742a14610617578063a9059cbb14610636575f5ffd5b8063715018a614610529578063751039fc1461053d57806377e7c655146105515780637d1db4a5146105705780637e70b75814610585575f5ffd5b806327c8e81c116101d65780634402ac731161019b5780634402ac731461046d5780634cf816de1461048c5780634d5dacd2146104ab57806351bc3c85146104d75780636f0b00ac146104eb57806370a082311461050a575f5ffd5b806327c8e81c146103d4578063313ce567146103e957806331c2d8471461040457806332ceefff146104235780633bbac57914610436575f5ffd5b80630faee56f1161021c5780630faee56f1461034d57806318160ddd146103705780631abfa6291461038457806320800a00146103a157806323b872dd146103b5575f5ffd5b806271c1751461026157806306997f3f1461029757806306fdde03146102b8578063095ea7b3146102f25780630de9d91e14610321575f5ffd5b3661025d57005b5f5ffd5b34801561026c575f5ffd5b506017546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b3480156102a2575f5ffd5b506102b66102b1366004612710565b6107b7565b005b3480156102c3575f5ffd5b50604080518082019091526009815268414c5048414245545360b81b60208201525b60405161028e919061275e565b3480156102fd575f5ffd5b5061031161030c366004612784565b61083c565b604051901515815260200161028e565b34801561032c575f5ffd5b5061034061033b3660046127ae565b610852565b60405161028e919061281f565b348015610358575f5ffd5b5061036260165481565b60405190815260200161028e565b34801561037b575f5ffd5b50610362610932565b34801561038f575f5ffd5b506018546001600160a01b031661027a565b3480156103ac575f5ffd5b506102b6610951565b3480156103c0575f5ffd5b506103116103cf366004612831565b61097d565b3480156103df575f5ffd5b5061036260015481565b3480156103f4575f5ffd5b506040516009815260200161028e565b34801561040f575f5ffd5b506102b661041e3660046128d7565b6109e4565b6103626104313660046129e2565b610a6b565b348015610441575f5ffd5b50610311610450366004612ac7565b6001600160a01b03165f9081526009602052604090205460ff1690565b348015610478575f5ffd5b506102e56104873660046127ae565b610ce9565b348015610497575f5ffd5b506103626104a63660046127ae565b610d85565b3480156104b6575f5ffd5b506104ca6104c53660046127ae565b610d99565b60405161028e9190612b25565b3480156104e2575f5ffd5b506102b6610e04565b3480156104f6575f5ffd5b506102b6610505366004612b37565b610e4e565b348015610515575f5ffd5b50610362610524366004612ac7565b610e82565b348015610534575f5ffd5b506102b6610e9c565b348015610548575f5ffd5b506102b6610f0d565b34801561055c575f5ffd5b5061027a61056b3660046127ae565b610fbb565b34801561057b575f5ffd5b5061036260135481565b348015610590575f5ffd5b5061036260045481565b3480156105a5575f5ffd5b505f546001600160a01b031661027a565b3480156105c1575f5ffd5b5061036260145481565b3480156105d6575f5ffd5b506103626105e5366004612b57565b610fd5565b3480156105f5575f5ffd5b50604080518082019091526005815264414245545360d81b60208201526102e5565b348015610622575f5ffd5b506102b66106313660046127ae565b611003565b348015610641575f5ffd5b50610311610650366004612784565b611031565b348015610660575f5ffd5b5061036260055481565b348015610675575f5ffd5b5061036260155481565b34801561068a575f5ffd5b506103626106993660046127ae565b61103d565b3480156106a9575f5ffd5b5061036260035481565b3480156106be575f5ffd5b506102b6611051565b3480156106d2575f5ffd5b506102b66106e13660046128d7565b6113e2565b3480156106f1575f5ffd5b506102b6610700366004612b37565b611466565b348015610710575f5ffd5b5061036261071f366004612b85565b6001600160a01b039182165f90815260076020908152604080832093909416825291909152205490565b348015610754575f5ffd5b506107686107633660046127ae565b61173b565b60405161028e959493929190612bb1565b348015610784575f5ffd5b506102b6610793366004612bf3565b6117fe565b3480156107a3575f5ffd5b506102b66107b23660046127ae565b611a78565b5f546001600160a01b031633146107e95760405162461bcd60e51b81526004016107e090612c1c565b60405180910390fd5b600a8160ff1611156108345760405162461bcd60e51b815260206004820152601460248201527322a9219c199b9d1024b73b30b634b2103332b29760611b60448201526064016107e0565b60ff16600555565b5f610848338484611aa6565b5060015b92915050565b606061085d82611bc9565b600301805480602002602001604051908101604052809291908181526020015f905b82821015610927578382905f5260205f2001805461089c90612c51565b80601f01602080910402602001604051908101604052809291908181526020018280546108c890612c51565b80156109135780601f106108ea57610100808354040283529160200191610913565b820191905f5260205f20905b8154815290600101906020018083116108f657829003601f168201915b50505050508152602001906001019061087f565b505050509050919050565b5f61093f6009600a612d7a565b61094c90620f4240612d88565b905090565b600a546001600160a01b0316336001600160a01b031614610970575f5ffd5b4761097a81611c2d565b50565b5f610989848484611c64565b6109da84336109d585604051806060016040528060288152602001613022602891396001600160a01b038a165f9081526007602090815260408083203384529091529020549190612204565b611aa6565b5060019392505050565b5f546001600160a01b03163314610a0d5760405162461bcd60e51b81526004016107e090612c1c565b5f5b8151811015610a67575f60095f848481518110610a2e57610a2e612d9f565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff1916911515919091179055600101610a0f565b5050565b5f5f610a7633610e82565b11610ad75760405162461bcd60e51b815260206004820152602b60248201527f4552433833373a204f6e6c7920746f6b656e20686f6c646572732063616e206360448201526a3932b0ba32903132ba399760a91b60648201526084016107e0565b600354821015610b295760405162461bcd60e51b815260206004820152601b60248201527f4552433833373a20446561646c696e6520746f6f2073686f72742e000000000060448201526064016107e0565b603284511115610b965760405162461bcd60e51b815260206004820152603260248201527f4552433833373a205469746c652063616e6e6f74206265206c6f6e67657220746044820152713430b7101a981031b430b930b1ba32b9399760711b60648201526084016107e0565b6002835110158015610bab5750600454835111155b610c025760405162461bcd60e51b815260206004820152602260248201527f4552433833373a20496e76616c696420616d6f756e74206f66206f7074696f6e604482015261399760f11b60648201526084016107e0565b506001545f610c118343612db3565b5f83815260026020526040902080546001600160a01b03191633178155909150600101610c3e8682612e12565b505f8281526002602081815260409092209081018390558551610c699260039092019187019061265a565b505f82815260026020526040812060078101829055600801805460ff191690556001805490918291610c9c908390612db3565b92505081905550817f1afe65692c50d05eb6a8afe7d1fd096c9a281bb1f3edf48b89cf39918aeeea4b33878785604051610cd99493929190612ecd565b60405180910390a2509392505050565b6060610cf482611bc9565b6001018054610d0290612c51565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2e90612c51565b8015610d795780601f10610d5057610100808354040283529160200191610d79565b820191905f5260205f20905b815481529060010190602001808311610d5c57829003601f168201915b50505050509050919050565b5f610d8f82611bc9565b6002015492915050565b6060610da482611bc9565b600401805480602002602001604051908101604052809291908181526020018280548015610d7957602002820191905f5260205f20905b81546001600160a01b03168152600190910190602001808311610ddb5750505050509050919050565b600a546001600160a01b0316336001600160a01b031614610e23575f5ffd5b5f610e2d30610e82565b90508015610e3e57610e3e8161223c565b478015610a6757610a6781611c2d565b5f546001600160a01b03163314610e775760405162461bcd60e51b81526004016107e090612c1c565b600b91909155600c55565b6001600160a01b03165f9081526006602052604090205490565b5f546001600160a01b03163314610ec55760405162461bcd60e51b81526004016107e090612c1c565b5f80546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a35f80546001600160a01b0319169055565b5f546001600160a01b03163314610f365760405162461bcd60e51b81526004016107e090612c1c565b610f426009600a612d7a565b610f4f90620f4240612d88565b601355610f5e6009600a612d7a565b610f6b90620f4240612d88565b6014557f947f344d56e1e8c70dc492fb94c4ddddd490c016aab685f5e7e47b2e85cb44cf610f9b6009600a612d7a565b610fa890620f4240612d88565b60405190815260200160405180910390a1565b5f610fc582611bc9565b546001600160a01b031692915050565b5f610fdf83611bc9565b6001600160a01b0383165f9081526005919091016020526040902054905092915050565b5f546001600160a01b0316331461102c5760405162461bcd60e51b81526004016107e090612c1c565b600355565b5f610848338484611c64565b5f61104782611bc9565b6007015492915050565b5f546001600160a01b0316331461107a5760405162461bcd60e51b81526004016107e090612c1c565b601854600160a01b900460ff16156110d45760405162461bcd60e51b815260206004820152601760248201527f74726164696e6720697320616c7265616479206f70656e00000000000000000060448201526064016107e0565b601780546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d90811790915561111c90309061110f6009600a612d7a565b6109d590620f4240612d88565b60175f9054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801561116c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111909190612f14565b6001600160a01b031663c9c653963060175f9054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ef573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112139190612f14565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303815f875af115801561125d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112819190612f14565b601880546001600160a01b0319166001600160a01b039283161790556017541663f305d71947306112b181610e82565b5f5f6112c45f546001600160a01b031690565b60405160e088901b6001600160e01b03191681526001600160a01b03958616600482015260248101949094526044840192909252606483015290911660848201524260a482015260c40160606040518083038185885af115801561132a573d5f5f3e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061134f9190612f2f565b505060185460175460405163095ea7b360e01b81526001600160a01b0391821660048201525f1960248201529116915063095ea7b3906044016020604051808303815f875af11580156113a4573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113c89190612f5a565b506018805462ff00ff60a01b19166201000160a01b179055565b5f546001600160a01b0316331461140b5760405162461bcd60e51b81526004016107e090612c1c565b5f5b8151811015610a6757600160095f84848151811061142d5761142d612d9f565b6020908102919091018101516001600160a01b031682528101919091526040015f20805460ff191691151591909117905560010161140d565b5f61147083611bc9565b80549091506001600160a01b031633146114cc5760405162461bcd60e51b815260206004820152601f60248201527f4552433833373a2053656e646572206e6f7420696e697469616c697a65722e0060448201526064016107e0565b438160020154101561152a5760405162461bcd60e51b815260206004820152602160248201527f4552433833373a205468697320626574206973207374696c6c206c6f636b65646044820152601760f91b60648201526084016107e0565b600881015460ff161561158b5760405162461bcd60e51b815260206004820152602360248201527f4552433833373a20546869732062657420697320616c726561647920636c6f7360448201526232b21760e91b60648201526084016107e0565b600381015482106115de5760405162461bcd60e51b815260206004820152601760248201527f4552433833373a20496e76616c6964206f7074696f6e2e00000000000000000060448201526064016107e0565b6004810154156116e0575f6115f384846123ac565b90505f6064600554846007015461160a9190612d88565b6116149190612f79565b83600701546116239190612f98565b90505f5b60048401548110156116dc575f84600401828154811061164957611649612d9f565b5f9182526020808320909101546001600160a01b0316808352600588019091526040909120549091508690036116d3576001600160a01b0381165f90815260068601602052604081205485906116a0906064612d88565b6116aa9190612f79565b90505f60646116b98387612d88565b6116c39190612f79565b90506116d0308483611c64565b50505b50600101611627565b5050505b60088101805460ff191660011790558054604080516001600160a01b0390921682526020820184905284917f7f87517059366dbdc85d3ed06c99a243c3f704a883ab3d056a97fed73016983b910160405180910390a2505050565b60026020525f9081526040902080546001820180546001600160a01b03909216929161176690612c51565b80601f016020809104026020016040519081016040528092919081815260200182805461179290612c51565b80156117dd5780601f106117b4576101008083540402835291602001916117dd565b820191905f5260205f20905b8154815290600101906020018083116117c057829003601f168201915b50505050600283015460078401546008909401549293909290915060ff1685565b5f61180833610e82565b116118685760405162461bcd60e51b815260206004820152602a60248201527f4552433833373a204f6e6c7920746f6b656e20686f6c646572732063616e20706044820152693630b1b2903132ba399760b11b60648201526084016107e0565b5f61187284611bc9565b905061187e8433612445565b156118da5760405162461bcd60e51b815260206004820152602660248201527f4552433833373a204f6e6c7920312062657420616c6c6f77656420706572207760448201526530b63632ba1760d11b60648201526084016107e0565b6003810154831061192d5760405162461bcd60e51b815260206004820152601f60248201527f4552433833373a20496e76616c6964206f7074696f6e20666f72206265742e0060448201526064016107e0565b61193960036001612fab565b60ff168210156119a45760405162461bcd60e51b815260206004820152603060248201527f4552433833373a204265742062616c616e6365206d757374206265206869676860448201526f32b9103a3430b71018903a37b5b2b71760811b60648201526084016107e0565b816119ae33610e82565b1015611a065760405162461bcd60e51b815260206004820152602160248201527f4552433833373a204e6f7420656e6f75676820746f6b656e7320746f206265746044820152601760f91b60648201526084016107e0565b6004810180546001810182555f918252602080832090910180546001600160a01b0319163390811790915582526005830181526040808320869055600684019091528120839055600782018054849290611a61908490612db3565b90915550611a729050333084611c64565b50505050565b5f546001600160a01b03163314611aa15760405162461bcd60e51b81526004016107e090612c1c565b600455565b6001600160a01b038316611b085760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b60648201526084016107e0565b6001600160a01b038216611b695760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b60648201526084016107e0565b6001600160a01b038381165f8181526007602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b5f81815260026020526040812080546001600160a01b031661084c5760405162461bcd60e51b815260206004820152601b60248201527f4552433833373a2042657420646f6573206e6f742065786973742e000000000060448201526064016107e0565b600a546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015610a67573d5f5f3e3d5ffd5b6001600160a01b038316611cc85760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b60648201526084016107e0565b6001600160a01b038216611d2a5760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b60648201526084016107e0565b5f8111611d8b5760405162461bcd60e51b815260206004820152602960248201527f5472616e7366657220616d6f756e74206d7573742062652067726561746572206044820152687468616e207a65726f60b81b60648201526084016107e0565b5f80546001600160a01b03858116911614801590611db657505f546001600160a01b03848116911614155b156120c7576001600160a01b0384165f9081526009602052604090205460ff16158015611dfb57506001600160a01b0383165f9081526009602052604090205460ff16155b611e03575f5ffd5b611e236064611e1d600b54856124b590919063ffffffff16565b9061253a565b90506012545f03611e4b57611e486064611e1d600b54856124b590919063ffffffff16565b90505b6018546001600160a01b038581169116148015611e7657506017546001600160a01b03848116911614155b8015611e9a57506001600160a01b0383165f9081526008602052604090205460ff16155b15611f6b57601354821115611ef15760405162461bcd60e51b815260206004820152601960248201527f4578636565647320746865205f6d61785478416d6f756e742e0000000000000060448201526064016107e0565b60145482611efe85610e82565b611f089190612db3565b1115611f565760405162461bcd60e51b815260206004820152601a60248201527f4578636565647320746865206d617857616c6c657453697a652e00000000000060448201526064016107e0565b60128054905f611f6583612fce565b91905055505b6018546001600160a01b038481169116148015611f9157506001600160a01b0384163014155b15611fb357611fb06064611e1d600c54856124b590919063ffffffff16565b90505b5f611fbd30610e82565b601854909150600160a81b900460ff16158015611fe757506018546001600160a01b038581169116145b8015611ffc5750601854600160b01b900460ff165b8015612009575060155481115b80156120185750601154601254115b156120c557601a5443111561202c575f6019555b60036019541061207e5760405162461bcd60e51b815260206004820152601760248201527f4f6e6c7920332073656c6c732070657220626c6f636b2100000000000000000060448201526064016107e0565b61209b612096846120918460165461257b565b61257b565b61223c565b4780156120ab576120ab47611c2d565b60198054905f6120ba83612fce565b909155505043601a55505b505b801561213f57305f908152600660205260409020546120e6908261258f565b305f81815260066020526040908190209290925590516001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906121369085815260200190565b60405180910390a35b6001600160a01b0384165f9081526006602052604090205461216190836125ed565b6001600160a01b0385165f908152600660205260409020556121a461218683836125ed565b6001600160a01b0385165f908152600660205260409020549061258f565b6001600160a01b038085165f8181526006602052604090209290925585167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6121ed85856125ed565b60405190815260200160405180910390a350505050565b5f81848411156122275760405162461bcd60e51b81526004016107e0919061275e565b505f6122338486612f98565b95945050505050565b6018805460ff60a81b1916600160a81b1790556040805160028082526060820183525f9260208301908036833701905050905030815f8151811061228257612282612d9f565b6001600160a01b03928316602091820292909201810191909152601754604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa1580156122d9573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122fd9190612f14565b8160018151811061231057612310612d9f565b6001600160a01b0392831660209182029290920101526017546123369130911684611aa6565b60175460405163791ac94760e01b81526001600160a01b039091169063791ac9479061236e9085905f90869030904290600401612fe6565b5f604051808303815f87803b158015612385575f5ffd5b505af1158015612397573d5f5f3e3d5ffd5b50506018805460ff60a81b1916905550505050565b5f806123b784611bc9565b90505f5b600482015481101561243d575f8260040182815481106123dd576123dd612d9f565b5f9182526020808320909101546001600160a01b031680835260058601909152604090912054909150859003612434576001600160a01b0381165f9081526006840160205260409020546124319085612db3565b93505b506001016123bb565b505092915050565b5f5f61245084611bc9565b90505f5b60048201548110156124ab57836001600160a01b031682600401828154811061247f5761247f612d9f565b5f918252602090912001546001600160a01b0316036124a35760019250505061084c565b600101612454565b505f949350505050565b5f825f036124c457505f61084c565b5f6124cf8385612d88565b9050826124dc8583612f79565b146125335760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b60648201526084016107e0565b9392505050565b5f61253383836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061262e565b5f8183116125895782612533565b50919050565b5f8061259b8385612db3565b9050838110156125335760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f77000000000060448201526064016107e0565b5f61253383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612204565b5f818361264e5760405162461bcd60e51b81526004016107e0919061275e565b505f6122338486612f79565b828054828255905f5260205f2090810192821561269e579160200282015b8281111561269e578251829061268e9082612e12565b5091602001919060010190612678565b506126aa9291506126ae565b5090565b808211156126aa575f6126c182826126ca565b506001016126ae565b5080546126d690612c51565b5f825580601f106126e5575050565b601f0160209004905f5260205f209081019061097a91905b808211156126aa575f81556001016126fd565b5f60208284031215612720575f5ffd5b813560ff81168114612533575f5ffd5b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6125336020830184612730565b6001600160a01b038116811461097a575f5ffd5b5f5f60408385031215612795575f5ffd5b82356127a081612770565b946020939093013593505050565b5f602082840312156127be575f5ffd5b5035919050565b5f82825180855260208501945060208160051b830101602085015f5b8381101561281357601f198584030188526127fd838351612730565b60209889019890935091909101906001016127e1565b50909695505050505050565b602081525f61253360208301846127c5565b5f5f5f60608486031215612843575f5ffd5b833561284e81612770565b9250602084013561285e81612770565b929592945050506040919091013590565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff811182821017156128ac576128ac61286f565b604052919050565b5f67ffffffffffffffff8211156128cd576128cd61286f565b5060051b60200190565b5f602082840312156128e7575f5ffd5b813567ffffffffffffffff8111156128fd575f5ffd5b8201601f8101841361290d575f5ffd5b803561292061291b826128b4565b612883565b8082825260208201915060208360051b850101925086831115612941575f5ffd5b6020840193505b8284101561296c57833561295b81612770565b825260209384019390910190612948565b9695505050505050565b5f82601f830112612985575f5ffd5b813567ffffffffffffffff81111561299f5761299f61286f565b6129b2601f8201601f1916602001612883565b8181528460208386010111156129c6575f5ffd5b816020850160208301375f918101602001919091529392505050565b5f5f5f606084860312156129f4575f5ffd5b833567ffffffffffffffff811115612a0a575f5ffd5b612a1686828701612976565b935050602084013567ffffffffffffffff811115612a32575f5ffd5b8401601f81018613612a42575f5ffd5b8035612a5061291b826128b4565b8082825260208201915060208360051b850101925088831115612a71575f5ffd5b602084015b83811015612ab257803567ffffffffffffffff811115612a94575f5ffd5b612aa38b602083890101612976565b84525060209283019201612a76565b50959895975050505060409390930135925050565b5f60208284031215612ad7575f5ffd5b813561253381612770565b5f8151808452602084019350602083015f5b82811015612b1b5781516001600160a01b0316865260209586019590910190600101612af4565b5093949350505050565b602081525f6125336020830184612ae2565b5f5f60408385031215612b48575f5ffd5b50508035926020909101359150565b5f5f60408385031215612b68575f5ffd5b823591506020830135612b7a81612770565b809150509250929050565b5f5f60408385031215612b96575f5ffd5b8235612ba181612770565b91506020830135612b7a81612770565b6001600160a01b038616815260a0602082018190525f90612bd490830187612730565b6040830195909552506060810192909252151560809091015292915050565b5f5f5f60608486031215612c05575f5ffd5b505081359360208301359350604090920135919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b600181811c90821680612c6557607f821691505b60208210810361258957634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6001815b6001841115612cd257808504811115612cb657612cb6612c83565b6001841615612cc457908102905b60019390931c928002612c9b565b935093915050565b5f82612ce85750600161084c565b81612cf457505f61084c565b8160018114612d0a5760028114612d1457612d30565b600191505061084c565b60ff841115612d2557612d25612c83565b50506001821b61084c565b5060208310610133831016604e8410600b8410161715612d53575081810a61084c565b612d5f5f198484612c97565b805f1904821115612d7257612d72612c83565b029392505050565b5f61253360ff841683612cda565b808202811582820484141761084c5761084c612c83565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561084c5761084c612c83565b601f821115612e0d57805f5260205f20601f840160051c81016020851015612deb5750805b601f840160051c820191505b81811015612e0a575f8155600101612df7565b50505b505050565b815167ffffffffffffffff811115612e2c57612e2c61286f565b612e4081612e3a8454612c51565b84612dc6565b6020601f821160018114612e72575f8315612e5b5750848201515b5f19600385901b1c1916600184901b178455612e0a565b5f84815260208120601f198516915b82811015612ea15787850151825560209485019460019092019101612e81565b5084821015612ebe57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03851681526080602082018190525f90612ef090830186612730565b8281036040840152612f0281866127c5565b91505082606083015295945050505050565b5f60208284031215612f24575f5ffd5b815161253381612770565b5f5f5f60608486031215612f41575f5ffd5b5050815160208301516040909301519094929350919050565b5f60208284031215612f6a575f5ffd5b81518015158114612533575f5ffd5b5f82612f9357634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561084c5761084c612c83565b60ff8181168382160290811690818114612fc757612fc7612c83565b5092915050565b5f60018201612fdf57612fdf612c83565b5060010190565b85815284602082015260a060408201525f61300460a0830186612ae2565b6001600160a01b039490941660608301525060800152939250505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e6365a26469706673582212201febe2586f7dd86cd9ad7f3ba2fc860b41e3341a60768d68ec5e8ca74bac826c64736f6c634300081c0033

Deployed Bytecode Sourcemap

7995:20570:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27085:112;;;;;;;;;;-1:-1:-1;27172:15:0;;-1:-1:-1;;;;;27172:15:0;27085:112;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;27085:112:0;;;;;;;;13443:154;;;;;;;;;;-1:-1:-1;13443:154:0;;;;;:::i;:::-;;:::i;:::-;;16251:83;;;;;;;;;;-1:-1:-1;16321:5:0;;;;;;;;;;;;-1:-1:-1;;;16321:5:0;;;;16251:83;;;;;;;:::i;22529:161::-;;;;;;;;;;-1:-1:-1;22529:161:0;;;;;:::i;:::-;;:::i;:::-;;;1688:14:1;;1681:22;1663:41;;1651:2;1636:18;22529:161:0;1523:187:1;15202:123:0;;;;;;;;;;-1:-1:-1;15202:123:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11702:49::-;;;;;;;;;;;;;;;;;;;2961:25:1;;;2949:2;2934:18;11702:49:0;2815:177:1;16528:95:0;;;;;;;;;;;;;:::i;26949:99::-;;;;;;;;;;-1:-1:-1;27026:13:0;;-1:-1:-1;;;;;27026:13:0;26949:99;;28374:186;;;;;;;;;;;;;:::i;22698:313::-;;;;;;;;;;-1:-1:-1;22698:313:0;;;;;:::i;:::-;;:::i;9086:24::-;;;;;;;;;;;;;;;;16437:83;;;;;;;;;;-1:-1:-1;16437:83:0;;11449:1;3652:36:1;;3640:2;3625:18;16437:83:0;3510:184:1;26750:162:0;;;;;;;;;;-1:-1:-1;26750:162:0;;;;;:::i;:::-;;:::i;17499:998::-;;;;;;:::i;:::-;;:::i;27205:83::-;;;;;;;;;;-1:-1:-1;27205:83:0;;;;;:::i;:::-;-1:-1:-1;;;;;27273:7:0;27252:4;27273:7;;;:4;:7;;;;;;;;;27205:83;14626:117;;;;;;;;;;-1:-1:-1;14626:117:0;;;;;:::i;:::-;;:::i;14916:127::-;;;;;;;;;;-1:-1:-1;14916:127:0;;;;;:::i;:::-;;:::i;15514:125::-;;;;;;;;;;-1:-1:-1;15514:125:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;28018:348::-;;;;;;;;;;;;;:::i;26170:129::-;;;;;;;;;;-1:-1:-1;26170:129:0;;;;;:::i;:::-;;:::i;16631:119::-;;;;;;;;;;-1:-1:-1;16631:119:0;;;;;:::i;:::-;;:::i;7076:148::-;;;;;;;;;;;;;:::i;26311:159::-;;;;;;;;;;;;;:::i;14354:123::-;;;;;;;;;;-1:-1:-1;14354:123:0;;;;;:::i;:::-;;:::i;11522:51::-;;;;;;;;;;;;;;;;9361:34;;;;;;;;;;;;;;;;6862:79;;;;;;;;;;-1:-1:-1;6900:7:0;6927:6;-1:-1:-1;;;;;6927:6:0;6862:79;;11580:53;;;;;;;;;;;;;;;;15801:146;;;;;;;;;;-1:-1:-1;15801:146:0;;;;;:::i;:::-;;:::i;16342:87::-;;;;;;;;;;-1:-1:-1;16414:7:0;;;;;;;;;;;;-1:-1:-1;;;16414:7:0;;;;16342:87;;12895:120;;;;;;;;;;-1:-1:-1;12895:120:0;;;;;:::i;:::-;;:::i;16758:167::-;;;;;;;;;;-1:-1:-1;16758:167:0;;;;;:::i;:::-;;:::i;9462:30::-;;;;;;;;;;;;;;;;11640:55;;;;;;;;;;;;;;;;16122:121;;;;;;;;;;-1:-1:-1;16122:121:0;;;;;:::i;:::-;;:::i;9260:42::-;;;;;;;;;;;;;;;;27296:677;;;;;;;;;;;;;:::i;26578:164::-;;;;;;;;;;-1:-1:-1;26578:164:0;;;;;:::i;:::-;;:::i;18699:1390::-;;;;;;;;;;-1:-1:-1;18699:1390:0;;;;;:::i;:::-;;:::i;16933:143::-;;;;;;;;;;-1:-1:-1;16933:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;17041:18:0;;;17014:7;17041:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;16933:143;9170:38;;;;;;;;;;-1:-1:-1;9170:38:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;20310:901::-;;;;;;;;;;-1:-1:-1;20310:901:0;;;;;:::i;:::-;;:::i;13188:106::-;;;;;;;;;;-1:-1:-1;13188:106:0;;;;;:::i;:::-;;:::i;13443:154::-;6989:6;;-1:-1:-1;;;;;6989:6:0;5374:10;6989:22;6981:67;;;;-1:-1:-1;;;6981:67:0;;;;;;;:::i;:::-;;;;;;;;;13534:2:::1;13527:3;:9;;;;13507:54;;;::::0;-1:-1:-1;;;13507:54:0;;10884:2:1;13507:54:0::1;::::0;::::1;10866:21:1::0;10923:2;10903:18;;;10896:30;-1:-1:-1;;;10942:18:1;;;10935:50;11002:18;;13507:54:0::1;10682:344:1::0;13507:54:0::1;13572:17;;:11;:17:::0;13443:154::o;22529:161::-;22604:4;22621:39;5374:10;22644:7;22653:6;22621:8;:39::i;:::-;-1:-1:-1;22678:4:0;22529:161;;;;;:::o;15202:123::-;15261:15;15296:13;15303:5;15296:6;:13::i;:::-;:21;;15289:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15202:123;;;:::o;16528:95::-;16581:7;11502:13;11449:1;11502:2;:13;:::i;:::-;11492:23;;:7;:23;:::i;:::-;16601:14;;16528:95;:::o;28374:186::-;28437:10;;-1:-1:-1;;;;;28437:10:0;5374;-1:-1:-1;;;;;28423:24:0;;28415:33;;;;;;28488:21;28520:32;28488:21;28520:12;:32::i;:::-;28404:156;28374:186::o;22698:313::-;22796:4;22813:36;22823:6;22831:9;22842:6;22813:9;:36::i;:::-;22860:121;22869:6;5374:10;22891:89;22929:6;22891:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;22891:19:0;;;;;;:11;:19;;;;;;;;5374:10;22891:33;;;;;;;;;;:37;:89::i;:::-;22860:8;:121::i;:::-;-1:-1:-1;22999:4:0;22698:313;;;;;:::o;26750:162::-;6989:6;;-1:-1:-1;;;;;6989:6:0;5374:10;6989:22;6981:67;;;;-1:-1:-1;;;6981:67:0;;;;;;;:::i;:::-;26823:6:::1;26818:87;26839:6;:13;26835:1;:17;26818:87;;;26890:5;26872:4;:15;26877:6;26884:1;26877:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;26872:15:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;26872:15:0;:23;;-1:-1:-1;;26872:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;26854:3:0::1;26818:87;;;;26750:162:::0;:::o;17499:998::-;17609:13;17667:1;17643:21;17653:10;17643:9;:21::i;:::-;:25;17635:81;;;;-1:-1:-1;;;17635:81:0;;13487:2:1;17635:81:0;;;13469:21:1;13526:2;13506:18;;;13499:30;13565:34;13545:18;;;13538:62;-1:-1:-1;;;13616:18:1;;;13609:41;13667:19;;17635:81:0;13285:407:1;17635:81:0;17747:21;;17735:8;:33;;17727:73;;;;-1:-1:-1;;;17727:73:0;;13899:2:1;17727:73:0;;;13881:21:1;13938:2;13918:18;;;13911:30;13977:29;13957:18;;;13950:57;14024:18;;17727:73:0;13697:351:1;17727:73:0;17843:2;17825:6;17819:20;:26;;17811:89;;;;-1:-1:-1;;;17811:89:0;;14255:2:1;17811:89:0;;;14237:21:1;14294:2;14274:18;;;14267:30;14333:34;14313:18;;;14306:62;-1:-1:-1;;;14384:18:1;;;14377:48;14442:19;;17811:89:0;14053:414:1;17811:89:0;17938:1;17919:8;:15;:20;;:58;;;;;17962:15;;17943:8;:15;:34;;17919:58;17911:105;;;;-1:-1:-1;;;17911:105:0;;14674:2:1;17911:105:0;;;14656:21:1;14713:2;14693:18;;;14686:30;14752:34;14732:18;;;14725:62;-1:-1:-1;;;14803:18:1;;;14796:32;14845:19;;17911:105:0;14472:398:1;17911:105:0;-1:-1:-1;18037:5:0;;18055:21;18079:23;18094:8;18079:12;:23;:::i;:::-;18115:14;;;;:7;:14;;;;;:39;;-1:-1:-1;;;;;;18115:39:0;18144:10;18115:39;;;18055:47;;-1:-1:-1;18115:39:0;18165:20;:29;18188:6;18165:20;:29;:::i;:::-;-1:-1:-1;18205:14:0;;;;:7;:14;;;;;;;;:28;;;:44;;;18260:33;;;;:22;;;;;:33;;;;:::i;:::-;-1:-1:-1;18329:1:0;18304:14;;;:7;:14;;;;;:22;;;:26;;;18341:21;;:29;;-1:-1:-1;;18341:29:0;;;;18391:10;;18341:29;;;;18391:10;;18341:29;;18391:10;:::i;:::-;;;;;;;;18438:5;18427:62;18445:10;18457:6;18465:8;18475:13;18427:62;;;;;;;;;:::i;:::-;;;;;;;;17624:873;17499:998;;;;;:::o;14626:117::-;14683:13;14716;14723:5;14716:6;:13::i;:::-;:19;;14709:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14626:117;;;:::o;14916:127::-;14981:7;15008:13;15015:5;15008:6;:13::i;:::-;:27;;;;14916:127;-1:-1:-1;;14916:127:0:o;15514:125::-;15570:16;15606:13;15613:5;15606:6;:13::i;:::-;:25;;15599:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15599:32:0;;;;;;;;;;;;;;;;;;;;;;15514:125;;;:::o;28018:348::-;28082:10;;-1:-1:-1;;;;;28082:10:0;5374;-1:-1:-1;;;;;28068:24:0;;28060:33;;;;;;28104:20;28125:24;28143:4;28125:9;:24::i;:::-;28104:45;-1:-1:-1;28163:14:0;;28160:73;;28191:30;28208:12;28191:16;:30::i;:::-;28262:21;28297:12;;28294:65;;28323:24;28336:10;28323:12;:24::i;26170:129::-;6989:6;;-1:-1:-1;;;;;6989:6:0;5374:10;6989:22;6981:67;;;;-1:-1:-1;;;6981:67:0;;;;;;;:::i;:::-;26251:7:::1;:14:::0;;;;26275:8:::1;:16:::0;26170:129::o;16631:119::-;-1:-1:-1;;;;;16724:18:0;16697:7;16724:18;;;:9;:18;;;;;;;16631:119::o;7076:148::-;6989:6;;-1:-1:-1;;;;;6989:6:0;5374:10;6989:22;6981:67;;;;-1:-1:-1;;;6981:67:0;;;;;;;:::i;:::-;7183:1:::1;7167:6:::0;;7146:40:::1;::::0;-1:-1:-1;;;;;7167:6:0;;::::1;::::0;7146:40:::1;::::0;7183:1;;7146:40:::1;7214:1;7197:19:::0;;-1:-1:-1;;;;;;7197:19:0::1;::::0;;7076:148::o;26311:159::-;6989:6;;-1:-1:-1;;;;;6989:6:0;5374:10;6989:22;6981:67;;;;-1:-1:-1;;;6981:67:0;;;;;;;:::i;:::-;11502:13:::1;11449:1;11502:2;:13;:::i;:::-;11492:23;::::0;:7:::1;:23;:::i;:::-;26364:12;:22:::0;11502:13:::1;11449:1;11502:2;:13;:::i;:::-;11492:23;::::0;:7:::1;:23;:::i;:::-;26397:14;:22:::0;26435:27:::1;11502:13;11449:1;11502:2;:13;:::i;:::-;11492:23;::::0;:7:::1;:23;:::i;:::-;26435:27;::::0;2961:25:1;;;2949:2;2934:18;26435:27:0::1;;;;;;;26311:159::o:0;14354:123::-;14417:7;14444:13;14451:5;14444:6;:13::i;:::-;:25;-1:-1:-1;;;;;14444:25:0;;14354:123;-1:-1:-1;;14354:123:0:o;15801:146::-;15881:7;15908:13;15915:5;15908:6;:13::i;:::-;-1:-1:-1;;;;;15908:31:0;;;;;;:23;;;;;:31;;;;;;;-1:-1:-1;15801:146:0;;;;:::o;12895:120::-;6989:6;;-1:-1:-1;;;;;6989:6:0;5374:10;6989:22;6981:67;;;;-1:-1:-1;;;6981:67:0;;;;;;;:::i;:::-;12975:21:::1;:32:::0;12895:120::o;16758:167::-;16836:4;16853:42;5374:10;16877:9;16888:6;16853:9;:42::i;16122:121::-;16187:7;16214:13;16221:5;16214:6;:13::i;:::-;:21;;;;16122:121;-1:-1:-1;;16122:121:0:o;27296:677::-;6989:6;;-1:-1:-1;;;;;6989:6:0;5374:10;6989:22;6981:67;;;;-1:-1:-1;;;6981:67:0;;;;;;;:::i;:::-;27358:11:::1;::::0;-1:-1:-1;;;27358:11:0;::::1;;;27357:12;27349:48;;;::::0;-1:-1:-1;;;27349:48:0;;17949:2:1;27349:48:0::1;::::0;::::1;17931:21:1::0;17988:2;17968:18;;;17961:30;18027:25;18007:18;;;18000:53;18070:18;;27349:48:0::1;17747:347:1::0;27349:48:0::1;27409:15;:80:::0;;-1:-1:-1;;;;;;27409:80:0::1;27446:42;27409:80:::0;;::::1;::::0;;;27500:58:::1;::::0;27517:4:::1;::::0;11502:13:::1;11449:1;11502:2;:13;:::i;:::-;11492:23;::::0;:7:::1;:23;:::i;27500:58::-;27603:15;;;;;;;;;-1:-1:-1::0;;;;;27603:15:0::1;-1:-1:-1::0;;;;;27603:23:0::1;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;27585:55:0::1;;27649:4;27656:15;;;;;;;;;-1:-1:-1::0;;;;;27656:15:0::1;-1:-1:-1::0;;;;;27656:20:0::1;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27585:94;::::0;-1:-1:-1;;;;;;27585:94:0::1;::::0;;;;;;-1:-1:-1;;;;;18547:32:1;;;27585:94:0::1;::::0;::::1;18529:51:1::0;18616:32;;18596:18;;;18589:60;18502:18;;27585:94:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;27569:13;:110:::0;;-1:-1:-1;;;;;;27569:110:0::1;-1:-1:-1::0;;;;;27569:110:0;;::::1;;::::0;;27690:15:::1;::::0;::::1;:31;27729:21;27760:4;27767:24;27760:4:::0;27767:9:::1;:24::i;:::-;27793:1;27796;27799:7;6900::::0;6927:6;-1:-1:-1;;;;;6927:6:0;;6862:79;27799:7:::1;27690:134;::::0;::::1;::::0;;;-1:-1:-1;;;;;;27690:134:0;;;-1:-1:-1;;;;;18981:32:1;;;27690:134:0::1;::::0;::::1;18963:51:1::0;19030:18;;;19023:34;;;;19073:18;;;19066:34;;;;19116:18;;;19109:34;19180:32;;;19159:19;;;19152:61;27808:15:0::1;19229:19:1::0;;;19222:35;18935:19;;27690:134:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;27842:13:0::1;::::0;27873:15:::1;::::0;27835:70:::1;::::0;-1:-1:-1;;;27835:70:0;;-1:-1:-1;;;;;27873:15:0;;::::1;27835:70;::::0;::::1;19903:51:1::0;-1:-1:-1;;19970:18:1;;;19963:34;27842:13:0;::::1;::::0;-1:-1:-1;27835:29:0::1;::::0;19876:18:1;;27835:70:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;27916:11:0::1;:18:::0;;-1:-1:-1;;;;27946:18:0;-1:-1:-1;;;27946:18:0;;;27296:677::o;26578:164::-;6989:6;;-1:-1:-1;;;;;6989:6:0;5374:10;6989:22;6981:67;;;;-1:-1:-1;;;6981:67:0;;;;;;;:::i;:::-;26652:6:::1;26647:88;26668:5;:12;26664:1;:16;26647:88;;;26719:4;26702;:14;26707:5;26713:1;26707:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;26702:14:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;26702:14:0;:21;;-1:-1:-1;;26702:21:0::1;::::0;::::1;;::::0;;;::::1;::::0;;-1:-1:-1;26682:3:0::1;26647:88;;18699:1390:::0;18768:23;18794:13;18801:5;18794:6;:13::i;:::-;18826:23;;18768:39;;-1:-1:-1;;;;;;18826:23:0;18853:10;18826:37;18818:81;;;;-1:-1:-1;;;18818:81:0;;20492:2:1;18818:81:0;;;20474:21:1;20531:2;20511:18;;;20504:30;20570:33;20550:18;;;20543:61;20621:18;;18818:81:0;20290:355:1;18818:81:0;18947:12;18918:11;:25;;;:41;;18910:87;;;;-1:-1:-1;;;18910:87:0;;20852:2:1;18910:87:0;;;20834:21:1;20891:2;20871:18;;;20864:30;20930:34;20910:18;;;20903:62;-1:-1:-1;;;20981:18:1;;;20974:31;21022:19;;18910:87:0;20650:397:1;18910:87:0;19017:18;;;;;;19016:19;19008:67;;;;-1:-1:-1;;;19008:67:0;;21254:2:1;19008:67:0;;;21236:21:1;21293:2;21273:18;;;21266:30;21332:34;21312:18;;;21305:62;-1:-1:-1;;;21383:18:1;;;21376:33;21426:19;;19008:67:0;21052:399:1;19008:67:0;19118:19;;;:26;19109:35;;19086:86;;;;-1:-1:-1;;;19086:86:0;;21658:2:1;19086:86:0;;;21640:21:1;21697:2;21677:18;;;21670:30;21736:25;21716:18;;;21709:53;21779:18;;19086:86:0;21456:347:1;19086:86:0;19188:23;;;:30;:34;19185:794;;19239:26;19268:39;19293:5;19300:6;19268:24;:39::i;:::-;19239:68;;19322:33;19419:3;19404:11;;19382;:19;;;:33;;;;:::i;:::-;19381:41;;;;:::i;:::-;19358:11;:19;;;:65;;;;:::i;:::-;19322:101;-1:-1:-1;19444:9:0;19440:528;19463:23;;;:30;19459:34;;19440:528;;;19519:14;19536:11;:23;;19560:1;19536:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;19536:26:0;19584:29;;;:21;;;:29;;;;;;;;19536:26;;-1:-1:-1;19584:39:0;;;19581:372;;-1:-1:-1;;;;;19689:30:0;;19648:38;19689:30;;;:22;;;:30;;;;;;19728:18;;19689:36;;19722:3;19689:36;:::i;:::-;:57;;;;:::i;:::-;19648:98;-1:-1:-1;19769:22:0;19857:3;19795:58;19648:98;19795:25;:58;:::i;:::-;19794:66;;;;:::i;:::-;19769:91;;19885:48;19903:4;19910:6;19918:14;19885:9;:48::i;:::-;19625:328;;19581:372;-1:-1:-1;19495:3:0;;19440:528;;;;19224:755;;19185:794;19991:18;;;:25;;-1:-1:-1;;19991:25:0;20012:4;19991:25;;;20049:23;;20032:49;;;-1:-1:-1;;;;;20049:23:0;;;19903:51:1;;19985:2;19970:18;;19963:34;;;20042:5:0;;20032:49;;19876:18:1;20032:49:0;;;;;;;18757:1332;18699:1390;;:::o;9170:38::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9170:38:0;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;9170:38:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;9170:38:0;;;:::o;20310:901::-;20431:1;20407:21;20417:10;20407:9;:21::i;:::-;:25;20399:80;;;;-1:-1:-1;;;20399:80:0;;22365:2:1;20399:80:0;;;22347:21:1;22404:2;22384:18;;;22377:30;22443:34;22423:18;;;22416:62;-1:-1:-1;;;22494:18:1;;;22487:40;22544:19;;20399:80:0;22163:406:1;20399:80:0;20492:23;20518:13;20525:5;20518:6;:13::i;:::-;20492:39;;20551:38;20571:5;20578:10;20551:19;:38::i;:::-;20550:39;20542:90;;;;-1:-1:-1;;;20542:90:0;;22776:2:1;20542:90:0;;;22758:21:1;22815:2;22795:18;;;22788:30;22854:34;22834:18;;;22827:62;-1:-1:-1;;;22905:18:1;;;22898:36;22951:19;;20542:90:0;22574:402:1;20542:90:0;20675:19;;;:26;20666:35;;20643:94;;;;-1:-1:-1;;;20643:94:0;;23183:2:1;20643:94:0;;;23165:21:1;23222:2;23202:18;;;23195:30;23261:33;23241:18;;;23234:61;23312:18;;20643:94:0;22981:355:1;20643:94:0;20770:21;20775:15;20770:1;:21;:::i;:::-;20756:35;;:10;:35;;20748:96;;;;-1:-1:-1;;;20748:96:0;;23773:2:1;20748:96:0;;;23755:21:1;23812:2;23792:18;;;23785:30;23851:34;23831:18;;;23824:62;-1:-1:-1;;;23902:18:1;;;23895:46;23958:19;;20748:96:0;23571:412:1;20748:96:0;20888:10;20863:21;20873:10;20863:9;:21::i;:::-;:35;;20855:81;;;;-1:-1:-1;;;20855:81:0;;24190:2:1;20855:81:0;;;24172:21:1;24229:2;24209:18;;;24202:30;24268:34;24248:18;;;24241:62;-1:-1:-1;;;24319:18:1;;;24312:31;24360:19;;20855:81:0;23988:397:1;20855:81:0;20949:23;;;:40;;;;;;;-1:-1:-1;20949:40:0;;;;;;;;;;;;-1:-1:-1;;;;;;20949:40:0;20978:10;20949:40;;;;;;21000:33;;:21;;;:33;;;;;;:42;;;21053:22;;;:34;;;;;:47;;;21111:19;;;:33;;21090:10;;-1:-1:-1;21111:33:0;;21090:10;;21111:33;:::i;:::-;;;;-1:-1:-1;21155:48:0;;-1:-1:-1;21165:10:0;21185:4;21192:10;21155:9;:48::i;:::-;20388:823;20310:901;;;:::o;13188:106::-;6989:6;;-1:-1:-1;;;;;6989:6:0;5374:10;6989:22;6981:67;;;;-1:-1:-1;;;6981:67:0;;;;;;;:::i;:::-;13261:15:::1;:25:::0;13188:106::o;23019:335::-;-1:-1:-1;;;;;23112:19:0;;23104:68;;;;-1:-1:-1;;;23104:68:0;;24592:2:1;23104:68:0;;;24574:21:1;24631:2;24611:18;;;24604:30;24670:34;24650:18;;;24643:62;-1:-1:-1;;;24721:18:1;;;24714:34;24765:19;;23104:68:0;24390:400:1;23104:68:0;-1:-1:-1;;;;;23191:21:0;;23183:68;;;;-1:-1:-1;;;23183:68:0;;24997:2:1;23183:68:0;;;24979:21:1;25036:2;25016:18;;;25009:30;25075:34;25055:18;;;25048:62;-1:-1:-1;;;25126:18:1;;;25119:32;25168:19;;23183:68:0;24795:398:1;23183:68:0;-1:-1:-1;;;;;23262:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;23314:32;;2961:25:1;;;23314:32:0;;2934:18:1;23314:32:0;;;;;;;23019:335;;;:::o;13936:242::-;13989:11;14039:14;;;:7;:14;;;;;14072:23;;-1:-1:-1;;;;;14072:23:0;14064:77;;;;-1:-1:-1;;;14064:77:0;;25400:2:1;14064:77:0;;;25382:21:1;25439:2;25419:18;;;25412:30;25478:29;25458:18;;;25451:57;25525:18;;14064:77:0;25198:351:1;26478:92:0;26535:10;;:27;;-1:-1:-1;;;;;26535:10:0;;;;:27;;;;;26555:6;;26535:10;:27;:10;:27;26555:6;26535:10;:27;;;;;;;;;;;;;;;;;;;23362:2201;-1:-1:-1;;;;;23450:18:0;;23442:68;;;;-1:-1:-1;;;23442:68:0;;25756:2:1;23442:68:0;;;25738:21:1;25795:2;25775:18;;;25768:30;25834:34;25814:18;;;25807:62;-1:-1:-1;;;25885:18:1;;;25878:35;25930:19;;23442:68:0;25554:401:1;23442:68:0;-1:-1:-1;;;;;23529:16:0;;23521:64;;;;-1:-1:-1;;;23521:64:0;;26162:2:1;23521:64:0;;;26144:21:1;26201:2;26181:18;;;26174:30;26240:34;26220:18;;;26213:62;-1:-1:-1;;;26291:18:1;;;26284:33;26334:19;;23521:64:0;25960:399:1;23521:64:0;23613:1;23604:6;:10;23596:64;;;;-1:-1:-1;;;23596:64:0;;26566:2:1;23596:64:0;;;26548:21:1;26605:2;26585:18;;;26578:30;26644:34;26624:18;;;26617:62;-1:-1:-1;;;26695:18:1;;;26688:39;26744:19;;23596:64:0;26364:405:1;23596:64:0;23671:17;6927:6;;-1:-1:-1;;;;;23705:15:0;;;6927:6;;23705:15;;;;:32;;-1:-1:-1;6900:7:0;6927:6;-1:-1:-1;;;;;23724:13:0;;;6927:6;;23724:13;;23705:32;23701:1506;;;-1:-1:-1;;;;;23763:10:0;;;;;;:4;:10;;;;;;;;23762:11;:24;;;;-1:-1:-1;;;;;;23778:8:0;;;;;;:4;:8;;;;;;;;23777:9;23762:24;23754:33;;;;;;23814:28;23838:3;23814:19;23825:7;;23814:6;:10;;:19;;;;:::i;:::-;:23;;:28::i;:::-;23802:40;;23874:9;;23887:1;23874:14;23871:93;;23920:28;23944:3;23920:19;23931:7;;23920:6;:10;;:19;;;;:::i;:28::-;23908:40;;23871:93;23990:13;;-1:-1:-1;;;;;23982:21:0;;;23990:13;;23982:21;:55;;;;-1:-1:-1;24021:15:0;;-1:-1:-1;;;;;24007:30:0;;;24021:15;;24007:30;;23982:55;:83;;;;-1:-1:-1;;;;;;24043:22:0;;;;;;:18;:22;;;;;;;;24041:24;23982:83;23978:313;;;24105:12;;24095:6;:22;;24087:60;;;;-1:-1:-1;;;24087:60:0;;26976:2:1;24087:60:0;;;26958:21:1;27015:2;26995:18;;;26988:30;27054:27;27034:18;;;27027:55;27099:18;;24087:60:0;26774:349:1;24087:60:0;24200:14;;24190:6;24174:13;24184:2;24174:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;24166:79;;;;-1:-1:-1;;;24166:79:0;;27330:2:1;24166:79:0;;;27312:21:1;27369:2;27349:18;;;27342:30;27408:28;27388:18;;;27381:56;27454:18;;24166:79:0;27128:350:1;24166:79:0;24264:9;:11;;;:9;:11;;;:::i;:::-;;;;;;23978:313;24316:13;;-1:-1:-1;;;;;24310:19:0;;;24316:13;;24310:19;:43;;;;-1:-1:-1;;;;;;24333:20:0;;24348:4;24333:20;;24310:43;24307:124;;;24386:29;24411:3;24386:20;24397:8;;24386:6;:10;;:20;;;;:::i;:29::-;24374:41;;24307:124;24447:28;24478:24;24496:4;24478:9;:24::i;:::-;24522:6;;24447:55;;-1:-1:-1;;;;24522:6:0;;;;24521:7;:30;;;;-1:-1:-1;24538:13:0;;-1:-1:-1;;;;;24532:19:0;;;24538:13;;24532:19;24521:30;:45;;;;-1:-1:-1;24555:11:0;;-1:-1:-1;;;24555:11:0;;;;24521:45;:89;;;;;24593:17;;24570:20;:40;24521:89;:123;;;;;24626:18;;24614:9;;:30;24521:123;24517:679;;;24684:13;;24669:12;:28;24665:90;;;24734:1;24722:9;:13;24665:90;24793:1;24781:9;;:13;24773:49;;;;-1:-1:-1;;;24773:49:0;;27825:2:1;24773:49:0;;;27807:21:1;27864:2;27844:18;;;27837:30;27903:25;27883:18;;;27876:53;27946:18;;24773:49:0;27623:347:1;24773:49:0;24841:69;24858:51;24862:6;24870:38;24874:20;24896:11;;24870:3;:38::i;:::-;24858:3;:51::i;:::-;24841:16;:69::i;:::-;24958:21;25002:22;;24998:106;;25049:35;25062:21;25049:12;:35::i;:::-;25122:9;:11;;;:9;:11;;;:::i;:::-;;;;-1:-1:-1;;25168:12:0;25152:13;:28;-1:-1:-1;24517:679:0;23739:1468;23701:1506;25222:11;;25219:161;;25290:4;25272:24;;;;:9;:24;;;;;;:39;;25301:9;25272:28;:39::i;:::-;25265:4;25247:24;;;;:9;:24;;;;;;;:64;;;;25329:39;;-1:-1:-1;;;;;25329:39:0;;;;;;;25358:9;2961:25:1;;2949:2;2934:18;;2815:177;25329:39:0;;;;;;;;25219:161;-1:-1:-1;;;;;25406:15:0;;;;;;:9;:15;;;;;;:27;;25426:6;25406:19;:27::i;:::-;-1:-1:-1;;;;;25390:15:0;;;;;;:9;:15;;;;;:43;25458:40;25476:21;:6;25487:9;25476:10;:21::i;:::-;-1:-1:-1;;;;;25458:13:0;;;;;;:9;:13;;;;;;;:17;:40::i;:::-;-1:-1:-1;;;;;25444:13:0;;;;;;;:9;:13;;;;;:54;;;;25514:41;;;25533:21;:6;25544:9;25533:10;:21::i;:::-;25514:41;;2961:25:1;;;2949:2;2934:18;25514:41:0;;;;;;;23431:2132;23362:2201;;;:::o;5754:190::-;5840:7;5876:12;5868:6;;;;5860:29;;;;-1:-1:-1;;;5860:29:0;;;;;;;;:::i;:::-;-1:-1:-1;5900:9:0;5912:5;5916:1;5912;:5;:::i;:::-;5900:17;5754:190;-1:-1:-1;;;;;5754:190:0:o;25679:483::-;12113:6;:13;;-1:-1:-1;;;;12113:13:0;-1:-1:-1;;;12113:13:0;;;25781:16:::1;::::0;;25795:1:::1;25781:16:::0;;;;;::::1;::::0;;-1:-1:-1;;25781:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;25781:16:0::1;25757:40;;25826:4;25808;25813:1;25808:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25808:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;25852:15:::1;::::0;:22:::1;::::0;;-1:-1:-1;;;25852:22:0;;;;:15;;;::::1;::::0;:20:::1;::::0;:22:::1;::::0;;::::1;::::0;25808:7;;25852:22;;;;;:15;:22:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25842:4;25847:1;25842:7;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25842:32:0;;::::1;:7;::::0;;::::1;::::0;;;;;:32;25917:15:::1;::::0;25885:62:::1;::::0;25902:4:::1;::::0;25917:15:::1;25935:11:::0;25885:8:::1;:62::i;:::-;25958:15;::::0;:196:::1;::::0;-1:-1:-1;;;25958:196:0;;-1:-1:-1;;;;;25958:15:0;;::::1;::::0;:66:::1;::::0;:196:::1;::::0;26039:11;;25958:15:::1;::::0;26081:4;;26108::::1;::::0;26128:15:::1;::::0;25958:196:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;12149:6:0;:14;;-1:-1:-1;;;;12149:14:0;;;-1:-1:-1;;;;25679:483:0:o;21463:440::-;21549:15;;21625:13;21632:5;21625:6;:13::i;:::-;21599:39;-1:-1:-1;21653:9:0;21649:247;21672:23;;;:30;21668:34;;21649:247;;;21724:14;21741:11;:23;;21765:1;21741:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21741:26:0;21785:29;;;:21;;;:29;;;;;;;;21741:26;;-1:-1:-1;21785:39:0;;;21782:102;;-1:-1:-1;;;;;21854:30:0;;;;;;:22;;;:30;;;;;;21843:41;;;;:::i;:::-;;;21782:102;-1:-1:-1;21704:3:0;;21649:247;;;;21566:337;21463:440;;;;:::o;22187:334::-;22268:4;22285:23;22311:13;22318:5;22311:6;:13::i;:::-;22285:39;-1:-1:-1;22339:9:0;22335:156;22358:23;;;:30;22354:34;;22335:156;;;22443:6;-1:-1:-1;;;;;22413:36:0;:11;:23;;22437:1;22413:26;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;22413:26:0;:36;22410:69;;22475:4;22468:11;;;;;;22410:69;22390:3;;22335:156;;;-1:-1:-1;22508:5:0;;22187:334;-1:-1:-1;;;;22187:334:0:o;5952:246::-;6010:7;6034:1;6039;6034:6;6030:47;;-1:-1:-1;6064:1:0;6057:8;;6030:47;6087:9;6099:5;6103:1;6099;:5;:::i;:::-;6087:17;-1:-1:-1;6132:1:0;6123:5;6127:1;6087:17;6123:5;:::i;:::-;:10;6115:56;;;;-1:-1:-1;;;6115:56:0;;28764:2:1;6115:56:0;;;28746:21:1;28803:2;28783:18;;;28776:30;28842:34;28822:18;;;28815:62;-1:-1:-1;;;28893:18:1;;;28886:31;28934:19;;6115:56:0;28562:397:1;6115:56:0;6189:1;5952:246;-1:-1:-1;;;5952:246:0:o;6206:132::-;6264:7;6291:39;6295:1;6298;6291:39;;;;;;;;;;;;;;;;;:3;:39::i;25573:98::-;25630:7;25657:1;25655;:3;25654:9;;25662:1;25654:9;;;-1:-1:-1;25660:1:0;25573:98;-1:-1:-1;25573:98:0:o;5423:179::-;5481:7;;5513:5;5517:1;5513;:5;:::i;:::-;5501:17;;5542:1;5537;:6;;5529:46;;;;-1:-1:-1;;;5529:46:0;;29166:2:1;5529:46:0;;;29148:21:1;29205:2;29185:18;;;29178:30;29244:29;29224:18;;;29217:57;29291:18;;5529:46:0;28964:351:1;5610:136:0;5668:7;5695:43;5699:1;5702;5695:43;;;;;;;;;;;;;;;;;:3;:43::i;6346:189::-;6432:7;6467:12;6460:5;6452:28;;;;-1:-1:-1;;;6452:28:0;;;;;;;;:::i;:::-;-1:-1:-1;6491:9:0;6503:5;6507:1;6503;:5;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;222:269:1;279:6;332:2;320:9;311:7;307:23;303:32;300:52;;;348:1;345;338:12;300:52;387:9;374:23;437:4;430:5;426:16;419:5;416:27;406:55;;457:1;454;447:12;496:289;538:3;576:5;570:12;603:6;598:3;591:19;659:6;652:4;645:5;641:16;634:4;629:3;625:14;619:47;711:1;704:4;695:6;690:3;686:16;682:27;675:38;774:4;767:2;763:7;758:2;750:6;746:15;742:29;737:3;733:39;729:50;722:57;;;496:289;;;;:::o;790:220::-;939:2;928:9;921:21;902:4;959:45;1000:2;989:9;985:18;977:6;959:45;:::i;1015:131::-;-1:-1:-1;;;;;1090:31:1;;1080:42;;1070:70;;1136:1;1133;1126:12;1151:367;1219:6;1227;1280:2;1268:9;1259:7;1255:23;1251:32;1248:52;;;1296:1;1293;1286:12;1248:52;1335:9;1322:23;1354:31;1379:5;1354:31;:::i;:::-;1404:5;1482:2;1467:18;;;;1454:32;;-1:-1:-1;;;1151:367:1:o;1715:226::-;1774:6;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;-1:-1:-1;1888:23:1;;1715:226;-1:-1:-1;1715:226:1:o;1946:579::-;1998:3;2029;2061:5;2055:12;2088:6;2083:3;2076:19;2120:4;2115:3;2111:14;2104:21;;2178:4;2168:6;2165:1;2161:14;2154:5;2150:26;2146:37;2217:4;2210:5;2206:16;2240:1;2250:249;2264:6;2261:1;2258:13;2250:249;;;2351:2;2347:7;2339:5;2333:4;2329:16;2325:30;2320:3;2313:43;2377:38;2410:4;2401:6;2395:13;2377:38;:::i;:::-;2450:4;2475:14;;;;2369:46;;-1:-1:-1;2438:17:1;;;;;2286:1;2279:9;2250:249;;;-1:-1:-1;2515:4:1;;1946:579;-1:-1:-1;;;;;;1946:579:1:o;2530:280::-;2729:2;2718:9;2711:21;2692:4;2749:55;2800:2;2789:9;2785:18;2777:6;2749:55;:::i;2997:508::-;3074:6;3082;3090;3143:2;3131:9;3122:7;3118:23;3114:32;3111:52;;;3159:1;3156;3149:12;3111:52;3198:9;3185:23;3217:31;3242:5;3217:31;:::i;:::-;3267:5;-1:-1:-1;3324:2:1;3309:18;;3296:32;3337:33;3296:32;3337:33;:::i;:::-;2997:508;;3389:7;;-1:-1:-1;;;3469:2:1;3454:18;;;;3441:32;;2997:508::o;3699:127::-;3760:10;3755:3;3751:20;3748:1;3741:31;3791:4;3788:1;3781:15;3815:4;3812:1;3805:15;3831:275;3902:2;3896:9;3967:2;3948:13;;-1:-1:-1;;3944:27:1;3932:40;;4002:18;3987:34;;4023:22;;;3984:62;3981:88;;;4049:18;;:::i;:::-;4085:2;4078:22;3831:275;;-1:-1:-1;3831:275:1:o;4111:183::-;4171:4;4204:18;4196:6;4193:30;4190:56;;;4226:18;;:::i;:::-;-1:-1:-1;4271:1:1;4267:14;4283:4;4263:25;;4111:183::o;4299:961::-;4383:6;4436:2;4424:9;4415:7;4411:23;4407:32;4404:52;;;4452:1;4449;4442:12;4404:52;4492:9;4479:23;4525:18;4517:6;4514:30;4511:50;;;4557:1;4554;4547:12;4511:50;4580:22;;4633:4;4625:13;;4621:27;-1:-1:-1;4611:55:1;;4662:1;4659;4652:12;4611:55;4702:2;4689:16;4725:64;4741:47;4781:6;4741:47;:::i;:::-;4725:64;:::i;:::-;4811:3;4835:6;4830:3;4823:19;4867:2;4862:3;4858:12;4851:19;;4922:2;4912:6;4909:1;4905:14;4901:2;4897:23;4893:32;4879:46;;4948:7;4940:6;4937:19;4934:39;;;4969:1;4966;4959:12;4934:39;5001:2;4997;4993:11;4982:22;;5013:217;5029:6;5024:3;5021:15;5013:217;;;5109:3;5096:17;5126:31;5151:5;5126:31;:::i;:::-;5170:18;;5217:2;5046:12;;;;5208;;;;5013:217;;;5249:5;4299:961;-1:-1:-1;;;;;;4299:961:1:o;5265:559::-;5308:5;5361:3;5354:4;5346:6;5342:17;5338:27;5328:55;;5379:1;5376;5369:12;5328:55;5419:6;5406:20;5449:18;5441:6;5438:30;5435:56;;;5471:18;;:::i;:::-;5515:59;5562:2;5539:17;;-1:-1:-1;;5535:31:1;5568:4;5531:42;5515:59;:::i;:::-;5599:6;5590:7;5583:23;5653:3;5646:4;5637:6;5629;5625:19;5621:30;5618:39;5615:59;;;5670:1;5667;5660:12;5615:59;5735:6;5728:4;5720:6;5716:17;5709:4;5700:7;5696:18;5683:59;5791:1;5762:20;;;5784:4;5758:31;5751:42;;;;5766:7;5265:559;-1:-1:-1;;;5265:559:1:o;5829:1383::-;5951:6;5959;5967;6020:2;6008:9;5999:7;5995:23;5991:32;5988:52;;;6036:1;6033;6026:12;5988:52;6076:9;6063:23;6109:18;6101:6;6098:30;6095:50;;;6141:1;6138;6131:12;6095:50;6164;6206:7;6197:6;6186:9;6182:22;6164:50;:::i;:::-;6154:60;;;6267:2;6256:9;6252:18;6239:32;6296:18;6286:8;6283:32;6280:52;;;6328:1;6325;6318:12;6280:52;6351:24;;6406:4;6398:13;;6394:27;-1:-1:-1;6384:55:1;;6435:1;6432;6425:12;6384:55;6475:2;6462:16;6498:64;6514:47;6554:6;6514:47;:::i;6498:64::-;6584:3;6608:6;6603:3;6596:19;6640:2;6635:3;6631:12;6624:19;;6695:2;6685:6;6682:1;6678:14;6674:2;6670:23;6666:32;6652:46;;6721:7;6713:6;6710:19;6707:39;;;6742:1;6739;6732:12;6707:39;6774:2;6770;6766:11;6786:299;6802:6;6797:3;6794:15;6786:299;;;6888:3;6875:17;6924:18;6911:11;6908:35;6905:55;;;6956:1;6953;6946:12;6905:55;6985:57;7034:7;7029:2;7015:11;7011:2;7007:20;7003:29;6985:57;:::i;:::-;6973:70;;-1:-1:-1;7072:2:1;7063:12;;;;6819;6786:299;;;-1:-1:-1;5829:1383:1;;7104:5;;-1:-1:-1;;;;7178:2:1;7163:18;;;;7150:32;;-1:-1:-1;;5829:1383:1:o;7217:247::-;7276:6;7329:2;7317:9;7308:7;7304:23;7300:32;7297:52;;;7345:1;7342;7335:12;7297:52;7384:9;7371:23;7403:31;7428:5;7403:31;:::i;7469:446::-;7522:3;7560:5;7554:12;7587:6;7582:3;7575:19;7619:4;7614:3;7610:14;7603:21;;7658:4;7651:5;7647:16;7681:1;7691:199;7705:6;7702:1;7699:13;7691:199;;;7770:13;;-1:-1:-1;;;;;7766:39:1;7754:52;;7835:4;7826:14;;;;7863:17;;;;7802:1;7720:9;7691:199;;;-1:-1:-1;7906:3:1;;7469:446;-1:-1:-1;;;;7469:446:1:o;7920:261::-;8099:2;8088:9;8081:21;8062:4;8119:56;8171:2;8160:9;8156:18;8148:6;8119:56;:::i;8186:346::-;8254:6;8262;8315:2;8303:9;8294:7;8290:23;8286:32;8283:52;;;8331:1;8328;8321:12;8283:52;-1:-1:-1;;8376:23:1;;;8496:2;8481:18;;;8468:32;;-1:-1:-1;8186:346:1:o;8537:367::-;8605:6;8613;8666:2;8654:9;8645:7;8641:23;8637:32;8634:52;;;8682:1;8679;8672:12;8634:52;8727:23;;;-1:-1:-1;8826:2:1;8811:18;;8798:32;8839:33;8798:32;8839:33;:::i;:::-;8891:7;8881:17;;;8537:367;;;;;:::o;8909:388::-;8977:6;8985;9038:2;9026:9;9017:7;9013:23;9009:32;9006:52;;;9054:1;9051;9044:12;9006:52;9093:9;9080:23;9112:31;9137:5;9112:31;:::i;:::-;9162:5;-1:-1:-1;9219:2:1;9204:18;;9191:32;9232:33;9191:32;9232:33;:::i;9302:543::-;-1:-1:-1;;;;;9557:32:1;;9539:51;;9577:3;9621:2;9606:18;;9599:31;;;-1:-1:-1;;9647:46:1;;9673:19;;9665:6;9647:46;:::i;:::-;9724:2;9709:18;;9702:34;;;;-1:-1:-1;9767:2:1;9752:18;;9745:34;;;;9823:14;9816:22;9810:3;9795:19;;;9788:51;9639:54;9302:543;-1:-1:-1;;9302:543:1:o;9850:466::-;9927:6;9935;9943;9996:2;9984:9;9975:7;9971:23;9967:32;9964:52;;;10012:1;10009;10002:12;9964:52;-1:-1:-1;;10057:23:1;;;10177:2;10162:18;;10149:32;;-1:-1:-1;10280:2:1;10265:18;;;10252:32;;9850:466;-1:-1:-1;9850:466:1:o;10321:356::-;10523:2;10505:21;;;10542:18;;;10535:30;10601:34;10596:2;10581:18;;10574:62;10668:2;10653:18;;10321:356::o;11031:380::-;11110:1;11106:12;;;;11153;;;11174:61;;11228:4;11220:6;11216:17;11206:27;;11174:61;11281:2;11273:6;11270:14;11250:18;11247:38;11244:161;;11327:10;11322:3;11318:20;11315:1;11308:31;11362:4;11359:1;11352:15;11390:4;11387:1;11380:15;11416:127;11477:10;11472:3;11468:20;11465:1;11458:31;11508:4;11505:1;11498:15;11532:4;11529:1;11522:15;11548:375;11636:1;11654:5;11668:249;11689:1;11679:8;11676:15;11668:249;;;11739:4;11734:3;11730:14;11724:4;11721:24;11718:50;;;11748:18;;:::i;:::-;11798:1;11788:8;11784:16;11781:49;;;11812:16;;;;11781:49;11895:1;11891:16;;;;;11851:15;;11668:249;;;11548:375;;;;;;:::o;11928:902::-;11977:5;12007:8;11997:80;;-1:-1:-1;12048:1:1;12062:5;;11997:80;12096:4;12086:76;;-1:-1:-1;12133:1:1;12147:5;;12086:76;12178:4;12196:1;12191:59;;;;12264:1;12259:174;;;;12171:262;;12191:59;12221:1;12212:10;;12235:5;;;12259:174;12296:3;12286:8;12283:17;12280:43;;;12303:18;;:::i;:::-;-1:-1:-1;;12359:1:1;12345:16;;12418:5;;12171:262;;12517:2;12507:8;12504:16;12498:3;12492:4;12489:13;12485:36;12479:2;12469:8;12466:16;12461:2;12455:4;12452:12;12448:35;12445:77;12442:203;;;-1:-1:-1;12554:19:1;;;12630:5;;12442:203;12677:42;-1:-1:-1;;12702:8:1;12696:4;12677:42;:::i;:::-;12755:6;12751:1;12747:6;12743:19;12734:7;12731:32;12728:58;;;12766:18;;:::i;:::-;12804:20;;11928:902;-1:-1:-1;;;11928:902:1:o;12835:140::-;12893:5;12922:47;12963:4;12953:8;12949:19;12943:4;12922:47;:::i;12980:168::-;13053:9;;;13084;;13101:15;;;13095:22;;13081:37;13071:71;;13122:18;;:::i;13153:127::-;13214:10;13209:3;13205:20;13202:1;13195:31;13245:4;13242:1;13235:15;13269:4;13266:1;13259:15;14875:125;14940:9;;;14961:10;;;14958:36;;;14974:18;;:::i;15131:518::-;15233:2;15228:3;15225:11;15222:421;;;15269:5;15266:1;15259:16;15313:4;15310:1;15300:18;15383:2;15371:10;15367:19;15364:1;15360:27;15354:4;15350:38;15419:4;15407:10;15404:20;15401:47;;;-1:-1:-1;15442:4:1;15401:47;15497:2;15492:3;15488:12;15485:1;15481:20;15475:4;15471:31;15461:41;;15552:81;15570:2;15563:5;15560:13;15552:81;;;15629:1;15615:16;;15596:1;15585:13;15552:81;;;15556:3;;15222:421;15131:518;;;:::o;15825:1299::-;15951:3;15945:10;15978:18;15970:6;15967:30;15964:56;;;16000:18;;:::i;:::-;16029:97;16119:6;16079:38;16111:4;16105:11;16079:38;:::i;:::-;16073:4;16029:97;:::i;:::-;16175:4;16206:2;16195:14;;16223:1;16218:649;;;;16911:1;16928:6;16925:89;;;-1:-1:-1;16980:19:1;;;16974:26;16925:89;-1:-1:-1;;15782:1:1;15778:11;;;15774:24;15770:29;15760:40;15806:1;15802:11;;;15757:57;17027:81;;16188:930;;16218:649;15078:1;15071:14;;;15115:4;15102:18;;-1:-1:-1;;16254:20:1;;;16372:222;16386:7;16383:1;16380:14;16372:222;;;16468:19;;;16462:26;16447:42;;16575:4;16560:20;;;;16528:1;16516:14;;;;16402:12;16372:222;;;16376:3;16622:6;16613:7;16610:19;16607:201;;;16683:19;;;16677:26;-1:-1:-1;;16766:1:1;16762:14;;;16778:3;16758:24;16754:37;16750:42;16735:58;16720:74;;16607:201;-1:-1:-1;;;;16854:1:1;16838:14;;;16834:22;16821:36;;-1:-1:-1;15825:1299:1:o;17129:613::-;-1:-1:-1;;;;;17432:32:1;;17414:51;;17501:3;17496:2;17481:18;;17474:31;;;-1:-1:-1;;17528:46:1;;17554:19;;17546:6;17528:46;:::i;:::-;17622:9;17614:6;17610:22;17605:2;17594:9;17590:18;17583:50;17650:43;17686:6;17678;17650:43;:::i;:::-;17642:51;;;17729:6;17724:2;17713:9;17709:18;17702:34;17129:613;;;;;;;:::o;18099:251::-;18169:6;18222:2;18210:9;18201:7;18197:23;18193:32;18190:52;;;18238:1;18235;18228:12;18190:52;18270:9;18264:16;18289:31;18314:5;18289:31;:::i;19268:456::-;19356:6;19364;19372;19425:2;19413:9;19404:7;19400:23;19396:32;19393:52;;;19441:1;19438;19431:12;19393:52;-1:-1:-1;;19486:16:1;;19592:2;19577:18;;19571:25;19688:2;19673:18;;;19667:25;19486:16;;19571:25;;-1:-1:-1;19667:25:1;19268:456;-1:-1:-1;19268:456:1:o;20008:277::-;20075:6;20128:2;20116:9;20107:7;20103:23;20099:32;20096:52;;;20144:1;20141;20134:12;20096:52;20176:9;20170:16;20229:5;20222:13;20215:21;20208:5;20205:32;20195:60;;20251:1;20248;20241:12;21808:217;21848:1;21874;21864:132;;21918:10;21913:3;21909:20;21906:1;21899:31;21953:4;21950:1;21943:15;21981:4;21978:1;21971:15;21864:132;-1:-1:-1;22010:9:1;;21808:217::o;22030:128::-;22097:9;;;22118:11;;;22115:37;;;22132:18;;:::i;23341:225::-;23445:4;23424:12;;;23438;;;23420:31;23471:22;;;;23512:24;;;23502:58;;23540:18;;:::i;:::-;23502:58;23341:225;;;;:::o;27483:135::-;27522:3;27543:17;;;27540:43;;27563:18;;:::i;:::-;-1:-1:-1;27610:1:1;27599:13;;27483:135::o;27975:582::-;28274:6;28263:9;28256:25;28317:6;28312:2;28301:9;28297:18;28290:34;28360:3;28355:2;28344:9;28340:18;28333:31;28237:4;28381:57;28433:3;28422:9;28418:19;28410:6;28381:57;:::i;:::-;-1:-1:-1;;;;;28474:32:1;;;;28469:2;28454:18;;28447:60;-1:-1:-1;28538:3:1;28523:19;28516:35;28373:65;27975:582;-1:-1:-1;;;27975:582:1:o

Swarm Source

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