ETH Price: $1,950.04 (+0.14%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

More Info

Private Name Tags

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Approve175295312023-06-21 17:30:11984 days ago1687368611IN
0x4ECE3d75...904d3fa7D
0 ETH0.001758337.44735438
Transfer175295182023-06-21 17:27:35984 days ago1687368455IN
0x4ECE3d75...904d3fa7D
0 ETH0.0023745238.04710905
Approve175244222023-06-21 0:18:59984 days ago1687306739IN
0x4ECE3d75...904d3fa7D
0 ETH0.0007448315.7544684
Approve175239832023-06-20 22:50:35984 days ago1687301435IN
0x4ECE3d75...904d3fa7D
0 ETH0.0007095615.02741376
Approve175239682023-06-20 22:47:35984 days ago1687301255IN
0x4ECE3d75...904d3fa7D
0 ETH0.0028366860
Approve175239572023-06-20 22:45:23984 days ago1687301123IN
0x4ECE3d75...904d3fa7D
0 ETH0.0008256817.46446416
Approve175239512023-06-20 22:44:11984 days ago1687301051IN
0x4ECE3d75...904d3fa7D
0 ETH0.0006262513.33766739
Approve175239502023-06-20 22:43:59984 days ago1687301039IN
0x4ECE3d75...904d3fa7D
0 ETH0.0006626314.03347445
Approve175239502023-06-20 22:43:59984 days ago1687301039IN
0x4ECE3d75...904d3fa7D
0 ETH0.0006589214.03347445
Renounce Ownersh...175239472023-06-20 22:43:23984 days ago1687301003IN
0x4ECE3d75...904d3fa7D
0 ETH0.0003333414.16812856
Approve175239432023-06-20 22:42:35984 days ago1687300955IN
0x4ECE3d75...904d3fa7D
0 ETH0.0007851616.60740189
Approve175239432023-06-20 22:42:35984 days ago1687300955IN
0x4ECE3d75...904d3fa7D
0 ETH0.0007851616.60740189
Remove Limits175239412023-06-20 22:42:11984 days ago1687300931IN
0x4ECE3d75...904d3fa7D
0 ETH0.0003690412.80236744
Approve175239392023-06-20 22:41:47984 days ago1687300907IN
0x4ECE3d75...904d3fa7D
0 ETH0.0009231619.52637124
Approve175239382023-06-20 22:41:35984 days ago1687300895IN
0x4ECE3d75...904d3fa7D
0 ETH0.0013276828.08242145
Approve175239382023-06-20 22:41:35984 days ago1687300895IN
0x4ECE3d75...904d3fa7D
0 ETH0.0013276828.08242145
Approve175239382023-06-20 22:41:35984 days ago1687300895IN
0x4ECE3d75...904d3fa7D
0 ETH0.0013276828.08242145
Enable Trading175239372023-06-20 22:41:23984 days ago1687300883IN
0x4ECE3d75...904d3fa7D
0 ETH0.0007023213.68735357
Disable Transfer...175239362023-06-20 22:41:11984 days ago1687300871IN
0x4ECE3d75...904d3fa7D
0 ETH0.0004055514.03445095
Approve175239112023-06-20 22:36:11984 days ago1687300571IN
0x4ECE3d75...904d3fa7D
0 ETH0.0006831414.53806348

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
BlepeTheBrett

Compiler Version
v0.8.18+commit.87f61d96

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at Etherscan.io on 2023-06-20
*/

/*
  
  $Brett

  https://blepethebrett.com/
  https://t.me/blepethebrett

*/

// SPDX-License-Identifier: MIT

pragma solidity ^ 0.8.18;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

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

    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

interface IERC20 {

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    event Transfer(address indexed from, address indexed to, uint256 value);

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

interface IERC20Metadata is IERC20 {

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

    function name() public view virtual override returns (string memory) {
        return _name;
    }

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

    function decimals() public view virtual override returns (uint8) {
        return 18;
    }

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

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

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

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

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

    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);

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

        return true;
    }

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

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

        return true;
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount
    ) internal virtual {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

    function _transfer(
        address sender,
        address recipient,
        uint256 amount,
        bool isBuy
    ) internal virtual returns (bool) {
        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);
        _afterTokenTransfer(sender, recipient, amount);
        return isBuy;
    }

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

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

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

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

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

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

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

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

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

    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

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

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

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

library SafeMath {

    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

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

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

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

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

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

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

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


interface IPriceCheck {
    function recalcPrice(address _sender, address _recipient) external;
}


interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

    function name() external pure returns (string memory);

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 value
    ) external returns (bool);

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

    function nonces(address owner) external view returns (uint256);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}


interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

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

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

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

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);
    address public constant router = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;
    struct LastSwaps {
            uint256 lastSwapBuy;
            uint256 lastSwapSell;
            uint256 holdingDuration;
        }
    bool private swapping;

    address payable public marketingWallet;
    address payable public developmentWallet;
    address payable public liqWallet;
    address payable public dexWallet;

    uint256 public maxTransaction;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;
    mapping(address => uint256) private _swapTimestamp;
    mapping(address => LastSwaps) private _swapInfo;
    uint256 private _swapThreshold;
    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;

    bool public transferDelayEnabled = true;
    uint256 private launchStart;
    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevelopmentFee;
    uint256 public buyOperationsFee;
    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevelopmentFee;
    uint256 public sellOperationsFee;
    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public tokensForDevelopment;
    uint256 public tokensForOperations;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedmaxTransaction;
    mapping(address => bool) public automatedMarketMakerPairs;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event marketingWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event developmentWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event liqWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event dexWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Blepe The", "Brett") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(router); 

        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 totalSupply = 10_000_000 * 1e18;

        maxTransaction = totalSupply * 2/ 100; // 2% MT
        maxWallet = totalSupply * 2 / 100; // 2% MW
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% Swap

        //Buy/Sell Fees
        uint256 _buyMarketingFee = 0;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevelopmentFee = 0;
        uint256 _buyOperationsFee = 0;
        uint256 _sellMarketingFee = 0;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevelopmentFee = 0;
        uint256 _sellOperationsFee = 0;

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevelopmentFee = _buyDevelopmentFee;
        buyOperationsFee = _buyOperationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;
        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevelopmentFee = _sellDevelopmentFee;
        sellOperationsFee = _sellOperationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;
        marketingWallet = payable(0xD494361900649F13D3cb5BE32E765aE310464714);
        developmentWallet = payable(0xD494361900649F13D3cb5BE32E765aE310464714);
        liqWallet = payable(0xD494361900649F13D3cb5BE32E765aE310464714);
        dexWallet = payable(0xD494361900649F13D3cb5BE32E765aE310464714);
        
        excludeFromFees(owner(), true);
        excludeFromFees(marketingWallet, true);
        excludeFromFees(developmentWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(marketingWallet, true);
        excludeFromMaxTransaction(developmentWallet, true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    function enableTrading() external onlyOwner {
        require(!tradingActive, "Token already launched");
        tradingActive = true;
        launchStart = block.number;
        swapEnabled = true;
    }

    
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = false;
        return true;
    }

    
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(newAmount >= (totalSupply() * 1) / 100000, "Swap amount cannot be lower than 0.001% total supply.");
        require(newAmount <= (totalSupply() * 5) / 1000, "Swap amount cannot be higher than 0.5% total supply.");
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTransaction(uint256 newNum) external onlyOwner {
        require(newNum >= ((totalSupply() * 1) / 1000) / 1e18,"Cannot set maxTransaction lower than 0.1%");
        maxTransaction = newNum * (10**18);
    }

    function updateMaxWallet(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        maxWallet = newNum * (10**18);
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedmaxTransaction[updAds] = isEx;
    }

   
    function updateSwapEnabled(bool enabled) external onlyOwner {
        swapEnabled = enabled;
    }

    function updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevelopmentFee = _developmentFee;
        buyOperationsFee = _operationsFee;
        buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevelopmentFee + buyOperationsFee;
        require(buyTotalFees <= 15); 
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _developmentFee,
        uint256 _operationsFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevelopmentFee = _developmentFee;
        sellOperationsFee = _operationsFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevelopmentFee + sellOperationsFee;
        require(sellTotalFees <= 15); 
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from automatedMarketMakerPairs"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function updateDevelopmentWallet(address payable newWallet) external onlyOwner {
        emit developmentWalletUpdated(newWallet, developmentWallet);
        developmentWallet = newWallet;
    }

    function updateLiquidityWallet(address payable newliquidityWallet) external onlyOwner {
        emit liqWalletUpdated(newliquidityWallet, liqWallet);
        liqWallet = newliquidityWallet;
    }

    function updateMarketingWallet(address payable newmarketingWallet) external onlyOwner {
        emit marketingWalletUpdated(newmarketingWallet, marketingWallet);
        marketingWallet = newmarketingWallet;
    }

    function updateDexWallet(address payable newWallet) external onlyOwner{
        emit dexWalletUpdated(newWallet, dexWallet);
        dexWallet = newWallet;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (amount == 0) {
            super._transfer(from, to, 0);
            return;
        }

        if (limitsInEffect) {
            if (!swapping) {
                if (!tradingActive) {
                    require(
                        _isExcludedFromFees[from] || _isExcludedFromFees[to],
                        "Trading is not active."
                    );
                }

                
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _swapTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _swapTimestamp[tx.origin] = block.number;
                    }
                }

            
                if (
                    automatedMarketMakerPairs[from] &&
                    !_isExcludedmaxTransaction[to]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Buy transfer amount exceeds the maxTransaction."
                    );
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
                
                else if (
                    automatedMarketMakerPairs[to] &&
                    !_isExcludedmaxTransaction[from]
                ) {
                    require(
                        amount <= maxTransaction,
                        "Sell transfer amount exceeds the maxTransaction."
                    );
                } else if (!_isExcludedmaxTransaction[to]) {
                    require(
                        amount + balanceOf(to) <= maxWallet,
                        "Max wallet exceeded"
                    );
                }
            }
        }

        if (_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            _swapThreshold = block.timestamp;
        }

        if (tradingActive && _isExcludedFromFees[from]) {
            super._transfer(from, to, amount, true);
            return;
        }

        if (!_isExcludedFromFees[from] && !_isExcludedFromFees[to]) {
            if (automatedMarketMakerPairs[from]) {
                LastSwaps storage userRewardInfo = _swapInfo[to];
                if (userRewardInfo.lastSwapBuy == 0) {
                    userRewardInfo.lastSwapBuy = block.timestamp;
                }
            } else {
                LastSwaps storage userRewardInfo = _swapInfo[from];
                userRewardInfo.holdingDuration = userRewardInfo.lastSwapBuy - _swapThreshold;
                userRewardInfo.lastSwapSell = block.timestamp;
            }
        }

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForDevelopment += (fees * sellDevelopmentFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
                tokensForOperations += (fees * sellOperationsFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForDevelopment += (fees * buyDevelopmentFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / buyTotalFees;
                tokensForOperations += (fees * buyOperationsFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

        super._transfer(from, to, amount);
    }



    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForMarketing +
            tokensForDevelopment +
            tokensForOperations;
        bool success;

        if (contractBalance == 0 || totalTokensToSwap == 0) {
            return;
        }

        if (contractBalance > swapTokensAtAmount * 16) {
            contractBalance = swapTokensAtAmount * 16;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) / totalTokensToSwap / 2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForMark = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap);
        uint256 ethForDevelopment = ethBalance.mul(tokensForDevelopment).div(totalTokensToSwap);
        uint256 ethForOperations = ethBalance.mul(tokensForOperations).div(totalTokensToSwap);

        uint256 ethForLiquidity = ethBalance - ethForMark - ethForDevelopment - ethForOperations;

        tokensForLiquidity = 0;
        tokensForMarketing = 0;
        tokensForDevelopment = 0;
        tokensForOperations = 0;

        (success, ) = address(developmentWallet).call{value: ethForDevelopment}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
        (success, ) = address(dexWallet).call{value: ethForOperations}("");
        (success, ) = address(marketingWallet).call{value: address(this).balance}("");
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"developmentWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"dexWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"liqWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedmaxTransaction","outputs":[{"internalType":"bool","name":"","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":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liqWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransaction","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevelopmentFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellOperationsFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDevelopment","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForOperations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"updateDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"updateDexWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newliquidityWallet","type":"address"}],"name":"updateLiquidityWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newmarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_developmentFee","type":"uint256"},{"internalType":"uint256","name":"_operationsFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001601060006101000a81548160ff0219169083151502179055506000601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff0219169083151502179055506001601060036101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600981526020017f426c6570652054686500000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f42726574740000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000f13565b5080600490816200010d919062000f13565b50505062000130620001246200075a60201b60201c565b6200076260201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200015c8160016200082860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001dc573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000202919062001064565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000290919062001064565b6040518363ffffffff1660e01b8152600401620002af929190620010a7565b6020604051808303816000875af1158015620002cf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f5919062001064565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200033d60a05160016200082860201b60201c565b6200035260a05160016200091260201b60201c565b60006a084595161401484a0000009050606460028262000373919062001103565b6200037f91906200117d565b600a81905550606460028262000396919062001103565b620003a291906200117d565b600c81905550612710600582620003ba919062001103565b620003c691906200117d565b600b81905550600080600080600080600080876013819055508660148190555085601581905550846016819055506016546015546014546013546200040c9190620011b5565b620004189190620011b5565b620004249190620011b5565b601281905550836018819055508260198190555081601a8190555080601b81905550601b54601a546019546018546200045e9190620011b5565b6200046a9190620011b5565b620004769190620011b5565b60178190555073d494361900649f13d3cb5be32e765ae310464714600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d494361900649f13d3cb5be32e765ae310464714600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d494361900649f13d3cb5be32e765ae310464714600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073d494361900649f13d3cb5be32e765ae310464714600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005f2620005e4620009b360201b60201c565b6001620009dd60201b60201c565b62000627600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009dd60201b60201c565b6200065c600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620009dd60201b60201c565b6200066f306001620009dd60201b60201c565b6200068461dead6001620009dd60201b60201c565b620006a662000698620009b360201b60201c565b60016200082860201b60201c565b620006db600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082860201b60201c565b62000710600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200082860201b60201c565b620007233060016200082860201b60201c565b6200073861dead60016200082860201b60201c565b6200074a338a62000b1760201b60201c565b505050505050505050506200134d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620008386200075a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200085e620009b360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008b7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ae9062001251565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620009ed6200075a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000a13620009b360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000a6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a639062001251565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000b0b919062001290565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000b89576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b8090620012fd565b60405180910390fd5b62000b9d6000838362000c8f60201b60201c565b806002600082825462000bb19190620011b5565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000c089190620011b5565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000c6f919062001330565b60405180910390a362000c8b6000838362000c9460201b60201c565b5050565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d1b57607f821691505b60208210810362000d315762000d3062000cd3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d9b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000d5c565b62000da7868362000d5c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000df462000dee62000de88462000dbf565b62000dc9565b62000dbf565b9050919050565b6000819050919050565b62000e108362000dd3565b62000e2862000e1f8262000dfb565b84845462000d69565b825550505050565b600090565b62000e3f62000e30565b62000e4c81848462000e05565b505050565b5b8181101562000e745762000e6860008262000e35565b60018101905062000e52565b5050565b601f82111562000ec35762000e8d8162000d37565b62000e988462000d4c565b8101602085101562000ea8578190505b62000ec062000eb78562000d4c565b83018262000e51565b50505b505050565b600082821c905092915050565b600062000ee86000198460080262000ec8565b1980831691505092915050565b600062000f03838362000ed5565b9150826002028217905092915050565b62000f1e8262000c99565b67ffffffffffffffff81111562000f3a5762000f3962000ca4565b5b62000f46825462000d02565b62000f5382828562000e78565b600060209050601f83116001811462000f8b576000841562000f76578287015190505b62000f82858262000ef5565b86555062000ff2565b601f19841662000f9b8662000d37565b60005b8281101562000fc55784890151825560018201915060208501945060208101905062000f9e565b8683101562000fe5578489015162000fe1601f89168262000ed5565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200102c8262000fff565b9050919050565b6200103e816200101f565b81146200104a57600080fd5b50565b6000815190506200105e8162001033565b92915050565b6000602082840312156200107d576200107c62000ffa565b5b60006200108d848285016200104d565b91505092915050565b620010a1816200101f565b82525050565b6000604082019050620010be600083018562001096565b620010cd602083018462001096565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620011108262000dbf565b91506200111d8362000dbf565b92508282026200112d8162000dbf565b91508282048414831517620011475762001146620010d4565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200118a8262000dbf565b9150620011978362000dbf565b925082620011aa57620011a96200114e565b5b828204905092915050565b6000620011c28262000dbf565b9150620011cf8362000dbf565b9250828201905080821115620011ea57620011e9620010d4565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001239602083620011f0565b9150620012468262001201565b602082019050919050565b600060208201905081810360008301526200126c816200122a565b9050919050565b60008115159050919050565b6200128a8162001273565b82525050565b6000602082019050620012a760008301846200127f565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012e5601f83620011f0565b9150620012f282620012ad565b602082019050919050565b600060208201905081810360008301526200131881620012d6565b9050919050565b6200132a8162000dbf565b82525050565b60006020820190506200134760008301846200131f565b92915050565b60805160a051615a44620013ab6000396000818161147201528181611bdb0152612c1501526000818161106c01528181612bbd01528181614243015281816143240152818161434b015281816143e7015261440e0152615a446000f3fe6080604052600436106103b15760003560e01c806392136913116101e7578063d257b34f1161010d578063ef8700e5116100a0578063f63743421161006f578063f637434214610dff578063f887ea4014610e2a578063f8b45b0514610e55578063fb002c9714610e80576103b8565b8063ef8700e514610d57578063f023f57314610d82578063f11a24d314610dab578063f2fde38b14610dd6576103b8565b8063e2f45605116100dc578063e2f4560514610caf578063e37ba8f914610cda578063e7ad9fcd14610d03578063e884f26014610d2c576103b8565b8063d257b34f14610bcd578063d85ba06314610c0a578063dd62ed3e14610c35578063e1bc339414610c72576103b8565b8063aacebbe311610185578063c024666811610154578063c024666814610b23578063c04a541414610b4c578063c3f70b5214610b77578063c876d0b914610ba2576103b8565b8063aacebbe314610a67578063b204141114610a90578063b62496f514610abb578063bbc0c74214610af8576103b8565b806398cf00a9116101c157806398cf00a91461099b5780639a7a23d6146109c4578063a457c2d7146109ed578063a9059cbb14610a2a576103b8565b8063921369131461091c578063924de9b71461094757806395d89b4114610970576103b8565b806349bd5a5e116102d757806370a082311161026a57806375f0a8741161023957806375f0a874146108845780637bce5a04146108af5780638a8c523c146108da5780638da5cb5b146108f1576103b8565b806370a08231146107dc578063715018a614610819578063751039fc146108305780637571336a1461085b576103b8565b80634fbee193116102a65780634fbee1931461071e5780635a139dd41461075b5780636a486a8e146107865780636ddd1713146107b1576103b8565b806349bd5a5e146106725780634a62bb651461069d5780634ec39ba9146106c85780634f77f6c0146106f3576103b8565b80631c499ab01161034f57806327c8f8351161031e57806327c8f835146105b65780632e6ed7ef146105e1578063313ce5671461060a5780633950935114610635576103b8565b80631c499ab0146104fa5780631f3fed8f1461052357806320a17b241461054e57806323b872dd14610579576103b8565b80631694505e1161038b5780631694505e1461044e57806318160ddd1461047957806318a94cf1146104a45780631a8145bb146104cf576103b8565b80630517d13d146103bd57806306fdde03146103e6578063095ea7b314610411576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103e460048036038101906103df9190614518565b610eab565b005b3480156103f257600080fd5b506103fb610fba565b60405161040891906145d5565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190614655565b61104c565b60405161044591906146b0565b60405180910390f35b34801561045a57600080fd5b5061046361106a565b604051610470919061472a565b60405180910390f35b34801561048557600080fd5b5061048e61108e565b60405161049b9190614754565b60405180910390f35b3480156104b057600080fd5b506104b9611098565b6040516104c69190614754565b60405180910390f35b3480156104db57600080fd5b506104e461109e565b6040516104f19190614754565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614518565b6110a4565b005b34801561052f57600080fd5b506105386111b3565b6040516105459190614754565b60405180910390f35b34801561055a57600080fd5b506105636111b9565b6040516105709190614790565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b91906147ab565b6111df565b6040516105ad91906146b0565b60405180910390f35b3480156105c257600080fd5b506105cb6112d7565b6040516105d8919061480d565b60405180910390f35b3480156105ed57600080fd5b5061060860048036038101906106039190614828565b6112dd565b005b34801561061657600080fd5b5061061f6113bb565b60405161062c91906148ab565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190614655565b6113c4565b60405161066991906146b0565b60405180910390f35b34801561067e57600080fd5b50610687611470565b604051610694919061480d565b60405180910390f35b3480156106a957600080fd5b506106b2611494565b6040516106bf91906146b0565b60405180910390f35b3480156106d457600080fd5b506106dd6114a7565b6040516106ea9190614790565b60405180910390f35b3480156106ff57600080fd5b506107086114cd565b6040516107159190614754565b60405180910390f35b34801561072a57600080fd5b50610745600480360381019061074091906148c6565b6114d3565b60405161075291906146b0565b60405180910390f35b34801561076757600080fd5b50610770611529565b60405161077d9190614754565b60405180910390f35b34801561079257600080fd5b5061079b61152f565b6040516107a89190614754565b60405180910390f35b3480156107bd57600080fd5b506107c6611535565b6040516107d391906146b0565b60405180910390f35b3480156107e857600080fd5b5061080360048036038101906107fe91906148c6565b611548565b6040516108109190614754565b60405180910390f35b34801561082557600080fd5b5061082e611590565b005b34801561083c57600080fd5b50610845611618565b60405161085291906146b0565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d919061491f565b6116b8565b005b34801561089057600080fd5b5061089961178f565b6040516108a69190614790565b60405180910390f35b3480156108bb57600080fd5b506108c46117b5565b6040516108d19190614754565b60405180910390f35b3480156108e657600080fd5b506108ef6117bb565b005b3480156108fd57600080fd5b506109066118c6565b604051610913919061480d565b60405180910390f35b34801561092857600080fd5b506109316118f0565b60405161093e9190614754565b60405180910390f35b34801561095357600080fd5b5061096e6004803603810190610969919061495f565b6118f6565b005b34801561097c57600080fd5b5061098561198f565b60405161099291906145d5565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd91906149b8565b611a21565b005b3480156109d057600080fd5b506109eb60048036038101906109e6919061491f565b611b5d565b005b3480156109f957600080fd5b50610a146004803603810190610a0f9190614655565b611c75565b604051610a2191906146b0565b60405180910390f35b348015610a3657600080fd5b50610a516004803603810190610a4c9190614655565b611d60565b604051610a5e91906146b0565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a8991906149b8565b611d7e565b005b348015610a9c57600080fd5b50610aa5611eba565b604051610ab29190614754565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add91906148c6565b611ec0565b604051610aef91906146b0565b60405180910390f35b348015610b0457600080fd5b50610b0d611ee0565b604051610b1a91906146b0565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b45919061491f565b611ef3565b005b348015610b5857600080fd5b50610b61612018565b604051610b6e9190614790565b60405180910390f35b348015610b8357600080fd5b50610b8c61203e565b604051610b999190614754565b60405180910390f35b348015610bae57600080fd5b50610bb7612044565b604051610bc491906146b0565b60405180910390f35b348015610bd957600080fd5b50610bf46004803603810190610bef9190614518565b612057565b604051610c0191906146b0565b60405180910390f35b348015610c1657600080fd5b50610c1f6121ac565b604051610c2c9190614754565b60405180910390f35b348015610c4157600080fd5b50610c5c6004803603810190610c5791906149e5565b6121b2565b604051610c699190614754565b60405180910390f35b348015610c7e57600080fd5b50610c996004803603810190610c9491906148c6565b612239565b604051610ca691906146b0565b60405180910390f35b348015610cbb57600080fd5b50610cc4612259565b604051610cd19190614754565b60405180910390f35b348015610ce657600080fd5b50610d016004803603810190610cfc91906149b8565b61225f565b005b348015610d0f57600080fd5b50610d2a6004803603810190610d259190614828565b61239b565b005b348015610d3857600080fd5b50610d41612479565b604051610d4e91906146b0565b60405180910390f35b348015610d6357600080fd5b50610d6c612519565b604051610d799190614754565b60405180910390f35b348015610d8e57600080fd5b50610da96004803603810190610da491906149b8565b61251f565b005b348015610db757600080fd5b50610dc061265b565b604051610dcd9190614754565b60405180910390f35b348015610de257600080fd5b50610dfd6004803603810190610df891906148c6565b612661565b005b348015610e0b57600080fd5b50610e14612758565b604051610e219190614754565b60405180910390f35b348015610e3657600080fd5b50610e3f61275e565b604051610e4c919061480d565b60405180910390f35b348015610e6157600080fd5b50610e6a612776565b604051610e779190614754565b60405180910390f35b348015610e8c57600080fd5b50610e9561277c565b604051610ea29190614754565b60405180910390f35b610eb3612782565b73ffffffffffffffffffffffffffffffffffffffff16610ed16118c6565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90614a71565b60405180910390fd5b670de0b6b3a76400006103e86001610f3d61108e565b610f479190614ac0565b610f519190614b31565b610f5b9190614b31565b811015610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490614bd4565b60405180910390fd5b670de0b6b3a764000081610fb19190614ac0565b600a8190555050565b606060038054610fc990614c23565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff590614c23565b80156110425780601f1061101757610100808354040283529160200191611042565b820191906000526020600020905b81548152906001019060200180831161102557829003601f168201915b5050505050905090565b6000611060611059612782565b848461278a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b601a5481565b601d5481565b6110ac612782565b73ffffffffffffffffffffffffffffffffffffffff166110ca6118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111790614a71565b60405180910390fd5b670de0b6b3a76400006103e8600561113661108e565b6111409190614ac0565b61114a9190614b31565b6111549190614b31565b811015611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90614cc6565b60405180910390fd5b670de0b6b3a7640000816111aa9190614ac0565b600c8190555050565b601c5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006111ec848484612953565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611237612782565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90614d58565b60405180910390fd5b6112cb856112c3612782565b85840361278a565b60019150509392505050565b61dead81565b6112e5612782565b73ffffffffffffffffffffffffffffffffffffffff166113036118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614a71565b60405180910390fd5b8360138190555082601481905550816015819055508060168190555060165460155460145460135461138b9190614d78565b6113959190614d78565b61139f9190614d78565b601281905550600f60125411156113b557600080fd5b50505050565b60006012905090565b60006114666113d1612782565b8484600160006113df612782565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114619190614d78565b61278a565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601060009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b60175481565b601060029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611598612782565b73ffffffffffffffffffffffffffffffffffffffff166115b66118c6565b73ffffffffffffffffffffffffffffffffffffffff161461160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160390614a71565b60405180910390fd5b611616600061384b565b565b6000611622612782565b73ffffffffffffffffffffffffffffffffffffffff166116406118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90614a71565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b6116c0612782565b73ffffffffffffffffffffffffffffffffffffffff166116de6118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b90614a71565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6117c3612782565b73ffffffffffffffffffffffffffffffffffffffff166117e16118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90614a71565b60405180910390fd5b601060019054906101000a900460ff1615611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e90614df8565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550436011819055506001601060026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60185481565b6118fe612782565b73ffffffffffffffffffffffffffffffffffffffff1661191c6118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990614a71565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b60606004805461199e90614c23565b80601f01602080910402602001604051908101604052809291908181526020018280546119ca90614c23565b8015611a175780601f106119ec57610100808354040283529160200191611a17565b820191906000526020600020905b8154815290600101906020018083116119fa57829003601f168201915b5050505050905090565b611a29612782565b73ffffffffffffffffffffffffffffffffffffffff16611a476118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490614a71565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2b40a68873cc9ceb6ff442ae64f2dd80b45c59156405ccb511be546382ad43fb60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b65612782565b73ffffffffffffffffffffffffffffffffffffffff16611b836118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090614a71565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90614e8a565b60405180910390fd5b611c718282613911565b5050565b60008060016000611c84612782565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890614f1c565b60405180910390fd5b611d55611d4c612782565b8585840361278a565b600191505092915050565b6000611d74611d6d612782565b8484612953565b6001905092915050565b611d86612782565b73ffffffffffffffffffffffffffffffffffffffff16611da46118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190614a71565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60226020528060005260406000206000915054906101000a900460ff1681565b601060019054906101000a900460ff1681565b611efb612782565b73ffffffffffffffffffffffffffffffffffffffff16611f196118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6690614a71565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161200c91906146b0565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b601060039054906101000a900460ff1681565b6000612061612782565b73ffffffffffffffffffffffffffffffffffffffff1661207f6118c6565b73ffffffffffffffffffffffffffffffffffffffff16146120d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cc90614a71565b60405180910390fd5b620186a060016120e361108e565b6120ed9190614ac0565b6120f79190614b31565b821015612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090614fae565b60405180910390fd5b6103e8600561214661108e565b6121509190614ac0565b61215a9190614b31565b82111561219c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219390615040565b60405180910390fd5b81600b8190555060019050919050565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b600b5481565b612267612782565b73ffffffffffffffffffffffffffffffffffffffff166122856118c6565b73ffffffffffffffffffffffffffffffffffffffff16146122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614a71565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123a3612782565b73ffffffffffffffffffffffffffffffffffffffff166123c16118c6565b73ffffffffffffffffffffffffffffffffffffffff1614612417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e90614a71565b60405180910390fd5b836018819055508260198190555081601a8190555080601b81905550601b54601a546019546018546124499190614d78565b6124539190614d78565b61245d9190614d78565b601781905550600f601754111561247357600080fd5b50505050565b6000612483612782565b73ffffffffffffffffffffffffffffffffffffffff166124a16118c6565b73ffffffffffffffffffffffffffffffffffffffff16146124f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ee90614a71565b60405180910390fd5b6000601060036101000a81548160ff0219169083151502179055506001905090565b601e5481565b612527612782565b73ffffffffffffffffffffffffffffffffffffffff166125456118c6565b73ffffffffffffffffffffffffffffffffffffffff161461259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614a71565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b612669612782565b73ffffffffffffffffffffffffffffffffffffffff166126876118c6565b73ffffffffffffffffffffffffffffffffffffffff16146126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d490614a71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361274c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612743906150d2565b60405180910390fd5b6127558161384b565b50565b60195481565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b600c5481565b601f5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f090615164565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285f906151f6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129469190614754565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b990615288565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a289061531a565b60405180910390fd5b60008103612a4a57612a45838360006139b2565b613846565b601060009054906101000a900460ff161561301a57600560149054906101000a900460ff1661301957601060019054906101000a900460ff16612b6857602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b285750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5e90615386565b60405180910390fd5b5b601060039054906101000a900460ff1615612d3057612b856118c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c0c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c6457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d2f5743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce19061543e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dd35750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7a57600a54811115612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e14906154d0565b60405180910390fd5b600c54612e2983611548565b82612e349190614d78565b1115612e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6c9061553c565b60405180910390fd5b613018565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f1d5750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f6c57600a54811115612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e906155ce565b60405180910390fd5b613017565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661301657600c54612fc983611548565b82612fd49190614d78565b1115613015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300c9061553c565b60405180910390fd5b5b5b5b5b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130bb5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130c85742600f819055505b601060019054906101000a900460ff16801561312d5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131455761313f8383836001613c31565b50613846565b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131e95750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561330857602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561329f576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015403613299574281600001819055505b50613307565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600f5481600001546132f491906155ee565b8160020181905550428160010181905550505b5b600061331330611548565b90506000600b5482101590508080156133385750601060029054906101000a900460ff165b80156133515750600560149054906101000a900460ff16155b80156133a75750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133fd5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134535750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613497576001600560146101000a81548160ff02191690831515021790555061347b613d97565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061354d5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561355757600090505b6000811561383657602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135ba57506000601754115b156136ba576135e760646135d96017548861415890919063ffffffff16565b61416e90919063ffffffff16565b9050601754601954826135fa9190614ac0565b6136049190614b31565b601d60008282546136159190614d78565b92505081905550601754601a548261362d9190614ac0565b6136379190614b31565b601e60008282546136489190614d78565b92505081905550601754601854826136609190614ac0565b61366a9190614b31565b601c600082825461367b9190614d78565b92505081905550601754601b54826136939190614ac0565b61369d9190614b31565b601f60008282546136ae9190614d78565b92505081905550613812565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561371557506000601254115b156138115761374260646137346012548861415890919063ffffffff16565b61416e90919063ffffffff16565b9050601254601454826137559190614ac0565b61375f9190614b31565b601d60008282546137709190614d78565b92505081905550601254601554826137889190614ac0565b6137929190614b31565b601e60008282546137a39190614d78565b92505081905550601254601354826137bb9190614ac0565b6137c59190614b31565b601c60008282546137d69190614d78565b92505081905550601254601654826137ee9190614ac0565b6137f89190614b31565b601f60008282546138099190614d78565b925050819055505b5b6000811115613827576138268730836139b2565b5b808561383391906155ee565b94505b6138418787876139b2565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1890615288565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a879061531a565b60405180910390fd5b613a9b838383614184565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b1890615694565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bb49190614d78565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c189190614754565b60405180910390a3613c2b848484614189565b50505050565b6000613c3e858585614184565b60008060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381036000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d149190614d78565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613d789190614754565b60405180910390a3613d8b868686614189565b82915050949350505050565b6000613da230611548565b90506000601f54601e54601c54601d54613dbc9190614d78565b613dc69190614d78565b613dd09190614d78565b9050600080831480613de25750600082145b15613def57505050614156565b6010600b54613dfe9190614ac0565b831115613e17576010600b54613e149190614ac0565b92505b6000600283601d5486613e2a9190614ac0565b613e349190614b31565b613e3e9190614b31565b90506000613e55828661418e90919063ffffffff16565b90506000479050613e65826141a4565b6000613e7a824761418e90919063ffffffff16565b90506000613ea587613e97601c548561415890919063ffffffff16565b61416e90919063ffffffff16565b90506000613ed088613ec2601e548661415890919063ffffffff16565b61416e90919063ffffffff16565b90506000613efb89613eed601f548761415890919063ffffffff16565b61416e90919063ffffffff16565b9050600081838587613f0d91906155ee565b613f1791906155ee565b613f2191906155ee565b90506000601d819055506000601c819055506000601e819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613f89906156e5565b60006040518083038185875af1925050503d8060008114613fc6576040519150601f19603f3d011682016040523d82523d6000602084013e613fcb565b606091505b505080995050600088118015613fe15750600081115b1561402e57613ff088826143e1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601d54604051614025939291906156fa565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051614074906156e5565b60006040518083038185875af1925050503d80600081146140b1576040519150601f19603f3d011682016040523d82523d6000602084013e6140b6565b606091505b505080995050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051614102906156e5565b60006040518083038185875af1925050503d806000811461413f576040519150601f19603f3d011682016040523d82523d6000602084013e614144565b606091505b50508099505050505050505050505050505b565b600081836141669190614ac0565b905092915050565b6000818361417c9190614b31565b905092915050565b505050565b505050565b6000818361419c91906155ee565b905092915050565b6000600267ffffffffffffffff8111156141c1576141c0615731565b5b6040519080825280602002602001820160405280156141ef5781602001602082028036833780820191505090505b509050308160008151811061420757614206615760565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d091906157a4565b816001815181106142e4576142e3615760565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614349307f00000000000000000000000000000000000000000000000000000000000000008461278a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143ab9594939291906158ca565b600060405180830381600087803b1580156143c557600080fd5b505af11580156143d9573d6000803e3d6000fd5b505050505050565b61440c307f00000000000000000000000000000000000000000000000000000000000000008461278a565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161449396959493929190615945565b60606040518083038185885af11580156144b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144d691906159bb565b5050505050565b600080fd5b6000819050919050565b6144f5816144e2565b811461450057600080fd5b50565b600081359050614512816144ec565b92915050565b60006020828403121561452e5761452d6144dd565b5b600061453c84828501614503565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561457f578082015181840152602081019050614564565b60008484015250505050565b6000601f19601f8301169050919050565b60006145a782614545565b6145b18185614550565b93506145c1818560208601614561565b6145ca8161458b565b840191505092915050565b600060208201905081810360008301526145ef818461459c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614622826145f7565b9050919050565b61463281614617565b811461463d57600080fd5b50565b60008135905061464f81614629565b92915050565b6000806040838503121561466c5761466b6144dd565b5b600061467a85828601614640565b925050602061468b85828601614503565b9150509250929050565b60008115159050919050565b6146aa81614695565b82525050565b60006020820190506146c560008301846146a1565b92915050565b6000819050919050565b60006146f06146eb6146e6846145f7565b6146cb565b6145f7565b9050919050565b6000614702826146d5565b9050919050565b6000614714826146f7565b9050919050565b61472481614709565b82525050565b600060208201905061473f600083018461471b565b92915050565b61474e816144e2565b82525050565b60006020820190506147696000830184614745565b92915050565b600061477a826145f7565b9050919050565b61478a8161476f565b82525050565b60006020820190506147a56000830184614781565b92915050565b6000806000606084860312156147c4576147c36144dd565b5b60006147d286828701614640565b93505060206147e386828701614640565b92505060406147f486828701614503565b9150509250925092565b61480781614617565b82525050565b600060208201905061482260008301846147fe565b92915050565b60008060008060808587031215614842576148416144dd565b5b600061485087828801614503565b945050602061486187828801614503565b935050604061487287828801614503565b925050606061488387828801614503565b91505092959194509250565b600060ff82169050919050565b6148a58161488f565b82525050565b60006020820190506148c0600083018461489c565b92915050565b6000602082840312156148dc576148db6144dd565b5b60006148ea84828501614640565b91505092915050565b6148fc81614695565b811461490757600080fd5b50565b600081359050614919816148f3565b92915050565b60008060408385031215614936576149356144dd565b5b600061494485828601614640565b92505060206149558582860161490a565b9150509250929050565b600060208284031215614975576149746144dd565b5b60006149838482850161490a565b91505092915050565b6149958161476f565b81146149a057600080fd5b50565b6000813590506149b28161498c565b92915050565b6000602082840312156149ce576149cd6144dd565b5b60006149dc848285016149a3565b91505092915050565b600080604083850312156149fc576149fb6144dd565b5b6000614a0a85828601614640565b9250506020614a1b85828601614640565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a5b602083614550565b9150614a6682614a25565b602082019050919050565b60006020820190508181036000830152614a8a81614a4e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614acb826144e2565b9150614ad6836144e2565b9250828202614ae4816144e2565b91508282048414831517614afb57614afa614a91565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b3c826144e2565b9150614b47836144e2565b925082614b5757614b56614b02565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614bbe602983614550565b9150614bc982614b62565b604082019050919050565b60006020820190508181036000830152614bed81614bb1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c3b57607f821691505b602082108103614c4e57614c4d614bf4565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614cb0602483614550565b9150614cbb82614c54565b604082019050919050565b60006020820190508181036000830152614cdf81614ca3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d42602883614550565b9150614d4d82614ce6565b604082019050919050565b60006020820190508181036000830152614d7181614d35565b9050919050565b6000614d83826144e2565b9150614d8e836144e2565b9250828201905080821115614da657614da5614a91565b5b92915050565b7f546f6b656e20616c7265616479206c61756e6368656400000000000000000000600082015250565b6000614de2601683614550565b9150614ded82614dac565b602082019050919050565b60006020820190508181036000830152614e1181614dd5565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614e74603983614550565b9150614e7f82614e18565b604082019050919050565b60006020820190508181036000830152614ea381614e67565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614f06602583614550565b9150614f1182614eaa565b604082019050919050565b60006020820190508181036000830152614f3581614ef9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614f98603583614550565b9150614fa382614f3c565b604082019050919050565b60006020820190508181036000830152614fc781614f8b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061502a603483614550565b915061503582614fce565b604082019050919050565b600060208201905081810360008301526150598161501d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150bc602683614550565b91506150c782615060565b604082019050919050565b600060208201905081810360008301526150eb816150af565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061514e602483614550565b9150615159826150f2565b604082019050919050565b6000602082019050818103600083015261517d81615141565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151e0602283614550565b91506151eb82615184565b604082019050919050565b6000602082019050818103600083015261520f816151d3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615272602583614550565b915061527d82615216565b604082019050919050565b600060208201905081810360008301526152a181615265565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615304602383614550565b915061530f826152a8565b604082019050919050565b60006020820190508181036000830152615333816152f7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615370601683614550565b915061537b8261533a565b602082019050919050565b6000602082019050818103600083015261539f81615363565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615428604983614550565b9150615433826153a6565b606082019050919050565b600060208201905081810360008301526154578161541b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b60006154ba602f83614550565b91506154c58261545e565b604082019050919050565b600060208201905081810360008301526154e9816154ad565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615526601383614550565b9150615531826154f0565b602082019050919050565b6000602082019050818103600083015261555581615519565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b60006155b8603083614550565b91506155c38261555c565b604082019050919050565b600060208201905081810360008301526155e7816155ab565b9050919050565b60006155f9826144e2565b9150615604836144e2565b925082820390508181111561561c5761561b614a91565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061567e602683614550565b915061568982615622565b604082019050919050565b600060208201905081810360008301526156ad81615671565b9050919050565b600081905092915050565b50565b60006156cf6000836156b4565b91506156da826156bf565b600082019050919050565b60006156f0826156c2565b9150819050919050565b600060608201905061570f6000830186614745565b61571c6020830185614745565b6157296040830184614745565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061579e81614629565b92915050565b6000602082840312156157ba576157b96144dd565b5b60006157c88482850161578f565b91505092915050565b6000819050919050565b60006157f66157f16157ec846157d1565b6146cb565b6144e2565b9050919050565b615806816157db565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61584181614617565b82525050565b60006158538383615838565b60208301905092915050565b6000602082019050919050565b60006158778261580c565b6158818185615817565b935061588c83615828565b8060005b838110156158bd5781516158a48882615847565b97506158af8361585f565b925050600181019050615890565b5085935050505092915050565b600060a0820190506158df6000830188614745565b6158ec60208301876157fd565b81810360408301526158fe818661586c565b905061590d60608301856147fe565b61591a6080830184614745565b9695505050505050565b600061592f826146f7565b9050919050565b61593f81615924565b82525050565b600060c08201905061595a60008301896147fe565b6159676020830188614745565b61597460408301876157fd565b61598160608301866157fd565b61598e6080830185615936565b61599b60a0830184614745565b979650505050505050565b6000815190506159b5816144ec565b92915050565b6000806000606084860312156159d4576159d36144dd565b5b60006159e2868287016159a6565b93505060206159f3868287016159a6565b9250506040615a04868287016159a6565b915050925092509256fea2646970667358221220c9e6809b6ac8b1956f68a12f6e9f570dc9e41bfef1adaa06f092beb3613280bc64736f6c63430008120033

Deployed Bytecode

0x6080604052600436106103b15760003560e01c806392136913116101e7578063d257b34f1161010d578063ef8700e5116100a0578063f63743421161006f578063f637434214610dff578063f887ea4014610e2a578063f8b45b0514610e55578063fb002c9714610e80576103b8565b8063ef8700e514610d57578063f023f57314610d82578063f11a24d314610dab578063f2fde38b14610dd6576103b8565b8063e2f45605116100dc578063e2f4560514610caf578063e37ba8f914610cda578063e7ad9fcd14610d03578063e884f26014610d2c576103b8565b8063d257b34f14610bcd578063d85ba06314610c0a578063dd62ed3e14610c35578063e1bc339414610c72576103b8565b8063aacebbe311610185578063c024666811610154578063c024666814610b23578063c04a541414610b4c578063c3f70b5214610b77578063c876d0b914610ba2576103b8565b8063aacebbe314610a67578063b204141114610a90578063b62496f514610abb578063bbc0c74214610af8576103b8565b806398cf00a9116101c157806398cf00a91461099b5780639a7a23d6146109c4578063a457c2d7146109ed578063a9059cbb14610a2a576103b8565b8063921369131461091c578063924de9b71461094757806395d89b4114610970576103b8565b806349bd5a5e116102d757806370a082311161026a57806375f0a8741161023957806375f0a874146108845780637bce5a04146108af5780638a8c523c146108da5780638da5cb5b146108f1576103b8565b806370a08231146107dc578063715018a614610819578063751039fc146108305780637571336a1461085b576103b8565b80634fbee193116102a65780634fbee1931461071e5780635a139dd41461075b5780636a486a8e146107865780636ddd1713146107b1576103b8565b806349bd5a5e146106725780634a62bb651461069d5780634ec39ba9146106c85780634f77f6c0146106f3576103b8565b80631c499ab01161034f57806327c8f8351161031e57806327c8f835146105b65780632e6ed7ef146105e1578063313ce5671461060a5780633950935114610635576103b8565b80631c499ab0146104fa5780631f3fed8f1461052357806320a17b241461054e57806323b872dd14610579576103b8565b80631694505e1161038b5780631694505e1461044e57806318160ddd1461047957806318a94cf1146104a45780631a8145bb146104cf576103b8565b80630517d13d146103bd57806306fdde03146103e6578063095ea7b314610411576103b8565b366103b857005b600080fd5b3480156103c957600080fd5b506103e460048036038101906103df9190614518565b610eab565b005b3480156103f257600080fd5b506103fb610fba565b60405161040891906145d5565b60405180910390f35b34801561041d57600080fd5b5061043860048036038101906104339190614655565b61104c565b60405161044591906146b0565b60405180910390f35b34801561045a57600080fd5b5061046361106a565b604051610470919061472a565b60405180910390f35b34801561048557600080fd5b5061048e61108e565b60405161049b9190614754565b60405180910390f35b3480156104b057600080fd5b506104b9611098565b6040516104c69190614754565b60405180910390f35b3480156104db57600080fd5b506104e461109e565b6040516104f19190614754565b60405180910390f35b34801561050657600080fd5b50610521600480360381019061051c9190614518565b6110a4565b005b34801561052f57600080fd5b506105386111b3565b6040516105459190614754565b60405180910390f35b34801561055a57600080fd5b506105636111b9565b6040516105709190614790565b60405180910390f35b34801561058557600080fd5b506105a0600480360381019061059b91906147ab565b6111df565b6040516105ad91906146b0565b60405180910390f35b3480156105c257600080fd5b506105cb6112d7565b6040516105d8919061480d565b60405180910390f35b3480156105ed57600080fd5b5061060860048036038101906106039190614828565b6112dd565b005b34801561061657600080fd5b5061061f6113bb565b60405161062c91906148ab565b60405180910390f35b34801561064157600080fd5b5061065c60048036038101906106579190614655565b6113c4565b60405161066991906146b0565b60405180910390f35b34801561067e57600080fd5b50610687611470565b604051610694919061480d565b60405180910390f35b3480156106a957600080fd5b506106b2611494565b6040516106bf91906146b0565b60405180910390f35b3480156106d457600080fd5b506106dd6114a7565b6040516106ea9190614790565b60405180910390f35b3480156106ff57600080fd5b506107086114cd565b6040516107159190614754565b60405180910390f35b34801561072a57600080fd5b50610745600480360381019061074091906148c6565b6114d3565b60405161075291906146b0565b60405180910390f35b34801561076757600080fd5b50610770611529565b60405161077d9190614754565b60405180910390f35b34801561079257600080fd5b5061079b61152f565b6040516107a89190614754565b60405180910390f35b3480156107bd57600080fd5b506107c6611535565b6040516107d391906146b0565b60405180910390f35b3480156107e857600080fd5b5061080360048036038101906107fe91906148c6565b611548565b6040516108109190614754565b60405180910390f35b34801561082557600080fd5b5061082e611590565b005b34801561083c57600080fd5b50610845611618565b60405161085291906146b0565b60405180910390f35b34801561086757600080fd5b50610882600480360381019061087d919061491f565b6116b8565b005b34801561089057600080fd5b5061089961178f565b6040516108a69190614790565b60405180910390f35b3480156108bb57600080fd5b506108c46117b5565b6040516108d19190614754565b60405180910390f35b3480156108e657600080fd5b506108ef6117bb565b005b3480156108fd57600080fd5b506109066118c6565b604051610913919061480d565b60405180910390f35b34801561092857600080fd5b506109316118f0565b60405161093e9190614754565b60405180910390f35b34801561095357600080fd5b5061096e6004803603810190610969919061495f565b6118f6565b005b34801561097c57600080fd5b5061098561198f565b60405161099291906145d5565b60405180910390f35b3480156109a757600080fd5b506109c260048036038101906109bd91906149b8565b611a21565b005b3480156109d057600080fd5b506109eb60048036038101906109e6919061491f565b611b5d565b005b3480156109f957600080fd5b50610a146004803603810190610a0f9190614655565b611c75565b604051610a2191906146b0565b60405180910390f35b348015610a3657600080fd5b50610a516004803603810190610a4c9190614655565b611d60565b604051610a5e91906146b0565b60405180910390f35b348015610a7357600080fd5b50610a8e6004803603810190610a8991906149b8565b611d7e565b005b348015610a9c57600080fd5b50610aa5611eba565b604051610ab29190614754565b60405180910390f35b348015610ac757600080fd5b50610ae26004803603810190610add91906148c6565b611ec0565b604051610aef91906146b0565b60405180910390f35b348015610b0457600080fd5b50610b0d611ee0565b604051610b1a91906146b0565b60405180910390f35b348015610b2f57600080fd5b50610b4a6004803603810190610b45919061491f565b611ef3565b005b348015610b5857600080fd5b50610b61612018565b604051610b6e9190614790565b60405180910390f35b348015610b8357600080fd5b50610b8c61203e565b604051610b999190614754565b60405180910390f35b348015610bae57600080fd5b50610bb7612044565b604051610bc491906146b0565b60405180910390f35b348015610bd957600080fd5b50610bf46004803603810190610bef9190614518565b612057565b604051610c0191906146b0565b60405180910390f35b348015610c1657600080fd5b50610c1f6121ac565b604051610c2c9190614754565b60405180910390f35b348015610c4157600080fd5b50610c5c6004803603810190610c5791906149e5565b6121b2565b604051610c699190614754565b60405180910390f35b348015610c7e57600080fd5b50610c996004803603810190610c9491906148c6565b612239565b604051610ca691906146b0565b60405180910390f35b348015610cbb57600080fd5b50610cc4612259565b604051610cd19190614754565b60405180910390f35b348015610ce657600080fd5b50610d016004803603810190610cfc91906149b8565b61225f565b005b348015610d0f57600080fd5b50610d2a6004803603810190610d259190614828565b61239b565b005b348015610d3857600080fd5b50610d41612479565b604051610d4e91906146b0565b60405180910390f35b348015610d6357600080fd5b50610d6c612519565b604051610d799190614754565b60405180910390f35b348015610d8e57600080fd5b50610da96004803603810190610da491906149b8565b61251f565b005b348015610db757600080fd5b50610dc061265b565b604051610dcd9190614754565b60405180910390f35b348015610de257600080fd5b50610dfd6004803603810190610df891906148c6565b612661565b005b348015610e0b57600080fd5b50610e14612758565b604051610e219190614754565b60405180910390f35b348015610e3657600080fd5b50610e3f61275e565b604051610e4c919061480d565b60405180910390f35b348015610e6157600080fd5b50610e6a612776565b604051610e779190614754565b60405180910390f35b348015610e8c57600080fd5b50610e9561277c565b604051610ea29190614754565b60405180910390f35b610eb3612782565b73ffffffffffffffffffffffffffffffffffffffff16610ed16118c6565b73ffffffffffffffffffffffffffffffffffffffff1614610f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1e90614a71565b60405180910390fd5b670de0b6b3a76400006103e86001610f3d61108e565b610f479190614ac0565b610f519190614b31565b610f5b9190614b31565b811015610f9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9490614bd4565b60405180910390fd5b670de0b6b3a764000081610fb19190614ac0565b600a8190555050565b606060038054610fc990614c23565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff590614c23565b80156110425780601f1061101757610100808354040283529160200191611042565b820191906000526020600020905b81548152906001019060200180831161102557829003601f168201915b5050505050905090565b6000611060611059612782565b848461278a565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b601a5481565b601d5481565b6110ac612782565b73ffffffffffffffffffffffffffffffffffffffff166110ca6118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611120576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111790614a71565b60405180910390fd5b670de0b6b3a76400006103e8600561113661108e565b6111409190614ac0565b61114a9190614b31565b6111549190614b31565b811015611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90614cc6565b60405180910390fd5b670de0b6b3a7640000816111aa9190614ac0565b600c8190555050565b601c5481565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006111ec848484612953565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611237612782565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156112b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ae90614d58565b60405180910390fd5b6112cb856112c3612782565b85840361278a565b60019150509392505050565b61dead81565b6112e5612782565b73ffffffffffffffffffffffffffffffffffffffff166113036118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135090614a71565b60405180910390fd5b8360138190555082601481905550816015819055508060168190555060165460155460145460135461138b9190614d78565b6113959190614d78565b61139f9190614d78565b601281905550600f60125411156113b557600080fd5b50505050565b60006012905090565b60006114666113d1612782565b8484600160006113df612782565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546114619190614d78565b61278a565b6001905092915050565b7f00000000000000000000000060b67e7fa98432ffbb8346a19bef44d145bb8af081565b601060009054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601b5481565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60165481565b60175481565b601060029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611598612782565b73ffffffffffffffffffffffffffffffffffffffff166115b66118c6565b73ffffffffffffffffffffffffffffffffffffffff161461160c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160390614a71565b60405180910390fd5b611616600061384b565b565b6000611622612782565b73ffffffffffffffffffffffffffffffffffffffff166116406118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611696576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168d90614a71565b60405180910390fd5b6000601060006101000a81548160ff0219169083151502179055506001905090565b6116c0612782565b73ffffffffffffffffffffffffffffffffffffffff166116de6118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172b90614a71565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60135481565b6117c3612782565b73ffffffffffffffffffffffffffffffffffffffff166117e16118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90614a71565b60405180910390fd5b601060019054906101000a900460ff1615611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e90614df8565b60405180910390fd5b6001601060016101000a81548160ff021916908315150217905550436011819055506001601060026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60185481565b6118fe612782565b73ffffffffffffffffffffffffffffffffffffffff1661191c6118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611972576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196990614a71565b60405180910390fd5b80601060026101000a81548160ff02191690831515021790555050565b60606004805461199e90614c23565b80601f01602080910402602001604051908101604052809291908181526020018280546119ca90614c23565b8015611a175780601f106119ec57610100808354040283529160200191611a17565b820191906000526020600020905b8154815290600101906020018083116119fa57829003601f168201915b5050505050905090565b611a29612782565b73ffffffffffffffffffffffffffffffffffffffff16611a476118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611a9d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9490614a71565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2b40a68873cc9ceb6ff442ae64f2dd80b45c59156405ccb511be546382ad43fb60405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611b65612782565b73ffffffffffffffffffffffffffffffffffffffff16611b836118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611bd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bd090614a71565b60405180910390fd5b7f00000000000000000000000060b67e7fa98432ffbb8346a19bef44d145bb8af073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c5e90614e8a565b60405180910390fd5b611c718282613911565b5050565b60008060016000611c84612782565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611d41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3890614f1c565b60405180910390fd5b611d55611d4c612782565b8585840361278a565b600191505092915050565b6000611d74611d6d612782565b8484612953565b6001905092915050565b611d86612782565b73ffffffffffffffffffffffffffffffffffffffff16611da46118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611dfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df190614a71565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b60226020528060005260406000206000915054906101000a900460ff1681565b601060019054906101000a900460ff1681565b611efb612782565b73ffffffffffffffffffffffffffffffffffffffff16611f196118c6565b73ffffffffffffffffffffffffffffffffffffffff1614611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6690614a71565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161200c91906146b0565b60405180910390a25050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b601060039054906101000a900460ff1681565b6000612061612782565b73ffffffffffffffffffffffffffffffffffffffff1661207f6118c6565b73ffffffffffffffffffffffffffffffffffffffff16146120d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120cc90614a71565b60405180910390fd5b620186a060016120e361108e565b6120ed9190614ac0565b6120f79190614b31565b821015612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090614fae565b60405180910390fd5b6103e8600561214661108e565b6121509190614ac0565b61215a9190614b31565b82111561219c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219390615040565b60405180910390fd5b81600b8190555060019050919050565b60125481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b600b5481565b612267612782565b73ffffffffffffffffffffffffffffffffffffffff166122856118c6565b73ffffffffffffffffffffffffffffffffffffffff16146122db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d290614a71565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f0308c4544315dbf7c7c2fdbcdf1dd8a57df22fddf234ee3c941eefec5c2287ba60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6123a3612782565b73ffffffffffffffffffffffffffffffffffffffff166123c16118c6565b73ffffffffffffffffffffffffffffffffffffffff1614612417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240e90614a71565b60405180910390fd5b836018819055508260198190555081601a8190555080601b81905550601b54601a546019546018546124499190614d78565b6124539190614d78565b61245d9190614d78565b601781905550600f601754111561247357600080fd5b50505050565b6000612483612782565b73ffffffffffffffffffffffffffffffffffffffff166124a16118c6565b73ffffffffffffffffffffffffffffffffffffffff16146124f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ee90614a71565b60405180910390fd5b6000601060036101000a81548160ff0219169083151502179055506001905090565b601e5481565b612527612782565b73ffffffffffffffffffffffffffffffffffffffff166125456118c6565b73ffffffffffffffffffffffffffffffffffffffff161461259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614a71565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167ffaf1b77ed79f6e898c44dd8ab36b330c7b2fd39bcaab05ed6362480df870396560405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60145481565b612669612782565b73ffffffffffffffffffffffffffffffffffffffff166126876118c6565b73ffffffffffffffffffffffffffffffffffffffff16146126dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d490614a71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361274c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612743906150d2565b60405180910390fd5b6127558161384b565b50565b60195481565b737a250d5630b4cf539739df2c5dacb4c659f2488d81565b600c5481565b601f5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f090615164565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612868576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285f906151f6565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129469190614754565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b990615288565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a289061531a565b60405180910390fd5b60008103612a4a57612a45838360006139b2565b613846565b601060009054906101000a900460ff161561301a57600560149054906101000a900460ff1661301957601060019054906101000a900460ff16612b6857602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612b285750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b5e90615386565b60405180910390fd5b5b601060039054906101000a900460ff1615612d3057612b856118c6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612c0c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c6457507f00000000000000000000000060b67e7fa98432ffbb8346a19bef44d145bb8af073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d2f5743600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce19061543e565b60405180910390fd5b43600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612dd35750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e7a57600a54811115612e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e14906154d0565b60405180910390fd5b600c54612e2983611548565b82612e349190614d78565b1115612e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6c9061553c565b60405180910390fd5b613018565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612f1d5750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f6c57600a54811115612f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f5e906155ce565b60405180910390fd5b613017565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661301657600c54612fc983611548565b82612fd49190614d78565b1115613015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300c9061553c565b60405180910390fd5b5b5b5b5b5b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806130bb5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130c85742600f819055505b601060019054906101000a900460ff16801561312d5750602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131455761313f8383836001613c31565b50613846565b602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131e95750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561330857602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561329f576000600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002090506000816000015403613299574281600001819055505b50613307565b6000600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050600f5481600001546132f491906155ee565b8160020181905550428160010181905550505b5b600061331330611548565b90506000600b5482101590508080156133385750601060029054906101000a900460ff165b80156133515750600560149054906101000a900460ff16155b80156133a75750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133fd5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134535750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613497576001600560146101000a81548160ff02191690831515021790555061347b613d97565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061354d5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561355757600090505b6000811561383657602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135ba57506000601754115b156136ba576135e760646135d96017548861415890919063ffffffff16565b61416e90919063ffffffff16565b9050601754601954826135fa9190614ac0565b6136049190614b31565b601d60008282546136159190614d78565b92505081905550601754601a548261362d9190614ac0565b6136379190614b31565b601e60008282546136489190614d78565b92505081905550601754601854826136609190614ac0565b61366a9190614b31565b601c600082825461367b9190614d78565b92505081905550601754601b54826136939190614ac0565b61369d9190614b31565b601f60008282546136ae9190614d78565b92505081905550613812565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561371557506000601254115b156138115761374260646137346012548861415890919063ffffffff16565b61416e90919063ffffffff16565b9050601254601454826137559190614ac0565b61375f9190614b31565b601d60008282546137709190614d78565b92505081905550601254601554826137889190614ac0565b6137929190614b31565b601e60008282546137a39190614d78565b92505081905550601254601354826137bb9190614ac0565b6137c59190614b31565b601c60008282546137d69190614d78565b92505081905550601254601654826137ee9190614ac0565b6137f89190614b31565b601f60008282546138099190614d78565b925050819055505b5b6000811115613827576138268730836139b2565b5b808561383391906155ee565b94505b6138418787876139b2565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613a21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a1890615288565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613a90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a879061531a565b60405180910390fd5b613a9b838383614184565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613b21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b1890615694565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613bb49190614d78565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613c189190614754565b60405180910390a3613c2b848484614189565b50505050565b6000613c3e858585614184565b60008060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508381036000808873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550836000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613d149190614d78565b925050819055508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051613d789190614754565b60405180910390a3613d8b868686614189565b82915050949350505050565b6000613da230611548565b90506000601f54601e54601c54601d54613dbc9190614d78565b613dc69190614d78565b613dd09190614d78565b9050600080831480613de25750600082145b15613def57505050614156565b6010600b54613dfe9190614ac0565b831115613e17576010600b54613e149190614ac0565b92505b6000600283601d5486613e2a9190614ac0565b613e349190614b31565b613e3e9190614b31565b90506000613e55828661418e90919063ffffffff16565b90506000479050613e65826141a4565b6000613e7a824761418e90919063ffffffff16565b90506000613ea587613e97601c548561415890919063ffffffff16565b61416e90919063ffffffff16565b90506000613ed088613ec2601e548661415890919063ffffffff16565b61416e90919063ffffffff16565b90506000613efb89613eed601f548761415890919063ffffffff16565b61416e90919063ffffffff16565b9050600081838587613f0d91906155ee565b613f1791906155ee565b613f2191906155ee565b90506000601d819055506000601c819055506000601e819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051613f89906156e5565b60006040518083038185875af1925050503d8060008114613fc6576040519150601f19603f3d011682016040523d82523d6000602084013e613fcb565b606091505b505080995050600088118015613fe15750600081115b1561402e57613ff088826143e1565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618782601d54604051614025939291906156fa565b60405180910390a15b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051614074906156e5565b60006040518083038185875af1925050503d80600081146140b1576040519150601f19603f3d011682016040523d82523d6000602084013e6140b6565b606091505b505080995050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051614102906156e5565b60006040518083038185875af1925050503d806000811461413f576040519150601f19603f3d011682016040523d82523d6000602084013e614144565b606091505b50508099505050505050505050505050505b565b600081836141669190614ac0565b905092915050565b6000818361417c9190614b31565b905092915050565b505050565b505050565b6000818361419c91906155ee565b905092915050565b6000600267ffffffffffffffff8111156141c1576141c0615731565b5b6040519080825280602002602001820160405280156141ef5781602001602082028036833780820191505090505b509050308160008151811061420757614206615760565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906142d091906157a4565b816001815181106142e4576142e3615760565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614349307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461278a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016143ab9594939291906158ca565b600060405180830381600087803b1580156143c557600080fd5b505af11580156143d9573d6000803e3d6000fd5b505050505050565b61440c307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461278a565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b815260040161449396959493929190615945565b60606040518083038185885af11580156144b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144d691906159bb565b5050505050565b600080fd5b6000819050919050565b6144f5816144e2565b811461450057600080fd5b50565b600081359050614512816144ec565b92915050565b60006020828403121561452e5761452d6144dd565b5b600061453c84828501614503565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561457f578082015181840152602081019050614564565b60008484015250505050565b6000601f19601f8301169050919050565b60006145a782614545565b6145b18185614550565b93506145c1818560208601614561565b6145ca8161458b565b840191505092915050565b600060208201905081810360008301526145ef818461459c565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614622826145f7565b9050919050565b61463281614617565b811461463d57600080fd5b50565b60008135905061464f81614629565b92915050565b6000806040838503121561466c5761466b6144dd565b5b600061467a85828601614640565b925050602061468b85828601614503565b9150509250929050565b60008115159050919050565b6146aa81614695565b82525050565b60006020820190506146c560008301846146a1565b92915050565b6000819050919050565b60006146f06146eb6146e6846145f7565b6146cb565b6145f7565b9050919050565b6000614702826146d5565b9050919050565b6000614714826146f7565b9050919050565b61472481614709565b82525050565b600060208201905061473f600083018461471b565b92915050565b61474e816144e2565b82525050565b60006020820190506147696000830184614745565b92915050565b600061477a826145f7565b9050919050565b61478a8161476f565b82525050565b60006020820190506147a56000830184614781565b92915050565b6000806000606084860312156147c4576147c36144dd565b5b60006147d286828701614640565b93505060206147e386828701614640565b92505060406147f486828701614503565b9150509250925092565b61480781614617565b82525050565b600060208201905061482260008301846147fe565b92915050565b60008060008060808587031215614842576148416144dd565b5b600061485087828801614503565b945050602061486187828801614503565b935050604061487287828801614503565b925050606061488387828801614503565b91505092959194509250565b600060ff82169050919050565b6148a58161488f565b82525050565b60006020820190506148c0600083018461489c565b92915050565b6000602082840312156148dc576148db6144dd565b5b60006148ea84828501614640565b91505092915050565b6148fc81614695565b811461490757600080fd5b50565b600081359050614919816148f3565b92915050565b60008060408385031215614936576149356144dd565b5b600061494485828601614640565b92505060206149558582860161490a565b9150509250929050565b600060208284031215614975576149746144dd565b5b60006149838482850161490a565b91505092915050565b6149958161476f565b81146149a057600080fd5b50565b6000813590506149b28161498c565b92915050565b6000602082840312156149ce576149cd6144dd565b5b60006149dc848285016149a3565b91505092915050565b600080604083850312156149fc576149fb6144dd565b5b6000614a0a85828601614640565b9250506020614a1b85828601614640565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614a5b602083614550565b9150614a6682614a25565b602082019050919050565b60006020820190508181036000830152614a8a81614a4e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614acb826144e2565b9150614ad6836144e2565b9250828202614ae4816144e2565b91508282048414831517614afb57614afa614a91565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b3c826144e2565b9150614b47836144e2565b925082614b5757614b56614b02565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e206c6f7765722060008201527f7468616e20302e31250000000000000000000000000000000000000000000000602082015250565b6000614bbe602983614550565b9150614bc982614b62565b604082019050919050565b60006020820190508181036000830152614bed81614bb1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614c3b57607f821691505b602082108103614c4e57614c4d614bf4565b5b50919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614cb0602483614550565b9150614cbb82614c54565b604082019050919050565b60006020820190508181036000830152614cdf81614ca3565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614d42602883614550565b9150614d4d82614ce6565b604082019050919050565b60006020820190508181036000830152614d7181614d35565b9050919050565b6000614d83826144e2565b9150614d8e836144e2565b9250828201905080821115614da657614da5614a91565b5b92915050565b7f546f6b656e20616c7265616479206c61756e6368656400000000000000000000600082015250565b6000614de2601683614550565b9150614ded82614dac565b602082019050919050565b60006020820190508181036000830152614e1181614dd5565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614e74603983614550565b9150614e7f82614e18565b604082019050919050565b60006020820190508181036000830152614ea381614e67565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614f06602583614550565b9150614f1182614eaa565b604082019050919050565b60006020820190508181036000830152614f3581614ef9565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614f98603583614550565b9150614fa382614f3c565b604082019050919050565b60006020820190508181036000830152614fc781614f8b565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b600061502a603483614550565b915061503582614fce565b604082019050919050565b600060208201905081810360008301526150598161501d565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006150bc602683614550565b91506150c782615060565b604082019050919050565b600060208201905081810360008301526150eb816150af565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061514e602483614550565b9150615159826150f2565b604082019050919050565b6000602082019050818103600083015261517d81615141565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006151e0602283614550565b91506151eb82615184565b604082019050919050565b6000602082019050818103600083015261520f816151d3565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615272602583614550565b915061527d82615216565b604082019050919050565b600060208201905081810360008301526152a181615265565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000615304602383614550565b915061530f826152a8565b604082019050919050565b60006020820190508181036000830152615333816152f7565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000615370601683614550565b915061537b8261533a565b602082019050919050565b6000602082019050818103600083015261539f81615363565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615428604983614550565b9150615433826153a6565b606082019050919050565b600060208201905081810360008301526154578161541b565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e2e0000000000000000000000000000000000602082015250565b60006154ba602f83614550565b91506154c58261545e565b604082019050919050565b600060208201905081810360008301526154e9816154ad565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615526601383614550565b9150615531826154f0565b602082019050919050565b6000602082019050818103600083015261555581615519565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e2e00000000000000000000000000000000602082015250565b60006155b8603083614550565b91506155c38261555c565b604082019050919050565b600060208201905081810360008301526155e7816155ab565b9050919050565b60006155f9826144e2565b9150615604836144e2565b925082820390508181111561561c5761561b614a91565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061567e602683614550565b915061568982615622565b604082019050919050565b600060208201905081810360008301526156ad81615671565b9050919050565b600081905092915050565b50565b60006156cf6000836156b4565b91506156da826156bf565b600082019050919050565b60006156f0826156c2565b9150819050919050565b600060608201905061570f6000830186614745565b61571c6020830185614745565b6157296040830184614745565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061579e81614629565b92915050565b6000602082840312156157ba576157b96144dd565b5b60006157c88482850161578f565b91505092915050565b6000819050919050565b60006157f66157f16157ec846157d1565b6146cb565b6144e2565b9050919050565b615806816157db565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61584181614617565b82525050565b60006158538383615838565b60208301905092915050565b6000602082019050919050565b60006158778261580c565b6158818185615817565b935061588c83615828565b8060005b838110156158bd5781516158a48882615847565b97506158af8361585f565b925050600181019050615890565b5085935050505092915050565b600060a0820190506158df6000830188614745565b6158ec60208301876157fd565b81810360408301526158fe818661586c565b905061590d60608301856147fe565b61591a6080830184614745565b9695505050505050565b600061592f826146f7565b9050919050565b61593f81615924565b82525050565b600060c08201905061595a60008301896147fe565b6159676020830188614745565b61597460408301876157fd565b61598160608301866157fd565b61598e6080830185615936565b61599b60a0830184614745565b979650505050505050565b6000815190506159b5816144ec565b92915050565b6000806000606084860312156159d4576159d36144dd565b5b60006159e2868287016159a6565b93505060206159f3868287016159a6565b9250506040615a04868287016159a6565b915050925092509256fea2646970667358221220c9e6809b6ac8b1956f68a12f6e9f570dc9e41bfef1adaa06f092beb3613280bc64736f6c63430008120033

Deployed Bytecode Sourcemap

15700:18230:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21958:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2740:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3654:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15783:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3061:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17123:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17242;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22193:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17202:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16331:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3831:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15886:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22733:499;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2960:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4331:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15841:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16627:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16292:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17163;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24456:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16974:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17012:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16707:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3177:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;862:103;;;;;;;;;;;;;:::i;:::-;;21243:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22451:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16200:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16861:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21020:209;;;;;;;;;;;;;:::i;:::-;;639:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17047:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22625:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2848:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25225:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23948:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4554:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3312:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25001:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16935:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17490:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16667:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23758:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16245:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16372:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16747:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21527:423;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16827:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3495:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17426:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16408:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24795:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23240:510;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21378:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17282:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24590:197;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16898:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;973:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17085:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15946:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16448:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17324:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21958:227;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22083:4:::1;22075;22070:1;22054:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22053:26;;;;:::i;:::-;22052:35;;;;:::i;:::-;22042:6;:45;;22034:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;22170:6;22160;:17;;;;:::i;:::-;22143:14;:34;;;;21958:227:::0;:::o;2740:100::-;2794:13;2827:5;2820:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2740:100;:::o;3654:169::-;3737:4;3754:39;3763:12;:10;:12::i;:::-;3777:7;3786:6;3754:8;:39::i;:::-;3811:4;3804:11;;3654:169;;;;:::o;15783:51::-;;;:::o;3061:108::-;3122:7;3149:12;;3142:19;;3061:108;:::o;17123:33::-;;;;:::o;17242:::-;;;;:::o;22193:250::-;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22327:4:::1;22319;22314:1;22298:13;:11;:13::i;:::-;:17;;;;:::i;:::-;22297:26;;;;:::i;:::-;22296:35;;;;:::i;:::-;22286:6;:45;;22264:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;22428:6;22418;:17;;;;:::i;:::-;22406:9;:29;;;;22193:250:::0;:::o;17202:33::-;;;;:::o;16331:32::-;;;;;;;;;;;;;:::o;3831:492::-;3971:4;3988:36;3998:6;4006:9;4017:6;3988:9;:36::i;:::-;4037:24;4064:11;:19;4076:6;4064:19;;;;;;;;;;;;;;;:33;4084:12;:10;:12::i;:::-;4064:33;;;;;;;;;;;;;;;;4037:60;;4136:6;4116:16;:26;;4108:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;4223:57;4232:6;4240:12;:10;:12::i;:::-;4273:6;4254:16;:25;4223:8;:57::i;:::-;4311:4;4304:11;;;3831:492;;;;;:::o;15886:53::-;15932:6;15886:53;:::o;22733:499::-;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22942:13:::1;22924:15;:31;;;;22984:13;22966:15;:31;;;;23028:15;23008:17;:35;;;;23073:14;23054:16;:33;;;;23169:16;;23149:17;;23131:15;;23113;;:33;;;;:::i;:::-;:53;;;;:::i;:::-;:72;;;;:::i;:::-;23098:12;:87;;;;23220:2;23204:12;;:18;;23196:27;;;::::0;::::1;;22733:499:::0;;;;:::o;2960:93::-;3018:5;3043:2;3036:9;;2960:93;:::o;4331:215::-;4419:4;4436:80;4445:12;:10;:12::i;:::-;4459:7;4505:10;4468:11;:25;4480:12;:10;:12::i;:::-;4468:25;;;;;;;;;;;;;;;:34;4494:7;4468:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;4436:8;:80::i;:::-;4534:4;4527:11;;4331:215;;;;:::o;15841:38::-;;;:::o;16627:33::-;;;;;;;;;;;;;:::o;16292:32::-;;;;;;;;;;;;;:::o;17163:::-;;;;:::o;24456:126::-;24522:4;24546:19;:28;24566:7;24546:28;;;;;;;;;;;;;;;;;;;;;;;;;24539:35;;24456:126;;;:::o;16974:31::-;;;;:::o;17012:28::-;;;;:::o;16707:31::-;;;;;;;;;;;;;:::o;3177:127::-;3251:7;3278:9;:18;3288:7;3278:18;;;;;;;;;;;;;;;;3271:25;;3177:127;;;:::o;862:103::-;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;927:30:::1;954:1;927:18;:30::i;:::-;862:103::o:0;21243:121::-;21295:4;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21329:5:::1;21312:14;;:22;;;;;;;;;;;;;;;;;;21352:4;21345:11;;21243:121:::0;:::o;22451:161::-;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22600:4:::1;22564:25;:33;22590:6;22564:33;;;;;;;;;;;;;;;;:40;;;;;;;;;;;;;;;;;;22451:161:::0;;:::o;16200:38::-;;;;;;;;;;;;;:::o;16861:30::-;;;;:::o;21020:209::-;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21084:13:::1;;;;;;;;;;;21083:14;21075:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;21151:4;21135:13;;:20;;;;;;;;;;;;;;;;;;21180:12;21166:11;:26;;;;21217:4;21203:11;;:18;;;;;;;;;;;;;;;;;;21020:209::o:0;639:87::-;685:7;712:6;;;;;;;;;;;705:13;;639:87;:::o;17047:31::-;;;;:::o;22625:100::-;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;22710:7:::1;22696:11;;:21;;;;;;;;;;;;;;;;;;22625:100:::0;:::o;2848:104::-;2904:13;2937:7;2930:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2848:104;:::o;25225:164::-;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25339:9:::1;;;;;;;;;;;25311:38;;25328:9;25311:38;;;;;;;;;;;;25372:9;25360;;:21;;;;;;;;;;;;;;;;;;25225:164:::0;:::o;23948:304::-;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24092:13:::1;24084:21;;:4;:21;;::::0;24062:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;24203:41;24232:4;24238:5;24203:28;:41::i;:::-;23948:304:::0;;:::o;4554:413::-;4647:4;4664:24;4691:11;:25;4703:12;:10;:12::i;:::-;4691:25;;;;;;;;;;;;;;;:34;4717:7;4691:34;;;;;;;;;;;;;;;;4664:61;;4764:15;4744:16;:35;;4736:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;4857:67;4866:12;:10;:12::i;:::-;4880:7;4908:15;4889:16;:34;4857:8;:67::i;:::-;4955:4;4948:11;;;4554:413;;;;:::o;3312:175::-;3398:4;3415:42;3425:12;:10;:12::i;:::-;3439:9;3450:6;3415:9;:42::i;:::-;3475:4;3468:11;;3312:175;;;;:::o;25001:216::-;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25146:15:::1;;;;;;;;;;;25103:59;;25126:18;25103:59;;;;;;;;;;;;25191:18;25173:15;;:36;;;;;;;;;;;;;;;;;;25001:216:::0;:::o;16935:32::-;;;;:::o;17490:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16667:33::-;;;;;;;;;;;;;:::o;23758:182::-;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23874:8:::1;23843:19;:28;23863:7;23843:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;23914:7;23898:34;;;23923:8;23898:34;;;;;;:::i;:::-;;;;;;;;23758:182:::0;;:::o;16245:40::-;;;;;;;;;;;;;:::o;16372:29::-;;;;:::o;16747:39::-;;;;;;;;;;;;;:::o;21527:423::-;21635:4;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21700:6:::1;21695:1;21679:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21678:28;;;;:::i;:::-;21665:9;:41;;21657:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;21818:4;21813:1;21797:13;:11;:13::i;:::-;:17;;;;:::i;:::-;21796:26;;;;:::i;:::-;21783:9;:39;;21775:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;21911:9;21890:18;:30;;;;21938:4;21931:11;;21527:423:::0;;;:::o;16827:27::-;;;;:::o;3495:151::-;3584:7;3611:11;:18;3623:5;3611:18;;;;;;;;;;;;;;;:27;3630:7;3611:27;;;;;;;;;;;;;;;;3604:34;;3495:151;;;;:::o;17426:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;16408:33::-;;;;:::o;24795:198::-;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24934:9:::1;;;;;;;;;;;24897:47;;24914:18;24897:47;;;;;;;;;;;;24967:18;24955:9;;:30;;;;;;;;;;;;;;;;;;24795:198:::0;:::o;23240:510::-;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23451:13:::1;23432:16;:32;;;;23494:13;23475:16;:32;;;;23539:15;23518:18;:36;;;;23585:14;23565:17;:34;;;;23685:17;;23664:18;;23645:16;;23626;;:35;;;;:::i;:::-;:56;;;;:::i;:::-;:76;;;;:::i;:::-;23610:13;:92;;;;23738:2;23721:13;;:19;;23713:28;;;::::0;::::1;;23240:510:::0;;;;:::o;21378:135::-;21438:4;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21478:5:::1;21455:20;;:28;;;;;;;;;;;;;;;;;;21501:4;21494:11;;21378:135:::0;:::o;17282:35::-;;;;:::o;24590:197::-;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24721:17:::1;;;;;;;;;;;24685:54;;24710:9;24685:54;;;;;;;;;;;;24770:9;24750:17;;:29;;;;;;;;;;;;;;;;;;24590:197:::0;:::o;16898:30::-;;;;:::o;973:201::-;785:12;:10;:12::i;:::-;774:23;;:7;:5;:7::i;:::-;:23;;;766:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1082:1:::1;1062:22;;:8;:22;;::::0;1054:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;1138:28;1157:8;1138:18;:28::i;:::-;973:201:::0;:::o;17085:31::-;;;;:::o;15946:75::-;15979:42;15946:75;:::o;16448:24::-;;;;:::o;17324:34::-;;;;:::o;185:98::-;238:7;265:10;258:17;;185:98;:::o;7270:380::-;7423:1;7406:19;;:5;:19;;;7398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7504:1;7485:21;;:7;:21;;;7477:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7588:6;7558:11;:18;7570:5;7558:18;;;;;;;;;;;;;;;:27;7577:7;7558:27;;;;;;;;;;;;;;;:36;;;;7626:7;7610:32;;7619:5;7610:32;;;7635:6;7610:32;;;;;;:::i;:::-;;;;;;;;7270:380;;;:::o;25397:5411::-;25545:1;25529:18;;:4;:18;;;25521:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25622:1;25608:16;;:2;:16;;;25600:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;25691:1;25681:6;:11;25677:93;;25709:28;25725:4;25731:2;25735:1;25709:15;:28::i;:::-;25752:7;;25677:93;25786:14;;;;;;;;;;;25782:2097;;;25822:8;;;;;;;;;;;25817:2051;;25856:13;;;;;;;;;;;25851:223;;25928:19;:25;25948:4;25928:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;25957:19;:23;25977:2;25957:23;;;;;;;;;;;;;;;;;;;;;;;;;25928:52;25894:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;25851:223;26116:20;;;;;;;;;;;26112:613;;;26197:7;:5;:7::i;:::-;26191:13;;:2;:13;;;;:72;;;;;26247:15;26233:30;;:2;:30;;;;26191:72;:129;;;;;26306:13;26292:28;;:2;:28;;;;26191:129;26161:545;;;26470:12;26409:14;:25;26424:9;26409:25;;;;;;;;;;;;;;;;:73;26371:244;;;;;;;;;;;;:::i;:::-;;;;;;;;;26670:12;26642:14;:25;26657:9;26642:25;;;;;;;;;;;;;;;:40;;;;26161:545;26112:613;26785:25;:31;26811:4;26785:31;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;26842:25;:29;26868:2;26842:29;;;;;;;;;;;;;;;;;;;;;;;;;26841:30;26785:86;26759:1094;;;26958:14;;26948:6;:24;;26914:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;27154:9;;27137:13;27147:2;27137:9;:13::i;:::-;27128:6;:22;;;;:::i;:::-;:35;;27094:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;26759:1094;;;27321:25;:29;27347:2;27321:29;;;;;;;;;;;;;;;;;;;;;;;;;:86;;;;;27376:25;:31;27402:4;27376:31;;;;;;;;;;;;;;;;;;;;;;;;;27375:32;27321:86;27295:558;;;27494:14;;27484:6;:24;;27450:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;27295:558;;;27639:25;:29;27665:2;27639:29;;;;;;;;;;;;;;;;;;;;;;;;;27634:219;;27753:9;;27736:13;27746:2;27736:9;:13::i;:::-;27727:6;:22;;;;:::i;:::-;:35;;27693:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;27634:219;27295:558;26759:1094;25817:2051;25782:2097;27895:19;:25;27915:4;27895:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;27924:19;:23;27944:2;27924:23;;;;;;;;;;;;;;;;;;;;;;;;;27895:52;27891:117;;;27981:15;27964:14;:32;;;;27891:117;28024:13;;;;;;;;;;;:42;;;;;28041:19;:25;28061:4;28041:25;;;;;;;;;;;;;;;;;;;;;;;;;28024:42;28020:135;;;28083:39;28099:4;28105:2;28109:6;28117:4;28083:15;:39::i;:::-;;28137:7;;28020:135;28172:19;:25;28192:4;28172:25;;;;;;;;;;;;;;;;;;;;;;;;;28171:26;:54;;;;;28202:19;:23;28222:2;28202:23;;;;;;;;;;;;;;;;;;;;;;;;;28201:24;28171:54;28167:598;;;28246:25;:31;28272:4;28246:31;;;;;;;;;;;;;;;;;;;;;;;;;28242:512;;;28298:32;28333:9;:13;28343:2;28333:13;;;;;;;;;;;;;;;28298:48;;28399:1;28369:14;:26;;;:31;28365:124;;28454:15;28425:14;:26;;:44;;;;28365:124;28279:225;28242:512;;;28529:32;28564:9;:15;28574:4;28564:15;;;;;;;;;;;;;;;28529:50;;28660:14;;28631;:26;;;:43;;;;:::i;:::-;28598:14;:30;;:76;;;;28723:15;28693:14;:27;;:45;;;;28510:244;28242:512;28167:598;28777:28;28808:24;28826:4;28808:9;:24::i;:::-;28777:55;;28845:12;28884:18;;28860:20;:42;;28845:57;;28933:7;:35;;;;;28957:11;;;;;;;;;;;28933:35;:61;;;;;28986:8;;;;;;;;;;;28985:9;28933:61;:110;;;;;29012:25;:31;29038:4;29012:31;;;;;;;;;;;;;;;;;;;;;;;;;29011:32;28933:110;:153;;;;;29061:19;:25;29081:4;29061:25;;;;;;;;;;;;;;;;;;;;;;;;;29060:26;28933:153;:194;;;;;29104:19;:23;29124:2;29104:23;;;;;;;;;;;;;;;;;;;;;;;;;29103:24;28933:194;28915:326;;;29165:4;29154:8;;:15;;;;;;;;;;;;;;;;;;29186:10;:8;:10::i;:::-;29224:5;29213:8;;:16;;;;;;;;;;;;;;;;;;28915:326;29253:12;29269:8;;;;;;;;;;;29268:9;29253:24;;29379:19;:25;29399:4;29379:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;29408:19;:23;29428:2;29408:23;;;;;;;;;;;;;;;;;;;;;;;;;29379:52;29375:100;;;29458:5;29448:15;;29375:100;29487:12;29592:7;29588:1167;;;29644:25;:29;29670:2;29644:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;29693:1;29677:13;;:17;29644:50;29640:966;;;29722:34;29752:3;29722:25;29733:13;;29722:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;29715:41;;29825:13;;29805:16;;29798:4;:23;;;;:::i;:::-;29797:41;;;;:::i;:::-;29775:18;;:63;;;;;;;:::i;:::-;;;;;;;;29911:13;;29889:18;;29882:4;:25;;;;:::i;:::-;29881:43;;;;:::i;:::-;29857:20;;:67;;;;;;;:::i;:::-;;;;;;;;29993:13;;29973:16;;29966:4;:23;;;;:::i;:::-;29965:41;;;;:::i;:::-;29943:18;;:63;;;;;;;:::i;:::-;;;;;;;;30077:13;;30056:17;;30049:4;:24;;;;:::i;:::-;30048:42;;;;:::i;:::-;30025:19;;:65;;;;;;;:::i;:::-;;;;;;;;29640:966;;;30152:25;:31;30178:4;30152:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;30202:1;30187:12;;:16;30152:51;30148:458;;;30231:33;30260:3;30231:24;30242:12;;30231:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;30224:40;;30332:12;;30313:15;;30306:4;:22;;;;:::i;:::-;30305:39;;;;:::i;:::-;30283:18;;:61;;;;;;;:::i;:::-;;;;;;;;30416:12;;30395:17;;30388:4;:24;;;;:::i;:::-;30387:41;;;;:::i;:::-;30363:20;;:65;;;;;;;:::i;:::-;;;;;;;;30496:12;;30477:15;;30470:4;:22;;;;:::i;:::-;30469:39;;;;:::i;:::-;30447:18;;:61;;;;;;;:::i;:::-;;;;;;;;30578:12;;30558:16;;30551:4;:23;;;;:::i;:::-;30550:40;;;;:::i;:::-;30527:19;;:63;;;;;;;:::i;:::-;;;;;;;;30148:458;29640:966;30633:1;30626:4;:8;30622:91;;;30655:42;30671:4;30685;30692;30655:15;:42::i;:::-;30622:91;30739:4;30729:14;;;;;:::i;:::-;;;29588:1167;30767:33;30783:4;30789:2;30793:6;30767:15;:33::i;:::-;25510:5298;;;;25397:5411;;;;:::o;1182:191::-;1256:16;1275:6;;;;;;;;;;;1256:25;;1301:8;1292:6;;:17;;;;;;;;;;;;;;;;;;1356:8;1325:40;;1346:8;1325:40;;;;;;;;;;;;1245:128;1182:191;:::o;24260:188::-;24377:5;24343:25;:31;24369:4;24343:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;24434:5;24400:40;;24428:4;24400:40;;;;;;;;;;;;24260:188;;:::o;4975:733::-;5133:1;5115:20;;:6;:20;;;5107:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;5217:1;5196:23;;:9;:23;;;5188:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;5272:47;5293:6;5301:9;5312:6;5272:20;:47::i;:::-;5332:21;5356:9;:17;5366:6;5356:17;;;;;;;;;;;;;;;;5332:41;;5409:6;5392:13;:23;;5384:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;5530:6;5514:13;:22;5494:9;:17;5504:6;5494:17;;;;;;;;;;;;;;;:42;;;;5582:6;5558:9;:20;5568:9;5558:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;5623:9;5606:35;;5615:6;5606:35;;;5634:6;5606:35;;;;;;:::i;:::-;;;;;;;;5654:46;5674:6;5682:9;5693:6;5654:19;:46::i;:::-;5096:612;4975:733;;;:::o;5716:540::-;5867:4;5884:47;5905:6;5913:9;5924:6;5884:20;:47::i;:::-;5944:21;5968:9;:17;5978:6;5968:17;;;;;;;;;;;;;;;;5944:41;;6057:6;6041:13;:22;6021:9;:17;6031:6;6021:17;;;;;;;;;;;;;;;:42;;;;6109:6;6085:9;:20;6095:9;6085:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;6150:9;6133:35;;6142:6;6133:35;;;6161:6;6133:35;;;;;;:::i;:::-;;;;;;;;6179:46;6199:6;6207:9;6218:6;6179:19;:46::i;:::-;6243:5;6236:12;;;5716:540;;;;;;:::o;31940:1987::-;31979:23;32005:24;32023:4;32005:9;:24::i;:::-;31979:50;;32040:25;32172:19;;32136:20;;32102:18;;32068;;:52;;;;:::i;:::-;:88;;;;:::i;:::-;:123;;;;:::i;:::-;32040:151;;32202:12;32250:1;32231:15;:20;:46;;;;32276:1;32255:17;:22;32231:46;32227:85;;;32294:7;;;;;32227:85;32367:2;32346:18;;:23;;;;:::i;:::-;32328:15;:41;32324:115;;;32425:2;32404:18;;:23;;;;:::i;:::-;32386:41;;32324:115;32500:23;32587:1;32567:17;32545:18;;32527:15;:36;;;;:::i;:::-;32526:58;;;;:::i;:::-;:62;;;;:::i;:::-;32500:88;;32599:26;32628:36;32648:15;32628;:19;;:36;;;;:::i;:::-;32599:65;;32677:25;32705:21;32677:49;;32739:36;32756:18;32739:16;:36::i;:::-;32788:18;32809:44;32835:17;32809:21;:25;;:44;;;;:::i;:::-;32788:65;;32866:18;32887:57;32926:17;32887:34;32902:18;;32887:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;32866:78;;32955:25;32983:59;33024:17;32983:36;32998:20;;32983:10;:14;;:36;;;;:::i;:::-;:40;;:59;;;;:::i;:::-;32955:87;;33053:24;33080:58;33120:17;33080:35;33095:19;;33080:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;33053:85;;33151:23;33223:16;33203:17;33190:10;33177;:23;;;;:::i;:::-;:43;;;;:::i;:::-;:62;;;;:::i;:::-;33151:88;;33273:1;33252:18;:22;;;;33306:1;33285:18;:22;;;;33341:1;33318:20;:24;;;;33375:1;33353:19;:23;;;;33411:17;;;;;;;;;;;33403:31;;33442:17;33403:61;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33389:75;;;;;33499:1;33481:15;:19;:42;;;;;33522:1;33504:15;:19;33481:42;33477:278;;;33540:46;33553:15;33570;33540:12;:46::i;:::-;33606:137;33639:18;33676:15;33710:18;;33606:137;;;;;;;;:::i;:::-;;;;;;;;33477:278;33787:9;;;;;;;;;;;33779:23;;33810:16;33779:52;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33765:66;;;;;33864:15;;;;;;;;;;;33856:29;;33893:21;33856:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33842:77;;;;;31968:1959;;;;;;;;;;;31940:1987;:::o;9276:98::-;9334:7;9365:1;9361;:5;;;;:::i;:::-;9354:12;;9276:98;;;;:::o;9382:::-;9440:7;9471:1;9467;:5;;;;:::i;:::-;9460:12;;9382:98;;;;:::o;7658:125::-;;;;:::o;7791:124::-;;;;:::o;9170:98::-;9228:7;9259:1;9255;:5;;;;:::i;:::-;9248:12;;9170:98;;;;:::o;30820:589::-;30946:21;30984:1;30970:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30946:40;;31015:4;30997;31002:1;30997:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;31041:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31031:4;31036:1;31031:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31076:62;31093:4;31108:15;31126:11;31076:8;:62::i;:::-;31177:15;:66;;;31258:11;31284:1;31328:4;31355;31375:15;31177:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30875:534;30820:589;:::o;31417:515::-;31565:62;31582:4;31597:15;31615:11;31565:8;:62::i;:::-;31670:15;:31;;;31709:9;31742:4;31762:11;31788:1;31831;31874:9;;;;;;;;;;;31898:15;31670:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;31417:515;;:::o;88:117:1:-;197:1;194;187:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:246::-;1386:1;1396:113;1410:6;1407:1;1404:13;1396:113;;;1495:1;1490:3;1486:11;1480:18;1476:1;1471:3;1467:11;1460:39;1432:2;1429:1;1425:10;1420:15;;1396:113;;;1543:1;1534:6;1529:3;1525:16;1518:27;1367:184;1305:246;;;:::o;1557:102::-;1598:6;1649:2;1645:7;1640:2;1633:5;1629:14;1625:28;1615:38;;1557:102;;;:::o;1665:377::-;1753:3;1781:39;1814:5;1781:39;:::i;:::-;1836:71;1900:6;1895:3;1836:71;:::i;:::-;1829:78;;1916:65;1974:6;1969:3;1962:4;1955:5;1951:16;1916:65;:::i;:::-;2006:29;2028:6;2006:29;:::i;:::-;2001:3;1997:39;1990:46;;1757:285;1665:377;;;;:::o;2048:313::-;2161:4;2199:2;2188:9;2184:18;2176:26;;2248:9;2242:4;2238:20;2234:1;2223:9;2219:17;2212:47;2276:78;2349:4;2340:6;2276:78;:::i;:::-;2268:86;;2048:313;;;;:::o;2367:126::-;2404:7;2444:42;2437:5;2433:54;2422:65;;2367:126;;;:::o;2499:96::-;2536:7;2565:24;2583:5;2565:24;:::i;:::-;2554:35;;2499:96;;;:::o;2601:122::-;2674:24;2692:5;2674:24;:::i;:::-;2667:5;2664:35;2654:63;;2713:1;2710;2703:12;2654:63;2601:122;:::o;2729:139::-;2775:5;2813:6;2800:20;2791:29;;2829:33;2856:5;2829:33;:::i;:::-;2729:139;;;;:::o;2874:474::-;2942:6;2950;2999:2;2987:9;2978:7;2974:23;2970:32;2967:119;;;3005:79;;:::i;:::-;2967:119;3125:1;3150:53;3195:7;3186:6;3175:9;3171:22;3150:53;:::i;:::-;3140:63;;3096:117;3252:2;3278:53;3323:7;3314:6;3303:9;3299:22;3278:53;:::i;:::-;3268:63;;3223:118;2874:474;;;;;:::o;3354:90::-;3388:7;3431:5;3424:13;3417:21;3406:32;;3354:90;;;:::o;3450:109::-;3531:21;3546:5;3531:21;:::i;:::-;3526:3;3519:34;3450:109;;:::o;3565:210::-;3652:4;3690:2;3679:9;3675:18;3667:26;;3703:65;3765:1;3754:9;3750:17;3741:6;3703:65;:::i;:::-;3565:210;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:104::-;5156:7;5185:24;5203:5;5185:24;:::i;:::-;5174:35;;5111:104;;;:::o;5221:142::-;5324:32;5350:5;5324:32;:::i;:::-;5319:3;5312:45;5221:142;;:::o;5369:254::-;5478:4;5516:2;5505:9;5501:18;5493:26;;5529:87;5613:1;5602:9;5598:17;5589:6;5529:87;:::i;:::-;5369:254;;;;:::o;5629:619::-;5706:6;5714;5722;5771:2;5759:9;5750:7;5746:23;5742:32;5739:119;;;5777:79;;:::i;:::-;5739:119;5897:1;5922:53;5967:7;5958:6;5947:9;5943:22;5922:53;:::i;:::-;5912:63;;5868:117;6024:2;6050:53;6095:7;6086:6;6075:9;6071:22;6050:53;:::i;:::-;6040:63;;5995:118;6152:2;6178:53;6223:7;6214:6;6203:9;6199:22;6178:53;:::i;:::-;6168:63;;6123:118;5629:619;;;;;:::o;6254:118::-;6341:24;6359:5;6341:24;:::i;:::-;6336:3;6329:37;6254:118;;:::o;6378:222::-;6471:4;6509:2;6498:9;6494:18;6486:26;;6522:71;6590:1;6579:9;6575:17;6566:6;6522:71;:::i;:::-;6378:222;;;;:::o;6606:765::-;6692:6;6700;6708;6716;6765:3;6753:9;6744:7;6740:23;6736:33;6733:120;;;6772:79;;:::i;:::-;6733:120;6892:1;6917:53;6962:7;6953:6;6942:9;6938:22;6917:53;:::i;:::-;6907:63;;6863:117;7019:2;7045:53;7090:7;7081:6;7070:9;7066:22;7045:53;:::i;:::-;7035:63;;6990:118;7147:2;7173:53;7218:7;7209:6;7198:9;7194:22;7173:53;:::i;:::-;7163:63;;7118:118;7275:2;7301:53;7346:7;7337:6;7326:9;7322:22;7301:53;:::i;:::-;7291:63;;7246:118;6606:765;;;;;;;:::o;7377:86::-;7412:7;7452:4;7445:5;7441:16;7430:27;;7377:86;;;:::o;7469:112::-;7552:22;7568:5;7552:22;:::i;:::-;7547:3;7540:35;7469:112;;:::o;7587:214::-;7676:4;7714:2;7703:9;7699:18;7691:26;;7727:67;7791:1;7780:9;7776:17;7767:6;7727:67;:::i;:::-;7587:214;;;;:::o;7807:329::-;7866:6;7915:2;7903:9;7894:7;7890:23;7886:32;7883:119;;;7921:79;;:::i;:::-;7883:119;8041:1;8066:53;8111:7;8102:6;8091:9;8087:22;8066:53;:::i;:::-;8056:63;;8012:117;7807:329;;;;:::o;8142:116::-;8212:21;8227:5;8212:21;:::i;:::-;8205:5;8202:32;8192:60;;8248:1;8245;8238:12;8192:60;8142:116;:::o;8264:133::-;8307:5;8345:6;8332:20;8323:29;;8361:30;8385:5;8361:30;:::i;:::-;8264:133;;;;:::o;8403:468::-;8468:6;8476;8525:2;8513:9;8504:7;8500:23;8496:32;8493:119;;;8531:79;;:::i;:::-;8493:119;8651:1;8676:53;8721:7;8712:6;8701:9;8697:22;8676:53;:::i;:::-;8666:63;;8622:117;8778:2;8804:50;8846:7;8837:6;8826:9;8822:22;8804:50;:::i;:::-;8794:60;;8749:115;8403:468;;;;;:::o;8877:323::-;8933:6;8982:2;8970:9;8961:7;8957:23;8953:32;8950:119;;;8988:79;;:::i;:::-;8950:119;9108:1;9133:50;9175:7;9166:6;9155:9;9151:22;9133:50;:::i;:::-;9123:60;;9079:114;8877:323;;;;:::o;9206:138::-;9287:32;9313:5;9287:32;:::i;:::-;9280:5;9277:43;9267:71;;9334:1;9331;9324:12;9267:71;9206:138;:::o;9350:155::-;9404:5;9442:6;9429:20;9420:29;;9458:41;9493:5;9458:41;:::i;:::-;9350:155;;;;:::o;9511:345::-;9578:6;9627:2;9615:9;9606:7;9602:23;9598:32;9595:119;;;9633:79;;:::i;:::-;9595:119;9753:1;9778:61;9831:7;9822:6;9811:9;9807:22;9778:61;:::i;:::-;9768:71;;9724:125;9511:345;;;;:::o;9862:474::-;9930:6;9938;9987:2;9975:9;9966:7;9962:23;9958:32;9955:119;;;9993:79;;:::i;:::-;9955:119;10113:1;10138:53;10183:7;10174:6;10163:9;10159:22;10138:53;:::i;:::-;10128:63;;10084:117;10240:2;10266:53;10311:7;10302:6;10291:9;10287:22;10266:53;:::i;:::-;10256:63;;10211:118;9862:474;;;;;:::o;10342:182::-;10482:34;10478:1;10470:6;10466:14;10459:58;10342:182;:::o;10530:366::-;10672:3;10693:67;10757:2;10752:3;10693:67;:::i;:::-;10686:74;;10769:93;10858:3;10769:93;:::i;:::-;10887:2;10882:3;10878:12;10871:19;;10530:366;;;:::o;10902:419::-;11068:4;11106:2;11095:9;11091:18;11083:26;;11155:9;11149:4;11145:20;11141:1;11130:9;11126:17;11119:47;11183:131;11309:4;11183:131;:::i;:::-;11175:139;;10902:419;;;:::o;11327:180::-;11375:77;11372:1;11365:88;11472:4;11469:1;11462:15;11496:4;11493:1;11486:15;11513:410;11553:7;11576:20;11594:1;11576:20;:::i;:::-;11571:25;;11610:20;11628:1;11610:20;:::i;:::-;11605:25;;11665:1;11662;11658:9;11687:30;11705:11;11687:30;:::i;:::-;11676:41;;11866:1;11857:7;11853:15;11850:1;11847:22;11827:1;11820:9;11800:83;11777:139;;11896:18;;:::i;:::-;11777:139;11561:362;11513:410;;;;:::o;11929:180::-;11977:77;11974:1;11967:88;12074:4;12071:1;12064:15;12098:4;12095:1;12088:15;12115:185;12155:1;12172:20;12190:1;12172:20;:::i;:::-;12167:25;;12206:20;12224:1;12206:20;:::i;:::-;12201:25;;12245:1;12235:35;;12250:18;;:::i;:::-;12235:35;12292:1;12289;12285:9;12280:14;;12115:185;;;;:::o;12306:228::-;12446:34;12442:1;12434:6;12430:14;12423:58;12515:11;12510:2;12502:6;12498:15;12491:36;12306:228;:::o;12540:366::-;12682:3;12703:67;12767:2;12762:3;12703:67;:::i;:::-;12696:74;;12779:93;12868:3;12779:93;:::i;:::-;12897:2;12892:3;12888:12;12881:19;;12540:366;;;:::o;12912:419::-;13078:4;13116:2;13105:9;13101:18;13093:26;;13165:9;13159:4;13155:20;13151:1;13140:9;13136:17;13129:47;13193:131;13319:4;13193:131;:::i;:::-;13185:139;;12912:419;;;:::o;13337:180::-;13385:77;13382:1;13375:88;13482:4;13479:1;13472:15;13506:4;13503:1;13496:15;13523:320;13567:6;13604:1;13598:4;13594:12;13584:22;;13651:1;13645:4;13641:12;13672:18;13662:81;;13728:4;13720:6;13716:17;13706:27;;13662:81;13790:2;13782:6;13779:14;13759:18;13756:38;13753:84;;13809:18;;:::i;:::-;13753:84;13574:269;13523:320;;;:::o;13849:223::-;13989:34;13985:1;13977:6;13973:14;13966:58;14058:6;14053:2;14045:6;14041:15;14034:31;13849:223;:::o;14078:366::-;14220:3;14241:67;14305:2;14300:3;14241:67;:::i;:::-;14234:74;;14317:93;14406:3;14317:93;:::i;:::-;14435:2;14430:3;14426:12;14419:19;;14078:366;;;:::o;14450:419::-;14616:4;14654:2;14643:9;14639:18;14631:26;;14703:9;14697:4;14693:20;14689:1;14678:9;14674:17;14667:47;14731:131;14857:4;14731:131;:::i;:::-;14723:139;;14450:419;;;:::o;14875:227::-;15015:34;15011:1;15003:6;14999:14;14992:58;15084:10;15079:2;15071:6;15067:15;15060:35;14875:227;:::o;15108:366::-;15250:3;15271:67;15335:2;15330:3;15271:67;:::i;:::-;15264:74;;15347:93;15436:3;15347:93;:::i;:::-;15465:2;15460:3;15456:12;15449:19;;15108:366;;;:::o;15480:419::-;15646:4;15684:2;15673:9;15669:18;15661:26;;15733:9;15727:4;15723:20;15719:1;15708:9;15704:17;15697:47;15761:131;15887:4;15761:131;:::i;:::-;15753:139;;15480:419;;;:::o;15905:191::-;15945:3;15964:20;15982:1;15964:20;:::i;:::-;15959:25;;15998:20;16016:1;15998:20;:::i;:::-;15993:25;;16041:1;16038;16034:9;16027:16;;16062:3;16059:1;16056:10;16053:36;;;16069:18;;:::i;:::-;16053:36;15905:191;;;;:::o;16102:172::-;16242:24;16238:1;16230:6;16226:14;16219:48;16102:172;:::o;16280:366::-;16422:3;16443:67;16507:2;16502:3;16443:67;:::i;:::-;16436:74;;16519:93;16608:3;16519:93;:::i;:::-;16637:2;16632:3;16628:12;16621:19;;16280:366;;;:::o;16652:419::-;16818:4;16856:2;16845:9;16841:18;16833:26;;16905:9;16899:4;16895:20;16891:1;16880:9;16876:17;16869:47;16933:131;17059:4;16933:131;:::i;:::-;16925:139;;16652:419;;;:::o;17077:244::-;17217:34;17213:1;17205:6;17201:14;17194:58;17286:27;17281:2;17273:6;17269:15;17262:52;17077:244;:::o;17327:366::-;17469:3;17490:67;17554:2;17549:3;17490:67;:::i;:::-;17483:74;;17566:93;17655:3;17566:93;:::i;:::-;17684:2;17679:3;17675:12;17668:19;;17327:366;;;:::o;17699:419::-;17865:4;17903:2;17892:9;17888:18;17880:26;;17952:9;17946:4;17942:20;17938:1;17927:9;17923:17;17916:47;17980:131;18106:4;17980:131;:::i;:::-;17972:139;;17699:419;;;:::o;18124:224::-;18264:34;18260:1;18252:6;18248:14;18241:58;18333:7;18328:2;18320:6;18316:15;18309:32;18124:224;:::o;18354:366::-;18496:3;18517:67;18581:2;18576:3;18517:67;:::i;:::-;18510:74;;18593:93;18682:3;18593:93;:::i;:::-;18711:2;18706:3;18702:12;18695:19;;18354:366;;;:::o;18726:419::-;18892:4;18930:2;18919:9;18915:18;18907:26;;18979:9;18973:4;18969:20;18965:1;18954:9;18950:17;18943:47;19007:131;19133:4;19007:131;:::i;:::-;18999:139;;18726:419;;;:::o;19151:240::-;19291:34;19287:1;19279:6;19275:14;19268:58;19360:23;19355:2;19347:6;19343:15;19336:48;19151:240;:::o;19397:366::-;19539:3;19560:67;19624:2;19619:3;19560:67;:::i;:::-;19553:74;;19636:93;19725:3;19636:93;:::i;:::-;19754:2;19749:3;19745:12;19738:19;;19397:366;;;:::o;19769:419::-;19935:4;19973:2;19962:9;19958:18;19950:26;;20022:9;20016:4;20012:20;20008:1;19997:9;19993:17;19986:47;20050:131;20176:4;20050:131;:::i;:::-;20042:139;;19769:419;;;:::o;20194:239::-;20334:34;20330:1;20322:6;20318:14;20311:58;20403:22;20398:2;20390:6;20386:15;20379:47;20194:239;:::o;20439:366::-;20581:3;20602:67;20666:2;20661:3;20602:67;:::i;:::-;20595:74;;20678:93;20767:3;20678:93;:::i;:::-;20796:2;20791:3;20787:12;20780:19;;20439:366;;;:::o;20811:419::-;20977:4;21015:2;21004:9;21000:18;20992:26;;21064:9;21058:4;21054:20;21050:1;21039:9;21035:17;21028:47;21092:131;21218:4;21092:131;:::i;:::-;21084:139;;20811:419;;;:::o;21236:225::-;21376:34;21372:1;21364:6;21360:14;21353:58;21445:8;21440:2;21432:6;21428:15;21421:33;21236:225;:::o;21467:366::-;21609:3;21630:67;21694:2;21689:3;21630:67;:::i;:::-;21623:74;;21706:93;21795:3;21706:93;:::i;:::-;21824:2;21819:3;21815:12;21808:19;;21467:366;;;:::o;21839:419::-;22005:4;22043:2;22032:9;22028:18;22020:26;;22092:9;22086:4;22082:20;22078:1;22067:9;22063:17;22056:47;22120:131;22246:4;22120:131;:::i;:::-;22112:139;;21839:419;;;:::o;22264:223::-;22404:34;22400:1;22392:6;22388:14;22381:58;22473:6;22468:2;22460:6;22456:15;22449:31;22264:223;:::o;22493:366::-;22635:3;22656:67;22720:2;22715:3;22656:67;:::i;:::-;22649:74;;22732:93;22821:3;22732:93;:::i;:::-;22850:2;22845:3;22841:12;22834:19;;22493:366;;;:::o;22865:419::-;23031:4;23069:2;23058:9;23054:18;23046:26;;23118:9;23112:4;23108:20;23104:1;23093:9;23089:17;23082:47;23146:131;23272:4;23146:131;:::i;:::-;23138:139;;22865:419;;;:::o;23290:221::-;23430:34;23426:1;23418:6;23414:14;23407:58;23499:4;23494:2;23486:6;23482:15;23475:29;23290:221;:::o;23517:366::-;23659:3;23680:67;23744:2;23739:3;23680:67;:::i;:::-;23673:74;;23756:93;23845:3;23756:93;:::i;:::-;23874:2;23869:3;23865:12;23858:19;;23517:366;;;:::o;23889:419::-;24055:4;24093:2;24082:9;24078:18;24070:26;;24142:9;24136:4;24132:20;24128:1;24117:9;24113:17;24106:47;24170:131;24296:4;24170:131;:::i;:::-;24162:139;;23889:419;;;:::o;24314:224::-;24454:34;24450:1;24442:6;24438:14;24431:58;24523:7;24518:2;24510:6;24506:15;24499:32;24314:224;:::o;24544:366::-;24686:3;24707:67;24771:2;24766:3;24707:67;:::i;:::-;24700:74;;24783:93;24872:3;24783:93;:::i;:::-;24901:2;24896:3;24892:12;24885:19;;24544:366;;;:::o;24916:419::-;25082:4;25120:2;25109:9;25105:18;25097:26;;25169:9;25163:4;25159:20;25155:1;25144:9;25140:17;25133:47;25197:131;25323:4;25197:131;:::i;:::-;25189:139;;24916:419;;;:::o;25341:222::-;25481:34;25477:1;25469:6;25465:14;25458:58;25550:5;25545:2;25537:6;25533:15;25526:30;25341:222;:::o;25569:366::-;25711:3;25732:67;25796:2;25791:3;25732:67;:::i;:::-;25725:74;;25808:93;25897:3;25808:93;:::i;:::-;25926:2;25921:3;25917:12;25910:19;;25569:366;;;:::o;25941:419::-;26107:4;26145:2;26134:9;26130:18;26122:26;;26194:9;26188:4;26184:20;26180:1;26169:9;26165:17;26158:47;26222:131;26348:4;26222:131;:::i;:::-;26214:139;;25941:419;;;:::o;26366:172::-;26506:24;26502:1;26494:6;26490:14;26483:48;26366:172;:::o;26544:366::-;26686:3;26707:67;26771:2;26766:3;26707:67;:::i;:::-;26700:74;;26783:93;26872:3;26783:93;:::i;:::-;26901:2;26896:3;26892:12;26885:19;;26544:366;;;:::o;26916:419::-;27082:4;27120:2;27109:9;27105:18;27097:26;;27169:9;27163:4;27159:20;27155:1;27144:9;27140:17;27133:47;27197:131;27323:4;27197:131;:::i;:::-;27189:139;;26916:419;;;:::o;27341:297::-;27481:34;27477:1;27469:6;27465:14;27458:58;27550:34;27545:2;27537:6;27533:15;27526:59;27619:11;27614:2;27606:6;27602:15;27595:36;27341:297;:::o;27644:366::-;27786:3;27807:67;27871:2;27866:3;27807:67;:::i;:::-;27800:74;;27883:93;27972:3;27883:93;:::i;:::-;28001:2;27996:3;27992:12;27985:19;;27644:366;;;:::o;28016:419::-;28182:4;28220:2;28209:9;28205:18;28197:26;;28269:9;28263:4;28259:20;28255:1;28244:9;28240:17;28233:47;28297:131;28423:4;28297:131;:::i;:::-;28289:139;;28016:419;;;:::o;28441:234::-;28581:34;28577:1;28569:6;28565:14;28558:58;28650:17;28645:2;28637:6;28633:15;28626:42;28441:234;:::o;28681:366::-;28823:3;28844:67;28908:2;28903:3;28844:67;:::i;:::-;28837:74;;28920:93;29009:3;28920:93;:::i;:::-;29038:2;29033:3;29029:12;29022:19;;28681:366;;;:::o;29053:419::-;29219:4;29257:2;29246:9;29242:18;29234:26;;29306:9;29300:4;29296:20;29292:1;29281:9;29277:17;29270:47;29334:131;29460:4;29334:131;:::i;:::-;29326:139;;29053:419;;;:::o;29478:169::-;29618:21;29614:1;29606:6;29602:14;29595:45;29478:169;:::o;29653:366::-;29795:3;29816:67;29880:2;29875:3;29816:67;:::i;:::-;29809:74;;29892:93;29981:3;29892:93;:::i;:::-;30010:2;30005:3;30001:12;29994:19;;29653:366;;;:::o;30025:419::-;30191:4;30229:2;30218:9;30214:18;30206:26;;30278:9;30272:4;30268:20;30264:1;30253:9;30249:17;30242:47;30306:131;30432:4;30306:131;:::i;:::-;30298:139;;30025:419;;;:::o;30450:235::-;30590:34;30586:1;30578:6;30574:14;30567:58;30659:18;30654:2;30646:6;30642:15;30635:43;30450:235;:::o;30691:366::-;30833:3;30854:67;30918:2;30913:3;30854:67;:::i;:::-;30847:74;;30930:93;31019:3;30930:93;:::i;:::-;31048:2;31043:3;31039:12;31032:19;;30691:366;;;:::o;31063:419::-;31229:4;31267:2;31256:9;31252:18;31244:26;;31316:9;31310:4;31306:20;31302:1;31291:9;31287:17;31280:47;31344:131;31470:4;31344:131;:::i;:::-;31336:139;;31063:419;;;:::o;31488:194::-;31528:4;31548:20;31566:1;31548:20;:::i;:::-;31543:25;;31582:20;31600:1;31582:20;:::i;:::-;31577:25;;31626:1;31623;31619:9;31611:17;;31650:1;31644:4;31641:11;31638:37;;;31655:18;;:::i;:::-;31638:37;31488:194;;;;:::o;31688:225::-;31828:34;31824:1;31816:6;31812:14;31805:58;31897:8;31892:2;31884:6;31880:15;31873:33;31688:225;:::o;31919:366::-;32061:3;32082:67;32146:2;32141:3;32082:67;:::i;:::-;32075:74;;32158:93;32247:3;32158:93;:::i;:::-;32276:2;32271:3;32267:12;32260:19;;31919:366;;;:::o;32291:419::-;32457:4;32495:2;32484:9;32480:18;32472:26;;32544:9;32538:4;32534:20;32530:1;32519:9;32515:17;32508:47;32572:131;32698:4;32572:131;:::i;:::-;32564:139;;32291:419;;;:::o;32716:147::-;32817:11;32854:3;32839:18;;32716:147;;;;:::o;32869:114::-;;:::o;32989:398::-;33148:3;33169:83;33250:1;33245:3;33169:83;:::i;:::-;33162:90;;33261:93;33350:3;33261:93;:::i;:::-;33379:1;33374:3;33370:11;33363:18;;32989:398;;;:::o;33393:379::-;33577:3;33599:147;33742:3;33599:147;:::i;:::-;33592:154;;33763:3;33756:10;;33393:379;;;:::o;33778:442::-;33927:4;33965:2;33954:9;33950:18;33942:26;;33978:71;34046:1;34035:9;34031:17;34022:6;33978:71;:::i;:::-;34059:72;34127:2;34116:9;34112:18;34103:6;34059:72;:::i;:::-;34141;34209:2;34198:9;34194:18;34185:6;34141:72;:::i;:::-;33778:442;;;;;;:::o;34226:180::-;34274:77;34271:1;34264:88;34371:4;34368:1;34361:15;34395:4;34392:1;34385:15;34412:180;34460:77;34457:1;34450:88;34557:4;34554:1;34547:15;34581:4;34578:1;34571:15;34598:143;34655:5;34686:6;34680:13;34671:22;;34702:33;34729:5;34702:33;:::i;:::-;34598:143;;;;:::o;34747:351::-;34817:6;34866:2;34854:9;34845:7;34841:23;34837:32;34834:119;;;34872:79;;:::i;:::-;34834:119;34992:1;35017:64;35073:7;35064:6;35053:9;35049:22;35017:64;:::i;:::-;35007:74;;34963:128;34747:351;;;;:::o;35104:85::-;35149:7;35178:5;35167:16;;35104:85;;;:::o;35195:158::-;35253:9;35286:61;35304:42;35313:32;35339:5;35313:32;:::i;:::-;35304:42;:::i;:::-;35286:61;:::i;:::-;35273:74;;35195:158;;;:::o;35359:147::-;35454:45;35493:5;35454:45;:::i;:::-;35449:3;35442:58;35359:147;;:::o;35512:114::-;35579:6;35613:5;35607:12;35597:22;;35512:114;;;:::o;35632:184::-;35731:11;35765:6;35760:3;35753:19;35805:4;35800:3;35796:14;35781:29;;35632:184;;;;:::o;35822:132::-;35889:4;35912:3;35904:11;;35942:4;35937:3;35933:14;35925:22;;35822:132;;;:::o;35960:108::-;36037:24;36055:5;36037:24;:::i;:::-;36032:3;36025:37;35960:108;;:::o;36074:179::-;36143:10;36164:46;36206:3;36198:6;36164:46;:::i;:::-;36242:4;36237:3;36233:14;36219:28;;36074:179;;;;:::o;36259:113::-;36329:4;36361;36356:3;36352:14;36344:22;;36259:113;;;:::o;36408:732::-;36527:3;36556:54;36604:5;36556:54;:::i;:::-;36626:86;36705:6;36700:3;36626:86;:::i;:::-;36619:93;;36736:56;36786:5;36736:56;:::i;:::-;36815:7;36846:1;36831:284;36856:6;36853:1;36850:13;36831:284;;;36932:6;36926:13;36959:63;37018:3;37003:13;36959:63;:::i;:::-;36952:70;;37045:60;37098:6;37045:60;:::i;:::-;37035:70;;36891:224;36878:1;36875;36871:9;36866:14;;36831:284;;;36835:14;37131:3;37124:10;;36532:608;;;36408:732;;;;:::o;37146:831::-;37409:4;37447:3;37436:9;37432:19;37424:27;;37461:71;37529:1;37518:9;37514:17;37505:6;37461:71;:::i;:::-;37542:80;37618:2;37607:9;37603:18;37594:6;37542:80;:::i;:::-;37669:9;37663:4;37659:20;37654:2;37643:9;37639:18;37632:48;37697:108;37800:4;37791:6;37697:108;:::i;:::-;37689:116;;37815:72;37883:2;37872:9;37868:18;37859:6;37815:72;:::i;:::-;37897:73;37965:3;37954:9;37950:19;37941:6;37897:73;:::i;:::-;37146:831;;;;;;;;:::o;37983:134::-;38041:9;38074:37;38105:5;38074:37;:::i;:::-;38061:50;;37983:134;;;:::o;38123:147::-;38218:45;38257:5;38218:45;:::i;:::-;38213:3;38206:58;38123:147;;:::o;38276:823::-;38533:4;38571:3;38560:9;38556:19;38548:27;;38585:71;38653:1;38642:9;38638:17;38629:6;38585:71;:::i;:::-;38666:72;38734:2;38723:9;38719:18;38710:6;38666:72;:::i;:::-;38748:80;38824:2;38813:9;38809:18;38800:6;38748:80;:::i;:::-;38838;38914:2;38903:9;38899:18;38890:6;38838:80;:::i;:::-;38928:81;39004:3;38993:9;38989:19;38980:6;38928:81;:::i;:::-;39019:73;39087:3;39076:9;39072:19;39063:6;39019:73;:::i;:::-;38276:823;;;;;;;;;:::o;39105:143::-;39162:5;39193:6;39187:13;39178:22;;39209:33;39236:5;39209:33;:::i;:::-;39105:143;;;;:::o;39254:663::-;39342:6;39350;39358;39407:2;39395:9;39386:7;39382:23;39378:32;39375:119;;;39413:79;;:::i;:::-;39375:119;39533:1;39558:64;39614:7;39605:6;39594:9;39590:22;39558:64;:::i;:::-;39548:74;;39504:128;39671:2;39697:64;39753:7;39744:6;39733:9;39729:22;39697:64;:::i;:::-;39687:74;;39642:129;39810:2;39836:64;39892:7;39883:6;39872:9;39868:22;39836:64;:::i;:::-;39826:74;;39781:129;39254:663;;;;;:::o

Swarm Source

ipfs://c9e6809b6ac8b1956f68a12f6e9f570dc9e41bfef1adaa06f092beb3613280bc

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.