ERC-20
Overview
Max Total Supply
6,942,069,420 WGMINU
Holders
155
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
692.02772086 WGMINUValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
This contract may be a proxy contract. Click on More Options and select Is this a proxy? to confirm and enable the "Read as Proxy" & "Write as Proxy" tabs.
Contract Name:
WGMINU
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-12-20 */ /* WE'RE GONNA MAKE IT!!! www.wgminu.com ▄ ▄ ▌▒█ ▄▀▒▌ ▌▒▒█ ▄▀▒▒▒▐ ▐▄█▒▒▀▀▀▀▄▄▄▀▒▒▒▒▒▐ ▄▄▀▒▒▒▒▒▒▒▒▒▒▒█▒▒▄█▒▐ ▄▀▒▒▒░░░▒▒▒░░░▒▒▒▀██▀▒▌ ▐▒▒▒▄▄▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▀▄▒▌ ▌░░▌█▀▒▒▒▒▒▄▀█▄▒▒▒▒▒▒▒█▒▐ ▐░░░▒▒▒▒▒▒▒▒▌██▀▒▒░░░▒▒▒▀▄▌ ▌░▒▒▒▒▒▒▒▒▒▒▒▒▒▒░░░░░░▒▒▒▒▌ ▌▒▒▒▄██▄▒▒▒▒▒▒▒▒░░░░░░░░▒▒▒▐ ▐▒▒▐▄█▄█▌▒▒▒▒▒▒▒▒▒▒░▒░▒░▒▒▒▒▌ ▐▒▒▐▀▐▀▒▒▒▒▒▒▒▒▒▒▒▒▒░▒░▒░▒▒▐ ▌▒▒▀▄▄▄▄▄▄▒▒▒▒▒▒▒▒░▒░▒░▒▒▒▌ ▐▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒░▒░▒▒▄▒▒▐ ▀▄▒▒▒▒▒▒▒▒▒▒▒▒▒░▒░▒▄▒▒▒▒▌ ▀▄▒▒▒▒▒▒▒▒▒▒▄▄▄▀▒▒▒▒▄▀ ▀▄▄▄▄▄▄▀▀▀▒▒▒▒▒▄▄▀ ▀▀▀▀▀▀▀▀▀▀▀▀ */ // SPDX-License-Identifier: Unlicensed pragma solidity ^0.8.9; 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) { function _msgSender() internal view virtual returns (address) { 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() { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } function geUnlockTime() public view returns (uint256) { return _lockTime; } //Locks the contract for owner for the amount of time provided function lock(uint256 time) public virtual onlyOwner { _previousOwner = _owner; _owner = address(0); _lockTime = block.timestamp + time; emit OwnershipTransferred(_owner, address(0)); } //Unlocks the contract for owner when _lockTime is exceeds function unlock() public virtual { require( _previousOwner == msg.sender, "You don't have permission to unlock" ); require(block.timestamp > _lockTime, "Contract is locked until 7 days"); emit OwnershipTransferred(_owner, _previousOwner); _owner = _previousOwner; } } interface IUniswapV2Factory { event PairCreated( address indexed token0, address indexed token1, address pair, uint256 ); 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(uint256) external view returns (address pair); function allPairsLength() external view returns (uint256); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval( address indexed owner, address indexed spender, uint256 value ); event Transfer(address indexed from, address indexed to, uint256 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 (uint256); function balanceOf(address owner) external view returns (uint256); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 value) external returns (bool); function transfer(address to, uint256 value) external returns (bool); function transferFrom( address from, address to, uint256 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 (uint256); function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; event Mint(address indexed sender, uint256 amount0, uint256 amount1); event Burn( address indexed sender, uint256 amount0, uint256 amount1, address indexed to ); event Swap( address indexed sender, uint256 amount0In, uint256 amount1In, uint256 amount0Out, uint256 amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint256); 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 (uint256); function price1CumulativeLast() external view returns (uint256); function kLast() external view returns (uint256); function mint(address to) external returns (uint256 liquidity); function burn(address to) external returns (uint256 amount0, uint256 amount1); function swap( uint256 amount0Out, uint256 amount1Out, address to, bytes calldata data ) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint256 amountADesired, uint256 amountBDesired, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns ( uint256 amountA, uint256 amountB, uint256 liquidity ); function addLiquidityETH( address token, uint256 amountTokenDesired, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external payable returns ( uint256 amountToken, uint256 amountETH, uint256 liquidity ); function removeLiquidity( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETH( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountToken, uint256 amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint256 liquidity, uint256 amountAMin, uint256 amountBMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountA, uint256 amountB); function removeLiquidityETHWithPermit( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountToken, uint256 amountETH); function swapExactTokensForTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapTokensForExactTokens( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactETHForTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function swapTokensForExactETH( uint256 amountOut, uint256 amountInMax, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapExactTokensForETH( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external returns (uint256[] memory amounts); function swapETHForExactTokens( uint256 amountOut, address[] calldata path, address to, uint256 deadline ) external payable returns (uint256[] memory amounts); function quote( uint256 amountA, uint256 reserveA, uint256 reserveB ) external pure returns (uint256 amountB); function getAmountOut( uint256 amountIn, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountOut); function getAmountIn( uint256 amountOut, uint256 reserveIn, uint256 reserveOut ) external pure returns (uint256 amountIn); function getAmountsOut(uint256 amountIn, address[] calldata path) external view returns (uint256[] memory amounts); function getAmountsIn(uint256 amountOut, address[] calldata path) external view returns (uint256[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline ) external returns (uint256 amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint256 liquidity, uint256 amountTokenMin, uint256 amountETHMin, address to, uint256 deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint256 amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline ) external; } contract WGMINU 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; bool public canTrade = false; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 6942069420 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tFeeTotal; address public marketingWallet; string private _name = "WGMI Inu"; string private _symbol = "WGMINU"; uint8 private _decimals = 9; uint256 public _taxFee = 1; uint256 private _previousTaxFee = _taxFee; uint256 public _liquidityFee = 12; uint256 private _previousLiquidityFee = _liquidityFee; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndLiquify; bool public swapAndLiquifyEnabled = true; uint256 public _maxTxAmount = 69420000 * 10**9; uint256 public numTokensSellToAddToLiquidity = 69420000 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event SwapAndLiquifyEnabledUpdated(bool enabled); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiqudity ); modifier lockTheSwap() { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor() { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02( 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D ); //Mainnet & Testnet ETH // 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 != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap 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); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function setMarketingWallet(address walletAddress) public onlyOwner { marketingWallet = walletAddress; } function upliftTxAmount() external onlyOwner { _maxTxAmount = 69420000 * 10**9; } function setSwapThresholdAmount(uint256 SwapThresholdAmount) external onlyOwner { require( SwapThresholdAmount > 69420000, "Swap Threshold Amount cannot be less than 69 Million" ); numTokensSellToAddToLiquidity = SwapThresholdAmount * 10**9; } function claimTokens() public onlyOwner { payable(marketingWallet).transfer(address(this).balance); } function claimOtherTokens(IERC20 tokenAddress, address walletaddress) external onlyOwner { tokenAddress.transfer( walletaddress, tokenAddress.balanceOf(address(this)) ); } function clearStuckBalance(address payable walletaddress) external onlyOwner { walletaddress.transfer(address(this).balance); } function allowtrading() external onlyOwner { canTrade = true; } function setSwapAndLiquifyEnabled(bool _enabled) public onlyOwner { swapAndLiquifyEnabled = _enabled; emit SwapAndLiquifyEnabledUpdated(_enabled); } //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) return; _previousTaxFee = _taxFee; _previousLiquidityFee = _liquidityFee; _taxFee = 0; _liquidityFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _liquidityFee = _previousLiquidityFee; } 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(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if (from != owner() && to != owner()) require( amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount." ); // 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)); if (contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if ( overMinTokenBalance && !inSwapAndLiquify && from != uniswapV2Pair && swapAndLiquifyEnabled ) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if (_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from, to, amount, takeFee); } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { // split the contract balance into halves // add the marketing wallet 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); uint256 marketingshare = newBalance.mul(75).div(100); payable(marketingWallet).transfer(marketingshare); newBalance -= marketingshare; // 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 owner(), block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer( address sender, address recipient, uint256 amount, bool takeFee ) private { if (!canTrade) { require(sender == owner()); // only owner allowed to trade or add liquidity } if (!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if (!takeFee) 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); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"SwapAndLiquifyEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_liquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"allowtrading","outputs":[],"stateMutability":"nonpayable","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":"canTrade","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"contract IERC20","name":"tokenAddress","type":"address"},{"internalType":"address","name":"walletaddress","type":"address"}],"name":"claimOtherTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"walletaddress","type":"address"}],"name":"clearStuckBalance","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"}],"name":"deliver","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"geUnlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"time","type":"uint256"}],"name":"lock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSellToAddToLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"walletAddress","type":"address"}],"name":"setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"SwapThresholdAmount","type":"uint256"}],"name":"setSwapThresholdAmount","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"},{"inputs":[],"name":"upliftTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000600960006101000a81548160ff0219169083151502179055506760572f5b5933b800600a55600a546000196200003d9190620006cf565b6000196200004c919062000736565b600b556040518060400160405280600881526020017f57474d4920496e75000000000000000000000000000000000000000000000000815250600e90805190602001906200009c929190620005e6565b506040518060400160405280600681526020017f57474d494e550000000000000000000000000000000000000000000000000000815250600f9080519060200190620000ea929190620005e6565b506009601060006101000a81548160ff021916908360ff1602179055506001601155601154601255600c6013556013546014556001601560016101000a81548160ff02191690831515021790555066f6a11f484ec00060165566f6a11f484ec0006017553480156200015b57600080fd5b5060006200016e620005b560201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600b546003600062000223620005b560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620002c157600080fd5b505afa158015620002d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002fc9190620007db565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200035f57600080fd5b505afa15801562000374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039a9190620007db565b6040518363ffffffff1660e01b8152600401620003b99291906200081e565b602060405180830381600087803b158015620003d457600080fd5b505af1158015620003e9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040f9190620007db565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600660006200048c620005bd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555062000545620005b560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600a54604051620005a691906200085c565b60405180910390a350620008de565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620005f490620008a8565b90600052602060002090601f01602090048101928262000618576000855562000664565b82601f106200063357805160ff191683800117855562000664565b8280016001018555821562000664579182015b828111156200066357825182559160200191906001019062000646565b5b50905062000673919062000677565b5090565b5b808211156200069257600081600090555060010162000678565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620006dc8262000696565b9150620006e98362000696565b925082620006fc57620006fb620006a0565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007438262000696565b9150620007508362000696565b92508282101562000766576200076562000707565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620007a38262000776565b9050919050565b620007b58162000796565b8114620007c157600080fd5b50565b600081519050620007d581620007aa565b92915050565b600060208284031215620007f457620007f362000771565b5b60006200080484828501620007c4565b91505092915050565b620008188162000796565b82525050565b60006040820190506200083560008301856200080d565b6200084460208301846200080d565b9392505050565b620008568162000696565b82525050565b60006020820190506200087360008301846200084b565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620008c157607f821691505b60208210811415620008d857620008d762000879565b5b50919050565b60805160a051615df06200092e6000396000818161171a0152612da1015260008181610ae101528181613a3401528181613b2401528181613b4b01528181613c620152613c890152615df06000f3fe60806040526004361061026b5760003560e01c80635d098b3811610144578063a6334231116100b6578063d12a76881161007a578063d12a76881461092b578063dd46706414610956578063dd62ed3e1461097f578063e8c4c43c146109bc578063ea2f0b37146109d3578063f2fde38b146109fc57610272565b8063a63342311461086c578063a69df4b514610883578063a9059cbb1461089a578063b6c52324146108d7578063c49b9a801461090257610272565b8063764d72bf11610108578063764d72bf146107485780637d1db4a51461077157806388f820201461079c5780638da5cb5b146107d957806395d89b4114610804578063a457c2d71461082f57610272565b80635d098b38146106755780636bc87c3a1461069e57806370a08231146106c9578063715018a61461070657806375f0a8741461071d57610272565b806339509351116101dd5780634549b039116101a15780634549b0391461056557806348c54b9d146105a257806349bd5a5e146105b95780634a74bb02146105e457806352390c021461060f5780635342acb41461063857610272565b806339509351146104825780633ae7dc20146104bf5780633b124fe7146104e85780633bd5d17314610513578063437823ec1461053c57610272565b806323b872dd1161022f57806323b872dd1461036057806329e04b4a1461039d5780632d838119146103c65780632f05205c14610403578063313ce5671461042e5780633685d4191461045957610272565b806306fdde0314610277578063095ea7b3146102a257806313114a9d146102df5780631694505e1461030a57806318160ddd1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a25565b60405161029991906149fd565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190614ab8565b610ab7565b6040516102d69190614b13565b60405180910390f35b3480156102eb57600080fd5b506102f4610ad5565b6040516103019190614b3d565b60405180910390f35b34801561031657600080fd5b5061031f610adf565b60405161032c9190614bb7565b60405180910390f35b34801561034157600080fd5b5061034a610b03565b6040516103579190614b3d565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190614bd2565b610b0d565b6040516103949190614b13565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190614c25565b610be6565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190614c25565b610cda565b6040516103fa9190614b3d565b60405180910390f35b34801561040f57600080fd5b50610418610d48565b6040516104259190614b13565b60405180910390f35b34801561043a57600080fd5b50610443610d5b565b6040516104509190614c6e565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190614c89565b610d72565b005b34801561048e57600080fd5b506104a960048036038101906104a49190614ab8565b6110c1565b6040516104b69190614b13565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190614cf4565b611174565b005b3480156104f457600080fd5b506104fd611323565b60405161050a9190614b3d565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190614c25565b611329565b005b34801561054857600080fd5b50610563600480360381019061055e9190614c89565b6114a4565b005b34801561057157600080fd5b5061058c60048036038101906105879190614d60565b611594565b6040516105999190614b3d565b60405180910390f35b3480156105ae57600080fd5b506105b7611618565b005b3480156105c557600080fd5b506105ce611718565b6040516105db9190614daf565b60405180910390f35b3480156105f057600080fd5b506105f961173c565b6040516106069190614b13565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190614c89565b61174f565b005b34801561064457600080fd5b5061065f600480360381019061065a9190614c89565b611a03565b60405161066c9190614b13565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190614c89565b611a59565b005b3480156106aa57600080fd5b506106b3611b32565b6040516106c09190614b3d565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb9190614c89565b611b38565b6040516106fd9190614b3d565b60405180910390f35b34801561071257600080fd5b5061071b611c23565b005b34801561072957600080fd5b50610732611d76565b60405161073f9190614daf565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a9190614e08565b611d9c565b005b34801561077d57600080fd5b50610786611e7b565b6040516107939190614b3d565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be9190614c89565b611e81565b6040516107d09190614b13565b60405180910390f35b3480156107e557600080fd5b506107ee611ed7565b6040516107fb9190614daf565b60405180910390f35b34801561081057600080fd5b50610819611f00565b60405161082691906149fd565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190614ab8565b611f92565b6040516108639190614b13565b60405180910390f35b34801561087857600080fd5b5061088161205f565b005b34801561088f57600080fd5b50610898612111565b005b3480156108a657600080fd5b506108c160048036038101906108bc9190614ab8565b6122e5565b6040516108ce9190614b13565b60405180910390f35b3480156108e357600080fd5b506108ec612303565b6040516108f99190614b3d565b60405180910390f35b34801561090e57600080fd5b5061092960048036038101906109249190614e35565b61230d565b005b34801561093757600080fd5b506109406123f6565b60405161094d9190614b3d565b60405180910390f35b34801561096257600080fd5b5061097d60048036038101906109789190614c25565b6123fc565b005b34801561098b57600080fd5b506109a660048036038101906109a19190614e62565b6125c3565b6040516109b39190614b3d565b60405180910390f35b3480156109c857600080fd5b506109d161264a565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190614c89565b6126ef565b005b348015610a0857600080fd5b50610a236004803603810190610a1e9190614c89565b6127df565b005b6060600e8054610a3490614ed1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6090614ed1565b8015610aad5780601f10610a8257610100808354040283529160200191610aad565b820191906000526020600020905b815481529060010190602001808311610a9057829003601f168201915b5050505050905090565b6000610acb610ac46129a1565b84846129a9565b6001905092915050565b6000600c54905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600a54905090565b6000610b1a848484612b74565b610bdb84610b266129a1565b610bd685604051806060016040528060288152602001615d6e60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b8c6129a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee19092919063ffffffff16565b6129a9565b600190509392505050565b610bee6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290614f4f565b60405180910390fd5b63042343e08111610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890614fe1565b60405180910390fd5b633b9aca0081610cd19190615030565b60178190555050565b6000600b54821115610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d18906150fc565b60405180910390fd5b6000610d2b612f45565b9050610d408184612f7090919063ffffffff16565b915050919050565b600960009054906101000a900460ff1681565b6000601060009054906101000a900460ff16905090565b610d7a6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90614f4f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90615168565b60405180910390fd5b60005b6008805490508110156110bd578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610ece57610ecd615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110aa5760086001600880549050610f2991906151b7565b81548110610f3a57610f39615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f7957610f78615188565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806110705761106f6151eb565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110bd565b80806110b59061521a565b915050610e96565b5050565b600061116a6110ce6129a1565b8461116585600560006110df6129a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b6129a9565b6001905092915050565b61117c6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090614f4f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161125f9190614daf565b60206040518083038186803b15801561127757600080fd5b505afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af9190615278565b6040518363ffffffff1660e01b81526004016112cc9291906152a5565b602060405180830381600087803b1580156112e657600080fd5b505af11580156112fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131e91906152e3565b505050565b60115481565b60006113336129a1565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990615382565b60405180910390fd5b60006113cd83613018565b5050505050905061142681600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061147e81600b5461307490919063ffffffff16565b600b8190555061149983600c54612fba90919063ffffffff16565b600c81905550505050565b6114ac6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090614f4f565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a548311156115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906153ee565b60405180910390fd5b816115fb5760006115eb84613018565b5050505050905080915050611612565b600061160684613018565b50505050915050809150505b92915050565b6116206129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614f4f565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611715573d6000803e3d6000fd5b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b601560019054906101000a900460ff1681565b6117576129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90614f4f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186890615168565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561194557611901600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cda565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611a616129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae590614f4f565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611bd357600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611c1e565b611c1b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cda565b90505b919050565b611c2b6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caf90614f4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611da46129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2890614f4f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e77573d6000803e3d6000fd5b5050565b60165481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611f0f90614ed1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3b90614ed1565b8015611f885780601f10611f5d57610100808354040283529160200191611f88565b820191906000526020600020905b815481529060010190602001808311611f6b57829003601f168201915b5050505050905090565b6000612055611f9f6129a1565b8461205085604051806060016040528060258152602001615d966025913960056000611fc96129a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee19092919063ffffffff16565b6129a9565b6001905092915050565b6120676129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb90614f4f565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219890615480565b60405180910390fd5b60025442116121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc906154ec565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006122f96122f26129a1565b8484612b74565b6001905092915050565b6000600254905090565b6123156129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239990614f4f565b60405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123eb9190614b13565b60405180910390a150565b60175481565b6124046129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248890614f4f565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261253f919061550c565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126526129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614f4f565b60405180910390fd5b66f6a11f484ec000601681905550565b6126f76129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277b90614f4f565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6127e76129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90614f4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128db906155d4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1090615666565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a80906156f8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b679190614b3d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdb9061578a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4b9061581c565b60405180910390fd5b60008111612c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8e906158ae565b60405180910390fd5b612c9f611ed7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d0d5750612cdd611ed7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d5857601654811115612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e90615940565b60405180910390fd5b5b6000612d6330611b38565b90506016548110612d745760165490505b60006017548210159050808015612d985750601560009054906101000a900460ff16155b8015612df057507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e085750601560019054906101000a900460ff165b15612e1c576017549150612e1b826130be565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ec35750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ecd57600090505b612ed986868684613237565b505050505050565b6000838311158290612f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2091906149fd565b60405180910390fd5b5060008385612f3891906151b7565b9050809150509392505050565b6000806000612f5261359c565b91509150612f698183612f7090919063ffffffff16565b9250505090565b6000612fb283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061384f565b905092915050565b6000808284612fc9919061550c565b90508381101561300e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613005906159ac565b60405180910390fd5b8091505092915050565b600080600080600080600080600061302f8a6138b2565b925092509250600080600061304d8d8686613048612f45565b61390c565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006130b683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ee1565b905092915050565b6001601560006101000a81548160ff02191690831515021790555060006130ef600283612f7090919063ffffffff16565b90506000613106828461307490919063ffffffff16565b9050600047905061311683613995565b600061312b824761307490919063ffffffff16565b905060006131566064613148604b85613be190919063ffffffff16565b612f7090919063ffffffff16565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156131c0573d6000803e3d6000fd5b5080826131cd91906151b7565b91506131d98483613c5c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185838660405161320c939291906159cc565b60405180910390a150505050506000601560006101000a81548160ff02191690831515021790555050565b600960009054906101000a900460ff1661328b57613253611ed7565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461328a57600080fd5b5b8061329957613298613d4c565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561333c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133515761334c848484613d8f565b613588565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133f45750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561340957613404848484613fef565b613587565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134ad5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134c2576134bd84848461424f565b613586565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135645750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135795761357484848461441a565b613585565b61358484848461424f565b5b5b5b5b806135965761359561470f565b5b50505050565b6000806000600b5490506000600a54905060005b600880549050811015613812578260036000600884815481106135d6576135d5615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806136c4575081600460006008848154811061365c5761365b615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156136db57600b54600a549450945050505061384b565b61376b60036000600884815481106136f6576136f5615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461307490919063ffffffff16565b92506137fd600460006008848154811061378857613787615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361307490919063ffffffff16565b9150808061380a9061521a565b9150506135b0565b5061382a600a54600b54612f7090919063ffffffff16565b82101561384257600b54600a5493509350505061384b565b81819350935050505b9091565b60008083118290613896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388d91906149fd565b60405180910390fd5b50600083856138a59190615a32565b9050809150509392505050565b6000806000806138c185614723565b905060006138ce86614754565b905060006138f7826138e9858a61307490919063ffffffff16565b61307490919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806139258589613be190919063ffffffff16565b9050600061393c8689613be190919063ffffffff16565b905060006139538789613be190919063ffffffff16565b9050600061397c8261396e858761307490919063ffffffff16565b61307490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156139b2576139b1615a63565b5b6040519080825280602002602001820160405280156139e05781602001602082028036833780820191505090505b50905030816000815181106139f8576139f7615188565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a9857600080fd5b505afa158015613aac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad09190615aa7565b81600181518110613ae457613ae3615188565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b49307f0000000000000000000000000000000000000000000000000000000000000000846129a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bab959493929190615bcd565b600060405180830381600087803b158015613bc557600080fd5b505af1158015613bd9573d6000803e3d6000fd5b505050505050565b600080831415613bf45760009050613c56565b60008284613c029190615030565b9050828482613c119190615a32565b14613c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c4890615c99565b60405180910390fd5b809150505b92915050565b613c87307f0000000000000000000000000000000000000000000000000000000000000000846129a9565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613cd1611ed7565b426040518863ffffffff1660e01b8152600401613cf396959493929190615cb9565b6060604051808303818588803b158015613d0c57600080fd5b505af1158015613d20573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d459190615d1a565b5050505050565b6000601154148015613d6057506000601354145b15613d6a57613d8d565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613da187613018565b955095509550955095509550613dff87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e9486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f2985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f7581614785565b613f7f848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613fdc9190614b3d565b60405180910390a3505050505050505050565b60008060008060008061400187613018565b95509550955095509550955061405f86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140f483600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061418985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141d581614785565b6141df848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161423c9190614b3d565b60405180910390a3505050505050505050565b60008060008060008061426187613018565b9550955095509550955095506142bf86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a081614785565b6143aa848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144079190614b3d565b60405180910390a3505050505050505050565b60008060008060008061442c87613018565b95509550955095509550955061448a87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061451f86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145b483600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061464985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061469581614785565b61469f848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516146fc9190614b3d565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b600061474d606461473f60115485613be190919063ffffffff16565b612f7090919063ffffffff16565b9050919050565b600061477e606461477060135485613be190919063ffffffff16565b612f7090919063ffffffff16565b9050919050565b600061478f612f45565b905060006147a68284613be190919063ffffffff16565b90506147fa81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614925576148e183600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61493f82600b5461307490919063ffffffff16565b600b8190555061495a81600c54612fba90919063ffffffff16565b600c819055505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561499e578082015181840152602081019050614983565b838111156149ad576000848401525b50505050565b6000601f19601f8301169050919050565b60006149cf82614964565b6149d9818561496f565b93506149e9818560208601614980565b6149f2816149b3565b840191505092915050565b60006020820190508181036000830152614a1781846149c4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a4f82614a24565b9050919050565b614a5f81614a44565b8114614a6a57600080fd5b50565b600081359050614a7c81614a56565b92915050565b6000819050919050565b614a9581614a82565b8114614aa057600080fd5b50565b600081359050614ab281614a8c565b92915050565b60008060408385031215614acf57614ace614a1f565b5b6000614add85828601614a6d565b9250506020614aee85828601614aa3565b9150509250929050565b60008115159050919050565b614b0d81614af8565b82525050565b6000602082019050614b286000830184614b04565b92915050565b614b3781614a82565b82525050565b6000602082019050614b526000830184614b2e565b92915050565b6000819050919050565b6000614b7d614b78614b7384614a24565b614b58565b614a24565b9050919050565b6000614b8f82614b62565b9050919050565b6000614ba182614b84565b9050919050565b614bb181614b96565b82525050565b6000602082019050614bcc6000830184614ba8565b92915050565b600080600060608486031215614beb57614bea614a1f565b5b6000614bf986828701614a6d565b9350506020614c0a86828701614a6d565b9250506040614c1b86828701614aa3565b9150509250925092565b600060208284031215614c3b57614c3a614a1f565b5b6000614c4984828501614aa3565b91505092915050565b600060ff82169050919050565b614c6881614c52565b82525050565b6000602082019050614c836000830184614c5f565b92915050565b600060208284031215614c9f57614c9e614a1f565b5b6000614cad84828501614a6d565b91505092915050565b6000614cc182614a44565b9050919050565b614cd181614cb6565b8114614cdc57600080fd5b50565b600081359050614cee81614cc8565b92915050565b60008060408385031215614d0b57614d0a614a1f565b5b6000614d1985828601614cdf565b9250506020614d2a85828601614a6d565b9150509250929050565b614d3d81614af8565b8114614d4857600080fd5b50565b600081359050614d5a81614d34565b92915050565b60008060408385031215614d7757614d76614a1f565b5b6000614d8585828601614aa3565b9250506020614d9685828601614d4b565b9150509250929050565b614da981614a44565b82525050565b6000602082019050614dc46000830184614da0565b92915050565b6000614dd582614a24565b9050919050565b614de581614dca565b8114614df057600080fd5b50565b600081359050614e0281614ddc565b92915050565b600060208284031215614e1e57614e1d614a1f565b5b6000614e2c84828501614df3565b91505092915050565b600060208284031215614e4b57614e4a614a1f565b5b6000614e5984828501614d4b565b91505092915050565b60008060408385031215614e7957614e78614a1f565b5b6000614e8785828601614a6d565b9250506020614e9885828601614a6d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614ee957607f821691505b60208210811415614efd57614efc614ea2565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f3960208361496f565b9150614f4482614f03565b602082019050919050565b60006020820190508181036000830152614f6881614f2c565b9050919050565b7f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060008201527f6c657373207468616e203639204d696c6c696f6e000000000000000000000000602082015250565b6000614fcb60348361496f565b9150614fd682614f6f565b604082019050919050565b60006020820190508181036000830152614ffa81614fbe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061503b82614a82565b915061504683614a82565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561507f5761507e615001565b5b828202905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006150e6602a8361496f565b91506150f18261508a565b604082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000615152601b8361496f565b915061515d8261511c565b602082019050919050565b6000602082019050818103600083015261518181615145565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006151c282614a82565b91506151cd83614a82565b9250828210156151e0576151df615001565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061522582614a82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561525857615257615001565b5b600182019050919050565b60008151905061527281614a8c565b92915050565b60006020828403121561528e5761528d614a1f565b5b600061529c84828501615263565b91505092915050565b60006040820190506152ba6000830185614da0565b6152c76020830184614b2e565b9392505050565b6000815190506152dd81614d34565b92915050565b6000602082840312156152f9576152f8614a1f565b5b6000615307848285016152ce565b91505092915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061536c602c8361496f565b915061537782615310565b604082019050919050565b6000602082019050818103600083015261539b8161535f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006153d8601f8361496f565b91506153e3826153a2565b602082019050919050565b60006020820190508181036000830152615407816153cb565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061546a60238361496f565b91506154758261540e565b604082019050919050565b600060208201905081810360008301526154998161545d565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b60006154d6601f8361496f565b91506154e1826154a0565b602082019050919050565b60006020820190508181036000830152615505816154c9565b9050919050565b600061551782614a82565b915061552283614a82565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561555757615556615001565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155be60268361496f565b91506155c982615562565b604082019050919050565b600060208201905081810360008301526155ed816155b1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061565060248361496f565b915061565b826155f4565b604082019050919050565b6000602082019050818103600083015261567f81615643565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156e260228361496f565b91506156ed82615686565b604082019050919050565b60006020820190508181036000830152615711816156d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061577460258361496f565b915061577f82615718565b604082019050919050565b600060208201905081810360008301526157a381615767565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061580660238361496f565b9150615811826157aa565b604082019050919050565b60006020820190508181036000830152615835816157f9565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061589860298361496f565b91506158a38261583c565b604082019050919050565b600060208201905081810360008301526158c78161588b565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061592a60288361496f565b9150615935826158ce565b604082019050919050565b600060208201905081810360008301526159598161591d565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615996601b8361496f565b91506159a182615960565b602082019050919050565b600060208201905081810360008301526159c581615989565b9050919050565b60006060820190506159e16000830186614b2e565b6159ee6020830185614b2e565b6159fb6040830184614b2e565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a3d82614a82565b9150615a4883614a82565b925082615a5857615a57615a03565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615aa181614a56565b92915050565b600060208284031215615abd57615abc614a1f565b5b6000615acb84828501615a92565b91505092915050565b6000819050919050565b6000615af9615af4615aef84615ad4565b614b58565b614a82565b9050919050565b615b0981615ade565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b4481614a44565b82525050565b6000615b568383615b3b565b60208301905092915050565b6000602082019050919050565b6000615b7a82615b0f565b615b848185615b1a565b9350615b8f83615b2b565b8060005b83811015615bc0578151615ba78882615b4a565b9750615bb283615b62565b925050600181019050615b93565b5085935050505092915050565b600060a082019050615be26000830188614b2e565b615bef6020830187615b00565b8181036040830152615c018186615b6f565b9050615c106060830185614da0565b615c1d6080830184614b2e565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c8360218361496f565b9150615c8e82615c27565b604082019050919050565b60006020820190508181036000830152615cb281615c76565b9050919050565b600060c082019050615cce6000830189614da0565b615cdb6020830188614b2e565b615ce86040830187615b00565b615cf56060830186615b00565b615d026080830185614da0565b615d0f60a0830184614b2e565b979650505050505050565b600080600060608486031215615d3357615d32614a1f565b5b6000615d4186828701615263565b9350506020615d5286828701615263565b9250506040615d6386828701615263565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bc1d7a0b01c733850a567703b1d9efe75c6348de475df2c628a96d2a0705458064736f6c63430008090033
Deployed Bytecode
0x60806040526004361061026b5760003560e01c80635d098b3811610144578063a6334231116100b6578063d12a76881161007a578063d12a76881461092b578063dd46706414610956578063dd62ed3e1461097f578063e8c4c43c146109bc578063ea2f0b37146109d3578063f2fde38b146109fc57610272565b8063a63342311461086c578063a69df4b514610883578063a9059cbb1461089a578063b6c52324146108d7578063c49b9a801461090257610272565b8063764d72bf11610108578063764d72bf146107485780637d1db4a51461077157806388f820201461079c5780638da5cb5b146107d957806395d89b4114610804578063a457c2d71461082f57610272565b80635d098b38146106755780636bc87c3a1461069e57806370a08231146106c9578063715018a61461070657806375f0a8741461071d57610272565b806339509351116101dd5780634549b039116101a15780634549b0391461056557806348c54b9d146105a257806349bd5a5e146105b95780634a74bb02146105e457806352390c021461060f5780635342acb41461063857610272565b806339509351146104825780633ae7dc20146104bf5780633b124fe7146104e85780633bd5d17314610513578063437823ec1461053c57610272565b806323b872dd1161022f57806323b872dd1461036057806329e04b4a1461039d5780632d838119146103c65780632f05205c14610403578063313ce5671461042e5780633685d4191461045957610272565b806306fdde0314610277578063095ea7b3146102a257806313114a9d146102df5780631694505e1461030a57806318160ddd1461033557610272565b3661027257005b600080fd5b34801561028357600080fd5b5061028c610a25565b60405161029991906149fd565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190614ab8565b610ab7565b6040516102d69190614b13565b60405180910390f35b3480156102eb57600080fd5b506102f4610ad5565b6040516103019190614b3d565b60405180910390f35b34801561031657600080fd5b5061031f610adf565b60405161032c9190614bb7565b60405180910390f35b34801561034157600080fd5b5061034a610b03565b6040516103579190614b3d565b60405180910390f35b34801561036c57600080fd5b5061038760048036038101906103829190614bd2565b610b0d565b6040516103949190614b13565b60405180910390f35b3480156103a957600080fd5b506103c460048036038101906103bf9190614c25565b610be6565b005b3480156103d257600080fd5b506103ed60048036038101906103e89190614c25565b610cda565b6040516103fa9190614b3d565b60405180910390f35b34801561040f57600080fd5b50610418610d48565b6040516104259190614b13565b60405180910390f35b34801561043a57600080fd5b50610443610d5b565b6040516104509190614c6e565b60405180910390f35b34801561046557600080fd5b50610480600480360381019061047b9190614c89565b610d72565b005b34801561048e57600080fd5b506104a960048036038101906104a49190614ab8565b6110c1565b6040516104b69190614b13565b60405180910390f35b3480156104cb57600080fd5b506104e660048036038101906104e19190614cf4565b611174565b005b3480156104f457600080fd5b506104fd611323565b60405161050a9190614b3d565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190614c25565b611329565b005b34801561054857600080fd5b50610563600480360381019061055e9190614c89565b6114a4565b005b34801561057157600080fd5b5061058c60048036038101906105879190614d60565b611594565b6040516105999190614b3d565b60405180910390f35b3480156105ae57600080fd5b506105b7611618565b005b3480156105c557600080fd5b506105ce611718565b6040516105db9190614daf565b60405180910390f35b3480156105f057600080fd5b506105f961173c565b6040516106069190614b13565b60405180910390f35b34801561061b57600080fd5b5061063660048036038101906106319190614c89565b61174f565b005b34801561064457600080fd5b5061065f600480360381019061065a9190614c89565b611a03565b60405161066c9190614b13565b60405180910390f35b34801561068157600080fd5b5061069c60048036038101906106979190614c89565b611a59565b005b3480156106aa57600080fd5b506106b3611b32565b6040516106c09190614b3d565b60405180910390f35b3480156106d557600080fd5b506106f060048036038101906106eb9190614c89565b611b38565b6040516106fd9190614b3d565b60405180910390f35b34801561071257600080fd5b5061071b611c23565b005b34801561072957600080fd5b50610732611d76565b60405161073f9190614daf565b60405180910390f35b34801561075457600080fd5b5061076f600480360381019061076a9190614e08565b611d9c565b005b34801561077d57600080fd5b50610786611e7b565b6040516107939190614b3d565b60405180910390f35b3480156107a857600080fd5b506107c360048036038101906107be9190614c89565b611e81565b6040516107d09190614b13565b60405180910390f35b3480156107e557600080fd5b506107ee611ed7565b6040516107fb9190614daf565b60405180910390f35b34801561081057600080fd5b50610819611f00565b60405161082691906149fd565b60405180910390f35b34801561083b57600080fd5b5061085660048036038101906108519190614ab8565b611f92565b6040516108639190614b13565b60405180910390f35b34801561087857600080fd5b5061088161205f565b005b34801561088f57600080fd5b50610898612111565b005b3480156108a657600080fd5b506108c160048036038101906108bc9190614ab8565b6122e5565b6040516108ce9190614b13565b60405180910390f35b3480156108e357600080fd5b506108ec612303565b6040516108f99190614b3d565b60405180910390f35b34801561090e57600080fd5b5061092960048036038101906109249190614e35565b61230d565b005b34801561093757600080fd5b506109406123f6565b60405161094d9190614b3d565b60405180910390f35b34801561096257600080fd5b5061097d60048036038101906109789190614c25565b6123fc565b005b34801561098b57600080fd5b506109a660048036038101906109a19190614e62565b6125c3565b6040516109b39190614b3d565b60405180910390f35b3480156109c857600080fd5b506109d161264a565b005b3480156109df57600080fd5b506109fa60048036038101906109f59190614c89565b6126ef565b005b348015610a0857600080fd5b50610a236004803603810190610a1e9190614c89565b6127df565b005b6060600e8054610a3490614ed1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6090614ed1565b8015610aad5780601f10610a8257610100808354040283529160200191610aad565b820191906000526020600020905b815481529060010190602001808311610a9057829003601f168201915b5050505050905090565b6000610acb610ac46129a1565b84846129a9565b6001905092915050565b6000600c54905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600a54905090565b6000610b1a848484612b74565b610bdb84610b266129a1565b610bd685604051806060016040528060288152602001615d6e60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b8c6129a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee19092919063ffffffff16565b6129a9565b600190509392505050565b610bee6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7290614f4f565b60405180910390fd5b63042343e08111610cc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb890614fe1565b60405180910390fd5b633b9aca0081610cd19190615030565b60178190555050565b6000600b54821115610d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d18906150fc565b60405180910390fd5b6000610d2b612f45565b9050610d408184612f7090919063ffffffff16565b915050919050565b600960009054906101000a900460ff1681565b6000601060009054906101000a900460ff16905090565b610d7a6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610e07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dfe90614f4f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610e93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8a90615168565b60405180910390fd5b60005b6008805490508110156110bd578173ffffffffffffffffffffffffffffffffffffffff1660088281548110610ece57610ecd615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156110aa5760086001600880549050610f2991906151b7565b81548110610f3a57610f39615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660088281548110610f7957610f78615188565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555060088054806110705761106f6151eb565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556110bd565b80806110b59061521a565b915050610e96565b5050565b600061116a6110ce6129a1565b8461116585600560006110df6129a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b6129a9565b6001905092915050565b61117c6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611209576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120090614f4f565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb828473ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161125f9190614daf565b60206040518083038186803b15801561127757600080fd5b505afa15801561128b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112af9190615278565b6040518363ffffffff1660e01b81526004016112cc9291906152a5565b602060405180830381600087803b1580156112e657600080fd5b505af11580156112fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061131e91906152e3565b505050565b60115481565b60006113336129a1565b9050600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156113c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b990615382565b60405180910390fd5b60006113cd83613018565b5050505050905061142681600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061147e81600b5461307490919063ffffffff16565b600b8190555061149983600c54612fba90919063ffffffff16565b600c81905550505050565b6114ac6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153090614f4f565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600a548311156115db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d2906153ee565b60405180910390fd5b816115fb5760006115eb84613018565b5050505050905080915050611612565b600061160684613018565b50505050915050809150505b92915050565b6116206129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116a490614f4f565b60405180910390fd5b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611715573d6000803e3d6000fd5b50565b7f00000000000000000000000097f2ab378e541d8b58fe4b012dd63350042c0f0381565b601560019054906101000a900460ff1681565b6117576129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db90614f4f565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611871576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186890615168565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561194557611901600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cda565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611a616129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611aee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae590614f4f565b60405180910390fd5b80600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611bd357600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611c1e565b611c1b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610cda565b90505b919050565b611c2b6129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611caf90614f4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611da46129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2890614f4f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015611e77573d6000803e3d6000fd5b5050565b60165481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600f8054611f0f90614ed1565b80601f0160208091040260200160405190810160405280929190818152602001828054611f3b90614ed1565b8015611f885780601f10611f5d57610100808354040283529160200191611f88565b820191906000526020600020905b815481529060010190602001808311611f6b57829003601f168201915b5050505050905090565b6000612055611f9f6129a1565b8461205085604051806060016040528060258152602001615d966025913960056000611fc96129a1565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612ee19092919063ffffffff16565b6129a9565b6001905092915050565b6120676129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb90614f4f565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b3373ffffffffffffffffffffffffffffffffffffffff16600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219890615480565b60405180910390fd5b60025442116121e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121dc906154ec565b60405180910390fd5b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60006122f96122f26129a1565b8484612b74565b6001905092915050565b6000600254905090565b6123156129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239990614f4f565b60405180910390fd5b80601560016101000a81548160ff0219169083151502179055507f53726dfcaf90650aa7eb35524f4d3220f07413c8d6cb404cc8c18bf5591bc159816040516123eb9190614b13565b60405180910390a150565b60175481565b6124046129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612491576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248890614f4f565b60405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550804261253f919061550c565b600281905550600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6126526129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d690614f4f565b60405180910390fd5b66f6a11f484ec000601681905550565b6126f76129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612784576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277b90614f4f565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6127e76129a1565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161286b90614f4f565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156128e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128db906155d4565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612a19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1090615666565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a80906156f8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612b679190614b3d565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612be4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bdb9061578a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612c54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4b9061581c565b60405180910390fd5b60008111612c97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8e906158ae565b60405180910390fd5b612c9f611ed7565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612d0d5750612cdd611ed7565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612d5857601654811115612d57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4e90615940565b60405180910390fd5b5b6000612d6330611b38565b90506016548110612d745760165490505b60006017548210159050808015612d985750601560009054906101000a900460ff16155b8015612df057507f00000000000000000000000097f2ab378e541d8b58fe4b012dd63350042c0f0373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b8015612e085750601560019054906101000a900460ff165b15612e1c576017549150612e1b826130be565b5b600060019050600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612ec35750600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612ecd57600090505b612ed986868684613237565b505050505050565b6000838311158290612f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f2091906149fd565b60405180910390fd5b5060008385612f3891906151b7565b9050809150509392505050565b6000806000612f5261359c565b91509150612f698183612f7090919063ffffffff16565b9250505090565b6000612fb283836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525061384f565b905092915050565b6000808284612fc9919061550c565b90508381101561300e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613005906159ac565b60405180910390fd5b8091505092915050565b600080600080600080600080600061302f8a6138b2565b925092509250600080600061304d8d8686613048612f45565b61390c565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b60006130b683836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612ee1565b905092915050565b6001601560006101000a81548160ff02191690831515021790555060006130ef600283612f7090919063ffffffff16565b90506000613106828461307490919063ffffffff16565b9050600047905061311683613995565b600061312b824761307490919063ffffffff16565b905060006131566064613148604b85613be190919063ffffffff16565b612f7090919063ffffffff16565b9050600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156131c0573d6000803e3d6000fd5b5080826131cd91906151b7565b91506131d98483613c5c565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56185838660405161320c939291906159cc565b60405180910390a150505050506000601560006101000a81548160ff02191690831515021790555050565b600960009054906101000a900460ff1661328b57613253611ed7565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461328a57600080fd5b5b8061329957613298613d4c565b5b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561333c5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156133515761334c848484613d8f565b613588565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156133f45750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561340957613404848484613fef565b613587565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156134ad5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156134c2576134bd84848461424f565b613586565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135645750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156135795761357484848461441a565b613585565b61358484848461424f565b5b5b5b5b806135965761359561470f565b5b50505050565b6000806000600b5490506000600a54905060005b600880549050811015613812578260036000600884815481106135d6576135d5615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806136c4575081600460006008848154811061365c5761365b615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156136db57600b54600a549450945050505061384b565b61376b60036000600884815481106136f6576136f5615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461307490919063ffffffff16565b92506137fd600460006008848154811061378857613787615188565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361307490919063ffffffff16565b9150808061380a9061521a565b9150506135b0565b5061382a600a54600b54612f7090919063ffffffff16565b82101561384257600b54600a5493509350505061384b565b81819350935050505b9091565b60008083118290613896576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161388d91906149fd565b60405180910390fd5b50600083856138a59190615a32565b9050809150509392505050565b6000806000806138c185614723565b905060006138ce86614754565b905060006138f7826138e9858a61307490919063ffffffff16565b61307490919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806139258589613be190919063ffffffff16565b9050600061393c8689613be190919063ffffffff16565b905060006139538789613be190919063ffffffff16565b9050600061397c8261396e858761307490919063ffffffff16565b61307490919063ffffffff16565b9050838184965096509650505050509450945094915050565b6000600267ffffffffffffffff8111156139b2576139b1615a63565b5b6040519080825280602002602001820160405280156139e05781602001602082028036833780820191505090505b50905030816000815181106139f8576139f7615188565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015613a9857600080fd5b505afa158015613aac573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ad09190615aa7565b81600181518110613ae457613ae3615188565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613b49307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846129a9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613bab959493929190615bcd565b600060405180830381600087803b158015613bc557600080fd5b505af1158015613bd9573d6000803e3d6000fd5b505050505050565b600080831415613bf45760009050613c56565b60008284613c029190615030565b9050828482613c119190615a32565b14613c51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c4890615c99565b60405180910390fd5b809150505b92915050565b613c87307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846129a9565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613cd1611ed7565b426040518863ffffffff1660e01b8152600401613cf396959493929190615cb9565b6060604051808303818588803b158015613d0c57600080fd5b505af1158015613d20573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d459190615d1a565b5050505050565b6000601154148015613d6057506000601354145b15613d6a57613d8d565b601154601281905550601354601481905550600060118190555060006013819055505b565b600080600080600080613da187613018565b955095509550955095509550613dff87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e9486600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f2985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613f7581614785565b613f7f848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613fdc9190614b3d565b60405180910390a3505050505050505050565b60008060008060008061400187613018565b95509550955095509550955061405f86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506140f483600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061418985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141d581614785565b6141df848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161423c9190614b3d565b60405180910390a3505050505050505050565b60008060008060008061426187613018565b9550955095509550955095506142bf86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061435485600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506143a081614785565b6143aa848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516144079190614b3d565b60405180910390a3505050505050505050565b60008060008060008061442c87613018565b95509550955095509550955061448a87600460008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061451f86600360008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461307490919063ffffffff16565b600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506145b483600460008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600460008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061464985600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061469581614785565b61469f848361492a565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516146fc9190614b3d565b60405180910390a3505050505050505050565b601254601181905550601454601381905550565b600061474d606461473f60115485613be190919063ffffffff16565b612f7090919063ffffffff16565b9050919050565b600061477e606461477060135485613be190919063ffffffff16565b612f7090919063ffffffff16565b9050919050565b600061478f612f45565b905060006147a68284613be190919063ffffffff16565b90506147fa81600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615614925576148e183600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fba90919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61493f82600b5461307490919063ffffffff16565b600b8190555061495a81600c54612fba90919063ffffffff16565b600c819055505050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561499e578082015181840152602081019050614983565b838111156149ad576000848401525b50505050565b6000601f19601f8301169050919050565b60006149cf82614964565b6149d9818561496f565b93506149e9818560208601614980565b6149f2816149b3565b840191505092915050565b60006020820190508181036000830152614a1781846149c4565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000614a4f82614a24565b9050919050565b614a5f81614a44565b8114614a6a57600080fd5b50565b600081359050614a7c81614a56565b92915050565b6000819050919050565b614a9581614a82565b8114614aa057600080fd5b50565b600081359050614ab281614a8c565b92915050565b60008060408385031215614acf57614ace614a1f565b5b6000614add85828601614a6d565b9250506020614aee85828601614aa3565b9150509250929050565b60008115159050919050565b614b0d81614af8565b82525050565b6000602082019050614b286000830184614b04565b92915050565b614b3781614a82565b82525050565b6000602082019050614b526000830184614b2e565b92915050565b6000819050919050565b6000614b7d614b78614b7384614a24565b614b58565b614a24565b9050919050565b6000614b8f82614b62565b9050919050565b6000614ba182614b84565b9050919050565b614bb181614b96565b82525050565b6000602082019050614bcc6000830184614ba8565b92915050565b600080600060608486031215614beb57614bea614a1f565b5b6000614bf986828701614a6d565b9350506020614c0a86828701614a6d565b9250506040614c1b86828701614aa3565b9150509250925092565b600060208284031215614c3b57614c3a614a1f565b5b6000614c4984828501614aa3565b91505092915050565b600060ff82169050919050565b614c6881614c52565b82525050565b6000602082019050614c836000830184614c5f565b92915050565b600060208284031215614c9f57614c9e614a1f565b5b6000614cad84828501614a6d565b91505092915050565b6000614cc182614a44565b9050919050565b614cd181614cb6565b8114614cdc57600080fd5b50565b600081359050614cee81614cc8565b92915050565b60008060408385031215614d0b57614d0a614a1f565b5b6000614d1985828601614cdf565b9250506020614d2a85828601614a6d565b9150509250929050565b614d3d81614af8565b8114614d4857600080fd5b50565b600081359050614d5a81614d34565b92915050565b60008060408385031215614d7757614d76614a1f565b5b6000614d8585828601614aa3565b9250506020614d9685828601614d4b565b9150509250929050565b614da981614a44565b82525050565b6000602082019050614dc46000830184614da0565b92915050565b6000614dd582614a24565b9050919050565b614de581614dca565b8114614df057600080fd5b50565b600081359050614e0281614ddc565b92915050565b600060208284031215614e1e57614e1d614a1f565b5b6000614e2c84828501614df3565b91505092915050565b600060208284031215614e4b57614e4a614a1f565b5b6000614e5984828501614d4b565b91505092915050565b60008060408385031215614e7957614e78614a1f565b5b6000614e8785828601614a6d565b9250506020614e9885828601614a6d565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614ee957607f821691505b60208210811415614efd57614efc614ea2565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614f3960208361496f565b9150614f4482614f03565b602082019050919050565b60006020820190508181036000830152614f6881614f2c565b9050919050565b7f53776170205468726573686f6c6420416d6f756e742063616e6e6f742062652060008201527f6c657373207468616e203639204d696c6c696f6e000000000000000000000000602082015250565b6000614fcb60348361496f565b9150614fd682614f6f565b604082019050919050565b60006020820190508181036000830152614ffa81614fbe565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061503b82614a82565b915061504683614a82565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561507f5761507e615001565b5b828202905092915050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b60006150e6602a8361496f565b91506150f18261508a565b604082019050919050565b60006020820190508181036000830152615115816150d9565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b6000615152601b8361496f565b915061515d8261511c565b602082019050919050565b6000602082019050818103600083015261518181615145565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006151c282614a82565b91506151cd83614a82565b9250828210156151e0576151df615001565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600061522582614a82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561525857615257615001565b5b600182019050919050565b60008151905061527281614a8c565b92915050565b60006020828403121561528e5761528d614a1f565b5b600061529c84828501615263565b91505092915050565b60006040820190506152ba6000830185614da0565b6152c76020830184614b2e565b9392505050565b6000815190506152dd81614d34565b92915050565b6000602082840312156152f9576152f8614a1f565b5b6000615307848285016152ce565b91505092915050565b7f4578636c75646564206164647265737365732063616e6e6f742063616c6c207460008201527f6869732066756e6374696f6e0000000000000000000000000000000000000000602082015250565b600061536c602c8361496f565b915061537782615310565b604082019050919050565b6000602082019050818103600083015261539b8161535f565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b60006153d8601f8361496f565b91506153e3826153a2565b602082019050919050565b60006020820190508181036000830152615407816153cb565b9050919050565b7f596f7520646f6e27742068617665207065726d697373696f6e20746f20756e6c60008201527f6f636b0000000000000000000000000000000000000000000000000000000000602082015250565b600061546a60238361496f565b91506154758261540e565b604082019050919050565b600060208201905081810360008301526154998161545d565b9050919050565b7f436f6e7472616374206973206c6f636b656420756e74696c2037206461797300600082015250565b60006154d6601f8361496f565b91506154e1826154a0565b602082019050919050565b60006020820190508181036000830152615505816154c9565b9050919050565b600061551782614a82565b915061552283614a82565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561555757615556615001565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006155be60268361496f565b91506155c982615562565b604082019050919050565b600060208201905081810360008301526155ed816155b1565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061565060248361496f565b915061565b826155f4565b604082019050919050565b6000602082019050818103600083015261567f81615643565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006156e260228361496f565b91506156ed82615686565b604082019050919050565b60006020820190508181036000830152615711816156d5565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061577460258361496f565b915061577f82615718565b604082019050919050565b600060208201905081810360008301526157a381615767565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061580660238361496f565b9150615811826157aa565b604082019050919050565b60006020820190508181036000830152615835816157f9565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061589860298361496f565b91506158a38261583c565b604082019050919050565b600060208201905081810360008301526158c78161588b565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b600061592a60288361496f565b9150615935826158ce565b604082019050919050565b600060208201905081810360008301526159598161591d565b9050919050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000615996601b8361496f565b91506159a182615960565b602082019050919050565b600060208201905081810360008301526159c581615989565b9050919050565b60006060820190506159e16000830186614b2e565b6159ee6020830185614b2e565b6159fb6040830184614b2e565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000615a3d82614a82565b9150615a4883614a82565b925082615a5857615a57615a03565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050615aa181614a56565b92915050565b600060208284031215615abd57615abc614a1f565b5b6000615acb84828501615a92565b91505092915050565b6000819050919050565b6000615af9615af4615aef84615ad4565b614b58565b614a82565b9050919050565b615b0981615ade565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615b4481614a44565b82525050565b6000615b568383615b3b565b60208301905092915050565b6000602082019050919050565b6000615b7a82615b0f565b615b848185615b1a565b9350615b8f83615b2b565b8060005b83811015615bc0578151615ba78882615b4a565b9750615bb283615b62565b925050600181019050615b93565b5085935050505092915050565b600060a082019050615be26000830188614b2e565b615bef6020830187615b00565b8181036040830152615c018186615b6f565b9050615c106060830185614da0565b615c1d6080830184614b2e565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615c8360218361496f565b9150615c8e82615c27565b604082019050919050565b60006020820190508181036000830152615cb281615c76565b9050919050565b600060c082019050615cce6000830189614da0565b615cdb6020830188614b2e565b615ce86040830187615b00565b615cf56060830186615b00565b615d026080830185614da0565b615d0f60a0830184614b2e565b979650505050505050565b600080600060608486031215615d3357615d32614a1f565b5b6000615d4186828701615263565b9350506020615d5286828701615263565b9250506040615d6386828701615263565b915050925092509256fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220bc1d7a0b01c733850a567703b1d9efe75c6348de475df2c628a96d2a0705458064736f6c63430008090033
Deployed Bytecode Sourcemap
29117:21121:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31550:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32535:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34034:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30124:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31827:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32736:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37543:324;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35043:322;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29558:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31736:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35827:477;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33190:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37998:243;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29939:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34129:419;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37077:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34556:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37875:115;;;;;;;;;;;;;:::i;:::-;;30182:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30257:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35373:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42509:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37314:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30022:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31930:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18371:148;;;;;;;;;;;;;:::i;:::-;;29784:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38249:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30306:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33906:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17729:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31641:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33498:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38421:77;;;;;;;;;;;;;:::i;:::-;;19426:341;;;;;;;;;;;;;:::i;:::-;;32136:199;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18963:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38506:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30359:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19128:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32343:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37440:95;;;;;;;;;;;;;:::i;:::-;;37196:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18674:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31550:83;31587:13;31620:5;31613:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31550:83;:::o;32535:193::-;32637:4;32659:39;32668:12;:10;:12::i;:::-;32682:7;32691:6;32659:8;:39::i;:::-;32716:4;32709:11;;32535:193;;;;:::o;34034:87::-;34076:7;34103:10;;34096:17;;34034:87;:::o;30124:51::-;;;:::o;31827:95::-;31880:7;31907;;31900:14;;31827:95;:::o;32736:446::-;32868:4;32885:36;32895:6;32903:9;32914:6;32885:9;:36::i;:::-;32932:220;32955:6;32976:12;:10;:12::i;:::-;33003:138;33059:6;33003:138;;;;;;;;;;;;;;;;;:11;:19;33015:6;33003:19;;;;;;;;;;;;;;;:33;33023:12;:10;:12::i;:::-;33003:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;32932:8;:220::i;:::-;33170:4;33163:11;;32736:446;;;;;:::o;37543:324::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37701:8:::1;37679:19;:30;37657:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;37854:5;37832:19;:27;;;;:::i;:::-;37800:29;:59;;;;37543:324:::0;:::o;35043:322::-;35137:7;35195;;35184;:18;;35162:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;35283:19;35305:10;:8;:10::i;:::-;35283:32;;35333:24;35345:11;35333:7;:11;;:24;;;;:::i;:::-;35326:31;;;35043:322;;;:::o;29558:28::-;;;;;;;;;;;;;:::o;31736:83::-;31777:5;31802:9;;;;;;;;;;;31795:16;;31736:83;:::o;35827:477::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35907:11:::1;:20;35919:7;35907:20;;;;;;;;;;;;;;;;;;;;;;;;;35899:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;35975:9;35970:327;35994:9;:16;;;;35990:1;:20;35970:327;;;36052:7;36036:23;;:9;36046:1;36036:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;36032:254;;;36095:9;36124:1;36105:9;:16;;;;:20;;;;:::i;:::-;36095:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;36080:9;36090:1;36080:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36164:1;36145:7;:16;36153:7;36145:16;;;;;;;;;;;;;;;:20;;;;36207:5;36184:11;:20;36196:7;36184:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;36231:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;36265:5;;36032:254;36012:3;;;;;:::i;:::-;;;;35970:327;;;;35827:477:::0;:::o;33190:300::-;33305:4;33327:133;33350:12;:10;:12::i;:::-;33377:7;33399:50;33438:10;33399:11;:25;33411:12;:10;:12::i;:::-;33399:25;;;;;;;;;;;;;;;:34;33425:7;33399:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;33327:8;:133::i;:::-;33478:4;33471:11;;33190:300;;;;:::o;37998:243::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38121:12:::1;:21;;;38157:13;38185:12;:22;;;38216:4;38185:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38121:112;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37998:243:::0;;:::o;29939:26::-;;;;:::o;34129:419::-;34181:14;34198:12;:10;:12::i;:::-;34181:29;;34244:11;:19;34256:6;34244:19;;;;;;;;;;;;;;;;;;;;;;;;;34243:20;34221:114;;;;;;;;;;;;:::i;:::-;;;;;;;;;34347:15;34376:19;34387:7;34376:10;:19::i;:::-;34346:49;;;;;;;34424:28;34444:7;34424;:15;34432:6;34424:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;34406:7;:15;34414:6;34406:15;;;;;;;;;;;;;;;:46;;;;34473:20;34485:7;34473;;:11;;:20;;;;:::i;:::-;34463:7;:30;;;;34517:23;34532:7;34517:10;;:14;;:23;;;;:::i;:::-;34504:10;:36;;;;34170:378;;34129:419;:::o;37077:111::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37176:4:::1;37146:18;:27;37165:7;37146:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;37077:111:::0;:::o;34556:479::-;34674:7;34718;;34707;:18;;34699:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;34777:17;34772:256;;34812:15;34841:19;34852:7;34841:10;:19::i;:::-;34811:49;;;;;;;34882:7;34875:14;;;;;34772:256;34925:23;34960:19;34971:7;34960:10;:19::i;:::-;34922:57;;;;;;;35001:15;34994:22;;;34556:479;;;;;:::o;37875:115::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37934:15:::1;;;;;;;;;;;37926:33;;:56;37960:21;37926:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;37875:115::o:0;30182:38::-;;;:::o;30257:40::-;;;;;;;;;;;;;:::o;35373:446::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35568:11:::1;:20;35580:7;35568:20;;;;;;;;;;;;;;;;;;;;;;;;;35567:21;35559:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35654:1;35635:7;:16;35643:7;35635:16;;;;;;;;;;;;;;;;:20;35631:109;;;35691:37;35711:7;:16;35719:7;35711:16;;;;;;;;;;;;;;;;35691:19;:37::i;:::-;35672:7;:16;35680:7;35672:16;;;;;;;;;;;;;;;:56;;;;35631:109;35773:4;35750:11;:20;35762:7;35750:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;35788:9;35803:7;35788:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35373:446:::0;:::o;42509:124::-;42574:4;42598:18;:27;42617:7;42598:27;;;;;;;;;;;;;;;;;;;;;;;;;42591:34;;42509:124;;;:::o;37314:118::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37411:13:::1;37393:15;;:31;;;;;;;;;;;;;;;;;;37314:118:::0;:::o;30022:33::-;;;;:::o;31930:198::-;31996:7;32020:11;:20;32032:7;32020:20;;;;;;;;;;;;;;;;;;;;;;;;;32016:49;;;32049:7;:16;32057:7;32049:16;;;;;;;;;;;;;;;;32042:23;;;;32016:49;32083:37;32103:7;:16;32111:7;32103:16;;;;;;;;;;;;;;;;32083:19;:37::i;:::-;32076:44;;31930:198;;;;:::o;18371:148::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18478:1:::1;18441:40;;18462:6;::::0;::::1;;;;;;;;18441:40;;;;;;;;;;;;18509:1;18492:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;18371:148::o:0;29784:30::-;;;;;;;;;;;;;:::o;38249:164::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38360:13:::1;:22;;:45;38383:21;38360:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;38249:164:::0;:::o;30306:46::-;;;;:::o;33906:120::-;33974:4;33998:11;:20;34010:7;33998:20;;;;;;;;;;;;;;;;;;;;;;;;;33991:27;;33906:120;;;:::o;17729:79::-;17767:7;17794:6;;;;;;;;;;;17787:13;;17729:79;:::o;31641:87::-;31680:13;31713:7;31706:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31641:87;:::o;33498:400::-;33618:4;33640:228;33663:12;:10;:12::i;:::-;33690:7;33712:145;33769:15;33712:145;;;;;;;;;;;;;;;;;:11;:25;33724:12;:10;:12::i;:::-;33712:25;;;;;;;;;;;;;;;:34;33738:7;33712:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;33640:8;:228::i;:::-;33886:4;33879:11;;33498:400;;;;:::o;38421:77::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38486:4:::1;38475:8;;:15;;;;;;;;;;;;;;;;;;38421:77::o:0;19426:341::-;19510:10;19492:28;;:14;;;;;;;;;;;:28;;;19470:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;19620:9;;19602:15;:27;19594:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;19710:14;;;;;;;;;;;19681:44;;19702:6;;;;;;;;;;19681:44;;;;;;;;;;;;19745:14;;;;;;;;;;;19736:6;;:23;;;;;;;;;;;;;;;;;;19426:341::o;32136:199::-;32241:4;32263:42;32273:12;:10;:12::i;:::-;32287:9;32298:6;32263:9;:42::i;:::-;32323:4;32316:11;;32136:199;;;;:::o;18963:89::-;19008:7;19035:9;;19028:16;;18963:89;:::o;38506:171::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38607:8:::1;38583:21;;:32;;;;;;;;;;;;;;;;;;38631:38;38660:8;38631:38;;;;;;:::i;:::-;;;;;;;;38506:171:::0;:::o;30359:72::-;;;;:::o;19128:226::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19209:6:::1;::::0;::::1;;;;;;;;19192:14;;:23;;;;;;;;;;;;;;;;;;19243:1;19226:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;19286:4;19268:15;:22;;;;:::i;:::-;19256:9;:34;;;;19343:1;19306:40;;19327:6;::::0;::::1;;;;;;;;19306:40;;;;;;;;;;;;19128:226:::0;:::o;32343:184::-;32460:7;32492:11;:18;32504:5;32492:18;;;;;;;;;;;;;;;:27;32511:7;32492:27;;;;;;;;;;;;;;;;32485:34;;32343:184;;;;:::o;37440:95::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37511:16:::1;37496:12;:31;;;;37440:95::o:0;37196:110::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37293:5:::1;37263:18;:27;37282:7;37263:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;37196:110:::0;:::o;18674:281::-;17951:12;:10;:12::i;:::-;17941:22;;:6;;;;;;;;;;:22;;;17933:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18797:1:::1;18777:22;;:8;:22;;;;18755:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;18910:8;18881:38;;18902:6;::::0;::::1;;;;;;;;18881:38;;;;;;;;;;;;18939:8;18930:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;18674:281:::0;:::o;9704:98::-;9757:7;9784:10;9777:17;;9704:98;:::o;42641:371::-;42785:1;42768:19;;:5;:19;;;;42760:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42866:1;42847:21;;:7;:21;;;;42839:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42950:6;42920:11;:18;42932:5;42920:18;;;;;;;;;;;;;;;:27;42939:7;42920:27;;;;;;;;;;;;;;;:36;;;;42988:7;42972:32;;42981:5;42972:32;;;42997:6;42972:32;;;;;;:::i;:::-;;;;;;;;42641:371;;;:::o;43020:1833::-;43158:1;43142:18;;:4;:18;;;;43134:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43235:1;43221:16;;:2;:16;;;;43213:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43305:1;43296:6;:10;43288:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43375:7;:5;:7::i;:::-;43367:15;;:4;:15;;;;:32;;;;;43392:7;:5;:7::i;:::-;43386:13;;:2;:13;;;;43367:32;43363:175;;;43450:12;;43440:6;:22;;43414:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;43363:175;43833:28;43864:24;43882:4;43864:9;:24::i;:::-;43833:55;;43929:12;;43905:20;:36;43901:104;;43981:12;;43958:35;;43901:104;44017:24;44081:29;;44044:20;:66;;44017:93;;44139:19;:53;;;;;44176:16;;;;;;;;;;;44175:17;44139:53;:91;;;;;44217:13;44209:21;;:4;:21;;;;44139:91;:129;;;;;44247:21;;;;;;;;;;;44139:129;44121:318;;;44318:29;;44295:52;;44391:36;44406:20;44391:14;:36::i;:::-;44121:318;44512:12;44527:4;44512:19;;44632:18;:24;44651:4;44632:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;44660:18;:22;44679:2;44660:22;;;;;;;;;;;;;;;;;;;;;;;;;44632:50;44628:98;;;44709:5;44699:15;;44628:98;44804:41;44819:4;44825:2;44829:6;44837:7;44804:14;:41::i;:::-;43123:1730;;;43020:1833;;;:::o;5933:226::-;6053:7;6086:1;6081;:6;;6089:12;6073:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;6113:9;6129:1;6125;:5;;;;:::i;:::-;6113:17;;6150:1;6143:8;;;5933:226;;;;;:::o;40665:164::-;40707:7;40728:15;40745;40764:19;:17;:19::i;:::-;40727:56;;;;40801:20;40813:7;40801;:11;;:20;;;;:::i;:::-;40794:27;;;;40665:164;:::o;7365:132::-;7423:7;7450:39;7454:1;7457;7450:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;7443:46;;7365:132;;;;:::o;5030:181::-;5088:7;5108:9;5124:1;5120;:5;;;;:::i;:::-;5108:17;;5149:1;5144;:6;;5136:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5202:1;5195:8;;;5030:181;;;;:::o;38933:742::-;39033:7;39055;39077;39099;39121;39143;39193:23;39231:12;39258:18;39290:20;39302:7;39290:11;:20::i;:::-;39178:132;;;;;;39322:15;39339:23;39364:12;39380:113;39406:7;39428:4;39447:10;39472;:8;:10::i;:::-;39380:11;:113::i;:::-;39321:172;;;;;;39526:7;39548:15;39578:4;39597:15;39627:4;39646:10;39504:163;;;;;;;;;;;;;;;;;;38933:742;;;;;;;:::o;5494:136::-;5552:7;5579:43;5583:1;5586;5579:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;5572:50;;5494:136;;;;:::o;44861:1174::-;30751:4;30732:16;;:23;;;;;;;;;;;;;;;;;;45034:12:::1;45049:27;45074:1;45049:20;:24;;:27;;;;:::i;:::-;45034:42;;45087:17;45107:30;45132:4;45107:20;:24;;:30;;;;:::i;:::-;45087:50;;45415:22;45440:21;45415:46;;45506:22;45523:4;45506:16;:22::i;:::-;45659:18;45680:41;45706:14;45680:21;:25;;:41;;;;:::i;:::-;45659:62;;45732:22;45757:27;45780:3;45757:18;45772:2;45757:10;:14;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;45732:52;;45803:15;;;;;;;;;;;45795:33;;:49;45829:14;45795:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;45869:14;45855:28;;;;;:::i;:::-;;;45931:35;45944:9;45955:10;45931:12;:35::i;:::-;45984:43;45999:4;46005:10;46017:9;45984:43;;;;;;;;:::i;:::-;;;;;;;;44935:1100;;;;;30797:5:::0;30778:16;;:24;;;;;;;;;;;;;;;;;;44861:1174;:::o;47234:968::-;47390:8;;;;;;;;;;;47385:116;;47433:7;:5;:7::i;:::-;47423:17;;:6;:17;;;47415:26;;;;;;47385:116;47520:7;47515:28;;47529:14;:12;:14::i;:::-;47515:28;47560:11;:19;47572:6;47560:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;47584:11;:22;47596:9;47584:22;;;;;;;;;;;;;;;;;;;;;;;;;47583:23;47560:46;47556:597;;;47623:48;47645:6;47653:9;47664:6;47623:21;:48::i;:::-;47556:597;;;47694:11;:19;47706:6;47694:19;;;;;;;;;;;;;;;;;;;;;;;;;47693:20;:46;;;;;47717:11;:22;47729:9;47717:22;;;;;;;;;;;;;;;;;;;;;;;;;47693:46;47689:464;;;47756:46;47776:6;47784:9;47795:6;47756:19;:46::i;:::-;47689:464;;;47825:11;:19;47837:6;47825:19;;;;;;;;;;;;;;;;;;;;;;;;;47824:20;:47;;;;;47849:11;:22;47861:9;47849:22;;;;;;;;;;;;;;;;;;;;;;;;;47848:23;47824:47;47820:333;;;47888:44;47906:6;47914:9;47925:6;47888:17;:44::i;:::-;47820:333;;;47954:11;:19;47966:6;47954:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;47977:11;:22;47989:9;47977:22;;;;;;;;;;;;;;;;;;;;;;;;;47954:45;47950:203;;;48016:48;48038:6;48046:9;48057:6;48016:21;:48::i;:::-;47950:203;;;48097:44;48115:6;48123:9;48134:6;48097:17;:44::i;:::-;47950:203;47820:333;47689:464;47556:597;48170:7;48165:29;;48179:15;:13;:15::i;:::-;48165:29;47234:968;;;;:::o;40837:605::-;40888:7;40897;40917:15;40935:7;;40917:25;;40953:15;40971:7;;40953:25;;40994:9;40989:338;41013:9;:16;;;;41009:1;:20;40989:338;;;41097:7;41073;:21;41081:9;41091:1;41081:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41073:21;;;;;;;;;;;;;;;;:31;:83;;;;41149:7;41125;:21;41133:9;41143:1;41133:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41125:21;;;;;;;;;;;;;;;;:31;41073:83;41051:146;;;41180:7;;41189;;41172:25;;;;;;;;;41051:146;41222:34;41234:7;:21;41242:9;41252:1;41242:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41234:21;;;;;;;;;;;;;;;;41222:7;:11;;:34;;;;:::i;:::-;41212:44;;41281:34;41293:7;:21;41301:9;41311:1;41301:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;41293:21;;;;;;;;;;;;;;;;41281:7;:11;;:34;;;;:::i;:::-;41271:44;;41031:3;;;;;:::i;:::-;;;;40989:338;;;;41351:20;41363:7;;41351;;:11;;:20;;;;:::i;:::-;41341:7;:30;41337:61;;;41381:7;;41390;;41373:25;;;;;;;;41337:61;41417:7;41426;41409:25;;;;;;40837:605;;;:::o;7993:312::-;8113:7;8145:1;8141;:5;8148:12;8133:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8172:9;8188:1;8184;:5;;;;:::i;:::-;8172:17;;8296:1;8289:8;;;7993:312;;;;;:::o;39683:412::-;39784:7;39806;39828;39863:12;39878:24;39894:7;39878:15;:24::i;:::-;39863:39;;39913:18;39934:30;39956:7;39934:21;:30::i;:::-;39913:51;;39975:23;40001:33;40023:10;40001:17;40013:4;40001:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;39975:59;;40053:15;40070:4;40076:10;40045:42;;;;;;;;;39683:412;;;;;:::o;40103:554::-;40302:7;40324;40346;40381:15;40399:24;40411:11;40399:7;:11;;:24;;;;:::i;:::-;40381:42;;40434:12;40449:21;40458:11;40449:4;:8;;:21;;;;:::i;:::-;40434:36;;40481:18;40502:27;40517:11;40502:10;:14;;:27;;;;:::i;:::-;40481:48;;40540:23;40566:33;40588:10;40566:17;40578:4;40566:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;40540:59;;40618:7;40627:15;40644:4;40610:39;;;;;;;;;;40103:554;;;;;;;;:::o;46043:589::-;46169:21;46207:1;46193:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46169:40;;46238:4;46220;46225:1;46220:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;46264:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46254:4;46259:1;46254:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;46299:62;46316:4;46331:15;46349:11;46299:8;:62::i;:::-;46400:15;:66;;;46481:11;46507:1;46551:4;46578;46598:15;46400:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46098:534;46043:589;:::o;6418:471::-;6476:7;6726:1;6721;:6;6717:47;;;6751:1;6744:8;;;;6717:47;6776:9;6792:1;6788;:5;;;;:::i;:::-;6776:17;;6821:1;6816;6812;:5;;;;:::i;:::-;:10;6804:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6880:1;6873:8;;;6418:471;;;;;:::o;46640:513::-;46788:62;46805:4;46820:15;46838:11;46788:8;:62::i;:::-;46893:15;:31;;;46932:9;46965:4;46985:11;47011:1;47054;47097:7;:5;:7::i;:::-;47119:15;46893:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46640:513;;:::o;42133:235::-;42191:1;42180:7;;:12;:34;;;;;42213:1;42196:13;;:18;42180:34;42176:47;;;42216:7;;42176:47;42253:7;;42235:15;:25;;;;42295:13;;42271:21;:37;;;;42331:1;42321:7;:11;;;;42359:1;42343:13;:17;;;;42133:235;:::o;49549:686::-;49700:15;49730:23;49768:12;49795:23;49833:12;49860:18;49892:19;49903:7;49892:10;:19::i;:::-;49685:226;;;;;;;;;;;;49940:28;49960:7;49940;:15;49948:6;49940:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;49922:7;:15;49930:6;49922:15;;;;;;;;;;;;;;;:46;;;;49997:28;50017:7;49997;:15;50005:6;49997:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;49979:7;:15;49987:6;49979:15;;;;;;;;;;;;;;;:46;;;;50057:39;50080:15;50057:7;:18;50065:9;50057:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;50036:7;:18;50044:9;50036:18;;;;;;;;;;;;;;;:60;;;;50107:26;50122:10;50107:14;:26::i;:::-;50144:23;50156:4;50162;50144:11;:23::i;:::-;50200:9;50183:44;;50192:6;50183:44;;;50211:15;50183:44;;;;;;:::i;:::-;;;;;;;;49674:561;;;;;;49549:686;;;:::o;48843:698::-;48992:15;49022:23;49060:12;49087:23;49125:12;49152:18;49184:19;49195:7;49184:10;:19::i;:::-;48977:226;;;;;;;;;;;;49232:28;49252:7;49232;:15;49240:6;49232:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;49214:7;:15;49222:6;49214:15;;;;;;;;;;;;;;;:46;;;;49292:39;49315:15;49292:7;:18;49300:9;49292:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;49271:7;:18;49279:9;49271:18;;;;;;;;;;;;;;;:60;;;;49363:39;49386:15;49363:7;:18;49371:9;49363:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;49342:7;:18;49350:9;49342:18;;;;;;;;;;;;;;;:60;;;;49413:26;49428:10;49413:14;:26::i;:::-;49450:23;49462:4;49468;49450:11;:23::i;:::-;49506:9;49489:44;;49498:6;49489:44;;;49517:15;49489:44;;;;;;:::i;:::-;;;;;;;;48966:575;;;;;;48843:698;;;:::o;48210:625::-;48357:15;48387:23;48425:12;48452:23;48490:12;48517:18;48549:19;48560:7;48549:10;:19::i;:::-;48342:226;;;;;;;;;;;;48597:28;48617:7;48597;:15;48605:6;48597:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;48579:7;:15;48587:6;48579:15;;;;;;;;;;;;;;;:46;;;;48657:39;48680:15;48657:7;:18;48665:9;48657:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;48636:7;:18;48644:9;48636:18;;;;;;;;;;;;;;;:60;;;;48707:26;48722:10;48707:14;:26::i;:::-;48744:23;48756:4;48762;48744:11;:23::i;:::-;48800:9;48783:44;;48792:6;48783:44;;;48811:15;48783:44;;;;;;:::i;:::-;;;;;;;;48331:504;;;;;;48210:625;;;:::o;36312:757::-;36463:15;36493:23;36531:12;36558:23;36596:12;36623:18;36655:19;36666:7;36655:10;:19::i;:::-;36448:226;;;;;;;;;;;;36703:28;36723:7;36703;:15;36711:6;36703:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36685:7;:15;36693:6;36685:15;;;;;;;;;;;;;;;:46;;;;36760:28;36780:7;36760;:15;36768:6;36760:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;36742:7;:15;36750:6;36742:15;;;;;;;;;;;;;;;:46;;;;36820:39;36843:15;36820:7;:18;36828:9;36820:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36799:7;:18;36807:9;36799:18;;;;;;;;;;;;;;;:60;;;;36891:39;36914:15;36891:7;:18;36899:9;36891:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;36870:7;:18;36878:9;36870:18;;;;;;;;;;;;;;;:60;;;;36941:26;36956:10;36941:14;:26::i;:::-;36978:23;36990:4;36996;36978:11;:23::i;:::-;37034:9;37017:44;;37026:6;37017:44;;;37045:15;37017:44;;;;;;:::i;:::-;;;;;;;;36437:632;;;;;;36312:757;;;:::o;42376:125::-;42430:15;;42420:7;:25;;;;42472:21;;42456:13;:37;;;;42376:125::o;41813:130::-;41877:7;41904:31;41929:5;41904:20;41916:7;;41904;:11;;:20;;;;:::i;:::-;:24;;:31;;;;:::i;:::-;41897:38;;41813:130;;;:::o;41951:174::-;42048:7;42080:37;42111:5;42080:26;42092:13;;42080:7;:11;;:26;;;;:::i;:::-;:30;;:37;;;;:::i;:::-;42073:44;;41951:174;;;:::o;41450:355::-;41513:19;41535:10;:8;:10::i;:::-;41513:32;;41556:18;41577:27;41592:11;41577:10;:14;;:27;;;;:::i;:::-;41556:48;;41640:38;41667:10;41640:7;:22;41656:4;41640:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;41615:7;:22;41631:4;41615:22;;;;;;;;;;;;;;;:63;;;;41693:11;:26;41713:4;41693:26;;;;;;;;;;;;;;;;;;;;;;;;;41689:108;;;41759:38;41786:10;41759:7;:22;41775:4;41759:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;41734:7;:22;41750:4;41734:22;;;;;;;;;;;;;;;:63;;;;41689:108;41502:303;;41450:355;:::o;38778:147::-;38856:17;38868:4;38856:7;;:11;;:17;;;;:::i;:::-;38846:7;:27;;;;38897:20;38912:4;38897:10;;:14;;:20;;;;:::i;:::-;38884:10;:33;;;;38778:147;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:619::-;4901:6;4909;4917;4966:2;4954:9;4945:7;4941:23;4937:32;4934:119;;;4972:79;;:::i;:::-;4934:119;5092:1;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5063:117;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;5347:2;5373:53;5418:7;5409:6;5398:9;5394:22;5373:53;:::i;:::-;5363:63;;5318:118;4824:619;;;;;:::o;5449:329::-;5508:6;5557:2;5545:9;5536:7;5532:23;5528:32;5525:119;;;5563:79;;:::i;:::-;5525:119;5683:1;5708:53;5753:7;5744:6;5733:9;5729:22;5708:53;:::i;:::-;5698:63;;5654:117;5449:329;;;;:::o;5784:86::-;5819:7;5859:4;5852:5;5848:16;5837:27;;5784:86;;;:::o;5876:112::-;5959:22;5975:5;5959:22;:::i;:::-;5954:3;5947:35;5876:112;;:::o;5994:214::-;6083:4;6121:2;6110:9;6106:18;6098:26;;6134:67;6198:1;6187:9;6183:17;6174:6;6134:67;:::i;:::-;5994:214;;;;:::o;6214:329::-;6273:6;6322:2;6310:9;6301:7;6297:23;6293:32;6290:119;;;6328:79;;:::i;:::-;6290:119;6448:1;6473:53;6518:7;6509:6;6498:9;6494:22;6473:53;:::i;:::-;6463:63;;6419:117;6214:329;;;;:::o;6549:109::-;6599:7;6628:24;6646:5;6628:24;:::i;:::-;6617:35;;6549:109;;;:::o;6664:148::-;6750:37;6781:5;6750:37;:::i;:::-;6743:5;6740:48;6730:76;;6802:1;6799;6792:12;6730:76;6664:148;:::o;6818:165::-;6877:5;6915:6;6902:20;6893:29;;6931:46;6971:5;6931:46;:::i;:::-;6818:165;;;;:::o;6989:500::-;7070:6;7078;7127:2;7115:9;7106:7;7102:23;7098:32;7095:119;;;7133:79;;:::i;:::-;7095:119;7253:1;7278:66;7336:7;7327:6;7316:9;7312:22;7278:66;:::i;:::-;7268:76;;7224:130;7393:2;7419:53;7464:7;7455:6;7444:9;7440:22;7419:53;:::i;:::-;7409:63;;7364:118;6989:500;;;;;:::o;7495:116::-;7565:21;7580:5;7565:21;:::i;:::-;7558:5;7555:32;7545:60;;7601:1;7598;7591:12;7545:60;7495:116;:::o;7617:133::-;7660:5;7698:6;7685:20;7676:29;;7714:30;7738:5;7714:30;:::i;:::-;7617:133;;;;:::o;7756:468::-;7821:6;7829;7878:2;7866:9;7857:7;7853:23;7849:32;7846:119;;;7884:79;;:::i;:::-;7846:119;8004:1;8029:53;8074:7;8065:6;8054:9;8050:22;8029:53;:::i;:::-;8019:63;;7975:117;8131:2;8157:50;8199:7;8190:6;8179:9;8175:22;8157:50;:::i;:::-;8147:60;;8102:115;7756:468;;;;;:::o;8230:118::-;8317:24;8335:5;8317:24;:::i;:::-;8312:3;8305:37;8230:118;;:::o;8354:222::-;8447:4;8485:2;8474:9;8470:18;8462:26;;8498:71;8566:1;8555:9;8551:17;8542:6;8498:71;:::i;:::-;8354:222;;;;:::o;8582:104::-;8627:7;8656:24;8674:5;8656:24;:::i;:::-;8645:35;;8582:104;;;:::o;8692:138::-;8773:32;8799:5;8773:32;:::i;:::-;8766:5;8763:43;8753:71;;8820:1;8817;8810:12;8753:71;8692:138;:::o;8836:155::-;8890:5;8928:6;8915:20;8906:29;;8944:41;8979:5;8944:41;:::i;:::-;8836:155;;;;:::o;8997:345::-;9064:6;9113:2;9101:9;9092:7;9088:23;9084:32;9081:119;;;9119:79;;:::i;:::-;9081:119;9239:1;9264:61;9317:7;9308:6;9297:9;9293:22;9264:61;:::i;:::-;9254:71;;9210:125;8997:345;;;;:::o;9348:323::-;9404:6;9453:2;9441:9;9432:7;9428:23;9424:32;9421:119;;;9459:79;;:::i;:::-;9421:119;9579:1;9604:50;9646:7;9637:6;9626:9;9622:22;9604:50;:::i;:::-;9594:60;;9550:114;9348:323;;;;:::o;9677:474::-;9745:6;9753;9802:2;9790:9;9781:7;9777:23;9773:32;9770:119;;;9808:79;;:::i;:::-;9770:119;9928:1;9953:53;9998:7;9989:6;9978:9;9974:22;9953:53;:::i;:::-;9943:63;;9899:117;10055:2;10081:53;10126:7;10117:6;10106:9;10102:22;10081:53;:::i;:::-;10071:63;;10026:118;9677:474;;;;;:::o;10157:180::-;10205:77;10202:1;10195:88;10302:4;10299:1;10292:15;10326:4;10323:1;10316:15;10343:320;10387:6;10424:1;10418:4;10414:12;10404:22;;10471:1;10465:4;10461:12;10492:18;10482:81;;10548:4;10540:6;10536:17;10526:27;;10482:81;10610:2;10602:6;10599:14;10579:18;10576:38;10573:84;;;10629:18;;:::i;:::-;10573:84;10394:269;10343:320;;;:::o;10669:182::-;10809:34;10805:1;10797:6;10793:14;10786:58;10669:182;:::o;10857:366::-;10999:3;11020:67;11084:2;11079:3;11020:67;:::i;:::-;11013:74;;11096:93;11185:3;11096:93;:::i;:::-;11214:2;11209:3;11205:12;11198:19;;10857:366;;;:::o;11229:419::-;11395:4;11433:2;11422:9;11418:18;11410:26;;11482:9;11476:4;11472:20;11468:1;11457:9;11453:17;11446:47;11510:131;11636:4;11510:131;:::i;:::-;11502:139;;11229:419;;;:::o;11654:239::-;11794:34;11790:1;11782:6;11778:14;11771:58;11863:22;11858:2;11850:6;11846:15;11839:47;11654:239;:::o;11899:366::-;12041:3;12062:67;12126:2;12121:3;12062:67;:::i;:::-;12055:74;;12138:93;12227:3;12138:93;:::i;:::-;12256:2;12251:3;12247:12;12240:19;;11899:366;;;:::o;12271:419::-;12437:4;12475:2;12464:9;12460:18;12452:26;;12524:9;12518:4;12514:20;12510:1;12499:9;12495:17;12488:47;12552:131;12678:4;12552:131;:::i;:::-;12544:139;;12271:419;;;:::o;12696:180::-;12744:77;12741:1;12734:88;12841:4;12838:1;12831:15;12865:4;12862:1;12855:15;12882:348;12922:7;12945:20;12963:1;12945:20;:::i;:::-;12940:25;;12979:20;12997:1;12979:20;:::i;:::-;12974:25;;13167:1;13099:66;13095:74;13092:1;13089:81;13084:1;13077:9;13070:17;13066:105;13063:131;;;13174:18;;:::i;:::-;13063:131;13222:1;13219;13215:9;13204:20;;12882:348;;;;:::o;13236:229::-;13376:34;13372:1;13364:6;13360:14;13353:58;13445:12;13440:2;13432:6;13428:15;13421:37;13236:229;:::o;13471:366::-;13613:3;13634:67;13698:2;13693:3;13634:67;:::i;:::-;13627:74;;13710:93;13799:3;13710:93;:::i;:::-;13828:2;13823:3;13819:12;13812:19;;13471:366;;;:::o;13843:419::-;14009:4;14047:2;14036:9;14032:18;14024:26;;14096:9;14090:4;14086:20;14082:1;14071:9;14067:17;14060:47;14124:131;14250:4;14124:131;:::i;:::-;14116:139;;13843:419;;;:::o;14268:177::-;14408:29;14404:1;14396:6;14392:14;14385:53;14268:177;:::o;14451:366::-;14593:3;14614:67;14678:2;14673:3;14614:67;:::i;:::-;14607:74;;14690:93;14779:3;14690:93;:::i;:::-;14808:2;14803:3;14799:12;14792:19;;14451:366;;;:::o;14823:419::-;14989:4;15027:2;15016:9;15012:18;15004:26;;15076:9;15070:4;15066:20;15062:1;15051:9;15047:17;15040:47;15104:131;15230:4;15104:131;:::i;:::-;15096:139;;14823:419;;;:::o;15248:180::-;15296:77;15293:1;15286:88;15393:4;15390:1;15383:15;15417:4;15414:1;15407:15;15434:191;15474:4;15494:20;15512:1;15494:20;:::i;:::-;15489:25;;15528:20;15546:1;15528:20;:::i;:::-;15523:25;;15567:1;15564;15561:8;15558:34;;;15572:18;;:::i;:::-;15558:34;15617:1;15614;15610:9;15602:17;;15434:191;;;;:::o;15631:180::-;15679:77;15676:1;15669:88;15776:4;15773:1;15766:15;15800:4;15797:1;15790:15;15817:233;15856:3;15879:24;15897:5;15879:24;:::i;:::-;15870:33;;15925:66;15918:5;15915:77;15912:103;;;15995:18;;:::i;:::-;15912:103;16042:1;16035:5;16031:13;16024:20;;15817:233;;;:::o;16056:143::-;16113:5;16144:6;16138:13;16129:22;;16160:33;16187:5;16160:33;:::i;:::-;16056:143;;;;:::o;16205:351::-;16275:6;16324:2;16312:9;16303:7;16299:23;16295:32;16292:119;;;16330:79;;:::i;:::-;16292:119;16450:1;16475:64;16531:7;16522:6;16511:9;16507:22;16475:64;:::i;:::-;16465:74;;16421:128;16205:351;;;;:::o;16562:332::-;16683:4;16721:2;16710:9;16706:18;16698:26;;16734:71;16802:1;16791:9;16787:17;16778:6;16734:71;:::i;:::-;16815:72;16883:2;16872:9;16868:18;16859:6;16815:72;:::i;:::-;16562:332;;;;;:::o;16900:137::-;16954:5;16985:6;16979:13;16970:22;;17001:30;17025:5;17001:30;:::i;:::-;16900:137;;;;:::o;17043:345::-;17110:6;17159:2;17147:9;17138:7;17134:23;17130:32;17127:119;;;17165:79;;:::i;:::-;17127:119;17285:1;17310:61;17363:7;17354:6;17343:9;17339:22;17310:61;:::i;:::-;17300:71;;17256:125;17043:345;;;;:::o;17394:231::-;17534:34;17530:1;17522:6;17518:14;17511:58;17603:14;17598:2;17590:6;17586:15;17579:39;17394:231;:::o;17631:366::-;17773:3;17794:67;17858:2;17853:3;17794:67;:::i;:::-;17787:74;;17870:93;17959:3;17870:93;:::i;:::-;17988:2;17983:3;17979:12;17972:19;;17631:366;;;:::o;18003:419::-;18169:4;18207:2;18196:9;18192:18;18184:26;;18256:9;18250:4;18246:20;18242:1;18231:9;18227:17;18220:47;18284:131;18410:4;18284:131;:::i;:::-;18276:139;;18003:419;;;:::o;18428:181::-;18568:33;18564:1;18556:6;18552:14;18545:57;18428:181;:::o;18615:366::-;18757:3;18778:67;18842:2;18837:3;18778:67;:::i;:::-;18771:74;;18854:93;18943:3;18854:93;:::i;:::-;18972:2;18967:3;18963:12;18956:19;;18615:366;;;:::o;18987:419::-;19153:4;19191:2;19180:9;19176:18;19168:26;;19240:9;19234:4;19230:20;19226:1;19215:9;19211:17;19204:47;19268:131;19394:4;19268:131;:::i;:::-;19260:139;;18987:419;;;:::o;19412:222::-;19552:34;19548:1;19540:6;19536:14;19529:58;19621:5;19616:2;19608:6;19604:15;19597:30;19412:222;:::o;19640:366::-;19782:3;19803:67;19867:2;19862:3;19803:67;:::i;:::-;19796:74;;19879:93;19968:3;19879:93;:::i;:::-;19997:2;19992:3;19988:12;19981:19;;19640:366;;;:::o;20012:419::-;20178:4;20216:2;20205:9;20201:18;20193:26;;20265:9;20259:4;20255:20;20251:1;20240:9;20236:17;20229:47;20293:131;20419:4;20293:131;:::i;:::-;20285:139;;20012:419;;;:::o;20437:181::-;20577:33;20573:1;20565:6;20561:14;20554:57;20437:181;:::o;20624:366::-;20766:3;20787:67;20851:2;20846:3;20787:67;:::i;:::-;20780:74;;20863:93;20952:3;20863:93;:::i;:::-;20981:2;20976:3;20972:12;20965:19;;20624:366;;;:::o;20996:419::-;21162:4;21200:2;21189:9;21185:18;21177:26;;21249:9;21243:4;21239:20;21235:1;21224:9;21220:17;21213:47;21277:131;21403:4;21277:131;:::i;:::-;21269:139;;20996:419;;;:::o;21421:305::-;21461:3;21480:20;21498:1;21480:20;:::i;:::-;21475:25;;21514:20;21532:1;21514:20;:::i;:::-;21509:25;;21668:1;21600:66;21596:74;21593:1;21590:81;21587:107;;;21674:18;;:::i;:::-;21587:107;21718:1;21715;21711:9;21704:16;;21421:305;;;;:::o;21732:225::-;21872:34;21868:1;21860:6;21856:14;21849:58;21941:8;21936:2;21928:6;21924:15;21917:33;21732:225;:::o;21963:366::-;22105:3;22126:67;22190:2;22185:3;22126:67;:::i;:::-;22119:74;;22202:93;22291:3;22202:93;:::i;:::-;22320:2;22315:3;22311:12;22304:19;;21963:366;;;:::o;22335:419::-;22501:4;22539:2;22528:9;22524:18;22516:26;;22588:9;22582:4;22578:20;22574:1;22563:9;22559:17;22552:47;22616:131;22742:4;22616:131;:::i;:::-;22608:139;;22335:419;;;:::o;22760:223::-;22900:34;22896:1;22888:6;22884:14;22877:58;22969:6;22964:2;22956:6;22952:15;22945:31;22760:223;:::o;22989:366::-;23131:3;23152:67;23216:2;23211:3;23152:67;:::i;:::-;23145:74;;23228:93;23317:3;23228:93;:::i;:::-;23346:2;23341:3;23337:12;23330:19;;22989:366;;;:::o;23361:419::-;23527:4;23565:2;23554:9;23550:18;23542:26;;23614:9;23608:4;23604:20;23600:1;23589:9;23585:17;23578:47;23642:131;23768:4;23642:131;:::i;:::-;23634:139;;23361:419;;;:::o;23786:221::-;23926:34;23922:1;23914:6;23910:14;23903:58;23995:4;23990:2;23982:6;23978:15;23971:29;23786:221;:::o;24013:366::-;24155:3;24176:67;24240:2;24235:3;24176:67;:::i;:::-;24169:74;;24252:93;24341:3;24252:93;:::i;:::-;24370:2;24365:3;24361:12;24354:19;;24013:366;;;:::o;24385:419::-;24551:4;24589:2;24578:9;24574:18;24566:26;;24638:9;24632:4;24628:20;24624:1;24613:9;24609:17;24602:47;24666:131;24792:4;24666:131;:::i;:::-;24658:139;;24385:419;;;:::o;24810:224::-;24950:34;24946:1;24938:6;24934:14;24927:58;25019:7;25014:2;25006:6;25002:15;24995:32;24810:224;:::o;25040:366::-;25182:3;25203:67;25267:2;25262:3;25203:67;:::i;:::-;25196:74;;25279:93;25368:3;25279:93;:::i;:::-;25397:2;25392:3;25388:12;25381:19;;25040:366;;;:::o;25412:419::-;25578:4;25616:2;25605:9;25601:18;25593:26;;25665:9;25659:4;25655:20;25651:1;25640:9;25636:17;25629:47;25693:131;25819:4;25693:131;:::i;:::-;25685:139;;25412:419;;;:::o;25837:222::-;25977:34;25973:1;25965:6;25961:14;25954:58;26046:5;26041:2;26033:6;26029:15;26022:30;25837:222;:::o;26065:366::-;26207:3;26228:67;26292:2;26287:3;26228:67;:::i;:::-;26221:74;;26304:93;26393:3;26304:93;:::i;:::-;26422:2;26417:3;26413:12;26406:19;;26065:366;;;:::o;26437:419::-;26603:4;26641:2;26630:9;26626:18;26618:26;;26690:9;26684:4;26680:20;26676:1;26665:9;26661:17;26654:47;26718:131;26844:4;26718:131;:::i;:::-;26710:139;;26437:419;;;:::o;26862:228::-;27002:34;26998:1;26990:6;26986:14;26979:58;27071:11;27066:2;27058:6;27054:15;27047:36;26862:228;:::o;27096:366::-;27238:3;27259:67;27323:2;27318:3;27259:67;:::i;:::-;27252:74;;27335:93;27424:3;27335:93;:::i;:::-;27453:2;27448:3;27444:12;27437:19;;27096:366;;;:::o;27468:419::-;27634:4;27672:2;27661:9;27657:18;27649:26;;27721:9;27715:4;27711:20;27707:1;27696:9;27692:17;27685:47;27749:131;27875:4;27749:131;:::i;:::-;27741:139;;27468:419;;;:::o;27893:227::-;28033:34;28029:1;28021:6;28017:14;28010:58;28102:10;28097:2;28089:6;28085:15;28078:35;27893:227;:::o;28126:366::-;28268:3;28289:67;28353:2;28348:3;28289:67;:::i;:::-;28282:74;;28365:93;28454:3;28365:93;:::i;:::-;28483:2;28478:3;28474:12;28467:19;;28126:366;;;:::o;28498:419::-;28664:4;28702:2;28691:9;28687:18;28679:26;;28751:9;28745:4;28741:20;28737:1;28726:9;28722:17;28715:47;28779:131;28905:4;28779:131;:::i;:::-;28771:139;;28498:419;;;:::o;28923:177::-;29063:29;29059:1;29051:6;29047:14;29040:53;28923:177;:::o;29106:366::-;29248:3;29269:67;29333:2;29328:3;29269:67;:::i;:::-;29262:74;;29345:93;29434:3;29345:93;:::i;:::-;29463:2;29458:3;29454:12;29447:19;;29106:366;;;:::o;29478:419::-;29644:4;29682:2;29671:9;29667:18;29659:26;;29731:9;29725:4;29721:20;29717:1;29706:9;29702:17;29695:47;29759:131;29885:4;29759:131;:::i;:::-;29751:139;;29478:419;;;:::o;29903:442::-;30052:4;30090:2;30079:9;30075:18;30067:26;;30103:71;30171:1;30160:9;30156:17;30147:6;30103:71;:::i;:::-;30184:72;30252:2;30241:9;30237:18;30228:6;30184:72;:::i;:::-;30266;30334:2;30323:9;30319:18;30310:6;30266:72;:::i;:::-;29903:442;;;;;;:::o;30351:180::-;30399:77;30396:1;30389:88;30496:4;30493:1;30486:15;30520:4;30517:1;30510:15;30537:185;30577:1;30594:20;30612:1;30594:20;:::i;:::-;30589:25;;30628:20;30646:1;30628:20;:::i;:::-;30623:25;;30667:1;30657:35;;30672:18;;:::i;:::-;30657:35;30714:1;30711;30707:9;30702:14;;30537:185;;;;:::o;30728:180::-;30776:77;30773:1;30766:88;30873:4;30870:1;30863:15;30897:4;30894:1;30887:15;30914:143;30971:5;31002:6;30996:13;30987:22;;31018:33;31045:5;31018:33;:::i;:::-;30914:143;;;;:::o;31063:351::-;31133:6;31182:2;31170:9;31161:7;31157:23;31153:32;31150:119;;;31188:79;;:::i;:::-;31150:119;31308:1;31333:64;31389:7;31380:6;31369:9;31365:22;31333:64;:::i;:::-;31323:74;;31279:128;31063:351;;;;:::o;31420:85::-;31465:7;31494:5;31483:16;;31420:85;;;:::o;31511:158::-;31569:9;31602:61;31620:42;31629:32;31655:5;31629:32;:::i;:::-;31620:42;:::i;:::-;31602:61;:::i;:::-;31589:74;;31511:158;;;:::o;31675:147::-;31770:45;31809:5;31770:45;:::i;:::-;31765:3;31758:58;31675:147;;:::o;31828:114::-;31895:6;31929:5;31923:12;31913:22;;31828:114;;;:::o;31948:184::-;32047:11;32081:6;32076:3;32069:19;32121:4;32116:3;32112:14;32097:29;;31948:184;;;;:::o;32138:132::-;32205:4;32228:3;32220:11;;32258:4;32253:3;32249:14;32241:22;;32138:132;;;:::o;32276:108::-;32353:24;32371:5;32353:24;:::i;:::-;32348:3;32341:37;32276:108;;:::o;32390:179::-;32459:10;32480:46;32522:3;32514:6;32480:46;:::i;:::-;32558:4;32553:3;32549:14;32535:28;;32390:179;;;;:::o;32575:113::-;32645:4;32677;32672:3;32668:14;32660:22;;32575:113;;;:::o;32724:732::-;32843:3;32872:54;32920:5;32872:54;:::i;:::-;32942:86;33021:6;33016:3;32942:86;:::i;:::-;32935:93;;33052:56;33102:5;33052:56;:::i;:::-;33131:7;33162:1;33147:284;33172:6;33169:1;33166:13;33147:284;;;33248:6;33242:13;33275:63;33334:3;33319:13;33275:63;:::i;:::-;33268:70;;33361:60;33414:6;33361:60;:::i;:::-;33351:70;;33207:224;33194:1;33191;33187:9;33182:14;;33147:284;;;33151:14;33447:3;33440:10;;32848:608;;;32724:732;;;;:::o;33462:831::-;33725:4;33763:3;33752:9;33748:19;33740:27;;33777:71;33845:1;33834:9;33830:17;33821:6;33777:71;:::i;:::-;33858:80;33934:2;33923:9;33919:18;33910:6;33858:80;:::i;:::-;33985:9;33979:4;33975:20;33970:2;33959:9;33955:18;33948:48;34013:108;34116:4;34107:6;34013:108;:::i;:::-;34005:116;;34131:72;34199:2;34188:9;34184:18;34175:6;34131:72;:::i;:::-;34213:73;34281:3;34270:9;34266:19;34257:6;34213:73;:::i;:::-;33462:831;;;;;;;;:::o;34299:220::-;34439:34;34435:1;34427:6;34423:14;34416:58;34508:3;34503:2;34495:6;34491:15;34484:28;34299:220;:::o;34525:366::-;34667:3;34688:67;34752:2;34747:3;34688:67;:::i;:::-;34681:74;;34764:93;34853:3;34764:93;:::i;:::-;34882:2;34877:3;34873:12;34866:19;;34525:366;;;:::o;34897:419::-;35063:4;35101:2;35090:9;35086:18;35078:26;;35150:9;35144:4;35140:20;35136:1;35125:9;35121:17;35114:47;35178:131;35304:4;35178:131;:::i;:::-;35170:139;;34897:419;;;:::o;35322:807::-;35571:4;35609:3;35598:9;35594:19;35586:27;;35623:71;35691:1;35680:9;35676:17;35667:6;35623:71;:::i;:::-;35704:72;35772:2;35761:9;35757:18;35748:6;35704:72;:::i;:::-;35786:80;35862:2;35851:9;35847:18;35838:6;35786:80;:::i;:::-;35876;35952:2;35941:9;35937:18;35928:6;35876:80;:::i;:::-;35966:73;36034:3;36023:9;36019:19;36010:6;35966:73;:::i;:::-;36049;36117:3;36106:9;36102:19;36093:6;36049:73;:::i;:::-;35322:807;;;;;;;;;:::o;36135:663::-;36223:6;36231;36239;36288:2;36276:9;36267:7;36263:23;36259:32;36256:119;;;36294:79;;:::i;:::-;36256:119;36414:1;36439:64;36495:7;36486:6;36475:9;36471:22;36439:64;:::i;:::-;36429:74;;36385:128;36552:2;36578:64;36634:7;36625:6;36614:9;36610:22;36578:64;:::i;:::-;36568:74;;36523:129;36691:2;36717:64;36773:7;36764:6;36753:9;36749:22;36717:64;:::i;:::-;36707:74;;36662:129;36135:663;;;;;:::o
Swarm Source
ipfs://bc1d7a0b01c733850a567703b1d9efe75c6348de475df2c628a96d2a07054580
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.