Feature Tip: Add private address tag to any address under My Name Tag !
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 32 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Transfer | 14447840 | 904 days ago | IN | 0 ETH | 0.00488454 | ||||
Approve | 14447686 | 904 days ago | IN | 0 ETH | 0.00056279 | ||||
Approve | 14447665 | 904 days ago | IN | 0 ETH | 0.00067992 | ||||
Approve | 14447664 | 904 days ago | IN | 0 ETH | 0.00066319 | ||||
Approve | 14447663 | 904 days ago | IN | 0 ETH | 0.00131032 | ||||
Approve | 14447653 | 904 days ago | IN | 0 ETH | 0.00331159 | ||||
Approve | 14447645 | 904 days ago | IN | 0 ETH | 0.00128364 | ||||
Approve | 14447635 | 904 days ago | IN | 0 ETH | 0.00102841 | ||||
Approve | 14447620 | 904 days ago | IN | 0 ETH | 0.00118704 | ||||
Approve | 14447614 | 904 days ago | IN | 0 ETH | 0.00131021 | ||||
Approve | 14447603 | 904 days ago | IN | 0 ETH | 0.00150332 | ||||
Approve | 14447603 | 904 days ago | IN | 0 ETH | 0.00166863 | ||||
Approve | 14447603 | 904 days ago | IN | 0 ETH | 0.0017631 | ||||
Approve | 14447601 | 904 days ago | IN | 0 ETH | 0.00157179 | ||||
Approve | 14447601 | 904 days ago | IN | 0 ETH | 0.00160013 | ||||
Approve | 14447599 | 904 days ago | IN | 0 ETH | 0.00132817 | ||||
Approve | 14447599 | 904 days ago | IN | 0 ETH | 0.00132817 | ||||
Approve | 14447593 | 904 days ago | IN | 0 ETH | 0.00116705 | ||||
Approve | 14447587 | 904 days ago | IN | 0 ETH | 0.00114214 | ||||
Approve | 14447581 | 904 days ago | IN | 0 ETH | 0.00134808 | ||||
Approve | 14447576 | 904 days ago | IN | 0 ETH | 0.00125481 | ||||
Approve | 14447574 | 904 days ago | IN | 0 ETH | 0.00124888 | ||||
Approve | 14447574 | 904 days ago | IN | 0 ETH | 0.00124888 | ||||
Approve | 14447574 | 904 days ago | IN | 0 ETH | 0.00212548 | ||||
Approve | 14447572 | 904 days ago | IN | 0 ETH | 0.00566796 |
Latest 25 internal transactions (View All)
Advanced mode:
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
14447840 | 904 days ago | 77 wei | ||||
14447840 | 904 days ago | 77 wei | ||||
14447653 | 904 days ago | 0.00919718 ETH | ||||
14447653 | 904 days ago | 0.00919718 ETH | ||||
14447653 | 904 days ago | 0.00946555 ETH | ||||
14447653 | 904 days ago | 0.00946555 ETH | ||||
14447653 | 904 days ago | 0.01429142 ETH | ||||
14447653 | 904 days ago | 0.01429142 ETH | ||||
14447641 | 904 days ago | 0.01184731 ETH | ||||
14447641 | 904 days ago | 0.01184731 ETH | ||||
14447638 | 904 days ago | 0.02227046 ETH | ||||
14447638 | 904 days ago | 0.02227046 ETH | ||||
14447629 | 904 days ago | 0.0602034 ETH | ||||
14447629 | 904 days ago | 0.0602034 ETH | ||||
14447627 | 904 days ago | 0.06941689 ETH | ||||
14447627 | 904 days ago | 0.06941689 ETH | ||||
14447610 | 904 days ago | 0.07040446 ETH | ||||
14447610 | 904 days ago | 0.07040446 ETH | ||||
14447605 | 904 days ago | 0.07407977 ETH | ||||
14447605 | 904 days ago | 0.07407977 ETH | ||||
14447601 | 904 days ago | 0.07802689 ETH | ||||
14447601 | 904 days ago | 0.07802689 ETH | ||||
14447600 | 904 days ago | 0.08019792 ETH | ||||
14447600 | 904 days ago | 0.08019792 ETH | ||||
14447597 | 904 days ago | 0.07984852 ETH |
Loading...
Loading
Contract Name:
XENON
Compiler Version
v0.8.13+commit.abaa5c0e
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-03-24 */ /** *Submitted for verification at Etherscan.io on 2022-02-21 */ // WE ARE XENON. WE ARE A LEGION. JOIN US. // btw no socials those are bullshit pragma solidity ^0.8.3; // SPDX-License-Identifier: Unlicensed /** * @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); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ 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) { unchecked { 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) { unchecked { 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) { unchecked { // 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) { unchecked { 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) { unchecked { 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) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return 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) { return a * b; } /** * @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. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { 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) { 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) { unchecked { 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. * * 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). * * 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) { unchecked { 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) { unchecked { require(b > 0, errorMessage); return a % b; } } } /* * @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 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) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @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); } } } } /** * @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); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { _owner = _msgSender(); emit OwnershipTransferred(address(0), _owner); } /** * @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 Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } // contract implementation contract XENON is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; uint8 private _decimals = 9; // string private _name = "XENON"; string private _symbol = "XENON"; uint256 private _tTotal = 1000 * 10**9 * 10**uint256(_decimals); // uint256 public defaultTaxFee = 0; uint256 public _taxFee = defaultTaxFee; uint256 private _previousTaxFee = _taxFee; // uint256 public defaultMarketingFee = 15; uint256 public _marketingFee = defaultMarketingFee; uint256 private _previousMarketingFee = _marketingFee; uint256 public _marketingFee4Sellers = 15; bool public feesOnSellersAndBuyers = true; uint256 public _maxTxAmount = _tTotal.div(1).div(100); uint256 public numTokensToExchangeForMarketing = _tTotal.div(100).div(100); address payable public marketingWallet = payable(0x14b7f9CD09C1a0071D268962705fCD9b78d28a91); // mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tFeeTotal; uint256 private _rTotal = (MAX - (MAX % _tTotal)); IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inSwapAndSend; bool public SwapAndSendEnabled = true; event SwapAndSendEnabledUpdated(bool enabled); modifier lockTheSwap { inSwapAndSend = true; _; inSwapAndSend = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Create a uniswap pair for this new token uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()) .createPair(address(this), _uniswapV2Router.WETH()); // set the rest of the contract variables uniswapV2Router = _uniswapV2Router; //exclude owner and this contract from fee _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; emit Transfer(address(0), _msgSender(), _tTotal); } function name() public view returns (string memory) { return _name; } function symbol() public view returns (string memory) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view override returns (uint256) { return _tTotal; } function balanceOf(address account) public view override returns (uint256) { if (_isExcluded[account]) return _tOwned[account]; return tokenFromReflection(_rOwned[account]); } function transfer(address recipient, uint256 amount) public override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } function allowance(address owner, address spender) public view override returns (uint256) { return _allowances[owner][spender]; } function approve(address spender, uint256 amount) public override returns (bool) { _approve(_msgSender(), spender, amount); return true; } function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function totalFees() public view returns (uint256) { return _tFeeTotal; } function reflectionFromToken(uint256 tAmount, bool deductTransferFee) public view returns(uint256) { require(tAmount <= _tTotal, "Amount must be less than supply"); if (!deductTransferFee) { (uint256 rAmount,,,,,) = _getValues(tAmount); return rAmount; } else { (,uint256 rTransferAmount,,,,) = _getValues(tAmount); return rTransferAmount; } } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount.div(currentRate); } function excludeFromReward(address account) public onlyOwner() { // require(account != 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D, 'We can not exclude Uniswap router.'); require(!_isExcluded[account], "Account is already excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is already excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function excludeFromFee(address account) public onlyOwner() { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner() { _isExcludedFromFee[account] = false; } function removeAllFee() private { if(_taxFee == 0 && _marketingFee == 0) return; _previousTaxFee = _taxFee; _previousMarketingFee = _marketingFee; _taxFee = 0; _marketingFee = 0; } function restoreAllFee() private { _taxFee = _previousTaxFee; _marketingFee = _previousMarketingFee; } //to recieve ETH receive() external payable {} function _reflectFee(uint256 rFee, uint256 tFee) private { _rTotal = _rTotal.sub(rFee); _tFeeTotal = _tFeeTotal.add(tFee); } function _getValues(uint256 tAmount) private view returns (uint256, uint256, uint256, uint256, uint256, uint256) { (uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getTValues(tAmount); (uint256 rAmount, uint256 rTransferAmount, uint256 rFee) = _getRValues(tAmount, tFee, tMarketing, _getRate()); return (rAmount, rTransferAmount, rFee, tTransferAmount, tFee, tMarketing); } function _getTValues(uint256 tAmount) private view returns (uint256, uint256, uint256) { uint256 tFee = calculateTaxFee(tAmount); uint256 tMarketing = calculateMarketingFee(tAmount); uint256 tTransferAmount = tAmount.sub(tFee).sub(tMarketing); return (tTransferAmount, tFee, tMarketing); } function _getRValues(uint256 tAmount, uint256 tFee, uint256 tMarketing, uint256 currentRate) private pure returns (uint256, uint256, uint256) { uint256 rAmount = tAmount.mul(currentRate); uint256 rFee = tFee.mul(currentRate); uint256 rMarketing = tMarketing.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rFee).sub(rMarketing); return (rAmount, rTransferAmount, rFee); } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply.div(tSupply); } function _getCurrentSupply() private view returns(uint256, uint256) { uint256 rSupply = _rTotal; uint256 tSupply = _tTotal; for (uint256 i = 0; i < _excluded.length; i++) { if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply) return (_rTotal, _tTotal); rSupply = rSupply.sub(_rOwned[_excluded[i]]); tSupply = tSupply.sub(_tOwned[_excluded[i]]); } if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal); return (rSupply, tSupply); } function _takeMarketing(uint256 tMarketing) private { uint256 currentRate = _getRate(); uint256 rMarketing = tMarketing.mul(currentRate); _rOwned[address(this)] = _rOwned[address(this)].add(rMarketing); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketing); } function calculateTaxFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_taxFee).div( 10**2 ); } function calculateMarketingFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingFee).div( 10**2 ); } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function _approve(address owner, address spender, uint256 amount) private { require(owner != address(0), "ERC20: approve from the zero address"); require(spender != address(0), "ERC20: approve to the zero address"); _allowances[owner][spender] = amount; emit Approval(owner, spender, amount); } function _transfer( address from, address to, uint256 amount ) private { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); require(amount > 0, "Transfer amount must be greater than zero"); if(from != owner() && to != owner()) require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); // is the token balance of this contract address over the min number of // tokens that we need to initiate a swap + send lock? // also, don't get caught in a circular sending event. // also, don't swap & liquify if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= numTokensToExchangeForMarketing; if(contractTokenBalance >= _maxTxAmount) { contractTokenBalance = _maxTxAmount; } if ( overMinTokenBalance && !inSwapAndSend && from != uniswapV2Pair && SwapAndSendEnabled ) { SwapAndSend(contractTokenBalance); } if(feesOnSellersAndBuyers) { setFees(to); } //indicates if fee should be deducted from transfer bool takeFee = true; //if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFee[from] || _isExcludedFromFee[to]) { takeFee = false; } _tokenTransfer(from,to,amount,takeFee); } function setFees(address recipient) private { _taxFee = defaultTaxFee; _marketingFee = defaultMarketingFee; if (recipient == uniswapV2Pair) { // sell _marketingFee = _marketingFee4Sellers; } } function SwapAndSend(uint256 contractTokenBalance) private lockTheSwap { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), contractTokenBalance); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( contractTokenBalance, 0, // accept any amount of ETH path, address(this), block.timestamp ); uint256 contractETHBalance = address(this).balance; if(contractETHBalance > 0) { marketingWallet.transfer(contractETHBalance); } } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount,bool takeFee) private { if(!takeFee) removeAllFee(); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, amount); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, amount); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount); } else { _transferStandard(sender, recipient, amount); } if(!takeFee) restoreAllFee(); } function _transferStandard(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferToExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount) private { (uint256 rAmount, uint256 rTransferAmount, uint256 rFee, uint256 tTransferAmount, uint256 tFee, uint256 tMarketing) = _getValues(tAmount); _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(rAmount); _tOwned[recipient] = _tOwned[recipient].add(tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(rTransferAmount); _takeMarketing(tMarketing); _reflectFee(rFee, tFee); emit Transfer(sender, recipient, tTransferAmount); } function setDefaultMarketingFee(uint256 marketingFee) external onlyOwner() { defaultMarketingFee = marketingFee; } function setMarketingFee4Sellers(uint256 marketingFee4Sellers) external onlyOwner() { _marketingFee4Sellers = marketingFee4Sellers; } function setFeesOnSellersAndBuyers(bool _enabled) public onlyOwner() { feesOnSellersAndBuyers = _enabled; } function setSwapAndSendEnabled(bool _enabled) public onlyOwner() { SwapAndSendEnabled = _enabled; emit SwapAndSendEnabledUpdated(_enabled); } function setnumTokensToExchangeForMarketing(uint256 _numTokensToExchangeForMarketing) public onlyOwner() { numTokensToExchangeForMarketing = _numTokensToExchangeForMarketing; } function _setMarketingWallet(address payable wallet) external onlyOwner() { marketingWallet = wallet; } function _setMaxTxAmount(uint256 maxTxAmount) external onlyOwner() { _maxTxAmount = maxTxAmount; } }
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":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":"bool","name":"enabled","type":"bool"}],"name":"SwapAndSendEnabledUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"SwapAndSendEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingFee4Sellers","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"wallet","type":"address"}],"name":"_setMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxTxAmount","type":"uint256"}],"name":"_setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_taxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"defaultMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"defaultTaxFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feesOnSellersAndBuyers","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensToExchangeForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee","type":"uint256"}],"name":"setDefaultMarketingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setFeesOnSellersAndBuyers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketingFee4Sellers","type":"uint256"}],"name":"setMarketingFee4Sellers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapAndSendEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numTokensToExchangeForMarketing","type":"uint256"}],"name":"setnumTokensToExchangeForMarketing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526009600060146101000a81548160ff021916908360ff1602179055506040518060400160405280600581526020017f58454e4f4e000000000000000000000000000000000000000000000000000000815250600190805190602001906200006d929190620006d6565b506040518060400160405280600581526020017f58454e4f4e00000000000000000000000000000000000000000000000000000081525060029080519060200190620000bb929190620006d6565b50600060149054906101000a900460ff1660ff16600a620000dd919062000913565b64e8d4a51000620000ef919062000964565b6003556000600455600454600555600554600655600f600755600754600855600854600955600f600a556001600b60006101000a81548160ff0219169083151502179055506200016b60646200015760016003546200068d60201b620020841790919060201c565b6200068d60201b620020841790919060201c565b600c55620001a560646200019160646003546200068d60201b620020841790919060201c565b6200068d60201b620020841790919060201c565b600d557314b7f9cd09c1a0071d268962705fcd9b78d28a91600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506003546000196200020f9190620009f4565b6000196200021e919062000a2c565b6016556001601760016101000a81548160ff0219169083151502179055503480156200024957600080fd5b506200025a620006a560201b60201c565b6000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3601654600f60006200032b620006a560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003ce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003f4919062000ad1565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200045c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000482919062000ad1565b6040518363ffffffff1660e01b8152600401620004a192919062000b14565b6020604051808303816000875af1158015620004c1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004e7919062000ad1565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff168152505060016012600062000564620006ad60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601260003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200061d620006a560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6003546040516200067e919062000b52565b60405180910390a35062000c0b565b600081836200069d919062000b6f565b905092915050565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006e49062000bd6565b90600052602060002090601f01602090048101928262000708576000855562000754565b82601f106200072357805160ff191683800117855562000754565b8280016001018555821562000754579182015b828111156200075357825182559160200191906001019062000736565b5b50905062000763919062000767565b5090565b5b808211156200078257600081600090555060010162000768565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60008160011c9050919050565b6000808291508390505b60018511156200081457808604811115620007ec57620007eb62000786565b5b6001851615620007fc5780820291505b80810290506200080c85620007b5565b9450620007cc565b94509492505050565b6000826200082f576001905062000902565b816200083f576000905062000902565b8160018114620008585760028114620008635762000899565b600191505062000902565b60ff84111562000878576200087762000786565b5b8360020a91508482111562000892576200089162000786565b5b5062000902565b5060208310610133831016604e8410600b8410161715620008d35782820a905083811115620008cd57620008cc62000786565b5b62000902565b620008e28484846001620007c2565b92509050818404811115620008fc57620008fb62000786565b5b81810290505b9392505050565b6000819050919050565b6000620009208262000909565b91506200092d8362000909565b92506200095c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200081d565b905092915050565b6000620009718262000909565b91506200097e8362000909565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620009ba57620009b962000786565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000a018262000909565b915062000a0e8362000909565b92508262000a215762000a20620009c5565b5b828206905092915050565b600062000a398262000909565b915062000a468362000909565b92508282101562000a5c5762000a5b62000786565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000a998262000a6c565b9050919050565b62000aab8162000a8c565b811462000ab757600080fd5b50565b60008151905062000acb8162000aa0565b92915050565b60006020828403121562000aea5762000ae962000a67565b5b600062000afa8482850162000aba565b91505092915050565b62000b0e8162000a8c565b82525050565b600060408201905062000b2b600083018562000b03565b62000b3a602083018462000b03565b9392505050565b62000b4c8162000909565b82525050565b600060208201905062000b69600083018462000b41565b92915050565b600062000b7c8262000909565b915062000b898362000909565b92508262000b9c5762000b9b620009c5565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000bef57607f821691505b60208210810362000c055762000c0462000ba7565b5b50919050565b60805160a051614ca362000c54600039600081816113b50152818161249601526129e2015260008181610ac50152818161279c0152818161287d01526128a40152614ca36000f3fe6080604052600436106102555760003560e01c806370a0823111610139578063a3864430116100b6578063cba851b31161007a578063cba851b3146108fd578063d54994db14610928578063dab522a814610951578063dd62ed3e1461097a578063ea2f0b37146109b7578063f2fde38b146109e05761025c565b8063a386443014610802578063a457c2d71461082d578063a9059cbb1461086a578063bc951f98146108a7578063c537bd8f146108d25761025c565b80638da5cb5b116100fd5780638da5cb5b1461072d57806395d89b41146107585780639f64621414610783578063a062e3ba146107ae578063a08f6760146107d95761025c565b806370a0823114610646578063715018a61461068357806375f0a8741461069a5780637d1db4a5146106c557806388f82020146106f05761025c565b80632d838119116101d2578063437823ec11610196578063437823ec146105265780634549b0391461054f57806349bd5a5e1461058c57806352390c02146105b75780635342acb4146105e057806357e0a1d01461061d5761025c565b80632d8381191461042d578063313ce5671461046a5780633685d4191461049557806339509351146104be5780633b124fe7146104fb5761025c565b80631bbae6e0116102195780631bbae6e01461034a5780631ff53b601461037357806322976e0d1461039c57806323b872dd146103c75780632663236f146104045761025c565b806306fdde0314610261578063095ea7b31461028c57806313114a9d146102c95780631694505e146102f457806318160ddd1461031f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610a09565b6040516102839190613dbe565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613e79565b610a9b565b6040516102c09190613ed4565b60405180910390f35b3480156102d557600080fd5b506102de610ab9565b6040516102eb9190613efe565b60405180910390f35b34801561030057600080fd5b50610309610ac3565b6040516103169190613f78565b60405180910390f35b34801561032b57600080fd5b50610334610ae7565b6040516103419190613efe565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190613f93565b610af1565b005b34801561037f57600080fd5b5061039a60048036038101906103959190613ffe565b610b77565b005b3480156103a857600080fd5b506103b1610c37565b6040516103be9190613efe565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e9919061402b565b610c3d565b6040516103fb9190613ed4565b60405180910390f35b34801561041057600080fd5b5061042b600480360381019061042691906140aa565b610d16565b005b34801561043957600080fd5b50610454600480360381019061044f9190613f93565b610de6565b6040516104619190613efe565b60405180910390f35b34801561047657600080fd5b5061047f610e54565b60405161048c91906140f3565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b7919061410e565b610e6a565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190613e79565b61119f565b6040516104f29190613ed4565b60405180910390f35b34801561050757600080fd5b50610510611252565b60405161051d9190613efe565b60405180910390f35b34801561053257600080fd5b5061054d6004803603810190610548919061410e565b611258565b005b34801561055b57600080fd5b506105766004803603810190610571919061413b565b61132f565b6040516105839190613efe565b60405180910390f35b34801561059857600080fd5b506105a16113b3565b6040516105ae919061418a565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d9919061410e565b6113d7565b005b3480156105ec57600080fd5b506106076004803603810190610602919061410e565b611672565b6040516106149190613ed4565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f91906140aa565b6116c8565b005b34801561065257600080fd5b5061066d6004803603810190610668919061410e565b611761565b60405161067a9190613efe565b60405180910390f35b34801561068f57600080fd5b5061069861184c565b005b3480156106a657600080fd5b506106af611986565b6040516106bc91906141b4565b60405180910390f35b3480156106d157600080fd5b506106da6119ac565b6040516106e79190613efe565b60405180910390f35b3480156106fc57600080fd5b506107176004803603810190610712919061410e565b6119b2565b6040516107249190613ed4565b60405180910390f35b34801561073957600080fd5b50610742611a08565b60405161074f919061418a565b60405180910390f35b34801561076457600080fd5b5061076d611a31565b60405161077a9190613dbe565b60405180910390f35b34801561078f57600080fd5b50610798611ac3565b6040516107a59190613efe565b60405180910390f35b3480156107ba57600080fd5b506107c3611ac9565b6040516107d09190613ed4565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb9190613f93565b611adc565b005b34801561080e57600080fd5b50610817611b62565b6040516108249190613efe565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f9190613e79565b611b68565b6040516108619190613ed4565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c9190613e79565b611c35565b60405161089e9190613ed4565b60405180910390f35b3480156108b357600080fd5b506108bc611c53565b6040516108c99190613efe565b60405180910390f35b3480156108de57600080fd5b506108e7611c59565b6040516108f49190613ed4565b60405180910390f35b34801561090957600080fd5b50610912611c6c565b60405161091f9190613efe565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a9190613f93565b611c72565b005b34801561095d57600080fd5b5061097860048036038101906109739190613f93565b611cf8565b005b34801561098657600080fd5b506109a1600480360381019061099c91906141cf565b611d7e565b6040516109ae9190613efe565b60405180910390f35b3480156109c357600080fd5b506109de60048036038101906109d9919061410e565b611e05565b005b3480156109ec57600080fd5b50610a076004803603810190610a02919061410e565b611edc565b005b606060018054610a189061423e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a449061423e565b8015610a915780601f10610a6657610100808354040283529160200191610a91565b820191906000526020600020905b815481529060010190602001808311610a7457829003601f168201915b5050505050905090565b6000610aaf610aa861209a565b84846120a2565b6001905092915050565b6000601554905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600354905090565b610af961209a565b73ffffffffffffffffffffffffffffffffffffffff16610b17611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b64906142bb565b60405180910390fd5b80600c8190555050565b610b7f61209a565b73ffffffffffffffffffffffffffffffffffffffff16610b9d611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea906142bb565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000610c4a84848461226b565b610d0b84610c5661209a565b610d0685604051806060016040528060288152602001614c2160289139601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cbc61209a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f09092919063ffffffff16565b6120a2565b600190509392505050565b610d1e61209a565b73ffffffffffffffffffffffffffffffffffffffff16610d3c611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d89906142bb565b60405180910390fd5b80601760016101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610ddb9190613ed4565b60405180910390a150565b6000601654821115610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e249061434d565b60405180910390fd5b6000610e37612645565b9050610e4c818461208490919063ffffffff16565b915050919050565b60008060149054906101000a900460ff16905090565b610e7261209a565b73ffffffffffffffffffffffffffffffffffffffff16610e90611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd906142bb565b60405180910390fd5b601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f69906143b9565b60405180910390fd5b60005b60148054905081101561119b578173ffffffffffffffffffffffffffffffffffffffff1660148281548110610fad57610fac6143d9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361118857601460016014805490506110079190614437565b81548110611018576110176143d9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660148281548110611057576110566143d9565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601480548061114e5761114d61446b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561119b565b80806111939061449a565b915050610f75565b5050565b60006112486111ac61209a565b8461124385601160006111bd61209a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b6120a2565b6001905092915050565b60055481565b61126061209a565b73ffffffffffffffffffffffffffffffffffffffff1661127e611a08565b73ffffffffffffffffffffffffffffffffffffffff16146112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb906142bb565b60405180910390fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600354831115611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136d9061452e565b60405180910390fd5b8161139657600061138684612686565b50505050509050809150506113ad565b60006113a184612686565b50505050915050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6113df61209a565b73ffffffffffffffffffffffffffffffffffffffff166113fd611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a906142bb565b60405180910390fd5b601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d7906143b9565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115b457611570600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de6565b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506014819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6116d061209a565b73ffffffffffffffffffffffffffffffffffffffff166116ee611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b906142bb565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117fc57601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611847565b611844600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de6565b90505b919050565b61185461209a565b73ffffffffffffffffffffffffffffffffffffffff16611872611a08565b73ffffffffffffffffffffffffffffffffffffffff16146118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf906142bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611a409061423e565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6c9061423e565b8015611ab95780601f10611a8e57610100808354040283529160200191611ab9565b820191906000526020600020905b815481529060010190602001808311611a9c57829003601f168201915b5050505050905090565b60075481565b601760019054906101000a900460ff1681565b611ae461209a565b73ffffffffffffffffffffffffffffffffffffffff16611b02611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f906142bb565b60405180910390fd5b80600a8190555050565b600d5481565b6000611c2b611b7561209a565b84611c2685604051806060016040528060258152602001614c496025913960116000611b9f61209a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f09092919063ffffffff16565b6120a2565b6001905092915050565b6000611c49611c4261209a565b848461226b565b6001905092915050565b600a5481565b600b60009054906101000a900460ff1681565b60045481565b611c7a61209a565b73ffffffffffffffffffffffffffffffffffffffff16611c98611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce5906142bb565b60405180910390fd5b8060078190555050565b611d0061209a565b73ffffffffffffffffffffffffffffffffffffffff16611d1e611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b906142bb565b60405180910390fd5b80600d8190555050565b6000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e0d61209a565b73ffffffffffffffffffffffffffffffffffffffff16611e2b611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e78906142bb565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ee461209a565b73ffffffffffffffffffffffffffffffffffffffff16611f02611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f906142bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe906145c0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008183612092919061460f565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612111576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612108906146b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217790614744565b60405180910390fd5b80601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161225e9190613efe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d1906147d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234090614868565b60405180910390fd5b6000811161238c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612383906148fa565b60405180910390fd5b612394611a08565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561240257506123d2611a08565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561244d57600c5481111561244c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124439061498c565b60405180910390fd5b5b600061245830611761565b90506000600d548210159050600c54821061247357600c5491505b80801561248d5750601760009054906101000a900460ff16155b80156124e557507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156124fd5750601760019054906101000a900460ff165b1561250c5761250b826126e2565b5b600b60009054906101000a900460ff161561252b5761252a846129ce565b5b600060019050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125d25750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125dc57600090505b6125e886868684612a40565b505050505050565b6000838311158290612638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262f9190613dbe565b60405180910390fd5b5082840390509392505050565b6000806000612652612d51565b91509150612669818361208490919063ffffffff16565b9250505090565b6000818361267e91906149ac565b905092915050565b600080600080600080600080600061269d8a613004565b92509250925060008060006126bb8d86866126b6612645565b61305e565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601760006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561271a57612719614a02565b5b6040519080825280602002602001820160405280156127485781602001602082028036833780820191505090505b50905030816000815181106127605761275f6143d9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128299190614a46565b8160018151811061283d5761283c6143d9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128a2307f0000000000000000000000000000000000000000000000000000000000000000846120a2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612904959493929190614b6c565b600060405180830381600087803b15801561291e57600080fd5b505af1158015612932573d6000803e3d6000fd5b50505050600047905060008111156129ae57600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156129ac573d6000803e3d6000fd5b505b50506000601760006101000a81548160ff02191690831515021790555050565b6004546005819055506007546008819055507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a3d57600a546008819055505b50565b80612a4e57612a4d6130e7565b5b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612af15750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b0657612b01848484613124565b612d3d565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ba95750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612bbe57612bb9848484613384565b612d3c565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c625750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7757612c728484846135e4565b612d3b565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d195750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d2e57612d298484846137af565b612d3a565b612d398484846135e4565b5b5b5b5b80612d4b57612d4a613aa4565b5b50505050565b600080600060165490506000600354905060005b601480549050811015612fc75782600f600060148481548110612d8b57612d8a6143d9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e795750816010600060148481548110612e1157612e106143d9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e905760165460035494509450505050613000565b612f20600f600060148481548110612eab57612eaa6143d9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613ab890919063ffffffff16565b9250612fb26010600060148481548110612f3d57612f3c6143d9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613ab890919063ffffffff16565b91508080612fbf9061449a565b915050612d65565b50612fdf60035460165461208490919063ffffffff16565b821015612ff757601654600354935093505050613000565b81819350935050505b9091565b60008060008061301385613ace565b9050600061302086613aff565b905060006130498261303b858a613ab890919063ffffffff16565b613ab890919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806130778589613b3090919063ffffffff16565b9050600061308e8689613b3090919063ffffffff16565b905060006130a58789613b3090919063ffffffff16565b905060006130ce826130c08587613ab890919063ffffffff16565b613ab890919063ffffffff16565b9050838184965096509650505050509450945094915050565b60006005541480156130fb57506000600854145b61312257600554600681905550600854600981905550600060058190555060006008819055505b565b60008060008060008061313687612686565b95509550955095509550955061319487601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061322986600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132be85600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330a81613b46565b6133148483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516133719190613efe565b60405180910390a3505050505050505050565b60008060008060008061339687612686565b9550955095509550955095506133f486600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061348983601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061351e85600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061356a81613b46565b6135748483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516135d19190613efe565b60405180910390a3505050505050505050565b6000806000806000806135f687612686565b95509550955095509550955061365486600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136e985600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061373581613b46565b61373f8483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161379c9190613efe565b60405180910390a3505050505050505050565b6000806000806000806137c187612686565b95509550955095509550955061381f87601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138b486600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061394983601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139de85600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2a81613b46565b613a348483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613a919190613efe565b60405180910390a3505050505050505050565b600654600581905550600954600881905550565b60008183613ac69190614437565b905092915050565b6000613af86064613aea60055485613b3090919063ffffffff16565b61208490919063ffffffff16565b9050919050565b6000613b296064613b1b60085485613b3090919063ffffffff16565b61208490919063ffffffff16565b9050919050565b60008183613b3e9190614bc6565b905092915050565b6000613b50612645565b90506000613b678284613b3090919063ffffffff16565b9050613bbb81600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613ce657613ca283601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613d0082601654613ab890919063ffffffff16565b601681905550613d1b8160155461267090919063ffffffff16565b6015819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d5f578082015181840152602081019050613d44565b83811115613d6e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d9082613d25565b613d9a8185613d30565b9350613daa818560208601613d41565b613db381613d74565b840191505092915050565b60006020820190508181036000830152613dd88184613d85565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e1082613de5565b9050919050565b613e2081613e05565b8114613e2b57600080fd5b50565b600081359050613e3d81613e17565b92915050565b6000819050919050565b613e5681613e43565b8114613e6157600080fd5b50565b600081359050613e7381613e4d565b92915050565b60008060408385031215613e9057613e8f613de0565b5b6000613e9e85828601613e2e565b9250506020613eaf85828601613e64565b9150509250929050565b60008115159050919050565b613ece81613eb9565b82525050565b6000602082019050613ee96000830184613ec5565b92915050565b613ef881613e43565b82525050565b6000602082019050613f136000830184613eef565b92915050565b6000819050919050565b6000613f3e613f39613f3484613de5565b613f19565b613de5565b9050919050565b6000613f5082613f23565b9050919050565b6000613f6282613f45565b9050919050565b613f7281613f57565b82525050565b6000602082019050613f8d6000830184613f69565b92915050565b600060208284031215613fa957613fa8613de0565b5b6000613fb784828501613e64565b91505092915050565b6000613fcb82613de5565b9050919050565b613fdb81613fc0565b8114613fe657600080fd5b50565b600081359050613ff881613fd2565b92915050565b60006020828403121561401457614013613de0565b5b600061402284828501613fe9565b91505092915050565b60008060006060848603121561404457614043613de0565b5b600061405286828701613e2e565b935050602061406386828701613e2e565b925050604061407486828701613e64565b9150509250925092565b61408781613eb9565b811461409257600080fd5b50565b6000813590506140a48161407e565b92915050565b6000602082840312156140c0576140bf613de0565b5b60006140ce84828501614095565b91505092915050565b600060ff82169050919050565b6140ed816140d7565b82525050565b600060208201905061410860008301846140e4565b92915050565b60006020828403121561412457614123613de0565b5b600061413284828501613e2e565b91505092915050565b6000806040838503121561415257614151613de0565b5b600061416085828601613e64565b925050602061417185828601614095565b9150509250929050565b61418481613e05565b82525050565b600060208201905061419f600083018461417b565b92915050565b6141ae81613fc0565b82525050565b60006020820190506141c960008301846141a5565b92915050565b600080604083850312156141e6576141e5613de0565b5b60006141f485828601613e2e565b925050602061420585828601613e2e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061425657607f821691505b6020821081036142695761426861420f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142a5602083613d30565b91506142b08261426f565b602082019050919050565b600060208201905081810360008301526142d481614298565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614337602a83613d30565b9150614342826142db565b604082019050919050565b600060208201905081810360008301526143668161432a565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b60006143a3601b83613d30565b91506143ae8261436d565b602082019050919050565b600060208201905081810360008301526143d281614396565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061444282613e43565b915061444d83613e43565b9250828210156144605761445f614408565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006144a582613e43565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144d7576144d6614408565b5b600182019050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000614518601f83613d30565b9150614523826144e2565b602082019050919050565b600060208201905081810360008301526145478161450b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145aa602683613d30565b91506145b58261454e565b604082019050919050565b600060208201905081810360008301526145d98161459d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061461a82613e43565b915061462583613e43565b925082614635576146346145e0565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061469c602483613d30565b91506146a782614640565b604082019050919050565b600060208201905081810360008301526146cb8161468f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061472e602283613d30565b9150614739826146d2565b604082019050919050565b6000602082019050818103600083015261475d81614721565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147c0602583613d30565b91506147cb82614764565b604082019050919050565b600060208201905081810360008301526147ef816147b3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614852602383613d30565b915061485d826147f6565b604082019050919050565b6000602082019050818103600083015261488181614845565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006148e4602983613d30565b91506148ef82614888565b604082019050919050565b60006020820190508181036000830152614913816148d7565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614976602883613d30565b91506149818261491a565b604082019050919050565b600060208201905081810360008301526149a581614969565b9050919050565b60006149b782613e43565b91506149c283613e43565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149f7576149f6614408565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614a4081613e17565b92915050565b600060208284031215614a5c57614a5b613de0565b5b6000614a6a84828501614a31565b91505092915050565b6000819050919050565b6000614a98614a93614a8e84614a73565b613f19565b613e43565b9050919050565b614aa881614a7d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ae381613e05565b82525050565b6000614af58383614ada565b60208301905092915050565b6000602082019050919050565b6000614b1982614aae565b614b238185614ab9565b9350614b2e83614aca565b8060005b83811015614b5f578151614b468882614ae9565b9750614b5183614b01565b925050600181019050614b32565b5085935050505092915050565b600060a082019050614b816000830188613eef565b614b8e6020830187614a9f565b8181036040830152614ba08186614b0e565b9050614baf606083018561417b565b614bbc6080830184613eef565b9695505050505050565b6000614bd182613e43565b9150614bdc83613e43565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c1557614c14614408565b5b82820290509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e2e6d3c203a9be36321ad27ad26eb633cfaa8458c5805ec75353755232ed78dc64736f6c634300080d0033
Deployed Bytecode
0x6080604052600436106102555760003560e01c806370a0823111610139578063a3864430116100b6578063cba851b31161007a578063cba851b3146108fd578063d54994db14610928578063dab522a814610951578063dd62ed3e1461097a578063ea2f0b37146109b7578063f2fde38b146109e05761025c565b8063a386443014610802578063a457c2d71461082d578063a9059cbb1461086a578063bc951f98146108a7578063c537bd8f146108d25761025c565b80638da5cb5b116100fd5780638da5cb5b1461072d57806395d89b41146107585780639f64621414610783578063a062e3ba146107ae578063a08f6760146107d95761025c565b806370a0823114610646578063715018a61461068357806375f0a8741461069a5780637d1db4a5146106c557806388f82020146106f05761025c565b80632d838119116101d2578063437823ec11610196578063437823ec146105265780634549b0391461054f57806349bd5a5e1461058c57806352390c02146105b75780635342acb4146105e057806357e0a1d01461061d5761025c565b80632d8381191461042d578063313ce5671461046a5780633685d4191461049557806339509351146104be5780633b124fe7146104fb5761025c565b80631bbae6e0116102195780631bbae6e01461034a5780631ff53b601461037357806322976e0d1461039c57806323b872dd146103c75780632663236f146104045761025c565b806306fdde0314610261578063095ea7b31461028c57806313114a9d146102c95780631694505e146102f457806318160ddd1461031f5761025c565b3661025c57005b600080fd5b34801561026d57600080fd5b50610276610a09565b6040516102839190613dbe565b60405180910390f35b34801561029857600080fd5b506102b360048036038101906102ae9190613e79565b610a9b565b6040516102c09190613ed4565b60405180910390f35b3480156102d557600080fd5b506102de610ab9565b6040516102eb9190613efe565b60405180910390f35b34801561030057600080fd5b50610309610ac3565b6040516103169190613f78565b60405180910390f35b34801561032b57600080fd5b50610334610ae7565b6040516103419190613efe565b60405180910390f35b34801561035657600080fd5b50610371600480360381019061036c9190613f93565b610af1565b005b34801561037f57600080fd5b5061039a60048036038101906103959190613ffe565b610b77565b005b3480156103a857600080fd5b506103b1610c37565b6040516103be9190613efe565b60405180910390f35b3480156103d357600080fd5b506103ee60048036038101906103e9919061402b565b610c3d565b6040516103fb9190613ed4565b60405180910390f35b34801561041057600080fd5b5061042b600480360381019061042691906140aa565b610d16565b005b34801561043957600080fd5b50610454600480360381019061044f9190613f93565b610de6565b6040516104619190613efe565b60405180910390f35b34801561047657600080fd5b5061047f610e54565b60405161048c91906140f3565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b7919061410e565b610e6a565b005b3480156104ca57600080fd5b506104e560048036038101906104e09190613e79565b61119f565b6040516104f29190613ed4565b60405180910390f35b34801561050757600080fd5b50610510611252565b60405161051d9190613efe565b60405180910390f35b34801561053257600080fd5b5061054d6004803603810190610548919061410e565b611258565b005b34801561055b57600080fd5b506105766004803603810190610571919061413b565b61132f565b6040516105839190613efe565b60405180910390f35b34801561059857600080fd5b506105a16113b3565b6040516105ae919061418a565b60405180910390f35b3480156105c357600080fd5b506105de60048036038101906105d9919061410e565b6113d7565b005b3480156105ec57600080fd5b506106076004803603810190610602919061410e565b611672565b6040516106149190613ed4565b60405180910390f35b34801561062957600080fd5b50610644600480360381019061063f91906140aa565b6116c8565b005b34801561065257600080fd5b5061066d6004803603810190610668919061410e565b611761565b60405161067a9190613efe565b60405180910390f35b34801561068f57600080fd5b5061069861184c565b005b3480156106a657600080fd5b506106af611986565b6040516106bc91906141b4565b60405180910390f35b3480156106d157600080fd5b506106da6119ac565b6040516106e79190613efe565b60405180910390f35b3480156106fc57600080fd5b506107176004803603810190610712919061410e565b6119b2565b6040516107249190613ed4565b60405180910390f35b34801561073957600080fd5b50610742611a08565b60405161074f919061418a565b60405180910390f35b34801561076457600080fd5b5061076d611a31565b60405161077a9190613dbe565b60405180910390f35b34801561078f57600080fd5b50610798611ac3565b6040516107a59190613efe565b60405180910390f35b3480156107ba57600080fd5b506107c3611ac9565b6040516107d09190613ed4565b60405180910390f35b3480156107e557600080fd5b5061080060048036038101906107fb9190613f93565b611adc565b005b34801561080e57600080fd5b50610817611b62565b6040516108249190613efe565b60405180910390f35b34801561083957600080fd5b50610854600480360381019061084f9190613e79565b611b68565b6040516108619190613ed4565b60405180910390f35b34801561087657600080fd5b50610891600480360381019061088c9190613e79565b611c35565b60405161089e9190613ed4565b60405180910390f35b3480156108b357600080fd5b506108bc611c53565b6040516108c99190613efe565b60405180910390f35b3480156108de57600080fd5b506108e7611c59565b6040516108f49190613ed4565b60405180910390f35b34801561090957600080fd5b50610912611c6c565b60405161091f9190613efe565b60405180910390f35b34801561093457600080fd5b5061094f600480360381019061094a9190613f93565b611c72565b005b34801561095d57600080fd5b5061097860048036038101906109739190613f93565b611cf8565b005b34801561098657600080fd5b506109a1600480360381019061099c91906141cf565b611d7e565b6040516109ae9190613efe565b60405180910390f35b3480156109c357600080fd5b506109de60048036038101906109d9919061410e565b611e05565b005b3480156109ec57600080fd5b50610a076004803603810190610a02919061410e565b611edc565b005b606060018054610a189061423e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a449061423e565b8015610a915780601f10610a6657610100808354040283529160200191610a91565b820191906000526020600020905b815481529060010190602001808311610a7457829003601f168201915b5050505050905090565b6000610aaf610aa861209a565b84846120a2565b6001905092915050565b6000601554905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600354905090565b610af961209a565b73ffffffffffffffffffffffffffffffffffffffff16610b17611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610b6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b64906142bb565b60405180910390fd5b80600c8190555050565b610b7f61209a565b73ffffffffffffffffffffffffffffffffffffffff16610b9d611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610bf3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bea906142bb565b60405180910390fd5b80600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60085481565b6000610c4a84848461226b565b610d0b84610c5661209a565b610d0685604051806060016040528060288152602001614c2160289139601160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cbc61209a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f09092919063ffffffff16565b6120a2565b600190509392505050565b610d1e61209a565b73ffffffffffffffffffffffffffffffffffffffff16610d3c611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610d92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d89906142bb565b60405180910390fd5b80601760016101000a81548160ff0219169083151502179055507f3efb3f9ce66ef48ce5be6bff57df61c60b91f67f10f414ed7cd767b1c9cdad7d81604051610ddb9190613ed4565b60405180910390a150565b6000601654821115610e2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e249061434d565b60405180910390fd5b6000610e37612645565b9050610e4c818461208490919063ffffffff16565b915050919050565b60008060149054906101000a900460ff16905090565b610e7261209a565b73ffffffffffffffffffffffffffffffffffffffff16610e90611a08565b73ffffffffffffffffffffffffffffffffffffffff1614610ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610edd906142bb565b60405180910390fd5b601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610f72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f69906143b9565b60405180910390fd5b60005b60148054905081101561119b578173ffffffffffffffffffffffffffffffffffffffff1660148281548110610fad57610fac6143d9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff160361118857601460016014805490506110079190614437565b81548110611018576110176143d9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660148281548110611057576110566143d9565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601480548061114e5761114d61446b565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055905561119b565b80806111939061449a565b915050610f75565b5050565b60006112486111ac61209a565b8461124385601160006111bd61209a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b6120a2565b6001905092915050565b60055481565b61126061209a565b73ffffffffffffffffffffffffffffffffffffffff1661127e611a08565b73ffffffffffffffffffffffffffffffffffffffff16146112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb906142bb565b60405180910390fd5b6001601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600354831115611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136d9061452e565b60405180910390fd5b8161139657600061138684612686565b50505050509050809150506113ad565b60006113a184612686565b50505050915050809150505b92915050565b7f0000000000000000000000003badcf2bee63295233c3ad6638a0a134845b3d5181565b6113df61209a565b73ffffffffffffffffffffffffffffffffffffffff166113fd611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144a906142bb565b60405180910390fd5b601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d7906143b9565b60405180910390fd5b6000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115b457611570600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de6565b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506014819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6116d061209a565b73ffffffffffffffffffffffffffffffffffffffff166116ee611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b906142bb565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156117fc57601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611847565b611844600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610de6565b90505b919050565b61185461209a565b73ffffffffffffffffffffffffffffffffffffffff16611872611a08565b73ffffffffffffffffffffffffffffffffffffffff16146118c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bf906142bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600c5481565b6000601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054611a409061423e565b80601f0160208091040260200160405190810160405280929190818152602001828054611a6c9061423e565b8015611ab95780601f10611a8e57610100808354040283529160200191611ab9565b820191906000526020600020905b815481529060010190602001808311611a9c57829003601f168201915b5050505050905090565b60075481565b601760019054906101000a900460ff1681565b611ae461209a565b73ffffffffffffffffffffffffffffffffffffffff16611b02611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4f906142bb565b60405180910390fd5b80600a8190555050565b600d5481565b6000611c2b611b7561209a565b84611c2685604051806060016040528060258152602001614c496025913960116000611b9f61209a565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546125f09092919063ffffffff16565b6120a2565b6001905092915050565b6000611c49611c4261209a565b848461226b565b6001905092915050565b600a5481565b600b60009054906101000a900460ff1681565b60045481565b611c7a61209a565b73ffffffffffffffffffffffffffffffffffffffff16611c98611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ce5906142bb565b60405180910390fd5b8060078190555050565b611d0061209a565b73ffffffffffffffffffffffffffffffffffffffff16611d1e611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611d74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6b906142bb565b60405180910390fd5b80600d8190555050565b6000601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611e0d61209a565b73ffffffffffffffffffffffffffffffffffffffff16611e2b611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611e81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e78906142bb565b60405180910390fd5b6000601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611ee461209a565b73ffffffffffffffffffffffffffffffffffffffff16611f02611a08565b73ffffffffffffffffffffffffffffffffffffffff1614611f58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4f906142bb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611fc7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fbe906145c0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008183612092919061460f565b905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612111576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612108906146b2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612180576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217790614744565b60405180910390fd5b80601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161225e9190613efe565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036122da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d1906147d6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612349576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234090614868565b60405180910390fd5b6000811161238c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612383906148fa565b60405180910390fd5b612394611a08565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561240257506123d2611a08565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561244d57600c5481111561244c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124439061498c565b60405180910390fd5b5b600061245830611761565b90506000600d548210159050600c54821061247357600c5491505b80801561248d5750601760009054906101000a900460ff16155b80156124e557507f0000000000000000000000003badcf2bee63295233c3ad6638a0a134845b3d5173ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156124fd5750601760019054906101000a900460ff165b1561250c5761250b826126e2565b5b600b60009054906101000a900460ff161561252b5761252a846129ce565b5b600060019050601260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125d25750601260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156125dc57600090505b6125e886868684612a40565b505050505050565b6000838311158290612638576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262f9190613dbe565b60405180910390fd5b5082840390509392505050565b6000806000612652612d51565b91509150612669818361208490919063ffffffff16565b9250505090565b6000818361267e91906149ac565b905092915050565b600080600080600080600080600061269d8a613004565b92509250925060008060006126bb8d86866126b6612645565b61305e565b9250925092508282828888889b509b509b509b509b509b5050505050505091939550919395565b6001601760006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111561271a57612719614a02565b5b6040519080825280602002602001820160405280156127485781602001602082028036833780820191505090505b50905030816000815181106127605761275f6143d9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612805573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128299190614a46565b8160018151811061283d5761283c6143d9565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506128a2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120a2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401612904959493929190614b6c565b600060405180830381600087803b15801561291e57600080fd5b505af1158015612932573d6000803e3d6000fd5b50505050600047905060008111156129ae57600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f193505050501580156129ac573d6000803e3d6000fd5b505b50506000601760006101000a81548160ff02191690831515021790555050565b6004546005819055506007546008819055507f0000000000000000000000003badcf2bee63295233c3ad6638a0a134845b3d5173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a3d57600a546008819055505b50565b80612a4e57612a4d6130e7565b5b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612af15750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612b0657612b01848484613124565b612d3d565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612ba95750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612bbe57612bb9848484613384565b612d3c565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612c625750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612c7757612c728484846135e4565b612d3b565b601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612d195750601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d2e57612d298484846137af565b612d3a565b612d398484846135e4565b5b5b5b5b80612d4b57612d4a613aa4565b5b50505050565b600080600060165490506000600354905060005b601480549050811015612fc75782600f600060148481548110612d8b57612d8a6143d9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541180612e795750816010600060148481548110612e1157612e106143d9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b15612e905760165460035494509450505050613000565b612f20600f600060148481548110612eab57612eaa6143d9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205484613ab890919063ffffffff16565b9250612fb26010600060148481548110612f3d57612f3c6143d9565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205483613ab890919063ffffffff16565b91508080612fbf9061449a565b915050612d65565b50612fdf60035460165461208490919063ffffffff16565b821015612ff757601654600354935093505050613000565b81819350935050505b9091565b60008060008061301385613ace565b9050600061302086613aff565b905060006130498261303b858a613ab890919063ffffffff16565b613ab890919063ffffffff16565b90508083839550955095505050509193909250565b6000806000806130778589613b3090919063ffffffff16565b9050600061308e8689613b3090919063ffffffff16565b905060006130a58789613b3090919063ffffffff16565b905060006130ce826130c08587613ab890919063ffffffff16565b613ab890919063ffffffff16565b9050838184965096509650505050509450945094915050565b60006005541480156130fb57506000600854145b61312257600554600681905550600854600981905550600060058190555060006008819055505b565b60008060008060008061313687612686565b95509550955095509550955061319487601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061322986600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506132be85600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061330a81613b46565b6133148483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516133719190613efe565b60405180910390a3505050505050505050565b60008060008060008061339687612686565b9550955095509550955095506133f486600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061348983601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061351e85600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061356a81613b46565b6135748483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef856040516135d19190613efe565b60405180910390a3505050505050505050565b6000806000806000806135f687612686565b95509550955095509550955061365486600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506136e985600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061373581613b46565b61373f8483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8560405161379c9190613efe565b60405180910390a3505050505050505050565b6000806000806000806137c187612686565b95509550955095509550955061381f87601060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506138b486600f60008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054613ab890919063ffffffff16565b600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061394983601060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b601060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506139de85600f60008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613a2a81613b46565b613a348483613ceb565b8773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef85604051613a919190613efe565b60405180910390a3505050505050505050565b600654600581905550600954600881905550565b60008183613ac69190614437565b905092915050565b6000613af86064613aea60055485613b3090919063ffffffff16565b61208490919063ffffffff16565b9050919050565b6000613b296064613b1b60085485613b3090919063ffffffff16565b61208490919063ffffffff16565b9050919050565b60008183613b3e9190614bc6565b905092915050565b6000613b50612645565b90506000613b678284613b3090919063ffffffff16565b9050613bbb81600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b600f60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550601360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613ce657613ca283601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461267090919063ffffffff16565b601060003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050565b613d0082601654613ab890919063ffffffff16565b601681905550613d1b8160155461267090919063ffffffff16565b6015819055505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d5f578082015181840152602081019050613d44565b83811115613d6e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613d9082613d25565b613d9a8185613d30565b9350613daa818560208601613d41565b613db381613d74565b840191505092915050565b60006020820190508181036000830152613dd88184613d85565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e1082613de5565b9050919050565b613e2081613e05565b8114613e2b57600080fd5b50565b600081359050613e3d81613e17565b92915050565b6000819050919050565b613e5681613e43565b8114613e6157600080fd5b50565b600081359050613e7381613e4d565b92915050565b60008060408385031215613e9057613e8f613de0565b5b6000613e9e85828601613e2e565b9250506020613eaf85828601613e64565b9150509250929050565b60008115159050919050565b613ece81613eb9565b82525050565b6000602082019050613ee96000830184613ec5565b92915050565b613ef881613e43565b82525050565b6000602082019050613f136000830184613eef565b92915050565b6000819050919050565b6000613f3e613f39613f3484613de5565b613f19565b613de5565b9050919050565b6000613f5082613f23565b9050919050565b6000613f6282613f45565b9050919050565b613f7281613f57565b82525050565b6000602082019050613f8d6000830184613f69565b92915050565b600060208284031215613fa957613fa8613de0565b5b6000613fb784828501613e64565b91505092915050565b6000613fcb82613de5565b9050919050565b613fdb81613fc0565b8114613fe657600080fd5b50565b600081359050613ff881613fd2565b92915050565b60006020828403121561401457614013613de0565b5b600061402284828501613fe9565b91505092915050565b60008060006060848603121561404457614043613de0565b5b600061405286828701613e2e565b935050602061406386828701613e2e565b925050604061407486828701613e64565b9150509250925092565b61408781613eb9565b811461409257600080fd5b50565b6000813590506140a48161407e565b92915050565b6000602082840312156140c0576140bf613de0565b5b60006140ce84828501614095565b91505092915050565b600060ff82169050919050565b6140ed816140d7565b82525050565b600060208201905061410860008301846140e4565b92915050565b60006020828403121561412457614123613de0565b5b600061413284828501613e2e565b91505092915050565b6000806040838503121561415257614151613de0565b5b600061416085828601613e64565b925050602061417185828601614095565b9150509250929050565b61418481613e05565b82525050565b600060208201905061419f600083018461417b565b92915050565b6141ae81613fc0565b82525050565b60006020820190506141c960008301846141a5565b92915050565b600080604083850312156141e6576141e5613de0565b5b60006141f485828601613e2e565b925050602061420585828601613e2e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061425657607f821691505b6020821081036142695761426861420f565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006142a5602083613d30565b91506142b08261426f565b602082019050919050565b600060208201905081810360008301526142d481614298565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614337602a83613d30565b9150614342826142db565b604082019050919050565b600060208201905081810360008301526143668161432a565b9050919050565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b60006143a3601b83613d30565b91506143ae8261436d565b602082019050919050565b600060208201905081810360008301526143d281614396565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061444282613e43565b915061444d83613e43565b9250828210156144605761445f614408565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60006144a582613e43565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036144d7576144d6614408565b5b600182019050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000614518601f83613d30565b9150614523826144e2565b602082019050919050565b600060208201905081810360008301526145478161450b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006145aa602683613d30565b91506145b58261454e565b604082019050919050565b600060208201905081810360008301526145d98161459d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061461a82613e43565b915061462583613e43565b925082614635576146346145e0565b5b828204905092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061469c602483613d30565b91506146a782614640565b604082019050919050565b600060208201905081810360008301526146cb8161468f565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061472e602283613d30565b9150614739826146d2565b604082019050919050565b6000602082019050818103600083015261475d81614721565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006147c0602583613d30565b91506147cb82614764565b604082019050919050565b600060208201905081810360008301526147ef816147b3565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614852602383613d30565b915061485d826147f6565b604082019050919050565b6000602082019050818103600083015261488181614845565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b60006148e4602983613d30565b91506148ef82614888565b604082019050919050565b60006020820190508181036000830152614913816148d7565b9050919050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b6000614976602883613d30565b91506149818261491a565b604082019050919050565b600060208201905081810360008301526149a581614969565b9050919050565b60006149b782613e43565b91506149c283613e43565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149f7576149f6614408565b5b828201905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050614a4081613e17565b92915050565b600060208284031215614a5c57614a5b613de0565b5b6000614a6a84828501614a31565b91505092915050565b6000819050919050565b6000614a98614a93614a8e84614a73565b613f19565b613e43565b9050919050565b614aa881614a7d565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b614ae381613e05565b82525050565b6000614af58383614ada565b60208301905092915050565b6000602082019050919050565b6000614b1982614aae565b614b238185614ab9565b9350614b2e83614aca565b8060005b83811015614b5f578151614b468882614ae9565b9750614b5183614b01565b925050600181019050614b32565b5085935050505092915050565b600060a082019050614b816000830188613eef565b614b8e6020830187614a9f565b8181036040830152614ba08186614b0e565b9050614baf606083018561417b565b614bbc6080830184613eef565b9695505050505050565b6000614bd182613e43565b9150614bdc83613e43565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614c1557614c14614408565b5b82820290509291505056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e2e6d3c203a9be36321ad27ad26eb633cfaa8458c5805ec75353755232ed78dc64736f6c634300080d0033
Deployed Bytecode Sourcemap
28660:17168:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31136:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32048:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33169:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30108:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31413:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45713:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45588:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29166:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32217:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45218:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33708:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31322:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34424:479;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32538:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29017:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34911:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33264:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30166:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33969:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38376:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45089:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31516:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20118:148;;;;;;;;;;;;;:::i;:::-;;29526:92;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29385:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33041:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19475:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31227;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29120:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30238:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44934:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29445:74;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32764:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31722:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29285:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29335;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28978:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44798:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45390:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31897:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35032:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;20418:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31136:83;31173:13;31206:5;31199:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31136:83;:::o;32048:161::-;32123:4;32140:39;32149:12;:10;:12::i;:::-;32163:7;32172:6;32140:8;:39::i;:::-;32197:4;32190:11;;32048:161;;;;:::o;33169:87::-;33211:7;33238:10;;33231:17;;33169:87;:::o;30108:51::-;;;:::o;31413:95::-;31466:7;31493;;31486:14;;31413:95;:::o;45713:112::-;19704:12;:10;:12::i;:::-;19693:23;;:7;:5;:7::i;:::-;:23;;;19685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45806:11:::1;45791:12;:26;;;;45713:112:::0;:::o;45588:117::-;19704:12;:10;:12::i;:::-;19693:23;;:7;:5;:7::i;:::-;:23;;;19685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45691:6:::1;45673:15;;:24;;;;;;;;;;;;;;;;;;45588:117:::0;:::o;29166:50::-;;;;:::o;32217:313::-;32315:4;32332:36;32342:6;32350:9;32361:6;32332:9;:36::i;:::-;32379:121;32388:6;32396:12;:10;:12::i;:::-;32410:89;32448:6;32410:89;;;;;;;;;;;;;;;;;:11;:19;32422:6;32410:19;;;;;;;;;;;;;;;:33;32430:12;:10;:12::i;:::-;32410:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;32379:8;:121::i;:::-;32518:4;32511:11;;32217:313;;;;;:::o;45218:164::-;19704:12;:10;:12::i;:::-;19693:23;;:7;:5;:7::i;:::-;:23;;;19685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45315:8:::1;45294:18;;:29;;;;;;;;;;;;;;;;;;45339:35;45365:8;45339:35;;;;;;:::i;:::-;;;;;;;;45218:164:::0;:::o;33708:253::-;33774:7;33813;;33802;:18;;33794:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33878:19;33901:10;:8;:10::i;:::-;33878:33;;33929:24;33941:11;33929:7;:11;;:24;;;;:::i;:::-;33922:31;;;33708:253;;;:::o;31322:83::-;31363:5;31388:9;;;;;;;;;;;31381:16;;31322:83;:::o;34424:479::-;19704:12;:10;:12::i;:::-;19693:23;;:7;:5;:7::i;:::-;:23;;;19685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34506:11:::1;:20;34518:7;34506:20;;;;;;;;;;;;;;;;;;;;;;;;;34498:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34574:9;34569:327;34593:9;:16;;;;34589:1;:20;34569:327;;;34651:7;34635:23;;:9;34645:1;34635:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;::::0;34631:254:::1;;34694:9;34723:1;34704:9;:16;;;;:20;;;;:::i;:::-;34694:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;34679:9;34689:1;34679:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;34763:1;34744:7;:16;34752:7;34744:16;;;;;;;;;;;;;;;:20;;;;34806:5;34783:11;:20;34795:7;34783:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;34830:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;34864:5;;34631:254;34611:3;;;;;:::i;:::-;;;;34569:327;;;;34424:479:::0;:::o;32538:218::-;32626:4;32643:83;32652:12;:10;:12::i;:::-;32666:7;32675:50;32714:10;32675:11;:25;32687:12;:10;:12::i;:::-;32675:25;;;;;;;;;;;;;;;:34;32701:7;32675:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32643:8;:83::i;:::-;32744:4;32737:11;;32538:218;;;;:::o;29017:38::-;;;;:::o;34911:113::-;19704:12;:10;:12::i;:::-;19693:23;;:7;:5;:7::i;:::-;:23;;;19685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35012:4:::1;34982:18;:27;35001:7;34982:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34911:113:::0;:::o;33264:436::-;33354:7;33393;;33382;:18;;33374:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33452:17;33447:246;;33487:15;33511:19;33522:7;33511:10;:19::i;:::-;33486:44;;;;;;;33552:7;33545:14;;;;;33447:246;33594:23;33625:19;33636:7;33625:10;:19::i;:::-;33592:52;;;;;;;33666:15;33659:22;;;33264:436;;;;;:::o;30166:38::-;;;:::o;33969:447::-;19704:12;:10;:12::i;:::-;19693:23;;:7;:5;:7::i;:::-;:23;;;19685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34166:11:::1;:20;34178:7;34166:20;;;;;;;;;;;;;;;;;;;;;;;;;34165:21;34157:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34251:1;34232:7;:16;34240:7;34232:16;;;;;;;;;;;;;;;;:20;34229:108;;;34288:37;34308:7;:16;34316:7;34308:16;;;;;;;;;;;;;;;;34288:19;:37::i;:::-;34269:7;:16;34277:7;34269:16;;;;;;;;;;;;;;;:56;;;;34229:108;34370:4;34347:11;:20;34359:7;34347:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34385:9;34400:7;34385:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33969:447:::0;:::o;38376:123::-;38440:4;38464:18;:27;38483:7;38464:27;;;;;;;;;;;;;;;;;;;;;;;;;38457:34;;38376:123;;;:::o;45089:121::-;19704:12;:10;:12::i;:::-;19693:23;;:7;:5;:7::i;:::-;:23;;;19685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45194:8:::1;45169:22;;:33;;;;;;;;;;;;;;;;;;45089:121:::0;:::o;31516:198::-;31582:7;31606:11;:20;31618:7;31606:20;;;;;;;;;;;;;;;;;;;;;;;;;31602:49;;;31635:7;:16;31643:7;31635:16;;;;;;;;;;;;;;;;31628:23;;;;31602:49;31669:37;31689:7;:16;31697:7;31689:16;;;;;;;;;;;;;;;;31669:19;:37::i;:::-;31662:44;;31516:198;;;;:::o;20118:148::-;19704:12;:10;:12::i;:::-;19693:23;;:7;:5;:7::i;:::-;:23;;;19685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20225:1:::1;20188:40;;20209:6;::::0;::::1;;;;;;;;20188:40;;;;;;;;;;;;20256:1;20239:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;20118:148::o:0;29526:92::-;;;;;;;;;;;;;:::o;29385:53::-;;;;:::o;33041:120::-;33109:4;33133:11;:20;33145:7;33133:20;;;;;;;;;;;;;;;;;;;;;;;;;33126:27;;33041:120;;;:::o;19475:87::-;19521:7;19548:6;;;;;;;;;;;19541:13;;19475:87;:::o;31227:::-;31266:13;31299:7;31292:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31227:87;:::o;29120:39::-;;;;:::o;30238:37::-;;;;;;;;;;;;;:::o;44934:147::-;19704:12;:10;:12::i;:::-;19693:23;;:7;:5;:7::i;:::-;:23;;;19685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45053:20:::1;45029:21;:44;;;;44934:147:::0;:::o;29445:74::-;;;;:::o;32764:269::-;32857:4;32874:129;32883:12;:10;:12::i;:::-;32897:7;32906:96;32945:15;32906:96;;;;;;;;;;;;;;;;;:11;:25;32918:12;:10;:12::i;:::-;32906:25;;;;;;;;;;;;;;;:34;32932:7;32906:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;32874:8;:129::i;:::-;33021:4;33014:11;;32764:269;;;;:::o;31722:167::-;31800:4;31817:42;31827:12;:10;:12::i;:::-;31841:9;31852:6;31817:9;:42::i;:::-;31877:4;31870:11;;31722:167;;;;:::o;29285:41::-;;;;:::o;29335:::-;;;;;;;;;;;;;:::o;28978:32::-;;;;:::o;44798:128::-;19704:12;:10;:12::i;:::-;19693:23;;:7;:5;:7::i;:::-;:23;;;19685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44906:12:::1;44884:19;:34;;;;44798:128:::0;:::o;45390:190::-;19704:12;:10;:12::i;:::-;19693:23;;:7;:5;:7::i;:::-;:23;;;19685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45540:32:::1;45506:31;:66;;;;45390:190:::0;:::o;31897:143::-;31978:7;32005:11;:18;32017:5;32005:18;;;;;;;;;;;;;;;:27;32024:7;32005:27;;;;;;;;;;;;;;;;31998:34;;31897:143;;;;:::o;35032:112::-;19704:12;:10;:12::i;:::-;19693:23;;:7;:5;:7::i;:::-;:23;;;19685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35131:5:::1;35101:18;:27;35120:7;35101:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;35032:112:::0;:::o;20418:244::-;19704:12;:10;:12::i;:::-;19693:23;;:7;:5;:7::i;:::-;:23;;;19685:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;20527:1:::1;20507:22;;:8;:22;;::::0;20499:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;20617:8;20588:38;;20609:6;::::0;::::1;;;;;;;;20588:38;;;;;;;;;;;;20646:8;20637:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;20418:244:::0;:::o;6674:98::-;6732:7;6763:1;6759;:5;;;;:::i;:::-;6752:12;;6674:98;;;;:::o;10314:::-;10367:7;10394:10;10387:17;;10314:98;:::o;38507:337::-;38617:1;38600:19;;:5;:19;;;38592:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38698:1;38679:21;;:7;:21;;;38671:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38782:6;38752:11;:18;38764:5;38752:18;;;;;;;;;;;;;;;:27;38771:7;38752:27;;;;;;;;;;;;;;;:36;;;;38820:7;38804:32;;38813:5;38804:32;;;38829:6;38804:32;;;;;;:::i;:::-;;;;;;;;38507:337;;;:::o;38852:1677::-;38990:1;38974:18;;:4;:18;;;38966:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39067:1;39053:16;;:2;:16;;;39045:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39137:1;39128:6;:10;39120:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39208:7;:5;:7::i;:::-;39200:15;;:4;:15;;;;:32;;;;;39225:7;:5;:7::i;:::-;39219:13;;:2;:13;;;;39200:32;39197:125;;;39265:12;;39255:6;:22;;39247:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;39197:125;39610:28;39641:24;39659:4;39641:9;:24::i;:::-;39610:55;;39676:24;39727:31;;39703:20;:55;;39676:82;;39798:12;;39774:20;:36;39771:112;;39859:12;;39836:35;;39771:112;39913:19;:50;;;;;39950:13;;;;;;;;;;;39949:14;39913:50;:88;;;;;39988:13;39980:21;;:4;:21;;;;39913:88;:123;;;;;40018:18;;;;;;;;;;;39913:123;39895:213;;;40063:33;40075:20;40063:11;:33::i;:::-;39895:213;40123:22;;;;;;;;;;;40120:65;;;40162:11;40170:2;40162:7;:11::i;:::-;40120:65;40258:12;40273:4;40258:19;;40377:18;:24;40396:4;40377:24;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;40405:18;:22;40424:2;40405:22;;;;;;;;;;;;;;;;;;;;;;;;;40377:50;40374:97;;;40454:5;40444:15;;40374:97;40483:38;40498:4;40503:2;40506:6;40513:7;40483:14;:38::i;:::-;38955:1574;;;38852:1677;;;:::o;7793:206::-;7879:7;7937:1;7932;:6;;7940:12;7924:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7979:1;7975;:5;7968:12;;7793:206;;;;;:::o;36943:163::-;36984:7;37005:15;37022;37041:19;:17;:19::i;:::-;37004:56;;;;37078:20;37090:7;37078;:11;;:20;;;;:::i;:::-;37071:27;;;;36943:163;:::o;5564:98::-;5622:7;5653:1;5649;:5;;;;:::i;:::-;5642:12;;5564:98;;;;:::o;35741:419::-;35800:7;35809;35818;35827;35836;35845;35866:23;35891:12;35905:18;35927:20;35939:7;35927:11;:20::i;:::-;35865:82;;;;;;35959:15;35976:23;36001:12;36017:50;36029:7;36038:4;36044:10;36056;:8;:10::i;:::-;36017:11;:50::i;:::-;35958:109;;;;;;36086:7;36095:15;36112:4;36118:15;36135:4;36141:10;36078:74;;;;;;;;;;;;;;;;;;35741:419;;;;;;;:::o;40791:794::-;30386:4;30370:13;;:20;;;;;;;;;;;;;;;;;;40933:21:::1;40971:1;40957:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40933:40;;41002:4;40984;40989:1;40984:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;41028:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41018:4;41023:1;41018:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;41063:71;41080:4;41095:15;41113:20;41063:8;:71::i;:::-;41173:15;:66;;;41254:20;41289:1;41333:4;41360;41380:15;41173:233;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41419:26;41448:21;41419:50;;41504:1;41483:18;:22;41480:98;;;41522:15;;;;;;;;;;;:24;;:44;41547:18;41522:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;41480:98;40862:723;;30429:5:::0;30413:13;;:21;;;;;;;;;;;;;;;;;;40791:794;:::o;40537:246::-;40602:13;;40592:7;:23;;;;40642:19;;40626:13;:35;;;;40689:13;40676:26;;:9;:26;;;40672:104;;40743:21;;40727:13;:37;;;;40672:104;40537:246;:::o;41666:818::-;41777:7;41773:40;;41799:14;:12;:14::i;:::-;41773:40;41830:11;:19;41842:6;41830:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;41854:11;:22;41866:9;41854:22;;;;;;;;;;;;;;;;;;;;;;;;;41853:23;41830:46;41826:597;;;41893:48;41915:6;41923:9;41934:6;41893:21;:48::i;:::-;41826:597;;;41964:11;:19;41976:6;41964:19;;;;;;;;;;;;;;;;;;;;;;;;;41963:20;:46;;;;;41987:11;:22;41999:9;41987:22;;;;;;;;;;;;;;;;;;;;;;;;;41963:46;41959:464;;;42026:46;42046:6;42054:9;42065:6;42026:19;:46::i;:::-;41959:464;;;42095:11;:19;42107:6;42095:19;;;;;;;;;;;;;;;;;;;;;;;;;42094:20;:47;;;;;42119:11;:22;42131:9;42119:22;;;;;;;;;;;;;;;;;;;;;;;;;42118:23;42094:47;42090:333;;;42158:44;42176:6;42184:9;42195:6;42158:17;:44::i;:::-;42090:333;;;42224:11;:19;42236:6;42224:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;42247:11;:22;42259:9;42247:22;;;;;;;;;;;;;;;;;;;;;;;;;42224:45;42220:203;;;42286:48;42308:6;42316:9;42327:6;42286:21;:48::i;:::-;42220:203;;;42367:44;42385:6;42393:9;42404:6;42367:17;:44::i;:::-;42220:203;42090:333;41959:464;41826:597;42439:7;42435:41;;42461:15;:13;:15::i;:::-;42435:41;41666:818;;;;:::o;37114:555::-;37164:7;37173;37193:15;37211:7;;37193:25;;37229:15;37247:7;;37229:25;;37270:9;37265:289;37289:9;:16;;;;37285:1;:20;37265:289;;;37355:7;37331;:21;37339:9;37349:1;37339:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37331:21;;;;;;;;;;;;;;;;:31;:66;;;;37390:7;37366;:21;37374:9;37384:1;37374:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37366:21;;;;;;;;;;;;;;;;:31;37331:66;37327:97;;;37407:7;;37416;;37399:25;;;;;;;;;37327:97;37449:34;37461:7;:21;37469:9;37479:1;37469:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37461:21;;;;;;;;;;;;;;;;37449:7;:11;;:34;;;;:::i;:::-;37439:44;;37508:34;37520:7;:21;37528:9;37538:1;37528:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37520:21;;;;;;;;;;;;;;;;37508:7;:11;;:34;;;;:::i;:::-;37498:44;;37307:3;;;;;:::i;:::-;;;;37265:289;;;;37578:20;37590:7;;37578;;:11;;:20;;;;:::i;:::-;37568:7;:30;37564:61;;;37608:7;;37617;;37600:25;;;;;;;;37564:61;37644:7;37653;37636:25;;;;;;37114:555;;;:::o;36168:330::-;36228:7;36237;36246;36266:12;36281:24;36297:7;36281:15;:24::i;:::-;36266:39;;36316:18;36337:30;36359:7;36337:21;:30::i;:::-;36316:51;;36378:23;36404:33;36426:10;36404:17;36416:4;36404:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36378:59;;36456:15;36473:4;36479:10;36448:42;;;;;;;;;36168:330;;;;;:::o;36506:429::-;36621:7;36630;36639;36659:15;36677:24;36689:11;36677:7;:11;;:24;;;;:::i;:::-;36659:42;;36712:12;36727:21;36736:11;36727:4;:8;;:21;;;;:::i;:::-;36712:36;;36759:18;36780:27;36795:11;36780:10;:14;;:27;;;;:::i;:::-;36759:48;;36818:23;36844:33;36866:10;36844:17;36856:4;36844:7;:11;;:17;;;;:::i;:::-;:21;;:33;;;;:::i;:::-;36818:59;;36896:7;36905:15;36922:4;36888:39;;;;;;;;;;36506:429;;;;;;;;:::o;35152:234::-;35209:1;35198:7;;:12;:34;;;;;35231:1;35214:13;;:18;35198:34;35234:7;35195:46;35271:7;;35253:15;:25;;;;35313:13;;35289:21;:37;;;;35349:1;35339:7;:11;;;;35377:1;35361:13;:17;;;;35152:234;:::o;43585:563::-;43688:15;43705:23;43730:12;43744:23;43769:12;43783:18;43805:19;43816:7;43805:10;:19::i;:::-;43687:137;;;;;;;;;;;;43853:28;43873:7;43853;:15;43861:6;43853:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43835:7;:15;43843:6;43835:15;;;;;;;;;;;;;;;:46;;;;43910:28;43930:7;43910;:15;43918:6;43910:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43892:7;:15;43900:6;43892:15;;;;;;;;;;;;;;;:46;;;;43970:39;43993:15;43970:7;:18;43978:9;43970:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43949:7;:18;43957:9;43949:18;;;;;;;;;;;;;;;:60;;;;44020:26;44035:10;44020:14;:26::i;:::-;44057:23;44069:4;44075;44057:11;:23::i;:::-;44113:9;44096:44;;44105:6;44096:44;;;44124:15;44096:44;;;;;;:::i;:::-;;;;;;;;43676:472;;;;;;43585:563;;;:::o;43002:575::-;43103:15;43120:23;43145:12;43159:23;43184:12;43198:18;43220:19;43231:7;43220:10;:19::i;:::-;43102:137;;;;;;;;;;;;43268:28;43288:7;43268;:15;43276:6;43268:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;43250:7;:15;43258:6;43250:15;;;;;;;;;;;;;;;:46;;;;43328:39;43351:15;43328:7;:18;43336:9;43328:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43307:7;:18;43315:9;43307:18;;;;;;;;;;;;;;;:60;;;;43399:39;43422:15;43399:7;:18;43407:9;43399:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;43378:7;:18;43386:9;43378:18;;;;;;;;;;;;;;;:60;;;;43449:26;43464:10;43449:14;:26::i;:::-;43486:23;43498:4;43504;43486:11;:23::i;:::-;43542:9;43525:44;;43534:6;43525:44;;;43553:15;43525:44;;;;;;:::i;:::-;;;;;;;;43091:486;;;;;;43002:575;;;:::o;42492:502::-;42591:15;42608:23;42633:12;42647:23;42672:12;42686:18;42708:19;42719:7;42708:10;:19::i;:::-;42590:137;;;;;;;;;;;;42756:28;42776:7;42756;:15;42764:6;42756:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;42738:7;:15;42746:6;42738:15;;;;;;;;;;;;;;;:46;;;;42816:39;42839:15;42816:7;:18;42824:9;42816:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;42795:7;:18;42803:9;42795:18;;;;;;;;;;;;;;;:60;;;;42866:26;42881:10;42866:14;:26::i;:::-;42903:23;42915:4;42921;42903:11;:23::i;:::-;42959:9;42942:44;;42951:6;42942:44;;;42970:15;42942:44;;;;;;:::i;:::-;;;;;;;;42579:415;;;;;;42492:502;;;:::o;44156:634::-;44259:15;44276:23;44301:12;44315:23;44340:12;44354:18;44376:19;44387:7;44376:10;:19::i;:::-;44258:137;;;;;;;;;;;;44424:28;44444:7;44424;:15;44432:6;44424:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44406:7;:15;44414:6;44406:15;;;;;;;;;;;;;;;:46;;;;44481:28;44501:7;44481;:15;44489:6;44481:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44463:7;:15;44471:6;44463:15;;;;;;;;;;;;;;;:46;;;;44541:39;44564:15;44541:7;:18;44549:9;44541:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44520:7;:18;44528:9;44520:18;;;;;;;;;;;;;;;:60;;;;44612:39;44635:15;44612:7;:18;44620:9;44612:18;;;;;;;;;;;;;;;;:22;;:39;;;;:::i;:::-;44591:7;:18;44599:9;44591:18;;;;;;;;;;;;;;;:60;;;;44662:26;44677:10;44662:14;:26::i;:::-;44699:23;44711:4;44717;44699:11;:23::i;:::-;44755:9;44738:44;;44747:6;44738:44;;;44766:15;44738:44;;;;;;:::i;:::-;;;;;;;;44247:543;;;;;;44156:634;;;:::o;35394:125::-;35448:15;;35438:7;:25;;;;35490:21;;35474:13;:37;;;;35394:125::o;5936:98::-;5994:7;6025:1;6021;:5;;;;:::i;:::-;6014:12;;5936:98;;;;:::o;38040:154::-;38104:7;38131:55;38170:5;38131:20;38143:7;;38131;:11;;:20;;;;:::i;:::-;:24;;:55;;;;:::i;:::-;38124:62;;38040:154;;;:::o;38202:166::-;38272:7;38299:61;38344:5;38299:26;38311:13;;38299:7;:11;;:26;;;;:::i;:::-;:30;;:61;;;;:::i;:::-;38292:68;;38202:166;;;:::o;6284:98::-;6342:7;6373:1;6369;:5;;;;:::i;:::-;6362:12;;6284:98;;;;:::o;37677:355::-;37740:19;37763:10;:8;:10::i;:::-;37740:33;;37784:18;37805:27;37820:11;37805:10;:14;;:27;;;;:::i;:::-;37784:48;;37868:38;37895:10;37868:7;:22;37884:4;37868:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37843:7;:22;37859:4;37843:22;;;;;;;;;;;;;;;:63;;;;37920:11;:26;37940:4;37920:26;;;;;;;;;;;;;;;;;;;;;;;;;37917:107;;;37986:38;38013:10;37986:7;:22;38002:4;37986:22;;;;;;;;;;;;;;;;:26;;:38;;;;:::i;:::-;37961:7;:22;37977:4;37961:22;;;;;;;;;;;;;;;:63;;;;37917:107;37729:303;;37677:355;:::o;35586:147::-;35664:17;35676:4;35664:7;;:11;;:17;;;;:::i;:::-;35654:7;:27;;;;35705:20;35720:4;35705:10;;:14;;:20;;;;:::i;:::-;35692:10;:33;;;;35586:147;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:60::-;3874:3;3895:5;3888:12;;3846:60;;;:::o;3912:142::-;3962:9;3995:53;4013:34;4022:24;4040:5;4022:24;:::i;:::-;4013:34;:::i;:::-;3995:53;:::i;:::-;3982:66;;3912:142;;;:::o;4060:126::-;4110:9;4143:37;4174:5;4143:37;:::i;:::-;4130:50;;4060:126;;;:::o;4192:153::-;4269:9;4302:37;4333:5;4302:37;:::i;:::-;4289:50;;4192:153;;;:::o;4351:185::-;4465:64;4523:5;4465:64;:::i;:::-;4460:3;4453:77;4351:185;;:::o;4542:276::-;4662:4;4700:2;4689:9;4685:18;4677:26;;4713:98;4808:1;4797:9;4793:17;4784:6;4713:98;:::i;:::-;4542:276;;;;:::o;4824:329::-;4883:6;4932:2;4920:9;4911:7;4907:23;4903:32;4900:119;;;4938:79;;:::i;:::-;4900:119;5058:1;5083:53;5128:7;5119:6;5108:9;5104:22;5083:53;:::i;:::-;5073:63;;5029:117;4824:329;;;;:::o;5159:104::-;5204:7;5233:24;5251:5;5233:24;:::i;:::-;5222:35;;5159:104;;;:::o;5269:138::-;5350:32;5376:5;5350:32;:::i;:::-;5343:5;5340:43;5330:71;;5397:1;5394;5387:12;5330:71;5269:138;:::o;5413:155::-;5467:5;5505:6;5492:20;5483:29;;5521:41;5556:5;5521:41;:::i;:::-;5413:155;;;;:::o;5574:345::-;5641:6;5690:2;5678:9;5669:7;5665:23;5661:32;5658:119;;;5696:79;;:::i;:::-;5658:119;5816:1;5841:61;5894:7;5885:6;5874:9;5870:22;5841:61;:::i;:::-;5831:71;;5787:125;5574:345;;;;:::o;5925:619::-;6002:6;6010;6018;6067:2;6055:9;6046:7;6042:23;6038:32;6035:119;;;6073:79;;:::i;:::-;6035:119;6193:1;6218:53;6263:7;6254:6;6243:9;6239:22;6218:53;:::i;:::-;6208:63;;6164:117;6320:2;6346:53;6391:7;6382:6;6371:9;6367:22;6346:53;:::i;:::-;6336:63;;6291:118;6448:2;6474:53;6519:7;6510:6;6499:9;6495:22;6474:53;:::i;:::-;6464:63;;6419:118;5925:619;;;;;:::o;6550:116::-;6620:21;6635:5;6620:21;:::i;:::-;6613:5;6610:32;6600:60;;6656:1;6653;6646:12;6600:60;6550:116;:::o;6672:133::-;6715:5;6753:6;6740:20;6731:29;;6769:30;6793:5;6769:30;:::i;:::-;6672:133;;;;:::o;6811:323::-;6867:6;6916:2;6904:9;6895:7;6891:23;6887:32;6884:119;;;6922:79;;:::i;:::-;6884:119;7042:1;7067:50;7109:7;7100:6;7089:9;7085:22;7067:50;:::i;:::-;7057:60;;7013:114;6811:323;;;;:::o;7140:86::-;7175:7;7215:4;7208:5;7204:16;7193:27;;7140:86;;;:::o;7232:112::-;7315:22;7331:5;7315:22;:::i;:::-;7310:3;7303:35;7232:112;;:::o;7350:214::-;7439:4;7477:2;7466:9;7462:18;7454:26;;7490:67;7554:1;7543:9;7539:17;7530:6;7490:67;:::i;:::-;7350:214;;;;:::o;7570:329::-;7629:6;7678:2;7666:9;7657:7;7653:23;7649:32;7646:119;;;7684:79;;:::i;:::-;7646:119;7804:1;7829:53;7874:7;7865:6;7854:9;7850:22;7829:53;:::i;:::-;7819:63;;7775:117;7570:329;;;;:::o;7905:468::-;7970:6;7978;8027:2;8015:9;8006:7;8002:23;7998:32;7995:119;;;8033:79;;:::i;:::-;7995:119;8153:1;8178:53;8223:7;8214:6;8203:9;8199:22;8178:53;:::i;:::-;8168:63;;8124:117;8280:2;8306:50;8348:7;8339:6;8328:9;8324:22;8306:50;:::i;:::-;8296:60;;8251:115;7905:468;;;;;:::o;8379:118::-;8466:24;8484:5;8466:24;:::i;:::-;8461:3;8454:37;8379:118;;:::o;8503:222::-;8596:4;8634:2;8623:9;8619:18;8611:26;;8647:71;8715:1;8704:9;8700:17;8691:6;8647:71;:::i;:::-;8503:222;;;;:::o;8731:142::-;8834:32;8860:5;8834:32;:::i;:::-;8829:3;8822:45;8731:142;;:::o;8879:254::-;8988:4;9026:2;9015:9;9011:18;9003:26;;9039:87;9123:1;9112:9;9108:17;9099:6;9039:87;:::i;:::-;8879:254;;;;:::o;9139:474::-;9207:6;9215;9264:2;9252:9;9243:7;9239:23;9235:32;9232:119;;;9270:79;;:::i;:::-;9232:119;9390:1;9415:53;9460:7;9451:6;9440:9;9436:22;9415:53;:::i;:::-;9405:63;;9361:117;9517:2;9543:53;9588:7;9579:6;9568:9;9564:22;9543:53;:::i;:::-;9533:63;;9488:118;9139:474;;;;;:::o;9619:180::-;9667:77;9664:1;9657:88;9764:4;9761:1;9754:15;9788:4;9785:1;9778:15;9805:320;9849:6;9886:1;9880:4;9876:12;9866:22;;9933:1;9927:4;9923:12;9954:18;9944:81;;10010:4;10002:6;9998:17;9988:27;;9944:81;10072:2;10064:6;10061:14;10041:18;10038:38;10035:84;;10091:18;;:::i;:::-;10035:84;9856:269;9805:320;;;:::o;10131:182::-;10271:34;10267:1;10259:6;10255:14;10248:58;10131:182;:::o;10319:366::-;10461:3;10482:67;10546:2;10541:3;10482:67;:::i;:::-;10475:74;;10558:93;10647:3;10558:93;:::i;:::-;10676:2;10671:3;10667:12;10660:19;;10319:366;;;:::o;10691:419::-;10857:4;10895:2;10884:9;10880:18;10872:26;;10944:9;10938:4;10934:20;10930:1;10919:9;10915:17;10908:47;10972:131;11098:4;10972:131;:::i;:::-;10964:139;;10691:419;;;:::o;11116:229::-;11256:34;11252:1;11244:6;11240:14;11233:58;11325:12;11320:2;11312:6;11308:15;11301:37;11116:229;:::o;11351:366::-;11493:3;11514:67;11578:2;11573:3;11514:67;:::i;:::-;11507:74;;11590:93;11679:3;11590:93;:::i;:::-;11708:2;11703:3;11699:12;11692:19;;11351:366;;;:::o;11723:419::-;11889:4;11927:2;11916:9;11912:18;11904:26;;11976:9;11970:4;11966:20;11962:1;11951:9;11947:17;11940:47;12004:131;12130:4;12004:131;:::i;:::-;11996:139;;11723:419;;;:::o;12148:177::-;12288:29;12284:1;12276:6;12272:14;12265:53;12148:177;:::o;12331:366::-;12473:3;12494:67;12558:2;12553:3;12494:67;:::i;:::-;12487:74;;12570:93;12659:3;12570:93;:::i;:::-;12688:2;12683:3;12679:12;12672:19;;12331:366;;;:::o;12703:419::-;12869:4;12907:2;12896:9;12892:18;12884:26;;12956:9;12950:4;12946:20;12942:1;12931:9;12927:17;12920:47;12984:131;13110:4;12984:131;:::i;:::-;12976:139;;12703:419;;;:::o;13128:180::-;13176:77;13173:1;13166:88;13273:4;13270:1;13263:15;13297:4;13294:1;13287:15;13314:180;13362:77;13359:1;13352:88;13459:4;13456:1;13449:15;13483:4;13480:1;13473:15;13500:191;13540:4;13560:20;13578:1;13560:20;:::i;:::-;13555:25;;13594:20;13612:1;13594:20;:::i;:::-;13589:25;;13633:1;13630;13627:8;13624:34;;;13638:18;;:::i;:::-;13624:34;13683:1;13680;13676:9;13668:17;;13500:191;;;;:::o;13697:180::-;13745:77;13742:1;13735:88;13842:4;13839:1;13832:15;13866:4;13863:1;13856:15;13883:233;13922:3;13945:24;13963:5;13945:24;:::i;:::-;13936:33;;13991:66;13984:5;13981:77;13978:103;;14061:18;;:::i;:::-;13978:103;14108:1;14101:5;14097:13;14090:20;;13883:233;;;:::o;14122:181::-;14262:33;14258:1;14250:6;14246:14;14239:57;14122:181;:::o;14309:366::-;14451:3;14472:67;14536:2;14531:3;14472:67;:::i;:::-;14465:74;;14548:93;14637:3;14548:93;:::i;:::-;14666:2;14661:3;14657:12;14650:19;;14309:366;;;:::o;14681:419::-;14847:4;14885:2;14874:9;14870:18;14862:26;;14934:9;14928:4;14924:20;14920:1;14909:9;14905:17;14898:47;14962:131;15088:4;14962:131;:::i;:::-;14954:139;;14681:419;;;:::o;15106:225::-;15246:34;15242:1;15234:6;15230:14;15223:58;15315:8;15310:2;15302:6;15298:15;15291:33;15106:225;:::o;15337:366::-;15479:3;15500:67;15564:2;15559:3;15500:67;:::i;:::-;15493:74;;15576:93;15665:3;15576:93;:::i;:::-;15694:2;15689:3;15685:12;15678:19;;15337:366;;;:::o;15709:419::-;15875:4;15913:2;15902:9;15898:18;15890:26;;15962:9;15956:4;15952:20;15948:1;15937:9;15933:17;15926:47;15990:131;16116:4;15990:131;:::i;:::-;15982:139;;15709:419;;;:::o;16134:180::-;16182:77;16179:1;16172:88;16279:4;16276:1;16269:15;16303:4;16300:1;16293:15;16320:185;16360:1;16377:20;16395:1;16377:20;:::i;:::-;16372:25;;16411:20;16429:1;16411:20;:::i;:::-;16406:25;;16450:1;16440:35;;16455:18;;:::i;:::-;16440:35;16497:1;16494;16490:9;16485:14;;16320:185;;;;:::o;16511:223::-;16651:34;16647:1;16639:6;16635:14;16628:58;16720:6;16715:2;16707:6;16703:15;16696:31;16511:223;:::o;16740:366::-;16882:3;16903:67;16967:2;16962:3;16903:67;:::i;:::-;16896:74;;16979:93;17068:3;16979:93;:::i;:::-;17097:2;17092:3;17088:12;17081:19;;16740:366;;;:::o;17112:419::-;17278:4;17316:2;17305:9;17301:18;17293:26;;17365:9;17359:4;17355:20;17351:1;17340:9;17336:17;17329:47;17393:131;17519:4;17393:131;:::i;:::-;17385:139;;17112:419;;;:::o;17537:221::-;17677:34;17673:1;17665:6;17661:14;17654:58;17746:4;17741:2;17733:6;17729:15;17722:29;17537:221;:::o;17764:366::-;17906:3;17927:67;17991:2;17986:3;17927:67;:::i;:::-;17920:74;;18003:93;18092:3;18003:93;:::i;:::-;18121:2;18116:3;18112:12;18105:19;;17764:366;;;:::o;18136:419::-;18302:4;18340:2;18329:9;18325:18;18317:26;;18389:9;18383:4;18379:20;18375:1;18364:9;18360:17;18353:47;18417:131;18543:4;18417:131;:::i;:::-;18409:139;;18136:419;;;:::o;18561:224::-;18701:34;18697:1;18689:6;18685:14;18678:58;18770:7;18765:2;18757:6;18753:15;18746:32;18561:224;:::o;18791:366::-;18933:3;18954:67;19018:2;19013:3;18954:67;:::i;:::-;18947:74;;19030:93;19119:3;19030:93;:::i;:::-;19148:2;19143:3;19139:12;19132:19;;18791:366;;;:::o;19163:419::-;19329:4;19367:2;19356:9;19352:18;19344:26;;19416:9;19410:4;19406:20;19402:1;19391:9;19387:17;19380:47;19444:131;19570:4;19444:131;:::i;:::-;19436:139;;19163:419;;;:::o;19588:222::-;19728:34;19724:1;19716:6;19712:14;19705:58;19797:5;19792:2;19784:6;19780:15;19773:30;19588:222;:::o;19816:366::-;19958:3;19979:67;20043:2;20038:3;19979:67;:::i;:::-;19972:74;;20055:93;20144:3;20055:93;:::i;:::-;20173:2;20168:3;20164:12;20157:19;;19816:366;;;:::o;20188:419::-;20354:4;20392:2;20381:9;20377:18;20369:26;;20441:9;20435:4;20431:20;20427:1;20416:9;20412:17;20405:47;20469:131;20595:4;20469:131;:::i;:::-;20461:139;;20188:419;;;:::o;20613:228::-;20753:34;20749:1;20741:6;20737:14;20730:58;20822:11;20817:2;20809:6;20805:15;20798:36;20613:228;:::o;20847:366::-;20989:3;21010:67;21074:2;21069:3;21010:67;:::i;:::-;21003:74;;21086:93;21175:3;21086:93;:::i;:::-;21204:2;21199:3;21195:12;21188:19;;20847:366;;;:::o;21219:419::-;21385:4;21423:2;21412:9;21408:18;21400:26;;21472:9;21466:4;21462:20;21458:1;21447:9;21443:17;21436:47;21500:131;21626:4;21500:131;:::i;:::-;21492:139;;21219:419;;;:::o;21644:227::-;21784:34;21780:1;21772:6;21768:14;21761:58;21853:10;21848:2;21840:6;21836:15;21829:35;21644:227;:::o;21877:366::-;22019:3;22040:67;22104:2;22099:3;22040:67;:::i;:::-;22033:74;;22116:93;22205:3;22116:93;:::i;:::-;22234:2;22229:3;22225:12;22218:19;;21877:366;;;:::o;22249:419::-;22415:4;22453:2;22442:9;22438:18;22430:26;;22502:9;22496:4;22492:20;22488:1;22477:9;22473:17;22466:47;22530:131;22656:4;22530:131;:::i;:::-;22522:139;;22249:419;;;:::o;22674:305::-;22714:3;22733:20;22751:1;22733:20;:::i;:::-;22728:25;;22767:20;22785:1;22767:20;:::i;:::-;22762:25;;22921:1;22853:66;22849:74;22846:1;22843:81;22840:107;;;22927:18;;:::i;:::-;22840:107;22971:1;22968;22964:9;22957:16;;22674:305;;;;:::o;22985:180::-;23033:77;23030:1;23023:88;23130:4;23127:1;23120:15;23154:4;23151:1;23144:15;23171:143;23228:5;23259:6;23253:13;23244:22;;23275:33;23302:5;23275:33;:::i;:::-;23171:143;;;;:::o;23320:351::-;23390:6;23439:2;23427:9;23418:7;23414:23;23410:32;23407:119;;;23445:79;;:::i;:::-;23407:119;23565:1;23590:64;23646:7;23637:6;23626:9;23622:22;23590:64;:::i;:::-;23580:74;;23536:128;23320:351;;;;:::o;23677:85::-;23722:7;23751:5;23740:16;;23677:85;;;:::o;23768:158::-;23826:9;23859:61;23877:42;23886:32;23912:5;23886:32;:::i;:::-;23877:42;:::i;:::-;23859:61;:::i;:::-;23846:74;;23768:158;;;:::o;23932:147::-;24027:45;24066:5;24027:45;:::i;:::-;24022:3;24015:58;23932:147;;:::o;24085:114::-;24152:6;24186:5;24180:12;24170:22;;24085:114;;;:::o;24205:184::-;24304:11;24338:6;24333:3;24326:19;24378:4;24373:3;24369:14;24354:29;;24205:184;;;;:::o;24395:132::-;24462:4;24485:3;24477:11;;24515:4;24510:3;24506:14;24498:22;;24395:132;;;:::o;24533:108::-;24610:24;24628:5;24610:24;:::i;:::-;24605:3;24598:37;24533:108;;:::o;24647:179::-;24716:10;24737:46;24779:3;24771:6;24737:46;:::i;:::-;24815:4;24810:3;24806:14;24792:28;;24647:179;;;;:::o;24832:113::-;24902:4;24934;24929:3;24925:14;24917:22;;24832:113;;;:::o;24981:732::-;25100:3;25129:54;25177:5;25129:54;:::i;:::-;25199:86;25278:6;25273:3;25199:86;:::i;:::-;25192:93;;25309:56;25359:5;25309:56;:::i;:::-;25388:7;25419:1;25404:284;25429:6;25426:1;25423:13;25404:284;;;25505:6;25499:13;25532:63;25591:3;25576:13;25532:63;:::i;:::-;25525:70;;25618:60;25671:6;25618:60;:::i;:::-;25608:70;;25464:224;25451:1;25448;25444:9;25439:14;;25404:284;;;25408:14;25704:3;25697:10;;25105:608;;;24981:732;;;;:::o;25719:831::-;25982:4;26020:3;26009:9;26005:19;25997:27;;26034:71;26102:1;26091:9;26087:17;26078:6;26034:71;:::i;:::-;26115:80;26191:2;26180:9;26176:18;26167:6;26115:80;:::i;:::-;26242:9;26236:4;26232:20;26227:2;26216:9;26212:18;26205:48;26270:108;26373:4;26364:6;26270:108;:::i;:::-;26262:116;;26388:72;26456:2;26445:9;26441:18;26432:6;26388:72;:::i;:::-;26470:73;26538:3;26527:9;26523:19;26514:6;26470:73;:::i;:::-;25719:831;;;;;;;;:::o;26556:348::-;26596:7;26619:20;26637:1;26619:20;:::i;:::-;26614:25;;26653:20;26671:1;26653:20;:::i;:::-;26648:25;;26841:1;26773:66;26769:74;26766:1;26763:81;26758:1;26751:9;26744:17;26740:105;26737:131;;;26848:18;;:::i;:::-;26737:131;26896:1;26893;26889:9;26878:20;;26556:348;;;;:::o
Swarm Source
ipfs://e2e6d3c203a9be36321ad27ad26eb633cfaa8458c5805ec75353755232ed78dc
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 25 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.