Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000 DB
Holders
94
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
0.000000000024715586 DBValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
DmitryButerin
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-02-28 */ // Dmitry Buterin (DB) // A total of 10% of the total supply is dedicated to Dmitry Buterin & Vitalik Buterin. // Telegram: https://t.me/DmitryButerin // Twitter: https://twitter.com/Dmitry_Buterin // Website: https://dmitrytoken.com/ // Medium: https://medium.com/@DmitryButerinERC20 // Tax: 0/0 //SPDX-License-Identifier: Unlicensed pragma solidity 0.8.17; 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 IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface 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 IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract DmitryButerin is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool private swapping; address private marketingWallet; address private devWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = true; bool public swapEnabled = true; bool public blacklistMode = true; mapping (address => bool) public isblacklisted; 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; // block number of opened trading uint256 launchedAt; /******************/ // exclude 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 partners; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event Setpartner(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("Dmitry Buterin","DB") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setpartner(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 2; uint256 _buyLiquidityFee = 1; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 2; uint256 _sellLiquidityFee = 1; uint256 _sellDevFee = 0; uint256 totalSupply = 1 * 1e8 * 1e18; maxTransactionAmount = totalSupply * 10 / 1000; // 1% on launch limits will be removed before rennounce maxWallet = totalSupply * 10 / 1000; // 1% swapTokensAtAmount = totalSupply * 5 / 10000; // 0.1% buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = 0xEE30D1D74F9d5B6e90e36F0d4601D6d1a4B084B7; devWallet = 0xEE30D1D74F9d5B6e90e36F0d4601D6d1a4B084B7; // 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; launchedAt = block.number; } function set_blacklist(bool _status) public onlyOwner { blacklistMode = _status; } function addtoblacklist(address[] calldata addresses, bool status) public onlyOwner { for (uint256 i; i < addresses.length; ++i) { isblacklisted[addresses[i]] = status; } } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return 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; } function updateBuyFees( uint256 _devFee, uint256 _liquidityFee, uint256 _marketingFee ) external onlyOwner { buyDevFee = _devFee; buyLiquidityFee = _liquidityFee; buyMarketingFee = _marketingFee; buyTotalFees = buyDevFee + buyLiquidityFee + buyMarketingFee; require(buyTotalFees <= 95, "Must keep fees at 95% or less"); } function updateSellFees( uint256 _devFee, uint256 _liquidityFee, uint256 _marketingFee ) external onlyOwner { sellDevFee = _devFee; sellLiquidityFee = _liquidityFee; sellMarketingFee = _marketingFee; sellTotalFees = sellDevFee + sellLiquidityFee + sellMarketingFee; require(sellTotalFees <= 95, "Must keep fees at 95% or less"); } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setpartner(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from partners"); _setpartner(pair, value); } function _setpartner(address pair, bool value) private { partners[pair] = value; emit Setpartner(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."); } if(blacklistMode){ require(!isblacklisted[from], "blacklisted"); } //when buy if (partners[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } else if (partners[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 && !partners[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 (partners[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(partners[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); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable address(this), block.timestamp ); } 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}(""); } }
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":"Setpartner","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":"addresses","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"addtoblacklist","outputs":[],"stateMutability":"nonpayable","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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"blacklistMode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"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":"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":[{"internalType":"address","name":"","type":"address"}],"name":"isblacklisted","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":"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":[{"internalType":"address","name":"","type":"address"}],"name":"partners","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"bool","name":"_status","type":"bool"}],"name":"set_blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setpartner","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":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","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":"_devFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_marketingFee","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
60c06040526001600b60006101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055506001600b60036101000a81548160ff0219169083151502179055503480156200007d57600080fd5b506040518060400160405280600e81526020017f446d69747279204275746572696e0000000000000000000000000000000000008152506040518060400160405280600281526020017f44420000000000000000000000000000000000000000000000000000000000008152508160039081620000fb919062000dfc565b5080600490816200010d919062000dfc565b5050506000620001226200064f60201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620001ed8160016200065760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000293919062000f4d565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002fb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000321919062000f4d565b6040518363ffffffff1660e01b81526004016200034092919062000f90565b6020604051808303816000875af115801562000360573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000386919062000f4d565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003ce60a05160016200065760201b60201c565b620003e360a05160016200075460201b60201c565b600060029050600060019050600080600290506000600190506000806a52b7d2dcc80cd2e400000090506103e8600a826200041f919062000fec565b6200042b919062001066565b6008819055506103e8600a8262000443919062000fec565b6200044f919062001066565b600a8190555061271060058262000467919062000fec565b62000473919062001066565b60098190555086600e8190555085600f8190555084601081905550601054600f54600e54620004a391906200109e565b620004af91906200109e565b600d81905550836012819055508260138190555081601481905550601454601354601254620004df91906200109e565b620004eb91906200109e565b60118190555073ee30d1d74f9d5b6e90e36f0d4601d6d1a4b084b7600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073ee30d1d74f9d5b6e90e36f0d4601d6d1a4b084b7600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005bd620005af620007f560201b60201c565b60016200081f60201b60201c565b620005d03060016200081f60201b60201c565b620005e561dead60016200081f60201b60201c565b62000607620005f9620007f560201b60201c565b60016200065760201b60201c565b6200061a3060016200065760201b60201c565b6200062f61dead60016200065760201b60201c565b6200064133826200096c60201b60201c565b5050505050505050620012a8565b600033905090565b620006676200064f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006f9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006f0906200113a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200082f6200064f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008c1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008b8906200113a565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000960919062001179565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009de576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009d590620011e6565b60405180910390fd5b620009f26000838362000b1a60201b60201c565b62000a0e8160025462000b1f60201b620026661790919060201c565b60028190555062000a6c816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b1f60201b620026661790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b0e919062001219565b60405180910390a35050565b505050565b600080828462000b3091906200109e565b90508381101562000b78576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b6f9062001286565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c0457607f821691505b60208210810362000c1a5762000c1962000bbc565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000c847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c45565b62000c90868362000c45565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000cdd62000cd762000cd18462000ca8565b62000cb2565b62000ca8565b9050919050565b6000819050919050565b62000cf98362000cbc565b62000d1162000d088262000ce4565b84845462000c52565b825550505050565b600090565b62000d2862000d19565b62000d3581848462000cee565b505050565b5b8181101562000d5d5762000d5160008262000d1e565b60018101905062000d3b565b5050565b601f82111562000dac5762000d768162000c20565b62000d818462000c35565b8101602085101562000d91578190505b62000da962000da08562000c35565b83018262000d3a565b50505b505050565b600082821c905092915050565b600062000dd16000198460080262000db1565b1980831691505092915050565b600062000dec838362000dbe565b9150826002028217905092915050565b62000e078262000b82565b67ffffffffffffffff81111562000e235762000e2262000b8d565b5b62000e2f825462000beb565b62000e3c82828562000d61565b600060209050601f83116001811462000e74576000841562000e5f578287015190505b62000e6b858262000dde565b86555062000edb565b601f19841662000e848662000c20565b60005b8281101562000eae5784890151825560018201915060208501945060208101905062000e87565b8683101562000ece578489015162000eca601f89168262000dbe565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000f158262000ee8565b9050919050565b62000f278162000f08565b811462000f3357600080fd5b50565b60008151905062000f478162000f1c565b92915050565b60006020828403121562000f665762000f6562000ee3565b5b600062000f768482850162000f36565b91505092915050565b62000f8a8162000f08565b82525050565b600060408201905062000fa7600083018562000f7f565b62000fb6602083018462000f7f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ff98262000ca8565b9150620010068362000ca8565b9250828202620010168162000ca8565b9150828204841483151762001030576200102f62000fbd565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010738262000ca8565b9150620010808362000ca8565b92508262001093576200109262001037565b5b828204905092915050565b6000620010ab8262000ca8565b9150620010b88362000ca8565b9250828201905080821115620010d357620010d262000fbd565b5b92915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062001122602083620010d9565b91506200112f82620010ea565b602082019050919050565b60006020820190508181036000830152620011558162001113565b9050919050565b60008115159050919050565b62001173816200115c565b82525050565b600060208201905062001190600083018462001168565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620011ce601f83620010d9565b9150620011db8262001196565b602082019050919050565b600060208201905081810360008301526200120181620011bf565b9050919050565b620012138162000ca8565b82525050565b600060208201905062001230600083018462001208565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200126e601b83620010d9565b91506200127b8262001236565b602082019050919050565b60006020820190508181036000830152620012a1816200125f565b9050919050565b60805160a051615431620012f860003960008181610f9b01526112fc015260008181610d7901528181613c3801528181613d1901528181613d4001528181613ddc0152613e0301526154316000f3fe60806040526004361061031e5760003560e01c80638da5cb5b116101ab578063c0246668116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610bfd578063f2fde38b14610c28578063f637434214610c51578063f8b45b0514610c7c57610325565b8063e2f4560514610b6c578063eb855ec314610b97578063ed6a596514610bc057610325565b8063c8c8ebe4116100d1578063c8c8ebe414610a9c578063d257b34f14610ac7578063d85ba06314610b04578063dd62ed3e14610b2f57610325565b8063c024666814610a21578063c17b5b8c14610a4a578063c18bc19514610a7357610325565b80639c3b4fdc11610164578063a457c2d71161013e578063a457c2d714610953578063a9059cbb14610990578063aacebbe3146109cd578063bbc0c742146109f657610325565b80639c3b4fdc146108d25780639fccce32146108fd578063a0d82dc51461092857610325565b80638da5cb5b146107c257806392136913146107ed578063924de9b714610818578063929684ac1461084157806395c336521461086a57806395d89b41146108a757610325565b806349bd5a5e1161026a578063715018a6116102235780637bce5a04116101fd5780637bce5a041461072c5780638095d56414610757578063896648c1146107805780638a8c523c146107ab57610325565b8063715018a6146106c1578063751039fc146106d85780637571336a1461070357610325565b806349bd5a5e1461059b5780634a62bb65146105c65780634fbee193146105f15780636a486a8e1461062e5780636ddd17131461065957806370a082311461068457610325565b80631a8145bb116102d7578063203e727e116102b1578063203e727e146104cd57806323b872dd146104f6578063313ce56714610533578063395093511461055e57610325565b80631a8145bb1461044e5780631a89e947146104795780631f3fed8f146104a257610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631816467f1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610ca7565b60405161034c9190613fa3565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614063565b610d39565b60405161038991906140be565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906140d9565b610d57565b6040516103c691906140be565b60405180910390f35b3480156103db57600080fd5b506103e4610d77565b6040516103f19190614165565b60405180910390f35b34801561040657600080fd5b5061040f610d9b565b60405161041c919061418f565b60405180910390f35b34801561043157600080fd5b5061044c600480360381019061044791906140d9565b610da5565b005b34801561045a57600080fd5b50610463610efc565b604051610470919061418f565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b91906141d6565b610f02565b005b3480156104ae57600080fd5b506104b7611035565b6040516104c4919061418f565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190614216565b61103b565b005b34801561050257600080fd5b5061051d60048036038101906105189190614243565b611165565b60405161052a91906140be565b60405180910390f35b34801561053f57600080fd5b5061054861123e565b60405161055591906142b2565b60405180910390f35b34801561056a57600080fd5b5061058560048036038101906105809190614063565b611247565b60405161059291906140be565b60405180910390f35b3480156105a757600080fd5b506105b06112fa565b6040516105bd91906142dc565b60405180910390f35b3480156105d257600080fd5b506105db61131e565b6040516105e891906140be565b60405180910390f35b3480156105fd57600080fd5b50610618600480360381019061061391906140d9565b611331565b60405161062591906140be565b60405180910390f35b34801561063a57600080fd5b50610643611387565b604051610650919061418f565b60405180910390f35b34801561066557600080fd5b5061066e61138d565b60405161067b91906140be565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a691906140d9565b6113a0565b6040516106b8919061418f565b60405180910390f35b3480156106cd57600080fd5b506106d66113e8565b005b3480156106e457600080fd5b506106ed611540565b6040516106fa91906140be565b60405180910390f35b34801561070f57600080fd5b5061072a600480360381019061072591906141d6565b6115fb565b005b34801561073857600080fd5b506107416116ed565b60405161074e919061418f565b60405180910390f35b34801561076357600080fd5b5061077e600480360381019061077991906142f7565b6116f3565b005b34801561078c57600080fd5b5061079561180d565b6040516107a291906140be565b60405180910390f35b3480156107b757600080fd5b506107c0611820565b005b3480156107ce57600080fd5b506107d76118f6565b6040516107e491906142dc565b60405180910390f35b3480156107f957600080fd5b50610802611920565b60405161080f919061418f565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a919061434a565b611926565b005b34801561084d57600080fd5b50610868600480360381019061086391906143dc565b6119da565b005b34801561087657600080fd5b50610891600480360381019061088c91906140d9565b611b14565b60405161089e91906140be565b60405180910390f35b3480156108b357600080fd5b506108bc611b34565b6040516108c99190613fa3565b60405180910390f35b3480156108de57600080fd5b506108e7611bc6565b6040516108f4919061418f565b60405180910390f35b34801561090957600080fd5b50610912611bcc565b60405161091f919061418f565b60405180910390f35b34801561093457600080fd5b5061093d611bd2565b60405161094a919061418f565b60405180910390f35b34801561095f57600080fd5b5061097a60048036038101906109759190614063565b611bd8565b60405161098791906140be565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b29190614063565b611ca5565b6040516109c491906140be565b60405180910390f35b3480156109d957600080fd5b506109f460048036038101906109ef91906140d9565b611cc3565b005b348015610a0257600080fd5b50610a0b611e1a565b604051610a1891906140be565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a4391906141d6565b611e2d565b005b348015610a5657600080fd5b50610a716004803603810190610a6c91906142f7565b611f6d565b005b348015610a7f57600080fd5b50610a9a6004803603810190610a959190614216565b612087565b005b348015610aa857600080fd5b50610ab16121b1565b604051610abe919061418f565b60405180910390f35b348015610ad357600080fd5b50610aee6004803603810190610ae99190614216565b6121b7565b604051610afb91906140be565b60405180910390f35b348015610b1057600080fd5b50610b19612327565b604051610b26919061418f565b60405180910390f35b348015610b3b57600080fd5b50610b566004803603810190610b51919061443c565b61232d565b604051610b63919061418f565b60405180910390f35b348015610b7857600080fd5b50610b816123b4565b604051610b8e919061418f565b60405180910390f35b348015610ba357600080fd5b50610bbe6004803603810190610bb9919061434a565b6123ba565b005b348015610bcc57600080fd5b50610be76004803603810190610be291906140d9565b61246e565b604051610bf491906140be565b60405180910390f35b348015610c0957600080fd5b50610c1261248e565b604051610c1f919061418f565b60405180910390f35b348015610c3457600080fd5b50610c4f6004803603810190610c4a91906140d9565b612494565b005b348015610c5d57600080fd5b50610c6661265a565b604051610c73919061418f565b60405180910390f35b348015610c8857600080fd5b50610c91612660565b604051610c9e919061418f565b60405180910390f35b606060038054610cb6906144ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce2906144ab565b8015610d2f5780601f10610d0457610100808354040283529160200191610d2f565b820191906000526020600020905b815481529060010190602001808311610d1257829003601f168201915b5050505050905090565b6000610d4d610d466126c4565b84846126cc565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b610dad6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3390614528565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b610f0a6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9090614528565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e906145ba565b60405180910390fd5b6110318282612895565b5050565b60155481565b6110436126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990614528565b60405180910390fd5b670de0b6b3a76400006103e860016110e8610d9b565b6110f29190614609565b6110fc919061467a565b611106919061467a565b811015611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f9061471d565b60405180910390fd5b670de0b6b3a76400008161115c9190614609565b60088190555050565b6000611172848484612936565b6112338461117e6126c4565b61122e856040518060600160405280602881526020016153af60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111e46126c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134a89092919063ffffffff16565b6126cc565b600190509392505050565b60006012905090565b60006112f06112546126c4565b846112eb85600160006112656126c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266690919063ffffffff16565b6126cc565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113f06126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461147f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147690614528565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061154a6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d090614528565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6116036126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168990614528565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b6116fb6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190614528565b60405180910390fd5b8260108190555081600f8190555080600e81905550600e54600f546010546117b2919061473d565b6117bc919061473d565b600d81905550605f600d541115611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff906147bd565b60405180910390fd5b505050565b600b60039054906101000a900460ff1681565b6118286126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ae90614528565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b61192e6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b490614528565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6119e26126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6890614528565b60405180910390fd5b60005b83839050811015611b0e5781600c6000868685818110611a9757611a966147dd565b5b9050602002016020810190611aac91906140d9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611b079061480c565b9050611a74565b50505050565b601b6020528060005260406000206000915054906101000a900460ff1681565b606060048054611b43906144ab565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6f906144ab565b8015611bbc5780601f10611b9157610100808354040283529160200191611bbc565b820191906000526020600020905b815481529060010190602001808311611b9f57829003601f168201915b5050505050905090565b60105481565b60175481565b60145481565b6000611c9b611be56126c4565b84611c96856040518060600160405280602581526020016153d76025913960016000611c0f6126c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134a89092919063ffffffff16565b6126cc565b6001905092915050565b6000611cb9611cb26126c4565b8484612936565b6001905092915050565b611ccb6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190614528565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60019054906101000a900460ff1681565b611e356126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb90614528565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f6191906140be565b60405180910390a25050565b611f756126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90614528565b60405180910390fd5b82601481905550816013819055508060128190555060125460135460145461202c919061473d565b612036919061473d565b601181905550605f6011541115612082576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612079906147bd565b60405180910390fd5b505050565b61208f6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461211e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211590614528565b60405180910390fd5b670de0b6b3a76400006103e86005612134610d9b565b61213e9190614609565b612148919061467a565b612152919061467a565b811015612194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218b906148c6565b60405180910390fd5b670de0b6b3a7640000816121a89190614609565b600a8190555050565b60085481565b60006121c16126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224790614528565b60405180910390fd5b620186a0600161225e610d9b565b6122689190614609565b612272919061467a565b8210156122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ab90614958565b60405180910390fd5b6103e860056122c1610d9b565b6122cb9190614609565b6122d5919061467a565b821115612317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230e906149ea565b60405180910390fd5b8160098190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6123c26126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244890614528565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600f5481565b61249c6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461252b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252290614528565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361259a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259190614a7c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b600a5481565b6000808284612675919061473d565b9050838110156126ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b190614ae8565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361273b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273290614b7a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a190614c0c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612888919061418f565b60405180910390a3505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c90614c9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0b90614d30565b60405180910390fd5b60008103612a2d57612a288383600061350c565b6134a3565b600b60009054906101000a900460ff1615612fcb57612a4a6118f6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ab85750612a886118f6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612af15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b2b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b445750600560149054906101000a900460ff16155b15612fca57600b60019054906101000a900460ff16612c3e57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bfe5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3490614d9c565b60405180910390fd5b5b600b60039054906101000a900460ff1615612ce157600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd790614e08565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d845750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e2b57600854811115612dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc590614e9a565b60405180910390fd5b600a54612dda836113a0565b82612de5919061473d565b1115612e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1d90614f06565b60405180910390fd5b612fc9565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ece5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f1d57600854811115612f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0f90614f98565b60405180910390fd5b612fc8565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fc757600a54612f7a836113a0565b82612f85919061473d565b1115612fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbd90614f06565b60405180910390fd5b5b5b5b5b5b6000612fd6306113a0565b905060006009548210159050808015612ffb5750600b60029054906101000a900460ff165b80156130145750600560149054906101000a900460ff16155b801561306a5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130c05750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131165750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561315a576001600560146101000a81548160ff02191690831515021790555061313e61379f565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132105750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561321a57600090505b6000811561349357601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561327d57506000601154115b1561334a576132aa606461329c60115488613a8690919063ffffffff16565b613b0090919063ffffffff16565b9050601154601354826132bd9190614609565b6132c7919061467a565b601660008282546132d8919061473d565b92505081905550601154601454826132f09190614609565b6132fa919061467a565b6017600082825461330b919061473d565b92505081905550601154601254826133239190614609565b61332d919061467a565b6015600082825461333e919061473d565b9250508190555061346f565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133a557506000600d54115b1561346e576133d260646133c4600d5488613a8690919063ffffffff16565b613b0090919063ffffffff16565b9050600d54600f54826133e59190614609565b6133ef919061467a565b60166000828254613400919061473d565b92505081905550600d54601054826134189190614609565b613422919061467a565b60176000828254613433919061473d565b92505081905550600d54600e548261344b9190614609565b613455919061467a565b60156000828254613466919061473d565b925050819055505b5b60008111156134845761348387308361350c565b5b80856134909190614fb8565b94505b61349e87878761350c565b505050505b505050565b60008383111582906134f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e79190613fa3565b60405180910390fd5b50600083856134ff9190614fb8565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361357b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357290614c9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036135ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e190614d30565b60405180910390fd5b6135f5838383613b4a565b61366081604051806060016040528060268152602001615389602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134a89092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136f3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613792919061418f565b60405180910390a3505050565b60006137aa306113a0565b905060006017546015546016546137c1919061473d565b6137cb919061473d565b90506000808314806137dd5750600082145b156137ea57505050613a84565b60146009546137f99190614609565b83111561381257601460095461380f9190614609565b92505b6000600283601654866138259190614609565b61382f919061467a565b613839919061467a565b905060006138508286613b4f90919063ffffffff16565b9050600047905061386082613b99565b60006138758247613b4f90919063ffffffff16565b905060006138a08761389260155485613a8690919063ffffffff16565b613b0090919063ffffffff16565b905060006138cb886138bd60175486613a8690919063ffffffff16565b613b0090919063ffffffff16565b905060008183856138dc9190614fb8565b6138e69190614fb8565b9050600060168190555060006015819055506000601781905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516139469061501d565b60006040518083038185875af1925050503d8060008114613983576040519150601f19603f3d011682016040523d82523d6000602084013e613988565b606091505b50508098505060008711801561399e5750600081115b156139eb576139ad8782613dd6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826016546040516139e293929190615032565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a319061501d565b60006040518083038185875af1925050503d8060008114613a6e576040519150601f19603f3d011682016040523d82523d6000602084013e613a73565b606091505b505080985050505050505050505050505b565b6000808303613a985760009050613afa565b60008284613aa69190614609565b9050828482613ab5919061467a565b14613af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aec906150db565b60405180910390fd5b809150505b92915050565b6000613b4283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613eb0565b905092915050565b505050565b6000613b9183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134a8565b905092915050565b6000600267ffffffffffffffff811115613bb657613bb56150fb565b5b604051908082528060200260200182016040528015613be45781602001602082028036833780820191505090505b5090503081600081518110613bfc57613bfb6147dd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc5919061513f565b81600181518110613cd957613cd86147dd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d3e307f0000000000000000000000000000000000000000000000000000000000000000846126cc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613da0959493929190615265565b600060405180830381600087803b158015613dba57600080fd5b505af1158015613dce573d6000803e3d6000fd5b505050505050565b613e01307f0000000000000000000000000000000000000000000000000000000000000000846126cc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613e66969594939291906152bf565b60606040518083038185885af1158015613e84573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ea99190615335565b5050505050565b60008083118290613ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eee9190613fa3565b60405180910390fd5b5060008385613f06919061467a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f4d578082015181840152602081019050613f32565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f7582613f13565b613f7f8185613f1e565b9350613f8f818560208601613f2f565b613f9881613f59565b840191505092915050565b60006020820190508181036000830152613fbd8184613f6a565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ffa82613fcf565b9050919050565b61400a81613fef565b811461401557600080fd5b50565b60008135905061402781614001565b92915050565b6000819050919050565b6140408161402d565b811461404b57600080fd5b50565b60008135905061405d81614037565b92915050565b6000806040838503121561407a57614079613fc5565b5b600061408885828601614018565b92505060206140998582860161404e565b9150509250929050565b60008115159050919050565b6140b8816140a3565b82525050565b60006020820190506140d360008301846140af565b92915050565b6000602082840312156140ef576140ee613fc5565b5b60006140fd84828501614018565b91505092915050565b6000819050919050565b600061412b61412661412184613fcf565b614106565b613fcf565b9050919050565b600061413d82614110565b9050919050565b600061414f82614132565b9050919050565b61415f81614144565b82525050565b600060208201905061417a6000830184614156565b92915050565b6141898161402d565b82525050565b60006020820190506141a46000830184614180565b92915050565b6141b3816140a3565b81146141be57600080fd5b50565b6000813590506141d0816141aa565b92915050565b600080604083850312156141ed576141ec613fc5565b5b60006141fb85828601614018565b925050602061420c858286016141c1565b9150509250929050565b60006020828403121561422c5761422b613fc5565b5b600061423a8482850161404e565b91505092915050565b60008060006060848603121561425c5761425b613fc5565b5b600061426a86828701614018565b935050602061427b86828701614018565b925050604061428c8682870161404e565b9150509250925092565b600060ff82169050919050565b6142ac81614296565b82525050565b60006020820190506142c760008301846142a3565b92915050565b6142d681613fef565b82525050565b60006020820190506142f160008301846142cd565b92915050565b6000806000606084860312156143105761430f613fc5565b5b600061431e8682870161404e565b935050602061432f8682870161404e565b92505060406143408682870161404e565b9150509250925092565b6000602082840312156143605761435f613fc5565b5b600061436e848285016141c1565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261439c5761439b614377565b5b8235905067ffffffffffffffff8111156143b9576143b861437c565b5b6020830191508360208202830111156143d5576143d4614381565b5b9250929050565b6000806000604084860312156143f5576143f4613fc5565b5b600084013567ffffffffffffffff81111561441357614412613fca565b5b61441f86828701614386565b93509350506020614432868287016141c1565b9150509250925092565b6000806040838503121561445357614452613fc5565b5b600061446185828601614018565b925050602061447285828601614018565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144c357607f821691505b6020821081036144d6576144d561447c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614512602083613f1e565b915061451d826144dc565b602082019050919050565b6000602082019050818103600083015261454181614505565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f706172746e657273000000000000000000000000000000000000000000000000602082015250565b60006145a4602883613f1e565b91506145af82614548565b604082019050919050565b600060208201905081810360008301526145d381614597565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146148261402d565b915061461f8361402d565b925082820261462d8161402d565b91508282048414831517614644576146436145da565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146858261402d565b91506146908361402d565b9250826146a05761469f61464b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614707602f83613f1e565b9150614712826146ab565b604082019050919050565b60006020820190508181036000830152614736816146fa565b9050919050565b60006147488261402d565b91506147538361402d565b925082820190508082111561476b5761476a6145da565b5b92915050565b7f4d757374206b656570206665657320617420393525206f72206c657373000000600082015250565b60006147a7601d83613f1e565b91506147b282614771565b602082019050919050565b600060208201905081810360008301526147d68161479a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006148178261402d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614849576148486145da565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006148b0602483613f1e565b91506148bb82614854565b604082019050919050565b600060208201905081810360008301526148df816148a3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614942603583613f1e565b915061494d826148e6565b604082019050919050565b6000602082019050818103600083015261497181614935565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006149d4603483613f1e565b91506149df82614978565b604082019050919050565b60006020820190508181036000830152614a03816149c7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a66602683613f1e565b9150614a7182614a0a565b604082019050919050565b60006020820190508181036000830152614a9581614a59565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614ad2601b83613f1e565b9150614add82614a9c565b602082019050919050565b60006020820190508181036000830152614b0181614ac5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b64602483613f1e565b9150614b6f82614b08565b604082019050919050565b60006020820190508181036000830152614b9381614b57565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bf6602283613f1e565b9150614c0182614b9a565b604082019050919050565b60006020820190508181036000830152614c2581614be9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c88602583613f1e565b9150614c9382614c2c565b604082019050919050565b60006020820190508181036000830152614cb781614c7b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d1a602383613f1e565b9150614d2582614cbe565b604082019050919050565b60006020820190508181036000830152614d4981614d0d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d86601683613f1e565b9150614d9182614d50565b602082019050919050565b60006020820190508181036000830152614db581614d79565b9050919050565b7f626c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614df2600b83613f1e565b9150614dfd82614dbc565b602082019050919050565b60006020820190508181036000830152614e2181614de5565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614e84603583613f1e565b9150614e8f82614e28565b604082019050919050565b60006020820190508181036000830152614eb381614e77565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614ef0601383613f1e565b9150614efb82614eba565b602082019050919050565b60006020820190508181036000830152614f1f81614ee3565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614f82603683613f1e565b9150614f8d82614f26565b604082019050919050565b60006020820190508181036000830152614fb181614f75565b9050919050565b6000614fc38261402d565b9150614fce8361402d565b9250828203905081811115614fe657614fe56145da565b5b92915050565b600081905092915050565b50565b6000615007600083614fec565b915061501282614ff7565b600082019050919050565b600061502882614ffa565b9150819050919050565b60006060820190506150476000830186614180565b6150546020830185614180565b6150616040830184614180565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150c5602183613f1e565b91506150d082615069565b604082019050919050565b600060208201905081810360008301526150f4816150b8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061513981614001565b92915050565b60006020828403121561515557615154613fc5565b5b60006151638482850161512a565b91505092915050565b6000819050919050565b600061519161518c6151878461516c565b614106565b61402d565b9050919050565b6151a181615176565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151dc81613fef565b82525050565b60006151ee83836151d3565b60208301905092915050565b6000602082019050919050565b6000615212826151a7565b61521c81856151b2565b9350615227836151c3565b8060005b8381101561525857815161523f88826151e2565b975061524a836151fa565b92505060018101905061522b565b5085935050505092915050565b600060a08201905061527a6000830188614180565b6152876020830187615198565b81810360408301526152998186615207565b90506152a860608301856142cd565b6152b56080830184614180565b9695505050505050565b600060c0820190506152d460008301896142cd565b6152e16020830188614180565b6152ee6040830187615198565b6152fb6060830186615198565b61530860808301856142cd565b61531560a0830184614180565b979650505050505050565b60008151905061532f81614037565b92915050565b60008060006060848603121561534e5761534d613fc5565b5b600061535c86828701615320565b935050602061536d86828701615320565b925050604061537e86828701615320565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208fdc4ffba30ec81543469ebee2d024afd28688479f8937a56fab8401e335d36e64736f6c63430008110033
Deployed Bytecode
0x60806040526004361061031e5760003560e01c80638da5cb5b116101ab578063c0246668116100f7578063e2f4560511610095578063f11a24d31161006f578063f11a24d314610bfd578063f2fde38b14610c28578063f637434214610c51578063f8b45b0514610c7c57610325565b8063e2f4560514610b6c578063eb855ec314610b97578063ed6a596514610bc057610325565b8063c8c8ebe4116100d1578063c8c8ebe414610a9c578063d257b34f14610ac7578063d85ba06314610b04578063dd62ed3e14610b2f57610325565b8063c024666814610a21578063c17b5b8c14610a4a578063c18bc19514610a7357610325565b80639c3b4fdc11610164578063a457c2d71161013e578063a457c2d714610953578063a9059cbb14610990578063aacebbe3146109cd578063bbc0c742146109f657610325565b80639c3b4fdc146108d25780639fccce32146108fd578063a0d82dc51461092857610325565b80638da5cb5b146107c257806392136913146107ed578063924de9b714610818578063929684ac1461084157806395c336521461086a57806395d89b41146108a757610325565b806349bd5a5e1161026a578063715018a6116102235780637bce5a04116101fd5780637bce5a041461072c5780638095d56414610757578063896648c1146107805780638a8c523c146107ab57610325565b8063715018a6146106c1578063751039fc146106d85780637571336a1461070357610325565b806349bd5a5e1461059b5780634a62bb65146105c65780634fbee193146105f15780636a486a8e1461062e5780636ddd17131461065957806370a082311461068457610325565b80631a8145bb116102d7578063203e727e116102b1578063203e727e146104cd57806323b872dd146104f6578063313ce56714610533578063395093511461055e57610325565b80631a8145bb1461044e5780631a89e947146104795780631f3fed8f146104a257610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631816467f1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610ca7565b60405161034c9190613fa3565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190614063565b610d39565b60405161038991906140be565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906140d9565b610d57565b6040516103c691906140be565b60405180910390f35b3480156103db57600080fd5b506103e4610d77565b6040516103f19190614165565b60405180910390f35b34801561040657600080fd5b5061040f610d9b565b60405161041c919061418f565b60405180910390f35b34801561043157600080fd5b5061044c600480360381019061044791906140d9565b610da5565b005b34801561045a57600080fd5b50610463610efc565b604051610470919061418f565b60405180910390f35b34801561048557600080fd5b506104a0600480360381019061049b91906141d6565b610f02565b005b3480156104ae57600080fd5b506104b7611035565b6040516104c4919061418f565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190614216565b61103b565b005b34801561050257600080fd5b5061051d60048036038101906105189190614243565b611165565b60405161052a91906140be565b60405180910390f35b34801561053f57600080fd5b5061054861123e565b60405161055591906142b2565b60405180910390f35b34801561056a57600080fd5b5061058560048036038101906105809190614063565b611247565b60405161059291906140be565b60405180910390f35b3480156105a757600080fd5b506105b06112fa565b6040516105bd91906142dc565b60405180910390f35b3480156105d257600080fd5b506105db61131e565b6040516105e891906140be565b60405180910390f35b3480156105fd57600080fd5b50610618600480360381019061061391906140d9565b611331565b60405161062591906140be565b60405180910390f35b34801561063a57600080fd5b50610643611387565b604051610650919061418f565b60405180910390f35b34801561066557600080fd5b5061066e61138d565b60405161067b91906140be565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a691906140d9565b6113a0565b6040516106b8919061418f565b60405180910390f35b3480156106cd57600080fd5b506106d66113e8565b005b3480156106e457600080fd5b506106ed611540565b6040516106fa91906140be565b60405180910390f35b34801561070f57600080fd5b5061072a600480360381019061072591906141d6565b6115fb565b005b34801561073857600080fd5b506107416116ed565b60405161074e919061418f565b60405180910390f35b34801561076357600080fd5b5061077e600480360381019061077991906142f7565b6116f3565b005b34801561078c57600080fd5b5061079561180d565b6040516107a291906140be565b60405180910390f35b3480156107b757600080fd5b506107c0611820565b005b3480156107ce57600080fd5b506107d76118f6565b6040516107e491906142dc565b60405180910390f35b3480156107f957600080fd5b50610802611920565b60405161080f919061418f565b60405180910390f35b34801561082457600080fd5b5061083f600480360381019061083a919061434a565b611926565b005b34801561084d57600080fd5b50610868600480360381019061086391906143dc565b6119da565b005b34801561087657600080fd5b50610891600480360381019061088c91906140d9565b611b14565b60405161089e91906140be565b60405180910390f35b3480156108b357600080fd5b506108bc611b34565b6040516108c99190613fa3565b60405180910390f35b3480156108de57600080fd5b506108e7611bc6565b6040516108f4919061418f565b60405180910390f35b34801561090957600080fd5b50610912611bcc565b60405161091f919061418f565b60405180910390f35b34801561093457600080fd5b5061093d611bd2565b60405161094a919061418f565b60405180910390f35b34801561095f57600080fd5b5061097a60048036038101906109759190614063565b611bd8565b60405161098791906140be565b60405180910390f35b34801561099c57600080fd5b506109b760048036038101906109b29190614063565b611ca5565b6040516109c491906140be565b60405180910390f35b3480156109d957600080fd5b506109f460048036038101906109ef91906140d9565b611cc3565b005b348015610a0257600080fd5b50610a0b611e1a565b604051610a1891906140be565b60405180910390f35b348015610a2d57600080fd5b50610a486004803603810190610a4391906141d6565b611e2d565b005b348015610a5657600080fd5b50610a716004803603810190610a6c91906142f7565b611f6d565b005b348015610a7f57600080fd5b50610a9a6004803603810190610a959190614216565b612087565b005b348015610aa857600080fd5b50610ab16121b1565b604051610abe919061418f565b60405180910390f35b348015610ad357600080fd5b50610aee6004803603810190610ae99190614216565b6121b7565b604051610afb91906140be565b60405180910390f35b348015610b1057600080fd5b50610b19612327565b604051610b26919061418f565b60405180910390f35b348015610b3b57600080fd5b50610b566004803603810190610b51919061443c565b61232d565b604051610b63919061418f565b60405180910390f35b348015610b7857600080fd5b50610b816123b4565b604051610b8e919061418f565b60405180910390f35b348015610ba357600080fd5b50610bbe6004803603810190610bb9919061434a565b6123ba565b005b348015610bcc57600080fd5b50610be76004803603810190610be291906140d9565b61246e565b604051610bf491906140be565b60405180910390f35b348015610c0957600080fd5b50610c1261248e565b604051610c1f919061418f565b60405180910390f35b348015610c3457600080fd5b50610c4f6004803603810190610c4a91906140d9565b612494565b005b348015610c5d57600080fd5b50610c6661265a565b604051610c73919061418f565b60405180910390f35b348015610c8857600080fd5b50610c91612660565b604051610c9e919061418f565b60405180910390f35b606060038054610cb6906144ab565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce2906144ab565b8015610d2f5780601f10610d0457610100808354040283529160200191610d2f565b820191906000526020600020905b815481529060010190602001808311610d1257829003601f168201915b5050505050905090565b6000610d4d610d466126c4565b84846126cc565b6001905092915050565b601a6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b610dad6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3390614528565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60165481565b610f0a6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9090614528565b60405180910390fd5b7f00000000000000000000000090d0b22cecce0cb18f5cc63e6a5d65a0d47389f873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611027576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101e906145ba565b60405180910390fd5b6110318282612895565b5050565b60155481565b6110436126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c990614528565b60405180910390fd5b670de0b6b3a76400006103e860016110e8610d9b565b6110f29190614609565b6110fc919061467a565b611106919061467a565b811015611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f9061471d565b60405180910390fd5b670de0b6b3a76400008161115c9190614609565b60088190555050565b6000611172848484612936565b6112338461117e6126c4565b61122e856040518060600160405280602881526020016153af60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006111e46126c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134a89092919063ffffffff16565b6126cc565b600190509392505050565b60006012905090565b60006112f06112546126c4565b846112eb85600160006112656126c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266690919063ffffffff16565b6126cc565b6001905092915050565b7f00000000000000000000000090d0b22cecce0cb18f5cc63e6a5d65a0d47389f881565b600b60009054906101000a900460ff1681565b6000601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113f06126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461147f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147690614528565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600061154a6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d090614528565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6116036126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611692576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168990614528565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600e5481565b6116fb6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190614528565b60405180910390fd5b8260108190555081600f8190555080600e81905550600e54600f546010546117b2919061473d565b6117bc919061473d565b600d81905550605f600d541115611808576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ff906147bd565b60405180910390fd5b505050565b600b60039054906101000a900460ff1681565b6118286126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ae90614528565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff02191690831515021790555043601881905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60125481565b61192e6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b490614528565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6119e26126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6890614528565b60405180910390fd5b60005b83839050811015611b0e5781600c6000868685818110611a9757611a966147dd565b5b9050602002016020810190611aac91906140d9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080611b079061480c565b9050611a74565b50505050565b601b6020528060005260406000206000915054906101000a900460ff1681565b606060048054611b43906144ab565b80601f0160208091040260200160405190810160405280929190818152602001828054611b6f906144ab565b8015611bbc5780601f10611b9157610100808354040283529160200191611bbc565b820191906000526020600020905b815481529060010190602001808311611b9f57829003601f168201915b5050505050905090565b60105481565b60175481565b60145481565b6000611c9b611be56126c4565b84611c96856040518060600160405280602581526020016153d76025913960016000611c0f6126c4565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134a89092919063ffffffff16565b6126cc565b6001905092915050565b6000611cb9611cb26126c4565b8484612936565b6001905092915050565b611ccb6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d5190614528565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b60019054906101000a900460ff1681565b611e356126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ebb90614528565b60405180910390fd5b80601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611f6191906140be565b60405180910390a25050565b611f756126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90614528565b60405180910390fd5b82601481905550816013819055508060128190555060125460135460145461202c919061473d565b612036919061473d565b601181905550605f6011541115612082576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612079906147bd565b60405180910390fd5b505050565b61208f6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461211e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211590614528565b60405180910390fd5b670de0b6b3a76400006103e86005612134610d9b565b61213e9190614609565b612148919061467a565b612152919061467a565b811015612194576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161218b906148c6565b60405180910390fd5b670de0b6b3a7640000816121a89190614609565b600a8190555050565b60085481565b60006121c16126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612250576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224790614528565b60405180910390fd5b620186a0600161225e610d9b565b6122689190614609565b612272919061467a565b8210156122b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ab90614958565b60405180910390fd5b6103e860056122c1610d9b565b6122cb9190614609565b6122d5919061467a565b821115612317576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230e906149ea565b60405180910390fd5b8160098190555060019050919050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6123c26126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612451576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244890614528565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b600c6020528060005260406000206000915054906101000a900460ff1681565b600f5481565b61249c6126c4565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461252b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252290614528565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361259a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259190614a7c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b600a5481565b6000808284612675919061473d565b9050838110156126ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b190614ae8565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361273b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161273290614b7a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036127aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a190614c0c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612888919061418f565b60405180910390a3505050565b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167f86866eb41d8e92d6c25444e7c64d1afbb6521f9f48efd135bf4299ef7f9ce47560405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036129a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161299c90614c9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0b90614d30565b60405180910390fd5b60008103612a2d57612a288383600061350c565b6134a3565b600b60009054906101000a900460ff1615612fcb57612a4a6118f6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612ab85750612a886118f6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612af15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b2b575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612b445750600560149054906101000a900460ff16155b15612fca57600b60019054906101000a900460ff16612c3e57601960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612bfe5750601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3490614d9c565b60405180910390fd5b5b600b60039054906101000a900460ff1615612ce157600c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615612ce0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd790614e08565b60405180910390fd5b5b601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d845750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e2b57600854811115612dce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc590614e9a565b60405180910390fd5b600a54612dda836113a0565b82612de5919061473d565b1115612e26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e1d90614f06565b60405180910390fd5b612fc9565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ece5750601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f1d57600854811115612f18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f0f90614f98565b60405180910390fd5b612fc8565b601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612fc757600a54612f7a836113a0565b82612f85919061473d565b1115612fc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbd90614f06565b60405180910390fd5b5b5b5b5b5b6000612fd6306113a0565b905060006009548210159050808015612ffb5750600b60029054906101000a900460ff165b80156130145750600560149054906101000a900460ff16155b801561306a5750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156130c05750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156131165750601960008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561315a576001600560146101000a81548160ff02191690831515021790555061313e61379f565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601960008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132105750601960008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561321a57600090505b6000811561349357601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561327d57506000601154115b1561334a576132aa606461329c60115488613a8690919063ffffffff16565b613b0090919063ffffffff16565b9050601154601354826132bd9190614609565b6132c7919061467a565b601660008282546132d8919061473d565b92505081905550601154601454826132f09190614609565b6132fa919061467a565b6017600082825461330b919061473d565b92505081905550601154601254826133239190614609565b61332d919061467a565b6015600082825461333e919061473d565b9250508190555061346f565b601b60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156133a557506000600d54115b1561346e576133d260646133c4600d5488613a8690919063ffffffff16565b613b0090919063ffffffff16565b9050600d54600f54826133e59190614609565b6133ef919061467a565b60166000828254613400919061473d565b92505081905550600d54601054826134189190614609565b613422919061467a565b60176000828254613433919061473d565b92505081905550600d54600e548261344b9190614609565b613455919061467a565b60156000828254613466919061473d565b925050819055505b5b60008111156134845761348387308361350c565b5b80856134909190614fb8565b94505b61349e87878761350c565b505050505b505050565b60008383111582906134f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134e79190613fa3565b60405180910390fd5b50600083856134ff9190614fb8565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361357b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161357290614c9e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036135ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135e190614d30565b60405180910390fd5b6135f5838383613b4a565b61366081604051806060016040528060268152602001615389602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546134a89092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136f3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461266690919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613792919061418f565b60405180910390a3505050565b60006137aa306113a0565b905060006017546015546016546137c1919061473d565b6137cb919061473d565b90506000808314806137dd5750600082145b156137ea57505050613a84565b60146009546137f99190614609565b83111561381257601460095461380f9190614609565b92505b6000600283601654866138259190614609565b61382f919061467a565b613839919061467a565b905060006138508286613b4f90919063ffffffff16565b9050600047905061386082613b99565b60006138758247613b4f90919063ffffffff16565b905060006138a08761389260155485613a8690919063ffffffff16565b613b0090919063ffffffff16565b905060006138cb886138bd60175486613a8690919063ffffffff16565b613b0090919063ffffffff16565b905060008183856138dc9190614fb8565b6138e69190614fb8565b9050600060168190555060006015819055506000601781905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516139469061501d565b60006040518083038185875af1925050503d8060008114613983576040519150601f19603f3d011682016040523d82523d6000602084013e613988565b606091505b50508098505060008711801561399e5750600081115b156139eb576139ad8782613dd6565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826016546040516139e293929190615032565b60405180910390a15b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613a319061501d565b60006040518083038185875af1925050503d8060008114613a6e576040519150601f19603f3d011682016040523d82523d6000602084013e613a73565b606091505b505080985050505050505050505050505b565b6000808303613a985760009050613afa565b60008284613aa69190614609565b9050828482613ab5919061467a565b14613af5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613aec906150db565b60405180910390fd5b809150505b92915050565b6000613b4283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613eb0565b905092915050565b505050565b6000613b9183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134a8565b905092915050565b6000600267ffffffffffffffff811115613bb657613bb56150fb565b5b604051908082528060200260200182016040528015613be45781602001602082028036833780820191505090505b5090503081600081518110613bfc57613bfb6147dd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cc5919061513f565b81600181518110613cd957613cd86147dd565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613d3e307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126cc565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613da0959493929190615265565b600060405180830381600087803b158015613dba57600080fd5b505af1158015613dce573d6000803e3d6000fd5b505050505050565b613e01307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846126cc565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401613e66969594939291906152bf565b60606040518083038185885af1158015613e84573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613ea99190615335565b5050505050565b60008083118290613ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613eee9190613fa3565b60405180910390fd5b5060008385613f06919061467a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f4d578082015181840152602081019050613f32565b60008484015250505050565b6000601f19601f8301169050919050565b6000613f7582613f13565b613f7f8185613f1e565b9350613f8f818560208601613f2f565b613f9881613f59565b840191505092915050565b60006020820190508181036000830152613fbd8184613f6a565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613ffa82613fcf565b9050919050565b61400a81613fef565b811461401557600080fd5b50565b60008135905061402781614001565b92915050565b6000819050919050565b6140408161402d565b811461404b57600080fd5b50565b60008135905061405d81614037565b92915050565b6000806040838503121561407a57614079613fc5565b5b600061408885828601614018565b92505060206140998582860161404e565b9150509250929050565b60008115159050919050565b6140b8816140a3565b82525050565b60006020820190506140d360008301846140af565b92915050565b6000602082840312156140ef576140ee613fc5565b5b60006140fd84828501614018565b91505092915050565b6000819050919050565b600061412b61412661412184613fcf565b614106565b613fcf565b9050919050565b600061413d82614110565b9050919050565b600061414f82614132565b9050919050565b61415f81614144565b82525050565b600060208201905061417a6000830184614156565b92915050565b6141898161402d565b82525050565b60006020820190506141a46000830184614180565b92915050565b6141b3816140a3565b81146141be57600080fd5b50565b6000813590506141d0816141aa565b92915050565b600080604083850312156141ed576141ec613fc5565b5b60006141fb85828601614018565b925050602061420c858286016141c1565b9150509250929050565b60006020828403121561422c5761422b613fc5565b5b600061423a8482850161404e565b91505092915050565b60008060006060848603121561425c5761425b613fc5565b5b600061426a86828701614018565b935050602061427b86828701614018565b925050604061428c8682870161404e565b9150509250925092565b600060ff82169050919050565b6142ac81614296565b82525050565b60006020820190506142c760008301846142a3565b92915050565b6142d681613fef565b82525050565b60006020820190506142f160008301846142cd565b92915050565b6000806000606084860312156143105761430f613fc5565b5b600061431e8682870161404e565b935050602061432f8682870161404e565b92505060406143408682870161404e565b9150509250925092565b6000602082840312156143605761435f613fc5565b5b600061436e848285016141c1565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f84011261439c5761439b614377565b5b8235905067ffffffffffffffff8111156143b9576143b861437c565b5b6020830191508360208202830111156143d5576143d4614381565b5b9250929050565b6000806000604084860312156143f5576143f4613fc5565b5b600084013567ffffffffffffffff81111561441357614412613fca565b5b61441f86828701614386565b93509350506020614432868287016141c1565b9150509250925092565b6000806040838503121561445357614452613fc5565b5b600061446185828601614018565b925050602061447285828601614018565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806144c357607f821691505b6020821081036144d6576144d561447c565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614512602083613f1e565b915061451d826144dc565b602082019050919050565b6000602082019050818103600083015261454181614505565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f706172746e657273000000000000000000000000000000000000000000000000602082015250565b60006145a4602883613f1e565b91506145af82614548565b604082019050919050565b600060208201905081810360008301526145d381614597565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006146148261402d565b915061461f8361402d565b925082820261462d8161402d565b91508282048414831517614644576146436145da565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006146858261402d565b91506146908361402d565b9250826146a05761469f61464b565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614707602f83613f1e565b9150614712826146ab565b604082019050919050565b60006020820190508181036000830152614736816146fa565b9050919050565b60006147488261402d565b91506147538361402d565b925082820190508082111561476b5761476a6145da565b5b92915050565b7f4d757374206b656570206665657320617420393525206f72206c657373000000600082015250565b60006147a7601d83613f1e565b91506147b282614771565b602082019050919050565b600060208201905081810360008301526147d68161479a565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006148178261402d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614849576148486145da565b5b600182019050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006148b0602483613f1e565b91506148bb82614854565b604082019050919050565b600060208201905081810360008301526148df816148a3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b6000614942603583613f1e565b915061494d826148e6565b604082019050919050565b6000602082019050818103600083015261497181614935565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006149d4603483613f1e565b91506149df82614978565b604082019050919050565b60006020820190508181036000830152614a03816149c7565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a66602683613f1e565b9150614a7182614a0a565b604082019050919050565b60006020820190508181036000830152614a9581614a59565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614ad2601b83613f1e565b9150614add82614a9c565b602082019050919050565b60006020820190508181036000830152614b0181614ac5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b64602483613f1e565b9150614b6f82614b08565b604082019050919050565b60006020820190508181036000830152614b9381614b57565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614bf6602283613f1e565b9150614c0182614b9a565b604082019050919050565b60006020820190508181036000830152614c2581614be9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614c88602583613f1e565b9150614c9382614c2c565b604082019050919050565b60006020820190508181036000830152614cb781614c7b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614d1a602383613f1e565b9150614d2582614cbe565b604082019050919050565b60006020820190508181036000830152614d4981614d0d565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614d86601683613f1e565b9150614d9182614d50565b602082019050919050565b60006020820190508181036000830152614db581614d79565b9050919050565b7f626c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b6000614df2600b83613f1e565b9150614dfd82614dbc565b602082019050919050565b60006020820190508181036000830152614e2181614de5565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614e84603583613f1e565b9150614e8f82614e28565b604082019050919050565b60006020820190508181036000830152614eb381614e77565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614ef0601383613f1e565b9150614efb82614eba565b602082019050919050565b60006020820190508181036000830152614f1f81614ee3565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614f82603683613f1e565b9150614f8d82614f26565b604082019050919050565b60006020820190508181036000830152614fb181614f75565b9050919050565b6000614fc38261402d565b9150614fce8361402d565b9250828203905081811115614fe657614fe56145da565b5b92915050565b600081905092915050565b50565b6000615007600083614fec565b915061501282614ff7565b600082019050919050565b600061502882614ffa565b9150819050919050565b60006060820190506150476000830186614180565b6150546020830185614180565b6150616040830184614180565b949350505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006150c5602183613f1e565b91506150d082615069565b604082019050919050565b600060208201905081810360008301526150f4816150b8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008151905061513981614001565b92915050565b60006020828403121561515557615154613fc5565b5b60006151638482850161512a565b91505092915050565b6000819050919050565b600061519161518c6151878461516c565b614106565b61402d565b9050919050565b6151a181615176565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6151dc81613fef565b82525050565b60006151ee83836151d3565b60208301905092915050565b6000602082019050919050565b6000615212826151a7565b61521c81856151b2565b9350615227836151c3565b8060005b8381101561525857815161523f88826151e2565b975061524a836151fa565b92505060018101905061522b565b5085935050505092915050565b600060a08201905061527a6000830188614180565b6152876020830187615198565b81810360408301526152998186615207565b90506152a860608301856142cd565b6152b56080830184614180565b9695505050505050565b600060c0820190506152d460008301896142cd565b6152e16020830188614180565b6152ee6040830187615198565b6152fb6060830186615198565b61530860808301856142cd565b61531560a0830184614180565b979650505050505050565b60008151905061532f81614037565b92915050565b60008060006060848603121561534e5761534d613fc5565b5b600061535c86828701615320565b935050602061536d86828701615320565b925050604061537e86828701615320565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208fdc4ffba30ec81543469ebee2d024afd28688479f8937a56fab8401e335d36e64736f6c63430008110033
Deployed Bytecode Sourcemap
29634:14356:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7732:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9906:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30883:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29718:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8855:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37506:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30597:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36939:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30557:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35090:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10558:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8696:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11323:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29776:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30050:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37673:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30411:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30129:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9027:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22234:148;;;;;;;;;;;;;:::i;:::-;;34496:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35557:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30303:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35715:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30168:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33975:148;;;;;;;;;;;;;:::i;:::-;;21590:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30446:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36635:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34235:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31106:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7952:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30377:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30637:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30522:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12045:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9368:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37289:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30090:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36745:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36126:412;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35333:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29934:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34695:386;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30269:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9607:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29976:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34131:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30207:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30340:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22538:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30484:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30016:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7732:100;7786:13;7819:5;7812:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7732:100;:::o;9906:169::-;9989:4;10006:39;10015:12;:10;:12::i;:::-;10029:7;10038:6;10006:8;:39::i;:::-;10063:4;10056:11;;9906:169;;;;:::o;30883:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29718:51::-;;;:::o;8855:108::-;8916:7;8943:12;;8936:19;;8855:108;:::o;37506:157::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37613:9:::1;;;;;;;;;;;37585:38;;37602:9;37585:38;;;;;;;;;;;;37646:9;37634;;:21;;;;;;;;;;;;;;;;;;37506:157:::0;:::o;30597:33::-;;;;:::o;36939:194::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37029:13:::1;37021:21;;:4;:21;;::::0;37013:74:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;37101:24;37113:4;37119:5;37101:11;:24::i;:::-;36939:194:::0;;:::o;30557:33::-;;;;:::o;35090:234::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35209:4:::1;35203;35199:1;35183:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35182:31;;;;:::i;:::-;35172:6;:41;;35164:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;35309:6;35299;:17;;;;:::i;:::-;35276:20;:40;;;;35090:234:::0;:::o;10558:355::-;10698:4;10715:36;10725:6;10733:9;10744:6;10715:9;:36::i;:::-;10762:121;10771:6;10779:12;:10;:12::i;:::-;10793:89;10831:6;10793:89;;;;;;;;;;;;;;;;;:11;:19;10805:6;10793:19;;;;;;;;;;;;;;;:33;10813:12;:10;:12::i;:::-;10793:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10762:8;:121::i;:::-;10901:4;10894:11;;10558:355;;;;;:::o;8696:93::-;8754:5;8779:2;8772:9;;8696:93;:::o;11323:218::-;11411:4;11428:83;11437:12;:10;:12::i;:::-;11451:7;11460:50;11499:10;11460:11;:25;11472:12;:10;:12::i;:::-;11460:25;;;;;;;;;;;;;;;:34;11486:7;11460:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11428:8;:83::i;:::-;11529:4;11522:11;;11323:218;;;;:::o;29776:38::-;;;:::o;30050:33::-;;;;;;;;;;;;;:::o;37673:125::-;37738:4;37762:19;:28;37782:7;37762:28;;;;;;;;;;;;;;;;;;;;;;;;;37755:35;;37673:125;;;:::o;30411:28::-;;;;:::o;30129:30::-;;;;;;;;;;;;;:::o;9027:127::-;9101:7;9128:9;:18;9138:7;9128:18;;;;;;;;;;;;;;;;9121:25;;9027:127;;;:::o;22234:148::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22341:1:::1;22304:40;;22325:6;;;;;;;;;;;22304:40;;;;;;;;;;;;22372:1;22355:6;;:19;;;;;;;;;;;;;;;;;;22234:148::o:0;34496:120::-;34548:4;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34581:5:::1;34564:14;;:22;;;;;;;;;;;;;;;;;;34604:4;34597:11;;34496:120:::0;:::o;35557:144::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35689:4:::1;35647:31;:39;35679:6;35647:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35557:144:::0;;:::o;30303:30::-;;;;:::o;35715:403::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35877:7:::1;35865:9;:19;;;;35913:13;35895:15;:31;;;;35955:13;35937:15;:31;;;;36024:15;;36006;;35994:9;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;35979:12;:60;;;;36074:2;36058:12;;:18;;36050:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35715:403:::0;;;:::o;30168:32::-;;;;;;;;;;;;;:::o;33975:148::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34046:4:::1;34030:13;;:20;;;;;;;;;;;;;;;;;;34075:4;34061:11;;:18;;;;;;;;;;;;;;;;;;34103:12;34090:10;:25;;;;33975:148::o:0;21590:79::-;21628:7;21655:6;;;;;;;;;;;21648:13;;21590:79;:::o;30446:31::-;;;;:::o;36635:101::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36721:7:::1;36707:11;;:21;;;;;;;;;;;;;;;;;;36635:101:::0;:::o;34235:208::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34335:9:::1;34330:106;34350:9;;:16;;34346:1;:20;34330:106;;;34418:6;34388:13;:27;34402:9;;34412:1;34402:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;34388:27;;;;;;;;;;;;;;;;:36;;;;;;;;;;;;;;;;;;34368:3;;;;:::i;:::-;;;34330:106;;;;34235:208:::0;;;:::o;31106:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;7952:104::-;8008:13;8041:7;8034:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7952:104;:::o;30377:24::-;;;;:::o;30637:27::-;;;;:::o;30522:25::-;;;;:::o;12045:269::-;12138:4;12155:129;12164:12;:10;:12::i;:::-;12178:7;12187:96;12226:15;12187:96;;;;;;;;;;;;;;;;;:11;:25;12199:12;:10;:12::i;:::-;12187:25;;;;;;;;;;;;;;;:34;12213:7;12187:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12155:8;:129::i;:::-;12302:4;12295:11;;12045:269;;;;:::o;9368:175::-;9454:4;9471:42;9481:12;:10;:12::i;:::-;9495:9;9506:6;9471:9;:42::i;:::-;9531:4;9524:11;;9368:175;;;;:::o;37289:208::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37426:15:::1;;;;;;;;;;;37383:59;;37406:18;37383:59;;;;;;;;;;;;37471:18;37453:15;;:36;;;;;;;;;;;;;;;;;;37289:208:::0;:::o;30090:32::-;;;;;;;;;;;;;:::o;36745:182::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36861:8:::1;36830:19;:28;36850:7;36830:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36901:7;36885:34;;;36910:8;36885:34;;;;;;:::i;:::-;;;;;;;;36745:182:::0;;:::o;36126:412::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36290:7:::1;36277:10;:20;;;;36327:13;36308:16;:32;;;;36370:13;36351:16;:32;;;;36442:16;;36423;;36410:10;;:29;;;;:::i;:::-;:48;;;;:::i;:::-;36394:13;:64;;;;36494:2;36477:13;;:19;;36469:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36126:412:::0;;;:::o;35333:215::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35455:4:::1;35449;35445:1;35429:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;35428:31;;;;:::i;:::-;35418:6;:41;;35410:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;35533:6;35523;:17;;;;:::i;:::-;35511:9;:29;;;;35333:215:::0;:::o;29934:35::-;;;;:::o;34695:386::-;34776:4;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34833:6:::1;34829:1;34813:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;34800:9;:39;;34792:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;34949:4;34945:1;34929:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;34916:9;:37;;34908:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;35042:9;35021:18;:30;;;;35069:4;35062:11;;34695:386:::0;;;:::o;30269:27::-;;;;:::o;9607:151::-;9696:7;9723:11;:18;9735:5;9723:18;;;;;;;;;;;;;;;:27;9742:7;9723:27;;;;;;;;;;;;;;;;9716:34;;9607:151;;;;:::o;29976:33::-;;;;:::o;34131:96::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34212:7:::1;34196:13;;:23;;;;;;;;;;;;;;;;;;34131:96:::0;:::o;30207:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;30340:30::-;;;;:::o;22538:244::-;21813:12;:10;:12::i;:::-;21803:22;;:6;;;;;;;;;;;:22;;;21795:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22647:1:::1;22627:22;;:8;:22;;::::0;22619:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;22737:8;22708:38;;22729:6;;;;;;;;;;;22708:38;;;;;;;;;;;;22766:8;22757:6;;:17;;;;;;;;;;;;;;;;;;22538:244:::0;:::o;30484:31::-;;;;:::o;30016:24::-;;;;:::o;16622:182::-;16680:7;16700:9;16716:1;16712;:5;;;;:::i;:::-;16700:17;;16741:1;16736;:6;;16728:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16795:1;16788:8;;;16622:182;;;;:::o;423:98::-;476:7;503:10;496:17;;423:98;:::o;15241:381::-;15394:1;15377:19;;:5;:19;;;15369:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15475:1;15456:21;;:7;:21;;;15448:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15560:6;15530:11;:18;15542:5;15530:18;;;;;;;;;;;;;;;:27;15549:7;15530:27;;;;;;;;;;;;;;;:36;;;;15598:7;15582:32;;15591:5;15582:32;;;15607:6;15582:32;;;;;;:::i;:::-;;;;;;;;15241:381;;;:::o;37142:138::-;37225:5;37208:8;:14;37217:4;37208:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;37266:5;37249:23;;37260:4;37249:23;;;;;;;;;;;;37142:138;;:::o;37807:3468::-;37955:1;37939:18;;:4;:18;;;37931:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38032:1;38018:16;;:2;:16;;;38010:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38102:1;38092:6;:11;38089:92;;38120:28;38136:4;38142:2;38146:1;38120:15;:28::i;:::-;38163:7;;38089:92;38197:14;;;;;;;;;;;38194:1291;;;38257:7;:5;:7::i;:::-;38249:15;;:4;:15;;;;:49;;;;;38291:7;:5;:7::i;:::-;38285:13;;:2;:13;;;;38249:49;:86;;;;;38333:1;38319:16;;:2;:16;;;;38249:86;:128;;;;;38370:6;38356:21;;:2;:21;;;;38249:128;:158;;;;;38399:8;;;;;;;;;;;38398:9;38249:158;38227:1247;;;38445:13;;;;;;;;;;;38441:148;;38490:19;:25;38510:4;38490:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38519:19;:23;38539:2;38519:23;;;;;;;;;;;;;;;;;;;;;;;;;38490:52;38482:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38441:148;38612:13;;;;;;;;;;;38609:101;;;38654:13;:19;38668:4;38654:19;;;;;;;;;;;;;;;;;;;;;;;;;38653:20;38645:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;38609:101;38763:8;:14;38772:4;38763:14;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;38782:31;:35;38814:2;38782:35;;;;;;;;;;;;;;;;;;;;;;;;;38781:36;38763:54;38759:700;;;38864:20;;38854:6;:30;;38846:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;39003:9;;38986:13;38996:2;38986:9;:13::i;:::-;38977:6;:22;;;;:::i;:::-;:35;;38969:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38759:700;;;39086:8;:12;39095:2;39086:12;;;;;;;;;;;;;;;;;;;;;;;;;:54;;;;;39103:31;:37;39135:4;39103:37;;;;;;;;;;;;;;;;;;;;;;;;;39102:38;39086:54;39082:377;;;39187:20;;39177:6;:30;;39169:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;39082:377;;;39313:31;:35;39345:2;39313:35;;;;;;;;;;;;;;;;;;;;;;;;;39309:150;;39406:9;;39389:13;39399:2;39389:9;:13::i;:::-;39380:6;:22;;;;:::i;:::-;:35;;39372:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39309:150;39082:377;38759:700;38227:1247;38194:1291;39498:28;39529:24;39547:4;39529:9;:24::i;:::-;39498:55;;39567:12;39606:18;;39582:20;:42;;39567:57;;39656:7;:35;;;;;39680:11;;;;;;;;;;;39656:35;:61;;;;;39709:8;;;;;;;;;;;39708:9;39656:61;:93;;;;;39735:8;:14;39744:4;39735:14;;;;;;;;;;;;;;;;;;;;;;;;;39734:15;39656:93;:136;;;;;39767:19;:25;39787:4;39767:25;;;;;;;;;;;;;;;;;;;;;;;;;39766:26;39656:136;:177;;;;;39810:19;:23;39830:2;39810:23;;;;;;;;;;;;;;;;;;;;;;;;;39809:24;39656:177;39638:311;;;39871:4;39860:8;;:15;;;;;;;;;;;;;;;;;;39893:10;:8;:10::i;:::-;39932:5;39921:8;;:16;;;;;;;;;;;;;;;;;;39638:311;39962:12;39978:8;;;;;;;;;;;39977:9;39962:24;;40088:19;:25;40108:4;40088:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40117:19;:23;40137:2;40117:23;;;;;;;;;;;;;;;;;;;;;;;;;40088:52;40085:99;;;40167:5;40157:15;;40085:99;40197:12;40301:7;40298:923;;;40352:8;:12;40361:2;40352:12;;;;;;;;;;;;;;;;;;;;;;;;;:33;;;;;40384:1;40368:13;;:17;40352:33;40348:720;;;40412:34;40442:3;40412:25;40423:13;;40412:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40405:41;;40513:13;;40494:16;;40487:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40465:18;;:61;;;;;;;:::i;:::-;;;;;;;;40581:13;;40568:10;;40561:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;40545:12;;:49;;;;;;;:::i;:::-;;;;;;;;40661:13;;40642:16;;40635:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;40613:18;;:61;;;;;;;:::i;:::-;;;;;;;;40348:720;;;40735:8;:14;40744:4;40735:14;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;40768:1;40753:12;;:16;40735:34;40732:336;;;40797:33;40826:3;40797:24;40808:12;;40797:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40790:40;;40896:12;;40878:15;;40871:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40849:18;;:59;;;;;;;:::i;:::-;;;;;;;;40962:12;;40950:9;;40943:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;40927:12;;:47;;;;;;;:::i;:::-;;;;;;;;41040:12;;41022:15;;41015:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;40993:18;;:59;;;;;;;:::i;:::-;;;;;;;;40732:336;40348:720;41095:1;41088:4;:8;41085:93;;;41120:42;41136:4;41150;41157;41120:15;:42::i;:::-;41085:93;41205:4;41195:14;;;;;:::i;:::-;;;40298:923;41234:33;41250:4;41256:2;41260:6;41234:15;:33::i;:::-;37920:3355;;;;37807:3468;;;;:::o;17528:193::-;17614:7;17647:1;17642;:6;;17650:12;17634:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17674:9;17690:1;17686;:5;;;;:::i;:::-;17674:17;;17712:1;17705:8;;;17528:193;;;;;:::o;12805:575::-;12963:1;12945:20;;:6;:20;;;12937:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13047:1;13026:23;;:9;:23;;;13018:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13103:47;13124:6;13132:9;13143:6;13103:20;:47::i;:::-;13184:71;13206:6;13184:71;;;;;;;;;;;;;;;;;:9;:17;13194:6;13184:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13164:9;:17;13174:6;13164:17;;;;;;;;;;;;;;;:91;;;;13289:32;13314:6;13289:9;:20;13299:9;13289:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13266:9;:20;13276:9;13266:20;;;;;;;;;;;;;;;:55;;;;13354:9;13337:35;;13346:6;13337:35;;;13365:6;13337:35;;;;;;:::i;:::-;;;;;;;;12805:575;;;:::o;42419:1568::-;42458:23;42484:24;42502:4;42484:9;:24::i;:::-;42458:50;;42519:25;42589:12;;42568:18;;42547;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;42519:82;;42612:12;42660:1;42641:15;:20;:46;;;;42686:1;42665:17;:22;42641:46;42638:60;;;42690:7;;;;;42638:60;42753:2;42732:18;;:23;;;;:::i;:::-;42714:15;:41;42711:111;;;42808:2;42787:18;;:23;;;;:::i;:::-;42769:41;;42711:111;42884:23;42969:1;42949:17;42928:18;;42910:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;42884:86;;42981:26;43010:36;43030:15;43010;:19;;:36;;;;:::i;:::-;42981:65;;43060:25;43088:21;43060:49;;43123:36;43140:18;43123:16;:36::i;:::-;43174:18;43195:44;43221:17;43195:21;:25;;:44;;;;:::i;:::-;43174:65;;43253:23;43279:57;43318:17;43279:34;43294:18;;43279:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;43253:83;;43347:17;43367:51;43400:17;43367:28;43382:12;;43367:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;43347:71;;43429:23;43486:9;43468:15;43455:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;43429:66;;43533:1;43512:18;:22;;;;43566:1;43545:18;:22;;;;43593:1;43578:12;:16;;;;43629:9;;;;;;;;;;;43621:23;;43652:9;43621:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43608:58;;;;;43701:1;43683:15;:19;:42;;;;;43724:1;43706:15;:19;43683:42;43680:210;;;43741:46;43754:15;43771;43741:12;:46::i;:::-;43807:71;43822:18;43842:15;43859:18;;43807:71;;;;;;;;:::i;:::-;;;;;;;;43680:210;43924:15;;;;;;;;;;;43916:29;;43953:21;43916:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43903:76;;;;;42447:1540;;;;;;;;;;42419:1568;:::o;17981:473::-;18039:7;18289:1;18284;:6;18280:47;;18314:1;18307:8;;;;18280:47;18340:9;18356:1;18352;:5;;;;:::i;:::-;18340:17;;18385:1;18380;18376;:5;;;;:::i;:::-;:10;18368:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18445:1;18438:8;;;17981:473;;;;;:::o;18931:132::-;18989:7;19016:39;19020:1;19023;19016:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19009:46;;18931:132;;;;:::o;16226:125::-;;;;:::o;17088:136::-;17146:7;17173:43;17177:1;17180;17173:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17166:50;;17088:136;;;;:::o;41284:597::-;41413:21;41451:1;41437:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41413:40;;41482:4;41464;41469:1;41464:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41508:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41498:4;41503:1;41498:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;41544:62;41561:4;41576:15;41594:11;41544:8;:62::i;:::-;41646:15;:66;;;41727:11;41753:1;41797:4;41824;41844:15;41646:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41339:542;41284:597;:::o;41890:520::-;42038:62;42055:4;42070:15;42088:11;42038:8;:62::i;:::-;42144:15;:31;;;42183:9;42216:4;42236:11;42262:1;42305;42356:4;42376:15;42144:258;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41890:520;;:::o;19560:279::-;19646:7;19678:1;19674;:5;19681:12;19666:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19705:9;19721:1;19717;:5;;;;:::i;:::-;19705:17;;19830:1;19823:8;;;19560:279;;;;;:::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;1553:117;1662:1;1659;1652: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:153::-;4204:9;4237:37;4268:5;4237:37;:::i;:::-;4224:50;;4127:153;;;:::o;4286:185::-;4400:64;4458:5;4400:64;:::i;:::-;4395:3;4388:77;4286:185;;:::o;4477:276::-;4597:4;4635:2;4624:9;4620:18;4612:26;;4648:98;4743:1;4732:9;4728:17;4719:6;4648:98;:::i;:::-;4477:276;;;;:::o;4759:118::-;4846:24;4864:5;4846:24;:::i;:::-;4841:3;4834:37;4759:118;;:::o;4883:222::-;4976:4;5014:2;5003:9;4999:18;4991:26;;5027:71;5095:1;5084:9;5080:17;5071:6;5027:71;:::i;:::-;4883:222;;;;:::o;5111:116::-;5181:21;5196:5;5181:21;:::i;:::-;5174:5;5171:32;5161:60;;5217:1;5214;5207:12;5161:60;5111:116;:::o;5233:133::-;5276:5;5314:6;5301:20;5292:29;;5330:30;5354:5;5330:30;:::i;:::-;5233:133;;;;:::o;5372:468::-;5437:6;5445;5494:2;5482:9;5473:7;5469:23;5465:32;5462:119;;;5500:79;;:::i;:::-;5462:119;5620:1;5645:53;5690:7;5681:6;5670:9;5666:22;5645:53;:::i;:::-;5635:63;;5591:117;5747:2;5773:50;5815:7;5806:6;5795:9;5791:22;5773:50;:::i;:::-;5763:60;;5718:115;5372:468;;;;;:::o;5846:329::-;5905:6;5954:2;5942:9;5933:7;5929:23;5925:32;5922:119;;;5960:79;;:::i;:::-;5922:119;6080:1;6105:53;6150:7;6141:6;6130:9;6126:22;6105:53;:::i;:::-;6095:63;;6051:117;5846:329;;;;:::o;6181:619::-;6258:6;6266;6274;6323:2;6311:9;6302:7;6298:23;6294:32;6291:119;;;6329:79;;:::i;:::-;6291:119;6449:1;6474:53;6519:7;6510:6;6499:9;6495:22;6474:53;:::i;:::-;6464:63;;6420:117;6576:2;6602:53;6647:7;6638:6;6627:9;6623:22;6602:53;:::i;:::-;6592:63;;6547:118;6704:2;6730:53;6775:7;6766:6;6755:9;6751:22;6730:53;:::i;:::-;6720:63;;6675:118;6181:619;;;;;:::o;6806:86::-;6841:7;6881:4;6874:5;6870:16;6859:27;;6806:86;;;:::o;6898:112::-;6981:22;6997:5;6981:22;:::i;:::-;6976:3;6969:35;6898:112;;:::o;7016:214::-;7105:4;7143:2;7132:9;7128:18;7120:26;;7156:67;7220:1;7209:9;7205:17;7196:6;7156:67;:::i;:::-;7016:214;;;;:::o;7236:118::-;7323:24;7341:5;7323:24;:::i;:::-;7318:3;7311:37;7236:118;;:::o;7360:222::-;7453:4;7491:2;7480:9;7476:18;7468:26;;7504:71;7572:1;7561:9;7557:17;7548:6;7504:71;:::i;:::-;7360:222;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:117::-;8651:1;8648;8641:12;8665:117;8774:1;8771;8764:12;8788:117;8897:1;8894;8887:12;8928:568;9001:8;9011:6;9061:3;9054:4;9046:6;9042:17;9038:27;9028:122;;9069:79;;:::i;:::-;9028:122;9182:6;9169:20;9159:30;;9212:18;9204:6;9201:30;9198:117;;;9234:79;;:::i;:::-;9198:117;9348:4;9340:6;9336:17;9324:29;;9402:3;9394:4;9386:6;9382:17;9372:8;9368:32;9365:41;9362:128;;;9409:79;;:::i;:::-;9362:128;8928:568;;;;;:::o;9502:698::-;9594:6;9602;9610;9659:2;9647:9;9638:7;9634:23;9630:32;9627:119;;;9665:79;;:::i;:::-;9627:119;9813:1;9802:9;9798:17;9785:31;9843:18;9835:6;9832:30;9829:117;;;9865:79;;:::i;:::-;9829:117;9978:80;10050:7;10041:6;10030:9;10026:22;9978:80;:::i;:::-;9960:98;;;;9756:312;10107:2;10133:50;10175:7;10166:6;10155:9;10151:22;10133:50;:::i;:::-;10123:60;;10078:115;9502:698;;;;;:::o;10206:474::-;10274:6;10282;10331:2;10319:9;10310:7;10306:23;10302:32;10299:119;;;10337:79;;:::i;:::-;10299:119;10457:1;10482:53;10527:7;10518:6;10507:9;10503:22;10482:53;:::i;:::-;10472:63;;10428:117;10584:2;10610:53;10655:7;10646:6;10635:9;10631:22;10610:53;:::i;:::-;10600:63;;10555:118;10206:474;;;;;:::o;10686:180::-;10734:77;10731:1;10724:88;10831:4;10828:1;10821:15;10855:4;10852:1;10845:15;10872:320;10916:6;10953:1;10947:4;10943:12;10933:22;;11000:1;10994:4;10990:12;11021:18;11011:81;;11077:4;11069:6;11065:17;11055:27;;11011:81;11139:2;11131:6;11128:14;11108:18;11105:38;11102:84;;11158:18;;:::i;:::-;11102:84;10923:269;10872:320;;;:::o;11198:182::-;11338:34;11334:1;11326:6;11322:14;11315:58;11198:182;:::o;11386:366::-;11528:3;11549:67;11613:2;11608:3;11549:67;:::i;:::-;11542:74;;11625:93;11714:3;11625:93;:::i;:::-;11743:2;11738:3;11734:12;11727:19;;11386:366;;;:::o;11758:419::-;11924:4;11962:2;11951:9;11947:18;11939:26;;12011:9;12005:4;12001:20;11997:1;11986:9;11982:17;11975:47;12039:131;12165:4;12039:131;:::i;:::-;12031:139;;11758:419;;;:::o;12183:227::-;12323:34;12319:1;12311:6;12307:14;12300:58;12392:10;12387:2;12379:6;12375:15;12368:35;12183:227;:::o;12416:366::-;12558:3;12579:67;12643:2;12638:3;12579:67;:::i;:::-;12572:74;;12655:93;12744:3;12655:93;:::i;:::-;12773:2;12768:3;12764:12;12757:19;;12416:366;;;:::o;12788:419::-;12954:4;12992:2;12981:9;12977:18;12969:26;;13041:9;13035:4;13031:20;13027:1;13016:9;13012:17;13005:47;13069:131;13195:4;13069:131;:::i;:::-;13061:139;;12788:419;;;:::o;13213:180::-;13261:77;13258:1;13251:88;13358:4;13355:1;13348:15;13382:4;13379:1;13372:15;13399:410;13439:7;13462:20;13480:1;13462:20;:::i;:::-;13457:25;;13496:20;13514:1;13496:20;:::i;:::-;13491:25;;13551:1;13548;13544:9;13573:30;13591:11;13573:30;:::i;:::-;13562:41;;13752:1;13743:7;13739:15;13736:1;13733:22;13713:1;13706:9;13686:83;13663:139;;13782:18;;:::i;:::-;13663:139;13447:362;13399:410;;;;:::o;13815:180::-;13863:77;13860:1;13853:88;13960:4;13957:1;13950:15;13984:4;13981:1;13974:15;14001:185;14041:1;14058:20;14076:1;14058:20;:::i;:::-;14053:25;;14092:20;14110:1;14092:20;:::i;:::-;14087:25;;14131:1;14121:35;;14136:18;;:::i;:::-;14121:35;14178:1;14175;14171:9;14166:14;;14001:185;;;;:::o;14192:234::-;14332:34;14328:1;14320:6;14316:14;14309:58;14401:17;14396:2;14388:6;14384:15;14377:42;14192:234;:::o;14432:366::-;14574:3;14595:67;14659:2;14654:3;14595:67;:::i;:::-;14588:74;;14671:93;14760:3;14671:93;:::i;:::-;14789:2;14784:3;14780:12;14773:19;;14432:366;;;:::o;14804:419::-;14970:4;15008:2;14997:9;14993:18;14985:26;;15057:9;15051:4;15047:20;15043:1;15032:9;15028:17;15021:47;15085:131;15211:4;15085:131;:::i;:::-;15077:139;;14804:419;;;:::o;15229:191::-;15269:3;15288:20;15306:1;15288:20;:::i;:::-;15283:25;;15322:20;15340:1;15322:20;:::i;:::-;15317:25;;15365:1;15362;15358:9;15351:16;;15386:3;15383:1;15380:10;15377:36;;;15393:18;;:::i;:::-;15377:36;15229:191;;;;:::o;15426:179::-;15566:31;15562:1;15554:6;15550:14;15543:55;15426:179;:::o;15611:366::-;15753:3;15774:67;15838:2;15833:3;15774:67;:::i;:::-;15767:74;;15850:93;15939:3;15850:93;:::i;:::-;15968:2;15963:3;15959:12;15952:19;;15611:366;;;:::o;15983:419::-;16149:4;16187:2;16176:9;16172:18;16164:26;;16236:9;16230:4;16226:20;16222:1;16211:9;16207:17;16200:47;16264:131;16390:4;16264:131;:::i;:::-;16256:139;;15983:419;;;:::o;16408:180::-;16456:77;16453:1;16446:88;16553:4;16550:1;16543:15;16577:4;16574:1;16567:15;16594:233;16633:3;16656:24;16674:5;16656:24;:::i;:::-;16647:33;;16702:66;16695:5;16692:77;16689:103;;16772:18;;:::i;:::-;16689:103;16819:1;16812:5;16808:13;16801:20;;16594:233;;;:::o;16833:223::-;16973:34;16969:1;16961:6;16957:14;16950:58;17042:6;17037:2;17029:6;17025:15;17018:31;16833:223;:::o;17062:366::-;17204:3;17225:67;17289:2;17284:3;17225:67;:::i;:::-;17218:74;;17301:93;17390:3;17301:93;:::i;:::-;17419:2;17414:3;17410:12;17403:19;;17062:366;;;:::o;17434:419::-;17600:4;17638:2;17627:9;17623:18;17615:26;;17687:9;17681:4;17677:20;17673:1;17662:9;17658:17;17651:47;17715:131;17841:4;17715:131;:::i;:::-;17707:139;;17434:419;;;:::o;17859:240::-;17999:34;17995:1;17987:6;17983:14;17976:58;18068:23;18063:2;18055:6;18051:15;18044:48;17859:240;:::o;18105:366::-;18247:3;18268:67;18332:2;18327:3;18268:67;:::i;:::-;18261:74;;18344:93;18433:3;18344:93;:::i;:::-;18462:2;18457:3;18453:12;18446:19;;18105:366;;;:::o;18477:419::-;18643:4;18681:2;18670:9;18666:18;18658:26;;18730:9;18724:4;18720:20;18716:1;18705:9;18701:17;18694:47;18758:131;18884:4;18758:131;:::i;:::-;18750:139;;18477:419;;;:::o;18902:239::-;19042:34;19038:1;19030:6;19026:14;19019:58;19111:22;19106:2;19098:6;19094:15;19087:47;18902:239;:::o;19147:366::-;19289:3;19310:67;19374:2;19369:3;19310:67;:::i;:::-;19303:74;;19386:93;19475:3;19386:93;:::i;:::-;19504:2;19499:3;19495:12;19488:19;;19147:366;;;:::o;19519:419::-;19685:4;19723:2;19712:9;19708:18;19700:26;;19772:9;19766:4;19762:20;19758:1;19747:9;19743:17;19736:47;19800:131;19926:4;19800:131;:::i;:::-;19792:139;;19519:419;;;:::o;19944:225::-;20084:34;20080:1;20072:6;20068:14;20061:58;20153:8;20148:2;20140:6;20136:15;20129:33;19944:225;:::o;20175:366::-;20317:3;20338:67;20402:2;20397:3;20338:67;:::i;:::-;20331:74;;20414:93;20503:3;20414:93;:::i;:::-;20532:2;20527:3;20523:12;20516:19;;20175:366;;;:::o;20547:419::-;20713:4;20751:2;20740:9;20736:18;20728:26;;20800:9;20794:4;20790:20;20786:1;20775:9;20771:17;20764:47;20828:131;20954:4;20828:131;:::i;:::-;20820:139;;20547:419;;;:::o;20972:177::-;21112:29;21108:1;21100:6;21096:14;21089:53;20972:177;:::o;21155:366::-;21297:3;21318:67;21382:2;21377:3;21318:67;:::i;:::-;21311:74;;21394:93;21483:3;21394:93;:::i;:::-;21512:2;21507:3;21503:12;21496:19;;21155:366;;;:::o;21527:419::-;21693:4;21731:2;21720:9;21716:18;21708:26;;21780:9;21774:4;21770:20;21766:1;21755:9;21751:17;21744:47;21808:131;21934:4;21808:131;:::i;:::-;21800:139;;21527:419;;;:::o;21952:223::-;22092:34;22088:1;22080:6;22076:14;22069:58;22161:6;22156:2;22148:6;22144:15;22137:31;21952:223;:::o;22181:366::-;22323:3;22344:67;22408:2;22403:3;22344:67;:::i;:::-;22337:74;;22420:93;22509:3;22420:93;:::i;:::-;22538:2;22533:3;22529:12;22522:19;;22181:366;;;:::o;22553:419::-;22719:4;22757:2;22746:9;22742:18;22734:26;;22806:9;22800:4;22796:20;22792:1;22781:9;22777:17;22770:47;22834:131;22960:4;22834:131;:::i;:::-;22826:139;;22553:419;;;:::o;22978:221::-;23118:34;23114:1;23106:6;23102:14;23095:58;23187:4;23182:2;23174:6;23170:15;23163:29;22978:221;:::o;23205:366::-;23347:3;23368:67;23432:2;23427:3;23368:67;:::i;:::-;23361:74;;23444:93;23533:3;23444:93;:::i;:::-;23562:2;23557:3;23553:12;23546:19;;23205:366;;;:::o;23577:419::-;23743:4;23781:2;23770:9;23766:18;23758:26;;23830:9;23824:4;23820:20;23816:1;23805:9;23801:17;23794:47;23858:131;23984:4;23858:131;:::i;:::-;23850:139;;23577:419;;;:::o;24002:224::-;24142:34;24138:1;24130:6;24126:14;24119:58;24211:7;24206:2;24198:6;24194:15;24187:32;24002:224;:::o;24232:366::-;24374:3;24395:67;24459:2;24454:3;24395:67;:::i;:::-;24388:74;;24471:93;24560:3;24471:93;:::i;:::-;24589:2;24584:3;24580:12;24573:19;;24232:366;;;:::o;24604:419::-;24770:4;24808:2;24797:9;24793:18;24785:26;;24857:9;24851:4;24847:20;24843:1;24832:9;24828:17;24821:47;24885:131;25011:4;24885:131;:::i;:::-;24877:139;;24604:419;;;:::o;25029:222::-;25169:34;25165:1;25157:6;25153:14;25146:58;25238:5;25233:2;25225:6;25221:15;25214:30;25029:222;:::o;25257:366::-;25399:3;25420:67;25484:2;25479:3;25420:67;:::i;:::-;25413:74;;25496:93;25585:3;25496:93;:::i;:::-;25614:2;25609:3;25605:12;25598:19;;25257:366;;;:::o;25629:419::-;25795:4;25833:2;25822:9;25818:18;25810:26;;25882:9;25876:4;25872:20;25868:1;25857:9;25853:17;25846:47;25910:131;26036:4;25910:131;:::i;:::-;25902:139;;25629:419;;;:::o;26054:172::-;26194:24;26190:1;26182:6;26178:14;26171:48;26054:172;:::o;26232:366::-;26374:3;26395:67;26459:2;26454:3;26395:67;:::i;:::-;26388:74;;26471:93;26560:3;26471:93;:::i;:::-;26589:2;26584:3;26580:12;26573:19;;26232:366;;;:::o;26604:419::-;26770:4;26808:2;26797:9;26793:18;26785:26;;26857:9;26851:4;26847:20;26843:1;26832:9;26828:17;26821:47;26885:131;27011:4;26885:131;:::i;:::-;26877:139;;26604:419;;;:::o;27029:161::-;27169:13;27165:1;27157:6;27153:14;27146:37;27029:161;:::o;27196:366::-;27338:3;27359:67;27423:2;27418:3;27359:67;:::i;:::-;27352:74;;27435:93;27524:3;27435:93;:::i;:::-;27553:2;27548:3;27544:12;27537:19;;27196:366;;;:::o;27568:419::-;27734:4;27772:2;27761:9;27757:18;27749:26;;27821:9;27815:4;27811:20;27807:1;27796:9;27792:17;27785:47;27849:131;27975:4;27849:131;:::i;:::-;27841:139;;27568:419;;;:::o;27993:240::-;28133:34;28129:1;28121:6;28117:14;28110:58;28202:23;28197:2;28189:6;28185:15;28178:48;27993:240;:::o;28239:366::-;28381:3;28402:67;28466:2;28461:3;28402:67;:::i;:::-;28395:74;;28478:93;28567:3;28478:93;:::i;:::-;28596:2;28591:3;28587:12;28580:19;;28239:366;;;:::o;28611:419::-;28777:4;28815:2;28804:9;28800:18;28792:26;;28864:9;28858:4;28854:20;28850:1;28839:9;28835:17;28828:47;28892:131;29018:4;28892:131;:::i;:::-;28884:139;;28611:419;;;:::o;29036:169::-;29176:21;29172:1;29164:6;29160:14;29153:45;29036:169;:::o;29211:366::-;29353:3;29374:67;29438:2;29433:3;29374:67;:::i;:::-;29367:74;;29450:93;29539:3;29450:93;:::i;:::-;29568:2;29563:3;29559:12;29552:19;;29211:366;;;:::o;29583:419::-;29749:4;29787:2;29776:9;29772:18;29764:26;;29836:9;29830:4;29826:20;29822:1;29811:9;29807:17;29800:47;29864:131;29990:4;29864:131;:::i;:::-;29856:139;;29583:419;;;:::o;30008:241::-;30148:34;30144:1;30136:6;30132:14;30125:58;30217:24;30212:2;30204:6;30200:15;30193:49;30008:241;:::o;30255:366::-;30397:3;30418:67;30482:2;30477:3;30418:67;:::i;:::-;30411:74;;30494:93;30583:3;30494:93;:::i;:::-;30612:2;30607:3;30603:12;30596:19;;30255:366;;;:::o;30627:419::-;30793:4;30831:2;30820:9;30816:18;30808:26;;30880:9;30874:4;30870:20;30866:1;30855:9;30851:17;30844:47;30908:131;31034:4;30908:131;:::i;:::-;30900:139;;30627:419;;;:::o;31052:194::-;31092:4;31112:20;31130:1;31112:20;:::i;:::-;31107:25;;31146:20;31164:1;31146:20;:::i;:::-;31141:25;;31190:1;31187;31183:9;31175:17;;31214:1;31208:4;31205:11;31202:37;;;31219:18;;:::i;:::-;31202:37;31052:194;;;;:::o;31252:147::-;31353:11;31390:3;31375:18;;31252:147;;;;:::o;31405:114::-;;:::o;31525:398::-;31684:3;31705:83;31786:1;31781:3;31705:83;:::i;:::-;31698:90;;31797:93;31886:3;31797:93;:::i;:::-;31915:1;31910:3;31906:11;31899:18;;31525:398;;;:::o;31929:379::-;32113:3;32135:147;32278:3;32135:147;:::i;:::-;32128:154;;32299:3;32292:10;;31929:379;;;:::o;32314:442::-;32463:4;32501:2;32490:9;32486:18;32478:26;;32514:71;32582:1;32571:9;32567:17;32558:6;32514:71;:::i;:::-;32595:72;32663:2;32652:9;32648:18;32639:6;32595:72;:::i;:::-;32677;32745:2;32734:9;32730:18;32721:6;32677:72;:::i;:::-;32314:442;;;;;;:::o;32762:220::-;32902:34;32898:1;32890:6;32886:14;32879:58;32971:3;32966:2;32958:6;32954:15;32947:28;32762:220;:::o;32988:366::-;33130:3;33151:67;33215:2;33210:3;33151:67;:::i;:::-;33144:74;;33227:93;33316:3;33227:93;:::i;:::-;33345:2;33340:3;33336:12;33329:19;;32988:366;;;:::o;33360:419::-;33526:4;33564:2;33553:9;33549:18;33541:26;;33613:9;33607:4;33603:20;33599:1;33588:9;33584:17;33577:47;33641:131;33767:4;33641:131;:::i;:::-;33633:139;;33360:419;;;:::o;33785:180::-;33833:77;33830:1;33823:88;33930:4;33927:1;33920:15;33954:4;33951:1;33944:15;33971:143;34028:5;34059:6;34053:13;34044:22;;34075:33;34102:5;34075:33;:::i;:::-;33971:143;;;;:::o;34120:351::-;34190:6;34239:2;34227:9;34218:7;34214:23;34210:32;34207:119;;;34245:79;;:::i;:::-;34207:119;34365:1;34390:64;34446:7;34437:6;34426:9;34422:22;34390:64;:::i;:::-;34380:74;;34336:128;34120:351;;;;:::o;34477:85::-;34522:7;34551:5;34540:16;;34477:85;;;:::o;34568:158::-;34626:9;34659:61;34677:42;34686:32;34712:5;34686:32;:::i;:::-;34677:42;:::i;:::-;34659:61;:::i;:::-;34646:74;;34568:158;;;:::o;34732:147::-;34827:45;34866:5;34827:45;:::i;:::-;34822:3;34815:58;34732:147;;:::o;34885:114::-;34952:6;34986:5;34980:12;34970:22;;34885:114;;;:::o;35005:184::-;35104:11;35138:6;35133:3;35126:19;35178:4;35173:3;35169:14;35154:29;;35005:184;;;;:::o;35195:132::-;35262:4;35285:3;35277:11;;35315:4;35310:3;35306:14;35298:22;;35195:132;;;:::o;35333:108::-;35410:24;35428:5;35410:24;:::i;:::-;35405:3;35398:37;35333:108;;:::o;35447:179::-;35516:10;35537:46;35579:3;35571:6;35537:46;:::i;:::-;35615:4;35610:3;35606:14;35592:28;;35447:179;;;;:::o;35632:113::-;35702:4;35734;35729:3;35725:14;35717:22;;35632:113;;;:::o;35781:732::-;35900:3;35929:54;35977:5;35929:54;:::i;:::-;35999:86;36078:6;36073:3;35999:86;:::i;:::-;35992:93;;36109:56;36159:5;36109:56;:::i;:::-;36188:7;36219:1;36204:284;36229:6;36226:1;36223:13;36204:284;;;36305:6;36299:13;36332:63;36391:3;36376:13;36332:63;:::i;:::-;36325:70;;36418:60;36471:6;36418:60;:::i;:::-;36408:70;;36264:224;36251:1;36248;36244:9;36239:14;;36204:284;;;36208:14;36504:3;36497:10;;35905:608;;;35781:732;;;;:::o;36519:831::-;36782:4;36820:3;36809:9;36805:19;36797:27;;36834:71;36902:1;36891:9;36887:17;36878:6;36834:71;:::i;:::-;36915:80;36991:2;36980:9;36976:18;36967:6;36915:80;:::i;:::-;37042:9;37036:4;37032:20;37027:2;37016:9;37012:18;37005:48;37070:108;37173:4;37164:6;37070:108;:::i;:::-;37062:116;;37188:72;37256:2;37245:9;37241:18;37232:6;37188:72;:::i;:::-;37270:73;37338:3;37327:9;37323:19;37314:6;37270:73;:::i;:::-;36519:831;;;;;;;;:::o;37356:807::-;37605:4;37643:3;37632:9;37628:19;37620:27;;37657:71;37725:1;37714:9;37710:17;37701:6;37657:71;:::i;:::-;37738:72;37806:2;37795:9;37791:18;37782:6;37738:72;:::i;:::-;37820:80;37896:2;37885:9;37881:18;37872:6;37820:80;:::i;:::-;37910;37986:2;37975:9;37971:18;37962:6;37910:80;:::i;:::-;38000:73;38068:3;38057:9;38053:19;38044:6;38000:73;:::i;:::-;38083;38151:3;38140:9;38136:19;38127:6;38083:73;:::i;:::-;37356:807;;;;;;;;;:::o;38169:143::-;38226:5;38257:6;38251:13;38242:22;;38273:33;38300:5;38273:33;:::i;:::-;38169:143;;;;:::o;38318:663::-;38406:6;38414;38422;38471:2;38459:9;38450:7;38446:23;38442:32;38439:119;;;38477:79;;:::i;:::-;38439:119;38597:1;38622:64;38678:7;38669:6;38658:9;38654:22;38622:64;:::i;:::-;38612:74;;38568:128;38735:2;38761:64;38817:7;38808:6;38797:9;38793:22;38761:64;:::i;:::-;38751:74;;38706:129;38874:2;38900:64;38956:7;38947:6;38936:9;38932:22;38900:64;:::i;:::-;38890:74;;38845:129;38318:663;;;;;:::o
Swarm Source
ipfs://8fdc4ffba30ec81543469ebee2d024afd28688479f8937a56fab8401e335d36e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.