Token GALAXY
Overview CRC20
Price
$0.00 @ 0.000000 CRO
Fully Diluted Market Cap
Total Supply:
500,000,000 GLXY
Holders:
341 addresses
Contract:
Decimals:
18
Official Site:
Balance
0.068146303909328852 GLXYValue
$0.00
[ Download CSV Export ]
[ Download CSV Export ]
OVERVIEW
B.A.D NFT's are a quality art project with a native token GLXY.Update? Click here to update the token ICO / general information
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
GALAXY
Compiler Version
v0.6.12+commit.27d51765
Contract Source Code (Solidity)
/** *Submitted for verification at cronoscan.com on 2022-09-10 */ // SPDX-License-Identifier: MIT pragma solidity ^0.6.12; interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @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 { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return 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 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); } } } } /** * @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 () internal { 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 = now + 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(now > _lockTime , "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } 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 Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // 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 GALAXY 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 = 500000000 * 10**18; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; string private _name = "GALAXY"; string private _symbol = "GLXY"; uint8 private _decimals = 18; uint256 public _taxFee = 4; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 4; uint256 private _previousLiquidityFee = _liquidityFee; uint256 public _burnFee = 4; uint256 private _previousBurnFee = _burnFee; uint256 public _devFee = 4; address public devWallet; uint256 private _previousDevFee = _devFee; IUniswapV2Router02 public uniswapV2Router; address public uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = false; uint256 private numTokensSellToAddToLiquidity = _tTotal.div(200); event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor (address _ru) public { _rOwned[_msgSender()] = _rTotal; devWallet = _msgSender(); IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(_ru); // 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[address(this)] = true; emit Transfer(address(0), _msgSender(), _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 totalFees() public view returns (uint256) { return _tFeeTotal; } 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(account != 0x05fF2B0DB69458A0750badebc4f9e13aDd608C7F, 'We can not exclude Pancake router.'); 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); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} 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 && _devFee==0 && _burnFee==0) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _previousBurnFee = _burnFee; _previousDevFee = _devFee; _taxFee = 0; _liquidityFee = 0; _devFee = 0; _burnFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; _burnFee = _previousBurnFee; _devFee = _previousDevFee; } 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 >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.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); 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 address(this), 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(); } //Calculate burn amount and charity amount uint256 burnAmt = amount.mul(_burnFee).div(100); uint256 charityAmt = amount.mul(_devFee).div(100); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, (amount.sub(burnAmt).sub(charityAmt))); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, (amount.sub(burnAmt).sub(charityAmt))); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, (amount.sub(burnAmt).sub(charityAmt))); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, (amount.sub(burnAmt).sub(charityAmt))); } else { _transferStandard(sender, recipient, (amount.sub(burnAmt).sub(charityAmt))); } _taxFee = 0; _liquidityFee = 0; _transferStandard(sender, address(0), burnAmt); _transferStandard(sender, devWallet, charityAmt); //Restore tax and liquidity fees _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; 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); _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 _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 excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setdevWallet(address newWallet) external onlyOwner() { devWallet = newWallet; } function setTaxFeePercent(uint256 taxFee) external onlyOwner() { _taxFee = taxFee; } function setLiquidityFeePercent(uint256 liquidityFee) external onlyOwner() { _liquidityFee = liquidityFee; } function setChartityFeePercent(uint256 charityFee) external onlyOwner() { _devFee = charityFee; } function setBurnFeePercent(uint256 burnFee) external onlyOwner() { _burnFee = burnFee; } //New Pancakeswap router version? //No problem, just change it! function setRouterAddress(address newRouter) public onlyOwner() { //Thank you FreezyEx IUniswapV2Router02 _newPancakeRouter = IUniswapV2Router02(newRouter); uniswapV2Pair = IUniswapV2Factory(_newPancakeRouter.factory()).createPair(address(this), _newPancakeRouter.WETH()); uniswapV2Router = _newPancakeRouter; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } function recoverERC20(address tokenAddress, uint256 tokenAmount) external onlyOwner { IERC20(tokenAddress).transfer(owner(), tokenAmount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_ru","type":"address"}],"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":"_devFee","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":"_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":"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":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","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":"uint256","name":"burnFee","type":"uint256"}],"name":"setBurnFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"charityFee","type":"uint256"}],"name":"setChartityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"liquidityFee","type":"uint256"}],"name":"setLiquidityFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"setRouterAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"taxFee","type":"uint256"}],"name":"setTaxFeePercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setdevWallet","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":"totalFees","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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526b019d971e4fe8401e74000000600955600954600019816200002257fe5b0660001903600a556040518060400160405280600681526020017f47414c4158590000000000000000000000000000000000000000000000000000815250600c908051906020019062000077929190620007bf565b506040518060400160405280600481526020017f474c585900000000000000000000000000000000000000000000000000000000815250600d9080519060200190620000c5929190620007bf565b506012600e60006101000a81548160ff021916908360ff1602179055506004600f55600f546010556004601155601154601255600460135560135460145560046015556015546017556000601960156101000a81548160ff0219169083151502179055506200014660c86009546200067160201b620034141790919060201c565b601a553480156200015657600080fd5b506040516200605338038062006053833981810160405260208110156200017c57600080fd5b810190808051906020019092919050505060006200019f620006c360201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a546003600062000254620006c360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002a2620006c360201b60201c565b601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200032e57600080fd5b505afa15801562000343573d6000803e3d6000fd5b505050506040513d60208110156200035a57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003ce57600080fd5b505afa158015620003e3573d6000803e3d6000fd5b505050506040513d6020811015620003fa57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b1580156200047557600080fd5b505af11580156200048a573d6000803e3d6000fd5b505050506040513d6020811015620004a157600080fd5b8101908080519060200190929190505050601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016006600062000549620006cb60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000602620006c360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040518082815260200191505060405180910390a3505062000865565b6000620006bb83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250620006f460201b60201c565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60008083118290620007a4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015620007685780820151818401526020810190506200074b565b50505050905090810190601f168015620007965780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581620007b157fe5b049050809150509392505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200080257805160ff191683800117855562000833565b8280016001018555821562000833579182015b828111156200083257825182559160200191906001019062000815565b5b50905062000842919062000846565b5090565b5b808211156200086157600081600090555060010162000847565b5090565b6157de80620008756000396000f3fe6080604052600436106102605760003560e01c80636d94581411610144578063a69df4b5116100b6578063c49b9a801161007a578063c49b9a8014610d54578063cea2695814610d91578063dd46706414610dcc578063dd62ed3e14610e07578063ea2f0b3714610e8c578063f2fde38b14610edd57610267565b8063a69df4b514610c4b578063a9059cbb14610c62578063aa45026b14610cd3578063b6c5232414610cfe578063c0b0fda214610d2957610267565b80638da5cb5b116101085780638da5cb5b14610a3c5780638ea5220f14610a7d5780638ee88c5314610abe57806395d89b4114610af957806395f4d08814610b89578063a457c2d714610bda57610267565b80636d945814146108c357806370a08231146108fe578063715018a61461096357806388f820201461097a5780638980f11f146109e157610267565b806339509351116101dd5780634549b039116101a15780634549b0391461071757806349bd5a5e146107725780634a74bb02146107b357806352390c02146107e05780635342acb4146108315780636bc87c3a1461089857610267565b8063395093511461059e5780633b124fe71461060f5780633bd5d1731461063a57806341cb87fc14610675578063437823ec146106c657610267565b806318160ddd1161022457806318160ddd1461041457806323b872dd1461043f5780632d838119146104d0578063313ce5671461051f5780633685d4191461054d57610267565b8063061c82d01461026c57806306fdde03146102a7578063095ea7b31461033757806313114a9d146103a85780631694505e146103d357610267565b3661026757005b600080fd5b34801561027857600080fd5b506102a56004803603602081101561028f57600080fd5b8101908080359060200190929190505050610f2e565b005b3480156102b357600080fd5b506102bc611000565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102fc5780820151818401526020810190506102e1565b50505050905090810190601f1680156103295780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034357600080fd5b506103906004803603604081101561035a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110a2565b60405180821515815260200191505060405180910390f35b3480156103b457600080fd5b506103bd6110c0565b6040518082815260200191505060405180910390f35b3480156103df57600080fd5b506103e86110ca565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561042057600080fd5b506104296110f0565b6040518082815260200191505060405180910390f35b34801561044b57600080fd5b506104b86004803603606081101561046257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110fa565b60405180821515815260200191505060405180910390f35b3480156104dc57600080fd5b50610509600480360360208110156104f357600080fd5b81019080803590602001909291905050506111d3565b6040518082815260200191505060405180910390f35b34801561052b57600080fd5b50610534611257565b604051808260ff16815260200191505060405180910390f35b34801561055957600080fd5b5061059c6004803603602081101561057057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061126e565b005b3480156105aa57600080fd5b506105f7600480360360408110156105c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115f8565b60405180821515815260200191505060405180910390f35b34801561061b57600080fd5b506106246116ab565b6040518082815260200191505060405180910390f35b34801561064657600080fd5b506106736004803603602081101561065d57600080fd5b81019080803590602001909291905050506116b1565b005b34801561068157600080fd5b506106c46004803603602081101561069857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611842565b005b3480156106d257600080fd5b50610715600480360360208110156106e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b56565b005b34801561072357600080fd5b5061075c6004803603604081101561073a57600080fd5b8101908080359060200190929190803515159060200190929190505050611c79565b6040518082815260200191505060405180910390f35b34801561077e57600080fd5b50610787611d30565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107bf57600080fd5b506107c8611d56565b60405180821515815260200191505060405180910390f35b3480156107ec57600080fd5b5061082f6004803603602081101561080357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d69565b005b34801561083d57600080fd5b506108806004803603602081101561085457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061211c565b60405180821515815260200191505060405180910390f35b3480156108a457600080fd5b506108ad612172565b6040518082815260200191505060405180910390f35b3480156108cf57600080fd5b506108fc600480360360208110156108e657600080fd5b8101908080359060200190929190505050612178565b005b34801561090a57600080fd5b5061094d6004803603602081101561092157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061224a565b6040518082815260200191505060405180910390f35b34801561096f57600080fd5b50610978612335565b005b34801561098657600080fd5b506109c96004803603602081101561099d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124bb565b60405180821515815260200191505060405180910390f35b3480156109ed57600080fd5b50610a3a60048036036040811015610a0457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612511565b005b348015610a4857600080fd5b50610a51612691565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a8957600080fd5b50610a926126ba565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aca57600080fd5b50610af760048036036020811015610ae157600080fd5b81019080803590602001909291905050506126e0565b005b348015610b0557600080fd5b50610b0e6127b2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b4e578082015181840152602081019050610b33565b50505050905090810190601f168015610b7b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b9557600080fd5b50610bd860048036036020811015610bac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612854565b005b348015610be657600080fd5b50610c3360048036036040811015610bfd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612960565b60405180821515815260200191505060405180910390f35b348015610c5757600080fd5b50610c60612a2d565b005b348015610c6e57600080fd5b50610cbb60048036036040811015610c8557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c4a565b60405180821515815260200191505060405180910390f35b348015610cdf57600080fd5b50610ce8612c68565b6040518082815260200191505060405180910390f35b348015610d0a57600080fd5b50610d13612c6e565b6040518082815260200191505060405180910390f35b348015610d3557600080fd5b50610d3e612c78565b6040518082815260200191505060405180910390f35b348015610d6057600080fd5b50610d8f60048036036020811015610d7757600080fd5b81019080803515159060200190929190505050612c7e565b005b348015610d9d57600080fd5b50610dca60048036036020811015610db457600080fd5b8101908080359060200190929190505050612d9c565b005b348015610dd857600080fd5b50610e0560048036036020811015610def57600080fd5b8101908080359060200190929190505050612e6e565b005b348015610e1357600080fd5b50610e7660048036036040811015610e2a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061305f565b6040518082815260200191505060405180910390f35b348015610e9857600080fd5b50610edb60048036036020811015610eaf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130e6565b005b348015610ee957600080fd5b50610f2c60048036036020811015610f0057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613209565b005b610f3661345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f8190555050565b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110985780601f1061106d57610100808354040283529160200191611098565b820191906000526020600020905b81548152906001019060200180831161107b57829003601f168201915b5050505050905090565b60006110b66110af61345e565b8484613466565b6001905092915050565b6000600b54905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954905090565b600061110784848461365d565b6111c88461111361345e565b6111c38560405180606001604052806028815260200161567960289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061117961345e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b613466565b600190509392505050565b6000600a54821115611230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806155e6602a913960400191505060405180910390fd5b600061123a6138c5565b905061124f818461341490919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b61127661345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611336576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166113f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6008805490508110156115f4578173ffffffffffffffffffffffffffffffffffffffff166008828154811061142957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115e75760086001600880549050038154811061148557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106114bd57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806115ad57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556115f4565b80806001019150506113f8565b5050565b60006116a161160561345e565b8461169c856005600061161661345e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b613466565b6001905092915050565b600f5481565b60006116bb61345e565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615735602c913960400191505060405180910390fd5b600061176b83613978565b505050505090506117c481600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d490919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061181c81600a546139d490919063ffffffff16565b600a8190555061183783600b546138f090919063ffffffff16565b600b81905550505050565b61184a61345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561195557600080fd5b505afa158015611969573d6000803e3d6000fd5b505050506040513d602081101561197f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119f257600080fd5b505afa158015611a06573d6000803e3d6000fd5b505050506040513d6020811015611a1c57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015611a9657600080fd5b505af1158015611aaa573d6000803e3d6000fd5b505050506040513d6020811015611ac057600080fd5b8101908080519060200190929190505050601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611b5e61345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115611cf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611d13576000611d0384613978565b5050505050905080915050611d2a565b6000611d1e84613978565b50505050915050809150505b92915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960159054906101000a900460ff1681565b611d7161345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7305ff2b0db69458a0750badebc4f9e13add608c7f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806157136022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561205e5761201a600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111d3565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b61218061345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612240576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060158190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156122e557600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612330565b61232d600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111d3565b90505b919050565b61233d61345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61251961345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6125fd612691565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561265157600080fd5b505af1158015612665573d6000803e3d6000fd5b505050506040513d602081101561267b57600080fd5b8101908080519060200190929190505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6126e861345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600d8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561284a5780601f1061281f5761010080835404028352916020019161284a565b820191906000526020600020905b81548152906001019060200180831161282d57829003601f168201915b5050505050905090565b61285c61345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461291c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612a2361296d61345e565b84612a1e85604051806060016040528060258152602001615784602591396005600061299761345e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b613466565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ad3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806157616023913960400191505060405180910390fd5b6002544211612b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612c5e612c5761345e565b848461365d565b6001905092915050565b60155481565b6000600254905090565b60135481565b612c8661345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601960156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b612da461345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b612e7661345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6130ee61345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61321161345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613357576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156106026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061345683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a1e565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156ef6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613572576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156366022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806156ca6025913960400191505060405180910390fd5b6000811161373c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806156a16029913960400191505060405180910390fd5b60006137473061224a565b90506000601a54821015905080801561376d5750601960149054906101000a900460ff16155b80156137c75750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156137df5750601960159054906101000a900460ff165b156137f357601a5491506137f282613ae4565b5b6137fe858585613bc6565b5050505050565b60008383111582906138b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561387757808201518184015260208101905061385c565b50505050905090810190601f1680156138a45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006138d2614181565b915091506138e9818361341490919063ffffffff16565b9250505090565b60008082840190508381101561396e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080600080600080600080600061398f8a614412565b92509250925060008060006139ad8d86866139a86138c5565b61446c565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000613a1683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613805565b905092915050565b60008083118290613aca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613a8f578082015181840152602081019050613a74565b50505050905090810190601f168015613abc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613ad657fe5b049050809150509392505050565b6001601960146101000a81548160ff0219169083151502179055506000613b1560028361341490919063ffffffff16565b90506000613b2c82846139d490919063ffffffff16565b90506000479050613b3c836144f5565b6000613b5182476139d490919063ffffffff16565b9050613b5d83826147a9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601960146101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613c675750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613c7557613c746148f7565b5b6000613c9f6064613c916013548561497890919063ffffffff16565b61341490919063ffffffff16565b90506000613ccb6064613cbd6015548661497890919063ffffffff16565b61341490919063ffffffff16565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d705750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613da957613da48585613d9f84613d9187896139d490919063ffffffff16565b6139d490919063ffffffff16565b6149fe565b614070565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613e4c5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613e8557613e808585613e7b84613e6d87896139d490919063ffffffff16565b6139d490919063ffffffff16565b614c5e565b61406f565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613f295750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613f6257613f5d8585613f5884613f4a87896139d490919063ffffffff16565b6139d490919063ffffffff16565b614ebe565b61406e565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156140045750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561403d5761403885856140338461402587896139d490919063ffffffff16565b6139d490919063ffffffff16565b615089565b61406d565b61406c85856140678461405987896139d490919063ffffffff16565b6139d490919063ffffffff16565b614ebe565b5b5b5b5b6000600f81905550600060118190555061408c85600084614ebe565b6140b985601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683614ebe565b601054600f81905550601254601181905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061416c5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561417a5761417961537e565b5b5050505050565b6000806000600a5490506000600954905060005b6008805490508110156143d5578260036000600884815481106141b457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061429b575081600460006008848154811061423357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156142b257600a546009549450945050505061440e565b61433b60036000600884815481106142c657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846139d490919063ffffffff16565b92506143c6600460006008848154811061435157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836139d490919063ffffffff16565b91508080600101915050614195565b506143ed600954600a5461341490919063ffffffff16565b82101561440557600a5460095493509350505061440e565b81819350935050505b9091565b600080600080614421856153a4565b9050600061442e866153d5565b9050600061445782614449858a6139d490919063ffffffff16565b6139d490919063ffffffff16565b90508083839550955095505050509193909250565b600080600080614485858961497890919063ffffffff16565b9050600061449c868961497890919063ffffffff16565b905060006144b3878961497890919063ffffffff16565b905060006144dc826144ce85876139d490919063ffffffff16565b6139d490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff8111801561450f57600080fd5b5060405190808252806020026020018201604052801561453e5781602001602082028036833780820191505090505b509050308160008151811061454f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156145f157600080fd5b505afa158015614605573d6000803e3d6000fd5b505050506040513d602081101561461b57600080fd5b81019080805190602001909291905050508160018151811061463957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506146a030601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613466565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015614764578082015181840152602081019050614749565b505050509050019650505050505050600060405180830381600087803b15801561478d57600080fd5b505af11580156147a1573d6000803e3d6000fd5b505050505050565b6147d630601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613466565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156148a057600080fd5b505af11580156148b4573d6000803e3d6000fd5b50505050506040513d60608110156148cb57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600f5414801561490b57506000601154145b801561491957506000601554145b801561492757506000601354145b1561493157614976565b600f546010819055506011546012819055506013546014819055506015546017819055506000600f819055506000601181905550600060158190555060006013819055505b565b60008083141561498b57600090506149f8565b600082840290508284828161499c57fe5b04146149f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806156586021913960400191505060405180910390fd5b809150505b92915050565b600080600080600080614a1087613978565b955095509550955095509550614a6e87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b0386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b9885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614be481615406565b614bee84836155ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614c7087613978565b955095509550955095509550614cce86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d6383600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614df885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e4481615406565b614e4e84836155ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614ed087613978565b955095509550955095509550614f2e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614fc385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061500f81615406565b61501984836155ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061509b87613978565b9550955095509550955095506150f987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061518e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061522383600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506152b885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061530481615406565b61530e84836155ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601054600f81905550601254601181905550601454601381905550601754601581905550565b60006153ce60646153c0600f548561497890919063ffffffff16565b61341490919063ffffffff16565b9050919050565b60006153ff60646153f16011548561497890919063ffffffff16565b61341490919063ffffffff16565b9050919050565b60006154106138c5565b90506000615427828461497890919063ffffffff16565b905061547b81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156155a65761556283600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6155c082600a546139d490919063ffffffff16565b600a819055506155db81600b546138f090919063ffffffff16565b600b81905550505056fe416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c7564652050616e63616b6520726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b3f404fa0ac4874bf9fac890ac968175e81a7897aefcf5ae7b6ef466fb8e462a64736f6c634300060c0033000000000000000000000000c6f863bcbecfd76cf17449573096f7afb2d8bd07
Deployed Bytecode
0x6080604052600436106102605760003560e01c80636d94581411610144578063a69df4b5116100b6578063c49b9a801161007a578063c49b9a8014610d54578063cea2695814610d91578063dd46706414610dcc578063dd62ed3e14610e07578063ea2f0b3714610e8c578063f2fde38b14610edd57610267565b8063a69df4b514610c4b578063a9059cbb14610c62578063aa45026b14610cd3578063b6c5232414610cfe578063c0b0fda214610d2957610267565b80638da5cb5b116101085780638da5cb5b14610a3c5780638ea5220f14610a7d5780638ee88c5314610abe57806395d89b4114610af957806395f4d08814610b89578063a457c2d714610bda57610267565b80636d945814146108c357806370a08231146108fe578063715018a61461096357806388f820201461097a5780638980f11f146109e157610267565b806339509351116101dd5780634549b039116101a15780634549b0391461071757806349bd5a5e146107725780634a74bb02146107b357806352390c02146107e05780635342acb4146108315780636bc87c3a1461089857610267565b8063395093511461059e5780633b124fe71461060f5780633bd5d1731461063a57806341cb87fc14610675578063437823ec146106c657610267565b806318160ddd1161022457806318160ddd1461041457806323b872dd1461043f5780632d838119146104d0578063313ce5671461051f5780633685d4191461054d57610267565b8063061c82d01461026c57806306fdde03146102a7578063095ea7b31461033757806313114a9d146103a85780631694505e146103d357610267565b3661026757005b600080fd5b34801561027857600080fd5b506102a56004803603602081101561028f57600080fd5b8101908080359060200190929190505050610f2e565b005b3480156102b357600080fd5b506102bc611000565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156102fc5780820151818401526020810190506102e1565b50505050905090810190601f1680156103295780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34801561034357600080fd5b506103906004803603604081101561035a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110a2565b60405180821515815260200191505060405180910390f35b3480156103b457600080fd5b506103bd6110c0565b6040518082815260200191505060405180910390f35b3480156103df57600080fd5b506103e86110ca565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b34801561042057600080fd5b506104296110f0565b6040518082815260200191505060405180910390f35b34801561044b57600080fd5b506104b86004803603606081101561046257600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506110fa565b60405180821515815260200191505060405180910390f35b3480156104dc57600080fd5b50610509600480360360208110156104f357600080fd5b81019080803590602001909291905050506111d3565b6040518082815260200191505060405180910390f35b34801561052b57600080fd5b50610534611257565b604051808260ff16815260200191505060405180910390f35b34801561055957600080fd5b5061059c6004803603602081101561057057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061126e565b005b3480156105aa57600080fd5b506105f7600480360360408110156105c157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803590602001909291905050506115f8565b60405180821515815260200191505060405180910390f35b34801561061b57600080fd5b506106246116ab565b6040518082815260200191505060405180910390f35b34801561064657600080fd5b506106736004803603602081101561065d57600080fd5b81019080803590602001909291905050506116b1565b005b34801561068157600080fd5b506106c46004803603602081101561069857600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611842565b005b3480156106d257600080fd5b50610715600480360360208110156106e957600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611b56565b005b34801561072357600080fd5b5061075c6004803603604081101561073a57600080fd5b8101908080359060200190929190803515159060200190929190505050611c79565b6040518082815260200191505060405180910390f35b34801561077e57600080fd5b50610787611d30565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b3480156107bf57600080fd5b506107c8611d56565b60405180821515815260200191505060405180910390f35b3480156107ec57600080fd5b5061082f6004803603602081101561080357600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d69565b005b34801561083d57600080fd5b506108806004803603602081101561085457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061211c565b60405180821515815260200191505060405180910390f35b3480156108a457600080fd5b506108ad612172565b6040518082815260200191505060405180910390f35b3480156108cf57600080fd5b506108fc600480360360208110156108e657600080fd5b8101908080359060200190929190505050612178565b005b34801561090a57600080fd5b5061094d6004803603602081101561092157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061224a565b6040518082815260200191505060405180910390f35b34801561096f57600080fd5b50610978612335565b005b34801561098657600080fd5b506109c96004803603602081101561099d57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506124bb565b60405180821515815260200191505060405180910390f35b3480156109ed57600080fd5b50610a3a60048036036040811015610a0457600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612511565b005b348015610a4857600080fd5b50610a51612691565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610a8957600080fd5b50610a926126ba565b604051808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b348015610aca57600080fd5b50610af760048036036020811015610ae157600080fd5b81019080803590602001909291905050506126e0565b005b348015610b0557600080fd5b50610b0e6127b2565b6040518080602001828103825283818151815260200191508051906020019080838360005b83811015610b4e578082015181840152602081019050610b33565b50505050905090810190601f168015610b7b5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610b9557600080fd5b50610bd860048036036020811015610bac57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050612854565b005b348015610be657600080fd5b50610c3360048036036040811015610bfd57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612960565b60405180821515815260200191505060405180910390f35b348015610c5757600080fd5b50610c60612a2d565b005b348015610c6e57600080fd5b50610cbb60048036036040811015610c8557600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919080359060200190929190505050612c4a565b60405180821515815260200191505060405180910390f35b348015610cdf57600080fd5b50610ce8612c68565b6040518082815260200191505060405180910390f35b348015610d0a57600080fd5b50610d13612c6e565b6040518082815260200191505060405180910390f35b348015610d3557600080fd5b50610d3e612c78565b6040518082815260200191505060405180910390f35b348015610d6057600080fd5b50610d8f60048036036020811015610d7757600080fd5b81019080803515159060200190929190505050612c7e565b005b348015610d9d57600080fd5b50610dca60048036036020811015610db457600080fd5b8101908080359060200190929190505050612d9c565b005b348015610dd857600080fd5b50610e0560048036036020811015610def57600080fd5b8101908080359060200190929190505050612e6e565b005b348015610e1357600080fd5b50610e7660048036036040811015610e2a57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061305f565b6040518082815260200191505060405180910390f35b348015610e9857600080fd5b50610edb60048036036020811015610eaf57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff1690602001909291905050506130e6565b005b348015610ee957600080fd5b50610f2c60048036036020811015610f0057600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050613209565b005b610f3661345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ff6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80600f8190555050565b6060600c8054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110985780601f1061106d57610100808354040283529160200191611098565b820191906000526020600020905b81548152906001019060200180831161107b57829003601f168201915b5050505050905090565b60006110b66110af61345e565b8484613466565b6001905092915050565b6000600b54905090565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600954905090565b600061110784848461365d565b6111c88461111361345e565b6111c38560405180606001604052806028815260200161567960289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061117961345e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b613466565b600190509392505050565b6000600a54821115611230576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a8152602001806155e6602a913960400191505060405180910390fd5b600061123a6138c5565b905061124f818461341490919063ffffffff16565b915050919050565b6000600e60009054906101000a900460ff16905090565b61127661345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611336576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166113f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b60005b6008805490508110156115f4578173ffffffffffffffffffffffffffffffffffffffff166008828154811061142957fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156115e75760086001600880549050038154811061148557fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600882815481106114bd57fe5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806115ad57fe5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556115f4565b80806001019150506113f8565b5050565b60006116a161160561345e565b8461169c856005600061161661345e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b613466565b6001905092915050565b600f5481565b60006116bb61345e565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602c815260200180615735602c913960400191505060405180910390fd5b600061176b83613978565b505050505090506117c481600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d490919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061181c81600a546139d490919063ffffffff16565b600a8190555061183783600b546138f090919063ffffffff16565b600b81905550505050565b61184a61345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008190508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b15801561195557600080fd5b505afa158015611969573d6000803e3d6000fd5b505050506040513d602081101561197f57600080fd5b810190808051906020019092919050505073ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156119f257600080fd5b505afa158015611a06573d6000803e3d6000fd5b505050506040513d6020811015611a1c57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff16815260200192505050602060405180830381600087803b158015611a9657600080fd5b505af1158015611aaa573d6000803e3d6000fd5b505050506040513d6020811015611ac057600080fd5b8101908080519060200190929190505050601960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b611b5e61345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115611cf3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f416d6f756e74206d757374206265206c657373207468616e20737570706c790081525060200191505060405180910390fd5b81611d13576000611d0384613978565b5050505050905080915050611d2a565b6000611d1e84613978565b50505050915050809150505b92915050565b601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601960159054906101000a900460ff1681565b611d7161345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e31576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b7305ff2b0db69458a0750badebc4f9e13add608c7f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611eca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806157136022913960400191505060405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611f8a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f4163636f756e7420697320616c7265616479206578636c75646564000000000081525060200191505060405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561205e5761201a600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111d3565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60115481565b61218061345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612240576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060158190555050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156122e557600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050612330565b61232d600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111d3565b90505b919050565b61233d61345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b61251961345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146125d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb6125fd612691565b836040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050602060405180830381600087803b15801561265157600080fd5b505af1158015612665573d6000803e3d6000fd5b505050506040513d602081101561267b57600080fd5b8101908080519060200190929190505050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6126e861345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127a8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060118190555050565b6060600d8054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561284a5780601f1061281f5761010080835404028352916020019161284a565b820191906000526020600020905b81548152906001019060200180831161282d57829003601f168201915b5050505050905090565b61285c61345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461291c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000612a2361296d61345e565b84612a1e85604051806060016040528060258152602001615784602591396005600061299761345e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138059092919063ffffffff16565b613466565b6001905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612ad3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260238152602001806157616023913960400191505060405180910390fd5b6002544211612b4a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f436f6e7472616374206973206c6f636b656420756e74696c203720646179730081525060200191505060405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000612c5e612c5761345e565b848461365d565b6001905092915050565b60155481565b6000600254905090565b60135481565b612c8661345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d46576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b80601960156101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc1598160405180821515815260200191505060405180910390a150565b612da461345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e64576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b8060138190555050565b612e7661345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612f36576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804201600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6130ee61345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146131ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61321161345e565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657281525060200191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415613357576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260268152602001806156106026913960400191505060405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600061345683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613a1e565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156134ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260248152602001806156ef6024913960400191505060405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613572576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260228152602001806156366022913960400191505060405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040518082815260200191505060405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156136e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260258152602001806156ca6025913960400191505060405180910390fd5b6000811161373c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260298152602001806156a16029913960400191505060405180910390fd5b60006137473061224a565b90506000601a54821015905080801561376d5750601960149054906101000a900460ff16155b80156137c75750601960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156137df5750601960159054906101000a900460ff165b156137f357601a5491506137f282613ae4565b5b6137fe858585613bc6565b5050505050565b60008383111582906138b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561387757808201518184015260208101905061385c565b50505050905090810190601f1680156138a45780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b60008060006138d2614181565b915091506138e9818361341490919063ffffffff16565b9250505090565b60008082840190508381101561396e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b600080600080600080600080600061398f8a614412565b92509250925060008060006139ad8d86866139a86138c5565b61446c565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6000613a1683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613805565b905092915050565b60008083118290613aca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613a8f578082015181840152602081019050613a74565b50505050905090810190601f168015613abc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581613ad657fe5b049050809150509392505050565b6001601960146101000a81548160ff0219169083151502179055506000613b1560028361341490919063ffffffff16565b90506000613b2c82846139d490919063ffffffff16565b90506000479050613b3c836144f5565b6000613b5182476139d490919063ffffffff16565b9050613b5d83826147a9565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56184828560405180848152602001838152602001828152602001935050505060405180910390a1505050506000601960146101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613c675750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613c7557613c746148f7565b5b6000613c9f6064613c916013548561497890919063ffffffff16565b61341490919063ffffffff16565b90506000613ccb6064613cbd6015548661497890919063ffffffff16565b61341490919063ffffffff16565b9050600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613d705750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613da957613da48585613d9f84613d9187896139d490919063ffffffff16565b6139d490919063ffffffff16565b6149fe565b614070565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613e4c5750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613e8557613e808585613e7b84613e6d87896139d490919063ffffffff16565b6139d490919063ffffffff16565b614c5e565b61406f565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015613f295750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613f6257613f5d8585613f5884613f4a87896139d490919063ffffffff16565b6139d490919063ffffffff16565b614ebe565b61406e565b600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156140045750600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561403d5761403885856140338461402587896139d490919063ffffffff16565b6139d490919063ffffffff16565b615089565b61406d565b61406c85856140678461405987896139d490919063ffffffff16565b6139d490919063ffffffff16565b614ebe565b5b5b5b5b6000600f81905550600060118190555061408c85600084614ebe565b6140b985601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683614ebe565b601054600f81905550601254601181905550600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061416c5750600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561417a5761417961537e565b5b5050505050565b6000806000600a5490506000600954905060005b6008805490508110156143d5578260036000600884815481106141b457fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061429b575081600460006008848154811061423357fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156142b257600a546009549450945050505061440e565b61433b60036000600884815481106142c657fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054846139d490919063ffffffff16565b92506143c6600460006008848154811061435157fe5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054836139d490919063ffffffff16565b91508080600101915050614195565b506143ed600954600a5461341490919063ffffffff16565b82101561440557600a5460095493509350505061440e565b81819350935050505b9091565b600080600080614421856153a4565b9050600061442e866153d5565b9050600061445782614449858a6139d490919063ffffffff16565b6139d490919063ffffffff16565b90508083839550955095505050509193909250565b600080600080614485858961497890919063ffffffff16565b9050600061449c868961497890919063ffffffff16565b905060006144b3878961497890919063ffffffff16565b905060006144dc826144ce85876139d490919063ffffffff16565b6139d490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6060600267ffffffffffffffff8111801561450f57600080fd5b5060405190808252806020026020018201604052801561453e5781602001602082028036833780820191505090505b509050308160008151811061454f57fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156145f157600080fd5b505afa158015614605573d6000803e3d6000fd5b505050506040513d602081101561461b57600080fd5b81019080805190602001909291905050508160018151811061463957fe5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506146a030601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613466565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040180868152602001858152602001806020018473ffffffffffffffffffffffffffffffffffffffff168152602001838152602001828103825285818151815260200191508051906020019060200280838360005b83811015614764578082015181840152602081019050614749565b505050509050019650505050505050600060405180830381600087803b15801561478d57600080fd5b505af11580156147a1573d6000803e3d6000fd5b505050505050565b6147d630601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684613466565b601860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008030426040518863ffffffff1660e01b8152600401808773ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018581526020018481526020018373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200196505050505050506060604051808303818588803b1580156148a057600080fd5b505af11580156148b4573d6000803e3d6000fd5b50505050506040513d60608110156148cb57600080fd5b810190808051906020019092919080519060200190929190805190602001909291905050505050505050565b6000600f5414801561490b57506000601154145b801561491957506000601554145b801561492757506000601354145b1561493157614976565b600f546010819055506011546012819055506013546014819055506015546017819055506000600f819055506000601181905550600060158190555060006013819055505b565b60008083141561498b57600090506149f8565b600082840290508284828161499c57fe5b04146149f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806156586021913960400191505060405180910390fd5b809150505b92915050565b600080600080600080614a1087613978565b955095509550955095509550614a6e87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b0386600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614b9885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614be481615406565b614bee84836155ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614c7087613978565b955095509550955095509550614cce86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614d6383600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614df885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614e4481615406565b614e4e84836155ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b600080600080600080614ed087613978565b955095509550955095509550614f2e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550614fc385600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061500f81615406565b61501984836155ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b60008060008060008061509b87613978565b9550955095509550955095506150f987600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061518e86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546139d490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061522383600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506152b885600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061530481615406565b61530e84836155ab565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040518082815260200191505060405180910390a3505050505050505050565b601054600f81905550601254601181905550601454601381905550601754601581905550565b60006153ce60646153c0600f548561497890919063ffffffff16565b61341490919063ffffffff16565b9050919050565b60006153ff60646153f16011548561497890919063ffffffff16565b61341490919063ffffffff16565b9050919050565b60006154106138c5565b90506000615427828461497890919063ffffffff16565b905061547b81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156155a65761556283600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546138f090919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b6155c082600a546139d490919063ffffffff16565b600a819055506155db81600b546138f090919063ffffffff16565b600b81905550505056fe416d6f756e74206d757374206265206c657373207468616e20746f74616c207265666c656374696f6e734f776e61626c653a206e6577206f776e657220697320746865207a65726f206164647265737345524332303a20617070726f766520746f20746865207a65726f2061646472657373536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f7745524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e63655472616e7366657220616d6f756e74206d7573742062652067726561746572207468616e207a65726f45524332303a207472616e736665722066726f6d20746865207a65726f206164647265737345524332303a20617070726f76652066726f6d20746865207a65726f206164647265737357652063616e206e6f74206578636c7564652050616e63616b6520726f757465722e4578636c75646564206164647265737365732063616e6e6f742063616c6c20746869732066756e6374696f6e596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c6f636b45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220b3f404fa0ac4874bf9fac890ac968175e81a7897aefcf5ae7b6ef466fb8e462a64736f6c634300060c0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000c6f863bcbecfd76cf17449573096f7afb2d8bd07
-----Decoded View---------------
Arg [0] : _ru (address): 0xc6f863bcbecfd76cf17449573096f7afb2d8bd07
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000c6f863bcbecfd76cf17449573096f7afb2d8bd07
Deployed ByteCode Sourcemap
25585:19544:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43868:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28088:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29000:161;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;30121:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26731:42;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;28365:95;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;29169:313;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31045:253;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;28274:83;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31758:479;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29490:218;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26343:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;30216:377;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44423:352;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43509:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30601:436;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26780:29;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26850:41;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;31306:444;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;36426:123;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26430:32;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44112:111;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28468:198;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16207:148;;;;;;;;;;;;;:::i;:::-;;29993:120;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;44966:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;15564:79;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26650:24;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;43978:122;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28179:87;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43754:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;29716:269;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;17217:293;;;;;;;;;;;;;:::i;:::-;;28674:167;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;26617:26;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;16762:89;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;26531:27;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44787:171;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;44235:102;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16927:214;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28849:143;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43632:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16510:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43868:98;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43952:6:::1;43942:7;:16;;;;43868:98:::0;:::o;28088:83::-;28125:13;28158:5;28151:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28088:83;:::o;29000:161::-;29075:4;29092:39;29101:12;:10;:12::i;:::-;29115:7;29124:6;29092:8;:39::i;:::-;29149:4;29142:11;;29000:161;;;;:::o;30121:87::-;30163:7;30190:10;;30183:17;;30121:87;:::o;26731:42::-;;;;;;;;;;;;;:::o;28365:95::-;28418:7;28445;;28438:14;;28365:95;:::o;29169:313::-;29267:4;29284:36;29294:6;29302:9;29313:6;29284:9;:36::i;:::-;29331:121;29340:6;29348:12;:10;:12::i;:::-;29362:89;29400:6;29362:89;;;;;;;;;;;;;;;;;:11;:19;29374:6;29362:19;;;;;;;;;;;;;;;:33;29382:12;:10;:12::i;:::-;29362:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;29331:8;:121::i;:::-;29470:4;29463:11;;29169:313;;;;;:::o;31045:253::-;31111:7;31150;;31139;:18;;31131:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31215:19;31238:10;:8;:10::i;:::-;31215:33;;31266:24;31278:11;31266:7;:11;;:24;;;;:::i;:::-;31259:31;;;31045:253;;;:::o;28274:83::-;28315:5;28340:9;;;;;;;;;;;28333:16;;28274:83;:::o;31758:479::-;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31840:11:::1;:20;31852:7;31840:20;;;;;;;;;;;;;;;;;;;;;;;;;31832:60;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31908:9;31903:327;31927:9;:16;;;;31923:1;:20;31903:327;;;31985:7;31969:23;;:9;31979:1;31969:12;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;31965:254;;;32028:9;32057:1;32038:9;:16;;;;:20;32028:31;;;;;;;;;;;;;;;;;;;;;;;;;32013:9;32023:1;32013:12;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32097:1;32078:7;:16;32086:7;32078:16;;;;;;;;;;;;;;;:20;;;;32140:5;32117:11;:20;32129:7;32117:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;32164:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32198:5;;31965:254;31945:3;;;;;;;31903:327;;;;31758:479:::0;:::o;29490:218::-;29578:4;29595:83;29604:12;:10;:12::i;:::-;29618:7;29627:50;29666:10;29627:11;:25;29639:12;:10;:12::i;:::-;29627:25;;;;;;;;;;;;;;;:34;29653:7;29627:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;29595:8;:83::i;:::-;29696:4;29689:11;;29490:218;;;;:::o;26343:26::-;;;;:::o;30216:377::-;30268:14;30285:12;:10;:12::i;:::-;30268:29;;30317:11;:19;30329:6;30317:19;;;;;;;;;;;;;;;;;;;;;;;;;30316:20;30308:77;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30397:15;30421:19;30432:7;30421:10;:19::i;:::-;30396:44;;;;;;;30469:28;30489:7;30469;:15;30477:6;30469:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30451:7;:15;30459:6;30451:15;;;;;;;;;;;;;;;:46;;;;30518:20;30530:7;30518;;:11;;:20;;;;:::i;:::-;30508:7;:30;;;;30562:23;30577:7;30562:10;;:14;;:23;;;;:::i;:::-;30549:10;:36;;;;30216:377;;;:::o;44423:352::-;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44528:36:::1;44586:9;44528:68;;44641:17;:25;;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;44623:57;;;44689:4;44696:17;:22;;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;44623:98;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;44607:13;;:114;;;;;;;;;;;;;;;;;;44750:17;44732:15;;:35;;;;;;;;;;;;;;;;;;15846:1;44423:352:::0;:::o;43509:111::-;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43608:4:::1;43578:18;:27;43597:7;43578:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;43509:111:::0;:::o;30601:436::-;30691:7;30730;;30719;:18;;30711:62;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30789:17;30784:246;;30824:15;30848:19;30859:7;30848:10;:19::i;:::-;30823:44;;;;;;;30889:7;30882:14;;;;;30784:246;30931:23;30962:19;30973:7;30962:10;:19::i;:::-;30929:52;;;;;;;31003:15;30996:22;;;30601:436;;;;;:::o;26780:29::-;;;;;;;;;;;;;:::o;26850:41::-;;;;;;;;;;;;;:::o;31306:444::-;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31399:42:::1;31388:53;;:7;:53;;;;31380:100;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31500:11;:20;31512:7;31500:20;;;;;;;;;;;;;;;;;;;;;;;;;31499:21;31491:61;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;31585:1;31566:7;:16;31574:7;31566:16;;;;;;;;;;;;;;;;:20;31563:108;;;31622:37;31642:7;:16;31650:7;31642:16;;;;;;;;;;;;;;;;31622:19;:37::i;:::-;31603:7;:16;31611:7;31603:16;;;;;;;;;;;;;;;:56;;;;31563:108;31704:4;31681:11;:20;31693:7;31681:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;31719:9;31734:7;31719:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31306:444:::0;:::o;36426:123::-;36490:4;36514:18;:27;36533:7;36514:27;;;;;;;;;;;;;;;;;;;;;;;;;36507:34;;36426:123;;;:::o;26430:32::-;;;;:::o;44112:111::-;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44205:10:::1;44195:7;:20;;;;44112:111:::0;:::o;28468:198::-;28534:7;28558:11;:20;28570:7;28558:20;;;;;;;;;;;;;;;;;;;;;;;;;28554:49;;;28587:7;:16;28595:7;28587:16;;;;;;;;;;;;;;;;28580:23;;;;28554:49;28621:37;28641:7;:16;28649:7;28641:16;;;;;;;;;;;;;;;;28621:19;:37::i;:::-;28614:44;;28468:198;;;;:::o;16207:148::-;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16314:1:::1;16277:40;;16298:6;::::0;::::1;;;;;;;;16277:40;;;;;;;;;;;;16345:1;16328:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;16207:148::o:0;29993:120::-;30061:4;30085:11;:20;30097:7;30085:20;;;;;;;;;;;;;;;;;;;;;;;;;30078:27;;29993:120;;;:::o;44966:154::-;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45068:12:::1;45061:29;;;45091:7;:5;:7::i;:::-;45100:11;45061:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;44966:154:::0;;:::o;15564:79::-;15602:7;15629:6;;;;;;;;;;;15622:13;;15564:79;:::o;26650:24::-;;;;;;;;;;;;;:::o;43978:122::-;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44080:12:::1;44064:13;:28;;;;43978:122:::0;:::o;28179:87::-;28218:13;28251:7;28244:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28179:87;:::o;43754:102::-;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43839:9:::1;43827;;:21;;;;;;;;;;;;;;;;;;43754:102:::0;:::o;29716:269::-;29809:4;29826:129;29835:12;:10;:12::i;:::-;29849:7;29858:96;29897:15;29858:96;;;;;;;;;;;;;;;;;:11;:25;29870:12;:10;:12::i;:::-;29858:25;;;;;;;;;;;;;;;:34;29884:7;29858:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;29826:8;:129::i;:::-;29973:4;29966:11;;29716:269;;;;:::o;17217:293::-;17287:10;17269:28;;:14;;;;;;;;;;;:28;;;17261:76;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17362:9;;17356:3;:15;17348:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17453:14;;;;;;;;;;;17424:44;;17445:6;;;;;;;;;;17424:44;;;;;;;;;;;;17488:14;;;;;;;;;;;17479:6;;:23;;;;;;;;;;;;;;;;;;17217:293::o;28674:167::-;28752:4;28769:42;28779:12;:10;:12::i;:::-;28793:9;28804:6;28769:9;:42::i;:::-;28829:4;28822:11;;28674:167;;;;:::o;26617:26::-;;;;:::o;16762:89::-;16807:7;16834:9;;16827:16;;16762:89;:::o;26531:27::-;;;;:::o;44787:171::-;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44888:8:::1;44864:21;;:32;;;;;;;;;;;;;;;;;;44912:38;44941:8;44912:38;;;;;;;;;;;;;;;;;;;;44787:171:::0;:::o;44235:102::-;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44322:7:::1;44311:8;:18;;;;44235:102:::0;:::o;16927:214::-;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17008:6:::1;::::0;::::1;;;;;;;;16991:14;;:23;;;;;;;;;;;;;;;;;;17042:1;17025:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;17073:4;17067:3;:10;17055:9;:22;;;;17130:1;17093:40;;17114:6;::::0;::::1;;;;;;;;17093:40;;;;;;;;;;;;16927:214:::0;:::o;28849:143::-;28930:7;28957:11;:18;28969:5;28957:18;;;;;;;;;;;;;;;:27;28976:7;28957:27;;;;;;;;;;;;;;;;28950:34;;28849:143;;;;:::o;43632:110::-;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43729:5:::1;43699:18;:27;43718:7;43699:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;43632:110:::0;:::o;16510:244::-;15786:12;:10;:12::i;:::-;15776:22;;:6;;;;;;;;;;:22;;;15768:67;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16619:1:::1;16599:22;;:8;:22;;;;16591:73;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16709:8;16680:38;;16701:6;::::0;::::1;;;;;;;;16680:38;;;;;;;;;;;;16738:8;16729:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16510:244:::0;:::o;5780:132::-;5838:7;5865:39;5869:1;5872;5865:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;5858:46;;5780:132;;;;:::o;7972:106::-;8025:15;8060:10;8053:17;;7972:106;:::o;36557:337::-;36667:1;36650:19;;:5;:19;;;;36642:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36748:1;36729:21;;:7;:21;;;;36721:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36832:6;36802:11;:18;36814:5;36802:18;;;;;;;;;;;;;;;:27;36821:7;36802:27;;;;;;;;;;;;;;;:36;;;;36870:7;36854:32;;36863:5;36854:32;;;36879:6;36854:32;;;;;;;;;;;;;;;;;;36557:337;;;:::o;36902:1159::-;37040:1;37024:18;;:4;:18;;;;37016:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37112:1;37103:6;:10;37095:64;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37454:28;37485:24;37503:4;37485:9;:24::i;:::-;37454:55;;37528:24;37579:29;;37555:20;:53;;37528:80;;37637:19;:53;;;;;37674:16;;;;;;;;;;;37673:17;37637:53;:91;;;;;37715:13;;;;;;;;;;;37707:21;;:4;:21;;;;37637:91;:129;;;;;37745:21;;;;;;;;;;;37637:129;37619:318;;;37816:29;;37793:52;;37889:36;37904:20;37889:14;:36::i;:::-;37619:318;38023:30;38038:4;38043:2;38046:6;38023:14;:30::i;:::-;36902:1159;;;;;:::o;4382:192::-;4468:7;4501:1;4496;:6;;4504:12;4488:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4528:9;4544:1;4540;:5;4528:17;;4565:1;4558:8;;;4382:192;;;;;:::o;34358:163::-;34399:7;34420:15;34437;34456:19;:17;:19::i;:::-;34419:56;;;;34493:20;34505:7;34493;:11;;:20;;;;:::i;:::-;34486:27;;;;34358:163;:::o;3479:181::-;3537:7;3557:9;3573:1;3569;:5;3557:17;;3598:1;3593;:6;;3585:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3651:1;3644:8;;;3479:181;;;;:::o;33156:419::-;33215:7;33224;33233;33242;33251;33260;33281:23;33306:12;33320:18;33342:20;33354:7;33342:11;:20::i;:::-;33280:82;;;;;;33374:15;33391:23;33416:12;33432:50;33444:7;33453:4;33459:10;33471;:8;:10::i;:::-;33432:11;:50::i;:::-;33373:109;;;;;;33501:7;33510:15;33527:4;33533:15;33550:4;33556:10;33493:74;;;;;;;;;;;;;;;;;;33156:419;;;;;;;:::o;3943:136::-;4001:7;4028:43;4032:1;4035;4028:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4021:50;;3943:136;;;;:::o;6408:278::-;6494:7;6526:1;6522;:5;6529:12;6514:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6553:9;6569:1;6565;:5;;;;;;6553:17;;6677:1;6670:8;;;6408:278;;;;;:::o;38069:985::-;27290:4;27271:16;;:23;;;;;;;;;;;;;;;;;;38205:12:::1;38220:27;38245:1;38220:20;:24;;:27;;;;:::i;:::-;38205:42;;38258:17;38278:30;38303:4;38278:20;:24;;:30;;;;:::i;:::-;38258:50;;38586:22;38611:21;38586:46;;38677:22;38694:4;38677:16;:22::i;:::-;38830:18;38851:41;38877:14;38851:21;:25;;:41;;;;:::i;:::-;38830:62;;38942:35;38955:9;38966:10;38942:12;:35::i;:::-;39003:43;39018:4;39024:10;39036:9;39003:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27305:1;;;;27336:5:::0;27317:16;;:24;;;;;;;;;;;;;;;;;;38069:985;:::o;40259:1564::-;40356:18;:26;40375:6;40356:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;40386:18;:29;40405:9;40386:29;;;;;;;;;;;;;;;;;;;;;;;;;40356:59;40353:104;;;40431:14;:12;:14::i;:::-;40353:104;40529:15;40547:29;40572:3;40547:20;40558:8;;40547:6;:10;;:20;;;;:::i;:::-;:24;;:29;;;;:::i;:::-;40529:47;;40587:18;40608:28;40632:3;40608:19;40619:7;;40608:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;40587:49;;40653:11;:19;40665:6;40653:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;40677:11;:22;40689:9;40677:22;;;;;;;;;;;;;;;;;;;;;;;;;40676:23;40653:46;40649:752;;;40716:79;40738:6;40746:9;40758:35;40782:10;40758:19;40769:7;40758:6;:10;;:19;;;;:::i;:::-;:23;;:35;;;;:::i;:::-;40716:21;:79::i;:::-;40649:752;;;40818:11;:19;40830:6;40818:19;;;;;;;;;;;;;;;;;;;;;;;;;40817:20;:46;;;;;40841:11;:22;40853:9;40841:22;;;;;;;;;;;;;;;;;;;;;;;;;40817:46;40813:588;;;40880:77;40900:6;40908:9;40920:35;40944:10;40920:19;40931:7;40920:6;:10;;:19;;;;:::i;:::-;:23;;:35;;;;:::i;:::-;40880:19;:77::i;:::-;40813:588;;;40980:11;:19;40992:6;40980:19;;;;;;;;;;;;;;;;;;;;;;;;;40979:20;:47;;;;;41004:11;:22;41016:9;41004:22;;;;;;;;;;;;;;;;;;;;;;;;;41003:23;40979:47;40975:426;;;41043:75;41061:6;41069:9;41081:35;41105:10;41081:19;41092:7;41081:6;:10;;:19;;;;:::i;:::-;:23;;:35;;;;:::i;:::-;41043:17;:75::i;:::-;40975:426;;;41140:11;:19;41152:6;41140:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;41163:11;:22;41175:9;41163:22;;;;;;;;;;;;;;;;;;;;;;;;;41140:45;41136:265;;;41202:79;41224:6;41232:9;41244:35;41268:10;41244:19;41255:7;41244:6;:10;;:19;;;;:::i;:::-;:23;;:35;;;;:::i;:::-;41202:21;:79::i;:::-;41136:265;;;41314:75;41332:6;41340:9;41352:35;41376:10;41352:19;41363:7;41352:6;:10;;:19;;;;:::i;:::-;:23;;:35;;;;:::i;:::-;41314:17;:75::i;:::-;41136:265;40975:426;40813:588;40649:752;41431:1;41421:7;:11;;;;41459:1;41443:13;:17;;;;41475:46;41493:6;41509:1;41513:7;41475:17;:46::i;:::-;41532:48;41550:6;41558:9;;;;;;;;;;;41569:10;41532:17;:48::i;:::-;41645:15;;41635:7;:25;;;;41687:21;;41671:13;:37;;;;41726:18;:26;41745:6;41726:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;41756:18;:29;41775:9;41756:29;;;;;;;;;;;;;;;;;;;;;;;;;41726:59;41723:92;;;41800:15;:13;:15::i;:::-;41723:92;40259:1564;;;;;:::o;34529:561::-;34579:7;34588;34608:15;34626:7;;34608:25;;34644:15;34662:7;;34644:25;;34691:9;34686:289;34710:9;:16;;;;34706:1;:20;34686:289;;;34776:7;34752;:21;34760:9;34770:1;34760:12;;;;;;;;;;;;;;;;;;;;;;;;;34752:21;;;;;;;;;;;;;;;;:31;:66;;;;34811:7;34787;:21;34795:9;34805:1;34795:12;;;;;;;;;;;;;;;;;;;;;;;;;34787:21;;;;;;;;;;;;;;;;:31;34752:66;34748:97;;;34828:7;;34837;;34820:25;;;;;;;;;34748:97;34870:34;34882:7;:21;34890:9;34900:1;34890:12;;;;;;;;;;;;;;;;;;;;;;;;;34882:21;;;;;;;;;;;;;;;;34870:7;:11;;:34;;;;:::i;:::-;34860:44;;34929:34;34941:7;:21;34949:9;34959:1;34949:12;;;;;;;;;;;;;;;;;;;;;;;;;34941:21;;;;;;;;;;;;;;;;34929:7;:11;;:34;;;;:::i;:::-;34919:44;;34728:3;;;;;;;34686:289;;;;34999:20;35011:7;;34999;;:11;;:20;;;;:::i;:::-;34989:7;:30;34985:61;;;35029:7;;35038;;35021:25;;;;;;;;34985:61;35065:7;35074;35057:25;;;;;;34529:561;;;:::o;33583:330::-;33643:7;33652;33661;33681:12;33696:24;33712:7;33696:15;:24::i;:::-;33681:39;;33731:18;33752:30;33774:7;33752:21;:30::i;:::-;33731:51;;33793:23;33819:33;33841:10;33819:17;33831:4;33819:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;33793:59;;33871:15;33888:4;33894:10;33863:42;;;;;;;;;33583:330;;;;;:::o;33921:429::-;34036:7;34045;34054;34074:15;34092:24;34104:11;34092:7;:11;;:24;;;;:::i;:::-;34074:42;;34127:12;34142:21;34151:11;34142:4;:8;;:21;;;;:::i;:::-;34127:36;;34174:18;34195:27;34210:11;34195:10;:14;;:27;;;;:::i;:::-;34174:48;;34233:23;34259:33;34281:10;34259:17;34271:4;34259:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;34233:59;;34311:7;34320:15;34337:4;34303:39;;;;;;;;;;33921:429;;;;;;;;:::o;39062:589::-;39188:21;39226:1;39212:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39188:40;;39257:4;39239;39244:1;39239:7;;;;;;;;;;;;;:23;;;;;;;;;;;39283:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39273:4;39278:1;39273:7;;;;;;;;;;;;;:32;;;;;;;;;;;39318:62;39335:4;39350:15;;;;;;;;;;;39368:11;39318:8;:62::i;:::-;39419:15;;;;;;;;;;;:66;;;39500:11;39526:1;39570:4;39597;39617:15;39419:224;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39062:589;;:::o;39659:519::-;39807:62;39824:4;39839:15;;;;;;;;;;;39857:11;39807:8;:62::i;:::-;39912:15;;;;;;;;;;;:31;;;39951:9;39984:4;40004:11;40030:1;40073;40124:4;40144:15;39912:258;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39659:519;;:::o;35809:398::-;35866:1;35855:7;;:12;:34;;;;;35888:1;35871:13;;:18;35855:34;:48;;;;;35902:1;35893:7;;:10;35855:48;:63;;;;;35917:1;35907:8;;:11;35855:63;35852:75;;;35920:7;;35852:75;35965:7;;35947:15;:25;;;;36007:13;;35983:21;:37;;;;36050:8;;36031:16;:27;;;;36087:7;;36069:15;:25;;;;36125:1;36115:7;:11;;;;36153:1;36137:13;:17;;;;36175:1;36165:7;:11;;;;36198:1;36187:8;:12;;;;35809:398;:::o;4833:471::-;4891:7;5141:1;5136;:6;5132:47;;;5166:1;5159:8;;;;5132:47;5191:9;5207:1;5203;:5;5191:17;;5236:1;5231;5227;:5;;;;;;:10;5219:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5295:1;5288:8;;;4833:471;;;;;:::o;42935:566::-;43038:15;43055:23;43080:12;43094:23;43119:12;43133:18;43155:19;43166:7;43155:10;:19::i;:::-;43037:137;;;;;;;;;;;;43203:28;43223:7;43203;:15;43211:6;43203:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43185:7;:15;43193:6;43185:15;;;;;;;;;;;;;;;:46;;;;43260:28;43280:7;43260;:15;43268:6;43260:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43242:7;:15;43250:6;43242:15;;;;;;;;;;;;;;;:46;;;;43320:39;43343:15;43320:7;:18;43328:9;43320:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43299:7;:18;43307:9;43299:18;;;;;;;;;;;;;;;:60;;;;43373:26;43388:10;43373:14;:26::i;:::-;43410:23;43422:4;43428;43410:11;:23::i;:::-;43466:9;43449:44;;43458:6;43449:44;;;43477:15;43449:44;;;;;;;;;;;;;;;;;;42935:566;;;;;;;;;:::o;42341:586::-;42442:15;42459:23;42484:12;42498:23;42523:12;42537:18;42559:19;42570:7;42559:10;:19::i;:::-;42441:137;;;;;;;;;;;;42607:28;42627:7;42607;:15;42615:6;42607:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42589:7;:15;42597:6;42589:15;;;;;;;;;;;;;;;:46;;;;42667:39;42690:15;42667:7;:18;42675:9;42667:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42646:7;:18;42654:9;42646:18;;;;;;;;;;;;;;;:60;;;;42738:39;42761:15;42738:7;:18;42746:9;42738:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42717:7;:18;42725:9;42717:18;;;;;;;;;;;;;;;:60;;;;42799:26;42814:10;42799:14;:26::i;:::-;42836:23;42848:4;42854;42836:11;:23::i;:::-;42892:9;42875:44;;42884:6;42875:44;;;42903:15;42875:44;;;;;;;;;;;;;;;;;;42341:586;;;;;;;;;:::o;41831:502::-;41930:15;41947:23;41972:12;41986:23;42011:12;42025:18;42047:19;42058:7;42047:10;:19::i;:::-;41929:137;;;;;;;;;;;;42095:28;42115:7;42095;:15;42103:6;42095:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42077:7;:15;42085:6;42077:15;;;;;;;;;;;;;;;:46;;;;42155:39;42178:15;42155:7;:18;42163:9;42155:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42134:7;:18;42142:9;42134:18;;;;;;;;;;;;;;;:60;;;;42205:26;42220:10;42205:14;:26::i;:::-;42242:23;42254:4;42260;42242:11;:23::i;:::-;42298:9;42281:44;;42290:6;42281:44;;;42309:15;42281:44;;;;;;;;;;;;;;;;;;41831:502;;;;;;;;;:::o;32245:642::-;32348:15;32365:23;32390:12;32404:23;32429:12;32443:18;32465:19;32476:7;32465:10;:19::i;:::-;32347:137;;;;;;;;;;;;32513:28;32533:7;32513;:15;32521:6;32513:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32495:7;:15;32503:6;32495:15;;;;;;;;;;;;;;;:46;;;;32570:28;32590:7;32570;:15;32578:6;32570:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;32552:7;:15;32560:6;32552:15;;;;;;;;;;;;;;;:46;;;;32630:39;32653:15;32630:7;:18;32638:9;32630:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32609:7;:18;32617:9;32609:18;;;;;;;;;;;;;;;:60;;;;32701:39;32724:15;32701:7;:18;32709:9;32701:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;32680:7;:18;32688:9;32680:18;;;;;;;;;;;;;;;:60;;;;32759:26;32774:10;32759:14;:26::i;:::-;32796:23;32808:4;32814;32796:11;:23::i;:::-;32852:9;32835:44;;32844:6;32835:44;;;32863:15;32835:44;;;;;;;;;;;;;;;;;;32245:642;;;;;;;;;:::o;36219:195::-;36272:15;;36262:7;:25;;;;36313:21;;36297:13;:37;;;;36355:16;;36344:8;:27;;;;36391:15;;36381:7;:25;;;;36219:195::o;35469:154::-;35533:7;35560:55;35599:5;35560:20;35572:7;;35560;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;35553:62;;35469:154;;;:::o;35631:166::-;35701:7;35728:61;35773:5;35728:26;35740:13;;35728:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;35721:68;;35631:166;;;:::o;35102:355::-;35165:19;35188:10;:8;:10::i;:::-;35165:33;;35209:18;35230:27;35245:11;35230:10;:14;;:27;;;;:::i;:::-;35209:48;;35293:38;35320:10;35293:7;:22;35309:4;35293:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;35268:7;:22;35284:4;35268:22;;;;;;;;;;;;;;;:63;;;;35345:11;:26;35365:4;35345:26;;;;;;;;;;;;;;;;;;;;;;;;;35342:107;;;35411:38;35438:10;35411:7;:22;35427:4;35411:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;35386:7;:22;35402:4;35386:22;;;;;;;;;;;;;;;:63;;;;35342:107;35102:355;;;:::o;33001:147::-;33079:17;33091:4;33079:7;;:11;;:17;;;;:::i;:::-;33069:7;:27;;;;33120:20;33135:4;33120:10;;:14;;:20;;;;:::i;:::-;33107:10;:33;;;;33001:147;;:::o
Swarm Source
ipfs://b3f404fa0ac4874bf9fac890ac968175e81a7897aefcf5ae7b6ef466fb8e462a