Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
100,000,000,000 SHUKYO
Holders
75
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 9 Decimals)
Balance
37,553,941,339.680438437 SHUKYOValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SHUKYO
Compiler Version
v0.8.14+commit.80d49f37
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-21 */ //Telegram:http://t.me/SHUKYOPORTAL //Website:https://www.shukyo.online/ //Twitter:https://twitter.com/ShukyoEth //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. //Faithless is he that says farewell when the road darkens. pragma solidity ^0.8.14; // SPDX-License-Identifier: Unlicensed interface IERC20 { function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @dev Wrappers over Solidity's arithmetic operations with added overflow * checks. * * Arithmetic operations in Solidity wrap on overflow. This can easily result * in bugs, because programmers usually assume that an overflow raises an * error, which is the standard behavior in high level programming languages. * `SafeMath` restores this intuition by reverting the transaction when an * operation overflows. * * Using this library instead of the unchecked operations eliminates an entire * class of bugs, so it's recommended to use it always. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } abstract contract Context { function _msgSender() internal view virtual returns (address payable) { return payable(msg.sender); } function _msgData() internal view virtual returns (bytes memory) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // According to EIP-1052, 0x0 is the value returned for not-yet created accounts // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned // for accounts without code, i.e. `keccak256('')` bytes32 codehash; bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470; // solhint-disable-next-line no-inline-assembly assembly { codehash := extcodehash(account) } return (codehash != accountHash && codehash != 0x0); } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain`call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return _functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); return _functionCallWithValue(target, data, value, errorMessage); } function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) { require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.call{ value: weiValue }(data); if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ contract Ownable is Context { address private _owner; address private _previousOwner; uint256 private _lockTime; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() public view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // pragma solidity >=0.5.0; interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } // pragma solidity >=0.5.0; interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } // pragma solidity >=0.6.2; interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } // pragma solidity >=0.6.2; interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract SHUKYO is Context, IERC20, Ownable { using SafeMath for uint256; using Address for address; struct RValuesStruct { uint256 rAmount; uint256 rTransferAmount; uint256 rReflectionFee; uint256 rBurnFee; uint256 rmarketingTokenFee; uint256 rMarketingETHFee; } struct TValuesStruct { uint256 tTransferAmount; uint256 tReflectionFee; uint256 tBurnFee; uint256 tmarketingTokenFee; uint256 tMarketingETHFee; } struct ValuesStruct { uint256 rAmount; uint256 rTransferAmount; uint256 rReflectionFee; uint256 rBurnFee; uint256 rmarketingTokenFee; uint256 rMarketingETHFee; uint256 tTransferAmount; uint256 tReflectionFee; uint256 tBurnFee; uint256 tmarketingTokenFee; uint256 tMarketingETHFee; } mapping (address => uint256) private _rOwned; mapping (address => uint256) private _tOwned; mapping (address => mapping (address => uint256)) private _allowances; mapping (address => bool) private _isExcludedFromFee; mapping (address => bool) private _isExcluded; address[] private _excluded; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 100 * 10**9 * 10**9; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 private _tReflectionFeeTotal; uint256 private _tBurnFeeTotal; string private _name = "SHUKYO"; string private _symbol = "SHUKYO"; uint8 private _decimals = 9; uint256 public _reflectionFee = 0; uint256 public _burnFee = 0; uint256 public _marketingTokenFee = 0; uint256 public _marketingETHFee = 5; address public marketingTokenFeeWallet = 0xa0e804f9C4f53922151091a9b3D71252d5C055EE; address public marketingETHFeeWallet = 0xa0e804f9C4f53922151091a9b3D71252d5C055EE; IUniswapV2Router02 public immutable uniswapV2Router; address public immutable uniswapV2Pair; bool inMarketingEthSwap = false; bool public _marketingConverttoETH = true; bool public _tradingEnabled = false; uint256 public _maxTxAmount = 1000 * 10**6 * 10**9; uint256 private _numTokensSwapToETHForMarketing = 200 * 10**6 * 10**9; event MinTokensBeforeSwapUpdated(uint256 minTokensBeforeSwap); modifier lockTheSwap { inMarketingEthSwap = true; _; inMarketingEthSwap = false; } constructor () { _rOwned[_msgSender()] = _rTotal; IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); // Uniswap V2 // 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 totalReflectionFees() public view returns (uint256) { return _tReflectionFeeTotal; } function totalBurnFees() public view returns (uint256) { return _tBurnFeeTotal; } /** * @dev Returns the Number of tokens in contract that are needed to be reached before swapping to ETH and sending to Marketing Wallet. . */ function numTokensSwapToETHForMarketing() public view returns (uint256) { return _numTokensSwapToETHForMarketing; } 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).rAmount; return rAmount; } else { uint256 rTransferAmount = _getValues(tAmount).rTransferAmount; 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 already excluded"); require(_excluded.length < 100, "Excluded list is too long"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } //to recieve ETH from uniswapV2Router when swaping receive() external payable {} function _distributeFee(uint256 rReflectionFee, uint256 rBurnFee, uint256 rmarketingTokenFee, uint256 tReflectionFee, uint256 tBurnFee, uint256 tmarketingTokenFee) private { _rTotal = _rTotal.sub(rReflectionFee).sub(rBurnFee); _tReflectionFeeTotal = _tReflectionFeeTotal.add(tReflectionFee); _tTotal = _tTotal.sub(tBurnFee); _tBurnFeeTotal = _tBurnFeeTotal.add(tBurnFee); _rOwned[marketingTokenFeeWallet] = _rOwned[marketingTokenFeeWallet].add(rmarketingTokenFee); if (_isExcluded[marketingTokenFeeWallet]) { _tOwned[marketingTokenFeeWallet] = _tOwned[marketingTokenFeeWallet].add(tmarketingTokenFee); } } function _getValues(uint256 tAmount) private view returns (ValuesStruct memory) { TValuesStruct memory tvs = _getTValues(tAmount); RValuesStruct memory rvs = _getRValues(tAmount, tvs.tReflectionFee, tvs.tBurnFee, tvs.tmarketingTokenFee, tvs.tMarketingETHFee, _getRate()); return ValuesStruct( rvs.rAmount, rvs.rTransferAmount, rvs.rReflectionFee, rvs.rBurnFee, rvs.rmarketingTokenFee, rvs.rMarketingETHFee, tvs.tTransferAmount, tvs.tReflectionFee, tvs.tBurnFee, tvs.tmarketingTokenFee, tvs.tMarketingETHFee ); } function _getTValues(uint256 tAmount) private view returns (TValuesStruct memory) { uint256 tReflectionFee = calculateReflectionFee(tAmount); uint256 tBurnFee = calculateBurnFee(tAmount); uint256 tmarketingTokenFee = calculatemarketingTokenFee(tAmount); uint256 tMarketingETHFee = calculateMarketingETHFee(tAmount); uint256 tTransferAmount = tAmount.sub(tReflectionFee).sub(tBurnFee).sub(tmarketingTokenFee).sub(tMarketingETHFee); return TValuesStruct(tTransferAmount, tReflectionFee, tBurnFee, tmarketingTokenFee, tMarketingETHFee); } function _getRValues(uint256 tAmount, uint256 tReflectionFee, uint256 tBurnFee, uint256 tmarketingTokenFee, uint256 tMarketingETHFee, uint256 currentRate) private pure returns (RValuesStruct memory) { uint256 rAmount = tAmount.mul(currentRate); uint256 rReflectionFee = tReflectionFee.mul(currentRate); uint256 rBurnFee = tBurnFee.mul(currentRate); uint256 rmarketingTokenFee = tmarketingTokenFee.mul(currentRate); uint256 rMarketingETHFee = tMarketingETHFee.mul(currentRate); uint256 rTransferAmount = rAmount.sub(rReflectionFee).sub(rMarketingETHFee).sub(rBurnFee).sub(rmarketingTokenFee); return RValuesStruct(rAmount, rTransferAmount, rReflectionFee, rBurnFee, rmarketingTokenFee, rMarketingETHFee); } 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 _takeMarketingETHFee(uint256 rMarketingETHFee, uint256 tMarketingETHFee) private { _rOwned[address(this)] = _rOwned[address(this)].add(rMarketingETHFee); if(_isExcluded[address(this)]) _tOwned[address(this)] = _tOwned[address(this)].add(tMarketingETHFee); } function calculateReflectionFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_reflectionFee).div( 10**2 ); } function calculateBurnFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_burnFee).div( 10**2 ); } function calculatemarketingTokenFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingTokenFee).div( 10**2 ); } function calculateMarketingETHFee(uint256 _amount) private view returns (uint256) { return _amount.mul(_marketingETHFee).div( 10**2 ); } function removeAllFee() private { _reflectionFee = 0; _marketingETHFee = 0; _burnFee = 0; _marketingTokenFee = 0; } function restoreAllFee() private { _reflectionFee = 0; _marketingETHFee = 5; _marketingTokenFee = 0; _burnFee = 0; } 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"); // block trading until owner has added liquidity and enabled trading if(!_tradingEnabled && from != owner()) { revert("Trading not yet enabled!"); } // is the token balance of this contract address over the min number of // tokens that we need to initiate a swaptoEth lock? // also, don't get caught in a circular liquidity event. // also, don't SwapMarketingAndSendETH if sender is uniswap pair. uint256 contractTokenBalance = balanceOf(address(this)); bool overMinTokenBalance = contractTokenBalance >= _numTokensSwapToETHForMarketing; if ( overMinTokenBalance && !inMarketingEthSwap && from != uniswapV2Pair && _marketingConverttoETH ) { contractTokenBalance = _numTokensSwapToETHForMarketing; //Perform a Swap of Token for ETH Portion of Marketing Fees swapMarketingAndSendEth(contractTokenBalance); } //transfer amount, it will take tax, burn, liquidity fee _tokenTransfer(from,to,amount); } function swapMarketingAndSendEth(uint256 tokenAmount) 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), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, marketingETHFeeWallet, block.timestamp ); } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 amount) private { if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]){ removeAllFee(); } else{ require(amount <= _maxTxAmount, "Transfer amount exceeds the maxTxAmount."); } ValuesStruct memory vs = _getValues(amount); _takeMarketingETHFee(vs.rMarketingETHFee, vs.tMarketingETHFee); _distributeFee(vs.rReflectionFee, vs.rBurnFee, vs.rmarketingTokenFee, vs.tReflectionFee, vs.tBurnFee, vs.tmarketingTokenFee); if (_isExcluded[sender] && !_isExcluded[recipient]) { _transferFromExcluded(sender, recipient, amount, vs); } else if (!_isExcluded[sender] && _isExcluded[recipient]) { _transferToExcluded(sender, recipient, vs); } else if (!_isExcluded[sender] && !_isExcluded[recipient]) { _transferStandard(sender, recipient, vs); } else if (_isExcluded[sender] && _isExcluded[recipient]) { _transferBothExcluded(sender, recipient, amount, vs); } if(_isExcludedFromFee[sender] || _isExcludedFromFee[recipient]) restoreAllFee(); } function _transferStandard(address sender, address recipient, ValuesStruct memory vs) private { _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function _transferToExcluded(address sender, address recipient, ValuesStruct memory vs) private { _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _tOwned[recipient] = _tOwned[recipient].add(vs.tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function _transferFromExcluded(address sender, address recipient, uint256 tAmount, ValuesStruct memory vs) private { _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function _transferBothExcluded(address sender, address recipient, uint256 tAmount, ValuesStruct memory vs) private { _tOwned[sender] = _tOwned[sender].sub(tAmount); _rOwned[sender] = _rOwned[sender].sub(vs.rAmount); _tOwned[recipient] = _tOwned[recipient].add(vs.tTransferAmount); _rOwned[recipient] = _rOwned[recipient].add(vs.rTransferAmount); emit Transfer(sender, recipient, vs.tTransferAmount); } function excludeFromFee(address account) public onlyOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOwner { _isExcludedFromFee[account] = false; } function enableAllFees() external onlyOwner() { _reflectionFee = 0; _burnFee = 0; _marketingTokenFee = 0; _marketingETHFee = 5; _marketingConverttoETH = true; } function disableAllFees() external onlyOwner() { _reflectionFee = 0; _burnFee = 0; _marketingTokenFee = 0; _marketingETHFee = 0; _marketingConverttoETH = false; } function setMarketingETHWallet(address newWallet) external onlyOwner() { marketingETHFeeWallet = newWallet; } function setMarketingTokenWallet(address newWallet) external onlyOwner() { marketingTokenFeeWallet = newWallet; } function setMaxTxAmount(uint256 maxAmountInTokensWithDecimals) external onlyOwner() { require(maxAmountInTokensWithDecimals > 100 * 10**6 * 10**9, "Cannot set transaction amount less than 0.1 percent of initial Total Supply!"); _maxTxAmount = maxAmountInTokensWithDecimals; } function enableTrading() public onlyOwner { require(!_tradingEnabled, "Trading already enabled!"); _tradingEnabled = true; } function setmarketingConverttoETH(bool _enabled) public onlyOwner { _marketingConverttoETH = _enabled; } // Number of Tokens to Accrue before Selling To Add to Marketing function setnumTokensSwapToETHForMarketing(uint256 tokenAmount) external onlyOwner() { _numTokensSwapToETHForMarketing = tokenAmount; } /** * @dev Function to recover any ETH sent to Contract by Mistake. */ function recoverETHFromContract(uint256 weiAmount) external onlyOwner{ require(address(this).balance >= weiAmount, "insufficient ETH balance"); payable(owner()).transfer(weiAmount); } /** * @dev Function to recover any ERC20 Tokens sent to Contract by Mistake. */ function recoverAnyERC20TokensFromContract(address _tokenAddr, address _to, uint _amount) public onlyOwner { IERC20(_tokenAddr).transfer(_to, _amount); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"minTokensBeforeSwap","type":"uint256"}],"name":"MinTokensBeforeSwapUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_burnFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingConverttoETH","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingETHFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_marketingTokenFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"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":"disableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableAllFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeInFee","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":"marketingETHFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokenFeeWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"numTokensSwapToETHForMarketing","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":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"recoverAnyERC20TokensFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"recoverETHFromContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingETHWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setMarketingTokenWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxAmountInTokensWithDecimals","type":"uint256"}],"name":"setMaxTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setmarketingConverttoETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"setnumTokensSwapToETHForMarketing","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":"totalBurnFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReflectionFees","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
60c060405268056bc75e2d6310000060095560095460001962000023919062000764565b600019620000329190620007cb565b600a556040518060400160405280600681526020017f5348554b594f0000000000000000000000000000000000000000000000000000815250600d9080519060200190620000829291906200067b565b506040518060400160405280600681526020017f5348554b594f0000000000000000000000000000000000000000000000000000815250600e9080519060200190620000d09291906200067b565b506009600f60006101000a81548160ff021916908360ff160217905550600060105560006011556000601255600560135573a0e804f9c4f53922151091a9b3d71252d5c055ee601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073a0e804f9c4f53922151091a9b3d71252d5c055ee601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601560146101000a81548160ff02191690831515021790555060016015806101000a81548160ff0219169083151502179055506000601560166101000a81548160ff021916908315150217905550670de0b6b3a76400006016556702c68af0bb1400006017553480156200022057600080fd5b506000620002336200064a60201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350600a5460036000620002e86200064a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200038b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003b1919062000870565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000419573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200043f919062000870565b6040518363ffffffff1660e01b81526004016200045e929190620008b3565b6020604051808303816000875af11580156200047e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004a4919062000870565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050600160066000620005216200065260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620005da6200064a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6009546040516200063b9190620008f1565b60405180910390a35062000972565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000689906200093d565b90600052602060002090601f016020900481019282620006ad5760008555620006f9565b82601f10620006c857805160ff1916838001178555620006f9565b82800160010185558215620006f9579182015b82811115620006f8578251825591602001919060010190620006db565b5b5090506200070891906200070c565b5090565b5b80821115620007275760008160009055506001016200070d565b5090565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000771826200072b565b91506200077e836200072b565b92508262000791576200079062000735565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620007d8826200072b565b9150620007e5836200072b565b925082821015620007fb57620007fa6200079c565b5b828203905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000838826200080b565b9050919050565b6200084a816200082b565b81146200085657600080fd5b50565b6000815190506200086a816200083f565b92915050565b60006020828403121562000889576200088862000806565b5b6000620008998482850162000859565b91505092915050565b620008ad816200082b565b82525050565b6000604082019050620008ca6000830185620008a2565b620008d96020830184620008a2565b9392505050565b620008eb816200072b565b82525050565b6000602082019050620009086000830184620008e0565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200095657607f821691505b6020821081036200096c576200096b6200090e565b5b50919050565b60805160a0516158ef620009b4600039600081816110130152612775015260008181610b6f01528181612ab001528181612b910152612bb801526158ef6000f3fe6080604052600436106102765760003560e01c8063741af87f1161014f578063adbede72116100c1578063ea2f0b371161007a578063ea2f0b371461098b578063ec0c9d4d146109b4578063ec28438a146109dd578063f2fde38b14610a06578063f709594514610a2f578063ffc7863514610a5a5761027d565b8063adbede721461087b578063b8d36b50146108a6578063c0b0fda2146108cf578063c5254f40146108fa578063c730b8a414610923578063dd62ed3e1461094e5761027d565b80638c8f8c04116101135780638c8f8c04146107595780638da5cb5b146107825780638ff67c36146107ad57806395d89b41146107d6578063a457c2d714610801578063a9059cbb1461083e5761027d565b8063741af87f1461069857806376b851ca146106af5780637d1db4a5146106da57806388f82020146107055780638a8c523c146107425761027d565b806338780fe6116101e857806349bd5a5e116101ac57806349bd5a5e1461058857806352390c02146105b35780635342acb4146105dc57806370a082311461061957806370c668c814610656578063715018a6146106815761027d565b806338780fe61461049157806338e2f22f146104ba57806339509351146104e5578063437823ec146105225780634549b0391461054b5761027d565b806318160ddd1161023a57806318160ddd1461036b57806323b872dd146103965780632d838119146103d3578063313ce56714610410578063317653e01461043b5780633206b4aa146104665761027d565b806301ba031f1461028257806306486014146102ad57806306fdde03146102d8578063095ea7b3146103035780631694505e146103405761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a71565b6040516102a49190614613565b60405180910390f35b3480156102b957600080fd5b506102c2610a97565b6040516102cf9190614613565b60405180910390f35b3480156102e457600080fd5b506102ed610abd565b6040516102fa91906146c7565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190614750565b610b4f565b60405161033791906147ab565b60405180910390f35b34801561034c57600080fd5b50610355610b6d565b6040516103629190614825565b60405180910390f35b34801561037757600080fd5b50610380610b91565b60405161038d919061484f565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b8919061486a565b610b9b565b6040516103ca91906147ab565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f591906148bd565b610c74565b604051610407919061484f565b60405180910390f35b34801561041c57600080fd5b50610425610ce2565b6040516104329190614906565b60405180910390f35b34801561044757600080fd5b50610450610cf9565b60405161045d919061484f565b60405180910390f35b34801561047257600080fd5b5061047b610d03565b604051610488919061484f565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190614921565b610d09565b005b3480156104c657600080fd5b506104cf610de2565b6040516104dc919061484f565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190614750565b610dec565b60405161051991906147ab565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190614921565b610e9f565b005b34801561055757600080fd5b50610572600480360381019061056d919061497a565b610f8f565b60405161057f919061484f565b60405180910390f35b34801561059457600080fd5b5061059d611011565b6040516105aa9190614613565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190614921565b611035565b005b3480156105e857600080fd5b5061060360048036038101906105fe9190614921565b6113b3565b60405161061091906147ab565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190614921565b611409565b60405161064d919061484f565b60405180910390f35b34801561066257600080fd5b5061066b6114f4565b604051610678919061484f565b60405180910390f35b34801561068d57600080fd5b506106966114fa565b005b3480156106a457600080fd5b506106ad61164d565b005b3480156106bb57600080fd5b506106c461171e565b6040516106d191906147ab565b60405180910390f35b3480156106e657600080fd5b506106ef61172f565b6040516106fc919061484f565b60405180910390f35b34801561071157600080fd5b5061072c60048036038101906107279190614921565b611735565b60405161073991906147ab565b60405180910390f35b34801561074e57600080fd5b5061075761178b565b005b34801561076557600080fd5b50610780600480360381019061077b919061486a565b61188d565b005b34801561078e57600080fd5b506107976119a6565b6040516107a49190614613565b60405180910390f35b3480156107b957600080fd5b506107d460048036038101906107cf91906149ba565b6119cf565b005b3480156107e257600080fd5b506107eb611a80565b6040516107f891906146c7565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190614750565b611b12565b60405161083591906147ab565b60405180910390f35b34801561084a57600080fd5b5061086560048036038101906108609190614750565b611bdf565b60405161087291906147ab565b60405180910390f35b34801561088757600080fd5b50610890611bfd565b60405161089d919061484f565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c891906148bd565b611c07565b005b3480156108db57600080fd5b506108e4611d30565b6040516108f1919061484f565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c9190614921565b611d36565b005b34801561092f57600080fd5b50610938611e0f565b604051610945919061484f565b60405180910390f35b34801561095a57600080fd5b50610975600480360381019061097091906149e7565b611e15565b604051610982919061484f565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad9190614921565b611e9c565b005b3480156109c057600080fd5b506109db60048036038101906109d691906148bd565b611f8c565b005b3480156109e957600080fd5b50610a0460048036038101906109ff91906148bd565b61202b565b005b348015610a1257600080fd5b50610a2d6004803603810190610a289190614921565b612114565b005b348015610a3b57600080fd5b50610a446122d5565b604051610a5191906147ab565b60405180910390f35b348015610a6657600080fd5b50610a6f6122e8565b005b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600d8054610acc90614a56565b80601f0160208091040260200160405190810160405280929190818152602001828054610af890614a56565b8015610b455780601f10610b1a57610100808354040283529160200191610b45565b820191906000526020600020905b815481529060010190602001808311610b2857829003601f168201915b5050505050905090565b6000610b63610b5c6123b9565b84846123c1565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600954905090565b6000610ba884848461258a565b610c6984610bb46123b9565b610c648560405180606001604052806028815260200161586d60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c1a6123b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128009092919063ffffffff16565b6123c1565b600190509392505050565b6000600a54821115610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290614af9565b60405180910390fd5b6000610cc5612864565b9050610cda818461288f90919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b6000600c54905090565b60105481565b610d116123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590614b65565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601754905090565b6000610e95610df96123b9565b84610e908560056000610e0a6123b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b6123c1565b6001905092915050565b610ea76123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b90614b65565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd90614bd1565b60405180910390fd5b81610ff5576000610fe684612937565b6000015190508091505061100b565b600061100084612937565b602001519050809150505b92915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b61103d6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c190614b65565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114390614c63565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d090614ccf565b60405180910390fd5b606460088054905010611221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121890614d3b565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156112f5576112b1600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c74565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114a457600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506114ef565b6114ec600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c74565b90505b919050565b60125481565b6115026123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158690614b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6116556123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614b65565b60405180910390fd5b600060108190555060006011819055506000601281905550600060138190555060006015806101000a81548160ff021916908315150217905550565b60158054906101000a900460ff1681565b60165481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6117936123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790614b65565b60405180910390fd5b601560169054906101000a900460ff1615611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790614da7565b60405180910390fd5b6001601560166101000a81548160ff021916908315150217905550565b6118956123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191990614b65565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161195d929190614dc7565b6020604051808303816000875af115801561197c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a09190614e05565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119d76123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90614b65565b60405180910390fd5b806015806101000a81548160ff02191690831515021790555050565b6060600e8054611a8f90614a56565b80601f0160208091040260200160405190810160405280929190818152602001828054611abb90614a56565b8015611b085780601f10611add57610100808354040283529160200191611b08565b820191906000526020600020905b815481529060010190602001808311611aeb57829003601f168201915b5050505050905090565b6000611bd5611b1f6123b9565b84611bd0856040518060600160405280602581526020016158956025913960056000611b496123b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128009092919063ffffffff16565b6123c1565b6001905092915050565b6000611bf3611bec6123b9565b848461258a565b6001905092915050565b6000600b54905090565b611c0f6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390614b65565b60405180910390fd5b80471015611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd690614e7e565b60405180910390fd5b611ce76119a6565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611d2c573d6000803e3d6000fd5b5050565b60115481565b611d3e6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc290614b65565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ea46123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2890614b65565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611f946123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890614b65565b60405180910390fd5b8060178190555050565b6120336123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b790614b65565b60405180910390fd5b67016345785d8a0000811161210a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210190614f36565b60405180910390fd5b8060168190555050565b61211c6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090614b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90614fc8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560169054906101000a900460ff1681565b6122f06123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490614b65565b60405180910390fd5b600060108190555060006011819055506000601281905550600560138190555060016015806101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612430576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124279061505a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361249f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612496906150ec565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161257d919061484f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f09061517e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f90615210565b60405180910390fd5b600081116126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a2906152a2565b60405180910390fd5b601560169054906101000a900460ff161580156126fb57506126cb6119a6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561273b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127329061530e565b60405180910390fd5b600061274630611409565b90506000601754821015905080801561276c5750601560149054906101000a900460ff16155b80156127c457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156127da575060158054906101000a900460ff165b156127ee5760175491506127ed826129f6565b5b6127f9858585612c8b565b5050505050565b6000838311158290612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f91906146c7565b60405180910390fd5b5060008385612857919061535d565b9050809150509392505050565b6000806000612871613162565b91509150612888818361288f90919063ffffffff16565b9250505090565b60006128d183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613415565b905092915050565b60008082846128e89190615391565b90508381101561292d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292490615433565b60405180910390fd5b8091505092915050565b61293f614513565b600061294a83613478565b9050600061297384836020015184604001518560600151866080015161296e612864565b613534565b905060405180610160016040528082600001518152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a00151815260200183600001518152602001836020015181526020018360400151815260200183606001518152602001836080015181525092505050919050565b6001601560146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612a2e57612a2d615453565b5b604051908082528060200260200182016040528015612a5c5781602001602082028036833780820191505090505b5090503081600081518110612a7457612a73615482565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3d91906154c6565b81600181518110612b5157612b50615482565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612bb6307f0000000000000000000000000000000000000000000000000000000000000000846123c1565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612c3a9594939291906155ec565b600060405180830381600087803b158015612c5457600080fd5b505af1158015612c68573d6000803e3d6000fd5b50505050506000601560146101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d2c5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d3e57612d3961363b565b612d84565b601654811115612d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7a906156b8565b60405180910390fd5b5b6000612d8f82612937565b9050612da48160a0015182610140015161365d565b612dcc8160400151826060015183608001518460e001518561010001518661012001516137de565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e6f5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e8557612e8084848484613a8b565b6130ad565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f285750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f3d57612f38848483613cc1565b6130ac565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fe15750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ff657612ff1848483613efa565b6130ab565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130985750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130aa576130a98484848461409a565b5b5b5b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061314e5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561315c5761315b614369565b5b50505050565b6000806000600a5490506000600954905060005b6008805490508110156133d85782600360006008848154811061319c5761319b615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061328a575081600460006008848154811061322257613221615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156132a157600a5460095494509450505050613411565b61333160036000600884815481106132bc576132bb615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461438b90919063ffffffff16565b92506133c3600460006008848154811061334e5761334d615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361438b90919063ffffffff16565b915080806133d0906156d8565b915050613176565b506133f0600954600a5461288f90919063ffffffff16565b82101561340857600a54600954935093505050613411565b81819350935050505b9091565b6000808311829061345c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345391906146c7565b60405180910390fd5b506000838561346b919061574f565b9050809150509392505050565b61348061456d565b600061348b836143d5565b9050600061349884614406565b905060006134a585614437565b905060006134b286614468565b905060006134ff826134f1856134e3886134d58b8e61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b90506040518060a001604052808281526020018681526020018581526020018481526020018381525095505050505050919050565b61353c61459c565b6000613551838961449990919063ffffffff16565b90506000613568848961449990919063ffffffff16565b9050600061357f858961449990919063ffffffff16565b90506000613596868961449990919063ffffffff16565b905060006135ad878961449990919063ffffffff16565b905060006135fa836135ec866135de866135d08b8d61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b90506040518060c001604052808781526020018281526020018681526020018581526020018481526020018381525096505050505050509695505050505050565b6000601081905550600060138190555060006011819055506000601281905550565b6136af82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156137da5761379681600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b613805856137f788600a5461438b90919063ffffffff16565b61438b90919063ffffffff16565b600a8190555061382083600b546128d990919063ffffffff16565b600b8190555061383b8260095461438b90919063ffffffff16565b60098190555061385682600c546128d990919063ffffffff16565b600c819055506138d08460036000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b60036000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060076000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a8357613a1d8160046000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b60046000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050505050565b613add82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b768160000151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0f8160200151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051613cb3919061484f565b60405180910390a350505050565b613d178160000151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613db08160c00151600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e498160200151600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051613eed919061484f565b60405180910390a3505050565b613f508160000151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fe98160200151600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161408d919061484f565b60405180910390a3505050565b6140ec82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141858160000151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061421e8160c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142b78160200151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161435b919061484f565b60405180910390a350505050565b6000601081905550600560138190555060006012819055506000601181905550565b60006143cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612800565b905092915050565b60006143ff60646143f16010548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b600061443060646144226011548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b600061446160646144536012548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b600061449260646144846013548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b60008083036144ab576000905061450d565b600082846144b99190615780565b90508284826144c8919061574f565b14614508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144ff9061584c565b60405180910390fd5b809150505b92915050565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145fd826145d2565b9050919050565b61460d816145f2565b82525050565b60006020820190506146286000830184614604565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561466857808201518184015260208101905061464d565b83811115614677576000848401525b50505050565b6000601f19601f8301169050919050565b60006146998261462e565b6146a38185614639565b93506146b381856020860161464a565b6146bc8161467d565b840191505092915050565b600060208201905081810360008301526146e1818461468e565b905092915050565b600080fd5b6146f7816145f2565b811461470257600080fd5b50565b600081359050614714816146ee565b92915050565b6000819050919050565b61472d8161471a565b811461473857600080fd5b50565b60008135905061474a81614724565b92915050565b60008060408385031215614767576147666146e9565b5b600061477585828601614705565b92505060206147868582860161473b565b9150509250929050565b60008115159050919050565b6147a581614790565b82525050565b60006020820190506147c0600083018461479c565b92915050565b6000819050919050565b60006147eb6147e66147e1846145d2565b6147c6565b6145d2565b9050919050565b60006147fd826147d0565b9050919050565b600061480f826147f2565b9050919050565b61481f81614804565b82525050565b600060208201905061483a6000830184614816565b92915050565b6148498161471a565b82525050565b60006020820190506148646000830184614840565b92915050565b600080600060608486031215614883576148826146e9565b5b600061489186828701614705565b93505060206148a286828701614705565b92505060406148b38682870161473b565b9150509250925092565b6000602082840312156148d3576148d26146e9565b5b60006148e18482850161473b565b91505092915050565b600060ff82169050919050565b614900816148ea565b82525050565b600060208201905061491b60008301846148f7565b92915050565b600060208284031215614937576149366146e9565b5b600061494584828501614705565b91505092915050565b61495781614790565b811461496257600080fd5b50565b6000813590506149748161494e565b92915050565b60008060408385031215614991576149906146e9565b5b600061499f8582860161473b565b92505060206149b085828601614965565b9150509250929050565b6000602082840312156149d0576149cf6146e9565b5b60006149de84828501614965565b91505092915050565b600080604083850312156149fe576149fd6146e9565b5b6000614a0c85828601614705565b9250506020614a1d85828601614705565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a6e57607f821691505b602082108103614a8157614a80614a27565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614ae3602a83614639565b9150614aee82614a87565b604082019050919050565b60006020820190508181036000830152614b1281614ad6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b4f602083614639565b9150614b5a82614b19565b602082019050919050565b60006020820190508181036000830152614b7e81614b42565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000614bbb601f83614639565b9150614bc682614b85565b602082019050919050565b60006020820190508181036000830152614bea81614bae565b9050919050565b7f57652063616e206e6f74206578636c75646520556e697377617020726f75746560008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c4d602283614639565b9150614c5882614bf1565b604082019050919050565b60006020820190508181036000830152614c7c81614c40565b9050919050565b7f4163636f756e7420616c7265616479206578636c756465640000000000000000600082015250565b6000614cb9601883614639565b9150614cc482614c83565b602082019050919050565b60006020820190508181036000830152614ce881614cac565b9050919050565b7f4578636c75646564206c69737420697320746f6f206c6f6e6700000000000000600082015250565b6000614d25601983614639565b9150614d3082614cef565b602082019050919050565b60006020820190508181036000830152614d5481614d18565b9050919050565b7f54726164696e6720616c726561647920656e61626c6564210000000000000000600082015250565b6000614d91601883614639565b9150614d9c82614d5b565b602082019050919050565b60006020820190508181036000830152614dc081614d84565b9050919050565b6000604082019050614ddc6000830185614604565b614de96020830184614840565b9392505050565b600081519050614dff8161494e565b92915050565b600060208284031215614e1b57614e1a6146e9565b5b6000614e2984828501614df0565b91505092915050565b7f696e73756666696369656e74204554482062616c616e63650000000000000000600082015250565b6000614e68601883614639565b9150614e7382614e32565b602082019050919050565b60006020820190508181036000830152614e9781614e5b565b9050919050565b7f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c6560008201527f7373207468616e20302e312070657263656e74206f6620696e697469616c205460208201527f6f74616c20537570706c79210000000000000000000000000000000000000000604082015250565b6000614f20604c83614639565b9150614f2b82614e9e565b606082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614fb2602683614639565b9150614fbd82614f56565b604082019050919050565b60006020820190508181036000830152614fe181614fa5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615044602483614639565b915061504f82614fe8565b604082019050919050565b6000602082019050818103600083015261507381615037565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006150d6602283614639565b91506150e18261507a565b604082019050919050565b60006020820190508181036000830152615105816150c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615168602583614639565b91506151738261510c565b604082019050919050565b600060208201905081810360008301526151978161515b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151fa602383614639565b91506152058261519e565b604082019050919050565b60006020820190508181036000830152615229816151ed565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061528c602983614639565b915061529782615230565b604082019050919050565b600060208201905081810360008301526152bb8161527f565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b60006152f8601883614639565b9150615303826152c2565b602082019050919050565b60006020820190508181036000830152615327816152eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006153688261471a565b91506153738361471a565b9250828210156153865761538561532e565b5b828203905092915050565b600061539c8261471a565b91506153a78361471a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153dc576153db61532e565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061541d601b83614639565b9150615428826153e7565b602082019050919050565b6000602082019050818103600083015261544c81615410565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154c0816146ee565b92915050565b6000602082840312156154dc576154db6146e9565b5b60006154ea848285016154b1565b91505092915050565b6000819050919050565b600061551861551361550e846154f3565b6147c6565b61471a565b9050919050565b615528816154fd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615563816145f2565b82525050565b6000615575838361555a565b60208301905092915050565b6000602082019050919050565b60006155998261552e565b6155a38185615539565b93506155ae8361554a565b8060005b838110156155df5781516155c68882615569565b97506155d183615581565b9250506001810190506155b2565b5085935050505092915050565b600060a0820190506156016000830188614840565b61560e602083018761551f565b8181036040830152615620818661558e565b905061562f6060830185614604565b61563c6080830184614840565b9695505050505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006156a2602883614639565b91506156ad82615646565b604082019050919050565b600060208201905081810360008301526156d181615695565b9050919050565b60006156e38261471a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157155761571461532e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061575a8261471a565b91506157658361471a565b92508261577557615774615720565b5b828204905092915050565b600061578b8261471a565b91506157968361471a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156157cf576157ce61532e565b5b828202905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615836602183614639565b9150615841826157da565b604082019050919050565b6000602082019050818103600083015261586581615829565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208a536ae3ee9d062ed825220d223f2bc7b1de4bc763b2e3c27f7e1112a5da3be564736f6c634300080e0033
Deployed Bytecode
0x6080604052600436106102765760003560e01c8063741af87f1161014f578063adbede72116100c1578063ea2f0b371161007a578063ea2f0b371461098b578063ec0c9d4d146109b4578063ec28438a146109dd578063f2fde38b14610a06578063f709594514610a2f578063ffc7863514610a5a5761027d565b8063adbede721461087b578063b8d36b50146108a6578063c0b0fda2146108cf578063c5254f40146108fa578063c730b8a414610923578063dd62ed3e1461094e5761027d565b80638c8f8c04116101135780638c8f8c04146107595780638da5cb5b146107825780638ff67c36146107ad57806395d89b41146107d6578063a457c2d714610801578063a9059cbb1461083e5761027d565b8063741af87f1461069857806376b851ca146106af5780637d1db4a5146106da57806388f82020146107055780638a8c523c146107425761027d565b806338780fe6116101e857806349bd5a5e116101ac57806349bd5a5e1461058857806352390c02146105b35780635342acb4146105dc57806370a082311461061957806370c668c814610656578063715018a6146106815761027d565b806338780fe61461049157806338e2f22f146104ba57806339509351146104e5578063437823ec146105225780634549b0391461054b5761027d565b806318160ddd1161023a57806318160ddd1461036b57806323b872dd146103965780632d838119146103d3578063313ce56714610410578063317653e01461043b5780633206b4aa146104665761027d565b806301ba031f1461028257806306486014146102ad57806306fdde03146102d8578063095ea7b3146103035780631694505e146103405761027d565b3661027d57005b600080fd5b34801561028e57600080fd5b50610297610a71565b6040516102a49190614613565b60405180910390f35b3480156102b957600080fd5b506102c2610a97565b6040516102cf9190614613565b60405180910390f35b3480156102e457600080fd5b506102ed610abd565b6040516102fa91906146c7565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190614750565b610b4f565b60405161033791906147ab565b60405180910390f35b34801561034c57600080fd5b50610355610b6d565b6040516103629190614825565b60405180910390f35b34801561037757600080fd5b50610380610b91565b60405161038d919061484f565b60405180910390f35b3480156103a257600080fd5b506103bd60048036038101906103b8919061486a565b610b9b565b6040516103ca91906147ab565b60405180910390f35b3480156103df57600080fd5b506103fa60048036038101906103f591906148bd565b610c74565b604051610407919061484f565b60405180910390f35b34801561041c57600080fd5b50610425610ce2565b6040516104329190614906565b60405180910390f35b34801561044757600080fd5b50610450610cf9565b60405161045d919061484f565b60405180910390f35b34801561047257600080fd5b5061047b610d03565b604051610488919061484f565b60405180910390f35b34801561049d57600080fd5b506104b860048036038101906104b39190614921565b610d09565b005b3480156104c657600080fd5b506104cf610de2565b6040516104dc919061484f565b60405180910390f35b3480156104f157600080fd5b5061050c60048036038101906105079190614750565b610dec565b60405161051991906147ab565b60405180910390f35b34801561052e57600080fd5b5061054960048036038101906105449190614921565b610e9f565b005b34801561055757600080fd5b50610572600480360381019061056d919061497a565b610f8f565b60405161057f919061484f565b60405180910390f35b34801561059457600080fd5b5061059d611011565b6040516105aa9190614613565b60405180910390f35b3480156105bf57600080fd5b506105da60048036038101906105d59190614921565b611035565b005b3480156105e857600080fd5b5061060360048036038101906105fe9190614921565b6113b3565b60405161061091906147ab565b60405180910390f35b34801561062557600080fd5b50610640600480360381019061063b9190614921565b611409565b60405161064d919061484f565b60405180910390f35b34801561066257600080fd5b5061066b6114f4565b604051610678919061484f565b60405180910390f35b34801561068d57600080fd5b506106966114fa565b005b3480156106a457600080fd5b506106ad61164d565b005b3480156106bb57600080fd5b506106c461171e565b6040516106d191906147ab565b60405180910390f35b3480156106e657600080fd5b506106ef61172f565b6040516106fc919061484f565b60405180910390f35b34801561071157600080fd5b5061072c60048036038101906107279190614921565b611735565b60405161073991906147ab565b60405180910390f35b34801561074e57600080fd5b5061075761178b565b005b34801561076557600080fd5b50610780600480360381019061077b919061486a565b61188d565b005b34801561078e57600080fd5b506107976119a6565b6040516107a49190614613565b60405180910390f35b3480156107b957600080fd5b506107d460048036038101906107cf91906149ba565b6119cf565b005b3480156107e257600080fd5b506107eb611a80565b6040516107f891906146c7565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190614750565b611b12565b60405161083591906147ab565b60405180910390f35b34801561084a57600080fd5b5061086560048036038101906108609190614750565b611bdf565b60405161087291906147ab565b60405180910390f35b34801561088757600080fd5b50610890611bfd565b60405161089d919061484f565b60405180910390f35b3480156108b257600080fd5b506108cd60048036038101906108c891906148bd565b611c07565b005b3480156108db57600080fd5b506108e4611d30565b6040516108f1919061484f565b60405180910390f35b34801561090657600080fd5b50610921600480360381019061091c9190614921565b611d36565b005b34801561092f57600080fd5b50610938611e0f565b604051610945919061484f565b60405180910390f35b34801561095a57600080fd5b50610975600480360381019061097091906149e7565b611e15565b604051610982919061484f565b60405180910390f35b34801561099757600080fd5b506109b260048036038101906109ad9190614921565b611e9c565b005b3480156109c057600080fd5b506109db60048036038101906109d691906148bd565b611f8c565b005b3480156109e957600080fd5b50610a0460048036038101906109ff91906148bd565b61202b565b005b348015610a1257600080fd5b50610a2d6004803603810190610a289190614921565b612114565b005b348015610a3b57600080fd5b50610a446122d5565b604051610a5191906147ab565b60405180910390f35b348015610a6657600080fd5b50610a6f6122e8565b005b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6060600d8054610acc90614a56565b80601f0160208091040260200160405190810160405280929190818152602001828054610af890614a56565b8015610b455780601f10610b1a57610100808354040283529160200191610b45565b820191906000526020600020905b815481529060010190602001808311610b2857829003601f168201915b5050505050905090565b6000610b63610b5c6123b9565b84846123c1565b6001905092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600954905090565b6000610ba884848461258a565b610c6984610bb46123b9565b610c648560405180606001604052806028815260200161586d60289139600560008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610c1a6123b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128009092919063ffffffff16565b6123c1565b600190509392505050565b6000600a54821115610cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb290614af9565b60405180910390fd5b6000610cc5612864565b9050610cda818461288f90919063ffffffff16565b915050919050565b6000600f60009054906101000a900460ff16905090565b6000600c54905090565b60105481565b610d116123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610d9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9590614b65565b60405180910390fd5b80601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601754905090565b6000610e95610df96123b9565b84610e908560056000610e0a6123b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b6123c1565b6001905092915050565b610ea76123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2b90614b65565b60405180910390fd5b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b6000600954831115610fd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fcd90614bd1565b60405180910390fd5b81610ff5576000610fe684612937565b6000015190508091505061100b565b600061100084612937565b602001519050809150505b92915050565b7f000000000000000000000000a04c3f9d99eb624cd380cdd295f348d5c174ad9f81565b61103d6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c190614b65565b60405180910390fd5b737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361114c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114390614c63565b60405180910390fd5b600760008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156111d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d090614ccf565b60405180910390fd5b606460088054905010611221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121890614d3b565b60405180910390fd5b6000600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156112f5576112b1600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c74565b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506008819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114a457600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490506114ef565b6114ec600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c74565b90505b919050565b60125481565b6115026123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461158f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158690614b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6116556123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146116e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d990614b65565b60405180910390fd5b600060108190555060006011819055506000601281905550600060138190555060006015806101000a81548160ff021916908315150217905550565b60158054906101000a900460ff1681565b60165481565b6000600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6117936123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611820576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181790614b65565b60405180910390fd5b601560169054906101000a900460ff1615611870576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186790614da7565b60405180910390fd5b6001601560166101000a81548160ff021916908315150217905550565b6118956123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611922576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191990614b65565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b815260040161195d929190614dc7565b6020604051808303816000875af115801561197c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a09190614e05565b50505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6119d76123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5b90614b65565b60405180910390fd5b806015806101000a81548160ff02191690831515021790555050565b6060600e8054611a8f90614a56565b80601f0160208091040260200160405190810160405280929190818152602001828054611abb90614a56565b8015611b085780601f10611add57610100808354040283529160200191611b08565b820191906000526020600020905b815481529060010190602001808311611aeb57829003601f168201915b5050505050905090565b6000611bd5611b1f6123b9565b84611bd0856040518060600160405280602581526020016158956025913960056000611b496123b9565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128009092919063ffffffff16565b6123c1565b6001905092915050565b6000611bf3611bec6123b9565b848461258a565b6001905092915050565b6000600b54905090565b611c0f6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9390614b65565b60405180910390fd5b80471015611cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cd690614e7e565b60405180910390fd5b611ce76119a6565b73ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611d2c573d6000803e3d6000fd5b5050565b60115481565b611d3e6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611dcb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc290614b65565b60405180910390fd5b80601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60135481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ea46123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2890614b65565b60405180910390fd5b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b611f946123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612021576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201890614b65565b60405180910390fd5b8060178190555050565b6120336123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b790614b65565b60405180910390fd5b67016345785d8a0000811161210a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210190614f36565b60405180910390fd5b8060168190555050565b61211c6123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121a090614b65565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161220f90614fc8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601560169054906101000a900460ff1681565b6122f06123b9565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461237d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237490614b65565b60405180910390fd5b600060108190555060006011819055506000601281905550600560138190555060016015806101000a81548160ff021916908315150217905550565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612430576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124279061505a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361249f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612496906150ec565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161257d919061484f565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036125f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f09061517e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612668576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161265f90615210565b60405180910390fd5b600081116126ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a2906152a2565b60405180910390fd5b601560169054906101000a900460ff161580156126fb57506126cb6119a6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b1561273b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127329061530e565b60405180910390fd5b600061274630611409565b90506000601754821015905080801561276c5750601560149054906101000a900460ff16155b80156127c457507f000000000000000000000000a04c3f9d99eb624cd380cdd295f348d5c174ad9f73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614155b80156127da575060158054906101000a900460ff165b156127ee5760175491506127ed826129f6565b5b6127f9858585612c8b565b5050505050565b6000838311158290612848576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283f91906146c7565b60405180910390fd5b5060008385612857919061535d565b9050809150509392505050565b6000806000612871613162565b91509150612888818361288f90919063ffffffff16565b9250505090565b60006128d183836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613415565b905092915050565b60008082846128e89190615391565b90508381101561292d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292490615433565b60405180910390fd5b8091505092915050565b61293f614513565b600061294a83613478565b9050600061297384836020015184604001518560600151866080015161296e612864565b613534565b905060405180610160016040528082600001518152602001826020015181526020018260400151815260200182606001518152602001826080015181526020018260a00151815260200183600001518152602001836020015181526020018360400151815260200183606001518152602001836080015181525092505050919050565b6001601560146101000a81548160ff0219169083151502179055506000600267ffffffffffffffff811115612a2e57612a2d615453565b5b604051908082528060200260200182016040528015612a5c5781602001602082028036833780820191505090505b5090503081600081518110612a7457612a73615482565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b3d91906154c6565b81600181518110612b5157612b50615482565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050612bb6307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123c1565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94783600084601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b8152600401612c3a9594939291906155ec565b600060405180830381600087803b158015612c5457600080fd5b505af1158015612c68573d6000803e3d6000fd5b50505050506000601560146101000a81548160ff02191690831515021790555050565b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612d2c5750600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612d3e57612d3961363b565b612d84565b601654811115612d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d7a906156b8565b60405180910390fd5b5b6000612d8f82612937565b9050612da48160a0015182610140015161365d565b612dcc8160400151826060015183608001518460e001518561010001518661012001516137de565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612e6f5750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e8557612e8084848484613a8b565b6130ad565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612f285750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612f3d57612f38848483613cc1565b6130ac565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015612fe15750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ff657612ff1848483613efa565b6130ab565b600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156130985750600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156130aa576130a98484848461409a565b5b5b5b5b600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061314e5750600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561315c5761315b614369565b5b50505050565b6000806000600a5490506000600954905060005b6008805490508110156133d85782600360006008848154811061319c5761319b615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061328a575081600460006008848154811061322257613221615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b156132a157600a5460095494509450505050613411565b61333160036000600884815481106132bc576132bb615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461438b90919063ffffffff16565b92506133c3600460006008848154811061334e5761334d615482565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361438b90919063ffffffff16565b915080806133d0906156d8565b915050613176565b506133f0600954600a5461288f90919063ffffffff16565b82101561340857600a54600954935093505050613411565b81819350935050505b9091565b6000808311829061345c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161345391906146c7565b60405180910390fd5b506000838561346b919061574f565b9050809150509392505050565b61348061456d565b600061348b836143d5565b9050600061349884614406565b905060006134a585614437565b905060006134b286614468565b905060006134ff826134f1856134e3886134d58b8e61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b90506040518060a001604052808281526020018681526020018581526020018481526020018381525095505050505050919050565b61353c61459c565b6000613551838961449990919063ffffffff16565b90506000613568848961449990919063ffffffff16565b9050600061357f858961449990919063ffffffff16565b90506000613596868961449990919063ffffffff16565b905060006135ad878961449990919063ffffffff16565b905060006135fa836135ec866135de866135d08b8d61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b61438b90919063ffffffff16565b90506040518060c001604052808781526020018281526020018681526020018581526020018481526020018381525096505050505050509695505050505050565b6000601081905550600060138190555060006011819055506000601281905550565b6136af82600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600760003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156137da5761379681600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600460003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5050565b613805856137f788600a5461438b90919063ffffffff16565b61438b90919063ffffffff16565b600a8190555061382083600b546128d990919063ffffffff16565b600b8190555061383b8260095461438b90919063ffffffff16565b60098190555061385682600c546128d990919063ffffffff16565b600c819055506138d08460036000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b60036000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555060076000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615613a8357613a1d8160046000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b60046000601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b505050505050565b613add82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613b768160000151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613c0f8160200151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051613cb3919061484f565b60405180910390a350505050565b613d178160000151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613db08160c00151600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613e498160200151600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c00151604051613eed919061484f565b60405180910390a3505050565b613f508160000151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613fe98160200151600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161408d919061484f565b60405180910390a3505050565b6140ec82600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506141858160000151600360008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461438b90919063ffffffff16565b600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061421e8160c00151600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506142b78160200151600360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546128d990919063ffffffff16565b600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360c0015160405161435b919061484f565b60405180910390a350505050565b6000601081905550600560138190555060006012819055506000601181905550565b60006143cd83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612800565b905092915050565b60006143ff60646143f16010548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b600061443060646144226011548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b600061446160646144536012548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b600061449260646144846013548561449990919063ffffffff16565b61288f90919063ffffffff16565b9050919050565b60008083036144ab576000905061450d565b600082846144b99190615780565b90508284826144c8919061574f565b14614508576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016144ff9061584c565b60405180910390fd5b809150505b92915050565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6040518060a0016040528060008152602001600081526020016000815260200160008152602001600081525090565b6040518060c001604052806000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006145fd826145d2565b9050919050565b61460d816145f2565b82525050565b60006020820190506146286000830184614604565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561466857808201518184015260208101905061464d565b83811115614677576000848401525b50505050565b6000601f19601f8301169050919050565b60006146998261462e565b6146a38185614639565b93506146b381856020860161464a565b6146bc8161467d565b840191505092915050565b600060208201905081810360008301526146e1818461468e565b905092915050565b600080fd5b6146f7816145f2565b811461470257600080fd5b50565b600081359050614714816146ee565b92915050565b6000819050919050565b61472d8161471a565b811461473857600080fd5b50565b60008135905061474a81614724565b92915050565b60008060408385031215614767576147666146e9565b5b600061477585828601614705565b92505060206147868582860161473b565b9150509250929050565b60008115159050919050565b6147a581614790565b82525050565b60006020820190506147c0600083018461479c565b92915050565b6000819050919050565b60006147eb6147e66147e1846145d2565b6147c6565b6145d2565b9050919050565b60006147fd826147d0565b9050919050565b600061480f826147f2565b9050919050565b61481f81614804565b82525050565b600060208201905061483a6000830184614816565b92915050565b6148498161471a565b82525050565b60006020820190506148646000830184614840565b92915050565b600080600060608486031215614883576148826146e9565b5b600061489186828701614705565b93505060206148a286828701614705565b92505060406148b38682870161473b565b9150509250925092565b6000602082840312156148d3576148d26146e9565b5b60006148e18482850161473b565b91505092915050565b600060ff82169050919050565b614900816148ea565b82525050565b600060208201905061491b60008301846148f7565b92915050565b600060208284031215614937576149366146e9565b5b600061494584828501614705565b91505092915050565b61495781614790565b811461496257600080fd5b50565b6000813590506149748161494e565b92915050565b60008060408385031215614991576149906146e9565b5b600061499f8582860161473b565b92505060206149b085828601614965565b9150509250929050565b6000602082840312156149d0576149cf6146e9565b5b60006149de84828501614965565b91505092915050565b600080604083850312156149fe576149fd6146e9565b5b6000614a0c85828601614705565b9250506020614a1d85828601614705565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614a6e57607f821691505b602082108103614a8157614a80614a27565b5b50919050565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b6000614ae3602a83614639565b9150614aee82614a87565b604082019050919050565b60006020820190508181036000830152614b1281614ad6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614b4f602083614639565b9150614b5a82614b19565b602082019050919050565b60006020820190508181036000830152614b7e81614b42565b9050919050565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b6000614bbb601f83614639565b9150614bc682614b85565b602082019050919050565b60006020820190508181036000830152614bea81614bae565b9050919050565b7f57652063616e206e6f74206578636c75646520556e697377617020726f75746560008201527f722e000000000000000000000000000000000000000000000000000000000000602082015250565b6000614c4d602283614639565b9150614c5882614bf1565b604082019050919050565b60006020820190508181036000830152614c7c81614c40565b9050919050565b7f4163636f756e7420616c7265616479206578636c756465640000000000000000600082015250565b6000614cb9601883614639565b9150614cc482614c83565b602082019050919050565b60006020820190508181036000830152614ce881614cac565b9050919050565b7f4578636c75646564206c69737420697320746f6f206c6f6e6700000000000000600082015250565b6000614d25601983614639565b9150614d3082614cef565b602082019050919050565b60006020820190508181036000830152614d5481614d18565b9050919050565b7f54726164696e6720616c726561647920656e61626c6564210000000000000000600082015250565b6000614d91601883614639565b9150614d9c82614d5b565b602082019050919050565b60006020820190508181036000830152614dc081614d84565b9050919050565b6000604082019050614ddc6000830185614604565b614de96020830184614840565b9392505050565b600081519050614dff8161494e565b92915050565b600060208284031215614e1b57614e1a6146e9565b5b6000614e2984828501614df0565b91505092915050565b7f696e73756666696369656e74204554482062616c616e63650000000000000000600082015250565b6000614e68601883614639565b9150614e7382614e32565b602082019050919050565b60006020820190508181036000830152614e9781614e5b565b9050919050565b7f43616e6e6f7420736574207472616e73616374696f6e20616d6f756e74206c6560008201527f7373207468616e20302e312070657263656e74206f6620696e697469616c205460208201527f6f74616c20537570706c79210000000000000000000000000000000000000000604082015250565b6000614f20604c83614639565b9150614f2b82614e9e565b606082019050919050565b60006020820190508181036000830152614f4f81614f13565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614fb2602683614639565b9150614fbd82614f56565b604082019050919050565b60006020820190508181036000830152614fe181614fa5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000615044602483614639565b915061504f82614fe8565b604082019050919050565b6000602082019050818103600083015261507381615037565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006150d6602283614639565b91506150e18261507a565b604082019050919050565b60006020820190508181036000830152615105816150c9565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000615168602583614639565b91506151738261510c565b604082019050919050565b600060208201905081810360008301526151978161515b565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006151fa602383614639565b91506152058261519e565b604082019050919050565b60006020820190508181036000830152615229816151ed565b9050919050565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b600061528c602983614639565b915061529782615230565b604082019050919050565b600060208201905081810360008301526152bb8161527f565b9050919050565b7f54726164696e67206e6f742079657420656e61626c6564210000000000000000600082015250565b60006152f8601883614639565b9150615303826152c2565b602082019050919050565b60006020820190508181036000830152615327816152eb565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006153688261471a565b91506153738361471a565b9250828210156153865761538561532e565b5b828203905092915050565b600061539c8261471a565b91506153a78361471a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156153dc576153db61532e565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061541d601b83614639565b9150615428826153e7565b602082019050919050565b6000602082019050818103600083015261544c81615410565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506154c0816146ee565b92915050565b6000602082840312156154dc576154db6146e9565b5b60006154ea848285016154b1565b91505092915050565b6000819050919050565b600061551861551361550e846154f3565b6147c6565b61471a565b9050919050565b615528816154fd565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615563816145f2565b82525050565b6000615575838361555a565b60208301905092915050565b6000602082019050919050565b60006155998261552e565b6155a38185615539565b93506155ae8361554a565b8060005b838110156155df5781516155c68882615569565b97506155d183615581565b9250506001810190506155b2565b5085935050505092915050565b600060a0820190506156016000830188614840565b61560e602083018761551f565b8181036040830152615620818661558e565b905061562f6060830185614604565b61563c6080830184614840565b9695505050505050565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b60006156a2602883614639565b91506156ad82615646565b604082019050919050565b600060208201905081810360008301526156d181615695565b9050919050565b60006156e38261471a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036157155761571461532e565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061575a8261471a565b91506157658361471a565b92508261577557615774615720565b5b828204905092915050565b600061578b8261471a565b91506157968361471a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156157cf576157ce61532e565b5b828202905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b6000615836602183614639565b9150615841826157da565b604082019050919050565b6000602082019050818103600083015261586581615829565b905091905056fe45524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212208a536ae3ee9d062ed825220d223f2bc7b1de4bc763b2e3c27f7e1112a5da3be564736f6c634300080e0033
Deployed Bytecode Sourcemap
27360:19729:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29156:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29246:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30600:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31512:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29336:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30877:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31681:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33602:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30786:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32748:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28988:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45436:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33011:129;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32002:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44761:111;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33148:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29394:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33863:512;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39334:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30980:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29066:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18743:148;;;;;;;;;;;;;:::i;:::-;;45216:212;;;;;;;;;;;;;:::i;:::-;;29479:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29575:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32505:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46008:147;;;;;;;;;;;;;:::i;:::-;;46917:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18107:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46163:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30691:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32228:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31186:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32633:107;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46600:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29030:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45567:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29112:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31361:143;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44880:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46356:148;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45702:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19046:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29527:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44998:210;;;;;;;;;;;;;:::i;:::-;;29156:83;;;;;;;;;;;;;:::o;29246:81::-;;;;;;;;;;;;;:::o;30600:83::-;30637:13;30670:5;30663:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30600:83;:::o;31512:161::-;31587:4;31604:39;31613:12;:10;:12::i;:::-;31627:7;31636:6;31604:8;:39::i;:::-;31661:4;31654:11;;31512:161;;;;:::o;29336:51::-;;;:::o;30877:95::-;30930:7;30957;;30950:14;;30877:95;:::o;31681:313::-;31779:4;31796:36;31806:6;31814:9;31825:6;31796:9;:36::i;:::-;31843:121;31852:6;31860:12;:10;:12::i;:::-;31874:89;31912:6;31874:89;;;;;;;;;;;;;;;;;:11;:19;31886:6;31874:19;;;;;;;;;;;;;;;:33;31894:12;:10;:12::i;:::-;31874:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;31843:8;:121::i;:::-;31982:4;31975:11;;31681:313;;;;;:::o;33602:253::-;33668:7;33707;;33696;:18;;33688:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33772:19;33795:10;:8;:10::i;:::-;33772:33;;33823:24;33835:11;33823:7;:11;;:24;;;;:::i;:::-;33816:31;;;33602:253;;;:::o;30786:83::-;30827:5;30852:9;;;;;;;;;;;30845:16;;30786:83;:::o;32748:95::-;32794:7;32821:14;;32814:21;;32748:95;:::o;28988:33::-;;;;:::o;45436:123::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45542:9:::1;45518:21;;:33;;;;;;;;;;;;;;;;;;45436:123:::0;:::o;33011:129::-;33074:7;33101:31;;33094:38;;33011:129;:::o;32002:218::-;32090:4;32107:83;32116:12;:10;:12::i;:::-;32130:7;32139:50;32178:10;32139:11;:25;32151:12;:10;:12::i;:::-;32139:25;;;;;;;;;;;;;;;:34;32165:7;32139:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;32107:8;:83::i;:::-;32208:4;32201:11;;32002:218;;;;:::o;44761:111::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44860:4:::1;44830:18;:27;44849:7;44830:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;44761:111:::0;:::o;33148:446::-;33238:7;33277;;33266;:18;;33258:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;33336:17;33331:256;;33370:15;33388:19;33399:7;33388:10;:19::i;:::-;:27;;;33370:45;;33437:7;33430:14;;;;;33331:256;33477:23;33503:19;33514:7;33503:10;:19::i;:::-;:35;;;33477:61;;33560:15;33553:22;;;33148:446;;;;;:::o;29394:38::-;;;:::o;33863:512::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33956:42:::1;33945:53;;:7;:53;;::::0;33937:100:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34057:11;:20;34069:7;34057:20;;;;;;;;;;;;;;;;;;;;;;;;;34056:21;34048:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34144:3;34125:9;:16;;;;:22;34117:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;34210:1;34191:7;:16;34199:7;34191:16;;;;;;;;;;;;;;;;:20;34188:108;;;34247:37;34267:7;:16;34275:7;34267:16;;;;;;;;;;;;;;;;34247:19;:37::i;:::-;34228:7;:16;34236:7;34228:16;;;;;;;;;;;;;;;:56;;;;34188:108;34329:4;34306:11;:20;34318:7;34306:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;34344:9;34359:7;34344:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33863:512:::0;:::o;39334:123::-;39398:4;39422:18;:27;39441:7;39422:27;;;;;;;;;;;;;;;;;;;;;;;;;39415:34;;39334:123;;;:::o;30980:198::-;31046:7;31070:11;:20;31082:7;31070:20;;;;;;;;;;;;;;;;;;;;;;;;;31066:49;;;31099:7;:16;31107:7;31099:16;;;;;;;;;;;;;;;;31092:23;;;;31066:49;31133:37;31153:7;:16;31161:7;31153:16;;;;;;;;;;;;;;;;31133:19;:37::i;:::-;31126:44;;30980:198;;;;:::o;29066:37::-;;;;:::o;18743:148::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;18850:1:::1;18813:40;;18834:6;::::0;::::1;;;;;;;;18813:40;;;;;;;;;;;;18881:1;18864:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;18743:148::o:0;45216:212::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45291:1:::1;45274:14;:18;;;;45314:1;45303:8;:12;;;;45347:1;45326:18;:22;;;;45378:1;45359:16;:20;;;;45415:5;45390:22;::::0;:30:::1;;;;;;;;;;;;;;;;;;45216:212::o:0;29479:41::-;;;;;;;;;;;;:::o;29575:50::-;;;;:::o;32505:120::-;32573:4;32597:11;:20;32609:7;32597:20;;;;;;;;;;;;;;;;;;;;;;;;;32590:27;;32505:120;;;:::o;46008:147::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46070:15:::1;;;;;;;;;;;46069:16;46061:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;46143:4;46125:15;;:22;;;;;;;;;;;;;;;;;;46008:147::o:0;46917:167::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;47042:10:::1;47035:27;;;47063:3;47068:7;47035:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46917:167:::0;;;:::o;18107:79::-;18145:7;18172:6;;;;;;;;;;;18165:13;;18107:79;:::o;46163:118::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46265:8:::1;46240:22;::::0;:33:::1;;;;;;;;;;;;;;;;;;46163:118:::0;:::o;30691:87::-;30730:13;30763:7;30756:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30691:87;:::o;32228:269::-;32321:4;32338:129;32347:12;:10;:12::i;:::-;32361:7;32370:96;32409:15;32370:96;;;;;;;;;;;;;;;;;:11;:25;32382:12;:10;:12::i;:::-;32370:25;;;;;;;;;;;;;;;:34;32396:7;32370:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;32338:8;:129::i;:::-;32485:4;32478:11;;32228:269;;;;:::o;31186:167::-;31264:4;31281:42;31291:12;:10;:12::i;:::-;31305:9;31316:6;31281:9;:42::i;:::-;31341:4;31334:11;;31186:167;;;;:::o;32633:107::-;32685:7;32712:20;;32705:27;;32633:107;:::o;46600:206::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46713:9:::1;46688:21;:34;;46680:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;46770:7;:5;:7::i;:::-;46762:25;;:36;46788:9;46762:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46600:206:::0;:::o;29030:27::-;;;;:::o;45567:127::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45677:9:::1;45651:23;;:35;;;;;;;;;;;;;;;;;;45567:127:::0;:::o;29112:35::-;;;;:::o;31361:143::-;31442:7;31469:11;:18;31481:5;31469:18;;;;;;;;;;;;;;;:27;31488:7;31469:27;;;;;;;;;;;;;;;;31462:34;;31361:143;;;;:::o;44880:110::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;44977:5:::1;44947:18;:27;44966:7;44947:27;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;44880:110:::0;:::o;46356:148::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46485:11:::1;46451:31;:45;;;;46356:148:::0;:::o;45702:298::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45837:19:::1;45805:29;:51;45797:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;45963:29;45948:12;:44;;;;45702:298:::0;:::o;19046:244::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19155:1:::1;19135:22;;:8;:22;;::::0;19127:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;19245:8;19216:38;;19237:6;::::0;::::1;;;;;;;;19216:38;;;;;;;;;;;;19274:8;19265:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;19046:244:::0;:::o;29527:35::-;;;;;;;;;;;;;:::o;44998:210::-;18329:12;:10;:12::i;:::-;18319:22;;:6;;;;;;;;;;:22;;;18311:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;45072:1:::1;45055:14;:18;;;;45095:1;45084:8;:12;;;;45128:1;45107:18;:22;;;;45159:1;45140:16;:20;;;;45196:4;45171:22;::::0;:29:::1;;;;;;;;;;;;;;;;;;44998:210::o:0;10513:115::-;10566:15;10609:10;10594:26;;10513:115;:::o;39465:329::-;39575:1;39558:19;;:5;:19;;;39550:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39656:1;39637:21;;:7;:21;;;39629:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39732:6;39702:11;:18;39714:5;39702:18;;;;;;;;;;;;;;;:27;39721:7;39702:27;;;;;;;;;;;;;;;:36;;;;39770:7;39754:32;;39763:5;39754:32;;;39779:6;39754:32;;;;;;:::i;:::-;;;;;;;;39465:329;;;:::o;39802:1489::-;39940:1;39924:18;;:4;:18;;;39916:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40017:1;40003:16;;:2;:16;;;39995:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40087:1;40078:6;:10;40070:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40237:15;;;;;;;;;;;40236:16;:35;;;;;40264:7;:5;:7::i;:::-;40256:15;;:4;:15;;;;40236:35;40233:101;;;40288:34;;;;;;;;;;:::i;:::-;;;;;;;;40233:101;40638:28;40669:24;40687:4;40669:9;:24::i;:::-;40638:55;;40704:24;40755:31;;40731:20;:55;;40704:82;;40815:19;:55;;;;;40852:18;;;;;;;;;;;40851:19;40815:55;:93;;;;;40895:13;40887:21;;:4;:21;;;;40815:93;:132;;;;;40925:22;;;;;;;;;;40815:132;40797:376;;;40997:31;;40974:54;;41116:45;41140:20;41116:23;:45::i;:::-;40797:376;41251:30;41266:4;41271:2;41274:6;41251:14;:30::i;:::-;39905:1386;;39802:1489;;;:::o;6923:192::-;7009:7;7042:1;7037;:6;;7045:12;7029:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7069:9;7085:1;7081;:5;;;;:::i;:::-;7069:17;;7106:1;7099:8;;;6923:192;;;;;:::o;37260:163::-;37301:7;37322:15;37339;37358:19;:17;:19::i;:::-;37321:56;;;;37395:20;37407:7;37395;:11;;:20;;;;:::i;:::-;37388:27;;;;37260:163;:::o;8321:132::-;8379:7;8406:39;8410:1;8413;8406:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;8399:46;;8321:132;;;;:::o;6020:181::-;6078:7;6098:9;6114:1;6110;:5;;;;:::i;:::-;6098:17;;6139:1;6134;:6;;6126:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;6192:1;6185:8;;;6020:181;;;;:::o;35172:697::-;35231:19;;:::i;:::-;35263:24;35290:20;35302:7;35290:11;:20::i;:::-;35263:47;;35321:24;35348:112;35360:7;35369:3;:18;;;35389:3;:12;;;35403:3;:22;;;35427:3;:20;;;35449:10;:8;:10::i;:::-;35348:11;:112::i;:::-;35321:139;;35480:381;;;;;;;;35507:3;:11;;;35480:381;;;;35533:3;:19;;;35480:381;;;;35567:3;:18;;;35480:381;;;;35600:3;:12;;;35480:381;;;;35627:3;:22;;;35480:381;;;;35664:3;:20;;;35480:381;;;;35699:3;:19;;;35480:381;;;;35733:3;:18;;;35480:381;;;;35766:3;:12;;;35480:381;;;;35793:3;:22;;;35480:381;;;;35830:3;:20;;;35480:381;;;35473:388;;;;35172:697;;;:::o;41300:616::-;29834:4;29813:18;;:25;;;;;;;;;;;;;;;;;;41445:21:::1;41483:1;41469:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41445:40;;41514:4;41496;41501:1;41496:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;::::0;::::1;41540:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41530:4;41535:1;41530:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;::::0;::::1;41575:62;41592:4;41607:15;41625:11;41575:8;:62::i;:::-;41676:15;:66;;;41757:11;41783:1;41827:4;41846:21;;;;;;;;;;;41882:15;41676:232;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;41374:542;29882:5:::0;29861:18;;:26;;;;;;;;;;;;;;;;;;41300:616;:::o;41997:1222::-;42094:18;:26;42113:6;42094:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;42124:18;:29;42143:9;42124:29;;;;;;;;;;;;;;;;;;;;;;;;;42094:59;42091:220;;;42169:14;:12;:14::i;:::-;42091:220;;;42242:12;;42232:6;:22;;42224:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;42091:220;42323:22;42348:18;42359:6;42348:10;:18::i;:::-;42323:43;;42377:62;42398:2;:19;;;42419:2;:19;;;42377:20;:62::i;:::-;42450:124;42465:2;:17;;;42484:2;:11;;;42497:2;:21;;;42520:2;:17;;;42539:2;:11;;;42552:2;:21;;;42450:14;:124::i;:::-;42591:11;:19;42603:6;42591:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;42615:11;:22;42627:9;42615:22;;;;;;;;;;;;;;;;;;;;;;;;;42614:23;42591:46;42587:520;;;42654:52;42676:6;42684:9;42695:6;42703:2;42654:21;:52::i;:::-;42587:520;;;42729:11;:19;42741:6;42729:19;;;;;;;;;;;;;;;;;;;;;;;;;42728:20;:46;;;;;42752:11;:22;42764:9;42752:22;;;;;;;;;;;;;;;;;;;;;;;;;42728:46;42724:383;;;42791:42;42811:6;42819:9;42830:2;42791:19;:42::i;:::-;42724:383;;;42856:11;:19;42868:6;42856:19;;;;;;;;;;;;;;;;;;;;;;;;;42855:20;:47;;;;;42880:11;:22;42892:9;42880:22;;;;;;;;;;;;;;;;;;;;;;;;;42879:23;42855:47;42851:256;;;42919:40;42937:6;42945:9;42956:2;42919:17;:40::i;:::-;42851:256;;;42981:11;:19;42993:6;42981:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;43004:11;:22;43016:9;43004:22;;;;;;;;;;;;;;;;;;;;;;;;;42981:45;42977:130;;;43043:52;43065:6;43073:9;43084:6;43092:2;43043:21;:52::i;:::-;42977:130;42851:256;42724:383;42587:520;43122:18;:26;43141:6;43122:26;;;;;;;;;;;;;;;;;;;;;;;;;:59;;;;43152:18;:29;43171:9;43152:29;;;;;;;;;;;;;;;;;;;;;;;;;43122:59;43119:92;;;43196:15;:13;:15::i;:::-;43119:92;42080:1139;41997:1222;;;:::o;37431:555::-;37481:7;37490;37510:15;37528:7;;37510:25;;37546:15;37564:7;;37546:25;;37587:9;37582:289;37606:9;:16;;;;37602:1;:20;37582:289;;;37672:7;37648;:21;37656:9;37666:1;37656:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37648:21;;;;;;;;;;;;;;;;:31;:66;;;;37707:7;37683;:21;37691:9;37701:1;37691:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37683:21;;;;;;;;;;;;;;;;:31;37648:66;37644:97;;;37724:7;;37733;;37716:25;;;;;;;;;37644:97;37766:34;37778:7;:21;37786:9;37796:1;37786:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37778:21;;;;;;;;;;;;;;;;37766:7;:11;;:34;;;;:::i;:::-;37756:44;;37825:34;37837:7;:21;37845:9;37855:1;37845:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;37837:21;;;;;;;;;;;;;;;;37825:7;:11;;:34;;;;:::i;:::-;37815:44;;37624:3;;;;;:::i;:::-;;;;37582:289;;;;37895:20;37907:7;;37895;;:11;;:20;;;;:::i;:::-;37885:7;:30;37881:61;;;37925:7;;37934;;37917:25;;;;;;;;37881:61;37961:7;37970;37953:25;;;;;;37431:555;;;:::o;8949:278::-;9035:7;9067:1;9063;:5;9070:12;9055:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9094:9;9110:1;9106;:5;;;;:::i;:::-;9094:17;;9218:1;9211:8;;;8949:278;;;;;:::o;35877:594::-;35937:20;;:::i;:::-;35970:22;35995:31;36018:7;35995:22;:31::i;:::-;35970:56;;36037:16;36056:25;36073:7;36056:16;:25::i;:::-;36037:44;;36092:26;36121:35;36148:7;36121:26;:35::i;:::-;36092:64;;36167:24;36194:33;36219:7;36194:24;:33::i;:::-;36167:60;;36238:23;36264:87;36334:16;36264:65;36310:18;36264:41;36296:8;36264:27;36276:14;36264:7;:11;;:27;;;;:::i;:::-;:31;;:41;;;;:::i;:::-;:45;;:65;;;;:::i;:::-;:69;;:87;;;;:::i;:::-;36238:113;;36369:94;;;;;;;;36383:15;36369:94;;;;36400:14;36369:94;;;;36416:8;36369:94;;;;36426:18;36369:94;;;;36446:16;36369:94;;;36362:101;;;;;;;35877:594;;;:::o;36479:773::-;36656:20;;:::i;:::-;36689:15;36707:24;36719:11;36707:7;:11;;:24;;;;:::i;:::-;36689:42;;36742:22;36767:31;36786:11;36767:14;:18;;:31;;;;:::i;:::-;36742:56;;36809:16;36828:25;36841:11;36828:8;:12;;:25;;;;:::i;:::-;36809:44;;36864:26;36893:35;36916:11;36893:18;:22;;:35;;;;:::i;:::-;36864:64;;36939:24;36966:33;36987:11;36966:16;:20;;:33;;;;:::i;:::-;36939:60;;37010:23;37036:87;37104:18;37036:63;37090:8;37036:49;37068:16;37036:27;37048:14;37036:7;:11;;:27;;;;:::i;:::-;:31;;:49;;;;:::i;:::-;:53;;:63;;;;:::i;:::-;:67;;:87;;;;:::i;:::-;37010:113;;37141:103;;;;;;;;37155:7;37141:103;;;;37164:15;37141:103;;;;37181:14;37141:103;;;;37197:8;37141:103;;;;37207:18;37141:103;;;;37227:16;37141:103;;;37134:110;;;;;;;;36479:773;;;;;;;;:::o;39008:156::-;39068:1;39051:14;:18;;;;39099:1;39080:16;:20;;;;39122:1;39111:8;:12;;;;39155:1;39134:18;:22;;;;39008:156::o;37994:302::-;38120:44;38147:16;38120:7;:22;38136:4;38120:22;;;;;;;;;;;;;;;;:26;;:44;;;;:::i;:::-;38095:7;:22;38111:4;38095:22;;;;;;;;;;;;;;;:69;;;;38178:11;:26;38198:4;38178:26;;;;;;;;;;;;;;;;;;;;;;;;;38175:113;;;38244:44;38271:16;38244:7;:22;38260:4;38244:22;;;;;;;;;;;;;;;;:26;;:44;;;;:::i;:::-;38219:7;:22;38235:4;38219:22;;;;;;;;;;;;;;;:69;;;;38175:113;37994:302;;:::o;34476:688::-;34669:41;34701:8;34669:27;34681:14;34669:7;;:11;;:27;;;;:::i;:::-;:31;;:41;;;;:::i;:::-;34659:7;:51;;;;34744:40;34769:14;34744:20;;:24;;:40;;;;:::i;:::-;34721:20;:63;;;;34805:21;34817:8;34805:7;;:11;;:21;;;;:::i;:::-;34795:7;:31;;;;34854:28;34873:8;34854:14;;:18;;:28;;;;:::i;:::-;34837:14;:45;;;;34930:56;34967:18;34930:7;:32;34938:23;;;;;;;;;;;34930:32;;;;;;;;;;;;;;;;:36;;:56;;;;:::i;:::-;34895:7;:32;34903:23;;;;;;;;;;;34895:32;;;;;;;;;;;;;;;:91;;;;35001:11;:36;35013:23;;;;;;;;;;;35001:36;;;;;;;;;;;;;;;;;;;;;;;;;34997:160;;;35089:56;35126:18;35089:7;:32;35097:23;;;;;;;;;;;35089:32;;;;;;;;;;;;;;;;:36;;:56;;;;:::i;:::-;35054:7;:32;35062:23;;;;;;;;;;;35054:32;;;;;;;;;;;;;;;:91;;;;34997:160;34476:688;;;;;;:::o;43917:377::-;44061:28;44081:7;44061;:15;44069:6;44061:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44043:7;:15;44051:6;44043:15;;;;;;;;;;;;;;;:46;;;;44118:31;44138:2;:10;;;44118:7;:15;44126:6;44118:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;44100:7;:15;44108:6;44100:15;;;;;;;;;;;;;;;:49;;;;44181:42;44204:2;:18;;;44181:7;:18;44189:9;44181:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;44160:7;:18;44168:9;44160:18;;;;;;;;;;;;;;;:63;;;;44256:9;44239:47;;44248:6;44239:47;;;44267:2;:18;;;44239:47;;;;;;:::i;:::-;;;;;;;;43917:377;;;;:::o;43534:375::-;43659:31;43679:2;:10;;;43659:7;:15;43667:6;43659:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;43641:7;:15;43649:6;43641:15;;;;;;;;;;;;;;;:49;;;;43722:42;43745:2;:18;;;43722:7;:18;43730:9;43722:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;43701:7;:18;43709:9;43701:18;;;;;;;;;;;;;;;:63;;;;43796:42;43819:2;:18;;;43796:7;:18;43804:9;43796:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;43775:7;:18;43783:9;43775:18;;;;;;;;;;;;;;;:63;;;;43871:9;43854:47;;43863:6;43854:47;;;43882:2;:18;;;43854:47;;;;;;:::i;:::-;;;;;;;;43534:375;;;:::o;43227:299::-;43350:31;43370:2;:10;;;43350:7;:15;43358:6;43350:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;43332:7;:15;43340:6;43332:15;;;;;;;;;;;;;;;:49;;;;43413:42;43436:2;:18;;;43413:7;:18;43421:9;43413:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;43392:7;:18;43400:9;43392:18;;;;;;;;;;;;;;;:63;;;;43488:9;43471:47;;43480:6;43471:47;;;43499:2;:18;;;43471:47;;;;;;:::i;:::-;;;;;;;;43227:299;;;:::o;44302:451::-;44446:28;44466:7;44446;:15;44454:6;44446:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;44428:7;:15;44436:6;44428:15;;;;;;;;;;;;;;;:46;;;;44503:31;44523:2;:10;;;44503:7;:15;44511:6;44503:15;;;;;;;;;;;;;;;;:19;;:31;;;;:::i;:::-;44485:7;:15;44493:6;44485:15;;;;;;;;;;;;;;;:49;;;;44566:42;44589:2;:18;;;44566:7;:18;44574:9;44566:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;44545:7;:18;44553:9;44545:18;;;;;;;;;;;;;;;:63;;;;44640:42;44663:2;:18;;;44640:7;:18;44648:9;44640:18;;;;;;;;;;;;;;;;:22;;:42;;;;:::i;:::-;44619:7;:18;44627:9;44619:18;;;;;;;;;;;;;;;:63;;;;44715:9;44698:47;;44707:6;44698:47;;;44726:2;:18;;;44698:47;;;;;;:::i;:::-;;;;;;;;44302:451;;;;:::o;39172:154::-;39233:1;39216:14;:18;;;;39264:1;39245:16;:20;;;;39297:1;39276:18;:22;;;;39320:1;39309:8;:12;;;;39172:154::o;6484:136::-;6542:7;6569:43;6573:1;6576;6569:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;6562:50;;6484:136;;;;:::o;38304:168::-;38375:7;38402:62;38448:5;38402:27;38414:14;;38402:7;:11;;:27;;;;:::i;:::-;:31;;:62;;;;:::i;:::-;38395:69;;38304:168;;;:::o;38480:156::-;38545:7;38572:56;38612:5;38572:21;38584:8;;38572:7;:11;;:21;;;;:::i;:::-;:25;;:56;;;;:::i;:::-;38565:63;;38480:156;;;:::o;38644:176::-;38719:7;38746:66;38796:5;38746:31;38758:18;;38746:7;:11;;:31;;;;:::i;:::-;:35;;:66;;;;:::i;:::-;38739:73;;38644:176;;;:::o;38828:172::-;38901:7;38928:64;38976:5;38928:29;38940:16;;38928:7;:11;;:29;;;;:::i;:::-;:33;;:64;;;;:::i;:::-;38921:71;;38828:172;;;:::o;7374:471::-;7432:7;7682:1;7677;:6;7673:47;;7707:1;7700:8;;;;7673:47;7732:9;7748:1;7744;:5;;;;:::i;:::-;7732:17;;7777:1;7772;7768;:5;;;;:::i;:::-;:10;7760:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;7836:1;7829:8;;;7374:471;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:99::-;645:6;679:5;673:12;663:22;;593:99;;;:::o;698:169::-;782:11;816:6;811:3;804:19;856:4;851:3;847:14;832:29;;698:169;;;;:::o;873:307::-;941:1;951:113;965:6;962:1;959:13;951:113;;;1050:1;1045:3;1041:11;1035:18;1031:1;1026:3;1022:11;1015:39;987:2;984:1;980:10;975:15;;951:113;;;1082:6;1079:1;1076:13;1073:101;;;1162:1;1153:6;1148:3;1144:16;1137:27;1073:101;922:258;873:307;;;:::o;1186:102::-;1227:6;1278:2;1274:7;1269:2;1262:5;1258:14;1254:28;1244:38;;1186:102;;;:::o;1294:364::-;1382:3;1410:39;1443:5;1410:39;:::i;:::-;1465:71;1529:6;1524:3;1465:71;:::i;:::-;1458:78;;1545:52;1590:6;1585:3;1578:4;1571:5;1567:16;1545:52;:::i;:::-;1622:29;1644:6;1622:29;:::i;:::-;1617:3;1613:39;1606:46;;1386:272;1294:364;;;;:::o;1664:313::-;1777:4;1815:2;1804:9;1800:18;1792:26;;1864:9;1858:4;1854:20;1850:1;1839:9;1835:17;1828:47;1892:78;1965:4;1956:6;1892:78;:::i;:::-;1884:86;;1664:313;;;;:::o;2064:117::-;2173:1;2170;2163:12;2310:122;2383:24;2401:5;2383:24;:::i;:::-;2376:5;2373:35;2363:63;;2422:1;2419;2412:12;2363:63;2310:122;:::o;2438:139::-;2484:5;2522:6;2509:20;2500:29;;2538:33;2565:5;2538:33;:::i;:::-;2438:139;;;;:::o;2583:77::-;2620:7;2649:5;2638:16;;2583:77;;;:::o;2666:122::-;2739:24;2757:5;2739:24;:::i;:::-;2732:5;2729:35;2719:63;;2778:1;2775;2768:12;2719:63;2666:122;:::o;2794:139::-;2840:5;2878:6;2865:20;2856:29;;2894:33;2921:5;2894:33;:::i;:::-;2794:139;;;;:::o;2939:474::-;3007:6;3015;3064:2;3052:9;3043:7;3039:23;3035:32;3032:119;;;3070:79;;:::i;:::-;3032:119;3190:1;3215:53;3260:7;3251:6;3240:9;3236:22;3215:53;:::i;:::-;3205:63;;3161:117;3317:2;3343:53;3388:7;3379:6;3368:9;3364:22;3343:53;:::i;:::-;3333:63;;3288:118;2939:474;;;;;:::o;3419:90::-;3453:7;3496:5;3489:13;3482:21;3471:32;;3419:90;;;:::o;3515:109::-;3596:21;3611:5;3596:21;:::i;:::-;3591:3;3584:34;3515:109;;:::o;3630:210::-;3717:4;3755:2;3744:9;3740:18;3732:26;;3768:65;3830:1;3819:9;3815:17;3806:6;3768:65;:::i;:::-;3630:210;;;;:::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:118::-;4911:24;4929:5;4911:24;:::i;:::-;4906:3;4899:37;4824:118;;:::o;4948:222::-;5041:4;5079:2;5068:9;5064:18;5056:26;;5092:71;5160:1;5149:9;5145:17;5136:6;5092:71;:::i;:::-;4948:222;;;;:::o;5176:619::-;5253:6;5261;5269;5318:2;5306:9;5297:7;5293:23;5289:32;5286:119;;;5324:79;;:::i;:::-;5286:119;5444:1;5469:53;5514:7;5505:6;5494:9;5490:22;5469:53;:::i;:::-;5459:63;;5415:117;5571:2;5597:53;5642:7;5633:6;5622:9;5618:22;5597:53;:::i;:::-;5587:63;;5542:118;5699:2;5725:53;5770:7;5761:6;5750:9;5746:22;5725:53;:::i;:::-;5715:63;;5670:118;5176:619;;;;;:::o;5801:329::-;5860:6;5909:2;5897:9;5888:7;5884:23;5880:32;5877:119;;;5915:79;;:::i;:::-;5877:119;6035:1;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6006:117;5801:329;;;;:::o;6136:86::-;6171:7;6211:4;6204:5;6200:16;6189:27;;6136:86;;;:::o;6228:112::-;6311:22;6327:5;6311:22;:::i;:::-;6306:3;6299:35;6228:112;;:::o;6346:214::-;6435:4;6473:2;6462:9;6458:18;6450:26;;6486:67;6550:1;6539:9;6535:17;6526:6;6486:67;:::i;:::-;6346:214;;;;:::o;6566:329::-;6625:6;6674:2;6662:9;6653:7;6649:23;6645:32;6642:119;;;6680:79;;:::i;:::-;6642:119;6800:1;6825:53;6870:7;6861:6;6850:9;6846:22;6825:53;:::i;:::-;6815:63;;6771:117;6566:329;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:323::-;7692:6;7741:2;7729:9;7720:7;7716:23;7712:32;7709:119;;;7747:79;;:::i;:::-;7709:119;7867:1;7892:50;7934:7;7925:6;7914:9;7910:22;7892:50;:::i;:::-;7882:60;;7838:114;7636:323;;;;:::o;7965:474::-;8033:6;8041;8090:2;8078:9;8069:7;8065:23;8061:32;8058:119;;;8096:79;;:::i;:::-;8058:119;8216:1;8241:53;8286:7;8277:6;8266:9;8262:22;8241:53;:::i;:::-;8231:63;;8187:117;8343:2;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8314:118;7965:474;;;;;:::o;8445:180::-;8493:77;8490:1;8483:88;8590:4;8587:1;8580:15;8614:4;8611:1;8604:15;8631:320;8675:6;8712:1;8706:4;8702:12;8692:22;;8759:1;8753:4;8749:12;8780:18;8770:81;;8836:4;8828:6;8824:17;8814:27;;8770:81;8898:2;8890:6;8887:14;8867:18;8864:38;8861:84;;8917:18;;:::i;:::-;8861:84;8682:269;8631:320;;;:::o;8957:229::-;9097:34;9093:1;9085:6;9081:14;9074:58;9166:12;9161:2;9153:6;9149:15;9142:37;8957:229;:::o;9192:366::-;9334:3;9355:67;9419:2;9414:3;9355:67;:::i;:::-;9348:74;;9431:93;9520:3;9431:93;:::i;:::-;9549:2;9544:3;9540:12;9533:19;;9192:366;;;:::o;9564:419::-;9730:4;9768:2;9757:9;9753:18;9745:26;;9817:9;9811:4;9807:20;9803:1;9792:9;9788:17;9781:47;9845:131;9971:4;9845:131;:::i;:::-;9837:139;;9564:419;;;:::o;9989:182::-;10129:34;10125:1;10117:6;10113:14;10106:58;9989:182;:::o;10177:366::-;10319:3;10340:67;10404:2;10399:3;10340:67;:::i;:::-;10333:74;;10416:93;10505:3;10416:93;:::i;:::-;10534:2;10529:3;10525:12;10518:19;;10177:366;;;:::o;10549:419::-;10715:4;10753:2;10742:9;10738:18;10730:26;;10802:9;10796:4;10792:20;10788:1;10777:9;10773:17;10766:47;10830:131;10956:4;10830:131;:::i;:::-;10822:139;;10549:419;;;:::o;10974:181::-;11114:33;11110:1;11102:6;11098:14;11091:57;10974:181;:::o;11161:366::-;11303:3;11324:67;11388:2;11383:3;11324:67;:::i;:::-;11317:74;;11400:93;11489:3;11400:93;:::i;:::-;11518:2;11513:3;11509:12;11502:19;;11161:366;;;:::o;11533:419::-;11699:4;11737:2;11726:9;11722:18;11714:26;;11786:9;11780:4;11776:20;11772:1;11761:9;11757:17;11750:47;11814:131;11940:4;11814:131;:::i;:::-;11806:139;;11533:419;;;:::o;11958:221::-;12098:34;12094:1;12086:6;12082:14;12075:58;12167:4;12162:2;12154:6;12150:15;12143:29;11958:221;:::o;12185:366::-;12327:3;12348:67;12412:2;12407:3;12348:67;:::i;:::-;12341:74;;12424:93;12513:3;12424:93;:::i;:::-;12542:2;12537:3;12533:12;12526:19;;12185:366;;;:::o;12557:419::-;12723:4;12761:2;12750:9;12746:18;12738:26;;12810:9;12804:4;12800:20;12796:1;12785:9;12781:17;12774:47;12838:131;12964:4;12838:131;:::i;:::-;12830:139;;12557:419;;;:::o;12982:174::-;13122:26;13118:1;13110:6;13106:14;13099:50;12982:174;:::o;13162:366::-;13304:3;13325:67;13389:2;13384:3;13325:67;:::i;:::-;13318:74;;13401:93;13490:3;13401:93;:::i;:::-;13519:2;13514:3;13510:12;13503:19;;13162:366;;;:::o;13534:419::-;13700:4;13738:2;13727:9;13723:18;13715:26;;13787:9;13781:4;13777:20;13773:1;13762:9;13758:17;13751:47;13815:131;13941:4;13815:131;:::i;:::-;13807:139;;13534:419;;;:::o;13959:175::-;14099:27;14095:1;14087:6;14083:14;14076:51;13959:175;:::o;14140:366::-;14282:3;14303:67;14367:2;14362:3;14303:67;:::i;:::-;14296:74;;14379:93;14468:3;14379:93;:::i;:::-;14497:2;14492:3;14488:12;14481:19;;14140:366;;;:::o;14512:419::-;14678:4;14716:2;14705:9;14701:18;14693:26;;14765:9;14759:4;14755:20;14751:1;14740:9;14736:17;14729:47;14793:131;14919:4;14793:131;:::i;:::-;14785:139;;14512:419;;;:::o;14937:174::-;15077:26;15073:1;15065:6;15061:14;15054:50;14937:174;:::o;15117:366::-;15259:3;15280:67;15344:2;15339:3;15280:67;:::i;:::-;15273:74;;15356:93;15445:3;15356:93;:::i;:::-;15474:2;15469:3;15465:12;15458:19;;15117:366;;;:::o;15489:419::-;15655:4;15693:2;15682:9;15678:18;15670:26;;15742:9;15736:4;15732:20;15728:1;15717:9;15713:17;15706:47;15770:131;15896:4;15770:131;:::i;:::-;15762:139;;15489:419;;;:::o;15914:332::-;16035:4;16073:2;16062:9;16058:18;16050:26;;16086:71;16154:1;16143:9;16139:17;16130:6;16086:71;:::i;:::-;16167:72;16235:2;16224:9;16220:18;16211:6;16167:72;:::i;:::-;15914:332;;;;;:::o;16252:137::-;16306:5;16337:6;16331:13;16322:22;;16353:30;16377:5;16353:30;:::i;:::-;16252:137;;;;:::o;16395:345::-;16462:6;16511:2;16499:9;16490:7;16486:23;16482:32;16479:119;;;16517:79;;:::i;:::-;16479:119;16637:1;16662:61;16715:7;16706:6;16695:9;16691:22;16662:61;:::i;:::-;16652:71;;16608:125;16395:345;;;;:::o;16746:174::-;16886:26;16882:1;16874:6;16870:14;16863:50;16746:174;:::o;16926:366::-;17068:3;17089:67;17153:2;17148:3;17089:67;:::i;:::-;17082:74;;17165:93;17254:3;17165:93;:::i;:::-;17283:2;17278:3;17274:12;17267:19;;16926:366;;;:::o;17298:419::-;17464:4;17502:2;17491:9;17487:18;17479:26;;17551:9;17545:4;17541:20;17537:1;17526:9;17522:17;17515:47;17579:131;17705:4;17579:131;:::i;:::-;17571:139;;17298:419;;;:::o;17723:300::-;17863:34;17859:1;17851:6;17847:14;17840:58;17932:34;17927:2;17919:6;17915:15;17908:59;18001:14;17996:2;17988:6;17984:15;17977:39;17723:300;:::o;18029:366::-;18171:3;18192:67;18256:2;18251:3;18192:67;:::i;:::-;18185:74;;18268:93;18357:3;18268:93;:::i;:::-;18386:2;18381:3;18377:12;18370:19;;18029:366;;;:::o;18401:419::-;18567:4;18605:2;18594:9;18590:18;18582:26;;18654:9;18648:4;18644:20;18640:1;18629:9;18625:17;18618:47;18682:131;18808:4;18682:131;:::i;:::-;18674:139;;18401:419;;;:::o;18826:225::-;18966:34;18962:1;18954:6;18950:14;18943:58;19035:8;19030:2;19022:6;19018:15;19011:33;18826:225;:::o;19057:366::-;19199:3;19220:67;19284:2;19279:3;19220:67;:::i;:::-;19213:74;;19296:93;19385:3;19296:93;:::i;:::-;19414:2;19409:3;19405:12;19398:19;;19057:366;;;:::o;19429:419::-;19595:4;19633:2;19622:9;19618:18;19610:26;;19682:9;19676:4;19672:20;19668:1;19657:9;19653:17;19646:47;19710:131;19836:4;19710:131;:::i;:::-;19702:139;;19429:419;;;:::o;19854:223::-;19994:34;19990:1;19982:6;19978:14;19971:58;20063:6;20058:2;20050:6;20046:15;20039:31;19854:223;:::o;20083:366::-;20225:3;20246:67;20310:2;20305:3;20246:67;:::i;:::-;20239:74;;20322:93;20411:3;20322:93;:::i;:::-;20440:2;20435:3;20431:12;20424:19;;20083:366;;;:::o;20455:419::-;20621:4;20659:2;20648:9;20644:18;20636:26;;20708:9;20702:4;20698:20;20694:1;20683:9;20679:17;20672:47;20736:131;20862:4;20736:131;:::i;:::-;20728:139;;20455:419;;;:::o;20880:221::-;21020:34;21016:1;21008:6;21004:14;20997:58;21089:4;21084:2;21076:6;21072:15;21065:29;20880:221;:::o;21107:366::-;21249:3;21270:67;21334:2;21329:3;21270:67;:::i;:::-;21263:74;;21346:93;21435:3;21346:93;:::i;:::-;21464:2;21459:3;21455:12;21448:19;;21107:366;;;:::o;21479:419::-;21645:4;21683:2;21672:9;21668:18;21660:26;;21732:9;21726:4;21722:20;21718:1;21707:9;21703:17;21696:47;21760:131;21886:4;21760:131;:::i;:::-;21752:139;;21479:419;;;:::o;21904:224::-;22044:34;22040:1;22032:6;22028:14;22021:58;22113:7;22108:2;22100:6;22096:15;22089:32;21904:224;:::o;22134:366::-;22276:3;22297:67;22361:2;22356:3;22297:67;:::i;:::-;22290:74;;22373:93;22462:3;22373:93;:::i;:::-;22491:2;22486:3;22482:12;22475:19;;22134:366;;;:::o;22506:419::-;22672:4;22710:2;22699:9;22695:18;22687:26;;22759:9;22753:4;22749:20;22745:1;22734:9;22730:17;22723:47;22787:131;22913:4;22787:131;:::i;:::-;22779:139;;22506:419;;;:::o;22931:222::-;23071:34;23067:1;23059:6;23055:14;23048:58;23140:5;23135:2;23127:6;23123:15;23116:30;22931:222;:::o;23159:366::-;23301:3;23322:67;23386:2;23381:3;23322:67;:::i;:::-;23315:74;;23398:93;23487:3;23398:93;:::i;:::-;23516:2;23511:3;23507:12;23500:19;;23159:366;;;:::o;23531:419::-;23697:4;23735:2;23724:9;23720:18;23712:26;;23784:9;23778:4;23774:20;23770:1;23759:9;23755:17;23748:47;23812:131;23938:4;23812:131;:::i;:::-;23804:139;;23531:419;;;:::o;23956:228::-;24096:34;24092:1;24084:6;24080:14;24073:58;24165:11;24160:2;24152:6;24148:15;24141:36;23956:228;:::o;24190:366::-;24332:3;24353:67;24417:2;24412:3;24353:67;:::i;:::-;24346:74;;24429:93;24518:3;24429:93;:::i;:::-;24547:2;24542:3;24538:12;24531:19;;24190:366;;;:::o;24562:419::-;24728:4;24766:2;24755:9;24751:18;24743:26;;24815:9;24809:4;24805:20;24801:1;24790:9;24786:17;24779:47;24843:131;24969:4;24843:131;:::i;:::-;24835:139;;24562:419;;;:::o;24987:174::-;25127:26;25123:1;25115:6;25111:14;25104:50;24987:174;:::o;25167:366::-;25309:3;25330:67;25394:2;25389:3;25330:67;:::i;:::-;25323:74;;25406:93;25495:3;25406:93;:::i;:::-;25524:2;25519:3;25515:12;25508:19;;25167:366;;;:::o;25539:419::-;25705:4;25743:2;25732:9;25728:18;25720:26;;25792:9;25786:4;25782:20;25778:1;25767:9;25763:17;25756:47;25820:131;25946:4;25820:131;:::i;:::-;25812:139;;25539:419;;;:::o;25964:180::-;26012:77;26009:1;26002:88;26109:4;26106:1;26099:15;26133:4;26130:1;26123:15;26150:191;26190:4;26210:20;26228:1;26210:20;:::i;:::-;26205:25;;26244:20;26262:1;26244:20;:::i;:::-;26239:25;;26283:1;26280;26277:8;26274:34;;;26288:18;;:::i;:::-;26274:34;26333:1;26330;26326:9;26318:17;;26150:191;;;;:::o;26347:305::-;26387:3;26406:20;26424:1;26406:20;:::i;:::-;26401:25;;26440:20;26458:1;26440:20;:::i;:::-;26435:25;;26594:1;26526:66;26522:74;26519:1;26516:81;26513:107;;;26600:18;;:::i;:::-;26513:107;26644:1;26641;26637:9;26630:16;;26347:305;;;;:::o;26658:177::-;26798:29;26794:1;26786:6;26782:14;26775:53;26658:177;:::o;26841:366::-;26983:3;27004:67;27068:2;27063:3;27004:67;:::i;:::-;26997:74;;27080:93;27169:3;27080:93;:::i;:::-;27198:2;27193:3;27189:12;27182:19;;26841:366;;;:::o;27213:419::-;27379:4;27417:2;27406:9;27402:18;27394:26;;27466:9;27460:4;27456:20;27452:1;27441:9;27437:17;27430:47;27494:131;27620:4;27494:131;:::i;:::-;27486:139;;27213:419;;;:::o;27638:180::-;27686:77;27683:1;27676:88;27783:4;27780:1;27773:15;27807:4;27804:1;27797:15;27824:180;27872:77;27869:1;27862:88;27969:4;27966:1;27959:15;27993:4;27990:1;27983:15;28010:143;28067:5;28098:6;28092:13;28083:22;;28114:33;28141:5;28114:33;:::i;:::-;28010:143;;;;:::o;28159:351::-;28229:6;28278:2;28266:9;28257:7;28253:23;28249:32;28246:119;;;28284:79;;:::i;:::-;28246:119;28404:1;28429:64;28485:7;28476:6;28465:9;28461:22;28429:64;:::i;:::-;28419:74;;28375:128;28159:351;;;;:::o;28516:85::-;28561:7;28590:5;28579:16;;28516:85;;;:::o;28607:158::-;28665:9;28698:61;28716:42;28725:32;28751:5;28725:32;:::i;:::-;28716:42;:::i;:::-;28698:61;:::i;:::-;28685:74;;28607:158;;;:::o;28771:147::-;28866:45;28905:5;28866:45;:::i;:::-;28861:3;28854:58;28771:147;;:::o;28924:114::-;28991:6;29025:5;29019:12;29009:22;;28924:114;;;:::o;29044:184::-;29143:11;29177:6;29172:3;29165:19;29217:4;29212:3;29208:14;29193:29;;29044:184;;;;:::o;29234:132::-;29301:4;29324:3;29316:11;;29354:4;29349:3;29345:14;29337:22;;29234:132;;;:::o;29372:108::-;29449:24;29467:5;29449:24;:::i;:::-;29444:3;29437:37;29372:108;;:::o;29486:179::-;29555:10;29576:46;29618:3;29610:6;29576:46;:::i;:::-;29654:4;29649:3;29645:14;29631:28;;29486:179;;;;:::o;29671:113::-;29741:4;29773;29768:3;29764:14;29756:22;;29671:113;;;:::o;29820:732::-;29939:3;29968:54;30016:5;29968:54;:::i;:::-;30038:86;30117:6;30112:3;30038:86;:::i;:::-;30031:93;;30148:56;30198:5;30148:56;:::i;:::-;30227:7;30258:1;30243:284;30268:6;30265:1;30262:13;30243:284;;;30344:6;30338:13;30371:63;30430:3;30415:13;30371:63;:::i;:::-;30364:70;;30457:60;30510:6;30457:60;:::i;:::-;30447:70;;30303:224;30290:1;30287;30283:9;30278:14;;30243:284;;;30247:14;30543:3;30536:10;;29944:608;;;29820:732;;;;:::o;30558:831::-;30821:4;30859:3;30848:9;30844:19;30836:27;;30873:71;30941:1;30930:9;30926:17;30917:6;30873:71;:::i;:::-;30954:80;31030:2;31019:9;31015:18;31006:6;30954:80;:::i;:::-;31081:9;31075:4;31071:20;31066:2;31055:9;31051:18;31044:48;31109:108;31212:4;31203:6;31109:108;:::i;:::-;31101:116;;31227:72;31295:2;31284:9;31280:18;31271:6;31227:72;:::i;:::-;31309:73;31377:3;31366:9;31362:19;31353:6;31309:73;:::i;:::-;30558:831;;;;;;;;:::o;31395:227::-;31535:34;31531:1;31523:6;31519:14;31512:58;31604:10;31599:2;31591:6;31587:15;31580:35;31395:227;:::o;31628:366::-;31770:3;31791:67;31855:2;31850:3;31791:67;:::i;:::-;31784:74;;31867:93;31956:3;31867:93;:::i;:::-;31985:2;31980:3;31976:12;31969:19;;31628:366;;;:::o;32000:419::-;32166:4;32204:2;32193:9;32189:18;32181:26;;32253:9;32247:4;32243:20;32239:1;32228:9;32224:17;32217:47;32281:131;32407:4;32281:131;:::i;:::-;32273:139;;32000:419;;;:::o;32425:233::-;32464:3;32487:24;32505:5;32487:24;:::i;:::-;32478:33;;32533:66;32526:5;32523:77;32520:103;;32603:18;;:::i;:::-;32520:103;32650:1;32643:5;32639:13;32632:20;;32425:233;;;:::o;32664:180::-;32712:77;32709:1;32702:88;32809:4;32806:1;32799:15;32833:4;32830:1;32823:15;32850:185;32890:1;32907:20;32925:1;32907:20;:::i;:::-;32902:25;;32941:20;32959:1;32941:20;:::i;:::-;32936:25;;32980:1;32970:35;;32985:18;;:::i;:::-;32970:35;33027:1;33024;33020:9;33015:14;;32850:185;;;;:::o;33041:348::-;33081:7;33104:20;33122:1;33104:20;:::i;:::-;33099:25;;33138:20;33156:1;33138:20;:::i;:::-;33133:25;;33326:1;33258:66;33254:74;33251:1;33248:81;33243:1;33236:9;33229:17;33225:105;33222:131;;;33333:18;;:::i;:::-;33222:131;33381:1;33378;33374:9;33363:20;;33041:348;;;;:::o;33395:220::-;33535:34;33531:1;33523:6;33519:14;33512:58;33604:3;33599:2;33591:6;33587:15;33580:28;33395:220;:::o;33621:366::-;33763:3;33784:67;33848:2;33843:3;33784:67;:::i;:::-;33777:74;;33860:93;33949:3;33860:93;:::i;:::-;33978:2;33973:3;33969:12;33962:19;;33621:366;;;:::o;33993:419::-;34159:4;34197:2;34186:9;34182:18;34174:26;;34246:9;34240:4;34236:20;34232:1;34221:9;34217:17;34210:47;34274:131;34400:4;34274:131;:::i;:::-;34266:139;;33993:419;;;:::o
Swarm Source
ipfs://8a536ae3ee9d062ed825220d223f2bc7b1de4bc763b2e3c27f7e1112a5da3be5
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.