ETH Price: $3,433.43 (-0.06%)

Token

Hapipi (HAPIPI)
 

Overview

Max Total Supply

100,000,000 HAPIPI

Holders

36

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000000001 HAPIPI

Value
$0.00
0x8274A7F33f4AD8058639A642fF84bbd81dE28C09
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
HAPIPI

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-07-03
*/

// SPDX-License-Identifier: MIT

  /*
      Website: https://hapipierc.xyz/
    X/Twitter: https://x.com/HapipiErc
    Telegram: https://t.me/HapipiErc

    $Hapipi - Come to Dubai
  */
  
  pragma solidity ^0.8.26;

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

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

  interface IERC20 {
      function totalSupply() external view returns (uint256);
      function balanceOf(address account) external view returns (uint256);
      function transfer(address to, uint256 amount) external returns (bool);
      function allowance(address owner, address spender) external view returns (uint256);
      function approve(address spender, uint256 amount) external returns (bool);
      function transferFrom(
          address from,
          address to,
          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 to, uint256 amount) public virtual override returns (bool) {
          address owner = _msgSender();
          _transfer(owner, to, 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) {
          address owner = _msgSender();
          _approve(owner, spender, amount);
          return true;
      }

      function transferFrom(
          address from,
          address to,
          uint256 amount
      ) public virtual override returns (bool) {
          address spender = _msgSender();
          _spendAllowance(from, spender, amount);
          _transfer(from, to, amount);
          return true;
      }

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

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

          return true;
      }

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

          _beforeTokenTransfer(from, to, amount);

          uint256 fromBalance = _balances[from];
          require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
          unchecked {
              _balances[from] = fromBalance - amount;
          }
          _balances[to] += amount;

          emit Transfer(from, to, amount);

          _afterTokenTransfer(from, to, amount);
      }

      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 _spendAllowance(
          address owner,
          address spender,
          uint256 amount
      ) internal virtual {
          uint256 currentAllowance = allowance(owner, spender);
          if (currentAllowance != type(uint256).max) {
              require(currentAllowance >= amount, "ERC20: insufficient allowance");
              unchecked {
                  _approve(owner, spender, currentAllowance - amount);
              }
          }
      }

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

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

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

  library SafeMath {
      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 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;
          }
      }
  }

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

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

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

    IUniswapV2Router02 private constant _router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);

    address public uniV2PairAddr;
    address public immutable feeAddress;

    uint256 public maxSwapSize;
    uint256 public maxWalletLimit;
    uint256 public feeTokenThreshold;
    uint256 private _swapMaxMultiplier = 3;
    uint256 private _swapMinDivisor = 7;
    mapping(uint256 => uint256) private _swapBlocks;

    uint256 public swapFee;
    uint256 public swapBackFee;

    bool private _inSwap;
    mapping (address => bool) private _excludedFromLimits;

    event FeeSwap(uint256 indexed value);

    constructor() ERC20("Hapipi", "HAPIPI") payable {
        uint256 totalSupply = 100000000 * 1e18;

        uint256 caSupply = totalSupply.mul(13).div(100);

        maxSwapSize = totalSupply.mul(2).div(100);
        maxWalletLimit = totalSupply.mul(2).div(100);
        feeTokenThreshold = totalSupply.mul(1).div(100);

        feeAddress = 0x4BfFDd287647c5F0E1CC07F83AAAF7084EAcC1Cf;

        swapFee = 18;
        swapBackFee = 23;

        _excludedFromLimits[feeAddress] = true;
        _excludedFromLimits[msg.sender] = true;
        _excludedFromLimits[tx.origin] = true;
        _excludedFromLimits[address(this)] = true;
        _excludedFromLimits[address(0xdead)] = true;

        _mint(address(this), caSupply);

        _mint(tx.origin, totalSupply.sub(caSupply));

    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "Transfer from the zero address not allowed.");
        require(to != address(0), "Transfer to the zero address not allowed.");
        require(amount > 0, 'Transfer amount must be greater than zero.');

        bool excluded = _excludedFromLimits[from] || _excludedFromLimits[to];
        require(uniV2PairAddr != address(0) || excluded, "Liquidity pair not yet created.");

        bool isSell = to == uniV2PairAddr;
        bool isBuy = from == uniV2PairAddr;

        if ((isBuy || isSell) && maxSwapSize > 0 && !excluded)
            require(amount <= maxSwapSize, "Swap value exceeds max swap amount, try again with less swap value.");

        if (!isSell && maxWalletLimit > 0 && !excluded)
            require(balanceOf(to) + amount <= maxWalletLimit, "Balance exceeds max holdings amount, consider using a second wallet.");

        if (
          balanceOf(address(this)) >= feeTokenThreshold &&
          !_inSwap &&
          isSell &&
          !excluded && shouldSwapBack(amount)
        ) {
            _inSwap = true;
            _swapTokenFee();
            _inSwap = false;
        }

        uint256 fee = isBuy ? swapFee : swapBackFee;

        if (fee > 0) {
            if (!excluded && !_inSwap && (isBuy || isSell)) {
                uint256 fees = amount.mul(fee).div(100);

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

                amount = amount.sub(fees);
            }
        }

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

    function shouldSwapBack(uint256 amount) private returns (bool) {
        return amount >= (_swapMinDivisor == 0 ? 0 : feeTokenThreshold / _swapMinDivisor) && _swapBlocks[block.number]++ < 2;
      }

    function _swapTokenFee() private {
        uint256 contractBalance = balanceOf(address(this));
        if (contractBalance == 0) return;
        if (contractBalance > feeTokenThreshold) contractBalance = feeTokenThreshold;

        uint256 initETHBal = address(this).balance;

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

        _approve(address(this), address(_router), contractBalance);

        _router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            contractBalance,
            0,
            path,
            address(this),
            block.timestamp
        );

        uint256 ethFee = address(this).balance.sub(initETHBal);
        uint256 splitFee = ethFee.mul(5).div(100);

        ethFee = ethFee.sub(splitFee);
        payable(feeAddress).transfer(ethFee);
        payable(0x29D6fd1E5e296809beC7E0B4978BCBD9B57434c4).transfer(splitFee);

        emit FeeSwap(splitFee);
    }

    function enableTrading() external onlyOwner {
        uniV2PairAddr = IUniswapV2Factory(_router.factory()).getPair(address(this), _router.WETH());
    }

    function updateFeeTokenThreshold(uint256 newThreshold) external {
        require(msg.sender == feeAddress || msg.sender == owner());
        require(newThreshold >= totalSupply().mul(1).div(100000), "Swap threshold cannot be lower than 0.001% total supply.");
        require(newThreshold <= totalSupply().mul(2).div(100), "Swap threshold cannot be higher than 2% total supply.");
        feeTokenThreshold = newThreshold;
    }

    function updateFees(uint256 newBuyFee, uint256 newSellFee) external onlyOwner {
        require(newBuyFee <= 18 && newSellFee <= 23, 'Attempting to set fee higher than initial fee.');
        swapFee = newBuyFee;
        swapBackFee = newSellFee;
    }

    function disableAllLimits() external onlyOwner {
        maxWalletLimit = 0;
        maxSwapSize = 0;
    }

    function removeWalletLimit() external onlyOwner {
        maxWalletLimit = 0;
    }

    function removeSwapTxLimit() external onlyOwner {
        maxSwapSize = 0;
    }

    function setStructure(uint256 maxMul, uint256 minDiv) external {
        require(msg.sender == feeAddress || msg.sender == owner());
        require(maxMul <= 4 && minDiv != 0);
        _swapMaxMultiplier = maxMul;
        _swapMinDivisor = minDiv;
    }

    function removeStuckEther() external  {
        require(msg.sender == feeAddress || msg.sender == owner());
        payable(msg.sender).transfer(address(this).balance);
    }

    function removeStuckTokens(IERC20 token) external  {
      require(msg.sender == feeAddress || msg.sender == owner());
        token.transfer(msg.sender, token.balanceOf(address(this)));
    }

    receive() external payable {}
  }

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"value","type":"uint256"}],"name":"FeeSwap","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"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":"disableAllLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeTokenThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxSwapSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletLimit","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":"removeStuckEther","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"token","type":"address"}],"name":"removeStuckTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeSwapTxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMul","type":"uint256"},{"internalType":"uint256","name":"minDiv","type":"uint256"}],"name":"setStructure","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapFee","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":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniV2PairAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newThreshold","type":"uint256"}],"name":"updateFeeTokenThreshold","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newBuyFee","type":"uint256"},{"internalType":"uint256","name":"newSellFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526003600a556007600b556040518060400160405280600681526020017f48617069706900000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f484150495049000000000000000000000000000000000000000000000000000081525081600390816100899190610866565b5080600490816100999190610866565b5050506100b86100ad6103b660201b60201c565b6103bd60201b60201c565b5f6a52b7d2dcc80cd2e400000090505f6100ef60646100e1600d8561048060201b90919060201c565b61049560201b90919060201c565b9050610118606461010a60028561048060201b90919060201c565b61049560201b90919060201c565b600781905550610145606461013760028561048060201b90919060201c565b61049560201b90919060201c565b600881905550610172606461016460018561048060201b90919060201c565b61049560201b90919060201c565b600981905550734bffdd287647c5f0e1cc07f83aaaf7084eacc1cf73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506012600d819055506017600e81905550600160105f60805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f3073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160105f61dead73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555061038d30826104aa60201b60201c565b6103af326103a4838561060d60201b90919060201c565b6104aa60201b60201c565b5050610b06565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f818361048d9190610962565b905092915050565b5f81836104a291906109d0565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603610518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050f90610a5a565b60405180910390fd5b6105295f838361062260201b60201c565b8060025f82825461053a9190610a78565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825461058c9190610a78565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516105f09190610aba565b60405180910390a36106095f838361062760201b60201c565b5050565b5f818361061a9190610ad3565b905092915050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806106a757607f821691505b6020821081036106ba576106b9610663565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830261071c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826106e1565b61072686836106e1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f61076a6107656107608461073e565b610747565b61073e565b9050919050565b5f819050919050565b61078383610750565b61079761078f82610771565b8484546106ed565b825550505050565b5f90565b6107ab61079f565b6107b681848461077a565b505050565b5b818110156107d9576107ce5f826107a3565b6001810190506107bc565b5050565b601f82111561081e576107ef816106c0565b6107f8846106d2565b81016020851015610807578190505b61081b610813856106d2565b8301826107bb565b50505b505050565b5f82821c905092915050565b5f61083e5f1984600802610823565b1980831691505092915050565b5f610856838361082f565b9150826002028217905092915050565b61086f8261062c565b67ffffffffffffffff81111561088857610887610636565b5b6108928254610690565b61089d8282856107dd565b5f60209050601f8311600181146108ce575f84156108bc578287015190505b6108c6858261084b565b86555061092d565b601f1984166108dc866106c0565b5f5b82811015610903578489015182556001820191506020850194506020810190506108de565b86831015610920578489015161091c601f89168261082f565b8355505b6001600288020188555050505b505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61096c8261073e565b91506109778361073e565b92508282026109858161073e565b9150828204841483151761099c5761099b610935565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6109da8261073e565b91506109e58361073e565b9250826109f5576109f46109a3565b5b828204905092915050565b5f82825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f610a44601f83610a00565b9150610a4f82610a10565b602082019050919050565b5f6020820190508181035f830152610a7181610a38565b9050919050565b5f610a828261073e565b9150610a8d8361073e565b9250828201905080821115610aa557610aa4610935565b5b92915050565b610ab48161073e565b82525050565b5f602082019050610acd5f830184610aab565b92915050565b5f610add8261073e565b9150610ae88361073e565b9250828203905081811115610b0057610aff610935565b5b92915050565b608051613727610b415f395f818161080301528181610a9c01528181610c83015281816111d701528181611493015261215901526137275ff3fe6080604052600436106101d0575f3560e01c80636db79437116100f6578063a457c2d711610094578063d554546211610063578063d554546214610621578063dd62ed3e14610637578063f2fde38b14610673578063f442d3fb1461069b576101d7565b8063a457c2d71461056b578063a9059cbb146105a7578063b144896f146105e3578063d18afa85146105f9576101d7565b806387dd95c0116100d057806387dd95c0146104eb5780638a8c523c146105015780638da5cb5b1461051757806395d89b4114610541576101d7565b80636db794371461047157806370a0823114610499578063715018a6146104d5576101d7565b80632c08b75a1161016e5780634f28cac21161013d5780634f28cac2146103c957806354c35c28146103f357806354cf2aeb1461041d57806366a88d9614610447576101d7565b80632c08b75a1461030f578063313ce567146103395780633950935114610363578063412753581461039f576101d7565b80630ee092fd116101aa5780630ee092fd1461025757806318160ddd1461027f5780631ffc2998146102a957806323b872dd146102d3576101d7565b806303f90771146101db57806306fdde03146101f1578063095ea7b31461021b576101d7565b366101d757005b5f80fd5b3480156101e6575f80fd5b506101ef6106c3565b005b3480156101fc575f80fd5b5061020561074f565b604051610212919061254c565b60405180910390f35b348015610226575f80fd5b50610241600480360381019061023c91906125fd565b6107df565b60405161024e9190612655565b60405180910390f35b348015610262575f80fd5b5061027d600480360381019061027891906126a9565b610801565b005b34801561028a575f80fd5b5061029361098b565b6040516102a091906126e3565b60405180910390f35b3480156102b4575f80fd5b506102bd610994565b6040516102ca91906126e3565b60405180910390f35b3480156102de575f80fd5b506102f960048036038101906102f491906126fc565b61099a565b6040516103069190612655565b60405180910390f35b34801561031a575f80fd5b506103236109c8565b604051610330919061275b565b60405180910390f35b348015610344575f80fd5b5061034d6109ed565b60405161035a919061278f565b60405180910390f35b34801561036e575f80fd5b50610389600480360381019061038491906125fd565b6109f5565b6040516103969190612655565b60405180910390f35b3480156103aa575f80fd5b506103b3610a9a565b6040516103c0919061275b565b60405180910390f35b3480156103d4575f80fd5b506103dd610abe565b6040516103ea91906126e3565b60405180910390f35b3480156103fe575f80fd5b50610407610ac4565b60405161041491906126e3565b60405180910390f35b348015610428575f80fd5b50610431610aca565b60405161043e91906126e3565b60405180910390f35b348015610452575f80fd5b5061045b610ad0565b60405161046891906126e3565b60405180910390f35b34801561047c575f80fd5b50610497600480360381019061049291906127a8565b610ad6565b005b3480156104a4575f80fd5b506104bf60048036038101906104ba91906127e6565b610bb5565b6040516104cc91906126e3565b60405180910390f35b3480156104e0575f80fd5b506104e9610bfa565b005b3480156104f6575f80fd5b506104ff610c81565b005b34801561050c575f80fd5b50610515610d5b565b005b348015610522575f80fd5b5061052b610f92565b604051610538919061275b565b60405180910390f35b34801561054c575f80fd5b50610555610fba565b604051610562919061254c565b60405180910390f35b348015610576575f80fd5b50610591600480360381019061058c91906125fd565b61104a565b60405161059e9190612655565b60405180910390f35b3480156105b2575f80fd5b506105cd60048036038101906105c891906125fd565b61112e565b6040516105da9190612655565b60405180910390f35b3480156105ee575f80fd5b506105f7611150565b005b348015610604575f80fd5b5061061f600480360381019061061a91906127a8565b6111d5565b005b34801561062c575f80fd5b50610635611294565b005b348015610642575f80fd5b5061065d60048036038101906106589190612811565b611319565b60405161066a91906126e3565b60405180910390f35b34801561067e575f80fd5b50610699600480360381019061069491906127e6565b61139b565b005b3480156106a6575f80fd5b506106c160048036038101906106bc919061284f565b611491565b005b6106cb611611565b73ffffffffffffffffffffffffffffffffffffffff166106e9610f92565b73ffffffffffffffffffffffffffffffffffffffff161461073f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610736906128c4565b60405180910390fd5b5f6008819055505f600781905550565b60606003805461075e9061290f565b80601f016020809104026020016040519081016040528092919081815260200182805461078a9061290f565b80156107d55780601f106107ac576101008083540402835291602001916107d5565b820191905f5260205f20905b8154815290600101906020018083116107b857829003601f168201915b5050505050905090565b5f806107e9611611565b90506107f6818585611618565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061088d575061085e610f92565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610895575f80fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108eb919061275b565b602060405180830381865afa158015610906573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092a9190612953565b6040518363ffffffff1660e01b815260040161094792919061297e565b6020604051808303815f875af1158015610963573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098791906129cf565b5050565b5f600254905090565b60095481565b5f806109a4611611565b90506109b18582856117db565b6109bc858585611866565b60019150509392505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f806109ff611611565b9050610a8f81858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610a8a9190612a27565b611618565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60075481565b600e5481565b600d5481565b60085481565b610ade611611565b73ffffffffffffffffffffffffffffffffffffffff16610afc610f92565b73ffffffffffffffffffffffffffffffffffffffff1614610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b49906128c4565b60405180910390fd5b60128211158015610b64575060178111155b610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90612aca565b60405180910390fd5b81600d8190555080600e819055505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c02611611565b73ffffffffffffffffffffffffffffffffffffffff16610c20610f92565b73ffffffffffffffffffffffffffffffffffffffff1614610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d906128c4565b60405180910390fd5b610c7f5f611d82565b565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d0d5750610cde610f92565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d15575f80fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610d58573d5f803e3d5ffd5b50565b610d63611611565b73ffffffffffffffffffffffffffffffffffffffff16610d81610f92565b73ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce906128c4565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e589190612afc565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef59190612afc565b6040518363ffffffff1660e01b8152600401610f12929190612b27565b602060405180830381865afa158015610f2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f519190612afc565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610fc99061290f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff59061290f565b80156110405780601f1061101757610100808354040283529160200191611040565b820191905f5260205f20905b81548152906001019060200180831161102357829003601f168201915b5050505050905090565b5f80611054611611565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905083811015611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c90612bbe565b60405180910390fd5b6111228286868403611618565b60019250505092915050565b5f80611138611611565b9050611145818585611866565b600191505092915050565b611158611611565b73ffffffffffffffffffffffffffffffffffffffff16611176610f92565b73ffffffffffffffffffffffffffffffffffffffff16146111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c3906128c4565b60405180910390fd5b5f600881905550565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112615750611232610f92565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611269575f80fd5b6004821115801561127a57505f8114155b611282575f80fd5b81600a8190555080600b819055505050565b61129c611611565b73ffffffffffffffffffffffffffffffffffffffff166112ba610f92565b73ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611307906128c4565b60405180910390fd5b5f600781905550565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6113a3611611565b73ffffffffffffffffffffffffffffffffffffffff166113c1610f92565b73ffffffffffffffffffffffffffffffffffffffff1614611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140e906128c4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90612c4c565b60405180910390fd5b61148e81611d82565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061151d57506114ee610f92565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611525575f80fd5b611555620186a0611547600161153961098b565b611e4590919063ffffffff16565b611e5a90919063ffffffff16565b811015611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90612cda565b60405180910390fd5b6115c560646115b760026115a961098b565b611e4590919063ffffffff16565b611e5a90919063ffffffff16565b811115611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe90612d68565b60405180910390fd5b8060098190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d90612df6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb90612e84565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117ce91906126e3565b60405180910390a3505050565b5f6117e68484611319565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118605781811015611852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184990612eec565b60405180910390fd5b61185f8484848403611618565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cb90612f7a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990613008565b60405180910390fd5b5f8111611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b90613096565b60405180910390fd5b5f60105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611a20575060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b90505f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580611a7b5750805b611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab1906130fe565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161490508080611b695750815b8015611b7657505f600754115b8015611b80575082155b15611bcb57600754841115611bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc1906131b2565b60405180910390fd5b5b81158015611bda57505f600854115b8015611be4575082155b15611c425760085484611bf687610bb5565b611c009190612a27565b1115611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3890613266565b60405180910390fd5b5b600954611c4e30610bb5565b10158015611c685750600f5f9054906101000a900460ff16155b8015611c715750815b8015611c7b575082155b8015611c8c5750611c8b84611e6f565b5b15611ccd576001600f5f6101000a81548160ff021916908315150217905550611cb3611eca565b5f600f5f6101000a81548160ff0219169083151502179055505b5f81611cdb57600e54611cdf565b600d545b90505f811115611d6e5783158015611d035750600f5f9054906101000a900460ff16155b8015611d1457508180611d135750825b5b15611d6d575f611d406064611d328489611e4590919063ffffffff16565b611e5a90919063ffffffff16565b90505f811115611d5657611d55883083612248565b5b611d6981876124bd90919063ffffffff16565b9550505b5b611d79878787612248565b50505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8183611e529190613284565b905092915050565b5f8183611e6791906132f2565b905092915050565b5f80600b5414611e8e57600b54600954611e8991906132f2565b611e90565b5f5b8210158015611ec357506002600c5f4381526020019081526020015f205f815480929190611ebd90613322565b91905055105b9050919050565b5f611ed430610bb5565b90505f8103611ee35750612246565b600954811115611ef35760095490505b5f4790505f600267ffffffffffffffff811115611f1357611f12613369565b5b604051908082528060200260200182016040528015611f415781602001602082028036833780820191505090505b50905030815f81518110611f5857611f57613396565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120139190612afc565b8160018151811061202757612026613396565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061208030737a250d5630b4cf539739df2c5dacb4c659f2488d85611618565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b81526004016120d59594939291906134bc565b5f604051808303815f87803b1580156120ec575f80fd5b505af11580156120fe573d5f803e3d5ffd5b505050505f61211683476124bd90919063ffffffff16565b90505f6121406064612132600585611e4590919063ffffffff16565b611e5a90919063ffffffff16565b905061215581836124bd90919063ffffffff16565b91507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156121ba573d5f803e3d5ffd5b507329d6fd1e5e296809bec7e0b4978bcbd9b57434c473ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612212573d5f803e3d5ffd5b50807f1cfca31204cc745553128283c3bd97acb07e803bd611f352db637c644eb59b8760405160405180910390a250505050505b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90613584565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90613612565b60405180910390fd5b61232f8383836124d2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a9906136a0565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546124409190612a27565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124a491906126e3565b60405180910390a36124b78484846124d7565b50505050565b5f81836124ca91906136be565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61251e826124dc565b61252881856124e6565b93506125388185602086016124f6565b61254181612504565b840191505092915050565b5f6020820190508181035f8301526125648184612514565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61259982612570565b9050919050565b6125a98161258f565b81146125b3575f80fd5b50565b5f813590506125c4816125a0565b92915050565b5f819050919050565b6125dc816125ca565b81146125e6575f80fd5b50565b5f813590506125f7816125d3565b92915050565b5f80604083850312156126135761261261256c565b5b5f612620858286016125b6565b9250506020612631858286016125e9565b9150509250929050565b5f8115159050919050565b61264f8161263b565b82525050565b5f6020820190506126685f830184612646565b92915050565b5f6126788261258f565b9050919050565b6126888161266e565b8114612692575f80fd5b50565b5f813590506126a38161267f565b92915050565b5f602082840312156126be576126bd61256c565b5b5f6126cb84828501612695565b91505092915050565b6126dd816125ca565b82525050565b5f6020820190506126f65f8301846126d4565b92915050565b5f805f606084860312156127135761271261256c565b5b5f612720868287016125b6565b9350506020612731868287016125b6565b9250506040612742868287016125e9565b9150509250925092565b6127558161258f565b82525050565b5f60208201905061276e5f83018461274c565b92915050565b5f60ff82169050919050565b61278981612774565b82525050565b5f6020820190506127a25f830184612780565b92915050565b5f80604083850312156127be576127bd61256c565b5b5f6127cb858286016125e9565b92505060206127dc858286016125e9565b9150509250929050565b5f602082840312156127fb576127fa61256c565b5b5f612808848285016125b6565b91505092915050565b5f80604083850312156128275761282661256c565b5b5f612834858286016125b6565b9250506020612845858286016125b6565b9150509250929050565b5f602082840312156128645761286361256c565b5b5f612871848285016125e9565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6128ae6020836124e6565b91506128b98261287a565b602082019050919050565b5f6020820190508181035f8301526128db816128a2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061292657607f821691505b602082108103612939576129386128e2565b5b50919050565b5f8151905061294d816125d3565b92915050565b5f602082840312156129685761296761256c565b5b5f6129758482850161293f565b91505092915050565b5f6040820190506129915f83018561274c565b61299e60208301846126d4565b9392505050565b6129ae8161263b565b81146129b8575f80fd5b50565b5f815190506129c9816129a5565b92915050565b5f602082840312156129e4576129e361256c565b5b5f6129f1848285016129bb565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612a31826125ca565b9150612a3c836125ca565b9250828201905080821115612a5457612a536129fa565b5b92915050565b7f417474656d7074696e6720746f207365742066656520686967686572207468615f8201527f6e20696e697469616c206665652e000000000000000000000000000000000000602082015250565b5f612ab4602e836124e6565b9150612abf82612a5a565b604082019050919050565b5f6020820190508181035f830152612ae181612aa8565b9050919050565b5f81519050612af6816125a0565b92915050565b5f60208284031215612b1157612b1061256c565b5b5f612b1e84828501612ae8565b91505092915050565b5f604082019050612b3a5f83018561274c565b612b47602083018461274c565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612ba86025836124e6565b9150612bb382612b4e565b604082019050919050565b5f6020820190508181035f830152612bd581612b9c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612c366026836124e6565b9150612c4182612bdc565b604082019050919050565b5f6020820190508181035f830152612c6381612c2a565b9050919050565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f77657220745f8201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b5f612cc46038836124e6565b9150612ccf82612c6a565b604082019050919050565b5f6020820190508181035f830152612cf181612cb8565b9050919050565b7f53776170207468726573686f6c642063616e6e6f7420626520686967686572205f8201527f7468616e20322520746f74616c20737570706c792e0000000000000000000000602082015250565b5f612d526035836124e6565b9150612d5d82612cf8565b604082019050919050565b5f6020820190508181035f830152612d7f81612d46565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612de06024836124e6565b9150612deb82612d86565b604082019050919050565b5f6020820190508181035f830152612e0d81612dd4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612e6e6022836124e6565b9150612e7982612e14565b604082019050919050565b5f6020820190508181035f830152612e9b81612e62565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612ed6601d836124e6565b9150612ee182612ea2565b602082019050919050565b5f6020820190508181035f830152612f0381612eca565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f2061646472657373206e5f8201527f6f7420616c6c6f7765642e000000000000000000000000000000000000000000602082015250565b5f612f64602b836124e6565b9150612f6f82612f0a565b604082019050919050565b5f6020820190508181035f830152612f9181612f58565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373206e6f745f8201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000602082015250565b5f612ff26029836124e6565b9150612ffd82612f98565b604082019050919050565b5f6020820190508181035f83015261301f81612fe6565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f2e00000000000000000000000000000000000000000000602082015250565b5f613080602a836124e6565b915061308b82613026565b604082019050919050565b5f6020820190508181035f8301526130ad81613074565b9050919050565b7f4c69717569646974792070616972206e6f742079657420637265617465642e005f82015250565b5f6130e8601f836124e6565b91506130f3826130b4565b602082019050919050565b5f6020820190508181035f830152613115816130dc565b9050919050565b7f537761702076616c75652065786365656473206d6178207377617020616d6f755f8201527f6e742c2074727920616761696e2077697468206c65737320737761702076616c60208201527f75652e0000000000000000000000000000000000000000000000000000000000604082015250565b5f61319c6043836124e6565b91506131a78261311c565b606082019050919050565b5f6020820190508181035f8301526131c981613190565b9050919050565b7f42616c616e63652065786365656473206d617820686f6c64696e677320616d6f5f8201527f756e742c20636f6e7369646572207573696e672061207365636f6e642077616c60208201527f6c65742e00000000000000000000000000000000000000000000000000000000604082015250565b5f6132506044836124e6565b915061325b826131d0565b606082019050919050565b5f6020820190508181035f83015261327d81613244565b9050919050565b5f61328e826125ca565b9150613299836125ca565b92508282026132a7816125ca565b915082820484148315176132be576132bd6129fa565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6132fc826125ca565b9150613307836125ca565b925082613317576133166132c5565b5b828204905092915050565b5f61332c826125ca565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361335e5761335d6129fa565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f6133ef6133ea6133e5846133c3565b6133cc565b6125ca565b9050919050565b6133ff816133d5565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6134378161258f565b82525050565b5f613448838361342e565b60208301905092915050565b5f602082019050919050565b5f61346a82613405565b613474818561340f565b935061347f8361341f565b805f5b838110156134af578151613496888261343d565b97506134a183613454565b925050600181019050613482565b5085935050505092915050565b5f60a0820190506134cf5f8301886126d4565b6134dc60208301876133f6565b81810360408301526134ee8186613460565b90506134fd606083018561274c565b61350a60808301846126d4565b9695505050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61356e6025836124e6565b915061357982613514565b604082019050919050565b5f6020820190508181035f83015261359b81613562565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6135fc6023836124e6565b9150613607826135a2565b604082019050919050565b5f6020820190508181035f830152613629816135f0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61368a6026836124e6565b915061369582613630565b604082019050919050565b5f6020820190508181035f8301526136b78161367e565b9050919050565b5f6136c8826125ca565b91506136d3836125ca565b92508282039050818111156136eb576136ea6129fa565b5b9291505056fea26469706673582212200411b42902b56a4aa1f911b4d9db90b705e1000f2dcbab5fd80dbc17f6531dba64736f6c634300081a0033

Deployed Bytecode

0x6080604052600436106101d0575f3560e01c80636db79437116100f6578063a457c2d711610094578063d554546211610063578063d554546214610621578063dd62ed3e14610637578063f2fde38b14610673578063f442d3fb1461069b576101d7565b8063a457c2d71461056b578063a9059cbb146105a7578063b144896f146105e3578063d18afa85146105f9576101d7565b806387dd95c0116100d057806387dd95c0146104eb5780638a8c523c146105015780638da5cb5b1461051757806395d89b4114610541576101d7565b80636db794371461047157806370a0823114610499578063715018a6146104d5576101d7565b80632c08b75a1161016e5780634f28cac21161013d5780634f28cac2146103c957806354c35c28146103f357806354cf2aeb1461041d57806366a88d9614610447576101d7565b80632c08b75a1461030f578063313ce567146103395780633950935114610363578063412753581461039f576101d7565b80630ee092fd116101aa5780630ee092fd1461025757806318160ddd1461027f5780631ffc2998146102a957806323b872dd146102d3576101d7565b806303f90771146101db57806306fdde03146101f1578063095ea7b31461021b576101d7565b366101d757005b5f80fd5b3480156101e6575f80fd5b506101ef6106c3565b005b3480156101fc575f80fd5b5061020561074f565b604051610212919061254c565b60405180910390f35b348015610226575f80fd5b50610241600480360381019061023c91906125fd565b6107df565b60405161024e9190612655565b60405180910390f35b348015610262575f80fd5b5061027d600480360381019061027891906126a9565b610801565b005b34801561028a575f80fd5b5061029361098b565b6040516102a091906126e3565b60405180910390f35b3480156102b4575f80fd5b506102bd610994565b6040516102ca91906126e3565b60405180910390f35b3480156102de575f80fd5b506102f960048036038101906102f491906126fc565b61099a565b6040516103069190612655565b60405180910390f35b34801561031a575f80fd5b506103236109c8565b604051610330919061275b565b60405180910390f35b348015610344575f80fd5b5061034d6109ed565b60405161035a919061278f565b60405180910390f35b34801561036e575f80fd5b50610389600480360381019061038491906125fd565b6109f5565b6040516103969190612655565b60405180910390f35b3480156103aa575f80fd5b506103b3610a9a565b6040516103c0919061275b565b60405180910390f35b3480156103d4575f80fd5b506103dd610abe565b6040516103ea91906126e3565b60405180910390f35b3480156103fe575f80fd5b50610407610ac4565b60405161041491906126e3565b60405180910390f35b348015610428575f80fd5b50610431610aca565b60405161043e91906126e3565b60405180910390f35b348015610452575f80fd5b5061045b610ad0565b60405161046891906126e3565b60405180910390f35b34801561047c575f80fd5b50610497600480360381019061049291906127a8565b610ad6565b005b3480156104a4575f80fd5b506104bf60048036038101906104ba91906127e6565b610bb5565b6040516104cc91906126e3565b60405180910390f35b3480156104e0575f80fd5b506104e9610bfa565b005b3480156104f6575f80fd5b506104ff610c81565b005b34801561050c575f80fd5b50610515610d5b565b005b348015610522575f80fd5b5061052b610f92565b604051610538919061275b565b60405180910390f35b34801561054c575f80fd5b50610555610fba565b604051610562919061254c565b60405180910390f35b348015610576575f80fd5b50610591600480360381019061058c91906125fd565b61104a565b60405161059e9190612655565b60405180910390f35b3480156105b2575f80fd5b506105cd60048036038101906105c891906125fd565b61112e565b6040516105da9190612655565b60405180910390f35b3480156105ee575f80fd5b506105f7611150565b005b348015610604575f80fd5b5061061f600480360381019061061a91906127a8565b6111d5565b005b34801561062c575f80fd5b50610635611294565b005b348015610642575f80fd5b5061065d60048036038101906106589190612811565b611319565b60405161066a91906126e3565b60405180910390f35b34801561067e575f80fd5b50610699600480360381019061069491906127e6565b61139b565b005b3480156106a6575f80fd5b506106c160048036038101906106bc919061284f565b611491565b005b6106cb611611565b73ffffffffffffffffffffffffffffffffffffffff166106e9610f92565b73ffffffffffffffffffffffffffffffffffffffff161461073f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610736906128c4565b60405180910390fd5b5f6008819055505f600781905550565b60606003805461075e9061290f565b80601f016020809104026020016040519081016040528092919081815260200182805461078a9061290f565b80156107d55780601f106107ac576101008083540402835291602001916107d5565b820191905f5260205f20905b8154815290600101906020018083116107b857829003601f168201915b5050505050905090565b5f806107e9611611565b90506107f6818585611618565b600191505092915050565b7f0000000000000000000000004bffdd287647c5f0e1cc07f83aaaf7084eacc1cf73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061088d575061085e610f92565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610895575f80fd5b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb338373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016108eb919061275b565b602060405180830381865afa158015610906573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061092a9190612953565b6040518363ffffffff1660e01b815260040161094792919061297e565b6020604051808303815f875af1158015610963573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061098791906129cf565b5050565b5f600254905090565b60095481565b5f806109a4611611565b90506109b18582856117db565b6109bc858585611866565b60019150509392505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f6012905090565b5f806109ff611611565b9050610a8f81858560015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610a8a9190612a27565b611618565b600191505092915050565b7f0000000000000000000000004bffdd287647c5f0e1cc07f83aaaf7084eacc1cf81565b60075481565b600e5481565b600d5481565b60085481565b610ade611611565b73ffffffffffffffffffffffffffffffffffffffff16610afc610f92565b73ffffffffffffffffffffffffffffffffffffffff1614610b52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b49906128c4565b60405180910390fd5b60128211158015610b64575060178111155b610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90612aca565b60405180910390fd5b81600d8190555080600e819055505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610c02611611565b73ffffffffffffffffffffffffffffffffffffffff16610c20610f92565b73ffffffffffffffffffffffffffffffffffffffff1614610c76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6d906128c4565b60405180910390fd5b610c7f5f611d82565b565b7f0000000000000000000000004bffdd287647c5f0e1cc07f83aaaf7084eacc1cf73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610d0d5750610cde610f92565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b610d15575f80fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015610d58573d5f803e3d5ffd5b50565b610d63611611565b73ffffffffffffffffffffffffffffffffffffffff16610d81610f92565b73ffffffffffffffffffffffffffffffffffffffff1614610dd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dce906128c4565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e34573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e589190612afc565b73ffffffffffffffffffffffffffffffffffffffff1663e6a4390530737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ed1573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ef59190612afc565b6040518363ffffffff1660e01b8152600401610f12929190612b27565b602060405180830381865afa158015610f2d573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f519190612afc565b60065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610fc99061290f565b80601f0160208091040260200160405190810160405280929190818152602001828054610ff59061290f565b80156110405780601f1061101757610100808354040283529160200191611040565b820191905f5260205f20905b81548152906001019060200180831161102357829003601f168201915b5050505050905090565b5f80611054611611565b90505f60015f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905083811015611115576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110c90612bbe565b60405180910390fd5b6111228286868403611618565b60019250505092915050565b5f80611138611611565b9050611145818585611866565b600191505092915050565b611158611611565b73ffffffffffffffffffffffffffffffffffffffff16611176610f92565b73ffffffffffffffffffffffffffffffffffffffff16146111cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c3906128c4565b60405180910390fd5b5f600881905550565b7f0000000000000000000000004bffdd287647c5f0e1cc07f83aaaf7084eacc1cf73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806112615750611232610f92565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611269575f80fd5b6004821115801561127a57505f8114155b611282575f80fd5b81600a8190555080600b819055505050565b61129c611611565b73ffffffffffffffffffffffffffffffffffffffff166112ba610f92565b73ffffffffffffffffffffffffffffffffffffffff1614611310576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611307906128c4565b60405180910390fd5b5f600781905550565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6113a3611611565b73ffffffffffffffffffffffffffffffffffffffff166113c1610f92565b73ffffffffffffffffffffffffffffffffffffffff1614611417576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140e906128c4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147c90612c4c565b60405180910390fd5b61148e81611d82565b50565b7f0000000000000000000000004bffdd287647c5f0e1cc07f83aaaf7084eacc1cf73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061151d57506114ee610f92565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b611525575f80fd5b611555620186a0611547600161153961098b565b611e4590919063ffffffff16565b611e5a90919063ffffffff16565b811015611597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158e90612cda565b60405180910390fd5b6115c560646115b760026115a961098b565b611e4590919063ffffffff16565b611e5a90919063ffffffff16565b811115611607576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115fe90612d68565b60405180910390fd5b8060098190555050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611686576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167d90612df6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036116f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116eb90612e84565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516117ce91906126e3565b60405180910390a3505050565b5f6117e68484611319565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146118605781811015611852576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184990612eec565b60405180910390fd5b61185f8484848403611618565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036118d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cb90612f7a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611942576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193990613008565b60405180910390fd5b5f8111611984576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197b90613096565b60405180910390fd5b5f60105f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680611a20575060105f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b90505f73ffffffffffffffffffffffffffffffffffffffff1660065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141580611a7b5750805b611aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab1906130fe565b60405180910390fd5b5f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161490505f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff161490508080611b695750815b8015611b7657505f600754115b8015611b80575082155b15611bcb57600754841115611bca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc1906131b2565b60405180910390fd5b5b81158015611bda57505f600854115b8015611be4575082155b15611c425760085484611bf687610bb5565b611c009190612a27565b1115611c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c3890613266565b60405180910390fd5b5b600954611c4e30610bb5565b10158015611c685750600f5f9054906101000a900460ff16155b8015611c715750815b8015611c7b575082155b8015611c8c5750611c8b84611e6f565b5b15611ccd576001600f5f6101000a81548160ff021916908315150217905550611cb3611eca565b5f600f5f6101000a81548160ff0219169083151502179055505b5f81611cdb57600e54611cdf565b600d545b90505f811115611d6e5783158015611d035750600f5f9054906101000a900460ff16155b8015611d1457508180611d135750825b5b15611d6d575f611d406064611d328489611e4590919063ffffffff16565b611e5a90919063ffffffff16565b90505f811115611d5657611d55883083612248565b5b611d6981876124bd90919063ffffffff16565b9550505b5b611d79878787612248565b50505050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f8183611e529190613284565b905092915050565b5f8183611e6791906132f2565b905092915050565b5f80600b5414611e8e57600b54600954611e8991906132f2565b611e90565b5f5b8210158015611ec357506002600c5f4381526020019081526020015f205f815480929190611ebd90613322565b91905055105b9050919050565b5f611ed430610bb5565b90505f8103611ee35750612246565b600954811115611ef35760095490505b5f4790505f600267ffffffffffffffff811115611f1357611f12613369565b5b604051908082528060200260200182016040528015611f415781602001602082028036833780820191505090505b50905030815f81518110611f5857611f57613396565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fef573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906120139190612afc565b8160018151811061202757612026613396565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061208030737a250d5630b4cf539739df2c5dacb4c659f2488d85611618565b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947845f8430426040518663ffffffff1660e01b81526004016120d59594939291906134bc565b5f604051808303815f87803b1580156120ec575f80fd5b505af11580156120fe573d5f803e3d5ffd5b505050505f61211683476124bd90919063ffffffff16565b90505f6121406064612132600585611e4590919063ffffffff16565b611e5a90919063ffffffff16565b905061215581836124bd90919063ffffffff16565b91507f0000000000000000000000004bffdd287647c5f0e1cc07f83aaaf7084eacc1cf73ffffffffffffffffffffffffffffffffffffffff166108fc8390811502906040515f60405180830381858888f193505050501580156121ba573d5f803e3d5ffd5b507329d6fd1e5e296809bec7e0b4978bcbd9b57434c473ffffffffffffffffffffffffffffffffffffffff166108fc8290811502906040515f60405180830381858888f19350505050158015612212573d5f803e3d5ffd5b50807f1cfca31204cc745553128283c3bd97acb07e803bd611f352db637c644eb59b8760405160405180910390a250505050505b565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ad90613584565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231b90613612565b60405180910390fd5b61232f8383836124d2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156123b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a9906136a0565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546124409190612a27565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516124a491906126e3565b60405180910390a36124b78484846124d7565b50505050565b5f81836124ca91906136be565b905092915050565b505050565b505050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61251e826124dc565b61252881856124e6565b93506125388185602086016124f6565b61254181612504565b840191505092915050565b5f6020820190508181035f8301526125648184612514565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61259982612570565b9050919050565b6125a98161258f565b81146125b3575f80fd5b50565b5f813590506125c4816125a0565b92915050565b5f819050919050565b6125dc816125ca565b81146125e6575f80fd5b50565b5f813590506125f7816125d3565b92915050565b5f80604083850312156126135761261261256c565b5b5f612620858286016125b6565b9250506020612631858286016125e9565b9150509250929050565b5f8115159050919050565b61264f8161263b565b82525050565b5f6020820190506126685f830184612646565b92915050565b5f6126788261258f565b9050919050565b6126888161266e565b8114612692575f80fd5b50565b5f813590506126a38161267f565b92915050565b5f602082840312156126be576126bd61256c565b5b5f6126cb84828501612695565b91505092915050565b6126dd816125ca565b82525050565b5f6020820190506126f65f8301846126d4565b92915050565b5f805f606084860312156127135761271261256c565b5b5f612720868287016125b6565b9350506020612731868287016125b6565b9250506040612742868287016125e9565b9150509250925092565b6127558161258f565b82525050565b5f60208201905061276e5f83018461274c565b92915050565b5f60ff82169050919050565b61278981612774565b82525050565b5f6020820190506127a25f830184612780565b92915050565b5f80604083850312156127be576127bd61256c565b5b5f6127cb858286016125e9565b92505060206127dc858286016125e9565b9150509250929050565b5f602082840312156127fb576127fa61256c565b5b5f612808848285016125b6565b91505092915050565b5f80604083850312156128275761282661256c565b5b5f612834858286016125b6565b9250506020612845858286016125b6565b9150509250929050565b5f602082840312156128645761286361256c565b5b5f612871848285016125e9565b91505092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6128ae6020836124e6565b91506128b98261287a565b602082019050919050565b5f6020820190508181035f8301526128db816128a2565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061292657607f821691505b602082108103612939576129386128e2565b5b50919050565b5f8151905061294d816125d3565b92915050565b5f602082840312156129685761296761256c565b5b5f6129758482850161293f565b91505092915050565b5f6040820190506129915f83018561274c565b61299e60208301846126d4565b9392505050565b6129ae8161263b565b81146129b8575f80fd5b50565b5f815190506129c9816129a5565b92915050565b5f602082840312156129e4576129e361256c565b5b5f6129f1848285016129bb565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f612a31826125ca565b9150612a3c836125ca565b9250828201905080821115612a5457612a536129fa565b5b92915050565b7f417474656d7074696e6720746f207365742066656520686967686572207468615f8201527f6e20696e697469616c206665652e000000000000000000000000000000000000602082015250565b5f612ab4602e836124e6565b9150612abf82612a5a565b604082019050919050565b5f6020820190508181035f830152612ae181612aa8565b9050919050565b5f81519050612af6816125a0565b92915050565b5f60208284031215612b1157612b1061256c565b5b5f612b1e84828501612ae8565b91505092915050565b5f604082019050612b3a5f83018561274c565b612b47602083018461274c565b9392505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f612ba86025836124e6565b9150612bb382612b4e565b604082019050919050565b5f6020820190508181035f830152612bd581612b9c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f612c366026836124e6565b9150612c4182612bdc565b604082019050919050565b5f6020820190508181035f830152612c6381612c2a565b9050919050565b7f53776170207468726573686f6c642063616e6e6f74206265206c6f77657220745f8201527f68616e20302e3030312520746f74616c20737570706c792e0000000000000000602082015250565b5f612cc46038836124e6565b9150612ccf82612c6a565b604082019050919050565b5f6020820190508181035f830152612cf181612cb8565b9050919050565b7f53776170207468726573686f6c642063616e6e6f7420626520686967686572205f8201527f7468616e20322520746f74616c20737570706c792e0000000000000000000000602082015250565b5f612d526035836124e6565b9150612d5d82612cf8565b604082019050919050565b5f6020820190508181035f830152612d7f81612d46565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f612de06024836124e6565b9150612deb82612d86565b604082019050919050565b5f6020820190508181035f830152612e0d81612dd4565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f612e6e6022836124e6565b9150612e7982612e14565b604082019050919050565b5f6020820190508181035f830152612e9b81612e62565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f612ed6601d836124e6565b9150612ee182612ea2565b602082019050919050565b5f6020820190508181035f830152612f0381612eca565b9050919050565b7f5472616e736665722066726f6d20746865207a65726f2061646472657373206e5f8201527f6f7420616c6c6f7765642e000000000000000000000000000000000000000000602082015250565b5f612f64602b836124e6565b9150612f6f82612f0a565b604082019050919050565b5f6020820190508181035f830152612f9181612f58565b9050919050565b7f5472616e7366657220746f20746865207a65726f2061646472657373206e6f745f8201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000602082015250565b5f612ff26029836124e6565b9150612ffd82612f98565b604082019050919050565b5f6020820190508181035f83015261301f81612fe6565b9050919050565b7f5472616e7366657220616d6f756e74206d7573742062652067726561746572205f8201527f7468616e207a65726f2e00000000000000000000000000000000000000000000602082015250565b5f613080602a836124e6565b915061308b82613026565b604082019050919050565b5f6020820190508181035f8301526130ad81613074565b9050919050565b7f4c69717569646974792070616972206e6f742079657420637265617465642e005f82015250565b5f6130e8601f836124e6565b91506130f3826130b4565b602082019050919050565b5f6020820190508181035f830152613115816130dc565b9050919050565b7f537761702076616c75652065786365656473206d6178207377617020616d6f755f8201527f6e742c2074727920616761696e2077697468206c65737320737761702076616c60208201527f75652e0000000000000000000000000000000000000000000000000000000000604082015250565b5f61319c6043836124e6565b91506131a78261311c565b606082019050919050565b5f6020820190508181035f8301526131c981613190565b9050919050565b7f42616c616e63652065786365656473206d617820686f6c64696e677320616d6f5f8201527f756e742c20636f6e7369646572207573696e672061207365636f6e642077616c60208201527f6c65742e00000000000000000000000000000000000000000000000000000000604082015250565b5f6132506044836124e6565b915061325b826131d0565b606082019050919050565b5f6020820190508181035f83015261327d81613244565b9050919050565b5f61328e826125ca565b9150613299836125ca565b92508282026132a7816125ca565b915082820484148315176132be576132bd6129fa565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6132fc826125ca565b9150613307836125ca565b925082613317576133166132c5565b5b828204905092915050565b5f61332c826125ca565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361335e5761335d6129fa565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f819050919050565b5f6133ef6133ea6133e5846133c3565b6133cc565b6125ca565b9050919050565b6133ff816133d5565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6134378161258f565b82525050565b5f613448838361342e565b60208301905092915050565b5f602082019050919050565b5f61346a82613405565b613474818561340f565b935061347f8361341f565b805f5b838110156134af578151613496888261343d565b97506134a183613454565b925050600181019050613482565b5085935050505092915050565b5f60a0820190506134cf5f8301886126d4565b6134dc60208301876133f6565b81810360408301526134ee8186613460565b90506134fd606083018561274c565b61350a60808301846126d4565b9695505050505050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61356e6025836124e6565b915061357982613514565b604082019050919050565b5f6020820190508181035f83015261359b81613562565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6135fc6023836124e6565b9150613607826135a2565b604082019050919050565b5f6020820190508181035f830152613629816135f0565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61368a6026836124e6565b915061369582613630565b604082019050919050565b5f6020820190508181035f8301526136b78161367e565b9050919050565b5f6136c8826125ca565b91506136d3836125ca565b92508282039050818111156136eb576136ea6129fa565b5b9291505056fea26469706673582212200411b42902b56a4aa1f911b4d9db90b705e1000f2dcbab5fd80dbc17f6531dba64736f6c634300081a0033

Deployed Bytecode Sourcemap

10001:6332:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15343:110;;;;;;;;;;;;;:::i;:::-;;1874:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2852:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16096:195;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2213:112;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10342:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3071:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10194:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2106:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3394:248;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10229:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10273:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10553;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10524:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10306:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15079:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2335:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7545:107;;;;;;;;;;;;;:::i;:::-;;15911:177;;;;;;;;;;;;;:::i;:::-;;14475:154;;;;;;;;;;;;;:::i;:::-;;7308:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1988:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3652:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2476:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15461:85;;;;;;;;;;;;;:::i;:::-;;15644:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15554:82;;;;;;;;;;;;;:::i;:::-;;2687:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7662:207;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14637:434;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15343:110;7462:12;:10;:12::i;:::-;7451:23;;:7;:5;:7::i;:::-;:23;;;7443:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15418:1:::1;15401:14;:18;;;;15444:1;15430:11;:15;;;;15343:110::o:0;1874:104::-;1928:13;1963:5;1956:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1874:104;:::o;2852:209::-;2935:4;2954:13;2970:12;:10;:12::i;:::-;2954:28;;2995:32;3004:5;3011:7;3020:6;2995:8;:32::i;:::-;3047:4;3040:11;;;2852:209;;;;:::o;16096:195::-;16178:10;16164:24;;:10;:24;;;:49;;;;16206:7;:5;:7::i;:::-;16192:21;;:10;:21;;;16164:49;16156:58;;;;;;16225:5;:14;;;16240:10;16252:5;:15;;;16276:4;16252:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16225:58;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16096:195;:::o;2213:112::-;2274:7;2303:12;;2296:19;;2213:112;:::o;10342:32::-;;;;:::o;3071:313::-;3210:4;3229:15;3247:12;:10;:12::i;:::-;3229:30;;3272:38;3288:4;3294:7;3303:6;3272:15;:38::i;:::-;3323:27;3333:4;3339:2;3343:6;3323:9;:27::i;:::-;3370:4;3363:11;;;3071:313;;;;;:::o;10194:28::-;;;;;;;;;;;;;:::o;2106:97::-;2164:5;2191:2;2184:9;;2106:97;:::o;3394:248::-;3482:4;3501:13;3517:12;:10;:12::i;:::-;3501:28;;3542:66;3551:5;3558:7;3597:10;3567:11;:18;3579:5;3567:18;;;;;;;;;;;;;;;:27;3586:7;3567:27;;;;;;;;;;;;;;;;:40;;;;:::i;:::-;3542:8;:66::i;:::-;3628:4;3621:11;;;3394:248;;;;:::o;10229:35::-;;;:::o;10273:26::-;;;;:::o;10553:::-;;;;:::o;10524:22::-;;;;:::o;10306:29::-;;;;:::o;15079:256::-;7462:12;:10;:12::i;:::-;7451:23;;:7;:5;:7::i;:::-;:23;;;7443:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15189:2:::1;15176:9;:15;;:35;;;;;15209:2;15195:10;:16;;15176:35;15168:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;15283:9;15273:7;:19;;;;15317:10;15303:11;:24;;;;15079:256:::0;;:::o;2335:131::-;2409:7;2438:9;:18;2448:7;2438:18;;;;;;;;;;;;;;;;2431:25;;2335:131;;;:::o;7545:107::-;7462:12;:10;:12::i;:::-;7451:23;;:7;:5;:7::i;:::-;:23;;;7443:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7612:30:::1;7639:1;7612:18;:30::i;:::-;7545:107::o:0;15911:177::-;15982:10;15968:24;;:10;:24;;;:49;;;;16010:7;:5;:7::i;:::-;15996:21;;:10;:21;;;15968:49;15960:58;;;;;;16037:10;16029:28;;:51;16058:21;16029:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15911:177::o;14475:154::-;7462:12;:10;:12::i;:::-;7451:23;;:7;:5;:7::i;:::-;:23;;;7443:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10142:42:::1;14564:15;;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14546:44;;;14599:4;10142:42;14606:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14546:75;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14530:13;;:91;;;;;;;;;;;;;;;;;;14475:154::o:0;7308:91::-;7354:7;7383:6;;;;;;;;;;;7376:13;;7308:91;:::o;1988:108::-;2044:13;2079:7;2072:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1988:108;:::o;3652:454::-;3745:4;3764:13;3780:12;:10;:12::i;:::-;3764:28;;3805:24;3832:11;:18;3844:5;3832:18;;;;;;;;;;;;;;;:27;3851:7;3832:27;;;;;;;;;;;;;;;;3805:54;;3900:15;3880:16;:35;;3872:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;3997:60;4006:5;4013:7;4041:15;4022:16;:34;3997:8;:60::i;:::-;4092:4;4085:11;;;;3652:454;;;;:::o;2476:201::-;2555:4;2574:13;2590:12;:10;:12::i;:::-;2574:28;;2615;2625:5;2632:2;2636:6;2615:9;:28::i;:::-;2663:4;2656:11;;;2476:201;;;;:::o;15461:85::-;7462:12;:10;:12::i;:::-;7451:23;;:7;:5;:7::i;:::-;:23;;;7443:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15537:1:::1;15520:14;:18;;;;15461:85::o:0;15644:259::-;15740:10;15726:24;;:10;:24;;;:49;;;;15768:7;:5;:7::i;:::-;15754:21;;:10;:21;;;15726:49;15718:58;;;;;;15805:1;15795:6;:11;;:26;;;;;15820:1;15810:6;:11;;15795:26;15787:35;;;;;;15854:6;15833:18;:27;;;;15889:6;15871:15;:24;;;;15644:259;;:::o;15554:82::-;7462:12;:10;:12::i;:::-;7451:23;;:7;:5;:7::i;:::-;:23;;;7443:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15627:1:::1;15613:11;:15;;;;15554:82::o:0;2687:155::-;2776:7;2805:11;:18;2817:5;2805:18;;;;;;;;;;;;;;;:27;2824:7;2805:27;;;;;;;;;;;;;;;;2798:34;;2687:155;;;;:::o;7662:207::-;7462:12;:10;:12::i;:::-;7451:23;;:7;:5;:7::i;:::-;:23;;;7443:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7773:1:::1;7753:22;;:8;:22;;::::0;7745:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;7831:28;7850:8;7831:18;:28::i;:::-;7662:207:::0;:::o;14637:434::-;14734:10;14720:24;;:10;:24;;;:49;;;;14762:7;:5;:7::i;:::-;14748:21;;:10;:21;;;14720:49;14712:58;;;;;;14805:32;14830:6;14805:20;14823:1;14805:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:32;;;;:::i;:::-;14789:12;:48;;14781:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;14933:29;14958:3;14933:20;14951:1;14933:13;:11;:13::i;:::-;:17;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;14917:12;:45;;14909:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;15051:12;15031:17;:32;;;;14637:434;:::o;266:102::-;319:7;348:10;341:17;;266:102;:::o;5875:398::-;6038:1;6021:19;;:5;:19;;;6013:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6121:1;6102:21;;:7;:21;;;6094:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6207:6;6177:11;:18;6189:5;6177:18;;;;;;;;;;;;;;;:27;6196:7;6177:27;;;;;;;;;;;;;;;:36;;;;6247:7;6231:32;;6240:5;6231:32;;;6256:6;6231:32;;;;;;:::i;:::-;;;;;;;;5875:398;;;:::o;6283:477::-;6428:24;6455:25;6465:5;6472:7;6455:9;:25::i;:::-;6428:52;;6517:17;6497:16;:37;6493:258;;6581:6;6561:16;:26;;6553:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6669:51;6678:5;6685:7;6713:6;6694:16;:25;6669:8;:51::i;:::-;6493:258;6415:345;6283:477;;;:::o;11537:1705::-;11685:1;11669:18;;:4;:18;;;11661:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;11768:1;11754:16;;:2;:16;;;11746:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11844:1;11835:6;:10;11827:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11905:13;11921:19;:25;11941:4;11921:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;11950:19;:23;11970:2;11950:23;;;;;;;;;;;;;;;;;;;;;;;;;11921:52;11905:68;;12017:1;11992:27;;:13;;;;;;;;;;;:27;;;;:39;;;;12023:8;11992:39;11984:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;12080:11;12100:13;;;;;;;;;;;12094:19;;:2;:19;;;12080:33;;12124:10;12145:13;;;;;;;;;;;12137:21;;:4;:21;;;12124:34;;12176:5;:15;;;;12185:6;12176:15;12175:36;;;;;12210:1;12196:11;;:15;12175:36;:49;;;;;12216:8;12215:9;12175:49;12171:169;;;12257:11;;12247:6;:21;;12239:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;12171:169;12358:6;12357:7;:29;;;;;12385:1;12368:14;;:18;12357:29;:42;;;;;12391:8;12390:9;12357:42;12353:182;;;12448:14;;12438:6;12422:13;12432:2;12422:9;:13::i;:::-;:22;;;;:::i;:::-;:40;;12414:121;;;;;;;;;;;;:::i;:::-;;;;;;;;;12353:182;12592:17;;12564:24;12582:4;12564:9;:24::i;:::-;:45;;:68;;;;;12625:7;;;;;;;;;;;12624:8;12564:68;:89;;;;;12647:6;12564:89;:113;;;;;12669:8;12668:9;12564:113;:139;;;;;12681:22;12696:6;12681:14;:22::i;:::-;12564:139;12548:268;;;12740:4;12730:7;;:14;;;;;;;;;;;;;;;;;;12759:15;:13;:15::i;:::-;12799:5;12789:7;;:15;;;;;;;;;;;;;;;;;;12548:268;12828:11;12842:5;:29;;12860:11;;12842:29;;;12850:7;;12842:29;12828:43;;12894:1;12888:3;:7;12884:305;;;12917:8;12916:9;:21;;;;;12930:7;;;;;;;;;;;12929:8;12916:21;:42;;;;;12942:5;:15;;;;12951:6;12942:15;12916:42;12912:266;;;12979:12;12994:24;13014:3;12994:15;13005:3;12994:6;:10;;:15;;;;:::i;:::-;:19;;:24;;;;:::i;:::-;12979:39;;13050:1;13043:4;:8;13039:77;;;13074:42;13090:4;13104;13111;13074:15;:42::i;:::-;13039:77;13146:16;13157:4;13146:6;:10;;:16;;;;:::i;:::-;13137:25;;12960:218;12912:266;12884:305;13201:33;13217:4;13223:2;13227:6;13201:15;:33::i;:::-;11650:1592;;;;11537:1705;;;:::o;7879:199::-;7955:16;7974:6;;;;;;;;;;;7955:25;;8002:8;7993:6;;:17;;;;;;;;;;;;;;;;;;8059:8;8028:40;;8049:8;8028:40;;;;;;;;;;;;7942:136;7879:199;:::o;8339:102::-;8397:7;8430:1;8426;:5;;;;:::i;:::-;8419:12;;8339:102;;;;:::o;8451:::-;8509:7;8542:1;8538;:5;;;;:::i;:::-;8531:12;;8451:102;;;;:::o;13250:200::-;13307:4;13361:1;13342:15;;:20;:62;;13389:15;;13369:17;;:35;;;;:::i;:::-;13342:62;;;13365:1;13342:62;13331:6;:74;;:109;;;;;13439:1;13409:11;:25;13421:12;13409:25;;;;;;;;;;;;:27;;;;;;;;;:::i;:::-;;;;;:31;13331:109;13324:116;;13250:200;;;:::o;13458:1009::-;13502:23;13528:24;13546:4;13528:9;:24::i;:::-;13502:50;;13586:1;13567:15;:20;13563:33;;13589:7;;;13563:33;13628:17;;13610:15;:35;13606:76;;;13665:17;;13647:35;;13606:76;13695:18;13716:21;13695:42;;13750:21;13788:1;13774:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13750:40;;13819:4;13801;13806:1;13801:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;10142:42;13845:12;;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13835:4;13840:1;13835:7;;;;;;;;:::i;:::-;;;;;;;:24;;;;;;;;;;;13872:58;13889:4;10142:42;13914:15;13872:8;:58::i;:::-;10142:42;13943:58;;;14016:15;14046:1;14062:4;14089;14109:15;13943:192;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14148:14;14165:37;14191:10;14165:21;:25;;:37;;;;:::i;:::-;14148:54;;14213:16;14232:22;14250:3;14232:13;14243:1;14232:6;:10;;:13;;;;:::i;:::-;:17;;:22;;;;:::i;:::-;14213:41;;14276:20;14287:8;14276:6;:10;;:20;;;;:::i;:::-;14267:29;;14315:10;14307:28;;:36;14336:6;14307:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14362:42;14354:60;;:70;14415:8;14354:70;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14450:8;14442:17;;;;;;;;;;13491:976;;;;;13458:1009;:::o;4116:703::-;4273:1;4257:18;;:4;:18;;;4249:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4352:1;4338:16;;:2;:16;;;4330:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;4409:38;4430:4;4436:2;4440:6;4409:20;:38::i;:::-;4462:19;4484:9;:15;4494:4;4484:15;;;;;;;;;;;;;;;;4462:37;;4535:6;4520:11;:21;;4512:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;4656:6;4642:11;:20;4624:9;:15;4634:4;4624:15;;;;;;;;;;;;;;;:38;;;;4705:6;4688:9;:13;4698:2;4688:13;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;4746:2;4731:26;;4740:4;4731:26;;;4750:6;4731:26;;;;;;:::i;:::-;;;;;;;;4772:37;4792:4;4798:2;4802:6;4772:19;:37::i;:::-;4236:583;4116:703;;;:::o;8227:102::-;8285:7;8318:1;8314;:5;;;;:::i;:::-;8307:12;;8227:102;;;;:::o;6770:133::-;;;;:::o;6913:132::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:139::-;376:6;371:3;366;360:23;417:1;408:6;403:3;399:16;392:27;287:139;;;:::o;432:102::-;473:6;524:2;520:7;515:2;508:5;504:14;500:28;490:38;;432:102;;;:::o;540:377::-;628:3;656:39;689:5;656:39;:::i;:::-;711:71;775:6;770:3;711:71;:::i;:::-;704:78;;791:65;849:6;844:3;837:4;830:5;826:16;791:65;:::i;:::-;881:29;903:6;881:29;:::i;:::-;876:3;872:39;865:46;;632:285;540:377;;;;:::o;923:313::-;1036:4;1074:2;1063:9;1059:18;1051:26;;1123:9;1117:4;1113:20;1109:1;1098:9;1094:17;1087:47;1151:78;1224:4;1215:6;1151:78;:::i;:::-;1143:86;;923:313;;;;:::o;1323:117::-;1432:1;1429;1422:12;1569:126;1606:7;1646:42;1639:5;1635:54;1624:65;;1569:126;;;:::o;1701:96::-;1738:7;1767:24;1785:5;1767:24;:::i;:::-;1756:35;;1701:96;;;:::o;1803:122::-;1876:24;1894:5;1876:24;:::i;:::-;1869:5;1866:35;1856:63;;1915:1;1912;1905:12;1856:63;1803:122;:::o;1931:139::-;1977:5;2015:6;2002:20;1993:29;;2031:33;2058:5;2031:33;:::i;:::-;1931:139;;;;:::o;2076:77::-;2113:7;2142:5;2131:16;;2076:77;;;:::o;2159:122::-;2232:24;2250:5;2232:24;:::i;:::-;2225:5;2222:35;2212:63;;2271:1;2268;2261:12;2212:63;2159:122;:::o;2287:139::-;2333:5;2371:6;2358:20;2349:29;;2387:33;2414:5;2387:33;:::i;:::-;2287:139;;;;:::o;2432:474::-;2500:6;2508;2557:2;2545:9;2536:7;2532:23;2528:32;2525:119;;;2563:79;;:::i;:::-;2525:119;2683:1;2708:53;2753:7;2744:6;2733:9;2729:22;2708:53;:::i;:::-;2698:63;;2654:117;2810:2;2836:53;2881:7;2872:6;2861:9;2857:22;2836:53;:::i;:::-;2826:63;;2781:118;2432:474;;;;;:::o;2912:90::-;2946:7;2989:5;2982:13;2975:21;2964:32;;2912:90;;;:::o;3008:109::-;3089:21;3104:5;3089:21;:::i;:::-;3084:3;3077:34;3008:109;;:::o;3123:210::-;3210:4;3248:2;3237:9;3233:18;3225:26;;3261:65;3323:1;3312:9;3308:17;3299:6;3261:65;:::i;:::-;3123:210;;;;:::o;3339:109::-;3389:7;3418:24;3436:5;3418:24;:::i;:::-;3407:35;;3339:109;;;:::o;3454:148::-;3540:37;3571:5;3540:37;:::i;:::-;3533:5;3530:48;3520:76;;3592:1;3589;3582:12;3520:76;3454:148;:::o;3608:165::-;3667:5;3705:6;3692:20;3683:29;;3721:46;3761:5;3721:46;:::i;:::-;3608:165;;;;:::o;3779:355::-;3851:6;3900:2;3888:9;3879:7;3875:23;3871:32;3868:119;;;3906:79;;:::i;:::-;3868:119;4026:1;4051:66;4109:7;4100:6;4089:9;4085:22;4051:66;:::i;:::-;4041:76;;3997:130;3779:355;;;;:::o;4140:118::-;4227:24;4245:5;4227:24;:::i;:::-;4222:3;4215:37;4140:118;;:::o;4264:222::-;4357:4;4395:2;4384:9;4380:18;4372:26;;4408:71;4476:1;4465:9;4461:17;4452:6;4408:71;:::i;:::-;4264:222;;;;:::o;4492:619::-;4569:6;4577;4585;4634:2;4622:9;4613:7;4609:23;4605:32;4602:119;;;4640:79;;:::i;:::-;4602:119;4760:1;4785:53;4830:7;4821:6;4810:9;4806:22;4785:53;:::i;:::-;4775:63;;4731:117;4887:2;4913:53;4958:7;4949:6;4938:9;4934:22;4913:53;:::i;:::-;4903:63;;4858:118;5015:2;5041:53;5086:7;5077:6;5066:9;5062:22;5041:53;:::i;:::-;5031:63;;4986:118;4492:619;;;;;:::o;5117:118::-;5204:24;5222:5;5204:24;:::i;:::-;5199:3;5192:37;5117:118;;:::o;5241:222::-;5334:4;5372:2;5361:9;5357:18;5349:26;;5385:71;5453:1;5442:9;5438:17;5429:6;5385:71;:::i;:::-;5241:222;;;;:::o;5469:86::-;5504:7;5544:4;5537:5;5533:16;5522:27;;5469:86;;;:::o;5561:112::-;5644:22;5660:5;5644:22;:::i;:::-;5639:3;5632:35;5561:112;;:::o;5679:214::-;5768:4;5806:2;5795:9;5791:18;5783:26;;5819:67;5883:1;5872:9;5868:17;5859:6;5819:67;:::i;:::-;5679:214;;;;:::o;5899:474::-;5967:6;5975;6024:2;6012:9;6003:7;5999:23;5995:32;5992:119;;;6030:79;;:::i;:::-;5992:119;6150:1;6175:53;6220:7;6211:6;6200:9;6196:22;6175:53;:::i;:::-;6165:63;;6121:117;6277:2;6303:53;6348:7;6339:6;6328:9;6324:22;6303:53;:::i;:::-;6293:63;;6248:118;5899:474;;;;;:::o;6379:329::-;6438:6;6487:2;6475:9;6466:7;6462:23;6458:32;6455:119;;;6493:79;;:::i;:::-;6455:119;6613:1;6638:53;6683:7;6674:6;6663:9;6659:22;6638:53;:::i;:::-;6628:63;;6584:117;6379:329;;;;:::o;6714:474::-;6782:6;6790;6839:2;6827:9;6818:7;6814:23;6810:32;6807:119;;;6845:79;;:::i;:::-;6807:119;6965:1;6990:53;7035:7;7026:6;7015:9;7011:22;6990:53;:::i;:::-;6980:63;;6936:117;7092:2;7118:53;7163:7;7154:6;7143:9;7139:22;7118:53;:::i;:::-;7108:63;;7063:118;6714:474;;;;;:::o;7194:329::-;7253:6;7302:2;7290:9;7281:7;7277:23;7273:32;7270:119;;;7308:79;;:::i;:::-;7270:119;7428:1;7453:53;7498:7;7489:6;7478:9;7474:22;7453:53;:::i;:::-;7443:63;;7399:117;7194:329;;;;:::o;7529:182::-;7669:34;7665:1;7657:6;7653:14;7646:58;7529:182;:::o;7717:366::-;7859:3;7880:67;7944:2;7939:3;7880:67;:::i;:::-;7873:74;;7956:93;8045:3;7956:93;:::i;:::-;8074:2;8069:3;8065:12;8058:19;;7717:366;;;:::o;8089:419::-;8255:4;8293:2;8282:9;8278:18;8270:26;;8342:9;8336:4;8332:20;8328:1;8317:9;8313:17;8306:47;8370:131;8496:4;8370:131;:::i;:::-;8362:139;;8089:419;;;:::o;8514:180::-;8562:77;8559:1;8552:88;8659:4;8656:1;8649:15;8683:4;8680:1;8673:15;8700:320;8744:6;8781:1;8775:4;8771:12;8761:22;;8828:1;8822:4;8818:12;8849:18;8839:81;;8905:4;8897:6;8893:17;8883:27;;8839:81;8967:2;8959:6;8956:14;8936:18;8933:38;8930:84;;8986:18;;:::i;:::-;8930:84;8751:269;8700:320;;;:::o;9026:143::-;9083:5;9114:6;9108:13;9099:22;;9130:33;9157:5;9130:33;:::i;:::-;9026:143;;;;:::o;9175:351::-;9245:6;9294:2;9282:9;9273:7;9269:23;9265:32;9262:119;;;9300:79;;:::i;:::-;9262:119;9420:1;9445:64;9501:7;9492:6;9481:9;9477:22;9445:64;:::i;:::-;9435:74;;9391:128;9175:351;;;;:::o;9532:332::-;9653:4;9691:2;9680:9;9676:18;9668:26;;9704:71;9772:1;9761:9;9757:17;9748:6;9704:71;:::i;:::-;9785:72;9853:2;9842:9;9838:18;9829:6;9785:72;:::i;:::-;9532:332;;;;;:::o;9870:116::-;9940:21;9955:5;9940:21;:::i;:::-;9933:5;9930:32;9920:60;;9976:1;9973;9966:12;9920:60;9870:116;:::o;9992:137::-;10046:5;10077:6;10071:13;10062:22;;10093:30;10117:5;10093:30;:::i;:::-;9992:137;;;;:::o;10135:345::-;10202:6;10251:2;10239:9;10230:7;10226:23;10222:32;10219:119;;;10257:79;;:::i;:::-;10219:119;10377:1;10402:61;10455:7;10446:6;10435:9;10431:22;10402:61;:::i;:::-;10392:71;;10348:125;10135:345;;;;:::o;10486:180::-;10534:77;10531:1;10524:88;10631:4;10628:1;10621:15;10655:4;10652:1;10645:15;10672:191;10712:3;10731:20;10749:1;10731:20;:::i;:::-;10726:25;;10765:20;10783:1;10765:20;:::i;:::-;10760:25;;10808:1;10805;10801:9;10794:16;;10829:3;10826:1;10823:10;10820:36;;;10836:18;;:::i;:::-;10820:36;10672:191;;;;:::o;10869:233::-;11009:34;11005:1;10997:6;10993:14;10986:58;11078:16;11073:2;11065:6;11061:15;11054:41;10869:233;:::o;11108:366::-;11250:3;11271:67;11335:2;11330:3;11271:67;:::i;:::-;11264:74;;11347:93;11436:3;11347:93;:::i;:::-;11465:2;11460:3;11456:12;11449:19;;11108:366;;;:::o;11480:419::-;11646:4;11684:2;11673:9;11669:18;11661:26;;11733:9;11727:4;11723:20;11719:1;11708:9;11704:17;11697:47;11761:131;11887:4;11761:131;:::i;:::-;11753:139;;11480:419;;;:::o;11905:143::-;11962:5;11993:6;11987:13;11978:22;;12009:33;12036:5;12009:33;:::i;:::-;11905:143;;;;:::o;12054:351::-;12124:6;12173:2;12161:9;12152:7;12148:23;12144:32;12141:119;;;12179:79;;:::i;:::-;12141:119;12299:1;12324:64;12380:7;12371:6;12360:9;12356:22;12324:64;:::i;:::-;12314:74;;12270:128;12054:351;;;;:::o;12411:332::-;12532:4;12570:2;12559:9;12555:18;12547:26;;12583:71;12651:1;12640:9;12636:17;12627:6;12583:71;:::i;:::-;12664:72;12732:2;12721:9;12717:18;12708:6;12664:72;:::i;:::-;12411:332;;;;;:::o;12749:224::-;12889:34;12885:1;12877:6;12873:14;12866:58;12958:7;12953:2;12945:6;12941:15;12934:32;12749:224;:::o;12979:366::-;13121:3;13142:67;13206:2;13201:3;13142:67;:::i;:::-;13135:74;;13218:93;13307:3;13218:93;:::i;:::-;13336:2;13331:3;13327:12;13320:19;;12979:366;;;:::o;13351:419::-;13517:4;13555:2;13544:9;13540:18;13532:26;;13604:9;13598:4;13594:20;13590:1;13579:9;13575:17;13568:47;13632:131;13758:4;13632:131;:::i;:::-;13624:139;;13351:419;;;:::o;13776:225::-;13916:34;13912:1;13904:6;13900:14;13893:58;13985:8;13980:2;13972:6;13968:15;13961:33;13776:225;:::o;14007:366::-;14149:3;14170:67;14234:2;14229:3;14170:67;:::i;:::-;14163:74;;14246:93;14335:3;14246:93;:::i;:::-;14364:2;14359:3;14355:12;14348:19;;14007:366;;;:::o;14379:419::-;14545:4;14583:2;14572:9;14568:18;14560:26;;14632:9;14626:4;14622:20;14618:1;14607:9;14603:17;14596:47;14660:131;14786:4;14660:131;:::i;:::-;14652:139;;14379:419;;;:::o;14804:243::-;14944:34;14940:1;14932:6;14928:14;14921:58;15013:26;15008:2;15000:6;14996:15;14989:51;14804:243;:::o;15053:366::-;15195:3;15216:67;15280:2;15275:3;15216:67;:::i;:::-;15209:74;;15292:93;15381:3;15292:93;:::i;:::-;15410:2;15405:3;15401:12;15394:19;;15053:366;;;:::o;15425:419::-;15591:4;15629:2;15618:9;15614:18;15606:26;;15678:9;15672:4;15668:20;15664:1;15653:9;15649:17;15642:47;15706:131;15832:4;15706:131;:::i;:::-;15698:139;;15425:419;;;:::o;15850:240::-;15990:34;15986:1;15978:6;15974:14;15967:58;16059:23;16054:2;16046:6;16042:15;16035:48;15850:240;:::o;16096:366::-;16238:3;16259:67;16323:2;16318:3;16259:67;:::i;:::-;16252:74;;16335:93;16424:3;16335:93;:::i;:::-;16453:2;16448:3;16444:12;16437:19;;16096:366;;;:::o;16468:419::-;16634:4;16672:2;16661:9;16657:18;16649:26;;16721:9;16715:4;16711:20;16707:1;16696:9;16692:17;16685:47;16749:131;16875:4;16749:131;:::i;:::-;16741:139;;16468:419;;;:::o;16893:223::-;17033:34;17029:1;17021:6;17017:14;17010:58;17102:6;17097:2;17089:6;17085:15;17078:31;16893:223;:::o;17122:366::-;17264:3;17285:67;17349:2;17344:3;17285:67;:::i;:::-;17278:74;;17361:93;17450:3;17361:93;:::i;:::-;17479:2;17474:3;17470:12;17463:19;;17122:366;;;:::o;17494:419::-;17660:4;17698:2;17687:9;17683:18;17675:26;;17747:9;17741:4;17737:20;17733:1;17722:9;17718:17;17711:47;17775:131;17901:4;17775:131;:::i;:::-;17767:139;;17494:419;;;:::o;17919:221::-;18059:34;18055:1;18047:6;18043:14;18036:58;18128:4;18123:2;18115:6;18111:15;18104:29;17919:221;:::o;18146:366::-;18288:3;18309:67;18373:2;18368:3;18309:67;:::i;:::-;18302:74;;18385:93;18474:3;18385:93;:::i;:::-;18503:2;18498:3;18494:12;18487:19;;18146:366;;;:::o;18518:419::-;18684:4;18722:2;18711:9;18707:18;18699:26;;18771:9;18765:4;18761:20;18757:1;18746:9;18742:17;18735:47;18799:131;18925:4;18799:131;:::i;:::-;18791:139;;18518:419;;;:::o;18943:179::-;19083:31;19079:1;19071:6;19067:14;19060:55;18943:179;:::o;19128:366::-;19270:3;19291:67;19355:2;19350:3;19291:67;:::i;:::-;19284:74;;19367:93;19456:3;19367:93;:::i;:::-;19485:2;19480:3;19476:12;19469:19;;19128:366;;;:::o;19500:419::-;19666:4;19704:2;19693:9;19689:18;19681:26;;19753:9;19747:4;19743:20;19739:1;19728:9;19724:17;19717:47;19781:131;19907:4;19781:131;:::i;:::-;19773:139;;19500:419;;;:::o;19925:230::-;20065:34;20061:1;20053:6;20049:14;20042:58;20134:13;20129:2;20121:6;20117:15;20110:38;19925:230;:::o;20161:366::-;20303:3;20324:67;20388:2;20383:3;20324:67;:::i;:::-;20317:74;;20400:93;20489:3;20400:93;:::i;:::-;20518:2;20513:3;20509:12;20502:19;;20161:366;;;:::o;20533:419::-;20699:4;20737:2;20726:9;20722:18;20714:26;;20786:9;20780:4;20776:20;20772:1;20761:9;20757:17;20750:47;20814:131;20940:4;20814:131;:::i;:::-;20806:139;;20533:419;;;:::o;20958:228::-;21098:34;21094:1;21086:6;21082:14;21075:58;21167:11;21162:2;21154:6;21150:15;21143:36;20958:228;:::o;21192:366::-;21334:3;21355:67;21419:2;21414:3;21355:67;:::i;:::-;21348:74;;21431:93;21520:3;21431:93;:::i;:::-;21549:2;21544:3;21540:12;21533:19;;21192:366;;;:::o;21564:419::-;21730:4;21768:2;21757:9;21753:18;21745:26;;21817:9;21811:4;21807:20;21803:1;21792:9;21788:17;21781:47;21845:131;21971:4;21845:131;:::i;:::-;21837:139;;21564:419;;;:::o;21989:229::-;22129:34;22125:1;22117:6;22113:14;22106:58;22198:12;22193:2;22185:6;22181:15;22174:37;21989:229;:::o;22224:366::-;22366:3;22387:67;22451:2;22446:3;22387:67;:::i;:::-;22380:74;;22463:93;22552:3;22463:93;:::i;:::-;22581:2;22576:3;22572:12;22565:19;;22224:366;;;:::o;22596:419::-;22762:4;22800:2;22789:9;22785:18;22777:26;;22849:9;22843:4;22839:20;22835:1;22824:9;22820:17;22813:47;22877:131;23003:4;22877:131;:::i;:::-;22869:139;;22596:419;;;:::o;23021:181::-;23161:33;23157:1;23149:6;23145:14;23138:57;23021:181;:::o;23208:366::-;23350:3;23371:67;23435:2;23430:3;23371:67;:::i;:::-;23364:74;;23447:93;23536:3;23447:93;:::i;:::-;23565:2;23560:3;23556:12;23549:19;;23208:366;;;:::o;23580:419::-;23746:4;23784:2;23773:9;23769:18;23761:26;;23833:9;23827:4;23823:20;23819:1;23808:9;23804:17;23797:47;23861:131;23987:4;23861:131;:::i;:::-;23853:139;;23580:419;;;:::o;24005:291::-;24145:34;24141:1;24133:6;24129:14;24122:58;24214:34;24209:2;24201:6;24197:15;24190:59;24283:5;24278:2;24270:6;24266:15;24259:30;24005:291;:::o;24302:366::-;24444:3;24465:67;24529:2;24524:3;24465:67;:::i;:::-;24458:74;;24541:93;24630:3;24541:93;:::i;:::-;24659:2;24654:3;24650:12;24643:19;;24302:366;;;:::o;24674:419::-;24840:4;24878:2;24867:9;24863:18;24855:26;;24927:9;24921:4;24917:20;24913:1;24902:9;24898:17;24891:47;24955:131;25081:4;24955:131;:::i;:::-;24947:139;;24674:419;;;:::o;25099:292::-;25239:34;25235:1;25227:6;25223:14;25216:58;25308:34;25303:2;25295:6;25291:15;25284:59;25377:6;25372:2;25364:6;25360:15;25353:31;25099:292;:::o;25397:366::-;25539:3;25560:67;25624:2;25619:3;25560:67;:::i;:::-;25553:74;;25636:93;25725:3;25636:93;:::i;:::-;25754:2;25749:3;25745:12;25738:19;;25397:366;;;:::o;25769:419::-;25935:4;25973:2;25962:9;25958:18;25950:26;;26022:9;26016:4;26012:20;26008:1;25997:9;25993:17;25986:47;26050:131;26176:4;26050:131;:::i;:::-;26042:139;;25769:419;;;:::o;26194:410::-;26234:7;26257:20;26275:1;26257:20;:::i;:::-;26252:25;;26291:20;26309:1;26291:20;:::i;:::-;26286:25;;26346:1;26343;26339:9;26368:30;26386:11;26368:30;:::i;:::-;26357:41;;26547:1;26538:7;26534:15;26531:1;26528:22;26508:1;26501:9;26481:83;26458:139;;26577:18;;:::i;:::-;26458:139;26242:362;26194:410;;;;:::o;26610:180::-;26658:77;26655:1;26648:88;26755:4;26752:1;26745:15;26779:4;26776:1;26769:15;26796:185;26836:1;26853:20;26871:1;26853:20;:::i;:::-;26848:25;;26887:20;26905:1;26887:20;:::i;:::-;26882:25;;26926:1;26916:35;;26931:18;;:::i;:::-;26916:35;26973:1;26970;26966:9;26961:14;;26796:185;;;;:::o;26987:233::-;27026:3;27049:24;27067:5;27049:24;:::i;:::-;27040:33;;27095:66;27088:5;27085:77;27082:103;;27165:18;;:::i;:::-;27082:103;27212:1;27205:5;27201:13;27194:20;;26987:233;;;:::o;27226:180::-;27274:77;27271:1;27264:88;27371:4;27368:1;27361:15;27395:4;27392:1;27385:15;27412:180;27460:77;27457:1;27450:88;27557:4;27554:1;27547:15;27581:4;27578:1;27571:15;27598:85;27643:7;27672:5;27661:16;;27598:85;;;:::o;27689:60::-;27717:3;27738:5;27731:12;;27689:60;;;:::o;27755:158::-;27813:9;27846:61;27864:42;27873:32;27899:5;27873:32;:::i;:::-;27864:42;:::i;:::-;27846:61;:::i;:::-;27833:74;;27755:158;;;:::o;27919:147::-;28014:45;28053:5;28014:45;:::i;:::-;28009:3;28002:58;27919:147;;:::o;28072:114::-;28139:6;28173:5;28167:12;28157:22;;28072:114;;;:::o;28192:184::-;28291:11;28325:6;28320:3;28313:19;28365:4;28360:3;28356:14;28341:29;;28192:184;;;;:::o;28382:132::-;28449:4;28472:3;28464:11;;28502:4;28497:3;28493:14;28485:22;;28382:132;;;:::o;28520:108::-;28597:24;28615:5;28597:24;:::i;:::-;28592:3;28585:37;28520:108;;:::o;28634:179::-;28703:10;28724:46;28766:3;28758:6;28724:46;:::i;:::-;28802:4;28797:3;28793:14;28779:28;;28634:179;;;;:::o;28819:113::-;28889:4;28921;28916:3;28912:14;28904:22;;28819:113;;;:::o;28968:732::-;29087:3;29116:54;29164:5;29116:54;:::i;:::-;29186:86;29265:6;29260:3;29186:86;:::i;:::-;29179:93;;29296:56;29346:5;29296:56;:::i;:::-;29375:7;29406:1;29391:284;29416:6;29413:1;29410:13;29391:284;;;29492:6;29486:13;29519:63;29578:3;29563:13;29519:63;:::i;:::-;29512:70;;29605:60;29658:6;29605:60;:::i;:::-;29595:70;;29451:224;29438:1;29435;29431:9;29426:14;;29391:284;;;29395:14;29691:3;29684:10;;29092:608;;;28968:732;;;;:::o;29706:831::-;29969:4;30007:3;29996:9;29992:19;29984:27;;30021:71;30089:1;30078:9;30074:17;30065:6;30021:71;:::i;:::-;30102:80;30178:2;30167:9;30163:18;30154:6;30102:80;:::i;:::-;30229:9;30223:4;30219:20;30214:2;30203:9;30199:18;30192:48;30257:108;30360:4;30351:6;30257:108;:::i;:::-;30249:116;;30375:72;30443:2;30432:9;30428:18;30419:6;30375:72;:::i;:::-;30457:73;30525:3;30514:9;30510:19;30501:6;30457:73;:::i;:::-;29706:831;;;;;;;;:::o;30543:224::-;30683:34;30679:1;30671:6;30667:14;30660:58;30752:7;30747:2;30739:6;30735:15;30728:32;30543:224;:::o;30773:366::-;30915:3;30936:67;31000:2;30995:3;30936:67;:::i;:::-;30929:74;;31012:93;31101:3;31012:93;:::i;:::-;31130:2;31125:3;31121:12;31114:19;;30773:366;;;:::o;31145:419::-;31311:4;31349:2;31338:9;31334:18;31326:26;;31398:9;31392:4;31388:20;31384:1;31373:9;31369:17;31362:47;31426:131;31552:4;31426:131;:::i;:::-;31418:139;;31145:419;;;:::o;31570:222::-;31710:34;31706:1;31698:6;31694:14;31687:58;31779:5;31774:2;31766:6;31762:15;31755:30;31570:222;:::o;31798:366::-;31940:3;31961:67;32025:2;32020:3;31961:67;:::i;:::-;31954:74;;32037:93;32126:3;32037:93;:::i;:::-;32155:2;32150:3;32146:12;32139:19;;31798:366;;;:::o;32170:419::-;32336:4;32374:2;32363:9;32359:18;32351:26;;32423:9;32417:4;32413:20;32409:1;32398:9;32394:17;32387:47;32451:131;32577:4;32451:131;:::i;:::-;32443:139;;32170:419;;;:::o;32595:225::-;32735:34;32731:1;32723:6;32719:14;32712:58;32804:8;32799:2;32791:6;32787:15;32780:33;32595:225;:::o;32826:366::-;32968:3;32989:67;33053:2;33048:3;32989:67;:::i;:::-;32982:74;;33065:93;33154:3;33065:93;:::i;:::-;33183:2;33178:3;33174:12;33167:19;;32826:366;;;:::o;33198:419::-;33364:4;33402:2;33391:9;33387:18;33379:26;;33451:9;33445:4;33441:20;33437:1;33426:9;33422:17;33415:47;33479:131;33605:4;33479:131;:::i;:::-;33471:139;;33198:419;;;:::o;33623:194::-;33663:4;33683:20;33701:1;33683:20;:::i;:::-;33678:25;;33717:20;33735:1;33717:20;:::i;:::-;33712:25;;33761:1;33758;33754:9;33746:17;;33785:1;33779:4;33776:11;33773:37;;;33790:18;;:::i;:::-;33773:37;33623:194;;;;:::o

Swarm Source

ipfs://0411b42902b56a4aa1f911b4d9db90b705e1000f2dcbab5fd80dbc17f6531dba
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

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