ERC-20
Overview
Max Total Supply
100,000,000,000 zkPT
Holders
77
Market
Price
$0.00 @ 0.000000 ETH
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
709,227,646.570461991234624178 zkPTValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
PolyTools
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at zkevm.polygonscan.com on 2023-03-28 */ /* __________ .__ ___________ .__ \______ \____ | | ___.__.\__ ___/___ ____ | | ______ | ___/ _ \| |< | | | | / _ \ / _ \| | / ___/ | | ( <_> ) |_\___ | | |( <_> | <_> ) |__\___ \ |____| \____/|____/ ____| |____| \____/ \____/|____/____ > \/ \/ PolyTools - First tool utility on Polygon's zkEVM. lets get down to business. https://t.me/PolyTools /* */// SPDX-License-Identifier: MIT pragma solidity ^0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface IMuteSwitchFactoryDynamic { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function protocolFeeFixed() external view returns (uint256); function protocolFeeDynamic() external view returns (uint256); function getPair(address tokenA, address tokenB, bool stable) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB, uint feeType, bool stable) external returns (address pair); function setFeeTo(address) external; function pairCodeHash() external pure returns (bytes32); } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _balances; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; string private _name; string private _symbol; /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _balances[account]; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _balances[recipient] = _balances[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _balances[account] = _balances[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IMuteSwitchRouterDynamic { function WETH() external view returns (address); function factory() external view returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline, uint feeType, bool stable ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline, uint feeType, bool stable ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool stable ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool stable ) external returns (uint amountToken, uint amountETH); function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool stable ) external returns (uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline, bool[] calldata stable ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline, bool[] calldata stable) external payable returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline, bool[] calldata stable) external returns (uint[] memory amounts); function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline, bool[] calldata stable ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline, bool[] calldata stable ) external; function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline, bool[] calldata stable ) external; function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, address tokenIn, address tokenOut) external view returns (uint amountOut, bool stable, uint fee); function getAmountsOutExpanded(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts, bool[] memory stable, uint[] memory fees); function getAmountsOut(uint amountIn, address[] calldata path, bool[] calldata stable) external view returns (uint[] memory amounts, bool[] memory _stable, uint[] memory fees); function getPairInfo(address[] calldata path, bool stable) external view returns(address tokenA, address tokenB, address pair, uint reserveA, uint reserveB, uint fee); } contract PolyTools is ERC20, Ownable { using SafeMath for uint256; IMuteSwitchRouterDynamic public uniswapV2Router; address public uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; address public devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = false; bool public tradingActive = false; bool public swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool public transferDelayEnabled = true; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public buyLiquidityFee; uint256 public buyDevFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public sellLiquidityFee; uint256 public sellDevFee; uint256 public tokensForMarketing; uint256 public tokensForLiquidity; uint256 public tokensForDev; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); constructor() ERC20("PolyTools", "zkPT") { uint256 _buyMarketingFee = 1; uint256 _buyLiquidityFee = 1; uint256 _buyDevFee = 1; uint256 _sellMarketingFee = 3; uint256 _sellLiquidityFee = 4; uint256 _sellDevFee = 2; uint256 totalSupply = 100000000000 * 1e18; maxTransactionAmount = totalSupply * 50 / 1000; // 0.5% maxTransactionAmountTxn maxWallet = totalSupply * 75 / 1000; // 2.5% maxWallet swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = address(0x024Cb6D68A4dE91072F571FCefBE88Ca482cc043); // set as marketing wallet devWallet = address(0x3387c846640397e75E2cf7a2CE6Cffd350EcdB89); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } function setPools(address pool) public onlyOwner { require(uniswapV2Pair == address(0x0)); IMuteSwitchRouterDynamic _uniswapV2Router = IMuteSwitchRouterDynamic(0xF6Ad3CcF71Abb3E12beCf6b3D2a74C963859ADCd); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = pool; excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { buyMarketingFee = _marketingFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; require(buyTotalFees <= 20, "Must keep fees at 20% or less"); } function updateSellFees(uint256 _marketingFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { sellMarketingFee = _marketingFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; require(sellTotalFees <= 25, "Must keep fees at 25% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); bool[] memory stable = new bool[](1); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp, stable ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable marketingWallet, block.timestamp, 0, false ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } function payout() public onlyOwner { payable(msg.sender).transfer(address(this).balance); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"}],"name":"setPools","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IMuteSwitchRouterDynamic","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600d60006101000a81548160ff0219169083151502179055506000600d60016101000a81548160ff0219169083151502179055506000600d60026101000a81548160ff0219169083151502179055506001600f60006101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600981526020017f506f6c79546f6f6c7300000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f7a6b5054000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000b44565b5080600490816200010d919062000b44565b5050506000620001226200043860201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35060006001905060006001905060006001905060006003905060006004905060006002905060006c01431e0fae6d7217caa000000090506103e860328262000209919062000c5a565b62000215919062000cd4565b600a819055506103e8604b826200022d919062000c5a565b62000239919062000cd4565b600c8190555061271060058262000251919062000c5a565b6200025d919062000cd4565b600b819055508660118190555085601281905550846013819055506013546012546011546200028d919062000d0c565b62000299919062000d0c565b601081905550836015819055508260168190555081601781905550601754601654601554620002c9919062000d0c565b620002d5919062000d0c565b60148190555073024cb6d68a4de91072f571fcefbe88ca482cc043600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550733387c846640397e75e2cf7a2ce6cffd350ecdb89600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003a7620003996200044060201b60201c565b60016200046a60201b60201c565b620003ba3060016200046a60201b60201c565b620003cf61dead60016200046a60201b60201c565b620003f1620003e36200044060201b60201c565b6001620005b760201b60201c565b62000404306001620005b760201b60201c565b6200041961dead6001620005b760201b60201c565b6200042b3382620006b460201b60201c565b5050505050505062000f16565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200047a6200043860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200050c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005039062000da8565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620005ab919062000de7565b60405180910390a25050565b620005c76200043860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000659576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006509062000da8565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000726576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200071d9062000e54565b60405180910390fd5b6200073a600083836200086260201b60201c565b62000756816002546200086760201b620028e81790919060201c565b600281905550620007b4816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546200086760201b620028e81790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000856919062000e87565b60405180910390a35050565b505050565b600080828462000878919062000d0c565b905083811015620008c0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b79062000ef4565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200094c57607f821691505b60208210810362000962576200096162000904565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620009cc7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200098d565b620009d886836200098d565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000a2562000a1f62000a1984620009f0565b620009fa565b620009f0565b9050919050565b6000819050919050565b62000a418362000a04565b62000a5962000a508262000a2c565b8484546200099a565b825550505050565b600090565b62000a7062000a61565b62000a7d81848462000a36565b505050565b5b8181101562000aa55762000a9960008262000a66565b60018101905062000a83565b5050565b601f82111562000af45762000abe8162000968565b62000ac9846200097d565b8101602085101562000ad9578190505b62000af162000ae8856200097d565b83018262000a82565b50505b505050565b600082821c905092915050565b600062000b196000198460080262000af9565b1980831691505092915050565b600062000b34838362000b06565b9150826002028217905092915050565b62000b4f82620008ca565b67ffffffffffffffff81111562000b6b5762000b6a620008d5565b5b62000b77825462000933565b62000b8482828562000aa9565b600060209050601f83116001811462000bbc576000841562000ba7578287015190505b62000bb3858262000b26565b86555062000c23565b601f19841662000bcc8662000968565b60005b8281101562000bf65784890151825560018201915060208501945060208101905062000bcf565b8683101562000c16578489015162000c12601f89168262000b06565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000c6782620009f0565b915062000c7483620009f0565b925082820262000c8481620009f0565b9150828204841483151762000c9e5762000c9d62000c2b565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ce182620009f0565b915062000cee83620009f0565b92508262000d015762000d0062000ca5565b5b828204905092915050565b600062000d1982620009f0565b915062000d2683620009f0565b925082820190508082111562000d415762000d4062000c2b565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000d9060208362000d47565b915062000d9d8262000d58565b602082019050919050565b6000602082019050818103600083015262000dc38162000d81565b9050919050565b60008115159050919050565b62000de18162000dca565b82525050565b600060208201905062000dfe600083018462000dd6565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000e3c601f8362000d47565b915062000e498262000e04565b602082019050919050565b6000602082019050818103600083015262000e6f8162000e2d565b9050919050565b62000e8181620009f0565b82525050565b600060208201905062000e9e600083018462000e76565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000edc601b8362000d47565b915062000ee98262000ea4565b602082019050919050565b6000602082019050818103600083015262000f0f8162000ecd565b9050919050565b6158f48062000f266000396000f3fe60806040526004361061036f5760003560e01c80638ea5220f116101c6578063c17b5b8c116100f7578063e2f4560511610095578063f245036e1161006f578063f245036e14610cad578063f2fde38b14610cd6578063f637434214610cff578063f8b45b0514610d2a57610376565b8063e2f4560514610c2c578063e884f26014610c57578063f11a24d314610c8257610376565b8063c8c8ebe4116100d1578063c8c8ebe414610b5c578063d257b34f14610b87578063d85ba06314610bc4578063dd62ed3e14610bef57610376565b8063c17b5b8c14610adf578063c18bc19514610b08578063c876d0b914610b3157610376565b8063a0d82dc511610164578063aacebbe31161013e578063aacebbe314610a25578063b62496f514610a4e578063bbc0c74214610a8b578063c024666814610ab657610376565b8063a0d82dc514610980578063a457c2d7146109ab578063a9059cbb146109e857610376565b806395d89b41116101a057806395d89b41146108d65780639a7a23d6146109015780639c3b4fdc1461092a5780639fccce321461095557610376565b80638ea5220f146108575780639213691314610882578063924de9b7146108ad57610376565b80634a62bb65116102a0578063751039fc1161023e5780637bce5a04116102185780637bce5a04146107c15780638095d564146107ec5780638a8c523c146108155780638da5cb5b1461082c57610376565b8063751039fc146107425780637571336a1461076d57806375f0a8741461079657610376565b80636a486a8e1161027a5780636a486a8e146106985780636ddd1713146106c357806370a08231146106ee578063715018a61461072b57610376565b80634a62bb65146106195780634fbee1931461064457806363bd1d4a1461068157610376565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f8351461055b578063313ce5671461058657806339509351146105b157806349bd5a5e146105ee57610376565b80631f3fed8f146104ca578063203e727e146104f557806323b872dd1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d55565b60405161039d91906143d0565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c8919061448b565b610de7565b6040516103da91906144e6565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614501565b610e05565b60405161041791906144e6565b60405180910390f35b34801561042c57600080fd5b50610435610e25565b604051610442919061458d565b60405180910390f35b34801561045757600080fd5b50610460610e4b565b60405161046d91906145b7565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614501565b610e55565b005b3480156104ab57600080fd5b506104b4610fac565b6040516104c191906145b7565b60405180910390f35b3480156104d657600080fd5b506104df610fb2565b6040516104ec91906145b7565b60405180910390f35b34801561050157600080fd5b5061051c600480360381019061051791906145d2565b610fb8565b005b34801561052a57600080fd5b50610545600480360381019061054091906145ff565b6110e2565b60405161055291906144e6565b60405180910390f35b34801561056757600080fd5b506105706111bb565b60405161057d9190614661565b60405180910390f35b34801561059257600080fd5b5061059b6111c1565b6040516105a89190614698565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d3919061448b565b6111ca565b6040516105e591906144e6565b60405180910390f35b3480156105fa57600080fd5b5061060361127d565b6040516106109190614661565b60405180910390f35b34801561062557600080fd5b5061062e6112a3565b60405161063b91906144e6565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190614501565b6112b6565b60405161067891906144e6565b60405180910390f35b34801561068d57600080fd5b5061069661130c565b005b3480156106a457600080fd5b506106ad6113ec565b6040516106ba91906145b7565b60405180910390f35b3480156106cf57600080fd5b506106d86113f2565b6040516106e591906144e6565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190614501565b611405565b60405161072291906145b7565b60405180910390f35b34801561073757600080fd5b5061074061144d565b005b34801561074e57600080fd5b506107576115a5565b60405161076491906144e6565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f91906146df565b611660565b005b3480156107a257600080fd5b506107ab611752565b6040516107b89190614661565b60405180910390f35b3480156107cd57600080fd5b506107d6611778565b6040516107e391906145b7565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e919061471f565b61177e565b005b34801561082157600080fd5b5061082a611898565b005b34801561083857600080fd5b50610841611967565b60405161084e9190614661565b60405180910390f35b34801561086357600080fd5b5061086c611991565b6040516108799190614661565b60405180910390f35b34801561088e57600080fd5b506108976119b7565b6040516108a491906145b7565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf9190614772565b6119bd565b005b3480156108e257600080fd5b506108eb611a71565b6040516108f891906143d0565b60405180910390f35b34801561090d57600080fd5b50610928600480360381019061092391906146df565b611b03565b005b34801561093657600080fd5b5061093f611c38565b60405161094c91906145b7565b60405180910390f35b34801561096157600080fd5b5061096a611c3e565b60405161097791906145b7565b60405180910390f35b34801561098c57600080fd5b50610995611c44565b6040516109a291906145b7565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd919061448b565b611c4a565b6040516109df91906144e6565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a919061448b565b611d17565b604051610a1c91906144e6565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190614501565b611d35565b005b348015610a5a57600080fd5b50610a756004803603810190610a709190614501565b611e8c565b604051610a8291906144e6565b60405180910390f35b348015610a9757600080fd5b50610aa0611eac565b604051610aad91906144e6565b60405180910390f35b348015610ac257600080fd5b50610add6004803603810190610ad891906146df565b611ebf565b005b348015610aeb57600080fd5b50610b066004803603810190610b01919061471f565b611fff565b005b348015610b1457600080fd5b50610b2f6004803603810190610b2a91906145d2565b612119565b005b348015610b3d57600080fd5b50610b46612243565b604051610b5391906144e6565b60405180910390f35b348015610b6857600080fd5b50610b71612256565b604051610b7e91906145b7565b60405180910390f35b348015610b9357600080fd5b50610bae6004803603810190610ba991906145d2565b61225c565b604051610bbb91906144e6565b60405180910390f35b348015610bd057600080fd5b50610bd96123cc565b604051610be691906145b7565b60405180910390f35b348015610bfb57600080fd5b50610c166004803603810190610c11919061479f565b6123d2565b604051610c2391906145b7565b60405180910390f35b348015610c3857600080fd5b50610c41612459565b604051610c4e91906145b7565b60405180910390f35b348015610c6357600080fd5b50610c6c61245f565b604051610c7991906144e6565b60405180910390f35b348015610c8e57600080fd5b50610c9761251a565b604051610ca491906145b7565b60405180910390f35b348015610cb957600080fd5b50610cd46004803603810190610ccf9190614501565b612520565b005b348015610ce257600080fd5b50610cfd6004803603810190610cf89190614501565b612716565b005b348015610d0b57600080fd5b50610d146128dc565b604051610d2191906145b7565b60405180910390f35b348015610d3657600080fd5b50610d3f6128e2565b604051610d4c91906145b7565b60405180910390f35b606060038054610d649061480e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d909061480e565b8015610ddd5780601f10610db257610100808354040283529160200191610ddd565b820191906000526020600020905b815481529060010190602001808311610dc057829003601f168201915b5050505050905090565b6000610dfb610df4612946565b848461294e565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610e5d612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee39061488b565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610fc0612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110469061488b565b60405180910390fd5b670de0b6b3a76400006103e86001611065610e4b565b61106f91906148da565b611079919061494b565b611083919061494b565b8110156110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc906149ee565b60405180910390fd5b670de0b6b3a7640000816110d991906148da565b600a8190555050565b60006110ef848484612b17565b6111b0846110fb612946565b6111ab8560405180606001604052806028815260200161587260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611161612946565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137b29092919063ffffffff16565b61294e565b600190509392505050565b61dead81565b60006012905090565b60006112736111d7612946565b8461126e85600160006111e8612946565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e890919063ffffffff16565b61294e565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611314612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a9061488b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156113e9573d6000803e3d6000fd5b50565b60145481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611455612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db9061488b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006115af612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461163e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116359061488b565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611668612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ee9061488b565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b611786612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c9061488b565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461183d9190614a0e565b6118479190614a0e565b60108190555060146010541115611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90614a8e565b60405180910390fd5b505050565b6118a0612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119269061488b565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6119c5612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b9061488b565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611a809061480e565b80601f0160208091040260200160405190810160405280929190818152602001828054611aac9061480e565b8015611af95780601f10611ace57610100808354040283529160200191611af9565b820191906000526020600020905b815481529060010190602001808311611adc57829003601f168201915b5050505050905090565b611b0b612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b919061488b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2190614b20565b60405180910390fd5b611c348282613816565b5050565b60135481565b601a5481565b60175481565b6000611d0d611c57612946565b84611d088560405180606001604052806025815260200161589a6025913960016000611c81612946565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137b29092919063ffffffff16565b61294e565b6001905092915050565b6000611d2b611d24612946565b8484612b17565b6001905092915050565b611d3d612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc39061488b565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611ec7612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4d9061488b565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ff391906144e6565b60405180910390a25050565b612007612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d9061488b565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546120be9190614a0e565b6120c89190614a0e565b60148190555060196014541115612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b90614b8c565b60405180910390fd5b505050565b612121612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a79061488b565b60405180910390fd5b670de0b6b3a76400006103e860056121c6610e4b565b6121d091906148da565b6121da919061494b565b6121e4919061494b565b811015612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d90614c1e565b60405180910390fd5b670de0b6b3a76400008161223a91906148da565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000612266612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ec9061488b565b60405180910390fd5b620186a06001612303610e4b565b61230d91906148da565b612317919061494b565b821015612359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235090614cb0565b60405180910390fd5b6103e86005612366610e4b565b61237091906148da565b61237a919061494b565b8211156123bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b390614d42565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000612469612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef9061488b565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b612528612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae9061488b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461261257600080fd5b600073f6ad3ccf71abb3e12becf6b3d2a74c963859adcd9050612636816001611660565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506126e5600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611660565b612712600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613816565b5050565b61271e612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a49061488b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361281c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281390614dd4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600c5481565b60008082846128f79190614a0e565b90508381101561293c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293390614e40565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490614ed2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2390614f64565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b0a91906145b7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7d90614ff6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bec90615088565b60405180910390fd5b60008103612c0e57612c09838360006138b7565b6137ad565b600d60009054906101000a900460ff16156132d557612c2b611967565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c995750612c69611967565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d0c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d255750600760149054906101000a900460ff16155b156132d457600d60019054906101000a900460ff16612e1f57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ddf5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e15906150f4565b60405180910390fd5b5b600f60009054906101000a900460ff1615612feb57612e3c611967565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ec55750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f1f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fea5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9c906151ac565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561308e5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561313557600a548111156130d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cf9061523e565b60405180910390fd5b600c546130e483611405565b826130ef9190614a0e565b1115613130576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613127906152aa565b60405180910390fd5b6132d3565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131d85750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561322757600a54811115613222576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132199061533c565b60405180910390fd5b6132d2565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132d157600c5461328483611405565b8261328f9190614a0e565b11156132d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c7906152aa565b60405180910390fd5b5b5b5b5b5b60006132e030611405565b90506000600b5482101590508080156133055750600d60029054906101000a900460ff165b801561331e5750600760149054906101000a900460ff16155b80156133745750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133ca5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134205750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613464576001600760146101000a81548160ff021916908315150217905550613448613b4a565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061351a5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561352457600090505b6000811561379d57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561358757506000601454115b15613654576135b460646135a660145488613e3190919063ffffffff16565b613eab90919063ffffffff16565b9050601454601654826135c791906148da565b6135d1919061494b565b601960008282546135e29190614a0e565b92505081905550601454601754826135fa91906148da565b613604919061494b565b601a60008282546136159190614a0e565b925050819055506014546015548261362d91906148da565b613637919061494b565b601860008282546136489190614a0e565b92505081905550613779565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136af57506000601054115b15613778576136dc60646136ce60105488613e3190919063ffffffff16565b613eab90919063ffffffff16565b9050601054601254826136ef91906148da565b6136f9919061494b565b6019600082825461370a9190614a0e565b925050819055506010546013548261372291906148da565b61372c919061494b565b601a600082825461373d9190614a0e565b925050819055506010546011548261375591906148da565b61375f919061494b565b601860008282546137709190614a0e565b925050819055505b5b600081111561378e5761378d8730836138b7565b5b808561379a919061535c565b94505b6137a88787876138b7565b505050505b505050565b60008383111582906137fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f191906143d0565b60405180910390fd5b5060008385613809919061535c565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391d90614ff6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398c90615088565b60405180910390fd5b6139a0838383613ef5565b613a0b8160405180606001604052806026815260200161584c602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137b29092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a9e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613b3d91906145b7565b60405180910390a3505050565b6000613b5530611405565b90506000601a54601854601954613b6c9190614a0e565b613b769190614a0e565b9050600080831480613b885750600082145b15613b9557505050613e2f565b6014600b54613ba491906148da565b831115613bbd576014600b54613bba91906148da565b92505b600060028360195486613bd091906148da565b613bda919061494b565b613be4919061494b565b90506000613bfb8286613efa90919063ffffffff16565b90506000479050613c0b82613f44565b6000613c208247613efa90919063ffffffff16565b90506000613c4b87613c3d60185485613e3190919063ffffffff16565b613eab90919063ffffffff16565b90506000613c7688613c68601a5486613e3190919063ffffffff16565b613eab90919063ffffffff16565b90506000818385613c87919061535c565b613c91919061535c565b9050600060198190555060006018819055506000601a81905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613cf1906153c1565b60006040518083038185875af1925050503d8060008114613d2e576040519150601f19603f3d011682016040523d82523d6000602084013e613d33565b606091505b505080985050600087118015613d495750600081115b15613d9657613d5887826141d8565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613d8d939291906153d6565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ddc906153c1565b60006040518083038185875af1925050503d8060008114613e19576040519150601f19603f3d011682016040523d82523d6000602084013e613e1e565b606091505b505080985050505050505050505050505b565b6000808303613e435760009050613ea5565b60008284613e5191906148da565b9050828482613e60919061494b565b14613ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e979061547f565b60405180910390fd5b809150505b92915050565b6000613eed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506142dd565b905092915050565b505050565b6000613f3c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506137b2565b905092915050565b6000600267ffffffffffffffff811115613f6157613f6061549f565b5b604051908082528060200260200182016040528015613f8f5781602001602082028036833780820191505090505b5090506000600167ffffffffffffffff811115613faf57613fae61549f565b5b604051908082528060200260200182016040528015613fdd5781602001602082028036833780820191505090505b5090503082600081518110613ff557613ff46154ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561409c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140c09190615512565b826001815181106140d4576140d36154ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061413b30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561294e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f464b16846000853042876040518763ffffffff1660e01b81526004016141a1969594939291906156f6565b600060405180830381600087803b1580156141bb57600080fd5b505af11580156141cf573d6000803e3d6000fd5b50505050505050565b61420530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461294e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a8e53ff823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426000806040518a63ffffffff1660e01b8152600401614293989796959493929190615765565b60606040518083038185885af11580156142b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142d691906157f8565b5050505050565b60008083118290614324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161431b91906143d0565b60405180910390fd5b5060008385614333919061494b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561437a57808201518184015260208101905061435f565b60008484015250505050565b6000601f19601f8301169050919050565b60006143a282614340565b6143ac818561434b565b93506143bc81856020860161435c565b6143c581614386565b840191505092915050565b600060208201905081810360008301526143ea8184614397565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614422826143f7565b9050919050565b61443281614417565b811461443d57600080fd5b50565b60008135905061444f81614429565b92915050565b6000819050919050565b61446881614455565b811461447357600080fd5b50565b6000813590506144858161445f565b92915050565b600080604083850312156144a2576144a16143f2565b5b60006144b085828601614440565b92505060206144c185828601614476565b9150509250929050565b60008115159050919050565b6144e0816144cb565b82525050565b60006020820190506144fb60008301846144d7565b92915050565b600060208284031215614517576145166143f2565b5b600061452584828501614440565b91505092915050565b6000819050919050565b600061455361454e614549846143f7565b61452e565b6143f7565b9050919050565b600061456582614538565b9050919050565b60006145778261455a565b9050919050565b6145878161456c565b82525050565b60006020820190506145a2600083018461457e565b92915050565b6145b181614455565b82525050565b60006020820190506145cc60008301846145a8565b92915050565b6000602082840312156145e8576145e76143f2565b5b60006145f684828501614476565b91505092915050565b600080600060608486031215614618576146176143f2565b5b600061462686828701614440565b935050602061463786828701614440565b925050604061464886828701614476565b9150509250925092565b61465b81614417565b82525050565b60006020820190506146766000830184614652565b92915050565b600060ff82169050919050565b6146928161467c565b82525050565b60006020820190506146ad6000830184614689565b92915050565b6146bc816144cb565b81146146c757600080fd5b50565b6000813590506146d9816146b3565b92915050565b600080604083850312156146f6576146f56143f2565b5b600061470485828601614440565b9250506020614715858286016146ca565b9150509250929050565b600080600060608486031215614738576147376143f2565b5b600061474686828701614476565b935050602061475786828701614476565b925050604061476886828701614476565b9150509250925092565b600060208284031215614788576147876143f2565b5b6000614796848285016146ca565b91505092915050565b600080604083850312156147b6576147b56143f2565b5b60006147c485828601614440565b92505060206147d585828601614440565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061482657607f821691505b602082108103614839576148386147df565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061487560208361434b565b91506148808261483f565b602082019050919050565b600060208201905081810360008301526148a481614868565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148e582614455565b91506148f083614455565b92508282026148fe81614455565b91508282048414831517614915576149146148ab565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061495682614455565b915061496183614455565b9250826149715761497061491c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006149d8602f8361434b565b91506149e38261497c565b604082019050919050565b60006020820190508181036000830152614a07816149cb565b9050919050565b6000614a1982614455565b9150614a2483614455565b9250828201905080821115614a3c57614a3b6148ab565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614a78601d8361434b565b9150614a8382614a42565b602082019050919050565b60006020820190508181036000830152614aa781614a6b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614b0a60398361434b565b9150614b1582614aae565b604082019050919050565b60006020820190508181036000830152614b3981614afd565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614b76601d8361434b565b9150614b8182614b40565b602082019050919050565b60006020820190508181036000830152614ba581614b69565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614c0860248361434b565b9150614c1382614bac565b604082019050919050565b60006020820190508181036000830152614c3781614bfb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c9a60358361434b565b9150614ca582614c3e565b604082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614d2c60348361434b565b9150614d3782614cd0565b604082019050919050565b60006020820190508181036000830152614d5b81614d1f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614dbe60268361434b565b9150614dc982614d62565b604082019050919050565b60006020820190508181036000830152614ded81614db1565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614e2a601b8361434b565b9150614e3582614df4565b602082019050919050565b60006020820190508181036000830152614e5981614e1d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ebc60248361434b565b9150614ec782614e60565b604082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f4e60228361434b565b9150614f5982614ef2565b604082019050919050565b60006020820190508181036000830152614f7d81614f41565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614fe060258361434b565b9150614feb82614f84565b604082019050919050565b6000602082019050818103600083015261500f81614fd3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061507260238361434b565b915061507d82615016565b604082019050919050565b600060208201905081810360008301526150a181615065565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150de60168361434b565b91506150e9826150a8565b602082019050919050565b6000602082019050818103600083015261510d816150d1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061519660498361434b565b91506151a182615114565b606082019050919050565b600060208201905081810360008301526151c581615189565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061522860358361434b565b9150615233826151cc565b604082019050919050565b600060208201905081810360008301526152578161521b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061529460138361434b565b915061529f8261525e565b602082019050919050565b600060208201905081810360008301526152c381615287565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061532660368361434b565b9150615331826152ca565b604082019050919050565b6000602082019050818103600083015261535581615319565b9050919050565b600061536782614455565b915061537283614455565b925082820390508181111561538a576153896148ab565b5b92915050565b600081905092915050565b50565b60006153ab600083615390565b91506153b68261539b565b600082019050919050565b60006153cc8261539e565b9150819050919050565b60006060820190506153eb60008301866145a8565b6153f860208301856145a8565b61540560408301846145a8565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061546960218361434b565b91506154748261540d565b604082019050919050565b600060208201905081810360008301526154988161545c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061550c81614429565b92915050565b600060208284031215615528576155276143f2565b5b6000615536848285016154fd565b91505092915050565b6000819050919050565b600061556461555f61555a8461553f565b61452e565b614455565b9050919050565b61557481615549565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6155af81614417565b82525050565b60006155c183836155a6565b60208301905092915050565b6000602082019050919050565b60006155e58261557a565b6155ef8185615585565b93506155fa83615596565b8060005b8381101561562b57815161561288826155b5565b975061561d836155cd565b9250506001810190506155fe565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61566d816144cb565b82525050565b600061567f8383615664565b60208301905092915050565b6000602082019050919050565b60006156a382615638565b6156ad8185615643565b93506156b883615654565b8060005b838110156156e95781516156d08882615673565b97506156db8361568b565b9250506001810190506156bc565b5085935050505092915050565b600060c08201905061570b60008301896145a8565b615718602083018861556b565b818103604083015261572a81876155da565b90506157396060830186614652565b61574660808301856145a8565b81810360a08301526157588184615698565b9050979650505050505050565b60006101008201905061577b600083018b614652565b615788602083018a6145a8565b615795604083018961556b565b6157a2606083018861556b565b6157af6080830187614652565b6157bc60a08301866145a8565b6157c960c083018561556b565b6157d660e08301846144d7565b9998505050505050505050565b6000815190506157f28161445f565b92915050565b600080600060608486031215615811576158106143f2565b5b600061581f868287016157e3565b9350506020615830868287016157e3565b9250506040615841868287016157e3565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204437e0ad83cf6486bde5cd141fc6e3b87d1a14dc5ffab7c81bfb5e675f91bd8264736f6c63430008120033
Deployed Bytecode
0x60806040526004361061036f5760003560e01c80638ea5220f116101c6578063c17b5b8c116100f7578063e2f4560511610095578063f245036e1161006f578063f245036e14610cad578063f2fde38b14610cd6578063f637434214610cff578063f8b45b0514610d2a57610376565b8063e2f4560514610c2c578063e884f26014610c57578063f11a24d314610c8257610376565b8063c8c8ebe4116100d1578063c8c8ebe414610b5c578063d257b34f14610b87578063d85ba06314610bc4578063dd62ed3e14610bef57610376565b8063c17b5b8c14610adf578063c18bc19514610b08578063c876d0b914610b3157610376565b8063a0d82dc511610164578063aacebbe31161013e578063aacebbe314610a25578063b62496f514610a4e578063bbc0c74214610a8b578063c024666814610ab657610376565b8063a0d82dc514610980578063a457c2d7146109ab578063a9059cbb146109e857610376565b806395d89b41116101a057806395d89b41146108d65780639a7a23d6146109015780639c3b4fdc1461092a5780639fccce321461095557610376565b80638ea5220f146108575780639213691314610882578063924de9b7146108ad57610376565b80634a62bb65116102a0578063751039fc1161023e5780637bce5a04116102185780637bce5a04146107c15780638095d564146107ec5780638a8c523c146108155780638da5cb5b1461082c57610376565b8063751039fc146107425780637571336a1461076d57806375f0a8741461079657610376565b80636a486a8e1161027a5780636a486a8e146106985780636ddd1713146106c357806370a08231146106ee578063715018a61461072b57610376565b80634a62bb65146106195780634fbee1931461064457806363bd1d4a1461068157610376565b80631f3fed8f1161030d57806327c8f835116102e757806327c8f8351461055b578063313ce5671461058657806339509351146105b157806349bd5a5e146105ee57610376565b80631f3fed8f146104ca578063203e727e146104f557806323b872dd1461051e57610376565b80631694505e116103495780631694505e1461042057806318160ddd1461044b5780631816467f146104765780631a8145bb1461049f57610376565b806306fdde031461037b578063095ea7b3146103a657806310d5de53146103e357610376565b3661037657005b600080fd5b34801561038757600080fd5b50610390610d55565b60405161039d91906143d0565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c8919061448b565b610de7565b6040516103da91906144e6565b60405180910390f35b3480156103ef57600080fd5b5061040a60048036038101906104059190614501565b610e05565b60405161041791906144e6565b60405180910390f35b34801561042c57600080fd5b50610435610e25565b604051610442919061458d565b60405180910390f35b34801561045757600080fd5b50610460610e4b565b60405161046d91906145b7565b60405180910390f35b34801561048257600080fd5b5061049d60048036038101906104989190614501565b610e55565b005b3480156104ab57600080fd5b506104b4610fac565b6040516104c191906145b7565b60405180910390f35b3480156104d657600080fd5b506104df610fb2565b6040516104ec91906145b7565b60405180910390f35b34801561050157600080fd5b5061051c600480360381019061051791906145d2565b610fb8565b005b34801561052a57600080fd5b50610545600480360381019061054091906145ff565b6110e2565b60405161055291906144e6565b60405180910390f35b34801561056757600080fd5b506105706111bb565b60405161057d9190614661565b60405180910390f35b34801561059257600080fd5b5061059b6111c1565b6040516105a89190614698565b60405180910390f35b3480156105bd57600080fd5b506105d860048036038101906105d3919061448b565b6111ca565b6040516105e591906144e6565b60405180910390f35b3480156105fa57600080fd5b5061060361127d565b6040516106109190614661565b60405180910390f35b34801561062557600080fd5b5061062e6112a3565b60405161063b91906144e6565b60405180910390f35b34801561065057600080fd5b5061066b60048036038101906106669190614501565b6112b6565b60405161067891906144e6565b60405180910390f35b34801561068d57600080fd5b5061069661130c565b005b3480156106a457600080fd5b506106ad6113ec565b6040516106ba91906145b7565b60405180910390f35b3480156106cf57600080fd5b506106d86113f2565b6040516106e591906144e6565b60405180910390f35b3480156106fa57600080fd5b5061071560048036038101906107109190614501565b611405565b60405161072291906145b7565b60405180910390f35b34801561073757600080fd5b5061074061144d565b005b34801561074e57600080fd5b506107576115a5565b60405161076491906144e6565b60405180910390f35b34801561077957600080fd5b50610794600480360381019061078f91906146df565b611660565b005b3480156107a257600080fd5b506107ab611752565b6040516107b89190614661565b60405180910390f35b3480156107cd57600080fd5b506107d6611778565b6040516107e391906145b7565b60405180910390f35b3480156107f857600080fd5b50610813600480360381019061080e919061471f565b61177e565b005b34801561082157600080fd5b5061082a611898565b005b34801561083857600080fd5b50610841611967565b60405161084e9190614661565b60405180910390f35b34801561086357600080fd5b5061086c611991565b6040516108799190614661565b60405180910390f35b34801561088e57600080fd5b506108976119b7565b6040516108a491906145b7565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf9190614772565b6119bd565b005b3480156108e257600080fd5b506108eb611a71565b6040516108f891906143d0565b60405180910390f35b34801561090d57600080fd5b50610928600480360381019061092391906146df565b611b03565b005b34801561093657600080fd5b5061093f611c38565b60405161094c91906145b7565b60405180910390f35b34801561096157600080fd5b5061096a611c3e565b60405161097791906145b7565b60405180910390f35b34801561098c57600080fd5b50610995611c44565b6040516109a291906145b7565b60405180910390f35b3480156109b757600080fd5b506109d260048036038101906109cd919061448b565b611c4a565b6040516109df91906144e6565b60405180910390f35b3480156109f457600080fd5b50610a0f6004803603810190610a0a919061448b565b611d17565b604051610a1c91906144e6565b60405180910390f35b348015610a3157600080fd5b50610a4c6004803603810190610a479190614501565b611d35565b005b348015610a5a57600080fd5b50610a756004803603810190610a709190614501565b611e8c565b604051610a8291906144e6565b60405180910390f35b348015610a9757600080fd5b50610aa0611eac565b604051610aad91906144e6565b60405180910390f35b348015610ac257600080fd5b50610add6004803603810190610ad891906146df565b611ebf565b005b348015610aeb57600080fd5b50610b066004803603810190610b01919061471f565b611fff565b005b348015610b1457600080fd5b50610b2f6004803603810190610b2a91906145d2565b612119565b005b348015610b3d57600080fd5b50610b46612243565b604051610b5391906144e6565b60405180910390f35b348015610b6857600080fd5b50610b71612256565b604051610b7e91906145b7565b60405180910390f35b348015610b9357600080fd5b50610bae6004803603810190610ba991906145d2565b61225c565b604051610bbb91906144e6565b60405180910390f35b348015610bd057600080fd5b50610bd96123cc565b604051610be691906145b7565b60405180910390f35b348015610bfb57600080fd5b50610c166004803603810190610c11919061479f565b6123d2565b604051610c2391906145b7565b60405180910390f35b348015610c3857600080fd5b50610c41612459565b604051610c4e91906145b7565b60405180910390f35b348015610c6357600080fd5b50610c6c61245f565b604051610c7991906144e6565b60405180910390f35b348015610c8e57600080fd5b50610c9761251a565b604051610ca491906145b7565b60405180910390f35b348015610cb957600080fd5b50610cd46004803603810190610ccf9190614501565b612520565b005b348015610ce257600080fd5b50610cfd6004803603810190610cf89190614501565b612716565b005b348015610d0b57600080fd5b50610d146128dc565b604051610d2191906145b7565b60405180910390f35b348015610d3657600080fd5b50610d3f6128e2565b604051610d4c91906145b7565b60405180910390f35b606060038054610d649061480e565b80601f0160208091040260200160405190810160405280929190818152602001828054610d909061480e565b8015610ddd5780601f10610db257610100808354040283529160200191610ddd565b820191906000526020600020905b815481529060010190602001808311610dc057829003601f168201915b5050505050905090565b6000610dfb610df4612946565b848461294e565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b610e5d612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610eec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee39061488b565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60195481565b60185481565b610fc0612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110469061488b565b60405180910390fd5b670de0b6b3a76400006103e86001611065610e4b565b61106f91906148da565b611079919061494b565b611083919061494b565b8110156110c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110bc906149ee565b60405180910390fd5b670de0b6b3a7640000816110d991906148da565b600a8190555050565b60006110ef848484612b17565b6111b0846110fb612946565b6111ab8560405180606001604052806028815260200161587260289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611161612946565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137b29092919063ffffffff16565b61294e565b600190509392505050565b61dead81565b60006012905090565b60006112736111d7612946565b8461126e85600160006111e8612946565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e890919063ffffffff16565b61294e565b6001905092915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611314612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a9061488b565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156113e9573d6000803e3d6000fd5b50565b60145481565b600d60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611455612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114db9061488b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006115af612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461163e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116359061488b565b60405180910390fd5b6000600d60006101000a81548160ff0219169083151502179055506001905090565b611668612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ee9061488b565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b611786612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611815576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180c9061488b565b60405180910390fd5b82601181905550816012819055508060138190555060135460125460115461183d9190614a0e565b6118479190614a0e565b60108190555060146010541115611893576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188a90614a8e565b60405180910390fd5b505050565b6118a0612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461192f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119269061488b565b60405180910390fd5b6001600d60016101000a81548160ff0219169083151502179055506001600d60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60155481565b6119c5612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4b9061488b565b60405180910390fd5b80600d60026101000a81548160ff02191690831515021790555050565b606060048054611a809061480e565b80601f0160208091040260200160405190810160405280929190818152602001828054611aac9061480e565b8015611af95780601f10611ace57610100808354040283529160200191611af9565b820191906000526020600020905b815481529060010190602001808311611adc57829003601f168201915b5050505050905090565b611b0b612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b919061488b565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2190614b20565b60405180910390fd5b611c348282613816565b5050565b60135481565b601a5481565b60175481565b6000611d0d611c57612946565b84611d088560405180606001604052806025815260200161589a6025913960016000611c81612946565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137b29092919063ffffffff16565b61294e565b6001905092915050565b6000611d2b611d24612946565b8484612b17565b6001905092915050565b611d3d612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc39061488b565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b600d60019054906101000a900460ff1681565b611ec7612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4d9061488b565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611ff391906144e6565b60405180910390a25050565b612007612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d9061488b565b60405180910390fd5b8260158190555081601681905550806017819055506017546016546015546120be9190614a0e565b6120c89190614a0e565b60148190555060196014541115612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b90614b8c565b60405180910390fd5b505050565b612121612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a79061488b565b60405180910390fd5b670de0b6b3a76400006103e860056121c6610e4b565b6121d091906148da565b6121da919061494b565b6121e4919061494b565b811015612226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161221d90614c1e565b60405180910390fd5b670de0b6b3a76400008161223a91906148da565b600c8190555050565b600f60009054906101000a900460ff1681565b600a5481565b6000612266612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146122f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ec9061488b565b60405180910390fd5b620186a06001612303610e4b565b61230d91906148da565b612317919061494b565b821015612359576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235090614cb0565b60405180910390fd5b6103e86005612366610e4b565b61237091906148da565b61237a919061494b565b8211156123bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b390614d42565b60405180910390fd5b81600b8190555060019050919050565b60105481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600b5481565b6000612469612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146124f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ef9061488b565b60405180910390fd5b6000600f60006101000a81548160ff0219169083151502179055506001905090565b60125481565b612528612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125ae9061488b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461261257600080fd5b600073f6ad3ccf71abb3e12becf6b3d2a74c963859adcd9050612636816001611660565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506126e5600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001611660565b612712600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001613816565b5050565b61271e612946565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a49061488b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361281c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161281390614dd4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b600c5481565b60008082846128f79190614a0e565b90508381101561293c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161293390614e40565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129b490614ed2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a2c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2390614f64565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b0a91906145b7565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b7d90614ff6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bf5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bec90615088565b60405180910390fd5b60008103612c0e57612c09838360006138b7565b6137ad565b600d60009054906101000a900460ff16156132d557612c2b611967565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c995750612c69611967565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612cd25750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d0c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612d255750600760149054906101000a900460ff16155b156132d457600d60019054906101000a900460ff16612e1f57601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ddf5750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612e1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e15906150f4565b60405180910390fd5b5b600f60009054906101000a900460ff1615612feb57612e3c611967565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612ec55750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f1f5750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612fea5743600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612fa5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f9c906151ac565b60405180910390fd5b43600e60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561308e5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561313557600a548111156130d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cf9061523e565b60405180910390fd5b600c546130e483611405565b826130ef9190614a0e565b1115613130576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613127906152aa565b60405180910390fd5b6132d3565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131d85750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561322757600a54811115613222576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132199061533c565b60405180910390fd5b6132d2565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166132d157600c5461328483611405565b8261328f9190614a0e565b11156132d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c7906152aa565b60405180910390fd5b5b5b5b5b5b60006132e030611405565b90506000600b5482101590508080156133055750600d60029054906101000a900460ff165b801561331e5750600760149054906101000a900460ff16155b80156133745750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133ca5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156134205750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613464576001600760146101000a81548160ff021916908315150217905550613448613b4a565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061351a5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561352457600090505b6000811561379d57601d60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561358757506000601454115b15613654576135b460646135a660145488613e3190919063ffffffff16565b613eab90919063ffffffff16565b9050601454601654826135c791906148da565b6135d1919061494b565b601960008282546135e29190614a0e565b92505081905550601454601754826135fa91906148da565b613604919061494b565b601a60008282546136159190614a0e565b925050819055506014546015548261362d91906148da565b613637919061494b565b601860008282546136489190614a0e565b92505081905550613779565b601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136af57506000601054115b15613778576136dc60646136ce60105488613e3190919063ffffffff16565b613eab90919063ffffffff16565b9050601054601254826136ef91906148da565b6136f9919061494b565b6019600082825461370a9190614a0e565b925050819055506010546013548261372291906148da565b61372c919061494b565b601a600082825461373d9190614a0e565b925050819055506010546011548261375591906148da565b61375f919061494b565b601860008282546137709190614a0e565b925050819055505b5b600081111561378e5761378d8730836138b7565b5b808561379a919061535c565b94505b6137a88787876138b7565b505050505b505050565b60008383111582906137fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137f191906143d0565b60405180910390fd5b5060008385613809919061535c565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613926576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161391d90614ff6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161398c90615088565b60405180910390fd5b6139a0838383613ef5565b613a0b8160405180606001604052806026815260200161584c602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137b29092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a9e816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128e890919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613b3d91906145b7565b60405180910390a3505050565b6000613b5530611405565b90506000601a54601854601954613b6c9190614a0e565b613b769190614a0e565b9050600080831480613b885750600082145b15613b9557505050613e2f565b6014600b54613ba491906148da565b831115613bbd576014600b54613bba91906148da565b92505b600060028360195486613bd091906148da565b613bda919061494b565b613be4919061494b565b90506000613bfb8286613efa90919063ffffffff16565b90506000479050613c0b82613f44565b6000613c208247613efa90919063ffffffff16565b90506000613c4b87613c3d60185485613e3190919063ffffffff16565b613eab90919063ffffffff16565b90506000613c7688613c68601a5486613e3190919063ffffffff16565b613eab90919063ffffffff16565b90506000818385613c87919061535c565b613c91919061535c565b9050600060198190555060006018819055506000601a81905550600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613cf1906153c1565b60006040518083038185875af1925050503d8060008114613d2e576040519150601f19603f3d011682016040523d82523d6000602084013e613d33565b606091505b505080985050600087118015613d495750600081115b15613d9657613d5887826141d8565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601954604051613d8d939291906153d6565b60405180910390a15b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613ddc906153c1565b60006040518083038185875af1925050503d8060008114613e19576040519150601f19603f3d011682016040523d82523d6000602084013e613e1e565b606091505b505080985050505050505050505050505b565b6000808303613e435760009050613ea5565b60008284613e5191906148da565b9050828482613e60919061494b565b14613ea0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613e979061547f565b60405180910390fd5b809150505b92915050565b6000613eed83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506142dd565b905092915050565b505050565b6000613f3c83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506137b2565b905092915050565b6000600267ffffffffffffffff811115613f6157613f6061549f565b5b604051908082528060200260200182016040528015613f8f5781602001602082028036833780820191505090505b5090506000600167ffffffffffffffff811115613faf57613fae61549f565b5b604051908082528060200260200182016040528015613fdd5781602001602082028036833780820191505090505b5090503082600081518110613ff557613ff46154ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561409c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140c09190615512565b826001815181106140d4576140d36154ce565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061413b30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168561294e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633f464b16846000853042876040518763ffffffff1660e01b81526004016141a1969594939291906156f6565b600060405180830381600087803b1580156141bb57600080fd5b505af11580156141cf573d6000803e3d6000fd5b50505050505050565b61420530600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168461294e565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16633a8e53ff823085600080600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426000806040518a63ffffffff1660e01b8152600401614293989796959493929190615765565b60606040518083038185885af11580156142b1573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906142d691906157f8565b5050505050565b60008083118290614324576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161431b91906143d0565b60405180910390fd5b5060008385614333919061494b565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561437a57808201518184015260208101905061435f565b60008484015250505050565b6000601f19601f8301169050919050565b60006143a282614340565b6143ac818561434b565b93506143bc81856020860161435c565b6143c581614386565b840191505092915050565b600060208201905081810360008301526143ea8184614397565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614422826143f7565b9050919050565b61443281614417565b811461443d57600080fd5b50565b60008135905061444f81614429565b92915050565b6000819050919050565b61446881614455565b811461447357600080fd5b50565b6000813590506144858161445f565b92915050565b600080604083850312156144a2576144a16143f2565b5b60006144b085828601614440565b92505060206144c185828601614476565b9150509250929050565b60008115159050919050565b6144e0816144cb565b82525050565b60006020820190506144fb60008301846144d7565b92915050565b600060208284031215614517576145166143f2565b5b600061452584828501614440565b91505092915050565b6000819050919050565b600061455361454e614549846143f7565b61452e565b6143f7565b9050919050565b600061456582614538565b9050919050565b60006145778261455a565b9050919050565b6145878161456c565b82525050565b60006020820190506145a2600083018461457e565b92915050565b6145b181614455565b82525050565b60006020820190506145cc60008301846145a8565b92915050565b6000602082840312156145e8576145e76143f2565b5b60006145f684828501614476565b91505092915050565b600080600060608486031215614618576146176143f2565b5b600061462686828701614440565b935050602061463786828701614440565b925050604061464886828701614476565b9150509250925092565b61465b81614417565b82525050565b60006020820190506146766000830184614652565b92915050565b600060ff82169050919050565b6146928161467c565b82525050565b60006020820190506146ad6000830184614689565b92915050565b6146bc816144cb565b81146146c757600080fd5b50565b6000813590506146d9816146b3565b92915050565b600080604083850312156146f6576146f56143f2565b5b600061470485828601614440565b9250506020614715858286016146ca565b9150509250929050565b600080600060608486031215614738576147376143f2565b5b600061474686828701614476565b935050602061475786828701614476565b925050604061476886828701614476565b9150509250925092565b600060208284031215614788576147876143f2565b5b6000614796848285016146ca565b91505092915050565b600080604083850312156147b6576147b56143f2565b5b60006147c485828601614440565b92505060206147d585828601614440565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061482657607f821691505b602082108103614839576148386147df565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061487560208361434b565b91506148808261483f565b602082019050919050565b600060208201905081810360008301526148a481614868565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006148e582614455565b91506148f083614455565b92508282026148fe81614455565b91508282048414831517614915576149146148ab565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061495682614455565b915061496183614455565b9250826149715761497061491c565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006149d8602f8361434b565b91506149e38261497c565b604082019050919050565b60006020820190508181036000830152614a07816149cb565b9050919050565b6000614a1982614455565b9150614a2483614455565b9250828201905080821115614a3c57614a3b6148ab565b5b92915050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614a78601d8361434b565b9150614a8382614a42565b602082019050919050565b60006020820190508181036000830152614aa781614a6b565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614b0a60398361434b565b9150614b1582614aae565b604082019050919050565b60006020820190508181036000830152614b3981614afd565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000614b76601d8361434b565b9150614b8182614b40565b602082019050919050565b60006020820190508181036000830152614ba581614b69565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614c0860248361434b565b9150614c1382614bac565b604082019050919050565b60006020820190508181036000830152614c3781614bfb565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614c9a60358361434b565b9150614ca582614c3e565b604082019050919050565b60006020820190508181036000830152614cc981614c8d565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614d2c60348361434b565b9150614d3782614cd0565b604082019050919050565b60006020820190508181036000830152614d5b81614d1f565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614dbe60268361434b565b9150614dc982614d62565b604082019050919050565b60006020820190508181036000830152614ded81614db1565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614e2a601b8361434b565b9150614e3582614df4565b602082019050919050565b60006020820190508181036000830152614e5981614e1d565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614ebc60248361434b565b9150614ec782614e60565b604082019050919050565b60006020820190508181036000830152614eeb81614eaf565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614f4e60228361434b565b9150614f5982614ef2565b604082019050919050565b60006020820190508181036000830152614f7d81614f41565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614fe060258361434b565b9150614feb82614f84565b604082019050919050565b6000602082019050818103600083015261500f81614fd3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061507260238361434b565b915061507d82615016565b604082019050919050565b600060208201905081810360008301526150a181615065565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006150de60168361434b565b91506150e9826150a8565b602082019050919050565b6000602082019050818103600083015261510d816150d1565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b600061519660498361434b565b91506151a182615114565b606082019050919050565b600060208201905081810360008301526151c581615189565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b600061522860358361434b565b9150615233826151cc565b604082019050919050565b600060208201905081810360008301526152578161521b565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061529460138361434b565b915061529f8261525e565b602082019050919050565b600060208201905081810360008301526152c381615287565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b600061532660368361434b565b9150615331826152ca565b604082019050919050565b6000602082019050818103600083015261535581615319565b9050919050565b600061536782614455565b915061537283614455565b925082820390508181111561538a576153896148ab565b5b92915050565b600081905092915050565b50565b60006153ab600083615390565b91506153b68261539b565b600082019050919050565b60006153cc8261539e565b9150819050919050565b60006060820190506153eb60008301866145a8565b6153f860208301856145a8565b61540560408301846145a8565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061546960218361434b565b91506154748261540d565b604082019050919050565b600060208201905081810360008301526154988161545c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008151905061550c81614429565b92915050565b600060208284031215615528576155276143f2565b5b6000615536848285016154fd565b91505092915050565b6000819050919050565b600061556461555f61555a8461553f565b61452e565b614455565b9050919050565b61557481615549565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6155af81614417565b82525050565b60006155c183836155a6565b60208301905092915050565b6000602082019050919050565b60006155e58261557a565b6155ef8185615585565b93506155fa83615596565b8060005b8381101561562b57815161561288826155b5565b975061561d836155cd565b9250506001810190506155fe565b5085935050505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61566d816144cb565b82525050565b600061567f8383615664565b60208301905092915050565b6000602082019050919050565b60006156a382615638565b6156ad8185615643565b93506156b883615654565b8060005b838110156156e95781516156d08882615673565b97506156db8361568b565b9250506001810190506156bc565b5085935050505092915050565b600060c08201905061570b60008301896145a8565b615718602083018861556b565b818103604083015261572a81876155da565b90506157396060830186614652565b61574660808301856145a8565b81810360a08301526157588184615698565b9050979650505050505050565b60006101008201905061577b600083018b614652565b615788602083018a6145a8565b615795604083018961556b565b6157a2606083018861556b565b6157af6080830187614652565b6157bc60a08301866145a8565b6157c960c083018561556b565b6157d660e08301846144d7565b9998505050505050505050565b6000815190506157f28161445f565b92915050565b600080600060608486031215615811576158106143f2565b5b600061581f868287016157e3565b9350506020615830868287016157e3565b9250506040615841868287016157e3565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204437e0ad83cf6486bde5cd141fc6e3b87d1a14dc5ffab7c81bfb5e675f91bd8264736f6c63430008120033
Deployed Bytecode Sourcemap
26814:15543:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5902:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8069:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28170:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26893:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7022:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34871:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27949:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27909;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32420:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8720:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26982:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6864:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9484:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26947:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27263:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35040:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42247:105;;;;;;;;;;;;;:::i;:::-;;27760:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27344:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7193:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20367:148;;;;;;;;;;;;;:::i;:::-;;31096:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32889:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27074:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27649;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33246:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30928:112;;;;;;;;;;;;;:::i;:::-;;19725:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27111:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27795:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33133:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6121:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34203:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27723:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27989:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27871:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10205:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7533:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34651:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28392:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27304:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34013:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33627:378;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32662:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27567:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27148:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32027:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27615:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7771:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27190:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31281:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27686:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31423:529;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20670:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27833:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27230:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5902:100;5956:13;5989:5;5982:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5902:100;:::o;8069:169::-;8152:4;8169:39;8178:12;:10;:12::i;:::-;8192:7;8201:6;8169:8;:39::i;:::-;8226:4;8219:11;;8069:169;;;;:::o;28170:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;26893:47::-;;;;;;;;;;;;;:::o;7022:108::-;7083:7;7110:12;;7103:19;;7022:108;:::o;34871:157::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34978:9:::1;;;;;;;;;;;34950:38;;34967:9;34950:38;;;;;;;;;;;;35011:9;34999;;:21;;;;;;;;;;;;;;;;;;34871:157:::0;:::o;27949:33::-;;;;:::o;27909:::-;;;;:::o;32420:234::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32539:4:::1;32533;32529:1;32513:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;32512:31;;;;:::i;:::-;32502:6;:41;;32494:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;32639:6;32629;:17;;;;:::i;:::-;32606:20;:40;;;;32420:234:::0;:::o;8720:355::-;8860:4;8877:36;8887:6;8895:9;8906:6;8877:9;:36::i;:::-;8924:121;8933:6;8941:12;:10;:12::i;:::-;8955:89;8993:6;8955:89;;;;;;;;;;;;;;;;;:11;:19;8967:6;8955:19;;;;;;;;;;;;;;;:33;8975:12;:10;:12::i;:::-;8955:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;8924:8;:121::i;:::-;9063:4;9056:11;;8720:355;;;;;:::o;26982:53::-;27028:6;26982:53;:::o;6864:93::-;6922:5;6947:2;6940:9;;6864:93;:::o;9484:218::-;9572:4;9589:83;9598:12;:10;:12::i;:::-;9612:7;9621:50;9660:10;9621:11;:25;9633:12;:10;:12::i;:::-;9621:25;;;;;;;;;;;;;;;:34;9647:7;9621:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;9589:8;:83::i;:::-;9690:4;9683:11;;9484:218;;;;:::o;26947:28::-;;;;;;;;;;;;;:::o;27263:34::-;;;;;;;;;;;;;:::o;35040:125::-;35105:4;35129:19;:28;35149:7;35129:28;;;;;;;;;;;;;;;;;;;;;;;;;35122:35;;35040:125;;;:::o;42247:105::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42301:10:::1;42293:28;;:51;42322:21;42293:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;42247:105::o:0;27760:28::-;;;;:::o;27344:31::-;;;;;;;;;;;;;:::o;7193:127::-;7267:7;7294:9;:18;7304:7;7294:18;;;;;;;;;;;;;;;;7287:25;;7193:127;;;:::o;20367:148::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20474:1:::1;20437:40;;20458:6;;;;;;;;;;;20437:40;;;;;;;;;;;;20505:1;20488:6;;:19;;;;;;;;;;;;;;;;;;20367:148::o:0;31096:120::-;31148:4;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31181:5:::1;31164:14;;:22;;;;;;;;;;;;;;;;;;31204:4;31197:11;;31096:120:::0;:::o;32889:144::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33021:4:::1;32979:31;:39;33011:6;32979:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32889:144:::0;;:::o;27074:30::-;;;;;;;;;;;;;:::o;27649:::-;;;;:::o;33246:369::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33380:13:::1;33362:15;:31;;;;33422:13;33404:15;:31;;;;33458:7;33446:9;:19;;;;33527:9;;33509:15;;33491;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;33476:12;:60;;;;33571:2;33555:12;;:18;;33547:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33246:369:::0;;;:::o;30928:112::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;30999:4:::1;30983:13;;:20;;;;;;;;;;;;;;;;;;31028:4;31014:11;;:18;;;;;;;;;;;;;;;;;;30928:112::o:0;19725:79::-;19763:7;19790:6;;;;;;;;;;;19783:13;;19725:79;:::o;27111:24::-;;;;;;;;;;;;;:::o;27795:31::-;;;;:::o;33133:101::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33219:7:::1;33205:11;;:21;;;;;;;;;;;;;;;;;;33133:101:::0;:::o;6121:104::-;6177:13;6210:7;6203:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6121:104;:::o;34203:244::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34310:13:::1;;;;;;;;;;;34302:21;;:4;:21;;::::0;34294:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34398:41;34427:4;34433:5;34398:28;:41::i;:::-;34203:244:::0;;:::o;27723:24::-;;;;:::o;27989:27::-;;;;:::o;27871:25::-;;;;:::o;10205:269::-;10298:4;10315:129;10324:12;:10;:12::i;:::-;10338:7;10347:96;10386:15;10347:96;;;;;;;;;;;;;;;;;:11;:25;10359:12;:10;:12::i;:::-;10347:25;;;;;;;;;;;;;;;:34;10373:7;10347:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;10315:8;:129::i;:::-;10462:4;10455:11;;10205:269;;;;:::o;7533:175::-;7619:4;7636:42;7646:12;:10;:12::i;:::-;7660:9;7671:6;7636:9;:42::i;:::-;7696:4;7689:11;;7533:175;;;;:::o;34651:208::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34788:15:::1;;;;;;;;;;;34745:59;;34768:18;34745:59;;;;;;;;;;;;34833:18;34815:15;;:36;;;;;;;;;;;;;;;;;;34651:208:::0;:::o;28392:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;27304:33::-;;;;;;;;;;;;;:::o;34013:182::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34129:8:::1;34098:19;:28;34118:7;34098:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34169:7;34153:34;;;34178:8;34153:34;;;;;;:::i;:::-;;;;;;;;34013:182:::0;;:::o;33627:378::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33763:13:::1;33744:16;:32;;;;33806:13;33787:16;:32;;;;33843:7;33830:10;:20;;;;33915:10;;33896:16;;33877;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;33861:13;:64;;;;33961:2;33944:13;;:19;;33936:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33627:378:::0;;;:::o;32662:215::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32784:4:::1;32778;32774:1;32758:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;32757:31;;;;:::i;:::-;32747:6;:41;;32739:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;32862:6;32852;:17;;;;:::i;:::-;32840:9;:29;;;;32662:215:::0;:::o;27567:39::-;;;;;;;;;;;;;:::o;27148:35::-;;;;:::o;32027:381::-;32108:4;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32164:6:::1;32160:1;32144:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;32131:9;:39;;32123:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;32279:4;32275:1;32259:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;32246:9;:37;;32238:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;32371:9;32350:18;:30;;;;32397:4;32390:11;;32027:381:::0;;;:::o;27615:27::-;;;;:::o;7771:151::-;7860:7;7887:11;:18;7899:5;7887:18;;;;;;;;;;;;;;;:27;7906:7;7887:27;;;;;;;;;;;;;;;;7880:34;;7771:151;;;;:::o;27190:33::-;;;;:::o;31281:134::-;31341:4;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31380:5:::1;31357:20;;:28;;;;;;;;;;;;;;;;;;31403:4;31396:11;;31281:134:::0;:::o;27686:30::-;;;;:::o;31423:529::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31516:3:::1;31491:29;;:13;;;;;;;;;;;:29;;;31483:38;;;::::0;::::1;;31532:41;31601:42;31532:112;;31665:58;31699:16;31718:4;31665:25;:58::i;:::-;31752:16;31734:15;;:34;;;;;;;;;;;;;;;;;;31805:4;31789:13;;:20;;;;;;;;;;;;;;;;;;31820:55;31854:13;;;;;;;;;;;31870:4;31820:25;:55::i;:::-;31886:58;31923:13;;;;;;;;;;;31939:4;31886:28;:58::i;:::-;31472:480;31423:529:::0;:::o;20670:244::-;19947:12;:10;:12::i;:::-;19937:22;;:6;;;;;;;;;;;:22;;;19929:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;20779:1:::1;20759:22;;:8;:22;;::::0;20751:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20869:8;20840:38;;20861:6;;;;;;;;;;;20840:38;;;;;;;;;;;;20898:8;20889:6;;:17;;;;;;;;;;;;;;;;;;20670:244:::0;:::o;27833:31::-;;;;:::o;27230:24::-;;;;:::o;14769:181::-;14827:7;14847:9;14863:1;14859;:5;;;;:::i;:::-;14847:17;;14888:1;14883;:6;;14875:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;14941:1;14934:8;;;14769:181;;;;:::o;851:98::-;904:7;931:10;924:17;;851:98;:::o;13391:380::-;13544:1;13527:19;;:5;:19;;;13519:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13625:1;13606:21;;:7;:21;;;13598:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;13709:6;13679:11;:18;13691:5;13679:18;;;;;;;;;;;;;;;:27;13698:7;13679:27;;;;;;;;;;;;;;;:36;;;;13747:7;13731:32;;13740:5;13731:32;;;13756:6;13731:32;;;;;;:::i;:::-;;;;;;;;13391:380;;;:::o;35177:4134::-;35325:1;35309:18;;:4;:18;;;35301:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35402:1;35388:16;;:2;:16;;;35380:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35479:1;35469:6;:11;35466:92;;35497:28;35513:4;35519:2;35523:1;35497:15;:28::i;:::-;35540:7;;35466:92;35581:14;;;;;;;;;;;35578:1841;;;35641:7;:5;:7::i;:::-;35633:15;;:4;:15;;;;:49;;;;;35675:7;:5;:7::i;:::-;35669:13;;:2;:13;;;;35633:49;:86;;;;;35717:1;35703:16;;:2;:16;;;;35633:86;:128;;;;;35754:6;35740:21;;:2;:21;;;;35633:128;:158;;;;;35783:8;;;;;;;;;;;35782:9;35633:158;35611:1797;;;35829:13;;;;;;;;;;;35825:148;;35874:19;:25;35894:4;35874:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35903:19;:23;35923:2;35903:23;;;;;;;;;;;;;;;;;;;;;;;;;35874:52;35866:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35825:148;36131:20;;;;;;;;;;;36127:423;;;36185:7;:5;:7::i;:::-;36179:13;;:2;:13;;;;:47;;;;;36210:15;;;;;;;;;;;36196:30;;:2;:30;;;;36179:47;:79;;;;;36244:13;;;;;;;;;;;36230:28;;:2;:28;;;;36179:79;36175:356;;;36336:12;36294:28;:39;36323:9;36294:39;;;;;;;;;;;;;;;;:54;36286:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;36495:12;36453:28;:39;36482:9;36453:39;;;;;;;;;;;;;;;:54;;;;36175:356;36127:423;36619:25;:31;36645:4;36619:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;36655:31;:35;36687:2;36655:35;;;;;;;;;;;;;;;;;;;;;;;;;36654:36;36619:71;36615:778;;;36737:20;;36727:6;:30;;36719:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;36876:9;;36859:13;36869:2;36859:9;:13::i;:::-;36850:6;:22;;;;:::i;:::-;:35;;36842:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36615:778;;;37003:25;:29;37029:2;37003:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;37037:31;:37;37069:4;37037:37;;;;;;;;;;;;;;;;;;;;;;;;;37036:38;37003:71;36999:394;;;37121:20;;37111:6;:30;;37103:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;36999:394;;;37247:31;:35;37279:2;37247:35;;;;;;;;;;;;;;;;;;;;;;;;;37243:150;;37340:9;;37323:13;37333:2;37323:9;:13::i;:::-;37314:6;:22;;;;:::i;:::-;:35;;37306:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37243:150;36999:394;36615:778;35611:1797;35578:1841;37453:28;37484:24;37502:4;37484:9;:24::i;:::-;37453:55;;37529:12;37568:18;;37544:20;:42;;37529:57;;37617:7;:35;;;;;37641:11;;;;;;;;;;;37617:35;:61;;;;;37670:8;;;;;;;;;;;37669:9;37617:61;:110;;;;;37696:25;:31;37722:4;37696:31;;;;;;;;;;;;;;;;;;;;;;;;;37695:32;37617:110;:153;;;;;37745:19;:25;37765:4;37745:25;;;;;;;;;;;;;;;;;;;;;;;;;37744:26;37617:153;:194;;;;;37788:19;:23;37808:2;37788:23;;;;;;;;;;;;;;;;;;;;;;;;;37787:24;37617:194;37599:338;;;37849:4;37838:8;;:15;;;;;;;;;;;;;;;;;;37882:10;:8;:10::i;:::-;37920:5;37909:8;;:16;;;;;;;;;;;;;;;;;;37599:338;37949:12;37965:8;;;;;;;;;;;37964:9;37949:24;;38074:19;:25;38094:4;38074:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38103:19;:23;38123:2;38103:23;;;;;;;;;;;;;;;;;;;;;;;;;38074:52;38071:99;;;38153:5;38143:15;;38071:99;38190:12;38294:7;38291:967;;;38345:25;:29;38371:2;38345:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;38394:1;38378:13;;:17;38345:50;38341:748;;;38422:34;38452:3;38422:25;38433:13;;38422:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;38415:41;;38523:13;;38504:16;;38497:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;38475:18;;:61;;;;;;;:::i;:::-;;;;;;;;38591:13;;38578:10;;38571:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;38555:12;;:49;;;;;;;:::i;:::-;;;;;;;;38671:13;;38652:16;;38645:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;38623:18;;:61;;;;;;;:::i;:::-;;;;;;;;38341:748;;;38745:25;:31;38771:4;38745:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;38795:1;38780:12;;:16;38745:51;38742:347;;;38821:33;38850:3;38821:24;38832:12;;38821:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;38814:40;;38917:12;;38899:15;;38892:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;38870:18;;:59;;;;;;;:::i;:::-;;;;;;;;38983:12;;38971:9;;38964:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;38948:12;;:47;;;;;;;:::i;:::-;;;;;;;;39061:12;;39043:15;;39036:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;39014:18;;:59;;;;;;;:::i;:::-;;;;;;;;38742:347;38341:748;39127:1;39120:4;:8;39117:93;;;39152:42;39168:4;39182;39189;39152:15;:42::i;:::-;39117:93;39242:4;39232:14;;;;;:::i;:::-;;;38291:967;39270:33;39286:4;39292:2;39296:6;39270:15;:33::i;:::-;35290:4021;;;;35177:4134;;;;:::o;15672:192::-;15758:7;15791:1;15786;:6;;15794:12;15778:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;15818:9;15834:1;15830;:5;;;;:::i;:::-;15818:17;;15855:1;15848:8;;;15672:192;;;;;:::o;34455:188::-;34572:5;34538:25;:31;34564:4;34538:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34629:5;34595:40;;34623:4;34595:40;;;;;;;;;;;;34455:188;;:::o;10964:573::-;11122:1;11104:20;;:6;:20;;;11096:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;11206:1;11185:23;;:9;:23;;;11177:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;11261:47;11282:6;11290:9;11301:6;11261:20;:47::i;:::-;11341:71;11363:6;11341:71;;;;;;;;;;;;;;;;;:9;:17;11351:6;11341:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;11321:9;:17;11331:6;11321:17;;;;;;;;;;;;;;;:91;;;;11446:32;11471:6;11446:9;:20;11456:9;11446:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;11423:9;:20;11433:9;11423:20;;;;;;;;;;;;;;;:55;;;;11511:9;11494:35;;11503:6;11494:35;;;11522:6;11494:35;;;;;;:::i;:::-;;;;;;;;10964:573;;;:::o;40579:1656::-;40618:23;40644:24;40662:4;40644:9;:24::i;:::-;40618:50;;40679:25;40749:12;;40728:18;;40707;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;40679:82;;40772:12;40827:1;40808:15;:20;:46;;;;40853:1;40832:17;:22;40808:46;40805:60;;;40857:7;;;;;40805:60;40919:2;40898:18;;:23;;;;:::i;:::-;40880:15;:41;40877:111;;;40974:2;40953:18;;:23;;;;:::i;:::-;40935:41;;40877:111;41057:23;41142:1;41122:17;41101:18;;41083:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;41057:86;;41154:26;41183:36;41203:15;41183;:19;;:36;;;;:::i;:::-;41154:65;;41240:25;41268:21;41240:49;;41302:36;41319:18;41302:16;:36::i;:::-;41360:18;41381:44;41407:17;41381:21;:25;;:44;;;;:::i;:::-;41360:65;;41446:23;41472:57;41511:17;41472:34;41487:18;;41472:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;41446:83;;41540:17;41560:51;41593:17;41560:28;41575:12;;41560:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;41540:71;;41642:23;41699:9;41681:15;41668:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;41642:66;;41750:1;41729:18;:22;;;;41783:1;41762:18;:22;;;;41810:1;41795:12;:16;;;;41853:9;;;;;;;;;;;41845:23;;41876:9;41845:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41832:58;;;;;41932:1;41914:15;:19;:42;;;;;41955:1;41937:15;:19;41914:42;41911:210;;;41972:46;41985:15;42002;41972:12;:46::i;:::-;42038:71;42053:18;42073:15;42090:18;;42038:71;;;;;;;;:::i;:::-;;;;;;;;41911:210;42172:15;;;;;;;;;;;42164:29;;42201:21;42164:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42151:76;;;;;40607:1628;;;;;;;;;;40579:1656;:::o;16123:471::-;16181:7;16431:1;16426;:6;16422:47;;16456:1;16449:8;;;;16422:47;16481:9;16497:1;16493;:5;;;;:::i;:::-;16481:17;;16526:1;16521;16517;:5;;;;:::i;:::-;:10;16509:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;16585:1;16578:8;;;16123:471;;;;;:::o;17070:132::-;17128:7;17155:39;17159:1;17162;17155:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;17148:46;;17070:132;;;;:::o;14374:125::-;;;;:::o;15233:136::-;15291:7;15318:43;15322:1;15325;15318:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;15311:50;;15233:136;;;;:::o;39319:669::-;39447:21;39485:1;39471:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39447:40;;39498:20;39532:1;39521:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39498:36;;39563:4;39545;39550:1;39545:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39589:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39579:4;39584:1;39579:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39624:62;39641:4;39656:15;;;;;;;;;;;39674:11;39624:8;:62::i;:::-;39725:15;;;;;;;;;;;:66;;;39806:11;39832:1;39876:4;39903;39923:15;39953:6;39725:245;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39374:614;;39319:669;:::o;40012:559::-;40160:62;40177:4;40192:15;;;;;;;;;;;40210:11;40160:8;:62::i;:::-;40267:15;;;;;;;;;;;:31;;;40306:9;40339:4;40359:11;40385:1;40428;40471:15;;;;;;;;;;;40501;40531:1;40547:5;40267:296;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;40012:559;;:::o;17698:278::-;17784:7;17816:1;17812;:5;17819:12;17804:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17843:9;17859:1;17855;:5;;;;:::i;:::-;17843:17;;17967:1;17960:8;;;17698:278;;;;;:::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:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:60::-;3809:3;3830:5;3823:12;;3781:60;;;:::o;3847:142::-;3897:9;3930:53;3948:34;3957:24;3975:5;3957:24;:::i;:::-;3948:34;:::i;:::-;3930:53;:::i;:::-;3917:66;;3847:142;;;:::o;3995:126::-;4045:9;4078:37;4109:5;4078:37;:::i;:::-;4065:50;;3995:126;;;:::o;4127:159::-;4210:9;4243:37;4274:5;4243:37;:::i;:::-;4230:50;;4127:159;;;:::o;4292:197::-;4412:70;4476:5;4412:70;:::i;:::-;4407:3;4400:83;4292:197;;:::o;4495:288::-;4621:4;4659:2;4648:9;4644:18;4636:26;;4672:104;4773:1;4762:9;4758:17;4749:6;4672:104;:::i;:::-;4495:288;;;;:::o;4789:118::-;4876:24;4894:5;4876:24;:::i;:::-;4871:3;4864:37;4789:118;;:::o;4913:222::-;5006:4;5044:2;5033:9;5029:18;5021:26;;5057:71;5125:1;5114:9;5110:17;5101:6;5057:71;:::i;:::-;4913:222;;;;:::o;5141:329::-;5200:6;5249:2;5237:9;5228:7;5224:23;5220:32;5217:119;;;5255:79;;:::i;:::-;5217:119;5375:1;5400:53;5445:7;5436:6;5425:9;5421:22;5400:53;:::i;:::-;5390:63;;5346:117;5141:329;;;;:::o;5476:619::-;5553:6;5561;5569;5618:2;5606:9;5597:7;5593:23;5589:32;5586:119;;;5624:79;;:::i;:::-;5586:119;5744:1;5769:53;5814:7;5805:6;5794:9;5790:22;5769:53;:::i;:::-;5759:63;;5715:117;5871:2;5897:53;5942:7;5933:6;5922:9;5918:22;5897:53;:::i;:::-;5887:63;;5842:118;5999:2;6025:53;6070:7;6061:6;6050:9;6046:22;6025:53;:::i;:::-;6015:63;;5970:118;5476:619;;;;;:::o;6101:118::-;6188:24;6206:5;6188:24;:::i;:::-;6183:3;6176:37;6101:118;;:::o;6225:222::-;6318:4;6356:2;6345:9;6341:18;6333:26;;6369:71;6437:1;6426:9;6422:17;6413:6;6369:71;:::i;:::-;6225:222;;;;:::o;6453:86::-;6488:7;6528:4;6521:5;6517:16;6506:27;;6453:86;;;:::o;6545:112::-;6628:22;6644:5;6628:22;:::i;:::-;6623:3;6616:35;6545:112;;:::o;6663:214::-;6752:4;6790:2;6779:9;6775:18;6767:26;;6803:67;6867:1;6856:9;6852:17;6843:6;6803:67;:::i;:::-;6663:214;;;;:::o;6883:116::-;6953:21;6968:5;6953:21;:::i;:::-;6946:5;6943:32;6933:60;;6989:1;6986;6979:12;6933:60;6883:116;:::o;7005:133::-;7048:5;7086:6;7073:20;7064:29;;7102:30;7126:5;7102:30;:::i;:::-;7005:133;;;;:::o;7144:468::-;7209:6;7217;7266:2;7254:9;7245:7;7241:23;7237:32;7234:119;;;7272:79;;:::i;:::-;7234:119;7392:1;7417:53;7462:7;7453:6;7442:9;7438:22;7417:53;:::i;:::-;7407:63;;7363:117;7519:2;7545:50;7587:7;7578:6;7567:9;7563:22;7545:50;:::i;:::-;7535:60;;7490:115;7144:468;;;;;:::o;7618:619::-;7695:6;7703;7711;7760:2;7748:9;7739:7;7735:23;7731:32;7728:119;;;7766:79;;:::i;:::-;7728:119;7886:1;7911:53;7956:7;7947:6;7936:9;7932:22;7911:53;:::i;:::-;7901:63;;7857:117;8013:2;8039:53;8084:7;8075:6;8064:9;8060:22;8039:53;:::i;:::-;8029:63;;7984:118;8141:2;8167:53;8212:7;8203:6;8192:9;8188:22;8167:53;:::i;:::-;8157:63;;8112:118;7618:619;;;;;:::o;8243:323::-;8299:6;8348:2;8336:9;8327:7;8323:23;8319:32;8316:119;;;8354:79;;:::i;:::-;8316:119;8474:1;8499:50;8541:7;8532:6;8521:9;8517:22;8499:50;:::i;:::-;8489:60;;8445:114;8243:323;;;;:::o;8572:474::-;8640:6;8648;8697:2;8685:9;8676:7;8672:23;8668:32;8665:119;;;8703:79;;:::i;:::-;8665:119;8823:1;8848:53;8893:7;8884:6;8873:9;8869:22;8848:53;:::i;:::-;8838:63;;8794:117;8950:2;8976:53;9021:7;9012:6;9001:9;8997:22;8976:53;:::i;:::-;8966:63;;8921:118;8572:474;;;;;:::o;9052:180::-;9100:77;9097:1;9090:88;9197:4;9194:1;9187:15;9221:4;9218:1;9211:15;9238:320;9282:6;9319:1;9313:4;9309:12;9299:22;;9366:1;9360:4;9356:12;9387:18;9377:81;;9443:4;9435:6;9431:17;9421:27;;9377:81;9505:2;9497:6;9494:14;9474:18;9471:38;9468:84;;9524:18;;:::i;:::-;9468:84;9289:269;9238:320;;;:::o;9564:182::-;9704:34;9700:1;9692:6;9688:14;9681:58;9564:182;:::o;9752:366::-;9894:3;9915:67;9979:2;9974:3;9915:67;:::i;:::-;9908:74;;9991:93;10080:3;9991:93;:::i;:::-;10109:2;10104:3;10100:12;10093:19;;9752:366;;;:::o;10124:419::-;10290:4;10328:2;10317:9;10313:18;10305:26;;10377:9;10371:4;10367:20;10363:1;10352:9;10348:17;10341:47;10405:131;10531:4;10405:131;:::i;:::-;10397:139;;10124:419;;;:::o;10549:180::-;10597:77;10594:1;10587:88;10694:4;10691:1;10684:15;10718:4;10715:1;10708:15;10735:410;10775:7;10798:20;10816:1;10798:20;:::i;:::-;10793:25;;10832:20;10850:1;10832:20;:::i;:::-;10827:25;;10887:1;10884;10880:9;10909:30;10927:11;10909:30;:::i;:::-;10898:41;;11088:1;11079:7;11075:15;11072:1;11069:22;11049:1;11042:9;11022:83;10999:139;;11118:18;;:::i;:::-;10999:139;10783:362;10735:410;;;;:::o;11151:180::-;11199:77;11196:1;11189:88;11296:4;11293:1;11286:15;11320:4;11317:1;11310:15;11337:185;11377:1;11394:20;11412:1;11394:20;:::i;:::-;11389:25;;11428:20;11446:1;11428:20;:::i;:::-;11423:25;;11467:1;11457:35;;11472:18;;:::i;:::-;11457:35;11514:1;11511;11507:9;11502:14;;11337:185;;;;:::o;11528:234::-;11668:34;11664:1;11656:6;11652:14;11645:58;11737:17;11732:2;11724:6;11720:15;11713:42;11528:234;:::o;11768:366::-;11910:3;11931:67;11995:2;11990:3;11931:67;:::i;:::-;11924:74;;12007:93;12096:3;12007:93;:::i;:::-;12125:2;12120:3;12116:12;12109:19;;11768:366;;;:::o;12140:419::-;12306:4;12344:2;12333:9;12329:18;12321:26;;12393:9;12387:4;12383:20;12379:1;12368:9;12364:17;12357:47;12421:131;12547:4;12421:131;:::i;:::-;12413:139;;12140:419;;;:::o;12565:191::-;12605:3;12624:20;12642:1;12624:20;:::i;:::-;12619:25;;12658:20;12676:1;12658:20;:::i;:::-;12653:25;;12701:1;12698;12694:9;12687:16;;12722:3;12719:1;12716:10;12713:36;;;12729:18;;:::i;:::-;12713:36;12565:191;;;;:::o;12762:179::-;12902:31;12898:1;12890:6;12886:14;12879:55;12762:179;:::o;12947:366::-;13089:3;13110:67;13174:2;13169:3;13110:67;:::i;:::-;13103:74;;13186:93;13275:3;13186:93;:::i;:::-;13304:2;13299:3;13295:12;13288:19;;12947:366;;;:::o;13319:419::-;13485:4;13523:2;13512:9;13508:18;13500:26;;13572:9;13566:4;13562:20;13558:1;13547:9;13543:17;13536:47;13600:131;13726:4;13600:131;:::i;:::-;13592:139;;13319:419;;;:::o;13744:244::-;13884:34;13880:1;13872:6;13868:14;13861:58;13953:27;13948:2;13940:6;13936:15;13929:52;13744:244;:::o;13994:366::-;14136:3;14157:67;14221:2;14216:3;14157:67;:::i;:::-;14150:74;;14233:93;14322:3;14233:93;:::i;:::-;14351:2;14346:3;14342:12;14335:19;;13994:366;;;:::o;14366:419::-;14532:4;14570:2;14559:9;14555:18;14547:26;;14619:9;14613:4;14609:20;14605:1;14594:9;14590:17;14583:47;14647:131;14773:4;14647:131;:::i;:::-;14639:139;;14366:419;;;:::o;14791:179::-;14931:31;14927:1;14919:6;14915:14;14908:55;14791:179;:::o;14976:366::-;15118:3;15139:67;15203:2;15198:3;15139:67;:::i;:::-;15132:74;;15215:93;15304:3;15215:93;:::i;:::-;15333:2;15328:3;15324:12;15317:19;;14976:366;;;:::o;15348:419::-;15514:4;15552:2;15541:9;15537:18;15529:26;;15601:9;15595:4;15591:20;15587:1;15576:9;15572:17;15565:47;15629:131;15755:4;15629:131;:::i;:::-;15621:139;;15348:419;;;:::o;15773:223::-;15913:34;15909:1;15901:6;15897:14;15890:58;15982:6;15977:2;15969:6;15965:15;15958:31;15773:223;:::o;16002:366::-;16144:3;16165:67;16229:2;16224:3;16165:67;:::i;:::-;16158:74;;16241:93;16330:3;16241:93;:::i;:::-;16359:2;16354:3;16350:12;16343:19;;16002:366;;;:::o;16374:419::-;16540:4;16578:2;16567:9;16563:18;16555:26;;16627:9;16621:4;16617:20;16613:1;16602:9;16598:17;16591:47;16655:131;16781:4;16655:131;:::i;:::-;16647:139;;16374:419;;;:::o;16799:240::-;16939:34;16935:1;16927:6;16923:14;16916:58;17008:23;17003:2;16995:6;16991:15;16984:48;16799:240;:::o;17045:366::-;17187:3;17208:67;17272:2;17267:3;17208:67;:::i;:::-;17201:74;;17284:93;17373:3;17284:93;:::i;:::-;17402:2;17397:3;17393:12;17386:19;;17045:366;;;:::o;17417:419::-;17583:4;17621:2;17610:9;17606:18;17598:26;;17670:9;17664:4;17660:20;17656:1;17645:9;17641:17;17634:47;17698:131;17824:4;17698:131;:::i;:::-;17690:139;;17417:419;;;:::o;17842:239::-;17982:34;17978:1;17970:6;17966:14;17959:58;18051:22;18046:2;18038:6;18034:15;18027:47;17842:239;:::o;18087:366::-;18229:3;18250:67;18314:2;18309:3;18250:67;:::i;:::-;18243:74;;18326:93;18415:3;18326:93;:::i;:::-;18444:2;18439:3;18435:12;18428:19;;18087:366;;;:::o;18459:419::-;18625:4;18663:2;18652:9;18648:18;18640:26;;18712:9;18706:4;18702:20;18698:1;18687:9;18683:17;18676:47;18740:131;18866:4;18740:131;:::i;:::-;18732:139;;18459:419;;;:::o;18884:225::-;19024:34;19020:1;19012:6;19008:14;19001:58;19093:8;19088:2;19080:6;19076:15;19069:33;18884:225;:::o;19115:366::-;19257:3;19278:67;19342:2;19337:3;19278:67;:::i;:::-;19271:74;;19354:93;19443:3;19354:93;:::i;:::-;19472:2;19467:3;19463:12;19456:19;;19115:366;;;:::o;19487:419::-;19653:4;19691:2;19680:9;19676:18;19668:26;;19740:9;19734:4;19730:20;19726:1;19715:9;19711:17;19704:47;19768:131;19894:4;19768:131;:::i;:::-;19760:139;;19487:419;;;:::o;19912:177::-;20052:29;20048:1;20040:6;20036:14;20029:53;19912:177;:::o;20095:366::-;20237:3;20258:67;20322:2;20317:3;20258:67;:::i;:::-;20251:74;;20334:93;20423:3;20334:93;:::i;:::-;20452:2;20447:3;20443:12;20436:19;;20095:366;;;:::o;20467:419::-;20633:4;20671:2;20660:9;20656:18;20648:26;;20720:9;20714:4;20710:20;20706:1;20695:9;20691:17;20684:47;20748:131;20874:4;20748:131;:::i;:::-;20740:139;;20467:419;;;:::o;20892:223::-;21032:34;21028:1;21020:6;21016:14;21009:58;21101:6;21096:2;21088:6;21084:15;21077:31;20892:223;:::o;21121:366::-;21263:3;21284:67;21348:2;21343:3;21284:67;:::i;:::-;21277:74;;21360:93;21449:3;21360:93;:::i;:::-;21478:2;21473:3;21469:12;21462:19;;21121:366;;;:::o;21493:419::-;21659:4;21697:2;21686:9;21682:18;21674:26;;21746:9;21740:4;21736:20;21732:1;21721:9;21717:17;21710:47;21774:131;21900:4;21774:131;:::i;:::-;21766:139;;21493:419;;;:::o;21918:221::-;22058:34;22054:1;22046:6;22042:14;22035:58;22127:4;22122:2;22114:6;22110:15;22103:29;21918:221;:::o;22145:366::-;22287:3;22308:67;22372:2;22367:3;22308:67;:::i;:::-;22301:74;;22384:93;22473:3;22384:93;:::i;:::-;22502:2;22497:3;22493:12;22486:19;;22145:366;;;:::o;22517:419::-;22683:4;22721:2;22710:9;22706:18;22698:26;;22770:9;22764:4;22760:20;22756:1;22745:9;22741:17;22734:47;22798:131;22924:4;22798:131;:::i;:::-;22790:139;;22517:419;;;:::o;22942:224::-;23082:34;23078:1;23070:6;23066:14;23059:58;23151:7;23146:2;23138:6;23134:15;23127:32;22942:224;:::o;23172:366::-;23314:3;23335:67;23399:2;23394:3;23335:67;:::i;:::-;23328:74;;23411:93;23500:3;23411:93;:::i;:::-;23529:2;23524:3;23520:12;23513:19;;23172:366;;;:::o;23544:419::-;23710:4;23748:2;23737:9;23733:18;23725:26;;23797:9;23791:4;23787:20;23783:1;23772:9;23768:17;23761:47;23825:131;23951:4;23825:131;:::i;:::-;23817:139;;23544:419;;;:::o;23969:222::-;24109:34;24105:1;24097:6;24093:14;24086:58;24178:5;24173:2;24165:6;24161:15;24154:30;23969:222;:::o;24197:366::-;24339:3;24360:67;24424:2;24419:3;24360:67;:::i;:::-;24353:74;;24436:93;24525:3;24436:93;:::i;:::-;24554:2;24549:3;24545:12;24538:19;;24197:366;;;:::o;24569:419::-;24735:4;24773:2;24762:9;24758:18;24750:26;;24822:9;24816:4;24812:20;24808:1;24797:9;24793:17;24786:47;24850:131;24976:4;24850:131;:::i;:::-;24842:139;;24569:419;;;:::o;24994:172::-;25134:24;25130:1;25122:6;25118:14;25111:48;24994:172;:::o;25172:366::-;25314:3;25335:67;25399:2;25394:3;25335:67;:::i;:::-;25328:74;;25411:93;25500:3;25411:93;:::i;:::-;25529:2;25524:3;25520:12;25513:19;;25172:366;;;:::o;25544:419::-;25710:4;25748:2;25737:9;25733:18;25725:26;;25797:9;25791:4;25787:20;25783:1;25772:9;25768:17;25761:47;25825:131;25951:4;25825:131;:::i;:::-;25817:139;;25544:419;;;:::o;25969:297::-;26109:34;26105:1;26097:6;26093:14;26086:58;26178:34;26173:2;26165:6;26161:15;26154:59;26247:11;26242:2;26234:6;26230:15;26223:36;25969:297;:::o;26272:366::-;26414:3;26435:67;26499:2;26494:3;26435:67;:::i;:::-;26428:74;;26511:93;26600:3;26511:93;:::i;:::-;26629:2;26624:3;26620:12;26613:19;;26272:366;;;:::o;26644:419::-;26810:4;26848:2;26837:9;26833:18;26825:26;;26897:9;26891:4;26887:20;26883:1;26872:9;26868:17;26861:47;26925:131;27051:4;26925:131;:::i;:::-;26917:139;;26644:419;;;:::o;27069:240::-;27209:34;27205:1;27197:6;27193:14;27186:58;27278:23;27273:2;27265:6;27261:15;27254:48;27069:240;:::o;27315:366::-;27457:3;27478:67;27542:2;27537:3;27478:67;:::i;:::-;27471:74;;27554:93;27643:3;27554:93;:::i;:::-;27672:2;27667:3;27663:12;27656:19;;27315:366;;;:::o;27687:419::-;27853:4;27891:2;27880:9;27876:18;27868:26;;27940:9;27934:4;27930:20;27926:1;27915:9;27911:17;27904:47;27968:131;28094:4;27968:131;:::i;:::-;27960:139;;27687:419;;;:::o;28112:169::-;28252:21;28248:1;28240:6;28236:14;28229:45;28112:169;:::o;28287:366::-;28429:3;28450:67;28514:2;28509:3;28450:67;:::i;:::-;28443:74;;28526:93;28615:3;28526:93;:::i;:::-;28644:2;28639:3;28635:12;28628:19;;28287:366;;;:::o;28659:419::-;28825:4;28863:2;28852:9;28848:18;28840:26;;28912:9;28906:4;28902:20;28898:1;28887:9;28883:17;28876:47;28940:131;29066:4;28940:131;:::i;:::-;28932:139;;28659:419;;;:::o;29084:241::-;29224:34;29220:1;29212:6;29208:14;29201:58;29293:24;29288:2;29280:6;29276:15;29269:49;29084:241;:::o;29331:366::-;29473:3;29494:67;29558:2;29553:3;29494:67;:::i;:::-;29487:74;;29570:93;29659:3;29570:93;:::i;:::-;29688:2;29683:3;29679:12;29672:19;;29331:366;;;:::o;29703:419::-;29869:4;29907:2;29896:9;29892:18;29884:26;;29956:9;29950:4;29946:20;29942:1;29931:9;29927:17;29920:47;29984:131;30110:4;29984:131;:::i;:::-;29976:139;;29703:419;;;:::o;30128:194::-;30168:4;30188:20;30206:1;30188:20;:::i;:::-;30183:25;;30222:20;30240:1;30222:20;:::i;:::-;30217:25;;30266:1;30263;30259:9;30251:17;;30290:1;30284:4;30281:11;30278:37;;;30295:18;;:::i;:::-;30278:37;30128:194;;;;:::o;30328:147::-;30429:11;30466:3;30451:18;;30328:147;;;;:::o;30481:114::-;;:::o;30601:398::-;30760:3;30781:83;30862:1;30857:3;30781:83;:::i;:::-;30774:90;;30873:93;30962:3;30873:93;:::i;:::-;30991:1;30986:3;30982:11;30975:18;;30601:398;;;:::o;31005:379::-;31189:3;31211:147;31354:3;31211:147;:::i;:::-;31204:154;;31375:3;31368:10;;31005:379;;;:::o;31390:442::-;31539:4;31577:2;31566:9;31562:18;31554:26;;31590:71;31658:1;31647:9;31643:17;31634:6;31590:71;:::i;:::-;31671:72;31739:2;31728:9;31724:18;31715:6;31671:72;:::i;:::-;31753;31821:2;31810:9;31806:18;31797:6;31753:72;:::i;:::-;31390:442;;;;;;:::o;31838:220::-;31978:34;31974:1;31966:6;31962:14;31955:58;32047:3;32042:2;32034:6;32030:15;32023:28;31838:220;:::o;32064:366::-;32206:3;32227:67;32291:2;32286:3;32227:67;:::i;:::-;32220:74;;32303:93;32392:3;32303:93;:::i;:::-;32421:2;32416:3;32412:12;32405:19;;32064:366;;;:::o;32436:419::-;32602:4;32640:2;32629:9;32625:18;32617:26;;32689:9;32683:4;32679:20;32675:1;32664:9;32660:17;32653:47;32717:131;32843:4;32717:131;:::i;:::-;32709:139;;32436:419;;;:::o;32861:180::-;32909:77;32906:1;32899:88;33006:4;33003:1;32996:15;33030:4;33027:1;33020:15;33047:180;33095:77;33092:1;33085:88;33192:4;33189:1;33182:15;33216:4;33213:1;33206:15;33233:143;33290:5;33321:6;33315:13;33306:22;;33337:33;33364:5;33337:33;:::i;:::-;33233:143;;;;:::o;33382:351::-;33452:6;33501:2;33489:9;33480:7;33476:23;33472:32;33469:119;;;33507:79;;:::i;:::-;33469:119;33627:1;33652:64;33708:7;33699:6;33688:9;33684:22;33652:64;:::i;:::-;33642:74;;33598:128;33382:351;;;;:::o;33739:85::-;33784:7;33813:5;33802:16;;33739:85;;;:::o;33830:158::-;33888:9;33921:61;33939:42;33948:32;33974:5;33948:32;:::i;:::-;33939:42;:::i;:::-;33921:61;:::i;:::-;33908:74;;33830:158;;;:::o;33994:147::-;34089:45;34128:5;34089:45;:::i;:::-;34084:3;34077:58;33994:147;;:::o;34147:114::-;34214:6;34248:5;34242:12;34232:22;;34147:114;;;:::o;34267:184::-;34366:11;34400:6;34395:3;34388:19;34440:4;34435:3;34431:14;34416:29;;34267:184;;;;:::o;34457:132::-;34524:4;34547:3;34539:11;;34577:4;34572:3;34568:14;34560:22;;34457:132;;;:::o;34595:108::-;34672:24;34690:5;34672:24;:::i;:::-;34667:3;34660:37;34595:108;;:::o;34709:179::-;34778:10;34799:46;34841:3;34833:6;34799:46;:::i;:::-;34877:4;34872:3;34868:14;34854:28;;34709:179;;;;:::o;34894:113::-;34964:4;34996;34991:3;34987:14;34979:22;;34894:113;;;:::o;35043:732::-;35162:3;35191:54;35239:5;35191:54;:::i;:::-;35261:86;35340:6;35335:3;35261:86;:::i;:::-;35254:93;;35371:56;35421:5;35371:56;:::i;:::-;35450:7;35481:1;35466:284;35491:6;35488:1;35485:13;35466:284;;;35567:6;35561:13;35594:63;35653:3;35638:13;35594:63;:::i;:::-;35587:70;;35680:60;35733:6;35680:60;:::i;:::-;35670:70;;35526:224;35513:1;35510;35506:9;35501:14;;35466:284;;;35470:14;35766:3;35759:10;;35167:608;;;35043:732;;;;:::o;35781:111::-;35845:6;35879:5;35873:12;35863:22;;35781:111;;;:::o;35898:181::-;35994:11;36028:6;36023:3;36016:19;36068:4;36063:3;36059:14;36044:29;;35898:181;;;;:::o;36085:129::-;36149:4;36172:3;36164:11;;36202:4;36197:3;36193:14;36185:22;;36085:129;;;:::o;36220:99::-;36291:21;36306:5;36291:21;:::i;:::-;36286:3;36279:34;36220:99;;:::o;36325:167::-;36388:10;36409:40;36445:3;36437:6;36409:40;:::i;:::-;36481:4;36476:3;36472:14;36458:28;;36325:167;;;;:::o;36498:110::-;36565:4;36597;36592:3;36588:14;36580:22;;36498:110;;;:::o;36638:708::-;36751:3;36780:51;36825:5;36780:51;:::i;:::-;36847:83;36923:6;36918:3;36847:83;:::i;:::-;36840:90;;36954:53;37001:5;36954:53;:::i;:::-;37030:7;37061:1;37046:275;37071:6;37068:1;37065:13;37046:275;;;37147:6;37141:13;37174:57;37227:3;37212:13;37174:57;:::i;:::-;37167:64;;37254:57;37304:6;37254:57;:::i;:::-;37244:67;;37106:215;37093:1;37090;37086:9;37081:14;;37046:275;;;37050:14;37337:3;37330:10;;36756:590;;;36638:708;;;;:::o;37352:1081::-;37687:4;37725:3;37714:9;37710:19;37702:27;;37739:71;37807:1;37796:9;37792:17;37783:6;37739:71;:::i;:::-;37820:80;37896:2;37885:9;37881:18;37872:6;37820:80;:::i;:::-;37947:9;37941:4;37937:20;37932:2;37921:9;37917:18;37910:48;37975:108;38078:4;38069:6;37975:108;:::i;:::-;37967:116;;38093:72;38161:2;38150:9;38146:18;38137:6;38093:72;:::i;:::-;38175:73;38243:3;38232:9;38228:19;38219:6;38175:73;:::i;:::-;38296:9;38290:4;38286:20;38280:3;38269:9;38265:19;38258:49;38324:102;38421:4;38412:6;38324:102;:::i;:::-;38316:110;;37352:1081;;;;;;;;;:::o;38439:1033::-;38746:4;38784:3;38773:9;38769:19;38761:27;;38798:71;38866:1;38855:9;38851:17;38842:6;38798:71;:::i;:::-;38879:72;38947:2;38936:9;38932:18;38923:6;38879:72;:::i;:::-;38961:80;39037:2;39026:9;39022:18;39013:6;38961:80;:::i;:::-;39051;39127:2;39116:9;39112:18;39103:6;39051:80;:::i;:::-;39141:73;39209:3;39198:9;39194:19;39185:6;39141:73;:::i;:::-;39224;39292:3;39281:9;39277:19;39268:6;39224:73;:::i;:::-;39307:81;39383:3;39372:9;39368:19;39359:6;39307:81;:::i;:::-;39398:67;39460:3;39449:9;39445:19;39436:6;39398:67;:::i;:::-;38439:1033;;;;;;;;;;;:::o;39478:143::-;39535:5;39566:6;39560:13;39551:22;;39582:33;39609:5;39582:33;:::i;:::-;39478:143;;;;:::o;39627:663::-;39715:6;39723;39731;39780:2;39768:9;39759:7;39755:23;39751:32;39748:119;;;39786:79;;:::i;:::-;39748:119;39906:1;39931:64;39987:7;39978:6;39967:9;39963:22;39931:64;:::i;:::-;39921:74;;39877:128;40044:2;40070:64;40126:7;40117:6;40106:9;40102:22;40070:64;:::i;:::-;40060:74;;40015:129;40183:2;40209:64;40265:7;40256:6;40245:9;40241:22;40209:64;:::i;:::-;40199:74;;40154:129;39627:663;;;;;:::o
Swarm Source
ipfs://4437e0ad83cf6486bde5cd141fc6e3b87d1a14dc5ffab7c81bfb5e675f91bd82
[ 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.