ERC-20
Overview
Max Total Supply
4,000,000,000 $AMMO
Holders
513
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
39,848.934910316843526473 $AMMOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
AMMO
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-28 */ // SPDX-License-Identifier: Unlicensed pragma solidity 0.8.7; abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; 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; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require(_previousOwner == msg.sender, "You don't have permission to unlock"); require(block.timestamp > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } interface IERC20 { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address recipient, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } 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; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by 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; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // pragma solidity >=0.5.0; 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; } // pragma solidity >=0.5.0; 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 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 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; } // pragma solidity >=0.6.2; 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); } // pragma solidity >=0.6.2; 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 AMMO is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 4000000000 * (10**18); uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "Dogface AMMO token"; string private _symbol = "$AMMO"; uint8 private _decimals = 18; uint256 public _taxFee = 3; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 2; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _marketingFee = 4; uint256 private _previousMarketingFee = _marketingFee; address payable public marketingWallet = payable(0xe78dAb9780aD0136581ca4A81775d7e5258DA036); uint256 public _burnFee = 1; uint256 private _previousBurnFee = _burnFee; address public deadAddress = 0x000000000000000000000000000000000000dEaD; uint256 public minimumTokensBeforeSwap = 1000000 * 10**18; uint256 public _maxTxAmount = 8000000 * 10**18; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[owner()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[marketingWallet] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), owner(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } 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; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function deliver(uint256 tAmount) public { address sender = _msgSender(); require(!_isExcluded[sender], "Excluded addresses cannot call this function"); (uint256 rAmount,,,,,) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rTotal = _rTotal.sub(rAmount); _tFeeTotal = _tFeeTotal.add(tAmount); } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tLiquidity, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tLiquidity); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tLiquidity = calculateLiquidityFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tLiquidity); return (tTransferAmount, tFee, tLiquidity); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tLiquidity, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rLiquidity = tLiquidity.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rLiquidity); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeLiquidity(uint256 tLiquidity) private { uint256 currentRate = _getRate(); uint256 rLiquidity = tLiquidity.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rLiquidity); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tLiquidity); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateLiquidityFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_liquidityFee).div( 10**2 ); } function removeAllFee() private { if(_taxFee == 0 && _liquidityFee == 0 && _marketingFee==0 && _burnFee==0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _previousBurnFee = _burnFee; _previousMarketingFee = _marketingFee; _taxFee = 0; _liquidityFee = 0; _marketingFee = 0; _burnFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _burnFee = _previousBurnFee; _marketingFee = _previousMarketingFee; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + liquidity lock? // also, don't get caught in a circular liquidity event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= minimumTokensBeforeSwap; if ( overMinTokenBalance && !inSwapAndLiquify && to == uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = minimumTokensBeforeSwap; //add liquidity swapAndLiquify(contractTokenBalance); } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // tokens for liquidity uint256 tokensForLiquidity = contractTokenBalance.mul(_liquidityFee).div(_liquidityFee.add(_marketingFee)); // split the contract balance into halves uint256 half = tokensForLiquidity.div(2); uint256 otherHalf = tokensForLiquidity.sub(half); // capture the contract's current ETH balance. // this is so that we can capture exactly the amount of ETH that the // swap creates, and not make the liquidity event include any ETH that // has been manually sent to the contract uint256 initialBalance = address(this).balance; // swap tokens for ETH swapTokensForEth(half); // <- this breaks the ETH -> HATE swap when swap+liquify is triggered // how much ETH did we just swap into? uint256 newBalance = address(this).balance.sub(initialBalance); // add liquidity to uniswap addLiquidity(otherHalf, newBalance); //swap for marketing wallet swapTokensForEth(contractTokenBalance.sub(tokensForLiquidity)); marketingWallet.transfer(address(this).balance); emit SwapAndLiquify(half, newBalance, otherHalf); } 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 ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { removeAllFee(); } else { require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) { restoreAllFee(); } } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); (tTransferAmount, rTransferAmount) = takeBurn(sender, tTransferAmount, rTransferAmount, tAmount); (tTransferAmount, rTransferAmount) = takeMarketing(sender, tTransferAmount, rTransferAmount, tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function takeMarketing(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private returns (uint256, uint256) { if(_marketingFee==0) { return(tTransferAmount, rTransferAmount); } uint256 tMarketing = tAmount.div(100).mul(_marketingFee); uint256 rMarketing = tMarketing.mul(_getRate()); rTransferAmount = rTransferAmount.sub(rMarketing); tTransferAmount = tTransferAmount.sub(tMarketing); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing); emit Transfer(sender, address(this), tMarketing); return(tTransferAmount, rTransferAmount); } function takeBurn(address sender, uint256 tTransferAmount, uint256 rTransferAmount, uint256 tAmount) private returns (uint256, uint256) { if(_burnFee==0) { return(tTransferAmount, rTransferAmount); } uint256 tBurn = tAmount.div(100).mul(_burnFee); uint256 rBurn = tBurn.mul(_getRate()); rTransferAmount = rTransferAmount.sub(rBurn); tTransferAmount = tTransferAmount.sub(tBurn); _rOwned[deadAddress] = _rOwned[deadAddress].add(rBurn); emit Transfer(sender, deadAddress, tBurn); return(tTransferAmount, rTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tLiquidity) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeLiquidity(tLiquidity); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function updateMarketingWallet(address payable newWallet) external onlyOwner() { marketingWallet = newWallet; } function updateFeePercent(uint256 taxFee, uint256 liquidityFee, uint256 marketingFee, uint256 burnFee) external onlyOwner() { require(taxFee.add(liquidityFee).add(marketingFee).add(burnFee) <= 10, "tax too high"); _taxFee = taxFee; _liquidityFee = liquidityFee; _marketingFee = marketingFee; _burnFee = burnFee; } function updateMinimumTokensBeforeSwap(uint256 newAmount) external onlyOwner() { minimumTokensBeforeSwap = newAmount; } function updateMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; require(_maxTxAmount > totalSupply().div(200), "value too low"); } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} }
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":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","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":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","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":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","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":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minimumTokensBeforeSwap","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndLiquifyEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"},{"internalType":"uint256","name":"liquidityFee","type":"uint256"},{"internalType":"uint256","name":"marketingFee","type":"uint256"},{"internalType":"uint256","name":"burnFee","type":"uint256"}],"name":"updateFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"updateMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMinimumTokensBeforeSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526b0cecb8f27f4200f3a00000006009556009546000196200002691906200092c565b6000196200003591906200087d565b600a556040518060400160405280601281526020017f446f676661636520414d4d4f20746f6b656e0000000000000000000000000000815250600c90805190602001906200008592919062000718565b506040518060400160405280600581526020017f24414d4d4f000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000d392919062000718565b506012600e60006101000a81548160ff021916908360ff1602179055506003600f55600f546010556002601155601154601255600460135560135460145573e78dab9780ad0136581ca4a81775d7e5258da036601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160165560165460175561dead601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555069d3c21bcecceda10000006019556a069e10de76676d08000000601a556001601c60156101000a81548160ff021916908315150217905550348015620001f957600080fd5b5060006200020c620006e760201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a5460036000620002c1620006ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035f57600080fd5b505afa15801562000374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039a9190620007df565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003fd57600080fd5b505afa15801562000412573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004389190620007df565b6040518363ffffffff1660e01b81526004016200045792919062000833565b602060405180830381600087803b1580156200047257600080fd5b505af115801562000487573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004ad9190620007df565b601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016006600062000544620006ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600160066000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000677620006ef60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600954604051620006d8919062000860565b60405180910390a35062000a10565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200072690620008f6565b90600052602060002090601f0160209004810192826200074a576000855562000796565b82601f106200076557805160ff191683800117855562000796565b8280016001018555821562000796579182015b828111156200079557825182559160200191906001019062000778565b5b509050620007a59190620007a9565b5090565b5b80821115620007c4576000816000905550600101620007aa565b5090565b600081519050620007d981620009f6565b92915050565b600060208284031215620007f857620007f7620009f1565b5b60006200080884828501620007c8565b91505092915050565b6200081c81620008b8565b82525050565b6200082d81620008ec565b82525050565b60006040820190506200084a600083018562000811565b62000859602083018462000811565b9392505050565b600060208201905062000877600083018462000822565b92915050565b60006200088a82620008ec565b91506200089783620008ec565b925082821015620008ad57620008ac62000964565b5b828203905092915050565b6000620008c582620008cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060028204905060018216806200090f57607f821691505b60208210811415620009265762000925620009c2565b5b50919050565b60006200093982620008ec565b91506200094683620008ec565b92508262000959576200095862000993565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b62000a0181620008b8565b811462000a0d57600080fd5b50565b615d4a8062000a206000396000f3fe6080604052600436106102555760003560e01c80636bc87c3a11610139578063a69df4b5116100b6578063c49b9a801161007a578063c49b9a80146108e9578063d2d7ad8314610912578063dd4670641461093d578063dd62ed3e14610966578063ea2f0b37146109a3578063f2fde38b146109cc5761025c565b8063a69df4b514610816578063a9059cbb1461082d578063aacebbe31461086a578063b6c5232414610893578063c0b0fda2146108be5761025c565b806388f82020116100fd57806388f820201461071d5780638da5cb5b1461075a5780638e50c5be1461078557806395d89b41146107ae578063a457c2d7146107d95761025c565b80636bc87c3a1461064857806370a0823114610673578063715018a6146106b057806375f0a874146106c75780637d1db4a5146106f25761025c565b80633685d419116101d25780634549b039116101965780634549b0391461052657806349bd5a5e146105635780634a74bb021461058e57806352390c02146105b95780635342acb4146105e25780636256d1811461061f5761025c565b80633685d41914610443578063395093511461046c5780633b124fe7146104a95780633bd5d173146104d4578063437823ec146104fd5761025c565b806322976e0d1161021957806322976e0d1461034857806323b872dd1461037357806327c8f835146103b05780632d838119146103db578063313ce567146104185761025c565b806306fdde0314610261578063080437511461028c578063095ea7b3146102b55780631694505e146102f257806318160ddd1461031d5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109f5565b6040516102839190615136565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190614bc8565b610a87565b005b3480156102c157600080fd5b506102dc60048036038101906102d79190614b5b565b610b26565b6040516102e99190615100565b60405180910390f35b3480156102fe57600080fd5b50610307610b44565b604051610314919061511b565b60405180910390f35b34801561032957600080fd5b50610332610b6a565b60405161033f9190615378565b60405180910390f35b34801561035457600080fd5b5061035d610b74565b60405161036a9190615378565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190614b08565b610b7a565b6040516103a79190615100565b60405180910390f35b3480156103bc57600080fd5b506103c5610c53565b6040516103d29190615069565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd9190614bc8565b610c79565b60405161040f9190615378565b60405180910390f35b34801561042457600080fd5b5061042d610ce7565b60405161043a9190615424565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190614a41565b610cfe565b005b34801561047857600080fd5b50610493600480360381019061048e9190614b5b565b61104d565b6040516104a09190615100565b60405180910390f35b3480156104b557600080fd5b506104be611100565b6040516104cb9190615378565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190614bc8565b611106565b005b34801561050957600080fd5b50610524600480360381019061051f9190614a41565b611281565b005b34801561053257600080fd5b5061054d60048036038101906105489190614bf5565b611371565b60405161055a9190615378565b60405180910390f35b34801561056f57600080fd5b506105786113f5565b6040516105859190615069565b60405180910390f35b34801561059a57600080fd5b506105a361141b565b6040516105b09190615100565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190614a41565b61142e565b005b3480156105ee57600080fd5b5061060960048036038101906106049190614a41565b6116e2565b6040516106169190615100565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190614bc8565b611738565b005b34801561065457600080fd5b5061065d611835565b60405161066a9190615378565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190614a41565b61183b565b6040516106a79190615378565b60405180910390f35b3480156106bc57600080fd5b506106c5611926565b005b3480156106d357600080fd5b506106dc611a79565b6040516106e99190615084565b60405180910390f35b3480156106fe57600080fd5b50610707611a9f565b6040516107149190615378565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f9190614a41565b611aa5565b6040516107519190615100565b60405180910390f35b34801561076657600080fd5b5061076f611afb565b60405161077c9190615069565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a79190614c88565b611b24565b005b3480156107ba57600080fd5b506107c3611c55565b6040516107d09190615136565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb9190614b5b565b611ce7565b60405161080d9190615100565b60405180910390f35b34801561082257600080fd5b5061082b611db4565b005b34801561083957600080fd5b50610854600480360381019061084f9190614b5b565b611f88565b6040516108619190615100565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c9190614a9b565b611fa6565b005b34801561089f57600080fd5b506108a861207f565b6040516108b59190615378565b60405180910390f35b3480156108ca57600080fd5b506108d3612089565b6040516108e09190615378565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b9190614b9b565b61208f565b005b34801561091e57600080fd5b50610927612178565b6040516109349190615378565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f9190614bc8565b61217e565b005b34801561097257600080fd5b5061098d60048036038101906109889190614ac8565b612345565b60405161099a9190615378565b60405180910390f35b3480156109af57600080fd5b506109ca60048036038101906109c59190614a41565b6123cc565b005b3480156109d857600080fd5b506109f360048036038101906109ee9190614a41565b6124bc565b005b6060600c8054610a049061568b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a309061568b565b8015610a7d5780601f10610a5257610100808354040283529160200191610a7d565b820191906000526020600020905b815481529060010190602001808311610a6057829003601f168201915b5050505050905090565b610a8f61267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1390615278565b60405180910390fd5b8060198190555050565b6000610b3a610b3361267e565b8484612686565b6001905092915050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954905090565b60135481565b6000610b87848484612851565b610c4884610b9361267e565b610c4385604051806060016040528060288152602001615cc860289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bf961267e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129cc9092919063ffffffff16565b612686565b600190509392505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54821115610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb790615158565b60405180910390fd5b6000610cca612a30565b9050610cdf8184612a5b90919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b610d0661267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90615278565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e16906151d8565b60405180910390fd5b60005b600880549050811015611049578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610e5a57610e596157c2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110365760086001600880549050610eb59190615575565b81548110610ec657610ec56157c2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f0557610f046157c2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480610ffc57610ffb615793565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611049565b8080611041906156bd565b915050610e22565b5050565b60006110f661105a61267e565b846110f1856005600061106b61267e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b612686565b6001905092915050565b600f5481565b600061111061267e565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690615338565b60405180910390fd5b60006111aa83612b03565b5050505050905061120381600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5f90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061125b81600a54612b5f90919063ffffffff16565b600a8190555061127683600b54612aa590919063ffffffff16565b600b81905550505050565b61128961267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d90615278565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006009548311156113b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113af90615218565b60405180910390fd5b816113d85760006113c884612b03565b50505050509050809150506113ef565b60006113e384612b03565b50505050915050809150505b92915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60159054906101000a900460ff1681565b61143661267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba90615278565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611550576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611547906151d8565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611624576115e0600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c79565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61174061267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c490615278565b60405180910390fd5b80601a819055506117ef60c86117e1610b6a565b612a5b90919063ffffffff16565b601a5411611832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611829906151f8565b60405180910390fd5b50565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118d657600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611921565b61191e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c79565b90505b919050565b61192e61267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b290615278565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b2c61267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090615278565b60405180910390fd5b600a611bf282611be485611bd6888a612aa590919063ffffffff16565b612aa590919063ffffffff16565b612aa590919063ffffffff16565b1115611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90615318565b60405180910390fd5b83600f8190555082601181905550816013819055508060168190555050505050565b6060600d8054611c649061568b565b80601f0160208091040260200160405190810160405280929190818152602001828054611c909061568b565b8015611cdd5780601f10611cb257610100808354040283529160200191611cdd565b820191906000526020600020905b815481529060010190602001808311611cc057829003601f168201915b5050505050905090565b6000611daa611cf461267e565b84611da585604051806060016040528060258152602001615cf06025913960056000611d1e61267e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129cc9092919063ffffffff16565b612686565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b90615358565b60405180910390fd5b6002544211611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f906152f8565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611f9c611f9561267e565b8484612851565b6001905092915050565b611fae61267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203290615278565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600254905090565b60165481565b61209761267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211b90615278565b60405180910390fd5b80601c60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161216d9190615100565b60405180910390a150565b60195481565b61218661267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90615278565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426122c19190615494565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123d461267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890615278565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6124c461267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254890615278565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b890615178565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed906152d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275d90615198565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128449190615378565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b8906152b8565b60405180910390fd5b60008111612904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fb90615298565b60405180910390fd5b600061290f3061183b565b9050600060195482101590508080156129355750601c60149054906101000a900460ff16155b801561298e5750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156129a65750601c60159054906101000a900460ff165b156129ba5760195491506129b982612ba9565b5b6129c5858585612d45565b5050505050565b6000838311158290612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0b9190615136565b60405180910390fd5b5060008385612a239190615575565b9050809150509392505050565b6000806000612a3d6131e1565b91509150612a548183612a5b90919063ffffffff16565b9250505090565b6000612a9d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613494565b905092915050565b6000808284612ab49190615494565b905083811015612af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af0906151b8565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612b1a8a6134f7565b9250925092506000806000612b388d8686612b33612a30565b613551565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612ba183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129cc565b905092915050565b6001601c60146101000a81548160ff0219169083151502179055506000612c03612be0601354601154612aa590919063ffffffff16565b612bf5601154856135da90919063ffffffff16565b612a5b90919063ffffffff16565b90506000612c1b600283612a5b90919063ffffffff16565b90506000612c328284612b5f90919063ffffffff16565b90506000479050612c4283613655565b6000612c578247612b5f90919063ffffffff16565b9050612c6383826138a7565b612c7e612c798688612b5f90919063ffffffff16565b613655565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612ce6573d6000803e3d6000fd5b507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612d1a939291906153ed565b60405180910390a150505050506000601c60146101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612de65750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612df857612df361399b565b612e3e565b601a54811115612e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3490615238565b60405180910390fd5b5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ee15750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ef657612ef1838383613a1c565b61312d565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f995750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fae57612fa9838383613c7c565b61312c565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130525750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561306757613062838383613edc565b61312b565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131095750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561311e576131198383836140cf565b61312a565b613129838383613edc565b5b5b5b5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131ce5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131dc576131db6143c4565b5b505050565b6000806000600a5490506000600954905060005b6008805490508110156134575782600360006008848154811061321b5761321a6157c2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061330957508160046000600884815481106132a1576132a06157c2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561332057600a5460095494509450505050613490565b6133b0600360006008848154811061333b5761333a6157c2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612b5f90919063ffffffff16565b925061344260046000600884815481106133cd576133cc6157c2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612b5f90919063ffffffff16565b9150808061344f906156bd565b9150506131f5565b5061346f600954600a54612a5b90919063ffffffff16565b82101561348757600a54600954935093505050613490565b81819350935050505b9091565b600080831182906134db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d29190615136565b60405180910390fd5b50600083856134ea91906154ea565b9050809150509392505050565b600080600080613506856143ea565b905060006135138661441b565b9050600061353c8261352e858a612b5f90919063ffffffff16565b612b5f90919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061356a85896135da90919063ffffffff16565b9050600061358186896135da90919063ffffffff16565b9050600061359887896135da90919063ffffffff16565b905060006135c1826135b38587612b5f90919063ffffffff16565b612b5f90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000808314156135ed576000905061364f565b600082846135fb919061551b565b905082848261360a91906154ea565b1461364a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364190615258565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff811115613672576136716157f1565b5b6040519080825280602002602001820160405280156136a05781602001602082028036833780820191505090505b50905030816000815181106136b8576136b76157c2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561375a57600080fd5b505afa15801561376e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137929190614a6e565b816001815181106137a6576137a56157c2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061380d30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612686565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613871959493929190615393565b600060405180830381600087803b15801561388b57600080fd5b505af115801561389f573d6000803e3d6000fd5b505050505050565b6138d430601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612686565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613920611afb565b426040518863ffffffff1660e01b81526004016139429695949392919061509f565b6060604051808303818588803b15801561395b57600080fd5b505af115801561396f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139949190614c35565b5050505050565b6000600f541480156139af57506000601154145b80156139bd57506000601354145b80156139cb57506000601654145b156139d557613a1a565b600f546010819055506011546012819055506016546017819055506013546014819055506000600f819055506000601181905550600060138190555060006016819055505b565b600080600080600080613a2e87612b03565b955095509550955095509550613a8c87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5f90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b2186600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5f90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bb685600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c028161444c565b613c0c84836145f1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c699190615378565b60405180910390a3505050505050505050565b600080600080600080613c8e87612b03565b955095509550955095509550613cec86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5f90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8183600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e1685600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e628161444c565b613e6c84836145f1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ec99190615378565b60405180910390a3505050505050505050565b600080600080600080613eee87612b03565b955095509550955095509550613f068984878a61462b565b8096508194505050613f1a8984878a61482a565b8096508194505050613f7486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5f90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061400985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140558161444c565b61405f84836145f1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140bc9190615378565b60405180910390a3505050505050505050565b6000806000806000806140e187612b03565b95509550955095509550955061413f87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5f90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141d486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5f90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061426983600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142fe85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061434a8161444c565b61435484836145f1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143b19190615378565b60405180910390a3505050505050505050565b601054600f81905550601254601181905550601754601681905550601454601381905550565b60006144146064614406600f54856135da90919063ffffffff16565b612a5b90919063ffffffff16565b9050919050565b60006144456064614437601154856135da90919063ffffffff16565b612a5b90919063ffffffff16565b9050919050565b6000614456612a30565b9050600061446d82846135da90919063ffffffff16565b90506144c181600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156145ec576145a883600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61460682600a54612b5f90919063ffffffff16565b600a8190555061462181600b54612aa590919063ffffffff16565b600b819055505050565b6000806000601654141561464457848491509150614821565b600061466e601654614660606487612a5b90919063ffffffff16565b6135da90919063ffffffff16565b9050600061468c61467d612a30565b836135da90919063ffffffff16565b90506146a18187612b5f90919063ffffffff16565b95506146b68288612b5f90919063ffffffff16565b965061472c8160036000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b60036000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516148109190615378565b60405180910390a386869350935050505b94509492505050565b60008060006013541415614843578484915091506149ba565b600061486d60135461485f606487612a5b90919063ffffffff16565b6135da90919063ffffffff16565b9050600061488b61487c612a30565b836135da90919063ffffffff16565b90506148a08187612b5f90919063ffffffff16565b95506148b58288612b5f90919063ffffffff16565b965061490981600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516149a99190615378565b60405180910390a386869350935050505b94509492505050565b6000813590506149d281615c6b565b92915050565b6000815190506149e781615c6b565b92915050565b6000813590506149fc81615c82565b92915050565b600081359050614a1181615c99565b92915050565b600081359050614a2681615cb0565b92915050565b600081519050614a3b81615cb0565b92915050565b600060208284031215614a5757614a56615820565b5b6000614a65848285016149c3565b91505092915050565b600060208284031215614a8457614a83615820565b5b6000614a92848285016149d8565b91505092915050565b600060208284031215614ab157614ab0615820565b5b6000614abf848285016149ed565b91505092915050565b60008060408385031215614adf57614ade615820565b5b6000614aed858286016149c3565b9250506020614afe858286016149c3565b9150509250929050565b600080600060608486031215614b2157614b20615820565b5b6000614b2f868287016149c3565b9350506020614b40868287016149c3565b9250506040614b5186828701614a17565b9150509250925092565b60008060408385031215614b7257614b71615820565b5b6000614b80858286016149c3565b9250506020614b9185828601614a17565b9150509250929050565b600060208284031215614bb157614bb0615820565b5b6000614bbf84828501614a02565b91505092915050565b600060208284031215614bde57614bdd615820565b5b6000614bec84828501614a17565b91505092915050565b60008060408385031215614c0c57614c0b615820565b5b6000614c1a85828601614a17565b9250506020614c2b85828601614a02565b9150509250929050565b600080600060608486031215614c4e57614c4d615820565b5b6000614c5c86828701614a2c565b9350506020614c6d86828701614a2c565b9250506040614c7e86828701614a2c565b9150509250925092565b60008060008060808587031215614ca257614ca1615820565b5b6000614cb087828801614a17565b9450506020614cc187828801614a17565b9350506040614cd287828801614a17565b9250506060614ce387828801614a17565b91505092959194509250565b6000614cfb8383614d16565b60208301905092915050565b614d10816155bb565b82525050565b614d1f816155a9565b82525050565b614d2e816155a9565b82525050565b6000614d3f8261544f565b614d498185615472565b9350614d548361543f565b8060005b83811015614d85578151614d6c8882614cef565b9750614d7783615465565b925050600181019050614d58565b5085935050505092915050565b614d9b816155cd565b82525050565b614daa81615610565b82525050565b614db981615622565b82525050565b6000614dca8261545a565b614dd48185615483565b9350614de4818560208601615658565b614ded81615825565b840191505092915050565b6000614e05602a83615483565b9150614e1082615836565b604082019050919050565b6000614e28602683615483565b9150614e3382615885565b604082019050919050565b6000614e4b602283615483565b9150614e56826158d4565b604082019050919050565b6000614e6e601b83615483565b9150614e7982615923565b602082019050919050565b6000614e91601b83615483565b9150614e9c8261594c565b602082019050919050565b6000614eb4600d83615483565b9150614ebf82615975565b602082019050919050565b6000614ed7601f83615483565b9150614ee28261599e565b602082019050919050565b6000614efa602883615483565b9150614f05826159c7565b604082019050919050565b6000614f1d602183615483565b9150614f2882615a16565b604082019050919050565b6000614f40602083615483565b9150614f4b82615a65565b602082019050919050565b6000614f63602983615483565b9150614f6e82615a8e565b604082019050919050565b6000614f86602583615483565b9150614f9182615add565b604082019050919050565b6000614fa9602483615483565b9150614fb482615b2c565b604082019050919050565b6000614fcc601f83615483565b9150614fd782615b7b565b602082019050919050565b6000614fef600c83615483565b9150614ffa82615ba4565b602082019050919050565b6000615012602c83615483565b915061501d82615bcd565b604082019050919050565b6000615035602383615483565b915061504082615c1c565b604082019050919050565b615054816155f9565b82525050565b61506381615603565b82525050565b600060208201905061507e6000830184614d25565b92915050565b60006020820190506150996000830184614d07565b92915050565b600060c0820190506150b46000830189614d25565b6150c1602083018861504b565b6150ce6040830187614db0565b6150db6060830186614db0565b6150e86080830185614d25565b6150f560a083018461504b565b979650505050505050565b60006020820190506151156000830184614d92565b92915050565b60006020820190506151306000830184614da1565b92915050565b600060208201905081810360008301526151508184614dbf565b905092915050565b6000602082019050818103600083015261517181614df8565b9050919050565b6000602082019050818103600083015261519181614e1b565b9050919050565b600060208201905081810360008301526151b181614e3e565b9050919050565b600060208201905081810360008301526151d181614e61565b9050919050565b600060208201905081810360008301526151f181614e84565b9050919050565b6000602082019050818103600083015261521181614ea7565b9050919050565b6000602082019050818103600083015261523181614eca565b9050919050565b6000602082019050818103600083015261525181614eed565b9050919050565b6000602082019050818103600083015261527181614f10565b9050919050565b6000602082019050818103600083015261529181614f33565b9050919050565b600060208201905081810360008301526152b181614f56565b9050919050565b600060208201905081810360008301526152d181614f79565b9050919050565b600060208201905081810360008301526152f181614f9c565b9050919050565b6000602082019050818103600083015261531181614fbf565b9050919050565b6000602082019050818103600083015261533181614fe2565b9050919050565b6000602082019050818103600083015261535181615005565b9050919050565b6000602082019050818103600083015261537181615028565b9050919050565b600060208201905061538d600083018461504b565b92915050565b600060a0820190506153a8600083018861504b565b6153b56020830187614db0565b81810360408301526153c78186614d34565b90506153d66060830185614d25565b6153e3608083018461504b565b9695505050505050565b6000606082019050615402600083018661504b565b61540f602083018561504b565b61541c604083018461504b565b949350505050565b6000602082019050615439600083018461505a565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061549f826155f9565b91506154aa836155f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154df576154de615706565b5b828201905092915050565b60006154f5826155f9565b9150615500836155f9565b9250826155105761550f615735565b5b828204905092915050565b6000615526826155f9565b9150615531836155f9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561556a57615569615706565b5b828202905092915050565b6000615580826155f9565b915061558b836155f9565b92508282101561559e5761559d615706565b5b828203905092915050565b60006155b4826155d9565b9050919050565b60006155c6826155d9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061561b82615634565b9050919050565b600061562d826155f9565b9050919050565b600061563f82615646565b9050919050565b6000615651826155d9565b9050919050565b60005b8381101561567657808201518184015260208101905061565b565b83811115615685576000848401525b50505050565b600060028204905060018216806156a357607f821691505b602082108114156156b7576156b6615764565b5b50919050565b60006156c8826155f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156fb576156fa615706565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b615c74816155a9565b8114615c7f57600080fd5b50565b615c8b816155bb565b8114615c9657600080fd5b50565b615ca2816155cd565b8114615cad57600080fd5b50565b615cb9816155f9565b8114615cc457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208a12a741017846efd1d0bda2b2fd90817fe87bc6d2ee30f3d04b26223227aebf64736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102555760003560e01c80636bc87c3a11610139578063a69df4b5116100b6578063c49b9a801161007a578063c49b9a80146108e9578063d2d7ad8314610912578063dd4670641461093d578063dd62ed3e14610966578063ea2f0b37146109a3578063f2fde38b146109cc5761025c565b8063a69df4b514610816578063a9059cbb1461082d578063aacebbe31461086a578063b6c5232414610893578063c0b0fda2146108be5761025c565b806388f82020116100fd57806388f820201461071d5780638da5cb5b1461075a5780638e50c5be1461078557806395d89b41146107ae578063a457c2d7146107d95761025c565b80636bc87c3a1461064857806370a0823114610673578063715018a6146106b057806375f0a874146106c75780637d1db4a5146106f25761025c565b80633685d419116101d25780634549b039116101965780634549b0391461052657806349bd5a5e146105635780634a74bb021461058e57806352390c02146105b95780635342acb4146105e25780636256d1811461061f5761025c565b80633685d41914610443578063395093511461046c5780633b124fe7146104a95780633bd5d173146104d4578063437823ec146104fd5761025c565b806322976e0d1161021957806322976e0d1461034857806323b872dd1461037357806327c8f835146103b05780632d838119146103db578063313ce567146104185761025c565b806306fdde0314610261578063080437511461028c578063095ea7b3146102b55780631694505e146102f257806318160ddd1461031d5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b506102766109f5565b6040516102839190615136565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190614bc8565b610a87565b005b3480156102c157600080fd5b506102dc60048036038101906102d79190614b5b565b610b26565b6040516102e99190615100565b60405180910390f35b3480156102fe57600080fd5b50610307610b44565b604051610314919061511b565b60405180910390f35b34801561032957600080fd5b50610332610b6a565b60405161033f9190615378565b60405180910390f35b34801561035457600080fd5b5061035d610b74565b60405161036a9190615378565b60405180910390f35b34801561037f57600080fd5b5061039a60048036038101906103959190614b08565b610b7a565b6040516103a79190615100565b60405180910390f35b3480156103bc57600080fd5b506103c5610c53565b6040516103d29190615069565b60405180910390f35b3480156103e757600080fd5b5061040260048036038101906103fd9190614bc8565b610c79565b60405161040f9190615378565b60405180910390f35b34801561042457600080fd5b5061042d610ce7565b60405161043a9190615424565b60405180910390f35b34801561044f57600080fd5b5061046a60048036038101906104659190614a41565b610cfe565b005b34801561047857600080fd5b50610493600480360381019061048e9190614b5b565b61104d565b6040516104a09190615100565b60405180910390f35b3480156104b557600080fd5b506104be611100565b6040516104cb9190615378565b60405180910390f35b3480156104e057600080fd5b506104fb60048036038101906104f69190614bc8565b611106565b005b34801561050957600080fd5b50610524600480360381019061051f9190614a41565b611281565b005b34801561053257600080fd5b5061054d60048036038101906105489190614bf5565b611371565b60405161055a9190615378565b60405180910390f35b34801561056f57600080fd5b506105786113f5565b6040516105859190615069565b60405180910390f35b34801561059a57600080fd5b506105a361141b565b6040516105b09190615100565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db9190614a41565b61142e565b005b3480156105ee57600080fd5b5061060960048036038101906106049190614a41565b6116e2565b6040516106169190615100565b60405180910390f35b34801561062b57600080fd5b5061064660048036038101906106419190614bc8565b611738565b005b34801561065457600080fd5b5061065d611835565b60405161066a9190615378565b60405180910390f35b34801561067f57600080fd5b5061069a60048036038101906106959190614a41565b61183b565b6040516106a79190615378565b60405180910390f35b3480156106bc57600080fd5b506106c5611926565b005b3480156106d357600080fd5b506106dc611a79565b6040516106e99190615084565b60405180910390f35b3480156106fe57600080fd5b50610707611a9f565b6040516107149190615378565b60405180910390f35b34801561072957600080fd5b50610744600480360381019061073f9190614a41565b611aa5565b6040516107519190615100565b60405180910390f35b34801561076657600080fd5b5061076f611afb565b60405161077c9190615069565b60405180910390f35b34801561079157600080fd5b506107ac60048036038101906107a79190614c88565b611b24565b005b3480156107ba57600080fd5b506107c3611c55565b6040516107d09190615136565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb9190614b5b565b611ce7565b60405161080d9190615100565b60405180910390f35b34801561082257600080fd5b5061082b611db4565b005b34801561083957600080fd5b50610854600480360381019061084f9190614b5b565b611f88565b6040516108619190615100565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c9190614a9b565b611fa6565b005b34801561089f57600080fd5b506108a861207f565b6040516108b59190615378565b60405180910390f35b3480156108ca57600080fd5b506108d3612089565b6040516108e09190615378565b60405180910390f35b3480156108f557600080fd5b50610910600480360381019061090b9190614b9b565b61208f565b005b34801561091e57600080fd5b50610927612178565b6040516109349190615378565b60405180910390f35b34801561094957600080fd5b50610964600480360381019061095f9190614bc8565b61217e565b005b34801561097257600080fd5b5061098d60048036038101906109889190614ac8565b612345565b60405161099a9190615378565b60405180910390f35b3480156109af57600080fd5b506109ca60048036038101906109c59190614a41565b6123cc565b005b3480156109d857600080fd5b506109f360048036038101906109ee9190614a41565b6124bc565b005b6060600c8054610a049061568b565b80601f0160208091040260200160405190810160405280929190818152602001828054610a309061568b565b8015610a7d5780601f10610a5257610100808354040283529160200191610a7d565b820191906000526020600020905b815481529060010190602001808311610a6057829003601f168201915b5050505050905090565b610a8f61267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1390615278565b60405180910390fd5b8060198190555050565b6000610b3a610b3361267e565b8484612686565b6001905092915050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954905090565b60135481565b6000610b87848484612851565b610c4884610b9361267e565b610c4385604051806060016040528060288152602001615cc860289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610bf961267e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129cc9092919063ffffffff16565b612686565b600190509392505050565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a54821115610cc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb790615158565b60405180910390fd5b6000610cca612a30565b9050610cdf8184612a5b90919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b610d0661267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8a90615278565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e16906151d8565b60405180910390fd5b60005b600880549050811015611049578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610e5a57610e596157c2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110365760086001600880549050610eb59190615575565b81548110610ec657610ec56157c2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f0557610f046157c2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008805480610ffc57610ffb615793565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611049565b8080611041906156bd565b915050610e22565b5050565b60006110f661105a61267e565b846110f1856005600061106b61267e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b612686565b6001905092915050565b600f5481565b600061111061267e565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561119f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119690615338565b60405180910390fd5b60006111aa83612b03565b5050505050905061120381600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5f90919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061125b81600a54612b5f90919063ffffffff16565b600a8190555061127683600b54612aa590919063ffffffff16565b600b81905550505050565b61128961267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611316576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130d90615278565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60006009548311156113b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113af90615218565b60405180910390fd5b816113d85760006113c884612b03565b50505050509050809150506113ef565b60006113e384612b03565b50505050915050809150505b92915050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601c60159054906101000a900460ff1681565b61143661267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146114c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114ba90615278565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611550576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611547906151d8565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541115611624576115e0600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c79565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61174061267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c490615278565b60405180910390fd5b80601a819055506117ef60c86117e1610b6a565b612a5b90919063ffffffff16565b601a5411611832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611829906151f8565b60405180910390fd5b50565b60115481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156118d657600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611921565b61191e600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c79565b90505b919050565b61192e61267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146119bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b290615278565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b2c61267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611bb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb090615278565b60405180910390fd5b600a611bf282611be485611bd6888a612aa590919063ffffffff16565b612aa590919063ffffffff16565b612aa590919063ffffffff16565b1115611c33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2a90615318565b60405180910390fd5b83600f8190555082601181905550816013819055508060168190555050505050565b6060600d8054611c649061568b565b80601f0160208091040260200160405190810160405280929190818152602001828054611c909061568b565b8015611cdd5780601f10611cb257610100808354040283529160200191611cdd565b820191906000526020600020905b815481529060010190602001808311611cc057829003601f168201915b5050505050905090565b6000611daa611cf461267e565b84611da585604051806060016040528060258152602001615cf06025913960056000611d1e61267e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546129cc9092919063ffffffff16565b612686565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3b90615358565b60405180910390fd5b6002544211611e88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e7f906152f8565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000611f9c611f9561267e565b8484612851565b6001905092915050565b611fae61267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461203b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203290615278565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600254905090565b60165481565b61209761267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612124576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161211b90615278565b60405180910390fd5b80601c60156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405161216d9190615100565b60405180910390a150565b60195481565b61218661267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220a90615278565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080426122c19190615494565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6123d461267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612461576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161245890615278565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6124c461267e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612551576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254890615278565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b890615178565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed906152d8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161275d90615198565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516128449190615378565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156128c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b8906152b8565b60405180910390fd5b60008111612904576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128fb90615298565b60405180910390fd5b600061290f3061183b565b9050600060195482101590508080156129355750601c60149054906101000a900460ff16155b801561298e5750601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16145b80156129a65750601c60159054906101000a900460ff165b156129ba5760195491506129b982612ba9565b5b6129c5858585612d45565b5050505050565b6000838311158290612a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0b9190615136565b60405180910390fd5b5060008385612a239190615575565b9050809150509392505050565b6000806000612a3d6131e1565b91509150612a548183612a5b90919063ffffffff16565b9250505090565b6000612a9d83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613494565b905092915050565b6000808284612ab49190615494565b905083811015612af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af0906151b8565b60405180910390fd5b8091505092915050565b6000806000806000806000806000612b1a8a6134f7565b9250925092506000806000612b388d8686612b33612a30565b613551565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000612ba183836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506129cc565b905092915050565b6001601c60146101000a81548160ff0219169083151502179055506000612c03612be0601354601154612aa590919063ffffffff16565b612bf5601154856135da90919063ffffffff16565b612a5b90919063ffffffff16565b90506000612c1b600283612a5b90919063ffffffff16565b90506000612c328284612b5f90919063ffffffff16565b90506000479050612c4283613655565b6000612c578247612b5f90919063ffffffff16565b9050612c6383826138a7565b612c7e612c798688612b5f90919063ffffffff16565b613655565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612ce6573d6000803e3d6000fd5b507f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561848285604051612d1a939291906153ed565b60405180910390a150505050506000601c60146101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612de65750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612df857612df361399b565b612e3e565b601a54811115612e3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e3490615238565b60405180910390fd5b5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612ee15750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ef657612ef1838383613a1c565b61312d565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f995750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fae57612fa9838383613c7c565b61312c565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156130525750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561306757613062838383613edc565b61312b565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156131095750600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561311e576131198383836140cf565b61312a565b613129838383613edc565b5b5b5b5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806131ce5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156131dc576131db6143c4565b5b505050565b6000806000600a5490506000600954905060005b6008805490508110156134575782600360006008848154811061321b5761321a6157c2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061330957508160046000600884815481106132a1576132a06157c2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561332057600a5460095494509450505050613490565b6133b0600360006008848154811061333b5761333a6157c2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484612b5f90919063ffffffff16565b925061344260046000600884815481106133cd576133cc6157c2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483612b5f90919063ffffffff16565b9150808061344f906156bd565b9150506131f5565b5061346f600954600a54612a5b90919063ffffffff16565b82101561348757600a54600954935093505050613490565b81819350935050505b9091565b600080831182906134db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134d29190615136565b60405180910390fd5b50600083856134ea91906154ea565b9050809150509392505050565b600080600080613506856143ea565b905060006135138661441b565b9050600061353c8261352e858a612b5f90919063ffffffff16565b612b5f90919063ffffffff16565b90508083839550955095505050509193909250565b60008060008061356a85896135da90919063ffffffff16565b9050600061358186896135da90919063ffffffff16565b9050600061359887896135da90919063ffffffff16565b905060006135c1826135b38587612b5f90919063ffffffff16565b612b5f90919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000808314156135ed576000905061364f565b600082846135fb919061551b565b905082848261360a91906154ea565b1461364a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161364190615258565b60405180910390fd5b809150505b92915050565b6000600267ffffffffffffffff811115613672576136716157f1565b5b6040519080825280602002602001820160405280156136a05781602001602082028036833780820191505090505b50905030816000815181106136b8576136b76157c2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561375a57600080fd5b505afa15801561376e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137929190614a6e565b816001815181106137a6576137a56157c2565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061380d30601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612686565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613871959493929190615393565b600060405180830381600087803b15801561388b57600080fd5b505af115801561389f573d6000803e3d6000fd5b505050505050565b6138d430601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612686565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613920611afb565b426040518863ffffffff1660e01b81526004016139429695949392919061509f565b6060604051808303818588803b15801561395b57600080fd5b505af115801561396f573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906139949190614c35565b5050505050565b6000600f541480156139af57506000601154145b80156139bd57506000601354145b80156139cb57506000601654145b156139d557613a1a565b600f546010819055506011546012819055506016546017819055506013546014819055506000600f819055506000601181905550600060138190555060006016819055505b565b600080600080600080613a2e87612b03565b955095509550955095509550613a8c87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5f90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b2186600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5f90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613bb685600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c028161444c565b613c0c84836145f1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613c699190615378565b60405180910390a3505050505050505050565b600080600080600080613c8e87612b03565b955095509550955095509550613cec86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5f90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613d8183600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e1685600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e628161444c565b613e6c84836145f1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613ec99190615378565b60405180910390a3505050505050505050565b600080600080600080613eee87612b03565b955095509550955095509550613f068984878a61462b565b8096508194505050613f1a8984878a61482a565b8096508194505050613f7486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5f90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061400985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140558161444c565b61405f84836145f1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516140bc9190615378565b60405180910390a3505050505050505050565b6000806000806000806140e187612b03565b95509550955095509550955061413f87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5f90919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141d486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612b5f90919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061426983600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142fe85600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061434a8161444c565b61435484836145f1565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516143b19190615378565b60405180910390a3505050505050505050565b601054600f81905550601254601181905550601754601681905550601454601381905550565b60006144146064614406600f54856135da90919063ffffffff16565b612a5b90919063ffffffff16565b9050919050565b60006144456064614437601154856135da90919063ffffffff16565b612a5b90919063ffffffff16565b9050919050565b6000614456612a30565b9050600061446d82846135da90919063ffffffff16565b90506144c181600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156145ec576145a883600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61460682600a54612b5f90919063ffffffff16565b600a8190555061462181600b54612aa590919063ffffffff16565b600b819055505050565b6000806000601654141561464457848491509150614821565b600061466e601654614660606487612a5b90919063ffffffff16565b6135da90919063ffffffff16565b9050600061468c61467d612a30565b836135da90919063ffffffff16565b90506146a18187612b5f90919063ffffffff16565b95506146b68288612b5f90919063ffffffff16565b965061472c8160036000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b60036000601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516148109190615378565b60405180910390a386869350935050505b94509492505050565b60008060006013541415614843578484915091506149ba565b600061486d60135461485f606487612a5b90919063ffffffff16565b6135da90919063ffffffff16565b9050600061488b61487c612a30565b836135da90919063ffffffff16565b90506148a08187612b5f90919063ffffffff16565b95506148b58288612b5f90919063ffffffff16565b965061490981600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612aa590919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055503073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516149a99190615378565b60405180910390a386869350935050505b94509492505050565b6000813590506149d281615c6b565b92915050565b6000815190506149e781615c6b565b92915050565b6000813590506149fc81615c82565b92915050565b600081359050614a1181615c99565b92915050565b600081359050614a2681615cb0565b92915050565b600081519050614a3b81615cb0565b92915050565b600060208284031215614a5757614a56615820565b5b6000614a65848285016149c3565b91505092915050565b600060208284031215614a8457614a83615820565b5b6000614a92848285016149d8565b91505092915050565b600060208284031215614ab157614ab0615820565b5b6000614abf848285016149ed565b91505092915050565b60008060408385031215614adf57614ade615820565b5b6000614aed858286016149c3565b9250506020614afe858286016149c3565b9150509250929050565b600080600060608486031215614b2157614b20615820565b5b6000614b2f868287016149c3565b9350506020614b40868287016149c3565b9250506040614b5186828701614a17565b9150509250925092565b60008060408385031215614b7257614b71615820565b5b6000614b80858286016149c3565b9250506020614b9185828601614a17565b9150509250929050565b600060208284031215614bb157614bb0615820565b5b6000614bbf84828501614a02565b91505092915050565b600060208284031215614bde57614bdd615820565b5b6000614bec84828501614a17565b91505092915050565b60008060408385031215614c0c57614c0b615820565b5b6000614c1a85828601614a17565b9250506020614c2b85828601614a02565b9150509250929050565b600080600060608486031215614c4e57614c4d615820565b5b6000614c5c86828701614a2c565b9350506020614c6d86828701614a2c565b9250506040614c7e86828701614a2c565b9150509250925092565b60008060008060808587031215614ca257614ca1615820565b5b6000614cb087828801614a17565b9450506020614cc187828801614a17565b9350506040614cd287828801614a17565b9250506060614ce387828801614a17565b91505092959194509250565b6000614cfb8383614d16565b60208301905092915050565b614d10816155bb565b82525050565b614d1f816155a9565b82525050565b614d2e816155a9565b82525050565b6000614d3f8261544f565b614d498185615472565b9350614d548361543f565b8060005b83811015614d85578151614d6c8882614cef565b9750614d7783615465565b925050600181019050614d58565b5085935050505092915050565b614d9b816155cd565b82525050565b614daa81615610565b82525050565b614db981615622565b82525050565b6000614dca8261545a565b614dd48185615483565b9350614de4818560208601615658565b614ded81615825565b840191505092915050565b6000614e05602a83615483565b9150614e1082615836565b604082019050919050565b6000614e28602683615483565b9150614e3382615885565b604082019050919050565b6000614e4b602283615483565b9150614e56826158d4565b604082019050919050565b6000614e6e601b83615483565b9150614e7982615923565b602082019050919050565b6000614e91601b83615483565b9150614e9c8261594c565b602082019050919050565b6000614eb4600d83615483565b9150614ebf82615975565b602082019050919050565b6000614ed7601f83615483565b9150614ee28261599e565b602082019050919050565b6000614efa602883615483565b9150614f05826159c7565b604082019050919050565b6000614f1d602183615483565b9150614f2882615a16565b604082019050919050565b6000614f40602083615483565b9150614f4b82615a65565b602082019050919050565b6000614f63602983615483565b9150614f6e82615a8e565b604082019050919050565b6000614f86602583615483565b9150614f9182615add565b604082019050919050565b6000614fa9602483615483565b9150614fb482615b2c565b604082019050919050565b6000614fcc601f83615483565b9150614fd782615b7b565b602082019050919050565b6000614fef600c83615483565b9150614ffa82615ba4565b602082019050919050565b6000615012602c83615483565b915061501d82615bcd565b604082019050919050565b6000615035602383615483565b915061504082615c1c565b604082019050919050565b615054816155f9565b82525050565b61506381615603565b82525050565b600060208201905061507e6000830184614d25565b92915050565b60006020820190506150996000830184614d07565b92915050565b600060c0820190506150b46000830189614d25565b6150c1602083018861504b565b6150ce6040830187614db0565b6150db6060830186614db0565b6150e86080830185614d25565b6150f560a083018461504b565b979650505050505050565b60006020820190506151156000830184614d92565b92915050565b60006020820190506151306000830184614da1565b92915050565b600060208201905081810360008301526151508184614dbf565b905092915050565b6000602082019050818103600083015261517181614df8565b9050919050565b6000602082019050818103600083015261519181614e1b565b9050919050565b600060208201905081810360008301526151b181614e3e565b9050919050565b600060208201905081810360008301526151d181614e61565b9050919050565b600060208201905081810360008301526151f181614e84565b9050919050565b6000602082019050818103600083015261521181614ea7565b9050919050565b6000602082019050818103600083015261523181614eca565b9050919050565b6000602082019050818103600083015261525181614eed565b9050919050565b6000602082019050818103600083015261527181614f10565b9050919050565b6000602082019050818103600083015261529181614f33565b9050919050565b600060208201905081810360008301526152b181614f56565b9050919050565b600060208201905081810360008301526152d181614f79565b9050919050565b600060208201905081810360008301526152f181614f9c565b9050919050565b6000602082019050818103600083015261531181614fbf565b9050919050565b6000602082019050818103600083015261533181614fe2565b9050919050565b6000602082019050818103600083015261535181615005565b9050919050565b6000602082019050818103600083015261537181615028565b9050919050565b600060208201905061538d600083018461504b565b92915050565b600060a0820190506153a8600083018861504b565b6153b56020830187614db0565b81810360408301526153c78186614d34565b90506153d66060830185614d25565b6153e3608083018461504b565b9695505050505050565b6000606082019050615402600083018661504b565b61540f602083018561504b565b61541c604083018461504b565b949350505050565b6000602082019050615439600083018461505a565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600061549f826155f9565b91506154aa836155f9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156154df576154de615706565b5b828201905092915050565b60006154f5826155f9565b9150615500836155f9565b9250826155105761550f615735565b5b828204905092915050565b6000615526826155f9565b9150615531836155f9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561556a57615569615706565b5b828202905092915050565b6000615580826155f9565b915061558b836155f9565b92508282101561559e5761559d615706565b5b828203905092915050565b60006155b4826155d9565b9050919050565b60006155c6826155d9565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061561b82615634565b9050919050565b600061562d826155f9565b9050919050565b600061563f82615646565b9050919050565b6000615651826155d9565b9050919050565b60005b8381101561567657808201518184015260208101905061565b565b83811115615685576000848401525b50505050565b600060028204905060018216806156a357607f821691505b602082108114156156b7576156b6615764565b5b50919050565b60006156c8826155f9565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156156fb576156fa615706565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f76616c756520746f6f206c6f7700000000000000000000000000000000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b7f74617820746f6f20686967680000000000000000000000000000000000000000600082015250565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b615c74816155a9565b8114615c7f57600080fd5b50565b615c8b816155bb565b8114615c9657600080fd5b50565b615ca2816155cd565b8114615cad57600080fd5b50565b615cb9816155f9565b8114615cc457600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208a12a741017846efd1d0bda2b2fd90817fe87bc6d2ee30f3d04b26223227aebf64736f6c63430008070033
Deployed Bytecode Sourcemap
20674:20610:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23414:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40665:133;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24326:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22115:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23691:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21632:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24495:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21916:71;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26276:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23600:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26878:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24816:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21444:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25447:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40031:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25832:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22164:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22234:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26537:333;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31476:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40810:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21531:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23794:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2175:148;;;;;;;;;;;;;:::i;:::-;;21731:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22060:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25319:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1532:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40290:363;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23505:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25042:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3197:305;;;;;;;;;;;;;:::i;:::-;;24000:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40154:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2730:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21832:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41010:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21996:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2895:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24175:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39913:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2478:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23414:83;23451:13;23484:5;23477:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23414:83;:::o;40665:133::-;1754:12;:10;:12::i;:::-;1744:22;;:6;;;;;;;;;;:22;;;1736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40781:9:::1;40755:23;:35;;;;40665:133:::0;:::o;24326:161::-;24401:4;24418:39;24427:12;:10;:12::i;:::-;24441:7;24450:6;24418:8;:39::i;:::-;24475:4;24468:11;;24326:161;;;;:::o;22115:42::-;;;;;;;;;;;;;:::o;23691:95::-;23744:7;23771;;23764:14;;23691:95;:::o;21632:32::-;;;;:::o;24495:313::-;24593:4;24610:36;24620:6;24628:9;24639:6;24610:9;:36::i;:::-;24657:121;24666:6;24674:12;:10;:12::i;:::-;24688:89;24726:6;24688:89;;;;;;;;;;;;;;;;;:11;:19;24700:6;24688:19;;;;;;;;;;;;;;;:33;24708:12;:10;:12::i;:::-;24688:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;24657:8;:121::i;:::-;24796:4;24789:11;;24495:313;;;;;:::o;21916:71::-;;;;;;;;;;;;;:::o;26276:253::-;26342:7;26381;;26370;:18;;26362:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26446:19;26469:10;:8;:10::i;:::-;26446:33;;26497:24;26509:11;26497:7;:11;;:24;;;;:::i;:::-;26490:31;;;26276:253;;;:::o;23600:83::-;23641:5;23666:9;;;;;;;;;;;23659:16;;23600:83;:::o;26878:479::-;1754:12;:10;:12::i;:::-;1744:22;;:6;;;;;;;;;;:22;;;1736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26960:11:::1;:20;26972:7;26960:20;;;;;;;;;;;;;;;;;;;;;;;;;26952:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;27028:9;27023:327;27047:9;:16;;;;27043:1;:20;27023:327;;;27105:7;27089:23;;:9;27099:1;27089:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;27085:254;;;27148:9;27177:1;27158:9;:16;;;;:20;;;;:::i;:::-;27148:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;27133:9;27143:1;27133:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;27217:1;27198:7;:16;27206:7;27198:16;;;;;;;;;;;;;;;:20;;;;27260:5;27237:11;:20;27249:7;27237:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;27284:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;27318:5;;27085:254;27065:3;;;;;:::i;:::-;;;;27023:327;;;;26878:479:::0;:::o;24816:218::-;24904:4;24921:83;24930:12;:10;:12::i;:::-;24944:7;24953:50;24992:10;24953:11;:25;24965:12;:10;:12::i;:::-;24953:25;;;;;;;;;;;;;;;:34;24979:7;24953:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;24921:8;:83::i;:::-;25022:4;25015:11;;24816:218;;;;:::o;21444:26::-;;;;:::o;25447:377::-;25499:14;25516:12;:10;:12::i;:::-;25499:29;;25548:11;:19;25560:6;25548:19;;;;;;;;;;;;;;;;;;;;;;;;;25547:20;25539:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;25628:15;25652:19;25663:7;25652:10;:19::i;:::-;25627:44;;;;;;;25700:28;25720:7;25700;:15;25708:6;25700:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;25682:7;:15;25690:6;25682:15;;;;;;;;;;;;;;;:46;;;;25749:20;25761:7;25749;;:11;;:20;;;;:::i;:::-;25739:7;:30;;;;25793:23;25808:7;25793:10;;:14;;:23;;;;:::i;:::-;25780:10;:36;;;;25488:336;;25447:377;:::o;40031:111::-;1754:12;:10;:12::i;:::-;1744:22;;:6;;;;;;;;;;:22;;;1736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40130:4:::1;40100:18;:27;40119:7;40100:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;40031:111:::0;:::o;25832:436::-;25922:7;25961;;25950;:18;;25942:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26020:17;26015:246;;26055:15;26079:19;26090:7;26079:10;:19::i;:::-;26054:44;;;;;;;26120:7;26113:14;;;;;26015:246;26162:23;26193:19;26204:7;26193:10;:19::i;:::-;26160:52;;;;;;;26234:15;26227:22;;;25832:436;;;;;:::o;22164:29::-;;;;;;;;;;;;;:::o;22234:40::-;;;;;;;;;;;;;:::o;26537:333::-;1754:12;:10;:12::i;:::-;1744:22;;:6;;;;;;;;;;:22;;;1736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;26620:11:::1;:20;26632:7;26620:20;;;;;;;;;;;;;;;;;;;;;;;;;26619:21;26611:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;26705:1;26686:7;:16;26694:7;26686:16;;;;;;;;;;;;;;;;:20;26683:108;;;26742:37;26762:7;:16;26770:7;26762:16;;;;;;;;;;;;;;;;26742:19;:37::i;:::-;26723:7;:16;26731:7;26723:16;;;;;;;;;;;;;;;:56;;;;26683:108;26824:4;26801:11;:20;26813:7;26801:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;26839:9;26854:7;26839:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26537:333:::0;:::o;31476:123::-;31540:4;31564:18;:27;31583:7;31564:27;;;;;;;;;;;;;;;;;;;;;;;;;31557:34;;31476:123;;;:::o;40810:188::-;1754:12;:10;:12::i;:::-;1744:22;;:6;;;;;;;;;;:22;;;1736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40905:11:::1;40890:12;:26;;;;40950:22;40968:3;40950:13;:11;:13::i;:::-;:17;;:22;;;;:::i;:::-;40935:12;;:37;40927:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;40810:188:::0;:::o;21531:32::-;;;;:::o;23794:198::-;23860:7;23884:11;:20;23896:7;23884:20;;;;;;;;;;;;;;;;;;;;;;;;;23880:49;;;23913:7;:16;23921:7;23913:16;;;;;;;;;;;;;;;;23906:23;;;;23880:49;23947:37;23967:7;:16;23975:7;23967:16;;;;;;;;;;;;;;;;23947:19;:37::i;:::-;23940:44;;23794:198;;;;:::o;2175:148::-;1754:12;:10;:12::i;:::-;1744:22;;:6;;;;;;;;;;:22;;;1736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2282:1:::1;2245:40;;2266:6;::::0;::::1;;;;;;;;2245:40;;;;;;;;;;;;2313:1;2296:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;2175:148::o:0;21731:92::-;;;;;;;;;;;;;:::o;22060:46::-;;;;:::o;25319:120::-;25387:4;25411:11;:20;25423:7;25411:20;;;;;;;;;;;;;;;;;;;;;;;;;25404:27;;25319:120;;;:::o;1532:79::-;1570:7;1597:6;;;;;;;;;;;1590:13;;1532:79;:::o;40290:363::-;1754:12;:10;:12::i;:::-;1744:22;;:6;;;;;;;;;;:22;;;1736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40492:2:::1;40433:55;40480:7;40433:42;40462:12;40433:24;40444:12;40433:6;:10;;:24;;;;:::i;:::-;:28;;:42;;;;:::i;:::-;:46;;:55;;;;:::i;:::-;:61;;40425:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;40532:6;40522:7;:16;;;;40565:12;40549:13;:28;;;;40604:12;40588:13;:28;;;;40638:7;40627:8;:18;;;;40290:363:::0;;;;:::o;23505:87::-;23544:13;23577:7;23570:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23505:87;:::o;25042:269::-;25135:4;25152:129;25161:12;:10;:12::i;:::-;25175:7;25184:96;25223:15;25184:96;;;;;;;;;;;;;;;;;:11;:25;25196:12;:10;:12::i;:::-;25184:25;;;;;;;;;;;;;;;:34;25210:7;25184:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;25152:8;:129::i;:::-;25299:4;25292:11;;25042:269;;;;:::o;3197:305::-;3267:10;3249:28;;:14;;;;;;;;;;;:28;;;3241:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;3354:9;;3336:15;:27;3328:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;3445:14;;;;;;;;;;;3416:44;;3437:6;;;;;;;;;;3416:44;;;;;;;;;;;;3480:14;;;;;;;;;;;3471:6;;:23;;;;;;;;;;;;;;;;;;3197:305::o;24000:167::-;24078:4;24095:42;24105:12;:10;:12::i;:::-;24119:9;24130:6;24095:9;:42::i;:::-;24155:4;24148:11;;24000:167;;;;:::o;40154:125::-;1754:12;:10;:12::i;:::-;1744:22;;:6;;;;;;;;;;:22;;;1736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40262:9:::1;40244:15;;:27;;;;;;;;;;;;;;;;;;40154:125:::0;:::o;2730:89::-;2775:7;2802:9;;2795:16;;2730:89;:::o;21832:27::-;;;;:::o;41010:171::-;1754:12;:10;:12::i;:::-;1744:22;;:6;;;;;;;;;;:22;;;1736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;41111:8:::1;41087:21;;:32;;;;;;;;;;;;;;;;;;41135:38;41164:8;41135:38;;;;;;:::i;:::-;;;;;;;;41010:171:::0;:::o;21996:57::-;;;;:::o;2895:226::-;1754:12;:10;:12::i;:::-;1744:22;;:6;;;;;;;;;;:22;;;1736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2976:6:::1;::::0;::::1;;;;;;;;2959:14;;:23;;;;;;;;;;;;;;;;;;3010:1;2993:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;3053:4;3035:15;:22;;;;:::i;:::-;3023:9;:34;;;;3110:1;3073:40;;3094:6;::::0;::::1;;;;;;;;3073:40;;;;;;;;;;;;2895:226:::0;:::o;24175:143::-;24256:7;24283:11;:18;24295:5;24283:18;;;;;;;;;;;;;;;:27;24302:7;24283:27;;;;;;;;;;;;;;;;24276:34;;24175:143;;;;:::o;39913:110::-;1754:12;:10;:12::i;:::-;1744:22;;:6;;;;;;;;;;:22;;;1736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40010:5:::1;39980:18;:27;39999:7;39980:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;39913:110:::0;:::o;2478:244::-;1754:12;:10;:12::i;:::-;1744:22;;:6;;;;;;;;;;:22;;;1736:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;2587:1:::1;2567:22;;:8;:22;;;;2559:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2677:8;2648:38;;2669:6;::::0;::::1;;;;;;;;2648:38;;;;;;;;;;;;2706:8;2697:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;2478:244:::0;:::o;101:115::-;154:15;197:10;182:26;;101:115;:::o;31607:337::-;31717:1;31700:19;;:5;:19;;;;31692:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31798:1;31779:21;;:7;:21;;;;31771:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31882:6;31852:11;:18;31864:5;31852:18;;;;;;;;;;;;;;;:27;31871:7;31852:27;;;;;;;;;;;;;;;:36;;;;31920:7;31904:32;;31913:5;31904:32;;;31929:6;31904:32;;;;;;:::i;:::-;;;;;;;;31607:337;;;:::o;31952:1145::-;32090:1;32074:18;;:4;:18;;;;32066:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32162:1;32153:6;:10;32145:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32504:28;32535:24;32553:4;32535:9;:24::i;:::-;32504:55;;32578:24;32629:23;;32605:20;:47;;32578:74;;32681:19;:53;;;;;32718:16;;;;;;;;;;;32717:17;32681:53;:89;;;;;32757:13;;;;;;;;;;;32751:19;;:2;:19;;;32681:89;:127;;;;;32787:21;;;;;;;;;;;32681:127;32663:310;;;32858:23;;32835:46;;32925:36;32940:20;32925:14;:36::i;:::-;32663:310;33059:30;33074:4;33079:2;33082:6;33059:14;:30::i;:::-;32055:1042;;31952:1145;;;:::o;5137:192::-;5223:7;5256:1;5251;:6;;5259:12;5243:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5283:9;5299:1;5295;:5;;;;:::i;:::-;5283:17;;5320:1;5313:8;;;5137:192;;;;;:::o;29372:163::-;29413:7;29434:15;29451;29470:19;:17;:19::i;:::-;29433:56;;;;29507:20;29519:7;29507;:11;;:20;;;;:::i;:::-;29500:27;;;;29372:163;:::o;5816:132::-;5874:7;5901:39;5905:1;5908;5901:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5894:46;;5816:132;;;;:::o;4801:181::-;4859:7;4879:9;4895:1;4891;:5;;;;:::i;:::-;4879:17;;4920:1;4915;:6;;4907:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4973:1;4966:8;;;4801:181;;;;:::o;28170:419::-;28229:7;28238;28247;28256;28265;28274;28295:23;28320:12;28334:18;28356:20;28368:7;28356:11;:20::i;:::-;28294:82;;;;;;28388:15;28405:23;28430:12;28446:50;28458:7;28467:4;28473:10;28485;:8;:10::i;:::-;28446:11;:50::i;:::-;28387:109;;;;;;28515:7;28524:15;28541:4;28547:15;28564:4;28570:10;28507:74;;;;;;;;;;;;;;;;;;28170:419;;;;;;;:::o;4993:136::-;5051:7;5078:43;5082:1;5085;5078:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5071:50;;4993:136;;;;:::o;33105:1311::-;22600:4;22581:16;;:23;;;;;;;;;;;;;;;;;;33223:26:::1;33252:77;33296:32;33314:13;;33296;;:17;;:32;;;;:::i;:::-;33252:39;33277:13;;33252:20;:24;;:39;;;;:::i;:::-;:43;;:77;;;;:::i;:::-;33223:106;;33401:12;33416:25;33439:1;33416:18;:22;;:25;;;;:::i;:::-;33401:40;;33452:17;33472:28;33495:4;33472:18;:22;;:28;;;;:::i;:::-;33452:48;;33778:22;33803:21;33778:46;;33869:22;33886:4;33869:16;:22::i;:::-;34022:18;34043:41;34069:14;34043:21;:25;;:41;;;;:::i;:::-;34022:62;;34134:35;34147:9;34158:10;34134:12;:35::i;:::-;34219:62;34236:44;34261:18;34236:20;:24;;:44;;;;:::i;:::-;34219:16;:62::i;:::-;34292:15;;;;;;;;;;;:24;;:47;34317:21;34292:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;34365:43;34380:4;34386:10;34398:9;34365:43;;;;;;;;:::i;:::-;;;;;;;;33179:1237;;;;;22646:5:::0;22627:16;;:24;;;;;;;;;;;;;;;;;;33105:1311;:::o;35615:1096::-;35718:18;:26;35737:6;35718:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;35748:18;:29;35767:9;35748:29;;;;;;;;;;;;;;;;;;;;;;;;;35718:59;35715:245;;;35805:14;:12;:14::i;:::-;35715:245;;;35891:12;;35881:6;:22;;35873:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;35715:245;35976:11;:19;35988:6;35976:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;36000:11;:22;36012:9;36000:22;;;;;;;;;;;;;;;;;;;;;;;;;35999:23;35976:46;35972:597;;;36039:48;36061:6;36069:9;36080:6;36039:21;:48::i;:::-;35972:597;;;36110:11;:19;36122:6;36110:19;;;;;;;;;;;;;;;;;;;;;;;;;36109:20;:46;;;;;36133:11;:22;36145:9;36133:22;;;;;;;;;;;;;;;;;;;;;;;;;36109:46;36105:464;;;36172:46;36192:6;36200:9;36211:6;36172:19;:46::i;:::-;36105:464;;;36241:11;:19;36253:6;36241:19;;;;;;;;;;;;;;;;;;;;;;;;;36240:20;:47;;;;;36265:11;:22;36277:9;36265:22;;;;;;;;;;;;;;;;;;;;;;;;;36264:23;36240:47;36236:333;;;36304:44;36322:6;36330:9;36341:6;36304:17;:44::i;:::-;36236:333;;;36370:11;:19;36382:6;36370:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;36393:11;:22;36405:9;36393:22;;;;;;;;;;;;;;;;;;;;;;;;;36370:45;36366:203;;;36432:48;36454:6;36462:9;36473:6;36432:21;:48::i;:::-;36366:203;;;36513:44;36531:6;36539:9;36550:6;36513:17;:44::i;:::-;36366:203;36236:333;36105:464;35972:597;36592:18;:26;36611:6;36592:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;36622:18;:29;36641:9;36622:29;;;;;;;;;;;;;;;;;;;;;;;;;36592:59;36589:115;;;36677:15;:13;:15::i;:::-;36589:115;35615:1096;;;:::o;29543:561::-;29593:7;29602;29622:15;29640:7;;29622:25;;29658:15;29676:7;;29658:25;;29705:9;29700:289;29724:9;:16;;;;29720:1;:20;29700:289;;;29790:7;29766;:21;29774:9;29784:1;29774:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29766:21;;;;;;;;;;;;;;;;:31;:66;;;;29825:7;29801;:21;29809:9;29819:1;29809:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29801:21;;;;;;;;;;;;;;;;:31;29766:66;29762:97;;;29842:7;;29851;;29834:25;;;;;;;;;29762:97;29884:34;29896:7;:21;29904:9;29914:1;29904:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29896:21;;;;;;;;;;;;;;;;29884:7;:11;;:34;;;;:::i;:::-;29874:44;;29943:34;29955:7;:21;29963:9;29973:1;29963:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29955:21;;;;;;;;;;;;;;;;29943:7;:11;;:34;;;;:::i;:::-;29933:44;;29742:3;;;;;:::i;:::-;;;;29700:289;;;;30013:20;30025:7;;30013;;:11;;:20;;;;:::i;:::-;30003:7;:30;29999:61;;;30043:7;;30052;;30035:25;;;;;;;;29999:61;30079:7;30088;30071:25;;;;;;29543:561;;;:::o;5956:278::-;6042:7;6074:1;6070;:5;6077:12;6062:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6101:9;6117:1;6113;:5;;;;:::i;:::-;6101:17;;6225:1;6218:8;;;5956:278;;;;;:::o;28597:330::-;28657:7;28666;28675;28695:12;28710:24;28726:7;28710:15;:24::i;:::-;28695:39;;28745:18;28766:30;28788:7;28766:21;:30::i;:::-;28745:51;;28807:23;28833:33;28855:10;28833:17;28845:4;28833:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;28807:59;;28885:15;28902:4;28908:10;28877:42;;;;;;;;;28597:330;;;;;:::o;28935:429::-;29050:7;29059;29068;29088:15;29106:24;29118:11;29106:7;:11;;:24;;;;:::i;:::-;29088:42;;29141:12;29156:21;29165:11;29156:4;:8;;:21;;;;:::i;:::-;29141:36;;29188:18;29209:27;29224:11;29209:10;:14;;:27;;;;:::i;:::-;29188:48;;29247:23;29273:33;29295:10;29273:17;29285:4;29273:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;29247:59;;29325:7;29334:15;29351:4;29317:39;;;;;;;;;;28935:429;;;;;;;;:::o;5337:471::-;5395:7;5645:1;5640;:6;5636:47;;;5670:1;5663:8;;;;5636:47;5695:9;5711:1;5707;:5;;;;:::i;:::-;5695:17;;5740:1;5735;5731;:5;;;;:::i;:::-;:10;5723:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5799:1;5792:8;;;5337:471;;;;;:::o;34424:589::-;34550:21;34588:1;34574:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34550:40;;34619:4;34601;34606:1;34601:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34645:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34635:4;34640:1;34635:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;34680:62;34697:4;34712:15;;;;;;;;;;;34730:11;34680:8;:62::i;:::-;34781:15;;;;;;;;;;;:66;;;34862:11;34888:1;34932:4;34959;34979:15;34781:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34479:534;34424:589;:::o;35021:513::-;35169:62;35186:4;35201:15;;;;;;;;;;;35219:11;35169:8;:62::i;:::-;35274:15;;;;;;;;;;;:31;;;35313:9;35346:4;35366:11;35392:1;35435;35478:7;:5;:7::i;:::-;35500:15;35274:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;35021:513;;:::o;30823:422::-;30880:1;30869:7;;:12;:34;;;;;30902:1;30885:13;;:18;30869:34;:54;;;;;30922:1;30907:13;;:16;30869:54;:69;;;;;30937:1;30927:8;;:11;30869:69;30866:81;;;30940:7;;30866:81;30985:7;;30967:15;:25;;;;31027:13;;31003:21;:37;;;;31070:8;;31051:16;:27;;;;31113:13;;31089:21;:37;;;;31157:1;31147:7;:11;;;;31185:1;31169:13;:17;;;;31213:1;31197:13;:17;;;;31236:1;31225:8;:12;;;;30823:422;:::o;38745:566::-;38848:15;38865:23;38890:12;38904:23;38929:12;38943:18;38965:19;38976:7;38965:10;:19::i;:::-;38847:137;;;;;;;;;;;;39013:28;39033:7;39013;:15;39021:6;39013:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;38995:7;:15;39003:6;38995:15;;;;;;;;;;;;;;;:46;;;;39070:28;39090:7;39070;:15;39078:6;39070:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;39052:7;:15;39060:6;39052:15;;;;;;;;;;;;;;;:46;;;;39130:39;39153:15;39130:7;:18;39138:9;39130:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;39109:7;:18;39117:9;39109:18;;;;;;;;;;;;;;;:60;;;;39183:26;39198:10;39183:14;:26::i;:::-;39220:23;39232:4;39238;39220:11;:23::i;:::-;39276:9;39259:44;;39268:6;39259:44;;;39287:15;39259:44;;;;;;:::i;:::-;;;;;;;;38836:475;;;;;;38745:566;;;:::o;39319:586::-;39420:15;39437:23;39462:12;39476:23;39501:12;39515:18;39537:19;39548:7;39537:10;:19::i;:::-;39419:137;;;;;;;;;;;;39585:28;39605:7;39585;:15;39593:6;39585:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;39567:7;:15;39575:6;39567:15;;;;;;;;;;;;;;;:46;;;;39645:39;39668:15;39645:7;:18;39653:9;39645:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;39624:7;:18;39632:9;39624:18;;;;;;;;;;;;;;;:60;;;;39716:39;39739:15;39716:7;:18;39724:9;39716:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;39695:7;:18;39703:9;39695:18;;;;;;;;;;;;;;;:60;;;;39777:26;39792:10;39777:14;:26::i;:::-;39814:23;39826:4;39832;39814:11;:23::i;:::-;39870:9;39853:44;;39862:6;39853:44;;;39881:15;39853:44;;;;;;:::i;:::-;;;;;;;;39408:497;;;;;;39319:586;;;:::o;36719:727::-;36824:15;36841:23;36866:12;36880:23;36905:12;36919:18;36941:19;36952:7;36941:10;:19::i;:::-;36823:137;;;;;;;;;;;;37008:59;37017:6;37025:15;37042;37059:7;37008:8;:59::i;:::-;36971:96;;;;;;;;37115:64;37129:6;37137:15;37154;37171:7;37115:13;:64::i;:::-;37078:101;;;;;;;;37208:28;37228:7;37208;:15;37216:6;37208:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;37190:7;:15;37198:6;37190:15;;;;;;;;;;;;;;;:46;;;;37268:39;37291:15;37268:7;:18;37276:9;37268:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;37247:7;:18;37255:9;37247:18;;;;;;;;;;;;;;;:60;;;;37318:26;37333:10;37318:14;:26::i;:::-;37355:23;37367:4;37373;37355:11;:23::i;:::-;37411:9;37394:44;;37403:6;37394:44;;;37422:15;37394:44;;;;;;:::i;:::-;;;;;;;;36812:634;;;;;;36719:727;;;:::o;27365:642::-;27468:15;27485:23;27510:12;27524:23;27549:12;27563:18;27585:19;27596:7;27585:10;:19::i;:::-;27467:137;;;;;;;;;;;;27633:28;27653:7;27633;:15;27641:6;27633:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27615:7;:15;27623:6;27615:15;;;;;;;;;;;;;;;:46;;;;27690:28;27710:7;27690;:15;27698:6;27690:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;27672:7;:15;27680:6;27672:15;;;;;;;;;;;;;;;:46;;;;27750:39;27773:15;27750:7;:18;27758:9;27750:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27729:7;:18;27737:9;27729:18;;;;;;;;;;;;;;;:60;;;;27821:39;27844:15;27821:7;:18;27829:9;27821:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;27800:7;:18;27808:9;27800:18;;;;;;;;;;;;;;;:60;;;;27879:26;27894:10;27879:14;:26::i;:::-;27916:23;27928:4;27934;27916:11;:23::i;:::-;27972:9;27955:44;;27964:6;27955:44;;;27983:15;27955:44;;;;;;:::i;:::-;;;;;;;;27456:551;;;;;;27365:642;;;:::o;31257:207::-;31310:15;;31300:7;:25;;;;31351:21;;31335:13;:37;;;;31393:16;;31382:8;:27;;;;31435:21;;31419:13;:37;;;;31257:207::o;30483:154::-;30547:7;30574:55;30613:5;30574:20;30586:7;;30574;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;30567:62;;30483:154;;;:::o;30645:166::-;30715:7;30742:61;30787:5;30742:26;30754:13;;30742:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;30735:68;;30645:166;;;:::o;30116:355::-;30179:19;30202:10;:8;:10::i;:::-;30179:33;;30223:18;30244:27;30259:11;30244:10;:14;;:27;;;;:::i;:::-;30223:48;;30307:38;30334:10;30307:7;:22;30323:4;30307:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;30282:7;:22;30298:4;30282:22;;;;;;;;;;;;;;;:63;;;;30359:11;:26;30379:4;30359:26;;;;;;;;;;;;;;;;;;;;;;;;;30356:107;;;30425:38;30452:10;30425:7;:22;30441:4;30425:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;30400:7;:22;30416:4;30400:22;;;;;;;;;;;;;;;:63;;;;30356:107;30168:303;;30116:355;:::o;28015:147::-;28093:17;28105:4;28093:7;;:11;;:17;;;;:::i;:::-;28083:7;:27;;;;28134:20;28149:4;28134:10;;:14;;:20;;;;:::i;:::-;28121:10;:33;;;;28015:147;;:::o;38128:609::-;38251:7;38260;38298:1;38288:8;;:11;38285:62;;;38311:15;38328;38304:40;;;;;;38285:62;38357:13;38373:30;38394:8;;38373:16;38385:3;38373:7;:11;;:16;;;;:::i;:::-;:20;;:30;;;;:::i;:::-;38357:46;;38414:13;38430:21;38440:10;:8;:10::i;:::-;38430:5;:9;;:21;;;;:::i;:::-;38414:37;;38480:26;38500:5;38480:15;:19;;:26;;;;:::i;:::-;38462:44;;38535:26;38555:5;38535:15;:19;;:26;;;;:::i;:::-;38517:44;;38595:31;38620:5;38595:7;:20;38603:11;;;;;;;;;;;38595:20;;;;;;;;;;;;;;;;:24;;:31;;;;:::i;:::-;38572:7;:20;38580:11;;;;;;;;;;;38572:20;;;;;;;;;;;;;;;:54;;;;38659:11;;;;;;;;;;;38642:36;;38651:6;38642:36;;;38672:5;38642:36;;;;;;:::i;:::-;;;;;;;;38696:15;38713;38689:40;;;;;;38128:609;;;;;;;;:::o;37454:666::-;37582:7;37591;37634:1;37619:13;;:16;37616:67;;;37647:15;37664;37640:40;;;;;;37616:67;37693:18;37714:35;37735:13;;37714:16;37726:3;37714:7;:11;;:16;;;;:::i;:::-;:20;;:35;;;;:::i;:::-;37693:56;;37760:18;37781:26;37796:10;:8;:10::i;:::-;37781;:14;;:26;;;;:::i;:::-;37760:47;;37836:31;37856:10;37836:15;:19;;:31;;;;:::i;:::-;37818:49;;37896:31;37916:10;37896:15;:19;;:31;;;;:::i;:::-;37878:49;;37963:38;37990:10;37963:7;:22;37979:4;37963:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37938:7;:22;37954:4;37938:22;;;;;;;;;;;;;;;:63;;;;38042:4;38017:43;;38026:6;38017:43;;;38049:10;38017:43;;;;;;:::i;:::-;;;;;;;;38078:15;38095;38071:40;;;;;;37454:666;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:143::-;209:5;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;152:143;;;;:::o;301:155::-;355:5;393:6;380:20;371:29;;409:41;444:5;409:41;:::i;:::-;301:155;;;;:::o;462:133::-;505:5;543:6;530:20;521:29;;559:30;583:5;559:30;:::i;:::-;462:133;;;;:::o;601:139::-;647:5;685:6;672:20;663:29;;701:33;728:5;701:33;:::i;:::-;601:139;;;;:::o;746:143::-;803:5;834:6;828:13;819:22;;850:33;877:5;850:33;:::i;:::-;746:143;;;;:::o;895:329::-;954:6;1003:2;991:9;982:7;978:23;974:32;971:119;;;1009:79;;:::i;:::-;971:119;1129:1;1154:53;1199:7;1190:6;1179:9;1175:22;1154:53;:::i;:::-;1144:63;;1100:117;895:329;;;;:::o;1230:351::-;1300:6;1349:2;1337:9;1328:7;1324:23;1320:32;1317:119;;;1355:79;;:::i;:::-;1317:119;1475:1;1500:64;1556:7;1547:6;1536:9;1532:22;1500:64;:::i;:::-;1490:74;;1446:128;1230:351;;;;:::o;1587:345::-;1654:6;1703:2;1691:9;1682:7;1678:23;1674:32;1671:119;;;1709:79;;:::i;:::-;1671:119;1829:1;1854:61;1907:7;1898:6;1887:9;1883:22;1854:61;:::i;:::-;1844:71;;1800:125;1587:345;;;;:::o;1938:474::-;2006:6;2014;2063:2;2051:9;2042:7;2038:23;2034:32;2031:119;;;2069:79;;:::i;:::-;2031:119;2189:1;2214:53;2259:7;2250:6;2239:9;2235:22;2214:53;:::i;:::-;2204:63;;2160:117;2316:2;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2287:118;1938:474;;;;;:::o;2418:619::-;2495:6;2503;2511;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:53;2756:7;2747:6;2736:9;2732:22;2711:53;:::i;:::-;2701:63;;2657:117;2813:2;2839:53;2884:7;2875:6;2864:9;2860:22;2839:53;:::i;:::-;2829:63;;2784:118;2941:2;2967:53;3012:7;3003:6;2992:9;2988:22;2967:53;:::i;:::-;2957:63;;2912:118;2418:619;;;;;:::o;3043:474::-;3111:6;3119;3168:2;3156:9;3147:7;3143:23;3139:32;3136:119;;;3174:79;;:::i;:::-;3136:119;3294:1;3319:53;3364:7;3355:6;3344:9;3340:22;3319:53;:::i;:::-;3309:63;;3265:117;3421:2;3447:53;3492:7;3483:6;3472:9;3468:22;3447:53;:::i;:::-;3437:63;;3392:118;3043:474;;;;;:::o;3523:323::-;3579:6;3628:2;3616:9;3607:7;3603:23;3599:32;3596:119;;;3634:79;;:::i;:::-;3596:119;3754:1;3779:50;3821:7;3812:6;3801:9;3797:22;3779:50;:::i;:::-;3769:60;;3725:114;3523:323;;;;:::o;3852:329::-;3911:6;3960:2;3948:9;3939:7;3935:23;3931:32;3928:119;;;3966:79;;:::i;:::-;3928:119;4086:1;4111:53;4156:7;4147:6;4136:9;4132:22;4111:53;:::i;:::-;4101:63;;4057:117;3852:329;;;;:::o;4187:468::-;4252:6;4260;4309:2;4297:9;4288:7;4284:23;4280:32;4277:119;;;4315:79;;:::i;:::-;4277:119;4435:1;4460:53;4505:7;4496:6;4485:9;4481:22;4460:53;:::i;:::-;4450:63;;4406:117;4562:2;4588:50;4630:7;4621:6;4610:9;4606:22;4588:50;:::i;:::-;4578:60;;4533:115;4187:468;;;;;:::o;4661:663::-;4749:6;4757;4765;4814:2;4802:9;4793:7;4789:23;4785:32;4782:119;;;4820:79;;:::i;:::-;4782:119;4940:1;4965:64;5021:7;5012:6;5001:9;4997:22;4965:64;:::i;:::-;4955:74;;4911:128;5078:2;5104:64;5160:7;5151:6;5140:9;5136:22;5104:64;:::i;:::-;5094:74;;5049:129;5217:2;5243:64;5299:7;5290:6;5279:9;5275:22;5243:64;:::i;:::-;5233:74;;5188:129;4661:663;;;;;:::o;5330:765::-;5416:6;5424;5432;5440;5489:3;5477:9;5468:7;5464:23;5460:33;5457:120;;;5496:79;;:::i;:::-;5457:120;5616:1;5641:53;5686:7;5677:6;5666:9;5662:22;5641:53;:::i;:::-;5631:63;;5587:117;5743:2;5769:53;5814:7;5805:6;5794:9;5790:22;5769:53;:::i;:::-;5759:63;;5714:118;5871:2;5897:53;5942:7;5933:6;5922:9;5918:22;5897:53;:::i;:::-;5887:63;;5842:118;5999:2;6025:53;6070:7;6061:6;6050:9;6046:22;6025:53;:::i;:::-;6015:63;;5970:118;5330:765;;;;;;;:::o;6101:179::-;6170:10;6191:46;6233:3;6225:6;6191:46;:::i;:::-;6269:4;6264:3;6260:14;6246:28;;6101:179;;;;:::o;6286:142::-;6389:32;6415:5;6389:32;:::i;:::-;6384:3;6377:45;6286:142;;:::o;6434:108::-;6511:24;6529:5;6511:24;:::i;:::-;6506:3;6499:37;6434:108;;:::o;6548:118::-;6635:24;6653:5;6635:24;:::i;:::-;6630:3;6623:37;6548:118;;:::o;6702:732::-;6821:3;6850:54;6898:5;6850:54;:::i;:::-;6920:86;6999:6;6994:3;6920:86;:::i;:::-;6913:93;;7030:56;7080:5;7030:56;:::i;:::-;7109:7;7140:1;7125:284;7150:6;7147:1;7144:13;7125:284;;;7226:6;7220:13;7253:63;7312:3;7297:13;7253:63;:::i;:::-;7246:70;;7339:60;7392:6;7339:60;:::i;:::-;7329:70;;7185:224;7172:1;7169;7165:9;7160:14;;7125:284;;;7129:14;7425:3;7418:10;;6826:608;;;6702:732;;;;:::o;7440:109::-;7521:21;7536:5;7521:21;:::i;:::-;7516:3;7509:34;7440:109;;:::o;7555:185::-;7669:64;7727:5;7669:64;:::i;:::-;7664:3;7657:77;7555:185;;:::o;7746:147::-;7841:45;7880:5;7841:45;:::i;:::-;7836:3;7829:58;7746:147;;:::o;7899:364::-;7987:3;8015:39;8048:5;8015:39;:::i;:::-;8070:71;8134:6;8129:3;8070:71;:::i;:::-;8063:78;;8150:52;8195:6;8190:3;8183:4;8176:5;8172:16;8150:52;:::i;:::-;8227:29;8249:6;8227:29;:::i;:::-;8222:3;8218:39;8211:46;;7991:272;7899:364;;;;:::o;8269:366::-;8411:3;8432:67;8496:2;8491:3;8432:67;:::i;:::-;8425:74;;8508:93;8597:3;8508:93;:::i;:::-;8626:2;8621:3;8617:12;8610:19;;8269:366;;;:::o;8641:::-;8783:3;8804:67;8868:2;8863:3;8804:67;:::i;:::-;8797:74;;8880:93;8969:3;8880:93;:::i;:::-;8998:2;8993:3;8989:12;8982:19;;8641:366;;;:::o;9013:::-;9155:3;9176:67;9240:2;9235:3;9176:67;:::i;:::-;9169:74;;9252:93;9341:3;9252:93;:::i;:::-;9370:2;9365:3;9361:12;9354:19;;9013:366;;;:::o;9385:::-;9527:3;9548:67;9612:2;9607:3;9548:67;:::i;:::-;9541:74;;9624:93;9713:3;9624:93;:::i;:::-;9742:2;9737:3;9733:12;9726:19;;9385:366;;;:::o;9757:::-;9899:3;9920:67;9984:2;9979:3;9920:67;:::i;:::-;9913:74;;9996:93;10085:3;9996:93;:::i;:::-;10114:2;10109:3;10105:12;10098:19;;9757:366;;;:::o;10129:::-;10271:3;10292:67;10356:2;10351:3;10292:67;:::i;:::-;10285:74;;10368:93;10457:3;10368:93;:::i;:::-;10486:2;10481:3;10477:12;10470:19;;10129:366;;;:::o;10501:::-;10643:3;10664:67;10728:2;10723:3;10664:67;:::i;:::-;10657:74;;10740:93;10829:3;10740:93;:::i;:::-;10858:2;10853:3;10849:12;10842:19;;10501:366;;;:::o;10873:::-;11015:3;11036:67;11100:2;11095:3;11036:67;:::i;:::-;11029:74;;11112:93;11201:3;11112:93;:::i;:::-;11230:2;11225:3;11221:12;11214:19;;10873:366;;;:::o;11245:::-;11387:3;11408:67;11472:2;11467:3;11408:67;:::i;:::-;11401:74;;11484:93;11573:3;11484:93;:::i;:::-;11602:2;11597:3;11593:12;11586:19;;11245:366;;;:::o;11617:::-;11759:3;11780:67;11844:2;11839:3;11780:67;:::i;:::-;11773:74;;11856:93;11945:3;11856:93;:::i;:::-;11974:2;11969:3;11965:12;11958:19;;11617:366;;;:::o;11989:::-;12131:3;12152:67;12216:2;12211:3;12152:67;:::i;:::-;12145:74;;12228:93;12317:3;12228:93;:::i;:::-;12346:2;12341:3;12337:12;12330:19;;11989:366;;;:::o;12361:::-;12503:3;12524:67;12588:2;12583:3;12524:67;:::i;:::-;12517:74;;12600:93;12689:3;12600:93;:::i;:::-;12718:2;12713:3;12709:12;12702:19;;12361:366;;;:::o;12733:::-;12875:3;12896:67;12960:2;12955:3;12896:67;:::i;:::-;12889:74;;12972:93;13061:3;12972:93;:::i;:::-;13090:2;13085:3;13081:12;13074:19;;12733:366;;;:::o;13105:::-;13247:3;13268:67;13332:2;13327:3;13268:67;:::i;:::-;13261:74;;13344:93;13433:3;13344:93;:::i;:::-;13462:2;13457:3;13453:12;13446:19;;13105:366;;;:::o;13477:::-;13619:3;13640:67;13704:2;13699:3;13640:67;:::i;:::-;13633:74;;13716:93;13805:3;13716:93;:::i;:::-;13834:2;13829:3;13825:12;13818:19;;13477:366;;;:::o;13849:::-;13991:3;14012:67;14076:2;14071:3;14012:67;:::i;:::-;14005:74;;14088:93;14177:3;14088:93;:::i;:::-;14206:2;14201:3;14197:12;14190:19;;13849:366;;;:::o;14221:::-;14363:3;14384:67;14448:2;14443:3;14384:67;:::i;:::-;14377:74;;14460:93;14549:3;14460:93;:::i;:::-;14578:2;14573:3;14569:12;14562:19;;14221:366;;;:::o;14593:118::-;14680:24;14698:5;14680:24;:::i;:::-;14675:3;14668:37;14593:118;;:::o;14717:112::-;14800:22;14816:5;14800:22;:::i;:::-;14795:3;14788:35;14717:112;;:::o;14835:222::-;14928:4;14966:2;14955:9;14951:18;14943:26;;14979:71;15047:1;15036:9;15032:17;15023:6;14979:71;:::i;:::-;14835:222;;;;:::o;15063:254::-;15172:4;15210:2;15199:9;15195:18;15187:26;;15223:87;15307:1;15296:9;15292:17;15283:6;15223:87;:::i;:::-;15063:254;;;;:::o;15323:807::-;15572:4;15610:3;15599:9;15595:19;15587:27;;15624:71;15692:1;15681:9;15677:17;15668:6;15624:71;:::i;:::-;15705:72;15773:2;15762:9;15758:18;15749:6;15705:72;:::i;:::-;15787:80;15863:2;15852:9;15848:18;15839:6;15787:80;:::i;:::-;15877;15953:2;15942:9;15938:18;15929:6;15877:80;:::i;:::-;15967:73;16035:3;16024:9;16020:19;16011:6;15967:73;:::i;:::-;16050;16118:3;16107:9;16103:19;16094:6;16050:73;:::i;:::-;15323:807;;;;;;;;;:::o;16136:210::-;16223:4;16261:2;16250:9;16246:18;16238:26;;16274:65;16336:1;16325:9;16321:17;16312:6;16274:65;:::i;:::-;16136:210;;;;:::o;16352:276::-;16472:4;16510:2;16499:9;16495:18;16487:26;;16523:98;16618:1;16607:9;16603:17;16594:6;16523:98;:::i;:::-;16352:276;;;;:::o;16634:313::-;16747:4;16785:2;16774:9;16770:18;16762:26;;16834:9;16828:4;16824:20;16820:1;16809:9;16805:17;16798:47;16862:78;16935:4;16926:6;16862:78;:::i;:::-;16854:86;;16634:313;;;;:::o;16953:419::-;17119:4;17157:2;17146:9;17142:18;17134:26;;17206:9;17200:4;17196:20;17192:1;17181:9;17177:17;17170:47;17234:131;17360:4;17234:131;:::i;:::-;17226:139;;16953:419;;;:::o;17378:::-;17544:4;17582:2;17571:9;17567:18;17559:26;;17631:9;17625:4;17621:20;17617:1;17606:9;17602:17;17595:47;17659:131;17785:4;17659:131;:::i;:::-;17651:139;;17378:419;;;:::o;17803:::-;17969:4;18007:2;17996:9;17992:18;17984:26;;18056:9;18050:4;18046:20;18042:1;18031:9;18027:17;18020:47;18084:131;18210:4;18084:131;:::i;:::-;18076:139;;17803:419;;;:::o;18228:::-;18394:4;18432:2;18421:9;18417:18;18409:26;;18481:9;18475:4;18471:20;18467:1;18456:9;18452:17;18445:47;18509:131;18635:4;18509:131;:::i;:::-;18501:139;;18228:419;;;:::o;18653:::-;18819:4;18857:2;18846:9;18842:18;18834:26;;18906:9;18900:4;18896:20;18892:1;18881:9;18877:17;18870:47;18934:131;19060:4;18934:131;:::i;:::-;18926:139;;18653:419;;;:::o;19078:::-;19244:4;19282:2;19271:9;19267:18;19259:26;;19331:9;19325:4;19321:20;19317:1;19306:9;19302:17;19295:47;19359:131;19485:4;19359:131;:::i;:::-;19351:139;;19078:419;;;:::o;19503:::-;19669:4;19707:2;19696:9;19692:18;19684:26;;19756:9;19750:4;19746:20;19742:1;19731:9;19727:17;19720:47;19784:131;19910:4;19784:131;:::i;:::-;19776:139;;19503:419;;;:::o;19928:::-;20094:4;20132:2;20121:9;20117:18;20109:26;;20181:9;20175:4;20171:20;20167:1;20156:9;20152:17;20145:47;20209:131;20335:4;20209:131;:::i;:::-;20201:139;;19928:419;;;:::o;20353:::-;20519:4;20557:2;20546:9;20542:18;20534:26;;20606:9;20600:4;20596:20;20592:1;20581:9;20577:17;20570:47;20634:131;20760:4;20634:131;:::i;:::-;20626:139;;20353:419;;;:::o;20778:::-;20944:4;20982:2;20971:9;20967:18;20959:26;;21031:9;21025:4;21021:20;21017:1;21006:9;21002:17;20995:47;21059:131;21185:4;21059:131;:::i;:::-;21051:139;;20778:419;;;:::o;21203:::-;21369:4;21407:2;21396:9;21392:18;21384:26;;21456:9;21450:4;21446:20;21442:1;21431:9;21427:17;21420:47;21484:131;21610:4;21484:131;:::i;:::-;21476:139;;21203:419;;;:::o;21628:::-;21794:4;21832:2;21821:9;21817:18;21809:26;;21881:9;21875:4;21871:20;21867:1;21856:9;21852:17;21845:47;21909:131;22035:4;21909:131;:::i;:::-;21901:139;;21628:419;;;:::o;22053:::-;22219:4;22257:2;22246:9;22242:18;22234:26;;22306:9;22300:4;22296:20;22292:1;22281:9;22277:17;22270:47;22334:131;22460:4;22334:131;:::i;:::-;22326:139;;22053:419;;;:::o;22478:::-;22644:4;22682:2;22671:9;22667:18;22659:26;;22731:9;22725:4;22721:20;22717:1;22706:9;22702:17;22695:47;22759:131;22885:4;22759:131;:::i;:::-;22751:139;;22478:419;;;:::o;22903:::-;23069:4;23107:2;23096:9;23092:18;23084:26;;23156:9;23150:4;23146:20;23142:1;23131:9;23127:17;23120:47;23184:131;23310:4;23184:131;:::i;:::-;23176:139;;22903:419;;;:::o;23328:::-;23494:4;23532:2;23521:9;23517:18;23509:26;;23581:9;23575:4;23571:20;23567:1;23556:9;23552:17;23545:47;23609:131;23735:4;23609:131;:::i;:::-;23601:139;;23328:419;;;:::o;23753:::-;23919:4;23957:2;23946:9;23942:18;23934:26;;24006:9;24000:4;23996:20;23992:1;23981:9;23977:17;23970:47;24034:131;24160:4;24034:131;:::i;:::-;24026:139;;23753:419;;;:::o;24178:222::-;24271:4;24309:2;24298:9;24294:18;24286:26;;24322:71;24390:1;24379:9;24375:17;24366:6;24322:71;:::i;:::-;24178:222;;;;:::o;24406:831::-;24669:4;24707:3;24696:9;24692:19;24684:27;;24721:71;24789:1;24778:9;24774:17;24765:6;24721:71;:::i;:::-;24802:80;24878:2;24867:9;24863:18;24854:6;24802:80;:::i;:::-;24929:9;24923:4;24919:20;24914:2;24903:9;24899:18;24892:48;24957:108;25060:4;25051:6;24957:108;:::i;:::-;24949:116;;25075:72;25143:2;25132:9;25128:18;25119:6;25075:72;:::i;:::-;25157:73;25225:3;25214:9;25210:19;25201:6;25157:73;:::i;:::-;24406:831;;;;;;;;:::o;25243:442::-;25392:4;25430:2;25419:9;25415:18;25407:26;;25443:71;25511:1;25500:9;25496:17;25487:6;25443:71;:::i;:::-;25524:72;25592:2;25581:9;25577:18;25568:6;25524:72;:::i;:::-;25606;25674:2;25663:9;25659:18;25650:6;25606:72;:::i;:::-;25243:442;;;;;;:::o;25691:214::-;25780:4;25818:2;25807:9;25803:18;25795:26;;25831:67;25895:1;25884:9;25880:17;25871:6;25831:67;:::i;:::-;25691:214;;;;:::o;25992:132::-;26059:4;26082:3;26074:11;;26112:4;26107:3;26103:14;26095:22;;25992:132;;;:::o;26130:114::-;26197:6;26231:5;26225:12;26215:22;;26130:114;;;:::o;26250:99::-;26302:6;26336:5;26330:12;26320:22;;26250:99;;;:::o;26355:113::-;26425:4;26457;26452:3;26448:14;26440:22;;26355:113;;;:::o;26474:184::-;26573:11;26607:6;26602:3;26595:19;26647:4;26642:3;26638:14;26623:29;;26474:184;;;;:::o;26664:169::-;26748:11;26782:6;26777:3;26770:19;26822:4;26817:3;26813:14;26798:29;;26664:169;;;;:::o;26839:305::-;26879:3;26898:20;26916:1;26898:20;:::i;:::-;26893:25;;26932:20;26950:1;26932:20;:::i;:::-;26927:25;;27086:1;27018:66;27014:74;27011:1;27008:81;27005:107;;;27092:18;;:::i;:::-;27005:107;27136:1;27133;27129:9;27122:16;;26839:305;;;;:::o;27150:185::-;27190:1;27207:20;27225:1;27207:20;:::i;:::-;27202:25;;27241:20;27259:1;27241:20;:::i;:::-;27236:25;;27280:1;27270:35;;27285:18;;:::i;:::-;27270:35;27327:1;27324;27320:9;27315:14;;27150:185;;;;:::o;27341:348::-;27381:7;27404:20;27422:1;27404:20;:::i;:::-;27399:25;;27438:20;27456:1;27438:20;:::i;:::-;27433:25;;27626:1;27558:66;27554:74;27551:1;27548:81;27543:1;27536:9;27529:17;27525:105;27522:131;;;27633:18;;:::i;:::-;27522:131;27681:1;27678;27674:9;27663:20;;27341:348;;;;:::o;27695:191::-;27735:4;27755:20;27773:1;27755:20;:::i;:::-;27750:25;;27789:20;27807:1;27789:20;:::i;:::-;27784:25;;27828:1;27825;27822:8;27819:34;;;27833:18;;:::i;:::-;27819:34;27878:1;27875;27871:9;27863:17;;27695:191;;;;:::o;27892:96::-;27929:7;27958:24;27976:5;27958:24;:::i;:::-;27947:35;;27892:96;;;:::o;27994:104::-;28039:7;28068:24;28086:5;28068:24;:::i;:::-;28057:35;;27994:104;;;:::o;28104:90::-;28138:7;28181:5;28174:13;28167:21;28156:32;;28104:90;;;:::o;28200:126::-;28237:7;28277:42;28270:5;28266:54;28255:65;;28200:126;;;:::o;28332:77::-;28369:7;28398:5;28387:16;;28332:77;;;:::o;28415:86::-;28450:7;28490:4;28483:5;28479:16;28468:27;;28415:86;;;:::o;28507:153::-;28584:9;28617:37;28648:5;28617:37;:::i;:::-;28604:50;;28507:153;;;:::o;28666:121::-;28724:9;28757:24;28775:5;28757:24;:::i;:::-;28744:37;;28666:121;;;:::o;28793:126::-;28843:9;28876:37;28907:5;28876:37;:::i;:::-;28863:50;;28793:126;;;:::o;28925:113::-;28975:9;29008:24;29026:5;29008:24;:::i;:::-;28995:37;;28925:113;;;:::o;29044:307::-;29112:1;29122:113;29136:6;29133:1;29130:13;29122:113;;;29221:1;29216:3;29212:11;29206:18;29202:1;29197:3;29193:11;29186:39;29158:2;29155:1;29151:10;29146:15;;29122:113;;;29253:6;29250:1;29247:13;29244:101;;;29333:1;29324:6;29319:3;29315:16;29308:27;29244:101;29093:258;29044:307;;;:::o;29357:320::-;29401:6;29438:1;29432:4;29428:12;29418:22;;29485:1;29479:4;29475:12;29506:18;29496:81;;29562:4;29554:6;29550:17;29540:27;;29496:81;29624:2;29616:6;29613:14;29593:18;29590:38;29587:84;;;29643:18;;:::i;:::-;29587:84;29408:269;29357:320;;;:::o;29683:233::-;29722:3;29745:24;29763:5;29745:24;:::i;:::-;29736:33;;29791:66;29784:5;29781:77;29778:103;;;29861:18;;:::i;:::-;29778:103;29908:1;29901:5;29897:13;29890:20;;29683:233;;;:::o;29922:180::-;29970:77;29967:1;29960:88;30067:4;30064:1;30057:15;30091:4;30088:1;30081:15;30108:180;30156:77;30153:1;30146:88;30253:4;30250:1;30243:15;30277:4;30274:1;30267:15;30294:180;30342:77;30339:1;30332:88;30439:4;30436:1;30429:15;30463:4;30460:1;30453:15;30480:180;30528:77;30525:1;30518:88;30625:4;30622:1;30615:15;30649:4;30646:1;30639:15;30666:180;30714:77;30711:1;30704:88;30811:4;30808:1;30801:15;30835:4;30832:1;30825:15;30852:180;30900:77;30897:1;30890:88;30997:4;30994:1;30987:15;31021:4;31018:1;31011:15;31161:117;31270:1;31267;31260:12;31284:102;31325:6;31376:2;31372:7;31367:2;31360:5;31356:14;31352:28;31342:38;;31284:102;;;:::o;31392:229::-;31532:34;31528:1;31520:6;31516:14;31509:58;31601:12;31596:2;31588:6;31584:15;31577:37;31392:229;:::o;31627:225::-;31767:34;31763:1;31755:6;31751:14;31744:58;31836:8;31831:2;31823:6;31819:15;31812:33;31627:225;:::o;31858:221::-;31998:34;31994:1;31986:6;31982:14;31975:58;32067:4;32062:2;32054:6;32050:15;32043:29;31858:221;:::o;32085:177::-;32225:29;32221:1;32213:6;32209:14;32202:53;32085:177;:::o;32268:::-;32408:29;32404:1;32396:6;32392:14;32385:53;32268:177;:::o;32451:163::-;32591:15;32587:1;32579:6;32575:14;32568:39;32451:163;:::o;32620:181::-;32760:33;32756:1;32748:6;32744:14;32737:57;32620:181;:::o;32807:227::-;32947:34;32943:1;32935:6;32931:14;32924:58;33016:10;33011:2;33003:6;32999:15;32992:35;32807:227;:::o;33040:220::-;33180:34;33176:1;33168:6;33164:14;33157:58;33249:3;33244:2;33236:6;33232:15;33225:28;33040:220;:::o;33266:182::-;33406:34;33402:1;33394:6;33390:14;33383:58;33266:182;:::o;33454:228::-;33594:34;33590:1;33582:6;33578:14;33571:58;33663:11;33658:2;33650:6;33646:15;33639:36;33454:228;:::o;33688:224::-;33828:34;33824:1;33816:6;33812:14;33805:58;33897:7;33892:2;33884:6;33880:15;33873:32;33688:224;:::o;33918:223::-;34058:34;34054:1;34046:6;34042:14;34035:58;34127:6;34122:2;34114:6;34110:15;34103:31;33918:223;:::o;34147:181::-;34287:33;34283:1;34275:6;34271:14;34264:57;34147:181;:::o;34334:162::-;34474:14;34470:1;34462:6;34458:14;34451:38;34334:162;:::o;34502:231::-;34642:34;34638:1;34630:6;34626:14;34619:58;34711:14;34706:2;34698:6;34694:15;34687:39;34502:231;:::o;34739:222::-;34879:34;34875:1;34867:6;34863:14;34856:58;34948:5;34943:2;34935:6;34931:15;34924:30;34739:222;:::o;34967:122::-;35040:24;35058:5;35040:24;:::i;:::-;35033:5;35030:35;35020:63;;35079:1;35076;35069:12;35020:63;34967:122;:::o;35095:138::-;35176:32;35202:5;35176:32;:::i;:::-;35169:5;35166:43;35156:71;;35223:1;35220;35213:12;35156:71;35095:138;:::o;35239:116::-;35309:21;35324:5;35309:21;:::i;:::-;35302:5;35299:32;35289:60;;35345:1;35342;35335:12;35289:60;35239:116;:::o;35361:122::-;35434:24;35452:5;35434:24;:::i;:::-;35427:5;35424:35;35414:63;;35473:1;35470;35463:12;35414:63;35361:122;:::o
Swarm Source
ipfs://8a12a741017846efd1d0bda2b2fd90817fe87bc6d2ee30f3d04b26223227aebf
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.