ERC-20
Overview
Max Total Supply
10,000,000 KITE
Holders
50
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
19,202.43780648533077154 KITEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
TheKite
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-17 */ /* 🆃🅷🅴 🅺🅸🆃🅴 𝚃𝚑𝚎 𝚏𝚒𝚛𝚜𝚝-𝚎𝚟𝚎𝚛 𝚋𝚞𝚒𝚕𝚝-𝚒𝚗 𝚊𝚗𝚝𝚒-𝚓𝚎𝚎𝚝𝚜 𝚖𝚎𝚌𝚑𝚊𝚗𝚒𝚜𝚖 𝚝𝚑𝚊𝚝 𝚙𝚛𝚘𝚝𝚎𝚌𝚝𝚜 𝚌𝚑𝚊𝚍𝚜 𝚠𝚑𝚘 𝚒𝚗𝚟𝚎𝚜𝚝 𝟷 𝙴𝚃𝙷 𝚊𝚗𝚍 𝚊𝚋𝚘𝚟𝚎! Learn more: https://thekite.io/#about Telegram: https://t.me/TheKiteERC Twitter: https://twitter.com/TheKiteERC */ // SPDX-License-Identifier: MIT pragma solidity 0.8.9; abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } interface 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 Burn(address indexed sender, uint amount0, uint amount1, address indexed to); 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; } } 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 TheKite is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; address public constant deadAddress = address(0xdead); bool private swapping; address public marketingWallet; uint256 public maxTransactionAmount; uint256 public swapTokensAtAmount; uint256 public maxWallet; bool public limitsInEffect = true; bool public tradingActive = false; bool public swapEnabled = false; uint256 public buyTotalFees; uint256 public buyMarketingFee; uint256 public sellTotalFees; uint256 public sellMarketingFee; uint256 public tokensForLiquidity; uint256 public tokensForMarketing; mapping(address => uint256) public ethSpent; uint256 public chadAmount = 1 ether; uint256 public walletDumpPercent; uint256 public penaltyFee; mapping(address => bool) public blacklist; mapping(address => uint256) private lastBlock; bool public autoBL = true; uint256 private firstBlock; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) public automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event BlacklistSingle(address bot, bool blacklisted); event BlacklistBulk(address [] bots, bool blacklisted); constructor() ERC20("The Kite", "KITE") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 5; uint256 _sellMarketingFee = 5; penaltyFee = 25; uint256 totalSupply = 1 * 1e7 * 1e18; maxTransactionAmount = totalSupply * 2 / 100; // 2% max buy maxWallet = totalSupply * 2 / 100; // 2% max wallet swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet walletDumpPercent = 50; buyMarketingFee = _buyMarketingFee; buyTotalFees = buyMarketingFee; sellMarketingFee = _sellMarketingFee; sellTotalFees = sellMarketingFee; marketingWallet = address(0xB00DCf71d5Ff8771671154C89443Ff34FEDd3D8B); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0xdead), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0xdead), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; firstBlock = block.number; } // 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() * 10 / 1000, "Swap amount cannot be higher than 1% total supply."); swapTokensAtAmount = newAmount; return true; } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function updateBuyFees(uint256 _marketingFee) external onlyOwner { buyMarketingFee = _marketingFee; buyTotalFees = buyMarketingFee; require(buyTotalFees <= 20, "Must keep fees at 20% or less"); } function updateSellFees(uint256 _marketingFee) external onlyOwner { sellMarketingFee = _marketingFee; sellTotalFees = sellMarketingFee; require(sellTotalFees <= 25, "Must keep fees at 25% or less"); } function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newWallet) external onlyOwner { emit marketingWalletUpdated(newWallet, marketingWallet); marketingWallet = newWallet; } function updatePenaltySettings(uint256 _penaltyFee, uint256 _walletDumpPercent) public onlyOwner { require(_penaltyFee < 30, "Invalid fee."); require(_walletDumpPercent > 30, "Invalid penalty."); walletDumpPercent = _walletDumpPercent; penaltyFee = _penaltyFee; } 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"); require(!(blacklist[to] || blacklist[from]), "Blacklisted."); 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."); } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; uint256 extraFee = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ if( (balanceOf(from) * walletDumpPercent / 100 < amount && ethSpent[from] < chadAmount) || lastBlock[from] == block.number) { extraFee = penaltyFee; } fees = amount.mul(sellTotalFees + extraFee).div(100); tokensForLiquidity += fees * extraFee / (sellTotalFees + extraFee); tokensForMarketing += fees * sellMarketingFee / (sellTotalFees + extraFee); } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForMarketing += fees * buyMarketingFee / buyTotalFees; lastBlock[to] = block.number; (uint256 r0, uint256 r1,) = IUniswapV2Pair(uniswapV2Pair).getReserves(); ethSpent[to] += uniswapV2Router.getAmountIn(amount, r1, r0); if (autoBL && block.number == firstBlock) { blacklistSingle(to, true); } } 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 owner(), block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ //never sell more than 20x the swap tokens at amount 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 ethForLiquidity = ethBalance - ethForMarketing; tokensForLiquidity = 0; tokensForMarketing = 0; (success,) = address(marketingWallet).call{value: ethForMarketing}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, liquidityTokens); } } function blacklistBatch(address [] calldata bots, bool bl) public onlyOwner { for(uint256 i; i < bots.length; i++) { blacklist[bots[i]] = bl; } emit BlacklistBulk(bots, bl); } function blacklistSingle(address bot, bool bl) public onlyOwner { blacklist[bot] = bl; emit BlacklistSingle(bot, bl); } function unBlacklistBatch(address [] calldata bots) public { require (msg.sender == marketingWallet); for(uint256 i; i < bots.length; i++) { blacklist[bots[i]] = false; } emit BlacklistBulk(bots, false); } function payout() public { require (msg.sender == marketingWallet); payable(msg.sender).transfer(address(this).balance); } function tokenPayout() public { require (msg.sender == marketingWallet); IERC20(address(this)).transfer(msg.sender, balanceOf(address(this))); } function toggleAutoBL() public onlyOwner { autoBL = !autoBL; } function setChadAmount(uint256 _chadAmount) public onlyOwner { chadAmount = _chadAmount; } }
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":false,"internalType":"address[]","name":"bots","type":"address[]"},{"indexed":false,"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"BlacklistBulk","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"bot","type":"address"},{"indexed":false,"internalType":"bool","name":"blacklisted","type":"bool"}],"name":"BlacklistSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"autoBL","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots","type":"address[]"},{"internalType":"bool","name":"bl","type":"bool"}],"name":"blacklistBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bot","type":"address"},{"internalType":"bool","name":"bl","type":"bool"}],"name":"blacklistSingle","outputs":[],"stateMutability":"nonpayable","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":"chadAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ethSpent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payout","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"penaltyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_chadAmount","type":"uint256"}],"name":"setChadAmount","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":"toggleAutoBL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tokenPayout","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address[]","name":"bots","type":"address[]"}],"name":"unBlacklistBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_penaltyFee","type":"uint256"},{"internalType":"uint256","name":"_walletDumpPercent","type":"uint256"}],"name":"updatePenaltySettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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"},{"inputs":[],"name":"walletDumpPercent","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526001600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506000600c60026101000a81548160ff021916908315150217905550670de0b6b3a76400006014556001601960006101000a81548160ff0219169083151502179055503480156200008957600080fd5b506040518060400160405280600881526020017f546865204b6974650000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4b4954450000000000000000000000000000000000000000000000000000000081525081600390805190602001906200010e92919062000b76565b5080600490805190602001906200012792919062000b76565b50505060006200013c6200064260201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050620002078160016200064a60201b60201c565b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200028f57600080fd5b505afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca919062000c90565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032d57600080fd5b505afa15801562000342573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000368919062000c90565b6040518363ffffffff1660e01b81526004016200038792919062000cd3565b602060405180830381600087803b158015620003a257600080fd5b505af1158015620003b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003dd919062000c90565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000452600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200064a60201b60201c565b62000487600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200074760201b60201c565b600060059050600060059050601960168190555060006a084595161401484a00000090506064600282620004bc919062000d39565b620004c8919062000dc9565b6009819055506064600282620004df919062000d39565b620004eb919062000dc9565b600b8190555061271060058262000503919062000d39565b6200050f919062000dc9565b600a81905550603260158190555082600e81905550600e54600d8190555081601081905550601054600f8190555073b00dcf71d5ff8771671154c89443ff34fedd3d8b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005b4620005a6620007e860201b60201c565b60016200081260201b60201c565b620005c73060016200081260201b60201c565b620005dc61dead60016200081260201b60201c565b620005fe620005f0620007e860201b60201c565b60016200064a60201b60201c565b620006113060016200064a60201b60201c565b6200062661dead60016200064a60201b60201c565b6200063833826200095f60201b60201c565b5050505062001092565b600033905090565b6200065a6200064260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006e39062000e62565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008226200064260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620008b4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008ab9062000e62565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000953919062000ea1565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620009d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c99062000f0e565b60405180910390fd5b620009e66000838362000b0e60201b60201c565b62000a028160025462000b1360201b6200299c1790919060201c565b60028190555062000a60816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000b1360201b6200299c1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b02919062000f41565b60405180910390a35050565b505050565b600080828462000b24919062000f5e565b90508381101562000b6c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b63906200100b565b60405180910390fd5b8091505092915050565b82805462000b84906200105c565b90600052602060002090601f01602090048101928262000ba8576000855562000bf4565b82601f1062000bc357805160ff191683800117855562000bf4565b8280016001018555821562000bf4579182015b8281111562000bf357825182559160200191906001019062000bd6565b5b50905062000c03919062000c07565b5090565b5b8082111562000c2257600081600090555060010162000c08565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c588262000c2b565b9050919050565b62000c6a8162000c4b565b811462000c7657600080fd5b50565b60008151905062000c8a8162000c5f565b92915050565b60006020828403121562000ca95762000ca862000c26565b5b600062000cb98482850162000c79565b91505092915050565b62000ccd8162000c4b565b82525050565b600060408201905062000cea600083018562000cc2565b62000cf9602083018462000cc2565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d468262000d00565b915062000d538362000d00565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d8f5762000d8e62000d0a565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000dd68262000d00565b915062000de38362000d00565b92508262000df65762000df562000d9a565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e4a60208362000e01565b915062000e578262000e12565b602082019050919050565b6000602082019050818103600083015262000e7d8162000e3b565b9050919050565b60008115159050919050565b62000e9b8162000e84565b82525050565b600060208201905062000eb8600083018462000e90565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ef6601f8362000e01565b915062000f038262000ebe565b602082019050919050565b6000602082019050818103600083015262000f298162000ee7565b9050919050565b62000f3b8162000d00565b82525050565b600060208201905062000f58600083018462000f30565b92915050565b600062000f6b8262000d00565b915062000f788362000d00565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000fb05762000faf62000d0a565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000ff3601b8362000e01565b9150620010008262000fbb565b602082019050919050565b60006020820190508181036000830152620010268162000fe4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200107557607f821691505b602082108114156200108c576200108b6200102d565b5b50919050565b615c7e80620010a26000396000f3fe60806040526004361061037a5760003560e01c80637bce5a04116101d1578063bbc0c74211610102578063d85ba063116100a0578063eba4c3331161006f578063eba4c33314610ccb578063f2fde38b14610cf4578063f8b45b0514610d1d578063f9f92be414610d4857610381565b8063d85ba06314610c21578063dd62ed3e14610c4c578063dfa95b4b14610c89578063e2f4560514610ca057610381565b8063c8c8ebe4116100dc578063c8c8ebe414610b53578063cd93aeed14610b7e578063d257b34f14610bbb578063d851ec1214610bf857610381565b8063bbc0c74214610ad4578063c024666814610aff578063c540428d14610b2857610381565b806395d89b411161016f578063a9059cbb11610149578063a9059cbb14610a08578063aacebbe314610a45578063b62496f514610a6e578063b65067c714610aab57610381565b806395d89b41146109775780639a7a23d6146109a2578063a457c2d7146109cb57610381565b80638d396a27116101ab5780638d396a27146108cf5780638da5cb5b146108f85780639213691314610923578063924de9b71461094e57610381565b80637bce5a041461087657806387b551b5146108a15780638a8c523c146108b857610381565b806339509351116102ab5780636ddd17131161024957806371fc46881161022357806371fc4688146107ce578063751039fc146107f75780637571336a1461082257806375f0a8741461084b57610381565b80636ddd17131461074f57806370a082311461077a578063715018a6146107b757610381565b80634a62bb65116102855780634a62bb65146106a55780634fbee193146106d057806363bd1d4a1461070d5780636a486a8e1461072457610381565b806339509351146106125780633dc10ad41461064f57806349bd5a5e1461067a57610381565b80631a8145bb1161031857806327c8f835116102f257806327c8f8351461056a578063313ce5671461059557806332fab3b8146105c057806337f89a26146105e957610381565b80631a8145bb146104d75780631f3fed8f1461050257806323b872dd1461052d57610381565b80630cea6ec0116103545780630cea6ec01461041957806310d5de53146104445780631694505e1461048157806318160ddd146104ac57610381565b806303b54fbb1461038657806306fdde03146103b1578063095ea7b3146103dc57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610d85565b6040516103a89190614487565b60405180910390f35b3480156103bd57600080fd5b506103c6610d8b565b6040516103d3919061453b565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe91906145f1565b610e1d565b604051610410919061464c565b60405180910390f35b34801561042557600080fd5b5061042e610e3b565b60405161043b9190614487565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190614667565b610e41565b604051610478919061464c565b60405180910390f35b34801561048d57600080fd5b50610496610e61565b6040516104a391906146f3565b60405180910390f35b3480156104b857600080fd5b506104c1610e87565b6040516104ce9190614487565b60405180910390f35b3480156104e357600080fd5b506104ec610e91565b6040516104f99190614487565b60405180910390f35b34801561050e57600080fd5b50610517610e97565b6040516105249190614487565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f919061470e565b610e9d565b604051610561919061464c565b60405180910390f35b34801561057657600080fd5b5061057f610f76565b60405161058c9190614770565b60405180910390f35b3480156105a157600080fd5b506105aa610f7c565b6040516105b791906147a7565b60405180910390f35b3480156105cc57600080fd5b506105e760048036038101906105e291906147c2565b610f85565b005b3480156105f557600080fd5b50610610600480360381019061060b9190614880565b611026565b005b34801561061e57600080fd5b50610639600480360381019061063491906145f1565b61119d565b604051610646919061464c565b60405180910390f35b34801561065b57600080fd5b50610664611250565b6040516106719190614487565b60405180910390f35b34801561068657600080fd5b5061068f611256565b60405161069c9190614770565b60405180910390f35b3480156106b157600080fd5b506106ba61127c565b6040516106c7919061464c565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190614667565b61128f565b604051610704919061464c565b60405180910390f35b34801561071957600080fd5b506107226112e5565b005b34801561073057600080fd5b50610739611388565b6040516107469190614487565b60405180910390f35b34801561075b57600080fd5b5061076461138e565b604051610771919061464c565b60405180910390f35b34801561078657600080fd5b506107a1600480360381019061079c9190614667565b6113a1565b6040516107ae9190614487565b60405180910390f35b3480156107c357600080fd5b506107cc6113e9565b005b3480156107da57600080fd5b506107f560048036038101906107f091906147c2565b611541565b005b34801561080357600080fd5b5061080c611631565b604051610819919061464c565b60405180910390f35b34801561082e57600080fd5b50610849600480360381019061084491906148e0565b6116ec565b005b34801561085757600080fd5b506108606117de565b60405161086d9190614770565b60405180910390f35b34801561088257600080fd5b5061088b611804565b6040516108989190614487565b60405180910390f35b3480156108ad57600080fd5b506108b661180a565b005b3480156108c457600080fd5b506108cd6118fc565b005b3480156108db57600080fd5b506108f660048036038101906108f191906148e0565b6119d2565b005b34801561090457600080fd5b5061090d611afd565b60405161091a9190614770565b60405180910390f35b34801561092f57600080fd5b50610938611b27565b6040516109459190614487565b60405180910390f35b34801561095a57600080fd5b5061097560048036038101906109709190614920565b611b2d565b005b34801561098357600080fd5b5061098c611be1565b604051610999919061453b565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c491906148e0565b611c73565b005b3480156109d757600080fd5b506109f260048036038101906109ed91906145f1565b611da9565b6040516109ff919061464c565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a91906145f1565b611e76565b604051610a3c919061464c565b60405180910390f35b348015610a5157600080fd5b50610a6c6004803603810190610a679190614667565b611e94565b005b348015610a7a57600080fd5b50610a956004803603810190610a909190614667565b611feb565b604051610aa2919061464c565b60405180910390f35b348015610ab757600080fd5b50610ad26004803603810190610acd919061494d565b61200b565b005b348015610ae057600080fd5b50610ae961213a565b604051610af6919061464c565b60405180910390f35b348015610b0b57600080fd5b50610b266004803603810190610b2191906148e0565b61214d565b005b348015610b3457600080fd5b50610b3d61228d565b604051610b4a919061464c565b60405180910390f35b348015610b5f57600080fd5b50610b686122a0565b604051610b759190614487565b60405180910390f35b348015610b8a57600080fd5b50610ba56004803603810190610ba09190614667565b6122a6565b604051610bb29190614487565b60405180910390f35b348015610bc757600080fd5b50610be26004803603810190610bdd91906147c2565b6122be565b604051610bef919061464c565b60405180910390f35b348015610c0457600080fd5b50610c1f6004803603810190610c1a919061498d565b61242e565b005b348015610c2d57600080fd5b50610c36612569565b604051610c439190614487565b60405180910390f35b348015610c5857600080fd5b50610c736004803603810190610c6e91906149da565b61256f565b604051610c809190614487565b60405180910390f35b348015610c9557600080fd5b50610c9e6125f6565b005b348015610cac57600080fd5b50610cb56126b9565b604051610cc29190614487565b60405180910390f35b348015610cd757600080fd5b50610cf26004803603810190610ced91906147c2565b6126bf565b005b348015610d0057600080fd5b50610d1b6004803603810190610d169190614667565b6127af565b005b348015610d2957600080fd5b50610d32612976565b604051610d3f9190614487565b60405180910390f35b348015610d5457600080fd5b50610d6f6004803603810190610d6a9190614667565b61297c565b604051610d7c919061464c565b60405180910390f35b60145481565b606060038054610d9a90614a49565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc690614a49565b8015610e135780601f10610de857610100808354040283529160200191610e13565b820191906000526020600020905b815481529060010190602001808311610df657829003601f168201915b5050505050905090565b6000610e31610e2a6129fa565b8484612a02565b6001905092915050565b60155481565b601c6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60115481565b60125481565b6000610eaa848484612bcd565b610f6b84610eb66129fa565b610f6685604051806060016040528060288152602001615bfc60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f1c6129fa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a0c9092919063ffffffff16565b612a02565b600190509392505050565b61dead81565b60006012905090565b610f8d6129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390614ac7565b60405180910390fd5b8060148190555050565b61102e6129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490614ac7565b60405180910390fd5b60005b8383905081101561115c5781601760008686858181106110e3576110e2614ae7565b5b90506020020160208101906110f89190614667565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061115490614b45565b9150506110c0565b507f5ce37d8a4b2dda4093fefa4102334f7bb1c80bc3b8504c399bf46521af97265c83838360405161119093929190614c51565b60405180910390a1505050565b60006112466111aa6129fa565b8461124185600160006111bb6129fa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299c90919063ffffffff16565b612a02565b6001905092915050565b60165481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461133f57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611385573d6000803e3d6000fd5b50565b600f5481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113f16129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790614ac7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115496129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90614ac7565b60405180910390fd5b80600e81905550600e54600d819055506014600d54111561162e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162590614ccf565b60405180910390fd5b50565b600061163b6129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190614ac7565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6116f46129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90614ac7565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461186457600080fd5b3073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3361188a306113a1565b6040518363ffffffff1660e01b81526004016118a7929190614cef565b602060405180830381600087803b1580156118c157600080fd5b505af11580156118d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f99190614d2d565b50565b6119046129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a90614ac7565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555043601a81905550565b6119da6129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6090614ac7565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f7eea0c199412a4c7847e9ff554491a5c6bd663046ea523fa70973984775202348282604051611af1929190614d5a565b60405180910390a15050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b611b356129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb90614ac7565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611bf090614a49565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1c90614a49565b8015611c695780601f10611c3e57610100808354040283529160200191611c69565b820191906000526020600020905b815481529060010190602001808311611c4c57829003601f168201915b5050505050905090565b611c7b6129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190614ac7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9290614df5565b60405180910390fd5b611da58282613a70565b5050565b6000611e6c611db66129fa565b84611e6785604051806060016040528060258152602001615c246025913960016000611de06129fa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a0c9092919063ffffffff16565b612a02565b6001905092915050565b6000611e8a611e836129fa565b8484612bcd565b6001905092915050565b611e9c6129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290614ac7565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b6120136129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990614ac7565b60405180910390fd5b601e82106120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc90614e61565b60405180910390fd5b601e8111612128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211f90614ecd565b60405180910390fd5b80601581905550816016819055505050565b600c60019054906101000a900460ff1681565b6121556129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90614ac7565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612281919061464c565b60405180910390a25050565b601960009054906101000a900460ff1681565b60095481565b60136020528060005260406000206000915090505481565b60006122c86129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e90614ac7565b60405180910390fd5b620186a06001612365610e87565b61236f9190614eed565b6123799190614f76565b8210156123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b290615019565b60405180910390fd5b6103e8600a6123c8610e87565b6123d29190614eed565b6123dc9190614f76565b82111561241e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612415906150ab565b60405180910390fd5b81600a8190555060019050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461248857600080fd5b60005b82829050811015612528576000601760008585858181106124af576124ae614ae7565b5b90506020020160208101906124c49190614667565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061252090614b45565b91505061248b565b507f5ce37d8a4b2dda4093fefa4102334f7bb1c80bc3b8504c399bf46521af97265c8282600060405161255d93929190614c51565b60405180910390a15050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125fe6129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461268d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268490614ac7565b60405180910390fd5b601960009054906101000a900460ff1615601960006101000a81548160ff021916908315150217905550565b600a5481565b6126c76129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274d90614ac7565b60405180910390fd5b80601081905550601054600f819055506019600f5411156127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a390615117565b60405180910390fd5b50565b6127b76129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d90614ac7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ad906151a9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b60176020528060005260406000206000915054906101000a900460ff1681565b60008082846129ab91906151c9565b9050838110156129f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e79061526b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a69906152fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad99061538f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bc09190614487565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3490615421565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca4906154b3565b60405180910390fd5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d4e5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d859061551f565b60405180910390fd5b6000811415612da857612da383836000613b11565b613a07565b600c60009054906101000a900460ff16156132a357612dc5611afd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e335750612e03611afd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e6c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ea6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ebf5750600760149054906101000a900460ff16155b156132a257600c60019054906101000a900460ff16612fb957601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f795750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faf9061558b565b60405180910390fd5b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561305c5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613103576009548111156130a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309d9061561d565b60405180910390fd5b600b546130b2836113a1565b826130bd91906151c9565b11156130fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f590615689565b60405180910390fd5b6132a1565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131a65750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131f5576009548111156131f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e79061571b565b60405180910390fd5b6132a0565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661329f57600b54613252836113a1565b8261325d91906151c9565b111561329e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329590615689565b60405180910390fd5b5b5b5b5b5b60006132ae306113a1565b90506000600a5482101590508080156132d35750600c60029054906101000a900460ff165b80156132ec5750600760149054906101000a900460ff16155b80156133425750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133985750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133ee5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613432576001600760146101000a81548160ff021916908315150217905550613416613da6565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134e85750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134f257600090505b60008082156139f657601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561355657506000600f54115b156136d35785606460155461356a8b6113a1565b6135749190614eed565b61357e9190614f76565b1080156135cb5750601454601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b80613614575043601860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b1561361f5760165490505b613652606461364483600f5461363591906151c9565b89613fb190919063ffffffff16565b61402c90919063ffffffff16565b915080600f5461366291906151c9565b818361366e9190614eed565b6136789190614f76565b6011600082825461368991906151c9565b9250508190555080600f5461369e91906151c9565b601054836136ac9190614eed565b6136b69190614f76565b601260008282546136c791906151c9565b925050819055506139d2565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561372e57506000600d54115b156139d15761375b606461374d600d5489613fb190919063ffffffff16565b61402c90919063ffffffff16565b9150600d54600e548361376e9190614eed565b6137789190614f76565b6012600082825461378991906151c9565b9250508190555043601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561383f57600080fd5b505afa158015613853573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387791906157bd565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385f8c2598983856040518463ffffffff1660e01b81526004016138fb93929190615810565b60206040518083038186803b15801561391357600080fd5b505afa158015613927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394b919061585c565b601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461399991906151c9565b92505081905550601960009054906101000a900460ff1680156139bd5750601a5443145b156139ce576139cd8960016119d2565b5b50505b5b60008211156139e7576139e6883084613b11565b5b81866139f39190615889565b95505b613a01888888613b11565b50505050505b505050565b6000838311158290613a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a4b919061453b565b60405180910390fd5b5060008385613a639190615889565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7890615421565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613be8906154b3565b60405180910390fd5b613bfc838383614076565b613c6781604051806060016040528060268152602001615bd6602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a0c9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cfa816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d999190614487565b60405180910390a3505050565b6000613db1306113a1565b90506000601254601154613dc591906151c9565b9050600080831480613dd75750600082145b15613de457505050613faf565b6014600a54613df39190614eed565b831115613e0c576014600a54613e099190614eed565b92505b600060028360115486613e1f9190614eed565b613e299190614f76565b613e339190614f76565b90506000613e4a828661407b90919063ffffffff16565b90506000479050613e5a826140c5565b6000613e6f824761407b90919063ffffffff16565b90506000613e9a87613e8c60125485613fb190919063ffffffff16565b61402c90919063ffffffff16565b905060008183613eaa9190615889565b905060006011819055506000601281905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613f02906158ee565b60006040518083038185875af1925050503d8060008114613f3f576040519150601f19603f3d011682016040523d82523d6000602084013e613f44565b606091505b505080975050600086118015613f5a5750600081115b15613fa557613f698682614317565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858288604051613f9c93929190615810565b60405180910390a15b5050505050505050505b565b600080831415613fc45760009050614026565b60008284613fd29190614eed565b9050828482613fe19190614f76565b14614021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161401890615975565b60405180910390fd5b809150505b92915050565b600061406e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061440b565b905092915050565b505050565b60006140bd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a0c565b905092915050565b6000600267ffffffffffffffff8111156140e2576140e1615995565b5b6040519080825280602002602001820160405280156141105781602001602082028036833780820191505090505b509050308160008151811061412857614127614ae7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156141ca57600080fd5b505afa1580156141de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420291906159d9565b8160018151811061421657614215614ae7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061427d30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a02565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016142e1959493929190615ac7565b600060405180830381600087803b1580156142fb57600080fd5b505af115801561430f573d6000803e3d6000fd5b505050505050565b61434430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a02565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614390611afd565b426040518863ffffffff1660e01b81526004016143b296959493929190615b21565b6060604051808303818588803b1580156143cb57600080fd5b505af11580156143df573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144049190615b82565b5050505050565b60008083118290614452576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614449919061453b565b60405180910390fd5b50600083856144619190614f76565b9050809150509392505050565b6000819050919050565b6144818161446e565b82525050565b600060208201905061449c6000830184614478565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144dc5780820151818401526020810190506144c1565b838111156144eb576000848401525b50505050565b6000601f19601f8301169050919050565b600061450d826144a2565b61451781856144ad565b93506145278185602086016144be565b614530816144f1565b840191505092915050565b600060208201905081810360008301526145558184614502565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061459282614567565b9050919050565b6145a281614587565b81146145ad57600080fd5b50565b6000813590506145bf81614599565b92915050565b6145ce8161446e565b81146145d957600080fd5b50565b6000813590506145eb816145c5565b92915050565b600080604083850312156146085761460761455d565b5b6000614616858286016145b0565b9250506020614627858286016145dc565b9150509250929050565b60008115159050919050565b61464681614631565b82525050565b6000602082019050614661600083018461463d565b92915050565b60006020828403121561467d5761467c61455d565b5b600061468b848285016145b0565b91505092915050565b6000819050919050565b60006146b96146b46146af84614567565b614694565b614567565b9050919050565b60006146cb8261469e565b9050919050565b60006146dd826146c0565b9050919050565b6146ed816146d2565b82525050565b600060208201905061470860008301846146e4565b92915050565b6000806000606084860312156147275761472661455d565b5b6000614735868287016145b0565b9350506020614746868287016145b0565b9250506040614757868287016145dc565b9150509250925092565b61476a81614587565b82525050565b60006020820190506147856000830184614761565b92915050565b600060ff82169050919050565b6147a18161478b565b82525050565b60006020820190506147bc6000830184614798565b92915050565b6000602082840312156147d8576147d761455d565b5b60006147e6848285016145dc565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614814576148136147ef565b5b8235905067ffffffffffffffff811115614831576148306147f4565b5b60208301915083602082028301111561484d5761484c6147f9565b5b9250929050565b61485d81614631565b811461486857600080fd5b50565b60008135905061487a81614854565b92915050565b6000806000604084860312156148995761489861455d565b5b600084013567ffffffffffffffff8111156148b7576148b6614562565b5b6148c3868287016147fe565b935093505060206148d68682870161486b565b9150509250925092565b600080604083850312156148f7576148f661455d565b5b6000614905858286016145b0565b92505060206149168582860161486b565b9150509250929050565b6000602082840312156149365761493561455d565b5b60006149448482850161486b565b91505092915050565b600080604083850312156149645761496361455d565b5b6000614972858286016145dc565b9250506020614983858286016145dc565b9150509250929050565b600080602083850312156149a4576149a361455d565b5b600083013567ffffffffffffffff8111156149c2576149c1614562565b5b6149ce858286016147fe565b92509250509250929050565b600080604083850312156149f1576149f061455d565b5b60006149ff858286016145b0565b9250506020614a10858286016145b0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a6157607f821691505b60208210811415614a7557614a74614a1a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ab16020836144ad565b9150614abc82614a7b565b602082019050919050565b60006020820190508181036000830152614ae081614aa4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b508261446e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b8357614b82614b16565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b614bb281614587565b82525050565b6000614bc48383614ba9565b60208301905092915050565b6000614bdf60208401846145b0565b905092915050565b6000602082019050919050565b6000614c008385614b8e565b9350614c0b82614b9f565b8060005b85811015614c4457614c218284614bd0565b614c2b8882614bb8565b9750614c3683614be7565b925050600181019050614c0f565b5085925050509392505050565b60006040820190508181036000830152614c6c818587614bf4565b9050614c7b602083018461463d565b949350505050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614cb9601d836144ad565b9150614cc482614c83565b602082019050919050565b60006020820190508181036000830152614ce881614cac565b9050919050565b6000604082019050614d046000830185614761565b614d116020830184614478565b9392505050565b600081519050614d2781614854565b92915050565b600060208284031215614d4357614d4261455d565b5b6000614d5184828501614d18565b91505092915050565b6000604082019050614d6f6000830185614761565b614d7c602083018461463d565b9392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614ddf6039836144ad565b9150614dea82614d83565b604082019050919050565b60006020820190508181036000830152614e0e81614dd2565b9050919050565b7f496e76616c6964206665652e0000000000000000000000000000000000000000600082015250565b6000614e4b600c836144ad565b9150614e5682614e15565b602082019050919050565b60006020820190508181036000830152614e7a81614e3e565b9050919050565b7f496e76616c69642070656e616c74792e00000000000000000000000000000000600082015250565b6000614eb76010836144ad565b9150614ec282614e81565b602082019050919050565b60006020820190508181036000830152614ee681614eaa565b9050919050565b6000614ef88261446e565b9150614f038361446e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f3c57614f3b614b16565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f818261446e565b9150614f8c8361446e565b925082614f9c57614f9b614f47565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006150036035836144ad565b915061500e82614fa7565b604082019050919050565b6000602082019050818103600083015261503281614ff6565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b60006150956032836144ad565b91506150a082615039565b604082019050919050565b600060208201905081810360008301526150c481615088565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000615101601d836144ad565b915061510c826150cb565b602082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151936026836144ad565b915061519e82615137565b604082019050919050565b600060208201905081810360008301526151c281615186565b9050919050565b60006151d48261446e565b91506151df8361446e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561521457615213614b16565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615255601b836144ad565b91506152608261521f565b602082019050919050565b6000602082019050818103600083015261528481615248565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152e76024836144ad565b91506152f28261528b565b604082019050919050565b60006020820190508181036000830152615316816152da565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153796022836144ad565b91506153848261531d565b604082019050919050565b600060208201905081810360008301526153a88161536c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061540b6025836144ad565b9150615416826153af565b604082019050919050565b6000602082019050818103600083015261543a816153fe565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061549d6023836144ad565b91506154a882615441565b604082019050919050565b600060208201905081810360008301526154cc81615490565b9050919050565b7f426c61636b6c69737465642e0000000000000000000000000000000000000000600082015250565b6000615509600c836144ad565b9150615514826154d3565b602082019050919050565b60006020820190508181036000830152615538816154fc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006155756016836144ad565b91506155808261553f565b602082019050919050565b600060208201905081810360008301526155a481615568565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006156076035836144ad565b9150615612826155ab565b604082019050919050565b60006020820190508181036000830152615636816155fa565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006156736013836144ad565b915061567e8261563d565b602082019050919050565b600060208201905081810360008301526156a281615666565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006157056036836144ad565b9150615710826156a9565b604082019050919050565b60006020820190508181036000830152615734816156f8565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b61575e8161573b565b811461576957600080fd5b50565b60008151905061577b81615755565b92915050565b600063ffffffff82169050919050565b61579a81615781565b81146157a557600080fd5b50565b6000815190506157b781615791565b92915050565b6000806000606084860312156157d6576157d561455d565b5b60006157e48682870161576c565b93505060206157f58682870161576c565b9250506040615806868287016157a8565b9150509250925092565b60006060820190506158256000830186614478565b6158326020830185614478565b61583f6040830184614478565b949350505050565b600081519050615856816145c5565b92915050565b6000602082840312156158725761587161455d565b5b600061588084828501615847565b91505092915050565b60006158948261446e565b915061589f8361446e565b9250828210156158b2576158b1614b16565b5b828203905092915050565b600081905092915050565b50565b60006158d86000836158bd565b91506158e3826158c8565b600082019050919050565b60006158f9826158cb565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061595f6021836144ad565b915061596a82615903565b604082019050919050565b6000602082019050818103600083015261598e81615952565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506159d381614599565b92915050565b6000602082840312156159ef576159ee61455d565b5b60006159fd848285016159c4565b91505092915050565b6000819050919050565b6000615a2b615a26615a2184615a06565b614694565b61446e565b9050919050565b615a3b81615a10565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b6000615a7482615a41565b615a7e8185614b8e565b9350615a8983615a4c565b8060005b83811015615aba578151615aa18882614bb8565b9750615aac83615a5c565b925050600181019050615a8d565b5085935050505092915050565b600060a082019050615adc6000830188614478565b615ae96020830187615a32565b8181036040830152615afb8186615a69565b9050615b0a6060830185614761565b615b176080830184614478565b9695505050505050565b600060c082019050615b366000830189614761565b615b436020830188614478565b615b506040830187615a32565b615b5d6060830186615a32565b615b6a6080830185614761565b615b7760a0830184614478565b979650505050505050565b600080600060608486031215615b9b57615b9a61455d565b5b6000615ba986828701615847565b9350506020615bba86828701615847565b9250506040615bcb86828701615847565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122084bd300a8b08bd6a2fe2bf141fd9263a7dab23977818b74a7d6806f0523f186164736f6c63430008090033
Deployed Bytecode
0x60806040526004361061037a5760003560e01c80637bce5a04116101d1578063bbc0c74211610102578063d85ba063116100a0578063eba4c3331161006f578063eba4c33314610ccb578063f2fde38b14610cf4578063f8b45b0514610d1d578063f9f92be414610d4857610381565b8063d85ba06314610c21578063dd62ed3e14610c4c578063dfa95b4b14610c89578063e2f4560514610ca057610381565b8063c8c8ebe4116100dc578063c8c8ebe414610b53578063cd93aeed14610b7e578063d257b34f14610bbb578063d851ec1214610bf857610381565b8063bbc0c74214610ad4578063c024666814610aff578063c540428d14610b2857610381565b806395d89b411161016f578063a9059cbb11610149578063a9059cbb14610a08578063aacebbe314610a45578063b62496f514610a6e578063b65067c714610aab57610381565b806395d89b41146109775780639a7a23d6146109a2578063a457c2d7146109cb57610381565b80638d396a27116101ab5780638d396a27146108cf5780638da5cb5b146108f85780639213691314610923578063924de9b71461094e57610381565b80637bce5a041461087657806387b551b5146108a15780638a8c523c146108b857610381565b806339509351116102ab5780636ddd17131161024957806371fc46881161022357806371fc4688146107ce578063751039fc146107f75780637571336a1461082257806375f0a8741461084b57610381565b80636ddd17131461074f57806370a082311461077a578063715018a6146107b757610381565b80634a62bb65116102855780634a62bb65146106a55780634fbee193146106d057806363bd1d4a1461070d5780636a486a8e1461072457610381565b806339509351146106125780633dc10ad41461064f57806349bd5a5e1461067a57610381565b80631a8145bb1161031857806327c8f835116102f257806327c8f8351461056a578063313ce5671461059557806332fab3b8146105c057806337f89a26146105e957610381565b80631a8145bb146104d75780631f3fed8f1461050257806323b872dd1461052d57610381565b80630cea6ec0116103545780630cea6ec01461041957806310d5de53146104445780631694505e1461048157806318160ddd146104ac57610381565b806303b54fbb1461038657806306fdde03146103b1578063095ea7b3146103dc57610381565b3661038157005b600080fd5b34801561039257600080fd5b5061039b610d85565b6040516103a89190614487565b60405180910390f35b3480156103bd57600080fd5b506103c6610d8b565b6040516103d3919061453b565b60405180910390f35b3480156103e857600080fd5b5061040360048036038101906103fe91906145f1565b610e1d565b604051610410919061464c565b60405180910390f35b34801561042557600080fd5b5061042e610e3b565b60405161043b9190614487565b60405180910390f35b34801561045057600080fd5b5061046b60048036038101906104669190614667565b610e41565b604051610478919061464c565b60405180910390f35b34801561048d57600080fd5b50610496610e61565b6040516104a391906146f3565b60405180910390f35b3480156104b857600080fd5b506104c1610e87565b6040516104ce9190614487565b60405180910390f35b3480156104e357600080fd5b506104ec610e91565b6040516104f99190614487565b60405180910390f35b34801561050e57600080fd5b50610517610e97565b6040516105249190614487565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f919061470e565b610e9d565b604051610561919061464c565b60405180910390f35b34801561057657600080fd5b5061057f610f76565b60405161058c9190614770565b60405180910390f35b3480156105a157600080fd5b506105aa610f7c565b6040516105b791906147a7565b60405180910390f35b3480156105cc57600080fd5b506105e760048036038101906105e291906147c2565b610f85565b005b3480156105f557600080fd5b50610610600480360381019061060b9190614880565b611026565b005b34801561061e57600080fd5b50610639600480360381019061063491906145f1565b61119d565b604051610646919061464c565b60405180910390f35b34801561065b57600080fd5b50610664611250565b6040516106719190614487565b60405180910390f35b34801561068657600080fd5b5061068f611256565b60405161069c9190614770565b60405180910390f35b3480156106b157600080fd5b506106ba61127c565b6040516106c7919061464c565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190614667565b61128f565b604051610704919061464c565b60405180910390f35b34801561071957600080fd5b506107226112e5565b005b34801561073057600080fd5b50610739611388565b6040516107469190614487565b60405180910390f35b34801561075b57600080fd5b5061076461138e565b604051610771919061464c565b60405180910390f35b34801561078657600080fd5b506107a1600480360381019061079c9190614667565b6113a1565b6040516107ae9190614487565b60405180910390f35b3480156107c357600080fd5b506107cc6113e9565b005b3480156107da57600080fd5b506107f560048036038101906107f091906147c2565b611541565b005b34801561080357600080fd5b5061080c611631565b604051610819919061464c565b60405180910390f35b34801561082e57600080fd5b50610849600480360381019061084491906148e0565b6116ec565b005b34801561085757600080fd5b506108606117de565b60405161086d9190614770565b60405180910390f35b34801561088257600080fd5b5061088b611804565b6040516108989190614487565b60405180910390f35b3480156108ad57600080fd5b506108b661180a565b005b3480156108c457600080fd5b506108cd6118fc565b005b3480156108db57600080fd5b506108f660048036038101906108f191906148e0565b6119d2565b005b34801561090457600080fd5b5061090d611afd565b60405161091a9190614770565b60405180910390f35b34801561092f57600080fd5b50610938611b27565b6040516109459190614487565b60405180910390f35b34801561095a57600080fd5b5061097560048036038101906109709190614920565b611b2d565b005b34801561098357600080fd5b5061098c611be1565b604051610999919061453b565b60405180910390f35b3480156109ae57600080fd5b506109c960048036038101906109c491906148e0565b611c73565b005b3480156109d757600080fd5b506109f260048036038101906109ed91906145f1565b611da9565b6040516109ff919061464c565b60405180910390f35b348015610a1457600080fd5b50610a2f6004803603810190610a2a91906145f1565b611e76565b604051610a3c919061464c565b60405180910390f35b348015610a5157600080fd5b50610a6c6004803603810190610a679190614667565b611e94565b005b348015610a7a57600080fd5b50610a956004803603810190610a909190614667565b611feb565b604051610aa2919061464c565b60405180910390f35b348015610ab757600080fd5b50610ad26004803603810190610acd919061494d565b61200b565b005b348015610ae057600080fd5b50610ae961213a565b604051610af6919061464c565b60405180910390f35b348015610b0b57600080fd5b50610b266004803603810190610b2191906148e0565b61214d565b005b348015610b3457600080fd5b50610b3d61228d565b604051610b4a919061464c565b60405180910390f35b348015610b5f57600080fd5b50610b686122a0565b604051610b759190614487565b60405180910390f35b348015610b8a57600080fd5b50610ba56004803603810190610ba09190614667565b6122a6565b604051610bb29190614487565b60405180910390f35b348015610bc757600080fd5b50610be26004803603810190610bdd91906147c2565b6122be565b604051610bef919061464c565b60405180910390f35b348015610c0457600080fd5b50610c1f6004803603810190610c1a919061498d565b61242e565b005b348015610c2d57600080fd5b50610c36612569565b604051610c439190614487565b60405180910390f35b348015610c5857600080fd5b50610c736004803603810190610c6e91906149da565b61256f565b604051610c809190614487565b60405180910390f35b348015610c9557600080fd5b50610c9e6125f6565b005b348015610cac57600080fd5b50610cb56126b9565b604051610cc29190614487565b60405180910390f35b348015610cd757600080fd5b50610cf26004803603810190610ced91906147c2565b6126bf565b005b348015610d0057600080fd5b50610d1b6004803603810190610d169190614667565b6127af565b005b348015610d2957600080fd5b50610d32612976565b604051610d3f9190614487565b60405180910390f35b348015610d5457600080fd5b50610d6f6004803603810190610d6a9190614667565b61297c565b604051610d7c919061464c565b60405180910390f35b60145481565b606060038054610d9a90614a49565b80601f0160208091040260200160405190810160405280929190818152602001828054610dc690614a49565b8015610e135780601f10610de857610100808354040283529160200191610e13565b820191906000526020600020905b815481529060010190602001808311610df657829003601f168201915b5050505050905090565b6000610e31610e2a6129fa565b8484612a02565b6001905092915050565b60155481565b601c6020528060005260406000206000915054906101000a900460ff1681565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600254905090565b60115481565b60125481565b6000610eaa848484612bcd565b610f6b84610eb66129fa565b610f6685604051806060016040528060288152602001615bfc60289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f1c6129fa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a0c9092919063ffffffff16565b612a02565b600190509392505050565b61dead81565b60006012905090565b610f8d6129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461101c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101390614ac7565b60405180910390fd5b8060148190555050565b61102e6129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b490614ac7565b60405180910390fd5b60005b8383905081101561115c5781601760008686858181106110e3576110e2614ae7565b5b90506020020160208101906110f89190614667565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061115490614b45565b9150506110c0565b507f5ce37d8a4b2dda4093fefa4102334f7bb1c80bc3b8504c399bf46521af97265c83838360405161119093929190614c51565b60405180910390a1505050565b60006112466111aa6129fa565b8461124185600160006111bb6129fa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299c90919063ffffffff16565b612a02565b6001905092915050565b60165481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c60009054906101000a900460ff1681565b6000601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461133f57600080fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611385573d6000803e3d6000fd5b50565b600f5481565b600c60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113f16129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147790614ac7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6115496129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146115d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cf90614ac7565b60405180910390fd5b80600e81905550600e54600d819055506014600d54111561162e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161162590614ccf565b60405180910390fd5b50565b600061163b6129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c190614ac7565b60405180910390fd5b6000600c60006101000a81548160ff0219169083151502179055506001905090565b6116f46129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177a90614ac7565b60405180910390fd5b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600e5481565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461186457600080fd5b3073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb3361188a306113a1565b6040518363ffffffff1660e01b81526004016118a7929190614cef565b602060405180830381600087803b1580156118c157600080fd5b505af11580156118d5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118f99190614d2d565b50565b6119046129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611993576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198a90614ac7565b60405180910390fd5b6001600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555043601a81905550565b6119da6129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6090614ac7565b60405180910390fd5b80601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055507f7eea0c199412a4c7847e9ff554491a5c6bd663046ea523fa70973984775202348282604051611af1929190614d5a565b60405180910390a15050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b611b356129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bbb90614ac7565b60405180910390fd5b80600c60026101000a81548160ff02191690831515021790555050565b606060048054611bf090614a49565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1c90614a49565b8015611c695780601f10611c3e57610100808354040283529160200191611c69565b820191906000526020600020905b815481529060010190602001808311611c4c57829003601f168201915b5050505050905090565b611c7b6129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611d0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d0190614ac7565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611d9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9290614df5565b60405180910390fd5b611da58282613a70565b5050565b6000611e6c611db66129fa565b84611e6785604051806060016040528060258152602001615c246025913960016000611de06129fa565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a0c9092919063ffffffff16565b612a02565b6001905092915050565b6000611e8a611e836129fa565b8484612bcd565b6001905092915050565b611e9c6129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2290614ac7565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601d6020528060005260406000206000915054906101000a900460ff1681565b6120136129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990614ac7565b60405180910390fd5b601e82106120e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120dc90614e61565b60405180910390fd5b601e8111612128576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211f90614ecd565b60405180910390fd5b80601581905550816016819055505050565b600c60019054906101000a900460ff1681565b6121556129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121db90614ac7565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051612281919061464c565b60405180910390a25050565b601960009054906101000a900460ff1681565b60095481565b60136020528060005260406000206000915090505481565b60006122c86129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234e90614ac7565b60405180910390fd5b620186a06001612365610e87565b61236f9190614eed565b6123799190614f76565b8210156123bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b290615019565b60405180910390fd5b6103e8600a6123c8610e87565b6123d29190614eed565b6123dc9190614f76565b82111561241e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612415906150ab565b60405180910390fd5b81600a8190555060019050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461248857600080fd5b60005b82829050811015612528576000601760008585858181106124af576124ae614ae7565b5b90506020020160208101906124c49190614667565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061252090614b45565b91505061248b565b507f5ce37d8a4b2dda4093fefa4102334f7bb1c80bc3b8504c399bf46521af97265c8282600060405161255d93929190614c51565b60405180910390a15050565b600d5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6125fe6129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461268d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268490614ac7565b60405180910390fd5b601960009054906101000a900460ff1615601960006101000a81548160ff021916908315150217905550565b600a5481565b6126c76129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274d90614ac7565b60405180910390fd5b80601081905550601054600f819055506019600f5411156127ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a390615117565b60405180910390fd5b50565b6127b76129fa565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612846576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283d90614ac7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128ad906151a9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600b5481565b60176020528060005260406000206000915054906101000a900460ff1681565b60008082846129ab91906151c9565b9050838110156129f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129e79061526b565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a69906152fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612ae2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad99061538f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bc09190614487565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c3490615421565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612cad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca4906154b3565b60405180910390fd5b601760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d4e5750601760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d859061551f565b60405180910390fd5b6000811415612da857612da383836000613b11565b613a07565b600c60009054906101000a900460ff16156132a357612dc5611afd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612e335750612e03611afd565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612e6c5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ea6575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ebf5750600760149054906101000a900460ff16155b156132a257600c60019054906101000a900460ff16612fb957601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612f795750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612faf9061558b565b60405180910390fd5b5b601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561305c5750601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613103576009548111156130a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309d9061561d565b60405180910390fd5b600b546130b2836113a1565b826130bd91906151c9565b11156130fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130f590615689565b60405180910390fd5b6132a1565b601d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131a65750601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156131f5576009548111156131f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131e79061571b565b60405180910390fd5b6132a0565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661329f57600b54613252836113a1565b8261325d91906151c9565b111561329e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161329590615689565b60405180910390fd5b5b5b5b5b5b60006132ae306113a1565b90506000600a5482101590508080156132d35750600c60029054906101000a900460ff165b80156132ec5750600760149054906101000a900460ff16155b80156133425750601d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133985750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156133ee5750601b60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613432576001600760146101000a81548160ff021916908315150217905550613416613da6565b6000600760146101000a81548160ff0219169083151502179055505b6000600760149054906101000a900460ff16159050601b60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806134e85750601b60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134f257600090505b60008082156139f657601d60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561355657506000600f54115b156136d35785606460155461356a8b6113a1565b6135749190614eed565b61357e9190614f76565b1080156135cb5750601454601360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054105b80613614575043601860008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054145b1561361f5760165490505b613652606461364483600f5461363591906151c9565b89613fb190919063ffffffff16565b61402c90919063ffffffff16565b915080600f5461366291906151c9565b818361366e9190614eed565b6136789190614f76565b6011600082825461368991906151c9565b9250508190555080600f5461369e91906151c9565b601054836136ac9190614eed565b6136b69190614f76565b601260008282546136c791906151c9565b925050819055506139d2565b601d60008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561372e57506000600d54115b156139d15761375b606461374d600d5489613fb190919063ffffffff16565b61402c90919063ffffffff16565b9150600d54600e548361376e9190614eed565b6137789190614f76565b6012600082825461378991906151c9565b9250508190555043601860008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561383f57600080fd5b505afa158015613853573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061387791906157bd565b506dffffffffffffffffffffffffffff1691506dffffffffffffffffffffffffffff169150600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385f8c2598983856040518463ffffffff1660e01b81526004016138fb93929190615810565b60206040518083038186803b15801561391357600080fd5b505afa158015613927573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061394b919061585c565b601360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461399991906151c9565b92505081905550601960009054906101000a900460ff1680156139bd5750601a5443145b156139ce576139cd8960016119d2565b5b50505b5b60008211156139e7576139e6883084613b11565b5b81866139f39190615889565b95505b613a01888888613b11565b50505050505b505050565b6000838311158290613a54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a4b919061453b565b60405180910390fd5b5060008385613a639190615889565b9050809150509392505050565b80601d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613b81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613b7890615421565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613be8906154b3565b60405180910390fd5b613bfc838383614076565b613c6781604051806060016040528060268152602001615bd6602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613a0c9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613cfa816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461299c90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051613d999190614487565b60405180910390a3505050565b6000613db1306113a1565b90506000601254601154613dc591906151c9565b9050600080831480613dd75750600082145b15613de457505050613faf565b6014600a54613df39190614eed565b831115613e0c576014600a54613e099190614eed565b92505b600060028360115486613e1f9190614eed565b613e299190614f76565b613e339190614f76565b90506000613e4a828661407b90919063ffffffff16565b90506000479050613e5a826140c5565b6000613e6f824761407b90919063ffffffff16565b90506000613e9a87613e8c60125485613fb190919063ffffffff16565b61402c90919063ffffffff16565b905060008183613eaa9190615889565b905060006011819055506000601281905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613f02906158ee565b60006040518083038185875af1925050503d8060008114613f3f576040519150601f19603f3d011682016040523d82523d6000602084013e613f44565b606091505b505080975050600086118015613f5a5750600081115b15613fa557613f698682614317565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561858288604051613f9c93929190615810565b60405180910390a15b5050505050505050505b565b600080831415613fc45760009050614026565b60008284613fd29190614eed565b9050828482613fe19190614f76565b14614021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161401890615975565b60405180910390fd5b809150505b92915050565b600061406e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061440b565b905092915050565b505050565b60006140bd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613a0c565b905092915050565b6000600267ffffffffffffffff8111156140e2576140e1615995565b5b6040519080825280602002602001820160405280156141105781602001602082028036833780820191505090505b509050308160008151811061412857614127614ae7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156141ca57600080fd5b505afa1580156141de573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061420291906159d9565b8160018151811061421657614215614ae7565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061427d30600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a02565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016142e1959493929190615ac7565b600060405180830381600087803b1580156142fb57600080fd5b505af115801561430f573d6000803e3d6000fd5b505050505050565b61434430600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612a02565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080614390611afd565b426040518863ffffffff1660e01b81526004016143b296959493929190615b21565b6060604051808303818588803b1580156143cb57600080fd5b505af11580156143df573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906144049190615b82565b5050505050565b60008083118290614452576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401614449919061453b565b60405180910390fd5b50600083856144619190614f76565b9050809150509392505050565b6000819050919050565b6144818161446e565b82525050565b600060208201905061449c6000830184614478565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156144dc5780820151818401526020810190506144c1565b838111156144eb576000848401525b50505050565b6000601f19601f8301169050919050565b600061450d826144a2565b61451781856144ad565b93506145278185602086016144be565b614530816144f1565b840191505092915050565b600060208201905081810360008301526145558184614502565b905092915050565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061459282614567565b9050919050565b6145a281614587565b81146145ad57600080fd5b50565b6000813590506145bf81614599565b92915050565b6145ce8161446e565b81146145d957600080fd5b50565b6000813590506145eb816145c5565b92915050565b600080604083850312156146085761460761455d565b5b6000614616858286016145b0565b9250506020614627858286016145dc565b9150509250929050565b60008115159050919050565b61464681614631565b82525050565b6000602082019050614661600083018461463d565b92915050565b60006020828403121561467d5761467c61455d565b5b600061468b848285016145b0565b91505092915050565b6000819050919050565b60006146b96146b46146af84614567565b614694565b614567565b9050919050565b60006146cb8261469e565b9050919050565b60006146dd826146c0565b9050919050565b6146ed816146d2565b82525050565b600060208201905061470860008301846146e4565b92915050565b6000806000606084860312156147275761472661455d565b5b6000614735868287016145b0565b9350506020614746868287016145b0565b9250506040614757868287016145dc565b9150509250925092565b61476a81614587565b82525050565b60006020820190506147856000830184614761565b92915050565b600060ff82169050919050565b6147a18161478b565b82525050565b60006020820190506147bc6000830184614798565b92915050565b6000602082840312156147d8576147d761455d565b5b60006147e6848285016145dc565b91505092915050565b600080fd5b600080fd5b600080fd5b60008083601f840112614814576148136147ef565b5b8235905067ffffffffffffffff811115614831576148306147f4565b5b60208301915083602082028301111561484d5761484c6147f9565b5b9250929050565b61485d81614631565b811461486857600080fd5b50565b60008135905061487a81614854565b92915050565b6000806000604084860312156148995761489861455d565b5b600084013567ffffffffffffffff8111156148b7576148b6614562565b5b6148c3868287016147fe565b935093505060206148d68682870161486b565b9150509250925092565b600080604083850312156148f7576148f661455d565b5b6000614905858286016145b0565b92505060206149168582860161486b565b9150509250929050565b6000602082840312156149365761493561455d565b5b60006149448482850161486b565b91505092915050565b600080604083850312156149645761496361455d565b5b6000614972858286016145dc565b9250506020614983858286016145dc565b9150509250929050565b600080602083850312156149a4576149a361455d565b5b600083013567ffffffffffffffff8111156149c2576149c1614562565b5b6149ce858286016147fe565b92509250509250929050565b600080604083850312156149f1576149f061455d565b5b60006149ff858286016145b0565b9250506020614a10858286016145b0565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a6157607f821691505b60208210811415614a7557614a74614a1a565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614ab16020836144ad565b9150614abc82614a7b565b602082019050919050565b60006020820190508181036000830152614ae081614aa4565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614b508261446e565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614b8357614b82614b16565b5b600182019050919050565b600082825260208201905092915050565b6000819050919050565b614bb281614587565b82525050565b6000614bc48383614ba9565b60208301905092915050565b6000614bdf60208401846145b0565b905092915050565b6000602082019050919050565b6000614c008385614b8e565b9350614c0b82614b9f565b8060005b85811015614c4457614c218284614bd0565b614c2b8882614bb8565b9750614c3683614be7565b925050600181019050614c0f565b5085925050509392505050565b60006040820190508181036000830152614c6c818587614bf4565b9050614c7b602083018461463d565b949350505050565b7f4d757374206b656570206665657320617420323025206f72206c657373000000600082015250565b6000614cb9601d836144ad565b9150614cc482614c83565b602082019050919050565b60006020820190508181036000830152614ce881614cac565b9050919050565b6000604082019050614d046000830185614761565b614d116020830184614478565b9392505050565b600081519050614d2781614854565b92915050565b600060208284031215614d4357614d4261455d565b5b6000614d5184828501614d18565b91505092915050565b6000604082019050614d6f6000830185614761565b614d7c602083018461463d565b9392505050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000614ddf6039836144ad565b9150614dea82614d83565b604082019050919050565b60006020820190508181036000830152614e0e81614dd2565b9050919050565b7f496e76616c6964206665652e0000000000000000000000000000000000000000600082015250565b6000614e4b600c836144ad565b9150614e5682614e15565b602082019050919050565b60006020820190508181036000830152614e7a81614e3e565b9050919050565b7f496e76616c69642070656e616c74792e00000000000000000000000000000000600082015250565b6000614eb76010836144ad565b9150614ec282614e81565b602082019050919050565b60006020820190508181036000830152614ee681614eaa565b9050919050565b6000614ef88261446e565b9150614f038361446e565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614f3c57614f3b614b16565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614f818261446e565b9150614f8c8361446e565b925082614f9c57614f9b614f47565b5b828204905092915050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006150036035836144ad565b915061500e82614fa7565b604082019050919050565b6000602082019050818103600083015261503281614ff6565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20312520746f74616c20737570706c792e0000000000000000000000000000602082015250565b60006150956032836144ad565b91506150a082615039565b604082019050919050565b600060208201905081810360008301526150c481615088565b9050919050565b7f4d757374206b656570206665657320617420323525206f72206c657373000000600082015250565b6000615101601d836144ad565b915061510c826150cb565b602082019050919050565b60006020820190508181036000830152615130816150f4565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006151936026836144ad565b915061519e82615137565b604082019050919050565b600060208201905081810360008301526151c281615186565b9050919050565b60006151d48261446e565b91506151df8361446e565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561521457615213614b16565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615255601b836144ad565b91506152608261521f565b602082019050919050565b6000602082019050818103600083015261528481615248565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006152e76024836144ad565b91506152f28261528b565b604082019050919050565b60006020820190508181036000830152615316816152da565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006153796022836144ad565b91506153848261531d565b604082019050919050565b600060208201905081810360008301526153a88161536c565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061540b6025836144ad565b9150615416826153af565b604082019050919050565b6000602082019050818103600083015261543a816153fe565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061549d6023836144ad565b91506154a882615441565b604082019050919050565b600060208201905081810360008301526154cc81615490565b9050919050565b7f426c61636b6c69737465642e0000000000000000000000000000000000000000600082015250565b6000615509600c836144ad565b9150615514826154d3565b602082019050919050565b60006020820190508181036000830152615538816154fc565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006155756016836144ad565b91506155808261553f565b602082019050919050565b600060208201905081810360008301526155a481615568565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b60006156076035836144ad565b9150615612826155ab565b604082019050919050565b60006020820190508181036000830152615636816155fa565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006156736013836144ad565b915061567e8261563d565b602082019050919050565b600060208201905081810360008301526156a281615666565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006157056036836144ad565b9150615710826156a9565b604082019050919050565b60006020820190508181036000830152615734816156f8565b9050919050565b60006dffffffffffffffffffffffffffff82169050919050565b61575e8161573b565b811461576957600080fd5b50565b60008151905061577b81615755565b92915050565b600063ffffffff82169050919050565b61579a81615781565b81146157a557600080fd5b50565b6000815190506157b781615791565b92915050565b6000806000606084860312156157d6576157d561455d565b5b60006157e48682870161576c565b93505060206157f58682870161576c565b9250506040615806868287016157a8565b9150509250925092565b60006060820190506158256000830186614478565b6158326020830185614478565b61583f6040830184614478565b949350505050565b600081519050615856816145c5565b92915050565b6000602082840312156158725761587161455d565b5b600061588084828501615847565b91505092915050565b60006158948261446e565b915061589f8361446e565b9250828210156158b2576158b1614b16565b5b828203905092915050565b600081905092915050565b50565b60006158d86000836158bd565b91506158e3826158c8565b600082019050919050565b60006158f9826158cb565b9150819050919050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061595f6021836144ad565b915061596a82615903565b604082019050919050565b6000602082019050818103600083015261598e81615952565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000815190506159d381614599565b92915050565b6000602082840312156159ef576159ee61455d565b5b60006159fd848285016159c4565b91505092915050565b6000819050919050565b6000615a2b615a26615a2184615a06565b614694565b61446e565b9050919050565b615a3b81615a10565b82525050565b600081519050919050565b6000819050602082019050919050565b6000602082019050919050565b6000615a7482615a41565b615a7e8185614b8e565b9350615a8983615a4c565b8060005b83811015615aba578151615aa18882614bb8565b9750615aac83615a5c565b925050600181019050615a8d565b5085935050505092915050565b600060a082019050615adc6000830188614478565b615ae96020830187615a32565b8181036040830152615afb8186615a69565b9050615b0a6060830185614761565b615b176080830184614478565b9695505050505050565b600060c082019050615b366000830189614761565b615b436020830188614478565b615b506040830187615a32565b615b5d6060830186615a32565b615b6a6080830185614761565b615b7760a0830184614478565b979650505050505050565b600080600060608486031215615b9b57615b9a61455d565b5b6000615ba986828701615847565b9350506020615bba86828701615847565b9250506040615bcb86828701615847565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122084bd300a8b08bd6a2fe2bf141fd9263a7dab23977818b74a7d6806f0523f186164736f6c63430008090033
Deployed Bytecode Sourcemap
27873:14875:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28691:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7993:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10160:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28733:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29120:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27950:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9113:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28559:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28599;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10811:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28033:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8955:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42641:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41580:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11575:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28772:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27998:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28283:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34774:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42229:145;;;;;;;;;;;;;:::i;:::-;;28480:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28363:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9284:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22458:148;;;;;;;;;;;;;:::i;:::-;;33146:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32203:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32789:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28125:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28437;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42382:167;;;;;;;;;;;;;:::i;:::-;;31997:150;;;;;;;;;;;;;:::i;:::-;;41808:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21816:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28515:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33033:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8212:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33815:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12296:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9624:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34267:181;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29342:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34456:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28323:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33625:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28906:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28168:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28641:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32397:380;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41958:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28403:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9862:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42557:76;;;;;;;;;;;;;:::i;:::-;;28210:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33385:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22761:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28250:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28806:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28691:35;;;;:::o;7993:100::-;8047:13;8080:5;8073:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7993:100;:::o;10160:169::-;10243:4;10260:39;10269:12;:10;:12::i;:::-;10283:7;10292:6;10260:8;:39::i;:::-;10317:4;10310:11;;10160:169;;;;:::o;28733:32::-;;;;:::o;29120:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;27950:41::-;;;;;;;;;;;;;:::o;9113:108::-;9174:7;9201:12;;9194:19;;9113:108;:::o;28559:33::-;;;;:::o;28599:::-;;;;:::o;10811:355::-;10951:4;10968:36;10978:6;10986:9;10997:6;10968:9;:36::i;:::-;11015:121;11024:6;11032:12;:10;:12::i;:::-;11046:89;11084:6;11046:89;;;;;;;;;;;;;;;;;:11;:19;11058:6;11046:19;;;;;;;;;;;;;;;:33;11066:12;:10;:12::i;:::-;11046:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;11015:8;:121::i;:::-;11154:4;11147:11;;10811:355;;;;;:::o;28033:53::-;28079:6;28033:53;:::o;8955:93::-;9013:5;9038:2;9031:9;;8955:93;:::o;42641:104::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42726:11:::1;42713:10;:24;;;;42641:104:::0;:::o;41580:220::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41671:9:::1;41667:87;41686:4;;:11;;41682:1;:15;41667:87;;;41740:2;41719:9;:18;41729:4;;41734:1;41729:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;41719:18;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;41699:3;;;;;:::i;:::-;;;;41667:87;;;;41769:23;41783:4;;41789:2;41769:23;;;;;;;;:::i;:::-;;;;;;;;41580:220:::0;;;:::o;11575:218::-;11663:4;11680:83;11689:12;:10;:12::i;:::-;11703:7;11712:50;11751:10;11712:11;:25;11724:12;:10;:12::i;:::-;11712:25;;;;;;;;;;;;;;;:34;11738:7;11712:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11680:8;:83::i;:::-;11781:4;11774:11;;11575:218;;;;:::o;28772:25::-;;;;:::o;27998:28::-;;;;;;;;;;;;;:::o;28283:33::-;;;;;;;;;;;;;:::o;34774:125::-;34839:4;34863:19;:28;34883:7;34863:28;;;;;;;;;;;;;;;;;;;;;;;;;34856:35;;34774:125;;;:::o;42229:145::-;42288:15;;;;;;;;;;;42274:29;;:10;:29;;;42265:39;;;;;;42323:10;42315:28;;:51;42344:21;42315:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42229:145::o;28480:28::-;;;;:::o;28363:31::-;;;;;;;;;;;;;:::o;9284:127::-;9358:7;9385:9;:18;9395:7;9385:18;;;;;;;;;;;;;;;;9378:25;;9284:127;;;:::o;22458:148::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22565:1:::1;22528:40;;22549:6;;;;;;;;;;;22528:40;;;;;;;;;;;;22596:1;22579:6;;:19;;;;;;;;;;;;;;;;;;22458:148::o:0;33146:227::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33240:13:::1;33222:15;:31;;;;33279:15;;33264:12;:30;;;;33329:2;33313:12;;:18;;33305:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33146:227:::0;:::o;32203:120::-;32255:4;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32288:5:::1;32271:14;;:22;;;;;;;;;;;;;;;;;;32311:4;32304:11;;32203:120:::0;:::o;32789:144::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32921:4:::1;32879:31;:39;32911:6;32879:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32789:144:::0;;:::o;28125:30::-;;;;;;;;;;;;;:::o;28437:::-;;;;:::o;42382:167::-;42446:15;;;;;;;;;;;42432:29;;:10;:29;;;42423:39;;;;;;42488:4;42473:30;;;42504:10;42516:24;42534:4;42516:9;:24::i;:::-;42473:68;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;42382:167::o;31997:150::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32068:4:::1;32052:13;;:20;;;;;;;;;;;;;;;;;;32099:4;32085:11;;:18;;;;;;;;;;;;;;;;;;32127:12;32114:10;:25;;;;31997:150::o:0;41808:142::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41900:2:::1;41883:9;:14;41893:3;41883:14;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;41918:24;41934:3;41939:2;41918:24;;;;;;;:::i;:::-;;;;;;;;41808:142:::0;;:::o;21816:79::-;21854:7;21881:6;;;;;;;;;;;21874:13;;21816:79;:::o;28515:31::-;;;;:::o;33033:101::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33119:7:::1;33105:11;;:21;;;;;;;;;;;;;;;;;;33033:101:::0;:::o;8212:104::-;8268:13;8301:7;8294:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8212:104;:::o;33815:244::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33922:13:::1;;;;;;;;;;;33914:21;;:4;:21;;;;33906:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;34010:41;34039:4;34045:5;34010:28;:41::i;:::-;33815:244:::0;;:::o;12296:269::-;12389:4;12406:129;12415:12;:10;:12::i;:::-;12429:7;12438:96;12477:15;12438:96;;;;;;;;;;;;;;;;;:11;:25;12450:12;:10;:12::i;:::-;12438:25;;;;;;;;;;;;;;;:34;12464:7;12438:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;12406:8;:129::i;:::-;12553:4;12546:11;;12296:269;;;;:::o;9624:175::-;9710:4;9727:42;9737:12;:10;:12::i;:::-;9751:9;9762:6;9727:9;:42::i;:::-;9787:4;9780:11;;9624:175;;;;:::o;34267:181::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34386:15:::1;;;;;;;;;;;34352:50;;34375:9;34352:50;;;;;;;;;;;;34431:9;34413:15;;:27;;;;;;;;;;;;;;;;;;34267:181:::0;:::o;29342:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;34456:304::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34586:2:::1;34572:11;:16;34564:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;34645:2;34624:18;:23;34616:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;34699:18;34679:17;:38;;;;34741:11;34728:10;:24;;;;34456:304:::0;;:::o;28323:33::-;;;;;;;;;;;;;:::o;33625:182::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33741:8:::1;33710:19;:28;33730:7;33710:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;33781:7;33765:34;;;33790:8;33765:34;;;;;;:::i;:::-;;;;;;;;33625:182:::0;;:::o;28906:25::-;;;;;;;;;;;;;:::o;28168:35::-;;;;:::o;28641:43::-;;;;;;;;;;;;;;;;;:::o;32397:380::-;32478:4;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32534:6:::1;32530:1;32514:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;32501:9;:39;;32493:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;32650:4;32645:2;32629:13;:11;:13::i;:::-;:18;;;;:::i;:::-;:25;;;;:::i;:::-;32616:9;:38;;32608:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;32740:9;32719:18;:30;;;;32766:4;32759:11;;32397:380:::0;;;:::o;41958:259::-;42051:15;;;;;;;;;;;42037:29;;:10;:29;;;42028:39;;;;;;42082:9;42078:90;42097:4;;:11;;42093:1;:15;42078:90;;;42151:5;42130:9;:18;42140:4;;42145:1;42140:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;42130:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;42110:3;;;;;:::i;:::-;;;;42078:90;;;;42183:26;42197:4;;42203:5;42183:26;;;;;;;;:::i;:::-;;;;;;;;41958:259;;:::o;28403:27::-;;;;:::o;9862:151::-;9951:7;9978:11;:18;9990:5;9978:18;;;;;;;;;;;;;;;:27;9997:7;9978:27;;;;;;;;;;;;;;;;9971:34;;9862:151;;;;:::o;42557:76::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42619:6:::1;;;;;;;;;;;42618:7;42609:6;;:16;;;;;;;;;;;;;;;;;;42557:76::o:0;28210:33::-;;;;:::o;33385:232::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33481:13:::1;33462:16;:32;;;;33521:16;;33505:13;:32;;;;33573:2;33556:13;;:19;;33548:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33385:232:::0;:::o;22761:244::-;22038:12;:10;:12::i;:::-;22028:22;;:6;;;;;;;;;;;:22;;;22020:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22870:1:::1;22850:22;;:8;:22;;;;22842:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22960:8;22931:38;;22952:6;;;;;;;;;;;22931:38;;;;;;;;;;;;22989:8;22980:6;;:17;;;;;;;;;;;;;;;;;;22761:244:::0;:::o;28250:24::-;;;;:::o;28806:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;16860:181::-;16918:7;16938:9;16954:1;16950;:5;;;;:::i;:::-;16938:17;;16979:1;16974;:6;;16966:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17032:1;17025:8;;;16860:181;;;;:::o;631:98::-;684:7;711:10;704:17;;631:98;:::o;15482:380::-;15635:1;15618:19;;:5;:19;;;;15610:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15716:1;15697:21;;:7;:21;;;;15689:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15800:6;15770:11;:18;15782:5;15770:18;;;;;;;;;;;;;;;:27;15789:7;15770:27;;;;;;;;;;;;;;;:36;;;;15838:7;15822:32;;15831:5;15822:32;;;15847:6;15822:32;;;;;;:::i;:::-;;;;;;;;15482:380;;;:::o;34911:4024::-;35059:1;35043:18;;:4;:18;;;;35035:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35136:1;35122:16;;:2;:16;;;;35114:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;35199:9;:13;35209:2;35199:13;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;;35216:9;:15;35226:4;35216:15;;;;;;;;;;;;;;;;;;;;;;;;;35199:32;35197:35;35189:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35274:1;35264:6;:11;35261:92;;;35292:28;35308:4;35314:2;35318:1;35292:15;:28::i;:::-;35335:7;;35261:92;35376:14;;;;;;;;;;;35373:1264;;;35436:7;:5;:7::i;:::-;35428:15;;:4;:15;;;;:49;;;;;35470:7;:5;:7::i;:::-;35464:13;;:2;:13;;;;35428:49;:86;;;;;35512:1;35498:16;;:2;:16;;;;35428:86;:128;;;;;35549:6;35535:21;;:2;:21;;;;35428:128;:158;;;;;35578:8;;;;;;;;;;;35577:9;35428:158;35406:1220;;;35624:13;;;;;;;;;;;35620:148;;35669:19;:25;35689:4;35669:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;35698:19;:23;35718:2;35698:23;;;;;;;;;;;;;;;;;;;;;;;;;35669:52;35661:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;35620:148;35837:25;:31;35863:4;35837:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;35873:31;:35;35905:2;35873:35;;;;;;;;;;;;;;;;;;;;;;;;;35872:36;35837:71;35833:778;;;35955:20;;35945:6;:30;;35937:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;36094:9;;36077:13;36087:2;36077:9;:13::i;:::-;36068:6;:22;;;;:::i;:::-;:35;;36060:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35833:778;;;36221:25;:29;36247:2;36221:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;36255:31;:37;36287:4;36255:37;;;;;;;;;;;;;;;;;;;;;;;;;36254:38;36221:71;36217:394;;;36339:20;;36329:6;:30;;36321:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;36217:394;;;36465:31;:35;36497:2;36465:35;;;;;;;;;;;;;;;;;;;;;;;;;36461:150;;36558:9;;36541:13;36551:2;36541:9;:13::i;:::-;36532:6;:22;;;;:::i;:::-;:35;;36524:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36461:150;36217:394;35833:778;35406:1220;35373:1264;36651:28;36682:24;36700:4;36682:9;:24::i;:::-;36651:55;;36727:12;36766:18;;36742:20;:42;;36727:57;;36815:7;:35;;;;;36839:11;;;;;;;;;;;36815:35;:61;;;;;36868:8;;;;;;;;;;;36867:9;36815:61;:110;;;;;36894:25;:31;36920:4;36894:31;;;;;;;;;;;;;;;;;;;;;;;;;36893:32;36815:110;:153;;;;;36943:19;:25;36963:4;36943:25;;;;;;;;;;;;;;;;;;;;;;;;;36942:26;36815:153;:194;;;;;36986:19;:23;37006:2;36986:23;;;;;;;;;;;;;;;;;;;;;;;;;36985:24;36815:194;36797:338;;;37047:4;37036:8;;:15;;;;;;;;;;;;;;;;;;37080:10;:8;:10::i;:::-;37118:5;37107:8;;:16;;;;;;;;;;;;;;;;;;36797:338;37147:12;37163:8;;;;;;;;;;;37162:9;37147:24;;37272:19;:25;37292:4;37272:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37301:19;:23;37321:2;37301:23;;;;;;;;;;;;;;;;;;;;;;;;;37272:52;37269:99;;;37351:5;37341:15;;37269:99;37388:12;37417:16;37527:7;37524:1358;;;37578:25;:29;37604:2;37578:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;37627:1;37611:13;;:17;37578:50;37574:1139;;;37715:6;37709:3;37689:17;;37671:15;37681:4;37671:9;:15::i;:::-;:35;;;;:::i;:::-;:41;;;;:::i;:::-;:50;:81;;;;;37742:10;;37725:8;:14;37734:4;37725:14;;;;;;;;;;;;;;;;:27;37671:81;37670:118;;;;37776:12;37757:9;:15;37767:4;37757:15;;;;;;;;;;;;;;;;:31;37670:118;37666:188;;;37824:10;;37813:21;;37666:188;37881:45;37922:3;37881:36;37908:8;37892:13;;:24;;;;:::i;:::-;37881:6;:10;;:36;;;;:::i;:::-;:40;;:45;;;;:::i;:::-;37874:52;;38002:8;37986:13;;:24;;;;:::i;:::-;37974:8;37967:4;:15;;;;:::i;:::-;:44;;;;:::i;:::-;37945:18;;:66;;;;;;;:::i;:::-;;;;;;;;38095:8;38079:13;;:24;;;;:::i;:::-;38059:16;;38052:4;:23;;;;:::i;:::-;:52;;;;:::i;:::-;38030:18;;:74;;;;;;;:::i;:::-;;;;;;;;37574:1139;;;38165:25;:31;38191:4;38165:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;38215:1;38200:12;;:16;38165:51;38162:551;;;38241:33;38270:3;38241:24;38252:12;;38241:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;38234:40;;38340:12;;38322:15;;38315:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;38293:18;;:59;;;;;;;:::i;:::-;;;;;;;;38387:12;38371:9;:13;38381:2;38371:13;;;;;;;;;;;;;;;:28;;;;38419:10;38431;38461:13;;;;;;;;;;;38446:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38418:71;;;;;;;;;38524:15;;;;;;;;;;;:27;;;38552:6;38560:2;38564;38524:43;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38508:8;:12;38517:2;38508:12;;;;;;;;;;;;;;;;:59;;;;;;;:::i;:::-;;;;;;;;38592:6;;;;;;;;;;;:36;;;;;38618:10;;38602:12;:26;38592:36;38588:110;;;38653:25;38669:2;38673:4;38653:15;:25::i;:::-;38588:110;38218:495;;38162:551;37574:1139;38751:1;38744:4;:8;38741:93;;;38776:42;38792:4;38806;38813;38776:15;:42::i;:::-;38741:93;38866:4;38856:14;;;;;:::i;:::-;;;37524:1358;38894:33;38910:4;38916:2;38920:6;38894:15;:33::i;:::-;35024:3911;;;;;34911:4024;;;;:::o;17763:192::-;17849:7;17882:1;17877;:6;;17885:12;17869:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17909:9;17925:1;17921;:5;;;;:::i;:::-;17909:17;;17946:1;17939:8;;;17763:192;;;;;:::o;34067:188::-;34184:5;34150:25;:31;34176:4;34150:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34241:5;34207:40;;34235:4;34207:40;;;;;;;;;;;;34067:188;;:::o;13055:573::-;13213:1;13195:20;;:6;:20;;;;13187:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13297:1;13276:23;;:9;:23;;;;13268:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13352:47;13373:6;13381:9;13392:6;13352:20;:47::i;:::-;13432:71;13454:6;13432:71;;;;;;;;;;;;;;;;;:9;:17;13442:6;13432:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;13412:9;:17;13422:6;13412:17;;;;;;;;;;;;;;;:91;;;;13537:32;13562:6;13537:9;:20;13547:9;13537:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13514:9;:20;13524:9;13514:20;;;;;;;;;;;;;;;:55;;;;13602:9;13585:35;;13594:6;13585:35;;;13613:6;13585:35;;;;;;:::i;:::-;;;;;;;;13055:573;;;:::o;40077:1495::-;40116:23;40142:24;40160:4;40142:9;:24::i;:::-;40116:50;;40177:25;40226:18;;40205;;:39;;;;:::i;:::-;40177:67;;40255:12;40310:1;40291:15;:20;:46;;;;40336:1;40315:17;:22;40291:46;40288:60;;;40340:7;;;;;40288:60;40402:2;40381:18;;:23;;;;:::i;:::-;40363:15;:41;40360:164;;;40510:2;40489:18;;:23;;;;:::i;:::-;40471:41;;40360:164;40593:23;40678:1;40658:17;40637:18;;40619:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;40593:86;;40690:26;40719:36;40739:15;40719;:19;;:36;;;;:::i;:::-;40690:65;;40776:25;40804:21;40776:49;;40838:36;40855:18;40838:16;:36::i;:::-;40896:18;40917:44;40943:17;40917:21;:25;;:44;;;;:::i;:::-;40896:65;;40982:23;41008:57;41047:17;41008:34;41023:18;;41008:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;40982:83;;41096:23;41135:15;41122:10;:28;;;;:::i;:::-;41096:54;;41202:1;41181:18;:22;;;;41235:1;41214:18;:22;;;;41278:15;;;;;;;;;;;41270:29;;41307:15;41270:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41257:70;;;;;41369:1;41351:15;:19;:42;;;;;41392:1;41374:15;:19;41351:42;41348:207;;;41409:46;41422:15;41439;41409:12;:46::i;:::-;41475:68;41490:18;41510:15;41527;41475:68;;;;;;;;:::i;:::-;;;;;;;;41348:207;40105:1467;;;;;;;;;40077:1495;:::o;18214:471::-;18272:7;18522:1;18517;:6;18513:47;;;18547:1;18540:8;;;;18513:47;18572:9;18588:1;18584;:5;;;;:::i;:::-;18572:17;;18617:1;18612;18608;:5;;;;:::i;:::-;:10;18600:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18676:1;18669:8;;;18214:471;;;;;:::o;19161:132::-;19219:7;19246:39;19250:1;19253;19246:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19239:46;;19161:132;;;;:::o;16465:125::-;;;;:::o;17324:136::-;17382:7;17409:43;17413:1;17416;17409:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;17402:50;;17324:136;;;;:::o;38943:601::-;39071:21;39109:1;39095:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39071:40;;39140:4;39122;39127:1;39122:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;39166:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39156:4;39161:1;39156:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;39201:62;39218:4;39233:15;;;;;;;;;;;39251:11;39201:8;:62::i;:::-;39302:15;;;;;;;;;;;:66;;;39383:11;39409:1;39453:4;39480;39500:15;39302:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38998:546;38943:601;:::o;39556:513::-;39704:62;39721:4;39736:15;;;;;;;;;;;39754:11;39704:8;:62::i;:::-;39809:15;;;;;;;;;;;:31;;;39848:9;39881:4;39901:11;39927:1;39970;40013:7;:5;:7::i;:::-;40035:15;39809:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;39556:513;;:::o;19789:278::-;19875:7;19907:1;19903;:5;19910:12;19895:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;19934:9;19950:1;19946;:5;;;;:::i;:::-;19934:17;;20058:1;20051:8;;;19789:278;;;;;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:153::-;4604:9;4637:37;4668:5;4637:37;:::i;:::-;4624:50;;4527:153;;;:::o;4686:185::-;4800:64;4858:5;4800:64;:::i;:::-;4795:3;4788:77;4686:185;;:::o;4877:276::-;4997:4;5035:2;5024:9;5020:18;5012:26;;5048:98;5143:1;5132:9;5128:17;5119:6;5048:98;:::i;:::-;4877:276;;;;:::o;5159:619::-;5236:6;5244;5252;5301:2;5289:9;5280:7;5276:23;5272:32;5269:119;;;5307:79;;:::i;:::-;5269:119;5427:1;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5398:117;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5682:2;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5653:118;5159:619;;;;;:::o;5784:118::-;5871:24;5889:5;5871:24;:::i;:::-;5866:3;5859:37;5784:118;;:::o;5908:222::-;6001:4;6039:2;6028:9;6024:18;6016:26;;6052:71;6120:1;6109:9;6105:17;6096:6;6052:71;:::i;:::-;5908:222;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:329::-;6625:6;6674:2;6662:9;6653:7;6649:23;6645:32;6642:119;;;6680:79;;:::i;:::-;6642:119;6800:1;6825:53;6870:7;6861:6;6850:9;6846:22;6825:53;:::i;:::-;6815:63;;6771:117;6566:329;;;;:::o;6901:117::-;7010:1;7007;7000:12;7024:117;7133:1;7130;7123:12;7147:117;7256:1;7253;7246:12;7287:568;7360:8;7370:6;7420:3;7413:4;7405:6;7401:17;7397:27;7387:122;;7428:79;;:::i;:::-;7387:122;7541:6;7528:20;7518:30;;7571:18;7563:6;7560:30;7557:117;;;7593:79;;:::i;:::-;7557:117;7707:4;7699:6;7695:17;7683:29;;7761:3;7753:4;7745:6;7741:17;7731:8;7727:32;7724:41;7721:128;;;7768:79;;:::i;:::-;7721:128;7287:568;;;;;:::o;7861:116::-;7931:21;7946:5;7931:21;:::i;:::-;7924:5;7921:32;7911:60;;7967:1;7964;7957:12;7911:60;7861:116;:::o;7983:133::-;8026:5;8064:6;8051:20;8042:29;;8080:30;8104:5;8080:30;:::i;:::-;7983:133;;;;:::o;8122:698::-;8214:6;8222;8230;8279:2;8267:9;8258:7;8254:23;8250:32;8247:119;;;8285:79;;:::i;:::-;8247:119;8433:1;8422:9;8418:17;8405:31;8463:18;8455:6;8452:30;8449:117;;;8485:79;;:::i;:::-;8449:117;8598:80;8670:7;8661:6;8650:9;8646:22;8598:80;:::i;:::-;8580:98;;;;8376:312;8727:2;8753:50;8795:7;8786:6;8775:9;8771:22;8753:50;:::i;:::-;8743:60;;8698:115;8122:698;;;;;:::o;8826:468::-;8891:6;8899;8948:2;8936:9;8927:7;8923:23;8919:32;8916:119;;;8954:79;;:::i;:::-;8916:119;9074:1;9099:53;9144:7;9135:6;9124:9;9120:22;9099:53;:::i;:::-;9089:63;;9045:117;9201:2;9227:50;9269:7;9260:6;9249:9;9245:22;9227:50;:::i;:::-;9217:60;;9172:115;8826:468;;;;;:::o;9300:323::-;9356:6;9405:2;9393:9;9384:7;9380:23;9376:32;9373:119;;;9411:79;;:::i;:::-;9373:119;9531:1;9556:50;9598:7;9589:6;9578:9;9574:22;9556:50;:::i;:::-;9546:60;;9502:114;9300:323;;;;:::o;9629:474::-;9697:6;9705;9754:2;9742:9;9733:7;9729:23;9725:32;9722:119;;;9760:79;;:::i;:::-;9722:119;9880:1;9905:53;9950:7;9941:6;9930:9;9926:22;9905:53;:::i;:::-;9895:63;;9851:117;10007:2;10033:53;10078:7;10069:6;10058:9;10054:22;10033:53;:::i;:::-;10023:63;;9978:118;9629:474;;;;;:::o;10109:559::-;10195:6;10203;10252:2;10240:9;10231:7;10227:23;10223:32;10220:119;;;10258:79;;:::i;:::-;10220:119;10406:1;10395:9;10391:17;10378:31;10436:18;10428:6;10425:30;10422:117;;;10458:79;;:::i;:::-;10422:117;10571:80;10643:7;10634:6;10623:9;10619:22;10571:80;:::i;:::-;10553:98;;;;10349:312;10109:559;;;;;:::o;10674:474::-;10742:6;10750;10799:2;10787:9;10778:7;10774:23;10770:32;10767:119;;;10805:79;;:::i;:::-;10767:119;10925:1;10950:53;10995:7;10986:6;10975:9;10971:22;10950:53;:::i;:::-;10940:63;;10896:117;11052:2;11078:53;11123:7;11114:6;11103:9;11099:22;11078:53;:::i;:::-;11068:63;;11023:118;10674:474;;;;;:::o;11154:180::-;11202:77;11199:1;11192:88;11299:4;11296:1;11289:15;11323:4;11320:1;11313:15;11340:320;11384:6;11421:1;11415:4;11411:12;11401:22;;11468:1;11462:4;11458:12;11489:18;11479:81;;11545:4;11537:6;11533:17;11523:27;;11479:81;11607:2;11599:6;11596:14;11576:18;11573:38;11570:84;;;11626:18;;:::i;:::-;11570:84;11391:269;11340:320;;;:::o;11666:182::-;11806:34;11802:1;11794:6;11790:14;11783:58;11666:182;:::o;11854:366::-;11996:3;12017:67;12081:2;12076:3;12017:67;:::i;:::-;12010:74;;12093:93;12182:3;12093:93;:::i;:::-;12211:2;12206:3;12202:12;12195:19;;11854:366;;;:::o;12226:419::-;12392:4;12430:2;12419:9;12415:18;12407:26;;12479:9;12473:4;12469:20;12465:1;12454:9;12450:17;12443:47;12507:131;12633:4;12507:131;:::i;:::-;12499:139;;12226:419;;;:::o;12651:180::-;12699:77;12696:1;12689:88;12796:4;12793:1;12786:15;12820:4;12817:1;12810:15;12837:180;12885:77;12882:1;12875:88;12982:4;12979:1;12972:15;13006:4;13003:1;12996:15;13023:233;13062:3;13085:24;13103:5;13085:24;:::i;:::-;13076:33;;13131:66;13124:5;13121:77;13118:103;;;13201:18;;:::i;:::-;13118:103;13248:1;13241:5;13237:13;13230:20;;13023:233;;;:::o;13262:184::-;13361:11;13395:6;13390:3;13383:19;13435:4;13430:3;13426:14;13411:29;;13262:184;;;;:::o;13452:102::-;13521:4;13544:3;13536:11;;13452:102;;;:::o;13560:108::-;13637:24;13655:5;13637:24;:::i;:::-;13632:3;13625:37;13560:108;;:::o;13674:179::-;13743:10;13764:46;13806:3;13798:6;13764:46;:::i;:::-;13842:4;13837:3;13833:14;13819:28;;13674:179;;;;:::o;13859:122::-;13911:5;13936:39;13971:2;13966:3;13962:12;13957:3;13936:39;:::i;:::-;13927:48;;13859:122;;;;:::o;13987:115::-;14059:4;14091;14086:3;14082:14;14074:22;;13987:115;;;:::o;14138:699::-;14267:3;14290:86;14369:6;14364:3;14290:86;:::i;:::-;14283:93;;14400:58;14452:5;14400:58;:::i;:::-;14481:7;14512:1;14497:315;14522:6;14519:1;14516:13;14497:315;;;14592:42;14627:6;14618:7;14592:42;:::i;:::-;14654:63;14713:3;14698:13;14654:63;:::i;:::-;14647:70;;14740:62;14795:6;14740:62;:::i;:::-;14730:72;;14557:255;14544:1;14541;14537:9;14532:14;;14497:315;;;14501:14;14828:3;14821:10;;14272:565;;14138:699;;;;;:::o;14843:491::-;15018:4;15056:2;15045:9;15041:18;15033:26;;15105:9;15099:4;15095:20;15091:1;15080:9;15076:17;15069:47;15133:118;15246:4;15237:6;15229;15133:118;:::i;:::-;15125:126;;15261:66;15323:2;15312:9;15308:18;15299:6;15261:66;:::i;:::-;14843:491;;;;;;:::o;15340:179::-;15480:31;15476:1;15468:6;15464:14;15457:55;15340:179;:::o;15525:366::-;15667:3;15688:67;15752:2;15747:3;15688:67;:::i;:::-;15681:74;;15764:93;15853:3;15764:93;:::i;:::-;15882:2;15877:3;15873:12;15866:19;;15525:366;;;:::o;15897:419::-;16063:4;16101:2;16090:9;16086:18;16078:26;;16150:9;16144:4;16140:20;16136:1;16125:9;16121:17;16114:47;16178:131;16304:4;16178:131;:::i;:::-;16170:139;;15897:419;;;:::o;16322:332::-;16443:4;16481:2;16470:9;16466:18;16458:26;;16494:71;16562:1;16551:9;16547:17;16538:6;16494:71;:::i;:::-;16575:72;16643:2;16632:9;16628:18;16619:6;16575:72;:::i;:::-;16322:332;;;;;:::o;16660:137::-;16714:5;16745:6;16739:13;16730:22;;16761:30;16785:5;16761:30;:::i;:::-;16660:137;;;;:::o;16803:345::-;16870:6;16919:2;16907:9;16898:7;16894:23;16890:32;16887:119;;;16925:79;;:::i;:::-;16887:119;17045:1;17070:61;17123:7;17114:6;17103:9;17099:22;17070:61;:::i;:::-;17060:71;;17016:125;16803:345;;;;:::o;17154:320::-;17269:4;17307:2;17296:9;17292:18;17284:26;;17320:71;17388:1;17377:9;17373:17;17364:6;17320:71;:::i;:::-;17401:66;17463:2;17452:9;17448:18;17439:6;17401:66;:::i;:::-;17154:320;;;;;:::o;17480:244::-;17620:34;17616:1;17608:6;17604:14;17597:58;17689:27;17684:2;17676:6;17672:15;17665:52;17480:244;:::o;17730:366::-;17872:3;17893:67;17957:2;17952:3;17893:67;:::i;:::-;17886:74;;17969:93;18058:3;17969:93;:::i;:::-;18087:2;18082:3;18078:12;18071:19;;17730:366;;;:::o;18102:419::-;18268:4;18306:2;18295:9;18291:18;18283:26;;18355:9;18349:4;18345:20;18341:1;18330:9;18326:17;18319:47;18383:131;18509:4;18383:131;:::i;:::-;18375:139;;18102:419;;;:::o;18527:162::-;18667:14;18663:1;18655:6;18651:14;18644:38;18527:162;:::o;18695:366::-;18837:3;18858:67;18922:2;18917:3;18858:67;:::i;:::-;18851:74;;18934:93;19023:3;18934:93;:::i;:::-;19052:2;19047:3;19043:12;19036:19;;18695:366;;;:::o;19067:419::-;19233:4;19271:2;19260:9;19256:18;19248:26;;19320:9;19314:4;19310:20;19306:1;19295:9;19291:17;19284:47;19348:131;19474:4;19348:131;:::i;:::-;19340:139;;19067:419;;;:::o;19492:166::-;19632:18;19628:1;19620:6;19616:14;19609:42;19492:166;:::o;19664:366::-;19806:3;19827:67;19891:2;19886:3;19827:67;:::i;:::-;19820:74;;19903:93;19992:3;19903:93;:::i;:::-;20021:2;20016:3;20012:12;20005:19;;19664:366;;;:::o;20036:419::-;20202:4;20240:2;20229:9;20225:18;20217:26;;20289:9;20283:4;20279:20;20275:1;20264:9;20260:17;20253:47;20317:131;20443:4;20317:131;:::i;:::-;20309:139;;20036:419;;;:::o;20461:348::-;20501:7;20524:20;20542:1;20524:20;:::i;:::-;20519:25;;20558:20;20576:1;20558:20;:::i;:::-;20553:25;;20746:1;20678:66;20674:74;20671:1;20668:81;20663:1;20656:9;20649:17;20645:105;20642:131;;;20753:18;;:::i;:::-;20642:131;20801:1;20798;20794:9;20783:20;;20461:348;;;;:::o;20815:180::-;20863:77;20860:1;20853:88;20960:4;20957:1;20950:15;20984:4;20981:1;20974:15;21001:185;21041:1;21058:20;21076:1;21058:20;:::i;:::-;21053:25;;21092:20;21110:1;21092:20;:::i;:::-;21087:25;;21131:1;21121:35;;21136:18;;:::i;:::-;21121:35;21178:1;21175;21171:9;21166:14;;21001:185;;;;:::o;21192:240::-;21332:34;21328:1;21320:6;21316:14;21309:58;21401:23;21396:2;21388:6;21384:15;21377:48;21192:240;:::o;21438:366::-;21580:3;21601:67;21665:2;21660:3;21601:67;:::i;:::-;21594:74;;21677:93;21766:3;21677:93;:::i;:::-;21795:2;21790:3;21786:12;21779:19;;21438:366;;;:::o;21810:419::-;21976:4;22014:2;22003:9;21999:18;21991:26;;22063:9;22057:4;22053:20;22049:1;22038:9;22034:17;22027:47;22091:131;22217:4;22091:131;:::i;:::-;22083:139;;21810:419;;;:::o;22235:237::-;22375:34;22371:1;22363:6;22359:14;22352:58;22444:20;22439:2;22431:6;22427:15;22420:45;22235:237;:::o;22478:366::-;22620:3;22641:67;22705:2;22700:3;22641:67;:::i;:::-;22634:74;;22717:93;22806:3;22717:93;:::i;:::-;22835:2;22830:3;22826:12;22819:19;;22478:366;;;:::o;22850:419::-;23016:4;23054:2;23043:9;23039:18;23031:26;;23103:9;23097:4;23093:20;23089:1;23078:9;23074:17;23067:47;23131:131;23257:4;23131:131;:::i;:::-;23123:139;;22850:419;;;:::o;23275:179::-;23415:31;23411:1;23403:6;23399:14;23392:55;23275:179;:::o;23460:366::-;23602:3;23623:67;23687:2;23682:3;23623:67;:::i;:::-;23616:74;;23699:93;23788:3;23699:93;:::i;:::-;23817:2;23812:3;23808:12;23801:19;;23460:366;;;:::o;23832:419::-;23998:4;24036:2;24025:9;24021:18;24013:26;;24085:9;24079:4;24075:20;24071:1;24060:9;24056:17;24049:47;24113:131;24239:4;24113:131;:::i;:::-;24105:139;;23832:419;;;:::o;24257:225::-;24397:34;24393:1;24385:6;24381:14;24374:58;24466:8;24461:2;24453:6;24449:15;24442:33;24257:225;:::o;24488:366::-;24630:3;24651:67;24715:2;24710:3;24651:67;:::i;:::-;24644:74;;24727:93;24816:3;24727:93;:::i;:::-;24845:2;24840:3;24836:12;24829:19;;24488:366;;;:::o;24860:419::-;25026:4;25064:2;25053:9;25049:18;25041:26;;25113:9;25107:4;25103:20;25099:1;25088:9;25084:17;25077:47;25141:131;25267:4;25141:131;:::i;:::-;25133:139;;24860:419;;;:::o;25285:305::-;25325:3;25344:20;25362:1;25344:20;:::i;:::-;25339:25;;25378:20;25396:1;25378:20;:::i;:::-;25373:25;;25532:1;25464:66;25460:74;25457:1;25454:81;25451:107;;;25538:18;;:::i;:::-;25451:107;25582:1;25579;25575:9;25568:16;;25285:305;;;;:::o;25596:177::-;25736:29;25732:1;25724:6;25720:14;25713:53;25596:177;:::o;25779:366::-;25921:3;25942:67;26006:2;26001:3;25942:67;:::i;:::-;25935:74;;26018:93;26107:3;26018:93;:::i;:::-;26136:2;26131:3;26127:12;26120:19;;25779:366;;;:::o;26151:419::-;26317:4;26355:2;26344:9;26340:18;26332:26;;26404:9;26398:4;26394:20;26390:1;26379:9;26375:17;26368:47;26432:131;26558:4;26432:131;:::i;:::-;26424:139;;26151:419;;;:::o;26576:223::-;26716:34;26712:1;26704:6;26700:14;26693:58;26785:6;26780:2;26772:6;26768:15;26761:31;26576:223;:::o;26805:366::-;26947:3;26968:67;27032:2;27027:3;26968:67;:::i;:::-;26961:74;;27044:93;27133:3;27044:93;:::i;:::-;27162:2;27157:3;27153:12;27146:19;;26805:366;;;:::o;27177:419::-;27343:4;27381:2;27370:9;27366:18;27358:26;;27430:9;27424:4;27420:20;27416:1;27405:9;27401:17;27394:47;27458:131;27584:4;27458:131;:::i;:::-;27450:139;;27177:419;;;:::o;27602:221::-;27742:34;27738:1;27730:6;27726:14;27719:58;27811:4;27806:2;27798:6;27794:15;27787:29;27602:221;:::o;27829:366::-;27971:3;27992:67;28056:2;28051:3;27992:67;:::i;:::-;27985:74;;28068:93;28157:3;28068:93;:::i;:::-;28186:2;28181:3;28177:12;28170:19;;27829:366;;;:::o;28201:419::-;28367:4;28405:2;28394:9;28390:18;28382:26;;28454:9;28448:4;28444:20;28440:1;28429:9;28425:17;28418:47;28482:131;28608:4;28482:131;:::i;:::-;28474:139;;28201:419;;;:::o;28626:224::-;28766:34;28762:1;28754:6;28750:14;28743:58;28835:7;28830:2;28822:6;28818:15;28811:32;28626:224;:::o;28856:366::-;28998:3;29019:67;29083:2;29078:3;29019:67;:::i;:::-;29012:74;;29095:93;29184:3;29095:93;:::i;:::-;29213:2;29208:3;29204:12;29197:19;;28856:366;;;:::o;29228:419::-;29394:4;29432:2;29421:9;29417:18;29409:26;;29481:9;29475:4;29471:20;29467:1;29456:9;29452:17;29445:47;29509:131;29635:4;29509:131;:::i;:::-;29501:139;;29228:419;;;:::o;29653:222::-;29793:34;29789:1;29781:6;29777:14;29770:58;29862:5;29857:2;29849:6;29845:15;29838:30;29653:222;:::o;29881:366::-;30023:3;30044:67;30108:2;30103:3;30044:67;:::i;:::-;30037:74;;30120:93;30209:3;30120:93;:::i;:::-;30238:2;30233:3;30229:12;30222:19;;29881:366;;;:::o;30253:419::-;30419:4;30457:2;30446:9;30442:18;30434:26;;30506:9;30500:4;30496:20;30492:1;30481:9;30477:17;30470:47;30534:131;30660:4;30534:131;:::i;:::-;30526:139;;30253:419;;;:::o;30678:162::-;30818:14;30814:1;30806:6;30802:14;30795:38;30678:162;:::o;30846:366::-;30988:3;31009:67;31073:2;31068:3;31009:67;:::i;:::-;31002:74;;31085:93;31174:3;31085:93;:::i;:::-;31203:2;31198:3;31194:12;31187:19;;30846:366;;;:::o;31218:419::-;31384:4;31422:2;31411:9;31407:18;31399:26;;31471:9;31465:4;31461:20;31457:1;31446:9;31442:17;31435:47;31499:131;31625:4;31499:131;:::i;:::-;31491:139;;31218:419;;;:::o;31643:172::-;31783:24;31779:1;31771:6;31767:14;31760:48;31643:172;:::o;31821:366::-;31963:3;31984:67;32048:2;32043:3;31984:67;:::i;:::-;31977:74;;32060:93;32149:3;32060:93;:::i;:::-;32178:2;32173:3;32169:12;32162:19;;31821:366;;;:::o;32193:419::-;32359:4;32397:2;32386:9;32382:18;32374:26;;32446:9;32440:4;32436:20;32432:1;32421:9;32417:17;32410:47;32474:131;32600:4;32474:131;:::i;:::-;32466:139;;32193:419;;;:::o;32618:240::-;32758:34;32754:1;32746:6;32742:14;32735:58;32827:23;32822:2;32814:6;32810:15;32803:48;32618:240;:::o;32864:366::-;33006:3;33027:67;33091:2;33086:3;33027:67;:::i;:::-;33020:74;;33103:93;33192:3;33103:93;:::i;:::-;33221:2;33216:3;33212:12;33205:19;;32864:366;;;:::o;33236:419::-;33402:4;33440:2;33429:9;33425:18;33417:26;;33489:9;33483:4;33479:20;33475:1;33464:9;33460:17;33453:47;33517:131;33643:4;33517:131;:::i;:::-;33509:139;;33236:419;;;:::o;33661:169::-;33801:21;33797:1;33789:6;33785:14;33778:45;33661:169;:::o;33836:366::-;33978:3;33999:67;34063:2;34058:3;33999:67;:::i;:::-;33992:74;;34075:93;34164:3;34075:93;:::i;:::-;34193:2;34188:3;34184:12;34177:19;;33836:366;;;:::o;34208:419::-;34374:4;34412:2;34401:9;34397:18;34389:26;;34461:9;34455:4;34451:20;34447:1;34436:9;34432:17;34425:47;34489:131;34615:4;34489:131;:::i;:::-;34481:139;;34208:419;;;:::o;34633:241::-;34773:34;34769:1;34761:6;34757:14;34750:58;34842:24;34837:2;34829:6;34825:15;34818:49;34633:241;:::o;34880:366::-;35022:3;35043:67;35107:2;35102:3;35043:67;:::i;:::-;35036:74;;35119:93;35208:3;35119:93;:::i;:::-;35237:2;35232:3;35228:12;35221:19;;34880:366;;;:::o;35252:419::-;35418:4;35456:2;35445:9;35441:18;35433:26;;35505:9;35499:4;35495:20;35491:1;35480:9;35476:17;35469:47;35533:131;35659:4;35533:131;:::i;:::-;35525:139;;35252:419;;;:::o;35677:114::-;35714:7;35754:30;35747:5;35743:42;35732:53;;35677:114;;;:::o;35797:122::-;35870:24;35888:5;35870:24;:::i;:::-;35863:5;35860:35;35850:63;;35909:1;35906;35899:12;35850:63;35797:122;:::o;35925:143::-;35982:5;36013:6;36007:13;35998:22;;36029:33;36056:5;36029:33;:::i;:::-;35925:143;;;;:::o;36074:93::-;36110:7;36150:10;36143:5;36139:22;36128:33;;36074:93;;;:::o;36173:120::-;36245:23;36262:5;36245:23;:::i;:::-;36238:5;36235:34;36225:62;;36283:1;36280;36273:12;36225:62;36173:120;:::o;36299:141::-;36355:5;36386:6;36380:13;36371:22;;36402:32;36428:5;36402:32;:::i;:::-;36299:141;;;;:::o;36446:661::-;36533:6;36541;36549;36598:2;36586:9;36577:7;36573:23;36569:32;36566:119;;;36604:79;;:::i;:::-;36566:119;36724:1;36749:64;36805:7;36796:6;36785:9;36781:22;36749:64;:::i;:::-;36739:74;;36695:128;36862:2;36888:64;36944:7;36935:6;36924:9;36920:22;36888:64;:::i;:::-;36878:74;;36833:129;37001:2;37027:63;37082:7;37073:6;37062:9;37058:22;37027:63;:::i;:::-;37017:73;;36972:128;36446:661;;;;;:::o;37113:442::-;37262:4;37300:2;37289:9;37285:18;37277:26;;37313:71;37381:1;37370:9;37366:17;37357:6;37313:71;:::i;:::-;37394:72;37462:2;37451:9;37447:18;37438:6;37394:72;:::i;:::-;37476;37544:2;37533:9;37529:18;37520:6;37476:72;:::i;:::-;37113:442;;;;;;:::o;37561:143::-;37618:5;37649:6;37643:13;37634:22;;37665:33;37692:5;37665:33;:::i;:::-;37561:143;;;;:::o;37710:351::-;37780:6;37829:2;37817:9;37808:7;37804:23;37800:32;37797:119;;;37835:79;;:::i;:::-;37797:119;37955:1;37980:64;38036:7;38027:6;38016:9;38012:22;37980:64;:::i;:::-;37970:74;;37926:128;37710:351;;;;:::o;38067:191::-;38107:4;38127:20;38145:1;38127:20;:::i;:::-;38122:25;;38161:20;38179:1;38161:20;:::i;:::-;38156:25;;38200:1;38197;38194:8;38191:34;;;38205:18;;:::i;:::-;38191:34;38250:1;38247;38243:9;38235:17;;38067:191;;;;:::o;38264:147::-;38365:11;38402:3;38387:18;;38264:147;;;;:::o;38417:114::-;;:::o;38537:398::-;38696:3;38717:83;38798:1;38793:3;38717:83;:::i;:::-;38710:90;;38809:93;38898:3;38809:93;:::i;:::-;38927:1;38922:3;38918:11;38911:18;;38537:398;;;:::o;38941:379::-;39125:3;39147:147;39290:3;39147:147;:::i;:::-;39140:154;;39311:3;39304:10;;38941:379;;;:::o;39326:220::-;39466:34;39462:1;39454:6;39450:14;39443:58;39535:3;39530:2;39522:6;39518:15;39511:28;39326:220;:::o;39552:366::-;39694:3;39715:67;39779:2;39774:3;39715:67;:::i;:::-;39708:74;;39791:93;39880:3;39791:93;:::i;:::-;39909:2;39904:3;39900:12;39893:19;;39552:366;;;:::o;39924:419::-;40090:4;40128:2;40117:9;40113:18;40105:26;;40177:9;40171:4;40167:20;40163:1;40152:9;40148:17;40141:47;40205:131;40331:4;40205:131;:::i;:::-;40197:139;;39924:419;;;:::o;40349:180::-;40397:77;40394:1;40387:88;40494:4;40491:1;40484:15;40518:4;40515:1;40508:15;40535:143;40592:5;40623:6;40617:13;40608:22;;40639:33;40666:5;40639:33;:::i;:::-;40535:143;;;;:::o;40684:351::-;40754:6;40803:2;40791:9;40782:7;40778:23;40774:32;40771:119;;;40809:79;;:::i;:::-;40771:119;40929:1;40954:64;41010:7;41001:6;40990:9;40986:22;40954:64;:::i;:::-;40944:74;;40900:128;40684:351;;;;:::o;41041:85::-;41086:7;41115:5;41104:16;;41041:85;;;:::o;41132:158::-;41190:9;41223:61;41241:42;41250:32;41276:5;41250:32;:::i;:::-;41241:42;:::i;:::-;41223:61;:::i;:::-;41210:74;;41132:158;;;:::o;41296:147::-;41391:45;41430:5;41391:45;:::i;:::-;41386:3;41379:58;41296:147;;:::o;41449:114::-;41516:6;41550:5;41544:12;41534:22;;41449:114;;;:::o;41569:132::-;41636:4;41659:3;41651:11;;41689:4;41684:3;41680:14;41672:22;;41569:132;;;:::o;41707:113::-;41777:4;41809;41804:3;41800:14;41792:22;;41707:113;;;:::o;41856:732::-;41975:3;42004:54;42052:5;42004:54;:::i;:::-;42074:86;42153:6;42148:3;42074:86;:::i;:::-;42067:93;;42184:56;42234:5;42184:56;:::i;:::-;42263:7;42294:1;42279:284;42304:6;42301:1;42298:13;42279:284;;;42380:6;42374:13;42407:63;42466:3;42451:13;42407:63;:::i;:::-;42400:70;;42493:60;42546:6;42493:60;:::i;:::-;42483:70;;42339:224;42326:1;42323;42319:9;42314:14;;42279:284;;;42283:14;42579:3;42572:10;;41980:608;;;41856:732;;;;:::o;42594:831::-;42857:4;42895:3;42884:9;42880:19;42872:27;;42909:71;42977:1;42966:9;42962:17;42953:6;42909:71;:::i;:::-;42990:80;43066:2;43055:9;43051:18;43042:6;42990:80;:::i;:::-;43117:9;43111:4;43107:20;43102:2;43091:9;43087:18;43080:48;43145:108;43248:4;43239:6;43145:108;:::i;:::-;43137:116;;43263:72;43331:2;43320:9;43316:18;43307:6;43263:72;:::i;:::-;43345:73;43413:3;43402:9;43398:19;43389:6;43345:73;:::i;:::-;42594:831;;;;;;;;:::o;43431:807::-;43680:4;43718:3;43707:9;43703:19;43695:27;;43732:71;43800:1;43789:9;43785:17;43776:6;43732:71;:::i;:::-;43813:72;43881:2;43870:9;43866:18;43857:6;43813:72;:::i;:::-;43895:80;43971:2;43960:9;43956:18;43947:6;43895:80;:::i;:::-;43985;44061:2;44050:9;44046:18;44037:6;43985:80;:::i;:::-;44075:73;44143:3;44132:9;44128:19;44119:6;44075:73;:::i;:::-;44158;44226:3;44215:9;44211:19;44202:6;44158:73;:::i;:::-;43431:807;;;;;;;;;:::o;44244:663::-;44332:6;44340;44348;44397:2;44385:9;44376:7;44372:23;44368:32;44365:119;;;44403:79;;:::i;:::-;44365:119;44523:1;44548:64;44604:7;44595:6;44584:9;44580:22;44548:64;:::i;:::-;44538:74;;44494:128;44661:2;44687:64;44743:7;44734:6;44723:9;44719:22;44687:64;:::i;:::-;44677:74;;44632:129;44800:2;44826:64;44882:7;44873:6;44862:9;44858:22;44826:64;:::i;:::-;44816:74;;44771:129;44244:663;;;;;:::o
Swarm Source
ipfs://84bd300a8b08bd6a2fe2bf141fd9263a7dab23977818b74a7d6806f0523f1861
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.