Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Artificial Intelligence
Overview
Max Total Supply
200,000,000,000 SOLID
Holders
419 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
642,621 SOLIDValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
SOLIDBLOCK
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-04-11 */ // //░██████╗░█████╗░██╗░░░░░██╗██████╗░██████╗░██╗░░░░░░█████╗░░█████╗░██╗░░██╗ //██╔════╝██╔══██╗██║░░░░░██║██╔══██╗██╔══██╗██║░░░░░██╔══██╗██╔══██╗██║░██╔╝ //╚█████╗░██║░░██║██║░░░░░██║██║░░██║██████╦╝██║░░░░░██║░░██║██║░░╚═╝█████═╝░ //░╚═══██╗██║░░██║██║░░░░░██║██║░░██║██╔══██╗██║░░░░░██║░░██║██║░░██╗██╔═██╗░ //██████╔╝╚█████╔╝███████╗██║██████╔╝██████╦╝███████╗╚█████╔╝╚█████╔╝██║░╚██╗ //╚═════╝░░╚════╝░╚══════╝╚═╝╚═════╝░╚═════╝░╚══════╝░╚════╝░░╚════╝░╚═╝░░╚═╝ // SPDX-License-Identifier: MIT pragma solidity ^0.8.4; interface IERC20 { function totalSupply() external view returns(uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom(address sender, address recipient, uint256 amount) external returns (bool); event Transfer (address indexed from, address indexed to, uint value); event Approval (address indexed owner, address indexed spender, uint value); } interface IERC20Upgradeable { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address from, address to, uint256 amount ) external returns (bool); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() { _setOwner(_msgSender()); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _setOwner(newOwner); } function _setOwner(address newOwner) internal { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } interface IFactory{ function createPair(address tokenA, address tokenB) external returns (address pair); } interface IRouter { function factory() external pure returns (address); function WETH() external pure returns (address); function addTreasuryETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint treasury); function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external; function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); } abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { _nonReentrantBefore(); _; _nonReentrantAfter(); } function _nonReentrantBefore() private { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; } function _nonReentrantAfter() private { _status = _NOT_ENTERED; } function _reentrancyGuardEntered() internal view returns (bool) { return _status == _ENTERED; } } library SafeMath { function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } library Address { function isContract(address account) internal view returns (bool) { return account.code.length > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, "Address: low-level call failed"); } function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } 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"); } 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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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 /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } interface IERC20Permit { function permit( address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) external; function nonces(address owner) external view returns (uint256); function DOMAIN_SEPARATOR() external view returns (bytes32); } library SafeERC20 { using Address for address; function safeTransfer(IERC20 token, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value)); } function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal { _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value)); } function safeApprove(IERC20 token, address spender, uint256 value) internal { require( (value == 0) || (token.allowance(address(this), spender) == 0), "SafeERC20: approve from non-zero to non-zero allowance" ); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value)); } function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal { uint256 oldAllowance = token.allowance(address(this), spender); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance + value)); } function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal { unchecked { uint256 oldAllowance = token.allowance(address(this), spender); require(oldAllowance >= value, "SafeERC20: decreased allowance below zero"); _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, oldAllowance - value)); } } function forceApprove(IERC20 token, address spender, uint256 value) internal { bytes memory approvalCall = abi.encodeWithSelector(token.approve.selector, spender, value); if (!_callOptionalReturnBool(token, approvalCall)) { _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, 0)); _callOptionalReturn(token, approvalCall); } } function safePermit( IERC20Permit token, address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s ) internal { uint256 nonceBefore = token.nonces(owner); token.permit(owner, spender, value, deadline, v, r, s); uint256 nonceAfter = token.nonces(owner); require(nonceAfter == nonceBefore + 1, "SafeERC20: permit did not succeed"); } function _callOptionalReturn(IERC20 token, bytes memory data) private { bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed"); require(returndata.length == 0 || abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed"); } function _callOptionalReturnBool(IERC20 token, bytes memory data) private returns (bool) { (bool success, bytes memory returndata) = address(token).call(data); return success && (returndata.length == 0 || abi.decode(returndata, (bool))) && Address.isContract(address(token)); } } contract SOLIDBLOCK is IERC20, Ownable { 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 _isExcludedFromMaxTransactionLimit; mapping(address => bool) private _isExcludedFromMaxWalletLimit; mapping(address => bool) private _isExcluded; mapping(address => bool) private _isBot; mapping(address => bool) private _isPair; address[] private _excluded; bool private swapping; mapping(address => bool) private _operator; IRouter public router; address public pair; uint8 private constant _decimals = 18; uint256 private constant MAX = ~uint256(0); uint256 private _tTotal = 200_000_000_000 * 10**_decimals; uint256 private _rTotal = (MAX - (MAX % _tTotal)); uint256 public swapTokensAtAmount = 10_000 * 10 ** 18; uint256 public maxTxAmount = 50_000_000_000 * 10**_decimals; uint256 public maxWalletAmount = 1_000_000_000 * 10**_decimals; // Anti Dump // mapping (address => uint256) public _lastTrade; bool public coolDownEnabled = true; uint256 public coolDownTime = 30 seconds; address public treasuryAddress = 0x15564669B5E6737785B0b36875fC7668Fe4CAc01; address public developmentAddress = 0xF8449D6a454469732aD0c7f83d8a018d967BF588 ; address constant burnAddress = 0x000000000000000000000000000000000000dEaD; address public USDT = 0xdAC17F958D2ee523a2206206994597C13D831ec7; string private constant _name = "SOLIDBLOCK"; string private constant _symbol = "SOLID"; // Black List // mapping (address => bool) private _isBlocked; // Trading uint256 private _launchStartTimestamp; uint256 private _launchBlockNumber; bool public isTradingEnabled; mapping (address => bool) private _isAllowedToTradeWhenDisabled; address public v1TokenAddress; struct Taxes { uint256 rfi; uint256 treasury; uint256 development; uint256 burn; } Taxes public taxes = Taxes(0,40,20,0); struct TotFeesPaidStruct { uint256 rfi; uint256 treasury; uint256 development; uint256 burn; } TotFeesPaidStruct public totFeesPaid; struct valuesFromGetValues{ uint256 rAmount; uint256 rTransferAmount; uint256 rRfi; uint256 rTreasury; uint256 rDevelopment; uint256 rBurn; uint256 tTransferAmount; uint256 tRfi; uint256 tTreasury; uint256 tDevelopment; uint256 tBurn; } struct splitETHStruct{ uint256 treasury; uint256 development; } splitETHStruct private splitETH = splitETHStruct(40,10); struct ETHAmountStruct{ uint256 treasury; uint256 development; } ETHAmountStruct public ETHAmount; event OperatorTransferred(address indexed previousOperator, address indexed newOperator); event BlockedAccountChange(address indexed holder, bool indexed status); event FeesChanged(); event AllowedWhenTradingDisabledChange(address indexed account, bool isExcluded); event TradingStatusChange(bool indexed newValue, bool indexed oldValue); event PresaleStatusChange(bool indexed newValue, bool indexed oldValue); modifier lockTheSwap { swapping = true; _; swapping = false; } modifier addressValidation(address _addr) { require(_addr != address(0), 'SOLIDBLOCK: Zero address'); _; } modifier onlyOperatorOrOwner() { require(_operator[msg.sender] || owner() == msg.sender, "Caller is not an operator"); //require(_operator == msg.sender || owner() == msg.sender, "operator: caller is not the operator or owner"); _; } constructor () { IRouter _router = IRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); address _pair = IFactory(_router.factory()) .createPair(address(this), _router.WETH()); router = _router; pair = _pair; addPair(pair); excludeFromReward(pair); _rOwned[owner()] = _rTotal; _isExcludedFromFee[owner()] = true; _isExcludedFromFee[address(this)] = true; _isExcludedFromFee[treasuryAddress] = true; _isExcludedFromFee[burnAddress] = true; _isExcludedFromFee[developmentAddress] = true; _isExcludedFromMaxTransactionLimit[address(this)] = true; _isExcludedFromMaxTransactionLimit[owner()] = true; _isExcludedFromMaxTransactionLimit[_pair] = true; _isExcludedFromMaxTransactionLimit[address(_router)] = true; _isExcludedFromMaxWalletLimit[_pair] = true; _isExcludedFromMaxWalletLimit[address(_router)] = true; _isExcludedFromMaxWalletLimit[address(this)] = true; _isExcludedFromMaxWalletLimit[owner()] = true; _isExcludedFromMaxWalletLimit[burnAddress] = true; emit Transfer(address(0), owner(), _tTotal); } function name() public pure returns (string memory) { return _name; } function symbol() public pure returns (string memory) { return _symbol; } function decimals() public pure returns (uint8) { return _decimals; } 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 virtual override returns (bool) { uint256 currentAllowance = _allowances[sender][_msgSender()]; require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance"); _transfer(sender, recipient, amount); _approve(sender, _msgSender(), currentAllowance - amount); return true; } function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender] + addedValue); return true; } function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { uint256 currentAllowance = _allowances[_msgSender()][spender]; require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero"); _approve(_msgSender(), spender, currentAllowance - subtractedValue); return true; } function isExcludedFromReward(address account) public view returns (bool) { return _isExcluded[account]; } function tokenFromReflection(uint256 rAmount) public view returns(uint256) { require(rAmount <= _rTotal, "Amount must be less than total reflections"); uint256 currentRate = _getRate(); return rAmount/currentRate; } function excludeFromReward(address account) public onlyOwner { require(!_isExcluded[account], "Account is already excluded"); require(_excluded.length <= 200, "Invalid length"); require(account != owner(), "Owner cannot be excluded"); if(_rOwned[account] > 0) { _tOwned[account] = tokenFromReflection(_rOwned[account]); } _isExcluded[account] = true; _excluded.push(account); } function includeInReward(address account) external onlyOwner() { require(_isExcluded[account], "Account is not excluded"); for (uint256 i = 0; i < _excluded.length; i++) { if (_excluded[i] == account) { _excluded[i] = _excluded[_excluded.length - 1]; _tOwned[account] = 0; _isExcluded[account] = false; _excluded.pop(); break; } } } function isOperator(address operator) public view returns (bool) { return _operator[operator]; } function _setOperator(address operator_, bool hasPermission) external onlyOwner { require(operator_ != address(0), "Invalid operator address"); _operator[operator_] = hasPermission; } function excludeFromFee(address account) public onlyOperatorOrOwner { _isExcludedFromFee[account] = true; } function includeInFee(address account) public onlyOperatorOrOwner { _isExcludedFromFee[account] = false; } function isExcludedFromFee(address account) public view returns(bool) { return _isExcludedFromFee[account]; } function excludeFromMaxTransactionLimit(address account, bool excluded) external onlyOwner{ require(_isExcludedFromMaxTransactionLimit[account] != excluded, "SOLIDBLOCK: Account is already the value of 'excluded'"); _isExcludedFromMaxTransactionLimit[account] = excluded; } function isExcludedFromMaxTransactionLimit(address account) public view returns(bool) { return _isExcludedFromMaxTransactionLimit[account]; } function excludeFromMaxWalletLimit(address account, bool excluded) external onlyOwner{ require(_isExcludedFromMaxWalletLimit[account] != excluded, "SOLIDBLOCK: Account is already the value of 'excluded'"); _isExcludedFromMaxWalletLimit[account] = excluded; } function isExcludedFromMaxWalletLimit(address account) public view returns(bool) { return _isExcludedFromMaxWalletLimit[account]; } function setV1TokenAddress(address _v1TokenAddress) external onlyOwner { v1TokenAddress = _v1TokenAddress; } function migrate(address holder) external onlyOwner { require(v1TokenAddress != address(0), "V1 token address is not set"); IERC20 v1Token = IERC20(v1TokenAddress); uint256 v1TokenBalance = v1Token.balanceOf(holder); require(v1TokenBalance > 0, "Holder has no V1 tokens"); _transfer(_msgSender(), holder, v1TokenBalance); } function blockAccount(address account) external onlyOwner{ require(!_isBlocked[account], "SOLIDBLOCK: Account is already blocked"); _isBlocked[account] = true; emit BlockedAccountChange(account, true); } function unblockAccount(address account) external onlyOwner{ require(_isBlocked[account], "SOLIDBLOCK: Account is not blcoked"); _isBlocked[account] = false; emit BlockedAccountChange(account, false); } function activateTrading() external onlyOwner{ isTradingEnabled = true; if (_launchStartTimestamp == 0) { _launchStartTimestamp = block.timestamp; _launchBlockNumber = block.number; } emit TradingStatusChange(true, false); } function deactivateTrading() external onlyOwner{ isTradingEnabled = false; emit TradingStatusChange(false, true); } function allowTradingWhenDisabled(address account, bool allowed) external onlyOwner{ _isAllowedToTradeWhenDisabled[account] = allowed; emit AllowedWhenTradingDisabledChange(account, allowed); } function addPair(address _pair) public onlyOwner { _isPair[_pair] = true; } function removePair(address _pair) public onlyOwner { _isPair[_pair] = false; } function isPair(address account) public view returns(bool){ return _isPair[account]; } function setTaxes(uint256 _rfi, uint256 _treasury, uint256 _development, uint256 __burn) public onlyOwner { taxes.rfi = _rfi; taxes.treasury = _treasury; taxes.development = _development; taxes.burn = __burn; emit FeesChanged(); } function setSplitETH(uint256 _treasury, uint256 _development) public onlyOwner { splitETH.treasury = _treasury; splitETH.development = _development; emit FeesChanged(); } function _reflectRfi(uint256 rRfi, uint256 tRfi) private { _rTotal -=rRfi; totFeesPaid.rfi += tRfi; } function _takeTreasury(uint256 rTreasury, uint256 tTreasury) private { totFeesPaid.treasury += tTreasury; if(_isExcluded[treasuryAddress]) _tOwned[treasuryAddress] += tTreasury; _rOwned[treasuryAddress] +=rTreasury; } function _takeDevelopment(uint256 rDevelopment, uint256 tDevelopment) private{ totFeesPaid.development += tDevelopment; if(_isExcluded[developmentAddress]) _tOwned[developmentAddress] += tDevelopment; _rOwned[developmentAddress] += rDevelopment; } function _takeBurn(uint256 rBurn, uint256 tBurn) private { totFeesPaid.burn += tBurn; if(_isExcluded[developmentAddress])_tOwned[burnAddress] += tBurn; _rOwned[burnAddress] += rBurn; } function _getValues(uint256 tAmount, uint8 takeFee) private returns (valuesFromGetValues memory to_return) { to_return = _getTValues(tAmount, takeFee); (to_return.rAmount, to_return.rTransferAmount, to_return.rRfi, to_return.rTreasury,to_return.rDevelopment, to_return.rBurn) = _getRValues(to_return, tAmount, takeFee, _getRate()); return to_return; } function _getTValues(uint256 tAmount, uint8 takeFee) private returns (valuesFromGetValues memory s) { if(takeFee == 0) { s.tTransferAmount = tAmount; return s; } else if(takeFee == 1){ s.tRfi = (tAmount*taxes.rfi)/1000; s.tTreasury = (tAmount*taxes.treasury)/1000; s.tDevelopment = tAmount*taxes.development/1000; s.tBurn = tAmount*taxes.burn/1000; ETHAmount.treasury += s.tTreasury*splitETH.treasury/taxes.treasury; ETHAmount.development += s.tTreasury*splitETH.development/taxes.treasury; s.tTransferAmount = tAmount-s.tRfi-s.tDevelopment-s.tTreasury-s.tBurn; return s; } else { s.tRfi = tAmount*taxes.rfi/1000; s.tBurn = tAmount*taxes.burn/1000; s.tTreasury = tAmount*splitETH.development/1000; ETHAmount.development += s.tTreasury; s.tTransferAmount = tAmount-s.tRfi-s.tTreasury-s.tBurn; return s; } } function _getRValues(valuesFromGetValues memory s, uint256 tAmount, uint8 takeFee, uint256 currentRate) private pure returns (uint256 rAmount, uint256 rTransferAmount, uint256 rRfi,uint256 rTreasury,uint256 rDevelopment,uint256 rBurn) { rAmount = tAmount*currentRate; if(takeFee == 0) { return(rAmount, rAmount, 0,0,0,0); }else if(takeFee == 1){ rRfi = s.tRfi*currentRate; rTreasury = s.tTreasury*currentRate; rDevelopment = s.tDevelopment*currentRate; rBurn = s.tBurn*currentRate; rTransferAmount = rAmount-rRfi-rTreasury-rDevelopment-rBurn; return (rAmount, rTransferAmount, rRfi,rTreasury,rDevelopment,rBurn); } else{ rRfi = s.tRfi*currentRate; rDevelopment = s.tDevelopment*currentRate; rBurn = s.tBurn*currentRate; rTransferAmount = rAmount-rRfi-rTreasury-rDevelopment-rBurn; return (rAmount, rTransferAmount, rRfi,rTreasury,rDevelopment,rBurn); } } function _getRate() private view returns(uint256) { (uint256 rSupply, uint256 tSupply) = _getCurrentSupply(); return rSupply/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-_rOwned[_excluded[i]]; tSupply = tSupply-_tOwned[_excluded[i]]; } if (rSupply < _rTotal/_tTotal) return (_rTotal, _tTotal); return (rSupply, tSupply); } 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, "Zero amount"); require(amount <= balanceOf(from),"Insufficient balance"); require(!_isBot[from] && !_isBot[to], "You are a bot"); if(!_isAllowedToTradeWhenDisabled[from] && !_isAllowedToTradeWhenDisabled[to]) { require(isTradingEnabled, "SOLIDBLOCK: Trading is currently disabled."); require(!_isBlocked[to], "SOLIDBLOCK: Account is blocked"); require(!_isBlocked[from], "SOLIDBLOCK: Account is blocked"); if (!_isExcludedFromMaxTransactionLimit[to] && !_isExcludedFromMaxTransactionLimit[from]) { require(amount <= maxTxAmount, "SOLIDBLOCK: Buy amount exceeds the maxTxBuyAmount."); } if (!_isExcludedFromMaxWalletLimit[to]) { require((balanceOf(to) + amount) <= maxWalletAmount, "SOLIDBLOCK: Expected wallet amount exceeds the maxWalletAmount."); } } if (coolDownEnabled) { uint256 timePassed = block.timestamp - _lastTrade[from]; require(timePassed > coolDownTime, "You must wait coolDownTime"); } if(!_isExcludedFromFee[from] && !_isExcludedFromFee[to] && !swapping) {//check this !swapping if(_isPair[from] || _isPair[to]) { _tokenTransfer(from, to, amount, 1); } else { _tokenTransfer(from, to, amount, 2); } } else { _tokenTransfer(from, to, amount, 0); } _lastTrade[from] = block.timestamp; if(!swapping && from != pair && to != pair && !_isExcludedFromFee[from] && !_isExcludedFromFee[to]){ address[] memory path = new address[](3); path[0] = address(this); path[1] = router.WETH(); path[2] = USDT; uint _amount = router.getAmountsOut(balanceOf(address(this)), path)[2]; if(_amount >= swapTokensAtAmount) swapTokensForETH(balanceOf(address(this))); } } //this method is responsible for taking all fee, if takeFee is true function _tokenTransfer(address sender, address recipient, uint256 tAmount, uint8 takeFee) private { valuesFromGetValues memory s = _getValues(tAmount, takeFee); if (_isExcluded[sender] ) { //from excluded _tOwned[sender] = _tOwned[sender] - tAmount; } if (_isExcluded[recipient]) { //to excluded _tOwned[recipient] = _tOwned[recipient] + s.tTransferAmount; } _rOwned[sender] = _rOwned[sender]-s.rAmount; _rOwned[recipient] = _rOwned[recipient]+s.rTransferAmount; if(s.rRfi > 0 || s.tRfi > 0) _reflectRfi(s.rRfi, s.tRfi); if(s.rTreasury > 0 || s.tTreasury > 0){ _takeTreasury(s.rTreasury, s.tTreasury); emit Transfer(sender, treasuryAddress, s.tTreasury); } if(s.rDevelopment > 0 || s.tDevelopment > 0){ _takeDevelopment(s.rDevelopment, s.tDevelopment); emit Transfer(sender, developmentAddress, s.tDevelopment); } if(s.rBurn > 0 || s.tBurn > 0){ _takeBurn(s.rBurn, s.tBurn); emit Transfer(sender, burnAddress, s.tBurn); } emit Transfer(sender, recipient, s.tTransferAmount); } function swapTokensForETH(uint256 tokenAmount) private lockTheSwap { // generate the uniswap pair path of token -> weth -> USDT address[] memory path = new address[](3); path[0] = address(this); path[1] = router.WETH(); path[2] = USDT; _approve(address(this), address(router), tokenAmount); // make the swap router.swapExactTokensForTokensSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); IERC20 usdt = IERC20(USDT); uint256 usdtBalance = usdt.balanceOf(address(this)); usdt.approve(address(this), usdtBalance); uint256 usdtTreasuryAmount = (ETHAmount.treasury * usdtBalance) / tokenAmount; uint256 usdtDevelopmentAmount = (ETHAmount.development * usdtBalance) / tokenAmount; usdt.transfer(treasuryAddress, usdtTreasuryAmount); usdt.transfer(developmentAddress, usdtDevelopmentAmount); ETHAmount.treasury = 0; ETHAmount.development = 0; /* (bool success, ) = treasuryAddress.call{value: (ETHAmount.treasury * usdt.balanceOf(address(this)))/tokenAmount}(""); require(success, 'ETH_TRANSFER_FAILED'); ETHAmount.treasury = 0; (success, ) = developmentAddress.call{value: (ETHAmount.development * usdt.balanceOf(address(this)))/tokenAmount}(""); require(success, 'ETH_TRANSFER_FAILED'); ETHAmount.development = 0; */ } function updateTreasuryWallet(address newWallet) external onlyOwner addressValidation(newWallet) { require(treasuryAddress != newWallet, 'SOLIDBLOCK: Wallet already set'); treasuryAddress = newWallet; _isExcludedFromFee[treasuryAddress]; } function updateDevelopmentWallet(address newWallet) external onlyOwner addressValidation(newWallet) { require(developmentAddress != newWallet, 'SOLIDBLOCK: Wallet already set'); developmentAddress = newWallet; _isExcludedFromFee[developmentAddress]; } function updateStableCoin(address _usdt) external onlyOwner addressValidation(_usdt) { require(USDT != _usdt, 'SOLIDBLOCK: Wallet already set'); USDT = _usdt; } function updateMaxTxAmt(uint256 amount) external onlyOwner{ require(amount >= 100); maxTxAmount = amount * 10**_decimals; } function updateMaxWalletAmt(uint256 amount) external onlyOwner{ require(amount >= 100); maxWalletAmount = amount * 10**_decimals; } function updateSwapTokensAtAmount(uint256 amount) external onlyOwner{ require(amount > 0); swapTokensAtAmount = amount * 10**6; } function updateCoolDownSettings(bool _enabled, uint256 _timeInSeconds) external onlyOperatorOrOwner{ coolDownEnabled = _enabled; coolDownTime = _timeInSeconds * 1 seconds; } function setAntibot(address account, bool state) external onlyOwner{ require(_isBot[account] != state, 'SOLIDBLOCK: Value already set'); _isBot[account] = state; } function bulkAntiBot(address[] memory accounts, bool state) external onlyOwner { require(accounts.length <= 100, "SOLIDBLOCK: Invalid"); for(uint256 i = 0; i < accounts.length; i++){ _isBot[accounts[i]] = state; } } function updateRouterAndPair(address newRouter, address newPair) external onlyOwner { router = IRouter(newRouter); pair = newPair; addPair(pair); } function updateRouterWithoutPair(address newRouter) external onlyOwner { require(newRouter != address(0), "Invalid router address"); router = IRouter(newRouter); address newPair = IFactory(router.factory()).createPair(address(this), router.WETH()); require(newPair != address(0), "Failed to create new pair"); pair = newPair; addPair(pair); } function isBot(address account) public view returns(bool){ return _isBot[account]; } function airdropTokens(address[] memory recipients, uint256[] memory amounts) external onlyOwner { require(recipients.length == amounts.length,"Invalid size"); address sender = msg.sender; for(uint256 i; i<recipients.length; i++){ address recipient = recipients[i]; uint256 rAmount = amounts[i]*_getRate(); _rOwned[sender] = _rOwned[sender]- rAmount; _rOwned[recipient] = _rOwned[recipient] + rAmount; emit Transfer(sender, recipient, amounts[i]); } } //Use this in case ETH are sent to the contract by mistake function rescueETH(uint256 weiAmount) external onlyOwner{ require(address(this).balance >= weiAmount, "insufficient ETH balance"); payable(owner()).transfer(weiAmount); } // Function to allow admin to claim *other* ERC20 tokens sent to this contract (by mistake) // Owner cannot transfer out catecoin from this smart contract function rescueAnyERC20Tokens(address _tokenAddr, address _to, uint _amount) public onlyOwner { IERC20(_tokenAddr).transfer(_to, _amount); } receive() external payable { } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"AllowedWhenTradingDisabledChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"holder","type":"address"},{"indexed":true,"internalType":"bool","name":"status","type":"bool"}],"name":"BlockedAccountChange","type":"event"},{"anonymous":false,"inputs":[],"name":"FeesChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOperator","type":"address"},{"indexed":true,"internalType":"address","name":"newOperator","type":"address"}],"name":"OperatorTransferred","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":"bool","name":"newValue","type":"bool"},{"indexed":true,"internalType":"bool","name":"oldValue","type":"bool"}],"name":"PresaleStatusChange","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"bool","name":"newValue","type":"bool"},{"indexed":true,"internalType":"bool","name":"oldValue","type":"bool"}],"name":"TradingStatusChange","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":"ETHAmount","outputs":[{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"development","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"USDT","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_lastTrade","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator_","type":"address"},{"internalType":"bool","name":"hasPermission","type":"bool"}],"name":"_setOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"addPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"airdropTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"allowed","type":"bool"}],"name":"allowTradingWhenDisabled","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"account","type":"address"}],"name":"blockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"state","type":"bool"}],"name":"bulkAntiBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"coolDownEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"coolDownTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deactivateTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"developmentAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxTransactionLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWalletLimit","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":"account","type":"address"}],"name":"includeInReward","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxTransactionLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWalletLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromReward","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"isOperator","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isTradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"holder","type":"address"}],"name":"migrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_pair","type":"address"}],"name":"removePair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddr","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"rescueAnyERC20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"weiAmount","type":"uint256"}],"name":"rescueETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"state","type":"bool"}],"name":"setAntibot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasury","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"}],"name":"setSplitETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_rfi","type":"uint256"},{"internalType":"uint256","name":"_treasury","type":"uint256"},{"internalType":"uint256","name":"_development","type":"uint256"},{"internalType":"uint256","name":"__burn","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_v1TokenAddress","type":"address"}],"name":"setV1TokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"taxes","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"development","type":"uint256"},{"internalType":"uint256","name":"burn","type":"uint256"}],"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":"totFeesPaid","outputs":[{"internalType":"uint256","name":"rfi","type":"uint256"},{"internalType":"uint256","name":"treasury","type":"uint256"},{"internalType":"uint256","name":"development","type":"uint256"},{"internalType":"uint256","name":"burn","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":"treasuryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"unblockAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"},{"internalType":"uint256","name":"_timeInSeconds","type":"uint256"}],"name":"updateCoolDownSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevelopmentWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxTxAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateMaxWalletAmt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"},{"internalType":"address","name":"newPair","type":"address"}],"name":"updateRouterAndPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateRouterWithoutPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_usdt","type":"address"}],"name":"updateStableCoin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"v1TokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
6080604052620000126012600a62000bd6565b6200002390642e90edd00062000c97565b600f819055620000369060001962000cf1565b620000449060001962000cb9565b60105569021e19e0c9bab2400000601155620000636012600a62000bd6565b6200007490640ba43b740062000c97565b6012556012600a62000087919062000bd6565b6200009790633b9aca0062000c97565b6013556015805460ff19166001179055601e601655601780546001600160a01b03199081167315564669b5e6737785b0b36875fc7668fe4cac011790915560188054821673f8449d6a454469732ad0c7f83d8a018d967bf5881790556019805490911673dac17f958d2ee523a2206206994597c13d831ec7179055604080516080810182526000808252602860208084018290526014848601819052606090940183905282815560218290556022939093556023919091558251808401909352808352600a9290910182905280556029553480156200017557600080fd5b506200018133620005e0565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d90506000816001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b158015620001d657600080fd5b505afa158015620001eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000211919062000b4d565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b1580156200025a57600080fd5b505afa1580156200026f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000295919062000b4d565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b158015620002de57600080fd5b505af1158015620002f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000319919062000b4d565b600d80546001600160a01b038086166001600160a01b031992831617909255600e80549284169290911682179055909150620003559062000630565b600e546200036c906001600160a01b0316620006a3565b60105460016000620003866000546001600160a01b031690565b6001600160a01b03166001600160a01b0316815260200190815260200160002081905550600160046000620003c0620008c260201b60201c565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905530808252600485528382208054871660019081179091556017548416835284832080548816821790557f42c63635470f1fb1d6d4b6441c413cb435b1ebb6fedd1896dd5e25d1399147dd8054881682179055601854909316825283822080548716841790558152600593849052918220805490941681179093556200047b6000546001600160a01b031690565b6001600160a01b03908116825260208083019390935260409182016000908120805495151560ff1996871617905585821680825260058552838220805487166001908117909155928816808352848320805488168517905590825260069485905283822080548716841790558152828120805486168317905530815291822080549094168117909355620005176000546001600160a01b031690565b6001600160a01b031681526020808201929092526040016000908120805493151560ff1994851617905561dead9052600690527f1aecba4ebe7a4e0673e4891b2b092b2228e4322380b579fb494fad3da8586e2280549091166001179055620005886000546001600160a01b031690565b6001600160a01b031660006001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600f54604051620005d091815260200190565b60405180910390a3505062000d34565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b031633146200067f5760405162461bcd60e51b81526020600482018190526024820152600080516020620057fe83398151915260448201526064015b60405180910390fd5b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b03163314620006ee5760405162461bcd60e51b81526020600482018190526024820152600080516020620057fe833981519152604482015260640162000676565b6001600160a01b03811660009081526007602052604090205460ff1615620007595760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c756465640000000000604482015260640162000676565b600a5460c810156200079f5760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b604482015260640162000676565b6000546001600160a01b0382811691161415620007ff5760405162461bcd60e51b815260206004820152601860248201527f4f776e65722063616e6e6f74206265206578636c756465640000000000000000604482015260640162000676565b6001600160a01b038116600090815260016020526040902054156200085c576001600160a01b0381166000908152600160205260409020546200084290620008d1565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031690565b60006010548211156200093a5760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b606482015260840162000676565b6000620009466200095b565b905062000954818462000b76565b9392505050565b600080806200096962000981565b90925090506200097a818362000b76565b9250505090565b601054600f546000918291825b600a5481101562000b19578260016000600a8481548110620009c057634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054118062000a3b57508160026000600a848154811062000a1457634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b1562000a5257601054600f54945094505050509091565b60016000600a838154811062000a7857634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000aa9908462000cb9565b925060026000600a838154811062000ad157634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b0316835282019290925260400190205462000b02908362000cb9565b91508062000b108162000cd3565b9150506200098e565b50600f5460105462000b2c919062000b76565b82101562000b4457601054600f549350935050509091565b90939092509050565b60006020828403121562000b5f578081fd5b81516001600160a01b038116811462000954578182fd5b60008262000b885762000b8862000d1e565b500490565b600181815b8085111562000bce57816000190482111562000bb25762000bb262000d08565b8085161562000bc057918102915b93841c939080029062000b92565b509250929050565b60006200095460ff84168360008262000bf25750600162000c91565b8162000c015750600062000c91565b816001811462000c1a576002811462000c255762000c45565b600191505062000c91565b60ff84111562000c395762000c3962000d08565b50506001821b62000c91565b5060208310610133831016604e8410600b841016171562000c6a575081810a62000c91565b62000c76838362000b8d565b806000190482111562000c8d5762000c8d62000d08565b0290505b92915050565b600081600019048311821515161562000cb45762000cb462000d08565b500290565b60008282101562000cce5762000cce62000d08565b500390565b600060001982141562000cea5762000cea62000d08565b5060010190565b60008262000d035762000d0362000d1e565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b614aba8062000d446000396000f3fe6080604052600436106104095760003560e01c806388f8202011610213578063c2b7bbb611610123578063e0baeb29116100ab578063ea2f0b371161007a578063ea2f0b3714610d50578063ee36e35914610d70578063f023f57314610d8a578063f2fde38b14610daa578063f887ea4014610dca57600080fd5b8063e0baeb2914610cc1578063e116554514610ce1578063e2f4560514610d01578063e5e31b1314610d1757600080fd5b8063d257b34f116100f2578063d257b34f14610c05578063d2ce0db214610c25578063d322157614610c3b578063dd62ed3e14610c5b578063e006eadf14610ca157600080fd5b8063c2b7bbb614610b85578063c54e44eb14610ba5578063c5f956af14610bc5578063ce5494bb14610be557600080fd5b8063a457c2d7116101a6578063a9059cbb11610175578063a9059cbb14610ad6578063aa4bde2814610af6578063af6c9c1d14610b0c578063b31470a414610b2c578063b6d5f14414610b4c57600080fd5b8063a457c2d714610a30578063a87859f614610a50578063a8a69b9d14610a7d578063a8aa1b3114610ab657600080fd5b806395d89b41116101e257806395d89b411461099f5780639ba5e4d5146109cd5780639e252f00146109f0578063a12a7d6114610a1057600080fd5b806388f82020146109125780638c0ae3df1461094b5780638c0b5e221461096b5780638da5cb5b1461098157600080fd5b80634d78fdc611610319578063706f6937116102a1578063728f8eea11610270578063728f8eea1461084f578063781edb3c146108925780637c0a893d146108b2578063809d458d146108d2578063880bcbc1146108f257600080fd5b8063706f6937146107ca57806370a08231146107ea578063715018a61461080a5780637286ec321461081f57600080fd5b80635ab8fa56116102e85780635ab8fa56146106f9578063638b1b1414610731578063657f644b1461075157806365b36ce2146107715780636d70f7ae1461079157600080fd5b80634d78fdc6146106605780634e2b57801461068057806352390c02146106a05780635342acb4146106c057600080fd5b80632d8381191161039c5780633685d4191161036b5780633685d419146105a757806339509351146105c75780633bbac579146105e757806340b28c2f14610620578063437823ec1461064057600080fd5b80632d838119146105365780632e092fe814610556578063313ce5671461057657806334cf1fea1461059257600080fd5b80630bd05b69116103d85780630bd05b69146104c25780630d65df9b146104d757806318160ddd146104f757806323b872dd1461051657600080fd5b8063064a59d014610415578063068b391b1461044457806306fdde0314610466578063095ea7b3146104a257600080fd5b3661041057005b600080fd5b34801561042157600080fd5b50601d5461042f9060ff1681565b60405190151581526020015b60405180910390f35b34801561045057600080fd5b5061046461045f3660046142cf565b610dea565b005b34801561047257600080fd5b5060408051808201909152600a815269534f4c4944424c4f434b60b01b60208201525b60405161043b9190614669565b3480156104ae57600080fd5b5061042f6104bd3660046143ac565b610e3f565b3480156104ce57600080fd5b50610464610e56565b3480156104e357600080fd5b506104646104f236600461433f565b610ecd565b34801561050357600080fd5b50600f545b60405190815260200161043b565b34801561052257600080fd5b5061042f61053136600461433f565b610f7f565b34801561054257600080fd5b506105086105513660046145a4565b61102e565b34801561056257600080fd5b506104646105713660046145a4565b6110b2565b34801561058257600080fd5b506040516012815260200161043b565b34801561059e57600080fd5b50610464611106565b3480156105b357600080fd5b506104646105c23660046142cf565b61116a565b3480156105d357600080fd5b5061042f6105e23660046143ac565b611359565b3480156105f357600080fd5b5061042f6106023660046142cf565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561062c57600080fd5b5061046461063b366004614307565b611390565b34801561064c57600080fd5b5061046461065b3660046142cf565b6113f1565b34801561066c57600080fd5b5061046461067b3660046142cf565b611468565b34801561068c57600080fd5b5061046461069b3660046145d4565b611552565b3480156106ac57600080fd5b506104646106bb3660046142cf565b6115b3565b3480156106cc57600080fd5b5061042f6106db3660046142cf565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561070557600080fd5b50601f54610719906001600160a01b031681565b6040516001600160a01b03909116815260200161043b565b34801561073d57600080fd5b50601854610719906001600160a01b031681565b34801561075d57600080fd5b5061046461076c3660046145a4565b6117a8565b34801561077d57600080fd5b5061046461078c36600461437f565b6117fc565b34801561079d57600080fd5b5061042f6107ac3660046142cf565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156107d657600080fd5b506104646107e53660046143d7565b6118a7565b3480156107f657600080fd5b506105086108053660046142cf565b611a64565b34801561081657600080fd5b50610464611ac3565b34801561082b57600080fd5b50602a54602b5461083a919082565b6040805192835260208301919091520161043b565b34801561085b57600080fd5b506020546021546022546023546108729392919084565b60408051948552602085019390935291830152606082015260800161043b565b34801561089e57600080fd5b506104646108ad36600461437f565b611af9565b3480156108be57600080fd5b506104646108cd3660046142cf565b611b8d565b3480156108de57600080fd5b506104646108ed3660046142cf565b611c81565b3480156108fe57600080fd5b5061046461090d36600461437f565b611d2a565b34801561091e57600080fd5b5061042f61092d3660046142cf565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561095757600080fd5b50610464610966366004614587565b611dbe565b34801561097757600080fd5b5061050860125481565b34801561098d57600080fd5b506000546001600160a01b0316610719565b3480156109ab57600080fd5b5060408051808201909152600581526414d3d3125160da1b6020820152610495565b3480156109d957600080fd5b506024546025546026546027546108729392919084565b3480156109fc57600080fd5b50610464610a0b3660046145a4565b611e31565b348015610a1c57600080fd5b50610464610a2b3660046145f5565b611ee4565b348015610a3c57600080fd5b5061042f610a4b3660046143ac565b611f51565b348015610a5c57600080fd5b50610508610a6b3660046142cf565b60146020526000908152604090205481565b348015610a8957600080fd5b5061042f610a983660046142cf565b6001600160a01b031660009081526006602052604090205460ff1690565b348015610ac257600080fd5b50600e54610719906001600160a01b031681565b348015610ae257600080fd5b5061042f610af13660046143ac565b611fec565b348015610b0257600080fd5b5061050860135481565b348015610b1857600080fd5b50610464610b273660046142cf565b611ff9565b348015610b3857600080fd5b50610464610b47366004614493565b612044565b348015610b5857600080fd5b5061042f610b673660046142cf565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610b9157600080fd5b50610464610ba03660046142cf565b612130565b348015610bb157600080fd5b50601954610719906001600160a01b031681565b348015610bd157600080fd5b50601754610719906001600160a01b031681565b348015610bf157600080fd5b50610464610c003660046142cf565b61217e565b348015610c1157600080fd5b50610464610c203660046145a4565b6122df565b348015610c3157600080fd5b5061050860165481565b348015610c4757600080fd5b50610464610c5636600461437f565b612329565b348015610c6757600080fd5b50610508610c76366004614307565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610cad57600080fd5b50610464610cbc3660046142cf565b6123b2565b348015610ccd57600080fd5b50610464610cdc3660046142cf565b61264e565b348015610ced57600080fd5b50610464610cfc36600461437f565b6126f0565b348015610d0d57600080fd5b5061050860115481565b348015610d2357600080fd5b5061042f610d323660046142cf565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610d5c57600080fd5b50610464610d6b3660046142cf565b6127b4565b348015610d7c57600080fd5b5060155461042f9060ff1681565b348015610d9657600080fd5b50610464610da53660046142cf565b612828565b348015610db657600080fd5b50610464610dc53660046142cf565b6128d1565b348015610dd657600080fd5b50600d54610719906001600160a01b031681565b6000546001600160a01b03163314610e1d5760405162461bcd60e51b8152600401610e14906146f3565b60405180910390fd5b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e4c33848461296c565b5060015b92915050565b6000546001600160a01b03163314610e805760405162461bcd60e51b8152600401610e14906146f3565b601d805460ff19166001179055601b54610e9d5742601b5543601c555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610ef75760405162461bcd60e51b8152600401610e14906146f3565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015610f4157600080fd5b505af1158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f79919061456b565b50505050565b6001600160a01b0383166000908152600360209081526040808320338452909152812054828110156110045760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610e14565b61100f858585612a90565b611023853361101e86856149e3565b61296c565b506001949350505050565b60006010548211156110955760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610e14565b600061109f613345565b90506110ab81846148b6565b9392505050565b6000546001600160a01b031633146110dc5760405162461bcd60e51b8152600401610e14906146f3565b60648110156110ea57600080fd5b6110f66012600a614919565b61110090826149c4565b60125550565b6000546001600160a01b031633146111305760405162461bcd60e51b8152600401610e14906146f3565b601d805460ff191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b6000546001600160a01b031633146111945760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03811660009081526007602052604090205460ff166111fc5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610e14565b60005b600a5481101561135557816001600160a01b0316600a828154811061123457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561134357600a805461125f906001906149e3565b8154811061127d57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600a80546001600160a01b0390921691839081106112b757634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600790925220805460ff19169055600a80548061131d57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061134d816149fa565b9150506111ff565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610e4c91859061101e90869061489e565b6000546001600160a01b031633146113ba5760405162461bcd60e51b8152600401610e14906146f3565b600d80546001600160a01b038085166001600160a01b031992831617909255600e8054928416929091168217905561135590612130565b336000908152600c602052604090205460ff168061142857503361141d6000546001600160a01b031690565b6001600160a01b0316145b6114445760405162461bcd60e51b8152600401610e1490614728565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146114925760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0381166000908152601a602052604090205460ff166115055760405162461bcd60e51b815260206004820152602260248201527f534f4c4944424c4f434b3a204163636f756e74206973206e6f7420626c636f6b604482015261195960f21b6064820152608401610e14565b6001600160a01b0381166000818152601a6020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b0316331461157c5760405162461bcd60e51b8152600401610e14906146f3565b602882905560298190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050565b6000546001600160a01b031633146115dd5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03811660009081526007602052604090205460ff16156116465760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610e14565b600a5460c8101561168a5760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b6044820152606401610e14565b6000546001600160a01b03828116911614156116e85760405162461bcd60e51b815260206004820152601860248201527f4f776e65722063616e6e6f74206265206578636c7564656400000000000000006044820152606401610e14565b6001600160a01b03811660009081526001602052604090205415611742576001600160a01b0381166000908152600160205260409020546117289061102e565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031633146117d25760405162461bcd60e51b8152600401610e14906146f3565b60648110156117e057600080fd5b6117ec6012600a614919565b6117f690826149c4565b60135550565b6000546001600160a01b031633146118265760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821661187c5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206f70657261746f72206164647265737300000000000000006044820152606401610e14565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118d15760405162461bcd60e51b8152600401610e14906146f3565b80518251146119115760405162461bcd60e51b815260206004820152600c60248201526b496e76616c69642073697a6560a01b6044820152606401610e14565b3360005b8351811015610f7957600084828151811061194057634e487b7160e01b600052603260045260246000fd5b602002602001015190506000611954613345565b85848151811061197457634e487b7160e01b600052603260045260246000fd5b602002602001015161198691906149c4565b6001600160a01b0385166000908152600160205260409020549091506119ad9082906149e3565b6001600160a01b0380861660009081526001602052604080822093909355908416815220546119dd90829061489e565b6001600160a01b03808416600081815260016020526040902092909255865190861690600080516020614a6583398151915290889087908110611a3057634e487b7160e01b600052603260045260246000fd5b6020026020010151604051611a4791815260200190565b60405180910390a350508080611a5c906149fa565b915050611915565b6001600160a01b03811660009081526007602052604081205460ff1615611aa157506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e509061102e565b6000546001600160a01b03163314611aed5760405162461bcd60e51b8152600401610e14906146f3565b611af76000613368565b565b6000546001600160a01b03163314611b235760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415611b625760405162461bcd60e51b8152600401610e1490614796565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611bb75760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0381166000908152601a602052604090205460ff1615611c2f5760405162461bcd60e51b815260206004820152602660248201527f534f4c4944424c4f434b3a204163636f756e7420697320616c726561647920626044820152651b1bd8dad95960d21b6064820152608401610e14565b6001600160a01b0381166000818152601a6020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b03163314611cab5760405162461bcd60e51b8152600401610e14906146f3565b806001600160a01b038116611cd25760405162461bcd60e51b8152600401610e149061475f565b6017546001600160a01b0383811691161415611d005760405162461bcd60e51b8152600401610e14906146bc565b50601780546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b03163314611d545760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821660009081526005602052604090205460ff1615158115151415611d935760405162461bcd60e51b8152600401610e1490614796565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b336000908152600c602052604090205460ff1680611df5575033611dea6000546001600160a01b031690565b6001600160a01b0316145b611e115760405162461bcd60e51b8152600401610e1490614728565b6015805460ff1916831515179055611e2a8160016149c4565b6016555050565b6000546001600160a01b03163314611e5b5760405162461bcd60e51b8152600401610e14906146f3565b80471015611eab5760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610e14565b600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015611355573d6000803e3d6000fd5b6000546001600160a01b03163314611f0e5760405162461bcd60e51b8152600401610e14906146f3565b60208490556021839055602282905560238190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015611fd35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e14565b611fe2338561101e86856149e3565b5060019392505050565b6000610e4c338484612a90565b6000546001600160a01b031633146120235760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b0316331461206e5760405162461bcd60e51b8152600401610e14906146f3565b6064825111156120b65760405162461bcd60e51b815260206004820152601360248201527214d3d31251109313d0d2ce88125b9d985b1a59606a1b6044820152606401610e14565b60005b825181101561212b5781600860008584815181106120e757634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580612123816149fa565b9150506120b9565b505050565b6000546001600160a01b0316331461215a5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b031633146121a85760405162461bcd60e51b8152600401610e14906146f3565b601f546001600160a01b03166122005760405162461bcd60e51b815260206004820152601b60248201527f563120746f6b656e2061646472657373206973206e6f742073657400000000006044820152606401610e14565b601f546040516370a0823160e01b81526001600160a01b0383811660048301529091169060009082906370a082319060240160206040518083038186803b15801561224a57600080fd5b505afa15801561225e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228291906145bc565b9050600081116122d45760405162461bcd60e51b815260206004820152601760248201527f486f6c64657220686173206e6f20563120746f6b656e730000000000000000006044820152606401610e14565b61212b338483612a90565b6000546001600160a01b031633146123095760405162461bcd60e51b8152600401610e14906146f3565b6000811161231657600080fd5b61232381620f42406149c4565b60115550565b6000546001600160a01b031633146123535760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910160405180910390a25050565b6000546001600160a01b031633146123dc5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03811661242b5760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420726f75746572206164647265737360501b6044820152606401610e14565b600d80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561248257600080fd5b505afa158015612496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ba91906142eb565b6001600160a01b031663c9c6539630600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561251757600080fd5b505afa15801561252b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254f91906142eb565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561259757600080fd5b505af11580156125ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cf91906142eb565b90506001600160a01b0381166126275760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f20637265617465206e65772070616972000000000000006044820152606401610e14565b600e80546001600160a01b0319166001600160a01b03831690811790915561135590612130565b6000546001600160a01b031633146126785760405162461bcd60e51b8152600401610e14906146f3565b806001600160a01b03811661269f5760405162461bcd60e51b8152600401610e149061475f565b6019546001600160a01b03838116911614156126cd5760405162461bcd60e51b8152600401610e14906146bc565b50601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461271a5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821660009081526008602052604090205460ff16151581151514156127895760405162461bcd60e51b815260206004820152601d60248201527f534f4c4944424c4f434b3a2056616c756520616c7265616479207365740000006044820152606401610e14565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b336000908152600c602052604090205460ff16806127eb5750336127e06000546001600160a01b031690565b6001600160a01b0316145b6128075760405162461bcd60e51b8152600401610e1490614728565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146128525760405162461bcd60e51b8152600401610e14906146f3565b806001600160a01b0381166128795760405162461bcd60e51b8152600401610e149061475f565b6018546001600160a01b03838116911614156128a75760405162461bcd60e51b8152600401610e14906146bc565b50601880546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146128fb5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0381166129605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e14565b61296981613368565b50565b6001600160a01b0383166129ce5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e14565b6001600160a01b038216612a2f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e14565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612af45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e14565b6001600160a01b038216612b565760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e14565b60008111612b945760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610e14565b612b9d83611a64565b811115612be35760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610e14565b6001600160a01b03831660009081526008602052604090205460ff16158015612c2557506001600160a01b03821660009081526008602052604090205460ff16155b612c615760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610e14565b6001600160a01b0383166000908152601e602052604090205460ff16158015612ca357506001600160a01b0382166000908152601e602052604090205460ff16155b15612f3e57601d5460ff16612d0d5760405162461bcd60e51b815260206004820152602a60248201527f534f4c4944424c4f434b3a2054726164696e672069732063757272656e746c79604482015269103234b9b0b13632b21760b11b6064820152608401610e14565b6001600160a01b0382166000908152601a602052604090205460ff1615612d765760405162461bcd60e51b815260206004820152601e60248201527f534f4c4944424c4f434b3a204163636f756e7420697320626c6f636b656400006044820152606401610e14565b6001600160a01b0383166000908152601a602052604090205460ff1615612ddf5760405162461bcd60e51b815260206004820152601e60248201527f534f4c4944424c4f434b3a204163636f756e7420697320626c6f636b656400006044820152606401610e14565b6001600160a01b03821660009081526005602052604090205460ff16158015612e2157506001600160a01b03831660009081526005602052604090205460ff16155b15612e9357601254811115612e935760405162461bcd60e51b815260206004820152603260248201527f534f4c4944424c4f434b3a2042757920616d6f756e742065786365656473207460448201527134329036b0bc2a3c213abca0b6b7bab73a1760711b6064820152608401610e14565b6001600160a01b03821660009081526006602052604090205460ff16612f3e5760135481612ec084611a64565b612eca919061489e565b1115612f3e5760405162461bcd60e51b815260206004820152603f60248201527f534f4c4944424c4f434b3a2045787065637465642077616c6c657420616d6f7560448201527f6e74206578636565647320746865206d617857616c6c6574416d6f756e742e006064820152608401610e14565b60155460ff1615612fc1576001600160a01b038316600090815260146020526040812054612f6c90426149e3565b90506016548111612fbf5760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610e14565b505b6001600160a01b03831660009081526004602052604090205460ff1615801561300357506001600160a01b03821660009081526004602052604090205460ff16155b80156130125750600b5460ff16155b1561307a576001600160a01b03831660009081526009602052604090205460ff168061305657506001600160a01b03821660009081526009602052604090205460ff165b1561306d5761306883838360016133b8565b613087565b61306883838360026133b8565b61308783838360006133b8565b6001600160a01b0383166000908152601460205260409020429055600b5460ff161580156130c35750600e546001600160a01b03848116911614155b80156130dd5750600e546001600160a01b03838116911614155b801561310257506001600160a01b03831660009081526004602052604090205460ff16155b801561312757506001600160a01b03821660009081526004602052604090205460ff16155b1561212b576040805160038082526080820190925260009160208201606080368337019050509050308160008151811061317157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156131c557600080fd5b505afa1580156131d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fd91906142eb565b8160018151811061321e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260195482519116908290600290811061325d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d546000911663d06ca61f61328830611a64565b846040518363ffffffff1660e01b81526004016132a69291906147ec565b60006040518083038186803b1580156132be57600080fd5b505afa1580156132d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132fa91908101906144d8565b60028151811061331a57634e487b7160e01b600052603260045260246000fd5b60200260200101519050601154811061333e5761333e61333930611a64565b6136bb565b5050505050565b6000806000613352613af8565b909250905061336181836148b6565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006133c48383613cb3565b6001600160a01b03861660009081526007602052604090205490915060ff1615613426576001600160a01b03851660009081526002602052604090205461340c9084906149e3565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526007602052604090205460ff16156134895760c08101516001600160a01b03851660009081526002602052604090205461346f919061489e565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b0386166000908152600160205260409020546134ae91906149e3565b6001600160a01b03808716600090815260016020908152604080832094909455840151918716815291909120546134e5919061489e565b6001600160a01b0385166000908152600160205260409081902091909155810151151580613517575060008160e00151115b1561352e5761352e81604001518260e00151613cfb565b60008160600151118061354657506000816101000151115b156135985761355e8160600151826101000151613d30565b6017546101008201516040519081526001600160a01b0391821691871690600080516020614a658339815191529060200160405180910390a35b6000816080015111806135b057506000816101200151115b15613602576135c88160800151826101200151613dc7565b6018546101208201516040519081526001600160a01b0391821691871690600080516020614a658339815191529060200160405180910390a35b60008160a00151118061361a57506000816101400151115b15613675576136328160a00151826101400151613e5e565b61dead6001600160a01b0316856001600160a01b0316600080516020614a6583398151915283610140015160405161366c91815260200190565b60405180910390a35b836001600160a01b0316856001600160a01b0316600080516020614a658339815191528360c001516040516136ac91815260200190565b60405180910390a35050505050565b600b805460ff191660011790556040805160038082526080820190925260009160208201606080368337019050509050308160008151811061370d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561376157600080fd5b505afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906142eb565b816001815181106137ba57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526019548251911690829060029081106137f957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d5461381f913091168461296c565b600d54604051635c11d79560e01b81526001600160a01b0390911690635c11d7959061385890859060009086903090429060040161480d565b600060405180830381600087803b15801561387257600080fd5b505af1158015613886573d6000803e3d6000fd5b50506019546040516370a0823160e01b81523060048201526001600160a01b0390911692506000915082906370a082319060240160206040518083038186803b1580156138d257600080fd5b505afa1580156138e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390a91906145bc565b60405163095ea7b360e01b8152306004820152602481018290529091506001600160a01b0383169063095ea7b390604401602060405180830381600087803b15801561395557600080fd5b505af1158015613969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398d919061456b565b5060008482602a600001546139a291906149c4565b6139ac91906148b6565b905060008583602a600101546139c291906149c4565b6139cc91906148b6565b60175460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291925085169063a9059cbb90604401602060405180830381600087803b158015613a1c57600080fd5b505af1158015613a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a54919061456b565b5060185460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529085169063a9059cbb90604401602060405180830381600087803b158015613aa357600080fd5b505af1158015613ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613adb919061456b565b50506000602a819055602b555050600b805460ff19169055505050565b601054600f546000918291825b600a54811015613c82578260016000600a8481548110613b3557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613bae57508160026000600a8481548110613b8757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613bc457601054600f54945094505050509091565b60016000600a8381548110613be957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c1890846149e3565b925060026000600a8381548110613c3f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c6e90836149e3565b915080613c7a816149fa565b915050613b05565b50600f54601054613c9391906148b6565b821015613caa57601054600f549350935050509091565b90939092509050565b613cbb6141fd565b613cc58383613f1d565b9050613cda818484613cd5613345565b614115565b60a08701526080860152606085015260408401526020830152815292915050565b8160106000828254613d0d91906149e3565b909155505060248054829190600090613d2790849061489e565b90915550505050565b8060246001016000828254613d45919061489e565b90915550506017546001600160a01b031660009081526007602052604090205460ff1615613d9d576017546001600160a01b031660009081526002602052604081208054839290613d9790849061489e565b90915550505b6017546001600160a01b031660009081526001602052604081208054849290613d2790849061489e565b8060246002016000828254613ddc919061489e565b90915550506018546001600160a01b031660009081526007602052604090205460ff1615613e34576018546001600160a01b031660009081526002602052604081208054839290613e2e90849061489e565b90915550505b6018546001600160a01b031660009081526001602052604081208054849290613d2790849061489e565b8060246003016000828254613e73919061489e565b90915550506018546001600160a01b031660009081526007602052604090205460ff1615613edf5761dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054839290613ed990849061489e565b90915550505b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054849290613d2790849061489e565b613f256141fd565b60ff8216613f395760c08101839052610e50565b8160ff166001141561407f576020546103e890613f5690856149c4565b613f6091906148b6565b60e08201526021546103e890613f7690856149c4565b613f8091906148b6565b6101008201526022546103e890613f9790856149c4565b613fa191906148b6565b6101208201526023546103e890613fb890856149c4565b613fc291906148b6565b610140820152602154602854610100830151613fde91906149c4565b613fe891906148b6565b602a8054600090613ffa90849061489e565b909155505060215460295461010083015161401591906149c4565b61401f91906148b6565b602b805460009061403190849061489e565b909155505061014081015161010082015161012083015160e084015161405790876149e3565b61406191906149e3565b61406b91906149e3565b61407591906149e3565b60c0820152610e50565b6020546103e89061409090856149c4565b61409a91906148b6565b60e08201526023546103e8906140b090856149c4565b6140ba91906148b6565b6101408201526029546103e8906140d190856149c4565b6140db91906148b6565b6101008201819052602b80546000906140f590849061489e565b909155505061014081015161010082015160e083015161406190866149e3565b60008080808080614126878a6149c4565b955060ff8816614144575084935060009250829150819050806141f0565b8760ff16600114156141cd57868a60e0015161416091906149c4565b9350868a610100015161417391906149c4565b9250868a610120015161418691906149c4565b9150868a610140015161419991906149c4565b90508082846141a8878a6149e3565b6141b291906149e3565b6141bc91906149e3565b6141c691906149e3565b94506141f0565b868a60e001516141dd91906149c4565b9350868a610120015161418691906149c4565b9499939850945094509450565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600082601f830112614267578081fd5b8135602061427c6142778361487a565b614849565b80838252828201915082860187848660051b890101111561429b578586fd5b855b858110156142c25781356142b081614a41565b8452928401929084019060010161429d565b5090979650505050505050565b6000602082840312156142e0578081fd5b81356110ab81614a41565b6000602082840312156142fc578081fd5b81516110ab81614a41565b60008060408385031215614319578081fd5b823561432481614a41565b9150602083013561433481614a41565b809150509250929050565b600080600060608486031215614353578081fd5b833561435e81614a41565b9250602084013561436e81614a41565b929592945050506040919091013590565b60008060408385031215614391578182fd5b823561439c81614a41565b9150602083013561433481614a56565b600080604083850312156143be578182fd5b82356143c981614a41565b946020939093013593505050565b600080604083850312156143e9578182fd5b823567ffffffffffffffff80821115614400578384fd5b61440c86838701614257565b9350602091508185013581811115614422578384fd5b85019050601f81018613614434578283fd5b80356144426142778261487a565b80828252848201915084840189868560051b8701011115614461578687fd5b8694505b83851015614483578035835260019490940193918501918501614465565b5080955050505050509250929050565b600080604083850312156144a5578182fd5b823567ffffffffffffffff8111156144bb578283fd5b6144c785828601614257565b925050602083013561433481614a56565b600060208083850312156144ea578182fd5b825167ffffffffffffffff811115614500578283fd5b8301601f81018513614510578283fd5b805161451e6142778261487a565b80828252848201915084840188868560051b870101111561453d578687fd5b8694505b8385101561455f578051835260019490940193918501918501614541565b50979650505050505050565b60006020828403121561457c578081fd5b81516110ab81614a56565b60008060408385031215614599578182fd5b82356143c981614a56565b6000602082840312156145b5578081fd5b5035919050565b6000602082840312156145cd578081fd5b5051919050565b600080604083850312156145e6578182fd5b50508035926020909101359150565b6000806000806080858703121561460a578182fd5b5050823594602084013594506040840135936060013592509050565b6000815180845260208085019450808401835b8381101561465e5781516001600160a01b031687529582019590820190600101614639565b509495945050505050565b6000602080835283518082850152825b8181101561469557858101830151858201604001528201614679565b818111156146a65783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601e908201527f534f4c4944424c4f434b3a2057616c6c657420616c7265616479207365740000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526019908201527f43616c6c6572206973206e6f7420616e206f70657261746f7200000000000000604082015260600190565b60208082526018908201527f534f4c4944424c4f434b3a205a65726f20616464726573730000000000000000604082015260600190565b60208082526036908201527f534f4c4944424c4f434b3a204163636f756e7420697320616c7265616479207460408201527568652076616c7565206f6620276578636c756465642760501b606082015260800190565b8281526040602082015260006148056040830184614626565b949350505050565b85815284602082015260a06040820152600061482c60a0830186614626565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561487257614872614a2b565b604052919050565b600067ffffffffffffffff82111561489457614894614a2b565b5060051b60200190565b600082198211156148b1576148b1614a15565b500190565b6000826148d157634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156149115781600019048211156148f7576148f7614a15565b8085161561490457918102915b93841c93908002906148db565b509250929050565b60006110ab60ff84168360008261493257506001610e50565b8161493f57506000610e50565b8160018114614955576002811461495f5761497b565b6001915050610e50565b60ff84111561497057614970614a15565b50506001821b610e50565b5060208310610133831016604e8410600b841016171561499e575081810a610e50565b6149a883836148d6565b80600019048211156149bc576149bc614a15565b029392505050565b60008160001904831182151516156149de576149de614a15565b500290565b6000828210156149f5576149f5614a15565b500390565b6000600019821415614a0e57614a0e614a15565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461296957600080fd5b801515811461296957600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220c064b03aab7fdbcbac88b04ff6bfffa542218e5f5cab2bf03fecfac640609fa264736f6c634300080400334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572
Deployed Bytecode
0x6080604052600436106104095760003560e01c806388f8202011610213578063c2b7bbb611610123578063e0baeb29116100ab578063ea2f0b371161007a578063ea2f0b3714610d50578063ee36e35914610d70578063f023f57314610d8a578063f2fde38b14610daa578063f887ea4014610dca57600080fd5b8063e0baeb2914610cc1578063e116554514610ce1578063e2f4560514610d01578063e5e31b1314610d1757600080fd5b8063d257b34f116100f2578063d257b34f14610c05578063d2ce0db214610c25578063d322157614610c3b578063dd62ed3e14610c5b578063e006eadf14610ca157600080fd5b8063c2b7bbb614610b85578063c54e44eb14610ba5578063c5f956af14610bc5578063ce5494bb14610be557600080fd5b8063a457c2d7116101a6578063a9059cbb11610175578063a9059cbb14610ad6578063aa4bde2814610af6578063af6c9c1d14610b0c578063b31470a414610b2c578063b6d5f14414610b4c57600080fd5b8063a457c2d714610a30578063a87859f614610a50578063a8a69b9d14610a7d578063a8aa1b3114610ab657600080fd5b806395d89b41116101e257806395d89b411461099f5780639ba5e4d5146109cd5780639e252f00146109f0578063a12a7d6114610a1057600080fd5b806388f82020146109125780638c0ae3df1461094b5780638c0b5e221461096b5780638da5cb5b1461098157600080fd5b80634d78fdc611610319578063706f6937116102a1578063728f8eea11610270578063728f8eea1461084f578063781edb3c146108925780637c0a893d146108b2578063809d458d146108d2578063880bcbc1146108f257600080fd5b8063706f6937146107ca57806370a08231146107ea578063715018a61461080a5780637286ec321461081f57600080fd5b80635ab8fa56116102e85780635ab8fa56146106f9578063638b1b1414610731578063657f644b1461075157806365b36ce2146107715780636d70f7ae1461079157600080fd5b80634d78fdc6146106605780634e2b57801461068057806352390c02146106a05780635342acb4146106c057600080fd5b80632d8381191161039c5780633685d4191161036b5780633685d419146105a757806339509351146105c75780633bbac579146105e757806340b28c2f14610620578063437823ec1461064057600080fd5b80632d838119146105365780632e092fe814610556578063313ce5671461057657806334cf1fea1461059257600080fd5b80630bd05b69116103d85780630bd05b69146104c25780630d65df9b146104d757806318160ddd146104f757806323b872dd1461051657600080fd5b8063064a59d014610415578063068b391b1461044457806306fdde0314610466578063095ea7b3146104a257600080fd5b3661041057005b600080fd5b34801561042157600080fd5b50601d5461042f9060ff1681565b60405190151581526020015b60405180910390f35b34801561045057600080fd5b5061046461045f3660046142cf565b610dea565b005b34801561047257600080fd5b5060408051808201909152600a815269534f4c4944424c4f434b60b01b60208201525b60405161043b9190614669565b3480156104ae57600080fd5b5061042f6104bd3660046143ac565b610e3f565b3480156104ce57600080fd5b50610464610e56565b3480156104e357600080fd5b506104646104f236600461433f565b610ecd565b34801561050357600080fd5b50600f545b60405190815260200161043b565b34801561052257600080fd5b5061042f61053136600461433f565b610f7f565b34801561054257600080fd5b506105086105513660046145a4565b61102e565b34801561056257600080fd5b506104646105713660046145a4565b6110b2565b34801561058257600080fd5b506040516012815260200161043b565b34801561059e57600080fd5b50610464611106565b3480156105b357600080fd5b506104646105c23660046142cf565b61116a565b3480156105d357600080fd5b5061042f6105e23660046143ac565b611359565b3480156105f357600080fd5b5061042f6106023660046142cf565b6001600160a01b031660009081526008602052604090205460ff1690565b34801561062c57600080fd5b5061046461063b366004614307565b611390565b34801561064c57600080fd5b5061046461065b3660046142cf565b6113f1565b34801561066c57600080fd5b5061046461067b3660046142cf565b611468565b34801561068c57600080fd5b5061046461069b3660046145d4565b611552565b3480156106ac57600080fd5b506104646106bb3660046142cf565b6115b3565b3480156106cc57600080fd5b5061042f6106db3660046142cf565b6001600160a01b031660009081526004602052604090205460ff1690565b34801561070557600080fd5b50601f54610719906001600160a01b031681565b6040516001600160a01b03909116815260200161043b565b34801561073d57600080fd5b50601854610719906001600160a01b031681565b34801561075d57600080fd5b5061046461076c3660046145a4565b6117a8565b34801561077d57600080fd5b5061046461078c36600461437f565b6117fc565b34801561079d57600080fd5b5061042f6107ac3660046142cf565b6001600160a01b03166000908152600c602052604090205460ff1690565b3480156107d657600080fd5b506104646107e53660046143d7565b6118a7565b3480156107f657600080fd5b506105086108053660046142cf565b611a64565b34801561081657600080fd5b50610464611ac3565b34801561082b57600080fd5b50602a54602b5461083a919082565b6040805192835260208301919091520161043b565b34801561085b57600080fd5b506020546021546022546023546108729392919084565b60408051948552602085019390935291830152606082015260800161043b565b34801561089e57600080fd5b506104646108ad36600461437f565b611af9565b3480156108be57600080fd5b506104646108cd3660046142cf565b611b8d565b3480156108de57600080fd5b506104646108ed3660046142cf565b611c81565b3480156108fe57600080fd5b5061046461090d36600461437f565b611d2a565b34801561091e57600080fd5b5061042f61092d3660046142cf565b6001600160a01b031660009081526007602052604090205460ff1690565b34801561095757600080fd5b50610464610966366004614587565b611dbe565b34801561097757600080fd5b5061050860125481565b34801561098d57600080fd5b506000546001600160a01b0316610719565b3480156109ab57600080fd5b5060408051808201909152600581526414d3d3125160da1b6020820152610495565b3480156109d957600080fd5b506024546025546026546027546108729392919084565b3480156109fc57600080fd5b50610464610a0b3660046145a4565b611e31565b348015610a1c57600080fd5b50610464610a2b3660046145f5565b611ee4565b348015610a3c57600080fd5b5061042f610a4b3660046143ac565b611f51565b348015610a5c57600080fd5b50610508610a6b3660046142cf565b60146020526000908152604090205481565b348015610a8957600080fd5b5061042f610a983660046142cf565b6001600160a01b031660009081526006602052604090205460ff1690565b348015610ac257600080fd5b50600e54610719906001600160a01b031681565b348015610ae257600080fd5b5061042f610af13660046143ac565b611fec565b348015610b0257600080fd5b5061050860135481565b348015610b1857600080fd5b50610464610b273660046142cf565b611ff9565b348015610b3857600080fd5b50610464610b47366004614493565b612044565b348015610b5857600080fd5b5061042f610b673660046142cf565b6001600160a01b031660009081526005602052604090205460ff1690565b348015610b9157600080fd5b50610464610ba03660046142cf565b612130565b348015610bb157600080fd5b50601954610719906001600160a01b031681565b348015610bd157600080fd5b50601754610719906001600160a01b031681565b348015610bf157600080fd5b50610464610c003660046142cf565b61217e565b348015610c1157600080fd5b50610464610c203660046145a4565b6122df565b348015610c3157600080fd5b5061050860165481565b348015610c4757600080fd5b50610464610c5636600461437f565b612329565b348015610c6757600080fd5b50610508610c76366004614307565b6001600160a01b03918216600090815260036020908152604080832093909416825291909152205490565b348015610cad57600080fd5b50610464610cbc3660046142cf565b6123b2565b348015610ccd57600080fd5b50610464610cdc3660046142cf565b61264e565b348015610ced57600080fd5b50610464610cfc36600461437f565b6126f0565b348015610d0d57600080fd5b5061050860115481565b348015610d2357600080fd5b5061042f610d323660046142cf565b6001600160a01b031660009081526009602052604090205460ff1690565b348015610d5c57600080fd5b50610464610d6b3660046142cf565b6127b4565b348015610d7c57600080fd5b5060155461042f9060ff1681565b348015610d9657600080fd5b50610464610da53660046142cf565b612828565b348015610db657600080fd5b50610464610dc53660046142cf565b6128d1565b348015610dd657600080fd5b50600d54610719906001600160a01b031681565b6000546001600160a01b03163314610e1d5760405162461bcd60e51b8152600401610e14906146f3565b60405180910390fd5b601f80546001600160a01b0319166001600160a01b0392909216919091179055565b6000610e4c33848461296c565b5060015b92915050565b6000546001600160a01b03163314610e805760405162461bcd60e51b8152600401610e14906146f3565b601d805460ff19166001179055601b54610e9d5742601b5543601c555b6040516000906001907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908390a3565b6000546001600160a01b03163314610ef75760405162461bcd60e51b8152600401610e14906146f3565b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb90604401602060405180830381600087803b158015610f4157600080fd5b505af1158015610f55573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f79919061456b565b50505050565b6001600160a01b0383166000908152600360209081526040808320338452909152812054828110156110045760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610e14565b61100f858585612a90565b611023853361101e86856149e3565b61296c565b506001949350505050565b60006010548211156110955760405162461bcd60e51b815260206004820152602a60248201527f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260448201526965666c656374696f6e7360b01b6064820152608401610e14565b600061109f613345565b90506110ab81846148b6565b9392505050565b6000546001600160a01b031633146110dc5760405162461bcd60e51b8152600401610e14906146f3565b60648110156110ea57600080fd5b6110f66012600a614919565b61110090826149c4565b60125550565b6000546001600160a01b031633146111305760405162461bcd60e51b8152600401610e14906146f3565b601d805460ff191690556040516001906000907fa0f694e30e34d9f05d12691b612650129ed8888d1f93b25fa0cd92e4416a8338908290a3565b6000546001600160a01b031633146111945760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03811660009081526007602052604090205460ff166111fc5760405162461bcd60e51b815260206004820152601760248201527f4163636f756e74206973206e6f74206578636c756465640000000000000000006044820152606401610e14565b60005b600a5481101561135557816001600160a01b0316600a828154811061123457634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b0316141561134357600a805461125f906001906149e3565b8154811061127d57634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600a80546001600160a01b0390921691839081106112b757634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559184168152600282526040808220829055600790925220805460ff19169055600a80548061131d57634e487b7160e01b600052603160045260246000fd5b600082815260209020810160001990810180546001600160a01b03191690550190555050565b8061134d816149fa565b9150506111ff565b5050565b3360008181526003602090815260408083206001600160a01b03871684529091528120549091610e4c91859061101e90869061489e565b6000546001600160a01b031633146113ba5760405162461bcd60e51b8152600401610e14906146f3565b600d80546001600160a01b038085166001600160a01b031992831617909255600e8054928416929091168217905561135590612130565b336000908152600c602052604090205460ff168061142857503361141d6000546001600160a01b031690565b6001600160a01b0316145b6114445760405162461bcd60e51b8152600401610e1490614728565b6001600160a01b03166000908152600460205260409020805460ff19166001179055565b6000546001600160a01b031633146114925760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0381166000908152601a602052604090205460ff166115055760405162461bcd60e51b815260206004820152602260248201527f534f4c4944424c4f434b3a204163636f756e74206973206e6f7420626c636f6b604482015261195960f21b6064820152608401610e14565b6001600160a01b0381166000818152601a6020526040808220805460ff19169055519091907f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba908390a350565b6000546001600160a01b0316331461157c5760405162461bcd60e51b8152600401610e14906146f3565b602882905560298190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a15050565b6000546001600160a01b031633146115dd5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03811660009081526007602052604090205460ff16156116465760405162461bcd60e51b815260206004820152601b60248201527f4163636f756e7420697320616c7265616479206578636c7564656400000000006044820152606401610e14565b600a5460c8101561168a5760405162461bcd60e51b815260206004820152600e60248201526d092dcecc2d8d2c840d8cadccee8d60931b6044820152606401610e14565b6000546001600160a01b03828116911614156116e85760405162461bcd60e51b815260206004820152601860248201527f4f776e65722063616e6e6f74206265206578636c7564656400000000000000006044820152606401610e14565b6001600160a01b03811660009081526001602052604090205415611742576001600160a01b0381166000908152600160205260409020546117289061102e565b6001600160a01b0382166000908152600260205260409020555b6001600160a01b03166000818152600760205260408120805460ff19166001908117909155600a805491820181559091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319169091179055565b6000546001600160a01b031633146117d25760405162461bcd60e51b8152600401610e14906146f3565b60648110156117e057600080fd5b6117ec6012600a614919565b6117f690826149c4565b60135550565b6000546001600160a01b031633146118265760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821661187c5760405162461bcd60e51b815260206004820152601860248201527f496e76616c6964206f70657261746f72206164647265737300000000000000006044820152606401610e14565b6001600160a01b03919091166000908152600c60205260409020805460ff1916911515919091179055565b6000546001600160a01b031633146118d15760405162461bcd60e51b8152600401610e14906146f3565b80518251146119115760405162461bcd60e51b815260206004820152600c60248201526b496e76616c69642073697a6560a01b6044820152606401610e14565b3360005b8351811015610f7957600084828151811061194057634e487b7160e01b600052603260045260246000fd5b602002602001015190506000611954613345565b85848151811061197457634e487b7160e01b600052603260045260246000fd5b602002602001015161198691906149c4565b6001600160a01b0385166000908152600160205260409020549091506119ad9082906149e3565b6001600160a01b0380861660009081526001602052604080822093909355908416815220546119dd90829061489e565b6001600160a01b03808416600081815260016020526040902092909255865190861690600080516020614a6583398151915290889087908110611a3057634e487b7160e01b600052603260045260246000fd5b6020026020010151604051611a4791815260200190565b60405180910390a350508080611a5c906149fa565b915050611915565b6001600160a01b03811660009081526007602052604081205460ff1615611aa157506001600160a01b031660009081526002602052604090205490565b6001600160a01b038216600090815260016020526040902054610e509061102e565b6000546001600160a01b03163314611aed5760405162461bcd60e51b8152600401610e14906146f3565b611af76000613368565b565b6000546001600160a01b03163314611b235760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821660009081526006602052604090205460ff1615158115151415611b625760405162461bcd60e51b8152600401610e1490614796565b6001600160a01b03919091166000908152600660205260409020805460ff1916911515919091179055565b6000546001600160a01b03163314611bb75760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0381166000908152601a602052604090205460ff1615611c2f5760405162461bcd60e51b815260206004820152602660248201527f534f4c4944424c4f434b3a204163636f756e7420697320616c726561647920626044820152651b1bd8dad95960d21b6064820152608401610e14565b6001600160a01b0381166000818152601a6020526040808220805460ff1916600190811790915590519092917f2f092974a5a89dc001cc04aa60bc3afe575e0b7444ef2197f7bb5714b51528ba91a350565b6000546001600160a01b03163314611cab5760405162461bcd60e51b8152600401610e14906146f3565b806001600160a01b038116611cd25760405162461bcd60e51b8152600401610e149061475f565b6017546001600160a01b0383811691161415611d005760405162461bcd60e51b8152600401610e14906146bc565b50601780546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b03163314611d545760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821660009081526005602052604090205460ff1615158115151415611d935760405162461bcd60e51b8152600401610e1490614796565b6001600160a01b03919091166000908152600560205260409020805460ff1916911515919091179055565b336000908152600c602052604090205460ff1680611df5575033611dea6000546001600160a01b031690565b6001600160a01b0316145b611e115760405162461bcd60e51b8152600401610e1490614728565b6015805460ff1916831515179055611e2a8160016149c4565b6016555050565b6000546001600160a01b03163314611e5b5760405162461bcd60e51b8152600401610e14906146f3565b80471015611eab5760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74204554482062616c616e636500000000000000006044820152606401610e14565b600080546040516001600160a01b039091169183156108fc02918491818181858888f19350505050158015611355573d6000803e3d6000fd5b6000546001600160a01b03163314611f0e5760405162461bcd60e51b8152600401610e14906146f3565b60208490556021839055602282905560238190556040517f846206d6c3449ac0b05841dfb88bf28b55aef00f96152490c69c96238048de1590600090a150505050565b3360009081526003602090815260408083206001600160a01b038616845290915281205482811015611fd35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610e14565b611fe2338561101e86856149e3565b5060019392505050565b6000610e4c338484612a90565b6000546001600160a01b031633146120235760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03166000908152600960205260409020805460ff19169055565b6000546001600160a01b0316331461206e5760405162461bcd60e51b8152600401610e14906146f3565b6064825111156120b65760405162461bcd60e51b815260206004820152601360248201527214d3d31251109313d0d2ce88125b9d985b1a59606a1b6044820152606401610e14565b60005b825181101561212b5781600860008584815181106120e757634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580612123816149fa565b9150506120b9565b505050565b6000546001600160a01b0316331461215a5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03166000908152600960205260409020805460ff19166001179055565b6000546001600160a01b031633146121a85760405162461bcd60e51b8152600401610e14906146f3565b601f546001600160a01b03166122005760405162461bcd60e51b815260206004820152601b60248201527f563120746f6b656e2061646472657373206973206e6f742073657400000000006044820152606401610e14565b601f546040516370a0823160e01b81526001600160a01b0383811660048301529091169060009082906370a082319060240160206040518083038186803b15801561224a57600080fd5b505afa15801561225e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061228291906145bc565b9050600081116122d45760405162461bcd60e51b815260206004820152601760248201527f486f6c64657220686173206e6f20563120746f6b656e730000000000000000006044820152606401610e14565b61212b338483612a90565b6000546001600160a01b031633146123095760405162461bcd60e51b8152600401610e14906146f3565b6000811161231657600080fd5b61232381620f42406149c4565b60115550565b6000546001600160a01b031633146123535760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0382166000818152601e6020908152604091829020805460ff191685151590811790915591519182527fcb9f97b7b4b41413e5c8d418a8cf9a88db1cf34dee66b213d070faf881d9d350910160405180910390a25050565b6000546001600160a01b031633146123dc5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03811661242b5760405162461bcd60e51b8152602060048201526016602482015275496e76616c696420726f75746572206164647265737360501b6044820152606401610e14565b600d80546001600160a01b0319166001600160a01b0383169081179091556040805163c45a015560e01b815290516000929163c45a0155916004808301926020929190829003018186803b15801561248257600080fd5b505afa158015612496573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ba91906142eb565b6001600160a01b031663c9c6539630600d60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b15801561251757600080fd5b505afa15801561252b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061254f91906142eb565b6040516001600160e01b031960e085901b1681526001600160a01b03928316600482015291166024820152604401602060405180830381600087803b15801561259757600080fd5b505af11580156125ab573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cf91906142eb565b90506001600160a01b0381166126275760405162461bcd60e51b815260206004820152601960248201527f4661696c656420746f20637265617465206e65772070616972000000000000006044820152606401610e14565b600e80546001600160a01b0319166001600160a01b03831690811790915561135590612130565b6000546001600160a01b031633146126785760405162461bcd60e51b8152600401610e14906146f3565b806001600160a01b03811661269f5760405162461bcd60e51b8152600401610e149061475f565b6019546001600160a01b03838116911614156126cd5760405162461bcd60e51b8152600401610e14906146bc565b50601980546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b0316331461271a5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b03821660009081526008602052604090205460ff16151581151514156127895760405162461bcd60e51b815260206004820152601d60248201527f534f4c4944424c4f434b3a2056616c756520616c7265616479207365740000006044820152606401610e14565b6001600160a01b03919091166000908152600860205260409020805460ff1916911515919091179055565b336000908152600c602052604090205460ff16806127eb5750336127e06000546001600160a01b031690565b6001600160a01b0316145b6128075760405162461bcd60e51b8152600401610e1490614728565b6001600160a01b03166000908152600460205260409020805460ff19169055565b6000546001600160a01b031633146128525760405162461bcd60e51b8152600401610e14906146f3565b806001600160a01b0381166128795760405162461bcd60e51b8152600401610e149061475f565b6018546001600160a01b03838116911614156128a75760405162461bcd60e51b8152600401610e14906146bc565b50601880546001600160a01b039092166001600160a01b0319909216821790556000526004602052565b6000546001600160a01b031633146128fb5760405162461bcd60e51b8152600401610e14906146f3565b6001600160a01b0381166129605760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610e14565b61296981613368565b50565b6001600160a01b0383166129ce5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610e14565b6001600160a01b038216612a2f5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610e14565b6001600160a01b0383811660008181526003602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b038316612af45760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610e14565b6001600160a01b038216612b565760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610e14565b60008111612b945760405162461bcd60e51b815260206004820152600b60248201526a16995c9bc8185b5bdd5b9d60aa1b6044820152606401610e14565b612b9d83611a64565b811115612be35760405162461bcd60e51b8152602060048201526014602482015273496e73756666696369656e742062616c616e636560601b6044820152606401610e14565b6001600160a01b03831660009081526008602052604090205460ff16158015612c2557506001600160a01b03821660009081526008602052604090205460ff16155b612c615760405162461bcd60e51b815260206004820152600d60248201526c165bdd48185c99481848189bdd609a1b6044820152606401610e14565b6001600160a01b0383166000908152601e602052604090205460ff16158015612ca357506001600160a01b0382166000908152601e602052604090205460ff16155b15612f3e57601d5460ff16612d0d5760405162461bcd60e51b815260206004820152602a60248201527f534f4c4944424c4f434b3a2054726164696e672069732063757272656e746c79604482015269103234b9b0b13632b21760b11b6064820152608401610e14565b6001600160a01b0382166000908152601a602052604090205460ff1615612d765760405162461bcd60e51b815260206004820152601e60248201527f534f4c4944424c4f434b3a204163636f756e7420697320626c6f636b656400006044820152606401610e14565b6001600160a01b0383166000908152601a602052604090205460ff1615612ddf5760405162461bcd60e51b815260206004820152601e60248201527f534f4c4944424c4f434b3a204163636f756e7420697320626c6f636b656400006044820152606401610e14565b6001600160a01b03821660009081526005602052604090205460ff16158015612e2157506001600160a01b03831660009081526005602052604090205460ff16155b15612e9357601254811115612e935760405162461bcd60e51b815260206004820152603260248201527f534f4c4944424c4f434b3a2042757920616d6f756e742065786365656473207460448201527134329036b0bc2a3c213abca0b6b7bab73a1760711b6064820152608401610e14565b6001600160a01b03821660009081526006602052604090205460ff16612f3e5760135481612ec084611a64565b612eca919061489e565b1115612f3e5760405162461bcd60e51b815260206004820152603f60248201527f534f4c4944424c4f434b3a2045787065637465642077616c6c657420616d6f7560448201527f6e74206578636565647320746865206d617857616c6c6574416d6f756e742e006064820152608401610e14565b60155460ff1615612fc1576001600160a01b038316600090815260146020526040812054612f6c90426149e3565b90506016548111612fbf5760405162461bcd60e51b815260206004820152601a60248201527f596f75206d757374207761697420636f6f6c446f776e54696d650000000000006044820152606401610e14565b505b6001600160a01b03831660009081526004602052604090205460ff1615801561300357506001600160a01b03821660009081526004602052604090205460ff16155b80156130125750600b5460ff16155b1561307a576001600160a01b03831660009081526009602052604090205460ff168061305657506001600160a01b03821660009081526009602052604090205460ff165b1561306d5761306883838360016133b8565b613087565b61306883838360026133b8565b61308783838360006133b8565b6001600160a01b0383166000908152601460205260409020429055600b5460ff161580156130c35750600e546001600160a01b03848116911614155b80156130dd5750600e546001600160a01b03838116911614155b801561310257506001600160a01b03831660009081526004602052604090205460ff16155b801561312757506001600160a01b03821660009081526004602052604090205460ff16155b1561212b576040805160038082526080820190925260009160208201606080368337019050509050308160008151811061317157634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156131c557600080fd5b505afa1580156131d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131fd91906142eb565b8160018151811061321e57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260195482519116908290600290811061325d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d546000911663d06ca61f61328830611a64565b846040518363ffffffff1660e01b81526004016132a69291906147ec565b60006040518083038186803b1580156132be57600080fd5b505afa1580156132d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526132fa91908101906144d8565b60028151811061331a57634e487b7160e01b600052603260045260246000fd5b60200260200101519050601154811061333e5761333e61333930611a64565b6136bb565b5050505050565b6000806000613352613af8565b909250905061336181836148b6565b9250505090565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60006133c48383613cb3565b6001600160a01b03861660009081526007602052604090205490915060ff1615613426576001600160a01b03851660009081526002602052604090205461340c9084906149e3565b6001600160a01b0386166000908152600260205260409020555b6001600160a01b03841660009081526007602052604090205460ff16156134895760c08101516001600160a01b03851660009081526002602052604090205461346f919061489e565b6001600160a01b0385166000908152600260205260409020555b80516001600160a01b0386166000908152600160205260409020546134ae91906149e3565b6001600160a01b03808716600090815260016020908152604080832094909455840151918716815291909120546134e5919061489e565b6001600160a01b0385166000908152600160205260409081902091909155810151151580613517575060008160e00151115b1561352e5761352e81604001518260e00151613cfb565b60008160600151118061354657506000816101000151115b156135985761355e8160600151826101000151613d30565b6017546101008201516040519081526001600160a01b0391821691871690600080516020614a658339815191529060200160405180910390a35b6000816080015111806135b057506000816101200151115b15613602576135c88160800151826101200151613dc7565b6018546101208201516040519081526001600160a01b0391821691871690600080516020614a658339815191529060200160405180910390a35b60008160a00151118061361a57506000816101400151115b15613675576136328160a00151826101400151613e5e565b61dead6001600160a01b0316856001600160a01b0316600080516020614a6583398151915283610140015160405161366c91815260200190565b60405180910390a35b836001600160a01b0316856001600160a01b0316600080516020614a658339815191528360c001516040516136ac91815260200190565b60405180910390a35050505050565b600b805460ff191660011790556040805160038082526080820190925260009160208201606080368337019050509050308160008151811061370d57634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152600d54604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b15801561376157600080fd5b505afa158015613775573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061379991906142eb565b816001815181106137ba57634e487b7160e01b600052603260045260246000fd5b6001600160a01b0392831660209182029290920101526019548251911690829060029081106137f957634e487b7160e01b600052603260045260246000fd5b6001600160a01b039283166020918202929092010152600d5461381f913091168461296c565b600d54604051635c11d79560e01b81526001600160a01b0390911690635c11d7959061385890859060009086903090429060040161480d565b600060405180830381600087803b15801561387257600080fd5b505af1158015613886573d6000803e3d6000fd5b50506019546040516370a0823160e01b81523060048201526001600160a01b0390911692506000915082906370a082319060240160206040518083038186803b1580156138d257600080fd5b505afa1580156138e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061390a91906145bc565b60405163095ea7b360e01b8152306004820152602481018290529091506001600160a01b0383169063095ea7b390604401602060405180830381600087803b15801561395557600080fd5b505af1158015613969573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061398d919061456b565b5060008482602a600001546139a291906149c4565b6139ac91906148b6565b905060008583602a600101546139c291906149c4565b6139cc91906148b6565b60175460405163a9059cbb60e01b81526001600160a01b0391821660048201526024810185905291925085169063a9059cbb90604401602060405180830381600087803b158015613a1c57600080fd5b505af1158015613a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a54919061456b565b5060185460405163a9059cbb60e01b81526001600160a01b039182166004820152602481018390529085169063a9059cbb90604401602060405180830381600087803b158015613aa357600080fd5b505af1158015613ab7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613adb919061456b565b50506000602a819055602b555050600b805460ff19169055505050565b601054600f546000918291825b600a54811015613c82578260016000600a8481548110613b3557634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b031683528201929092526040019020541180613bae57508160026000600a8481548110613b8757634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054115b15613bc457601054600f54945094505050509091565b60016000600a8381548110613be957634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c1890846149e3565b925060026000600a8381548110613c3f57634e487b7160e01b600052603260045260246000fd5b60009182526020808320909101546001600160a01b03168352820192909252604001902054613c6e90836149e3565b915080613c7a816149fa565b915050613b05565b50600f54601054613c9391906148b6565b821015613caa57601054600f549350935050509091565b90939092509050565b613cbb6141fd565b613cc58383613f1d565b9050613cda818484613cd5613345565b614115565b60a08701526080860152606085015260408401526020830152815292915050565b8160106000828254613d0d91906149e3565b909155505060248054829190600090613d2790849061489e565b90915550505050565b8060246001016000828254613d45919061489e565b90915550506017546001600160a01b031660009081526007602052604090205460ff1615613d9d576017546001600160a01b031660009081526002602052604081208054839290613d9790849061489e565b90915550505b6017546001600160a01b031660009081526001602052604081208054849290613d2790849061489e565b8060246002016000828254613ddc919061489e565b90915550506018546001600160a01b031660009081526007602052604090205460ff1615613e34576018546001600160a01b031660009081526002602052604081208054839290613e2e90849061489e565b90915550505b6018546001600160a01b031660009081526001602052604081208054849290613d2790849061489e565b8060246003016000828254613e73919061489e565b90915550506018546001600160a01b031660009081526007602052604090205460ff1615613edf5761dead600090815260026020527f6a9609baa168169acaea398c4407efea4be641bb08e21e88806d9836fd9333cc8054839290613ed990849061489e565b90915550505b61dead600090815260016020527fb34209a263f6c38fe55f099e9e70f9d67e93982480ff3234a5e0108028ad164d8054849290613d2790849061489e565b613f256141fd565b60ff8216613f395760c08101839052610e50565b8160ff166001141561407f576020546103e890613f5690856149c4565b613f6091906148b6565b60e08201526021546103e890613f7690856149c4565b613f8091906148b6565b6101008201526022546103e890613f9790856149c4565b613fa191906148b6565b6101208201526023546103e890613fb890856149c4565b613fc291906148b6565b610140820152602154602854610100830151613fde91906149c4565b613fe891906148b6565b602a8054600090613ffa90849061489e565b909155505060215460295461010083015161401591906149c4565b61401f91906148b6565b602b805460009061403190849061489e565b909155505061014081015161010082015161012083015160e084015161405790876149e3565b61406191906149e3565b61406b91906149e3565b61407591906149e3565b60c0820152610e50565b6020546103e89061409090856149c4565b61409a91906148b6565b60e08201526023546103e8906140b090856149c4565b6140ba91906148b6565b6101408201526029546103e8906140d190856149c4565b6140db91906148b6565b6101008201819052602b80546000906140f590849061489e565b909155505061014081015161010082015160e083015161406190866149e3565b60008080808080614126878a6149c4565b955060ff8816614144575084935060009250829150819050806141f0565b8760ff16600114156141cd57868a60e0015161416091906149c4565b9350868a610100015161417391906149c4565b9250868a610120015161418691906149c4565b9150868a610140015161419991906149c4565b90508082846141a8878a6149e3565b6141b291906149e3565b6141bc91906149e3565b6141c691906149e3565b94506141f0565b868a60e001516141dd91906149c4565b9350868a610120015161418691906149c4565b9499939850945094509450565b60405180610160016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b600082601f830112614267578081fd5b8135602061427c6142778361487a565b614849565b80838252828201915082860187848660051b890101111561429b578586fd5b855b858110156142c25781356142b081614a41565b8452928401929084019060010161429d565b5090979650505050505050565b6000602082840312156142e0578081fd5b81356110ab81614a41565b6000602082840312156142fc578081fd5b81516110ab81614a41565b60008060408385031215614319578081fd5b823561432481614a41565b9150602083013561433481614a41565b809150509250929050565b600080600060608486031215614353578081fd5b833561435e81614a41565b9250602084013561436e81614a41565b929592945050506040919091013590565b60008060408385031215614391578182fd5b823561439c81614a41565b9150602083013561433481614a56565b600080604083850312156143be578182fd5b82356143c981614a41565b946020939093013593505050565b600080604083850312156143e9578182fd5b823567ffffffffffffffff80821115614400578384fd5b61440c86838701614257565b9350602091508185013581811115614422578384fd5b85019050601f81018613614434578283fd5b80356144426142778261487a565b80828252848201915084840189868560051b8701011115614461578687fd5b8694505b83851015614483578035835260019490940193918501918501614465565b5080955050505050509250929050565b600080604083850312156144a5578182fd5b823567ffffffffffffffff8111156144bb578283fd5b6144c785828601614257565b925050602083013561433481614a56565b600060208083850312156144ea578182fd5b825167ffffffffffffffff811115614500578283fd5b8301601f81018513614510578283fd5b805161451e6142778261487a565b80828252848201915084840188868560051b870101111561453d578687fd5b8694505b8385101561455f578051835260019490940193918501918501614541565b50979650505050505050565b60006020828403121561457c578081fd5b81516110ab81614a56565b60008060408385031215614599578182fd5b82356143c981614a56565b6000602082840312156145b5578081fd5b5035919050565b6000602082840312156145cd578081fd5b5051919050565b600080604083850312156145e6578182fd5b50508035926020909101359150565b6000806000806080858703121561460a578182fd5b5050823594602084013594506040840135936060013592509050565b6000815180845260208085019450808401835b8381101561465e5781516001600160a01b031687529582019590820190600101614639565b509495945050505050565b6000602080835283518082850152825b8181101561469557858101830151858201604001528201614679565b818111156146a65783604083870101525b50601f01601f1916929092016040019392505050565b6020808252601e908201527f534f4c4944424c4f434b3a2057616c6c657420616c7265616479207365740000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526019908201527f43616c6c6572206973206e6f7420616e206f70657261746f7200000000000000604082015260600190565b60208082526018908201527f534f4c4944424c4f434b3a205a65726f20616464726573730000000000000000604082015260600190565b60208082526036908201527f534f4c4944424c4f434b3a204163636f756e7420697320616c7265616479207460408201527568652076616c7565206f6620276578636c756465642760501b606082015260800190565b8281526040602082015260006148056040830184614626565b949350505050565b85815284602082015260a06040820152600061482c60a0830186614626565b6001600160a01b0394909416606083015250608001529392505050565b604051601f8201601f1916810167ffffffffffffffff8111828210171561487257614872614a2b565b604052919050565b600067ffffffffffffffff82111561489457614894614a2b565b5060051b60200190565b600082198211156148b1576148b1614a15565b500190565b6000826148d157634e487b7160e01b81526012600452602481fd5b500490565b600181815b808511156149115781600019048211156148f7576148f7614a15565b8085161561490457918102915b93841c93908002906148db565b509250929050565b60006110ab60ff84168360008261493257506001610e50565b8161493f57506000610e50565b8160018114614955576002811461495f5761497b565b6001915050610e50565b60ff84111561497057614970614a15565b50506001821b610e50565b5060208310610133831016604e8410600b841016171561499e575081810a610e50565b6149a883836148d6565b80600019048211156149bc576149bc614a15565b029392505050565b60008160001904831182151516156149de576149de614a15565b500290565b6000828210156149f5576149f5614a15565b500390565b6000600019821415614a0e57614a0e614a15565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461296957600080fd5b801515811461296957600080fdfeddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa2646970667358221220c064b03aab7fdbcbac88b04ff6bfffa542218e5f5cab2bf03fecfac640609fa264736f6c63430008040033
Deployed Bytecode Sourcemap
15906:26155:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17835:28;;;;;;;;;;-1:-1:-1;17835:28:0;;;;;;;;;;;8639:14:1;;8632:22;8614:41;;8602:2;8587:18;17835:28:0;;;;;;;;26189:122;;;;;;;;;;-1:-1:-1;26189:122:0;;;;;:::i;:::-;;:::i;:::-;;21150:83;;;;;;;;;;-1:-1:-1;21220:5:0;;;;;;;;;;;;-1:-1:-1;;;21220:5:0;;;;21150:83;;;;;;;:::i;22058:161::-;;;;;;;;;;-1:-1:-1;22058:161:0;;;;;:::i;:::-;;:::i;27144:276::-;;;;;;;;;;;;;:::i;41861:154::-;;;;;;;;;;-1:-1:-1;41861:154:0;;;;;:::i;:::-;;:::i;21423:95::-;;;;;;;;;;-1:-1:-1;21503:7:0;;21423:95;;;23131:25:1;;;23119:2;23104:18;21423:95:0;23086:76:1;22227:422:0;;;;;;;;;;-1:-1:-1;22227:422:0;;;;;:::i;:::-;;:::i;23393:248::-;;;;;;;;;;-1:-1:-1;23393:248:0;;;;;:::i;:::-;;:::i;39017:146::-;;;;;;;;;;-1:-1:-1;39017:146:0;;;;;:::i;:::-;;:::i;21332:83::-;;;;;;;;;;-1:-1:-1;21332:83:0;;16682:2;24882:36:1;;24870:2;24855:18;21332:83:0;24837:87:1;27423:124:0;;;;;;;;;;;;;:::i;24115:475::-;;;;;;;;;;-1:-1:-1;24115:475:0;;;;;:::i;:::-;;:::i;22657:215::-;;;;;;;;;;-1:-1:-1;22657:215:0;;;;;:::i;:::-;;:::i;40749:98::-;;;;;;;;;;-1:-1:-1;40749:98:0;;;;;:::i;:::-;-1:-1:-1;;;;;40824:15:0;40801:4;40824:15;;;:6;:15;;;;;;;;;40749:98;40167:179;;;;;;;;;;-1:-1:-1;40167:179:0;;;;;:::i;:::-;;:::i;24923:121::-;;;;;;;;;;-1:-1:-1;24923:121:0;;;;;:::i;:::-;;:::i;26923:213::-;;;;;;;;;;-1:-1:-1;26923:213:0;;;;;:::i;:::-;;:::i;28354:202::-;;;;;;;;;;-1:-1:-1;28354:202:0;;;;;:::i;:::-;;:::i;23649:458::-;;;;;;;;;;-1:-1:-1;23649:458:0;;;;;:::i;:::-;;:::i;25182:123::-;;;;;;;;;;-1:-1:-1;25182:123:0;;;;;:::i;:::-;-1:-1:-1;;;;;25270:27:0;25246:4;25270:27;;;:18;:27;;;;;;;;;25182:123;17942:29;;;;;;;;;;-1:-1:-1;17942:29:0;;;;-1:-1:-1;;;;;17942:29:0;;;;;;-1:-1:-1;;;;;7842:32:1;;;7824:51;;7812:2;7797:18;17942:29:0;7779:102:1;17317:78:0;;;;;;;;;;-1:-1:-1;17317:78:0;;;;-1:-1:-1;;;;;17317:78:0;;;39171:154;;;;;;;;;;-1:-1:-1;39171:154:0;;;;;:::i;:::-;;:::i;24712:198::-;;;;;;;;;;-1:-1:-1;24712:198:0;;;;;:::i;:::-;;:::i;24598:106::-;;;;;;;;;;-1:-1:-1;24598:106:0;;;;;:::i;:::-;-1:-1:-1;;;;;24677:19:0;24657:4;24677:19;;;:9;:19;;;;;;;;;24598:106;40859:560;;;;;;;;;;-1:-1:-1;40859:560:0;;;;;:::i;:::-;;:::i;21526:198::-;;;;;;;;;;-1:-1:-1;21526:198:0;;;;;:::i;:::-;;:::i;3652:94::-;;;;;;;;;;;;;:::i;18924:32::-;;;;;;;;;;-1:-1:-1;18924:32:0;;;;;;;;;;;;;24265:25:1;;;24321:2;24306:18;;24299:34;;;;24238:18;18924:32:0;24220:119:1;18107:37:0;;;;;;;;;;-1:-1:-1;18107:37:0;;;;;;;;;;;;;;;;;;;24575:25:1;;;24631:2;24616:18;;24609:34;;;;24659:18;;;24652:34;24717:2;24702:18;;24695:34;24562:3;24547:19;18107:37:0;24529:206:1;25762:266:0;;;;;;;;;;-1:-1:-1;25762:266:0;;;;;:::i;:::-;;:::i;26704:214::-;;;;;;;;;;-1:-1:-1;26704:214:0;;;;;:::i;:::-;;:::i;38256:271::-;;;;;;;;;;-1:-1:-1;38256:271:0;;;;;:::i;:::-;;:::i;25313:281::-;;;;;;;;;;-1:-1:-1;25313:281:0;;;;;:::i;:::-;;:::i;23265:120::-;;;;;;;;;;-1:-1:-1;23265:120:0;;;;;:::i;:::-;-1:-1:-1;;;;;23357:20:0;23333:4;23357:20;;;:11;:20;;;;;;;;;23265:120;39493:196;;;;;;;;;;-1:-1:-1;39493:196:0;;;;;:::i;:::-;;:::i;16930:59::-;;;;;;;;;;;;;;;;3429:87;;;;;;;;;;-1:-1:-1;3475:7:0;3502:6;-1:-1:-1;;;;;3502:6:0;3429:87;;21239;;;;;;;;;;-1:-1:-1;21311:7:0;;;;;;;;;;;;-1:-1:-1;;;21311:7:0;;;;21239:87;;18296:36;;;;;;;;;;-1:-1:-1;18296:36:0;;;;;;;;;;;;;;;41491:193;;;;;;;;;;-1:-1:-1;41491:193:0;;;;;:::i;:::-;;:::i;28066:280::-;;;;;;;;;;-1:-1:-1;28066:280:0;;;;;:::i;:::-;;:::i;22880:377::-;;;;;;;;;;-1:-1:-1;22880:377:0;;;;;:::i;:::-;;:::i;17092:46::-;;;;;;;;;;-1:-1:-1;17092:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;26036:145;;;;;;;;;;-1:-1:-1;26036:145:0;;;;;:::i;:::-;-1:-1:-1;;;;;26135:38:0;26111:4;26135:38;;;:29;:38;;;;;;;;;26036:145;16619:19;;;;;;;;;;-1:-1:-1;16619:19:0;;;;-1:-1:-1;;;;;16619:19:0;;;21732:167;;;;;;;;;;-1:-1:-1;21732:167:0;;;;;:::i;:::-;;:::i;16996:62::-;;;;;;;;;;;;;;;;27857:93;;;;;;;;;;-1:-1:-1;27857:93:0;;;;;:::i;:::-;;:::i;39895:260::-;;;;;;;;;;-1:-1:-1;39895:260:0;;;;;:::i;:::-;;:::i;25602:155::-;;;;;;;;;;-1:-1:-1;25602:155:0;;;;;:::i;:::-;-1:-1:-1;;;;;25706:43:0;25682:4;25706:43;;;:34;:43;;;;;;;;;25602:155;27760:89;;;;;;;;;;-1:-1:-1;27760:89:0;;;;;:::i;:::-;;:::i;17485:64::-;;;;;;;;;;-1:-1:-1;17485:64:0;;;;-1:-1:-1;;;;;17485:64:0;;;17235:75;;;;;;;;;;-1:-1:-1;17235:75:0;;;;-1:-1:-1;;;;;17235:75:0;;;26319:377;;;;;;;;;;-1:-1:-1;26319:377:0;;;;;:::i;:::-;;:::i;39333:152::-;;;;;;;;;;-1:-1:-1;39333:152:0;;;;;:::i;:::-;;:::i;17186:40::-;;;;;;;;;;;;;;;;27550:202;;;;;;;;;;-1:-1:-1;27550:202:0;;;;;:::i;:::-;;:::i;21907:143::-;;;;;;;;;;-1:-1:-1;21907:143:0;;;;;:::i;:::-;-1:-1:-1;;;;;22015:18:0;;;21988:7;22015:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;21907:143;40354:383;;;;;;;;;;-1:-1:-1;40354:383:0;;;;;:::i;:::-;;:::i;38826:183::-;;;;;;;;;;-1:-1:-1;38826:183:0;;;;;:::i;:::-;;:::i;39697:186::-;;;;;;;;;;-1:-1:-1;39697:186:0;;;;;:::i;:::-;;:::i;16870:53::-;;;;;;;;;;;;;;;;27958:100;;;;;;;;;;-1:-1:-1;27958:100:0;;;;;:::i;:::-;-1:-1:-1;;;;;28034:16:0;28011:4;28034:16;;;:7;:16;;;;;;;;;27958:100;25052:120;;;;;;;;;;-1:-1:-1;25052:120:0;;;;;:::i;:::-;;:::i;17145:34::-;;;;;;;;;;-1:-1:-1;17145:34:0;;;;;;;;38535:283;;;;;;;;;;-1:-1:-1;38535:283:0;;;;;:::i;:::-;;:::i;3754:192::-;;;;;;;;;;-1:-1:-1;3754:192:0;;;;;:::i;:::-;;:::i;16591:21::-;;;;;;;;;;-1:-1:-1;16591:21:0;;;;-1:-1:-1;;;;;16591:21:0;;;26189:122;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;;;;;;;;;26271:14:::1;:32:::0;;-1:-1:-1;;;;;;26271:32:0::1;-1:-1:-1::0;;;;;26271:32:0;;;::::1;::::0;;;::::1;::::0;;26189:122::o;22058:161::-;22133:4;22150:39;2930:10;22173:7;22182:6;22150:8;:39::i;:::-;-1:-1:-1;22207:4:0;22058:161;;;;;:::o;27144:276::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;27194:16:::1;:23:::0;;-1:-1:-1;;27194:23:0::1;27213:4;27194:23;::::0;;27232:21:::1;::::0;27228:146:::1;;27299:15;27275:21;:39:::0;27350:12:::1;27329:18;:33:::0;27228:146:::1;27383:32;::::0;27409:5:::1;::::0;27383:32;;::::1;::::0;27409:5;;27383:32:::1;27144:276::o:0;41861:154::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;41966:41:::1;::::0;-1:-1:-1;;;41966:41:0;;-1:-1:-1;;;;;8387:32:1;;;41966:41:0::1;::::0;::::1;8369:51:1::0;8436:18;;;8429:34;;;41966:27:0;::::1;::::0;::::1;::::0;8342:18:1;;41966:41:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;41861:154:::0;;;:::o;22227:422::-;-1:-1:-1;;;;;22377:19:0;;22333:4;22377:19;;;:11;:19;;;;;;;;2930:10;22377:33;;;;;;;;22429:26;;;;22421:79;;;;-1:-1:-1;;;22421:79:0;;17403:2:1;22421:79:0;;;17385:21:1;17442:2;17422:18;;;17415:30;17481:34;17461:18;;;17454:62;-1:-1:-1;;;17532:18:1;;;17525:38;17580:19;;22421:79:0;17375:230:1;22421:79:0;22513:36;22523:6;22531:9;22542:6;22513:9;:36::i;:::-;22560:57;22569:6;2930:10;22591:25;22610:6;22591:16;:25;:::i;:::-;22560:8;:57::i;:::-;-1:-1:-1;22637:4:0;;22227:422;-1:-1:-1;;;;22227:422:0:o;23393:248::-;23459:7;23498;;23487;:18;;23479:73;;;;-1:-1:-1;;;23479:73:0;;12556:2:1;23479:73:0;;;12538:21:1;12595:2;12575:18;;;12568:30;12634:34;12614:18;;;12607:62;-1:-1:-1;;;12685:18:1;;;12678:40;12735:19;;23479:73:0;12528:232:1;23479:73:0;23563:19;23586:10;:8;:10::i;:::-;23563:33;-1:-1:-1;23614:19:0;23563:33;23614:7;:19;:::i;:::-;23607:26;23393:248;-1:-1:-1;;;23393:248:0:o;39017:146::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;39104:3:::1;39094:6;:13;;39086:22;;;::::0;::::1;;39142:13;16682:2;39142;:13;:::i;:::-;39133:22;::::0;:6;:22:::1;:::i;:::-;39119:11;:36:::0;-1:-1:-1;39017:146:0:o;27423:124::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;27476:16:::1;:24:::0;;-1:-1:-1;;27476:24:0::1;::::0;;27510:32:::1;::::0;27476:24;;27495:5:::1;::::0;27510:32:::1;::::0;27495:5;;27510:32:::1;27423:124::o:0;24115:475::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24197:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;24189:56;;;::::0;-1:-1:-1;;;24189:56:0;;15937:2:1;24189:56:0::1;::::0;::::1;15919:21:1::0;15976:2;15956:18;;;15949:30;16015:25;15995:18;;;15988:53;16058:18;;24189:56:0::1;15909:173:1::0;24189:56:0::1;24261:9;24256:327;24280:9;:16:::0;24276:20;::::1;24256:327;;;24338:7;-1:-1:-1::0;;;;;24322:23:0::1;:9;24332:1;24322:12;;;;;;-1:-1:-1::0;;;24322:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;24322:12:0::1;:23;24318:254;;;24381:9;24391:16:::0;;:20:::1;::::0;24410:1:::1;::::0;24391:20:::1;:::i;:::-;24381:31;;;;;;-1:-1:-1::0;;;24381:31:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;24366:9:::1;:12:::0;;-1:-1:-1;;;;;24381:31:0;;::::1;::::0;24376:1;;24366:12;::::1;;;-1:-1:-1::0;;;24366:12:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:46:::0;;-1:-1:-1;;;;;;24366:46:0::1;-1:-1:-1::0;;;;;24366:46:0;;::::1;;::::0;;24431:16;;::::1;::::0;;:7:::1;:16:::0;;;;;;:20;;;24470:11:::1;:20:::0;;;;:28;;-1:-1:-1;;24470:28:0::1;::::0;;24517:9:::1;:15:::0;;;::::1;;-1:-1:-1::0;;;24517:15:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;24517:15:0;;;;;-1:-1:-1;;;;;;24517:15:0::1;::::0;;;;;24256:327:::1;24115:475:::0;:::o;24318:254::-:1;24298:3:::0;::::1;::::0;::::1;:::i;:::-;;;;24256:327;;;;24115:475:::0;:::o;22657:215::-;2930:10;22745:4;22794:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;22794:34:0;;;;;;;;;;22745:4;;22762:80;;22785:7;;22794:47;;22831:10;;22794:47;:::i;40167:179::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;40262:6:::1;:27:::0;;-1:-1:-1;;;;;40262:27:0;;::::1;-1:-1:-1::0;;;;;;40262:27:0;;::::1;;::::0;;;40300:4:::1;:14:::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;40325:13:::1;::::0;:7:::1;:13::i;24923:121::-:0;19711:10;19701:21;;;;:9;:21;;;;;;;;;:46;;-1:-1:-1;19737:10:0;19726:7;3475;3502:6;-1:-1:-1;;;;;3502:6:0;;3429:87;19726:7;-1:-1:-1;;;;;19726:21:0;;19701:46;19693:84;;;;-1:-1:-1;;;19693:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25002:27:0::1;;::::0;;;:18:::1;:27;::::0;;;;:34;;-1:-1:-1;;25002:34:0::1;25032:4;25002:34;::::0;;24923:121::o;26923:213::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26995:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;26987:66;;;::::0;-1:-1:-1;;;26987:66:0;;13777:2:1;26987:66:0::1;::::0;::::1;13759:21:1::0;13816:2;13796:18;;;13789:30;13855:34;13835:18;;;13828:62;-1:-1:-1;;;13906:18:1;;;13899:32;13948:19;;26987:66:0::1;13749:224:1::0;26987:66:0::1;-1:-1:-1::0;;;;;27058:19:0;::::1;27080:5;27058:19:::0;;;:10:::1;:19;::::0;;;;;:27;;-1:-1:-1;;27058:27:0::1;::::0;;27095:36;27080:5;;27058:19;27095:36:::1;::::0;27080:5;;27095:36:::1;26923:213:::0;:::o;28354:202::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;28444:8:::1;:29:::0;;;28484:20;:35;;;28535:13:::1;::::0;::::1;::::0;28444:17:::1;::::0;28535:13:::1;28354:202:::0;;:::o;23649:458::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;23730:20:0;::::1;;::::0;;;:11:::1;:20;::::0;;;;;::::1;;23729:21;23721:61;;;::::0;-1:-1:-1;;;23721:61:0;;14180:2:1;23721:61:0::1;::::0;::::1;14162:21:1::0;14219:2;14199:18;;;14192:30;14258:29;14238:18;;;14231:57;14305:18;;23721:61:0::1;14152:177:1::0;23721:61:0::1;23801:9;:16:::0;23821:3:::1;-1:-1:-1::0;23801:23:0::1;23793:50;;;::::0;-1:-1:-1;;;23793:50:0;;10103:2:1;23793:50:0::1;::::0;::::1;10085:21:1::0;10142:2;10122:18;;;10115:30;-1:-1:-1;;;10161:18:1;;;10154:44;10215:18;;23793:50:0::1;10075:164:1::0;23793:50:0::1;3475:7:::0;3502:6;-1:-1:-1;;;;;23862:18:0;;::::1;3502:6:::0;;23862:18:::1;;23854:55;;;::::0;-1:-1:-1;;;23854:55:0;;11849:2:1;23854:55:0::1;::::0;::::1;11831:21:1::0;11888:2;11868:18;;;11861:30;11927:26;11907:18;;;11900:54;11971:18;;23854:55:0::1;11821:174:1::0;23854:55:0::1;-1:-1:-1::0;;;;;23923:16:0;::::1;23942:1;23923:16:::0;;;:7:::1;:16;::::0;;;;;:20;23920:108:::1;;-1:-1:-1::0;;;;;23999:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;;23979:37:::1;::::0;:19:::1;:37::i;:::-;-1:-1:-1::0;;;;;23960:16:0;::::1;;::::0;;;:7:::1;:16;::::0;;;;:56;23920:108:::1;-1:-1:-1::0;;;;;24038:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;24038:27:0::1;24061:4;24038:27:::0;;::::1;::::0;;;24076:9:::1;:23:::0;;;;::::1;::::0;;;;;;::::1;::::0;;-1:-1:-1;;;;;;24076:23:0::1;::::0;;::::1;::::0;;23649:458::o;39171:154::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;39262:3:::1;39252:6;:13;;39244:22;;;::::0;::::1;;39304:13;16682:2;39304;:13;:::i;:::-;39295:22;::::0;:6;:22:::1;:::i;:::-;39277:15;:40:::0;-1:-1:-1;39171:154:0:o;24712:198::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24807:23:0;::::1;24799:60;;;::::0;-1:-1:-1;;;24799:60:0;;15225:2:1;24799:60:0::1;::::0;::::1;15207:21:1::0;15264:2;15244:18;;;15237:30;15303:26;15283:18;;;15276:54;15347:18;;24799:60:0::1;15197:174:1::0;24799:60:0::1;-1:-1:-1::0;;;;;24866:20:0;;;::::1;;::::0;;;:9:::1;:20;::::0;;;;:36;;-1:-1:-1;;24866:36:0::1;::::0;::::1;;::::0;;;::::1;::::0;;24712:198::o;40859:560::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;40996:7:::1;:14;40975:10;:17;:35;40967:59;;;::::0;-1:-1:-1;;;40967:59:0;;11508:2:1;40967:59:0::1;::::0;::::1;11490:21:1::0;11547:2;11527:18;;;11520:30;-1:-1:-1;;;11566:18:1;;;11559:42;11618:18;;40967:59:0::1;11480:162:1::0;40967:59:0::1;41055:10;41038:14;41078:334;41095:10;:17;41093:1;:19;41078:334;;;41133:17;41153:10;41164:1;41153:13;;;;;;-1:-1:-1::0;;;41153:13:0::1;;;;;;;;;;;;;;;41133:33;;41181:15;41210:10;:8;:10::i;:::-;41199:7;41207:1;41199:10;;;;;;-1:-1:-1::0;;;41199:10:0::1;;;;;;;;;;;;;;;:21;;;;:::i;:::-;-1:-1:-1::0;;;;;41253:15:0;::::1;;::::0;;;:7:::1;:15;::::0;;;;;41181:39;;-1:-1:-1;41253:24:0::1;::::0;41181:39;;41253:24:::1;:::i;:::-;-1:-1:-1::0;;;;;41235:15:0;;::::1;;::::0;;;:7:::1;:15;::::0;;;;;:42;;;;41313:18;;::::1;::::0;;;;:28:::1;::::0;41334:7;;41313:28:::1;:::i;:::-;-1:-1:-1::0;;;;;41292:18:0;;::::1;;::::0;;;:7:::1;:18;::::0;;;;:49;;;;41389:10;;41361:39;;::::1;::::0;-1:-1:-1;;;;;;;;;;;41361:39:0;41389:7;;41397:1;;41389:10;::::1;;;-1:-1:-1::0;;;41389:10:0::1;;;;;;;;;;;;;;;41361:39;;;;23131:25:1::0;;23119:2;23104:18;;23086:76;41361:39:0::1;;;;;;;;41078:334;;41114:3;;;;;:::i;:::-;;;;41078:334;;21526:198:::0;-1:-1:-1;;;;;21616:20:0;;21592:7;21616:20;;;:11;:20;;;;;;;;21612:49;;;-1:-1:-1;;;;;;21645:16:0;;;;;:7;:16;;;;;;;21526:198::o;21612:49::-;-1:-1:-1;;;;;21699:16:0;;;;;;:7;:16;;;;;;21679:37;;:19;:37::i;3652:94::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;3717:21:::1;3735:1;3717:9;:21::i;:::-;3652:94::o:0;25762:266::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25860:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;::::1;;:50;;::::0;::::1;;;;25852:117;;;;-1:-1:-1::0;;;25852:117:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25974:38:0;;;::::1;;::::0;;;:29:::1;:38;::::0;;;;:49;;-1:-1:-1;;25974:49:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25762:266::o;26704:214::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26775:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;::::1;;26774:20;26766:71;;;::::0;-1:-1:-1;;;26766:71:0;;16289:2:1;26766:71:0::1;::::0;::::1;16271:21:1::0;16328:2;16308:18;;;16301:30;16367:34;16347:18;;;16340:62;-1:-1:-1;;;16418:18:1;;;16411:36;16464:19;;26766:71:0::1;16261:228:1::0;26766:71:0::1;-1:-1:-1::0;;;;;26842:19:0;::::1;;::::0;;;:10:::1;:19;::::0;;;;;:26;;-1:-1:-1;;26842:26:0::1;26864:4;26842:26:::0;;::::1;::::0;;;26878:35;;26864:4;;26842:19;26878:35:::1;::::0;::::1;26704:214:::0;:::o;38256:271::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;38342:9;-1:-1:-1;;;;;19575:19:0;::::1;19567:56;;;;-1:-1:-1::0;;;19567:56:0::1;;;;;;;:::i;:::-;38372:15:::2;::::0;-1:-1:-1;;;;;38372:28:0;;::::2;:15:::0;::::2;:28;;38364:71;;;;-1:-1:-1::0;;;38364:71:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;38446:15:0::2;:27:::0;;-1:-1:-1;;;;;38446:27:0;;::::2;-1:-1:-1::0;;;;;;38446:27:0;;::::2;::::0;::::2;::::0;;:15:::2;38484:35:::0;:18:::2;:35;::::0;38256:271::o;25313:281::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25416:43:0;::::1;;::::0;;;:34:::1;:43;::::0;;;;;::::1;;:55;;::::0;::::1;;;;25408:122;;;;-1:-1:-1::0;;;25408:122:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25535:43:0;;;::::1;;::::0;;;:34:::1;:43;::::0;;;;:54;;-1:-1:-1;;25535:54:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25313:281::o;39493:196::-;19711:10;19701:21;;;;:9;:21;;;;;;;;;:46;;-1:-1:-1;19737:10:0;19726:7;3475;3502:6;-1:-1:-1;;;;;3502:6:0;;3429:87;19726:7;-1:-1:-1;;;;;19726:21:0;;19701:46;19693:84;;;;-1:-1:-1;;;19693:84:0;;;;;;;:::i;:::-;39603:15:::1;:26:::0;;-1:-1:-1;;39603:26:0::1;::::0;::::1;;;::::0;;39655::::1;:14:::0;-1:-1:-1;39655:26:0::1;:::i;:::-;39640:12;:41:::0;-1:-1:-1;;39493:196:0:o;41491:193::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;41591:9:::1;41566:21;:34;;41558:71;;;::::0;-1:-1:-1;;;41558:71:0;;18173:2:1;41558:71:0::1;::::0;::::1;18155:21:1::0;18212:2;18192:18;;;18185:30;18251:26;18231:18;;;18224:54;18295:18;;41558:71:0::1;18145:174:1::0;41558:71:0::1;3475:7:::0;3502:6;;41640:36:::1;::::0;-1:-1:-1;;;;;3502:6:0;;;;41640:36;::::1;;;::::0;41666:9;;41640:36;3475:7;41640:36;41666:9;3502:6;41640:36;::::1;;;;;;;;;;;;;::::0;::::1;;;;28066:280:::0;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;28183:5:::1;:16:::0;;;28210:14;:26;;;28247:17;:32;;;28290:10;:19;;;28325:13:::1;::::0;::::1;::::0;28183:9:::1;::::0;28325:13:::1;28066:280:::0;;;;:::o;22880:377::-;2930:10;22973:4;23017:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;23017:34:0;;;;;;;;;;23070:35;;;;23062:85;;;;-1:-1:-1;;;23062:85:0;;22358:2:1;23062:85:0;;;22340:21:1;22397:2;22377:18;;;22370:30;22436:34;22416:18;;;22409:62;-1:-1:-1;;;22487:18:1;;;22480:35;22532:19;;23062:85:0;22330:227:1;23062:85:0;23158:67;2930:10;23181:7;23190:34;23209:15;23190:16;:34;:::i;23158:67::-;-1:-1:-1;23245:4:0;;22880:377;-1:-1:-1;;;22880:377:0:o;21732:167::-;21810:4;21827:42;2930:10;21851:9;21862:6;21827:9;:42::i;27857:93::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27920:14:0::1;27937:5;27920:14:::0;;;:7:::1;:14;::::0;;;;:22;;-1:-1:-1;;27920:22:0::1;::::0;;27857:93::o;39895:260::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;40012:3:::1;39993:8;:15;:22;;39985:54;;;::::0;-1:-1:-1;;;39985:54:0;;10802:2:1;39985:54:0::1;::::0;::::1;10784:21:1::0;10841:2;10821:18;;;10814:30;-1:-1:-1;;;10860:18:1;;;10853:49;10919:18;;39985:54:0::1;10774:169:1::0;39985:54:0::1;40054:9;40050:98;40073:8;:15;40069:1;:19;40050:98;;;40131:5;40109:6;:19;40116:8;40125:1;40116:11;;;;;;-1:-1:-1::0;;;40116:11:0::1;;;;;;;;;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;40109:19:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;40109:19:0;:27;;-1:-1:-1;;40109:27:0::1;::::0;::::1;;::::0;;;::::1;::::0;;40090:3;::::1;::::0;::::1;:::i;:::-;;;;40050:98;;;;39895:260:::0;;:::o;27760:89::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27820:14:0::1;;::::0;;;:7:::1;:14;::::0;;;;:21;;-1:-1:-1;;27820:21:0::1;27837:4;27820:21;::::0;;27760:89::o;26319:377::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;26390:14:::1;::::0;-1:-1:-1;;;;;26390:14:0::1;26382:68;;;::::0;-1:-1:-1;;;26382:68:0;;10446:2:1;26382:68:0::1;::::0;::::1;10428:21:1::0;10485:2;10465:18;;;10458:30;10524:29;10504:18;;;10497:57;10571:18;;26382:68:0::1;10418:177:1::0;26382:68:0::1;26485:14;::::0;26538:25:::1;::::0;-1:-1:-1;;;26538:25:0;;-1:-1:-1;;;;;7842:32:1;;;26538:25:0::1;::::0;::::1;7824:51:1::0;26485:14:0;;::::1;::::0;26461::::1;::::0;26485;;26538:17:::1;::::0;7797:18:1;;26538:25:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26513:50;;26599:1;26582:14;:18;26574:54;;;::::0;-1:-1:-1;;;26574:54:0;;16696:2:1;26574:54:0::1;::::0;::::1;16678:21:1::0;16735:2;16715:18;;;16708:30;16774:25;16754:18;;;16747:53;16817:18;;26574:54:0::1;16668:173:1::0;26574:54:0::1;26641:47;2930:10:::0;26665:6:::1;26673:14;26641:9;:47::i;39333:152::-:0;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;39429:1:::1;39420:6;:10;39412:19;;;::::0;::::1;;39463:14;:6:::0;39472:5:::1;39463:14;:::i;:::-;39442:18;:35:::0;-1:-1:-1;39333:152:0:o;27550:202::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27639:38:0;::::1;;::::0;;;:29:::1;:38;::::0;;;;;;;;:48;;-1:-1:-1;;27639:48:0::1;::::0;::::1;;::::0;;::::1;::::0;;;27697:50;;8614:41:1;;;27697:50:0::1;::::0;8587:18:1;27697:50:0::1;;;;;;;27550:202:::0;;:::o;40354:383::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;40440:23:0;::::1;40432:58;;;::::0;-1:-1:-1;;;40432:58:0;;18526:2:1;40432:58:0::1;::::0;::::1;18508:21:1::0;18565:2;18545:18;;;18538:30;-1:-1:-1;;;18584:18:1;;;18577:52;18646:18;;40432:58:0::1;18498:172:1::0;40432:58:0::1;40499:6;:27:::0;;-1:-1:-1;;;;;;40499:27:0::1;-1:-1:-1::0;;;;;40499:27:0;::::1;::::0;;::::1;::::0;;;40562:16:::1;::::0;;-1:-1:-1;;;40562:16:0;;;;-1:-1:-1;;40499:27:0;40562:14:::1;::::0;:16:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;40499:27;40562:16;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;40553:37:0::1;;40599:4;40606:6;;;;;;;;;-1:-1:-1::0;;;;;40606:6:0::1;-1:-1:-1::0;;;;;40606:11:0::1;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40553:67;::::0;-1:-1:-1;;;;;;40553:67:0::1;::::0;;;;;;-1:-1:-1;;;;;8116:15:1;;;40553:67:0::1;::::0;::::1;8098:34:1::0;8168:15;;8148:18;;;8141:43;8033:18;;40553:67:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40535:85:::0;-1:-1:-1;;;;;;40635:21:0;::::1;40627:59;;;::::0;-1:-1:-1;;;40627:59:0;;12202:2:1;40627:59:0::1;::::0;::::1;12184:21:1::0;12241:2;12221:18;;;12214:30;12280:27;12260:18;;;12253:55;12325:18;;40627:59:0::1;12174:175:1::0;40627:59:0::1;40695:4;:14:::0;;-1:-1:-1;;;;;;40695:14:0::1;-1:-1:-1::0;;;;;40695:14:0;::::1;::::0;;::::1;::::0;;;40716:13:::1;::::0;:7:::1;:13::i;38826:183::-:0;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;38904:5;-1:-1:-1;;;;;19575:19:0;::::1;19567:56;;;;-1:-1:-1::0;;;19567:56:0::1;;;;;;;:::i;:::-;38930:4:::2;::::0;-1:-1:-1;;;;;38930:13:0;;::::2;:4:::0;::::2;:13;;38922:56;;;;-1:-1:-1::0;;;38922:56:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;38989:4:0::2;:12:::0;;-1:-1:-1;;;;;;38989:12:0::2;-1:-1:-1::0;;;;;38989:12:0;;;::::2;::::0;;;::::2;::::0;;38826:183::o;39697:186::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39783:15:0;::::1;;::::0;;;:6:::1;:15;::::0;;;;;::::1;;:24;;::::0;::::1;;;;39775:66;;;::::0;-1:-1:-1;;;39775:66:0;;11150:2:1;39775:66:0::1;::::0;::::1;11132:21:1::0;11189:2;11169:18;;;11162:30;11228:31;11208:18;;;11201:59;11277:18;;39775:66:0::1;11122:179:1::0;39775:66:0::1;-1:-1:-1::0;;;;;39852:15:0;;;::::1;;::::0;;;:6:::1;:15;::::0;;;;:23;;-1:-1:-1;;39852:23:0::1;::::0;::::1;;::::0;;;::::1;::::0;;39697:186::o;25052:120::-;19711:10;19701:21;;;;:9;:21;;;;;;;;;:46;;-1:-1:-1;19737:10:0;19726:7;3475;3502:6;-1:-1:-1;;;;;3502:6:0;;3429:87;19726:7;-1:-1:-1;;;;;19726:21:0;;19701:46;19693:84;;;;-1:-1:-1;;;19693:84:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25129:27:0::1;25159:5;25129:27:::0;;;:18:::1;:27;::::0;;;;:35;;-1:-1:-1;;25129:35:0::1;::::0;;25052:120::o;38535:283::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;38624:9;-1:-1:-1;;;;;19575:19:0;::::1;19567:56;;;;-1:-1:-1::0;;;19567:56:0::1;;;;;;;:::i;:::-;38654:18:::2;::::0;-1:-1:-1;;;;;38654:31:0;;::::2;:18:::0;::::2;:31;;38646:74;;;;-1:-1:-1::0;;;38646:74:0::2;;;;;;;:::i;:::-;-1:-1:-1::0;38731:18:0::2;:30:::0;;-1:-1:-1;;;;;38731:30:0;;::::2;-1:-1:-1::0;;;;;;38731:30:0;;::::2;::::0;::::2;::::0;;:18:::2;38772:38:::0;:18:::2;:38;::::0;38535:283::o;3754:192::-;3475:7;3502:6;-1:-1:-1;;;;;3502:6:0;2930:10;3564:23;3556:68;;;;-1:-1:-1;;;3556:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3843:22:0;::::1;3835:73;;;::::0;-1:-1:-1;;;3835:73:0;;12967:2:1;3835:73:0::1;::::0;::::1;12949:21:1::0;13006:2;12986:18;;;12979:30;13045:34;13025:18;;;13018:62;-1:-1:-1;;;13096:18:1;;;13089:36;13142:19;;3835:73:0::1;12939:228:1::0;3835:73:0::1;3919:19;3929:8;3919:9;:19::i;:::-;3754:192:::0;:::o;32728:335::-;-1:-1:-1;;;;;32821:19:0;;32813:68;;;;-1:-1:-1;;;32813:68:0;;19637:2:1;32813:68:0;;;19619:21:1;19676:2;19656:18;;;19649:30;19715:34;19695:18;;;19688:62;-1:-1:-1;;;19766:18:1;;;19759:34;19810:19;;32813:68:0;19609:226:1;32813:68:0;-1:-1:-1;;;;;32900:21:0;;32892:68;;;;-1:-1:-1;;;32892:68:0;;13374:2:1;32892:68:0;;;13356:21:1;13413:2;13393:18;;;13386:30;13452:34;13432:18;;;13425:62;-1:-1:-1;;;13503:18:1;;;13496:32;13545:19;;32892:68:0;13346:224:1;32892:68:0;-1:-1:-1;;;;;32971:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;33023:32;;23131:25:1;;;33023:32:0;;23104:18:1;33023:32:0;;;;;;;32728:335;;;:::o;33073:2209::-;-1:-1:-1;;;;;33161:18:0;;33153:68;;;;-1:-1:-1;;;33153:68:0;;18877:2:1;33153:68:0;;;18859:21:1;18916:2;18896:18;;;18889:30;18955:34;18935:18;;;18928:62;-1:-1:-1;;;19006:18:1;;;18999:35;19051:19;;33153:68:0;18849:227:1;33153:68:0;-1:-1:-1;;;;;33240:16:0;;33232:64;;;;-1:-1:-1;;;33232:64:0;;9699:2:1;33232:64:0;;;9681:21:1;9738:2;9718:18;;;9711:30;9777:34;9757:18;;;9750:62;-1:-1:-1;;;9828:18:1;;;9821:33;9871:19;;33232:64:0;9671:225:1;33232:64:0;33324:1;33315:6;:10;33307:34;;;;-1:-1:-1;;;33307:34:0;;14885:2:1;33307:34:0;;;14867:21:1;14924:2;14904:18;;;14897:30;-1:-1:-1;;;14943:18:1;;;14936:41;14994:18;;33307:34:0;14857:161:1;33307:34:0;33370:15;33380:4;33370:9;:15::i;:::-;33360:6;:25;;33352:57;;;;-1:-1:-1;;;33352:57:0;;14536:2:1;33352:57:0;;;14518:21:1;14575:2;14555:18;;;14548:30;-1:-1:-1;;;14594:18:1;;;14587:50;14654:18;;33352:57:0;14508:170:1;33352:57:0;-1:-1:-1;;;;;33429:12:0;;;;;;:6;:12;;;;;;;;33428:13;:28;;;;-1:-1:-1;;;;;;33446:10:0;;;;;;:6;:10;;;;;;;;33445:11;33428:28;33420:54;;;;-1:-1:-1;;;33420:54:0;;20833:2:1;33420:54:0;;;20815:21:1;20872:2;20852:18;;;20845:30;-1:-1:-1;;;20891:18:1;;;20884:43;20944:18;;33420:54:0;20805:163:1;33420:54:0;-1:-1:-1;;;;;33491:35:0;;;;;;:29;:35;;;;;;;;33490:36;:74;;;;-1:-1:-1;;;;;;33531:33:0;;;;;;:29;:33;;;;;;;;33530:34;33490:74;33487:683;;;33580:16;;;;33572:71;;;;-1:-1:-1;;;33572:71:0;;21947:2:1;33572:71:0;;;21929:21:1;21986:2;21966:18;;;21959:30;22025:34;22005:18;;;21998:62;-1:-1:-1;;;22076:18:1;;;22069:40;22126:19;;33572:71:0;21919:232:1;33572:71:0;-1:-1:-1;;;;;33667:14:0;;;;;;:10;:14;;;;;;;;33666:15;33658:58;;;;-1:-1:-1;;;33658:58:0;;20042:2:1;33658:58:0;;;20024:21:1;20081:2;20061:18;;;20054:30;20120:32;20100:18;;;20093:60;20170:18;;33658:58:0;20014:180:1;33658:58:0;-1:-1:-1;;;;;33731:16:0;;;;;;:10;:16;;;;;;;;33730:17;33722:60;;;;-1:-1:-1;;;33722:60:0;;20042:2:1;33722:60:0;;;20024:21:1;20081:2;20061:18;;;20054:30;20120:32;20100:18;;;20093:60;20170:18;;33722:60:0;20014:180:1;33722:60:0;-1:-1:-1;;;;;33793:38:0;;;;;;:34;:38;;;;;;;;33792:39;:84;;;;-1:-1:-1;;;;;;33836:40:0;;;;;;:34;:40;;;;;;;;33835:41;33792:84;33788:188;;;33903:11;;33893:6;:21;;33885:84;;;;-1:-1:-1;;;33885:84:0;;21528:2:1;33885:84:0;;;21510:21:1;21567:2;21547:18;;;21540:30;21606:34;21586:18;;;21579:62;-1:-1:-1;;;21657:18:1;;;21650:48;21715:19;;33885:84:0;21500:240:1;33885:84:0;-1:-1:-1;;;;;33986:33:0;;;;;;:29;:33;;;;;;;;33981:184;;34064:15;;34053:6;34037:13;34047:2;34037:9;:13::i;:::-;:22;;;;:::i;:::-;34036:43;;34028:119;;;;-1:-1:-1;;;34028:119:0;;20401:2:1;34028:119:0;;;20383:21:1;20440:2;20420:18;;;20413:30;20479:34;20459:18;;;20452:62;20550:33;20530:18;;;20523:61;20601:19;;34028:119:0;20373:253:1;34028:119:0;34186:15;;;;34182:182;;;-1:-1:-1;;;;;34257:16:0;;34218:18;34257:16;;;:10;:16;;;;;;34239:34;;:15;:34;:::i;:::-;34218:55;;34309:12;;34296:10;:25;34288:64;;;;-1:-1:-1;;;34288:64:0;;17048:2:1;34288:64:0;;;17030:21:1;17087:2;17067:18;;;17060:30;17126:28;17106:18;;;17099:56;17172:18;;34288:64:0;17020:176:1;34288:64:0;34182:182;;-1:-1:-1;;;;;34388:24:0;;;;;;:18;:24;;;;;;;;34387:25;:52;;;;-1:-1:-1;;;;;;34417:22:0;;;;;;:18;:22;;;;;;;;34416:23;34387:52;:65;;;;-1:-1:-1;34444:8:0;;;;34443:9;34387:65;34384:365;;;-1:-1:-1;;;;;34494:13:0;;;;;;:7;:13;;;;;;;;;:28;;-1:-1:-1;;;;;;34511:11:0;;;;;;:7;:11;;;;;;;;34494:28;34491:179;;;34543:35;34558:4;34564:2;34568:6;34576:1;34543:14;:35::i;:::-;34384:365;;34491:179;34619:35;34634:4;34640:2;34644:6;34652:1;34619:14;:35::i;34384:365::-;34702:35;34717:4;34723:2;34727:6;34735:1;34702:14;:35::i;:::-;-1:-1:-1;;;;;34761:16:0;;;;;;:10;:16;;;;;34780:15;34761:34;;34820:8;;;;34819:9;:25;;;;-1:-1:-1;34840:4:0;;-1:-1:-1;;;;;34832:12:0;;;34840:4;;34832:12;;34819:25;:39;;;;-1:-1:-1;34854:4:0;;-1:-1:-1;;;;;34848:10:0;;;34854:4;;34848:10;;34819:39;:68;;;;-1:-1:-1;;;;;;34863:24:0;;;;;;:18;:24;;;;;;;;34862:25;34819:68;:95;;;;-1:-1:-1;;;;;;34892:22:0;;;;;;:18;:22;;;;;;;;34891:23;34819:95;34816:459;;;34954:16;;;34968:1;34954:16;;;;;;;;;34930:21;;34954:16;;;;;;;;;;-1:-1:-1;34954:16:0;34930:40;;35007:4;34989;34994:1;34989:7;;;;;;-1:-1:-1;;;34989:7:0;;;;;;;;;-1:-1:-1;;;;;34989:23:0;;;:7;;;;;;;;;;:23;;;;35041:6;;:13;;;-1:-1:-1;;;35041:13:0;;;;:6;;;;;:11;;:13;;;;;34989:7;;35041:13;;;;;:6;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35031:4;35036:1;35031:7;;;;;;-1:-1:-1;;;35031:7:0;;;;;;;;;-1:-1:-1;;;;;35031:23:0;;;:7;;;;;;;;;:23;35083:4;;35073:7;;35083:4;;;35073;;35078:1;;35073:7;;;;-1:-1:-1;;;35073:7:0;;;;;;;;;-1:-1:-1;;;;;35073:14:0;;;:7;;;;;;;;;:14;35117:6;;35102:12;;35117:6;:20;35138:24;35156:4;35138:9;:24::i;:::-;35164:4;35117:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35117:52:0;;;;;;;;;;;;:::i;:::-;35170:1;35117:55;;;;;;-1:-1:-1;;;35117:55:0;;;;;;;;;;;;;;;35102:70;;35201:18;;35190:7;:29;35187:76;;35221:42;35238:24;35256:4;35238:9;:24::i;:::-;35221:16;:42::i;:::-;34816:459;;33073:2209;;;:::o;32012:158::-;32053:7;32074:15;32091;32110:19;:17;:19::i;:::-;32073:56;;-1:-1:-1;32073:56:0;-1:-1:-1;32147:15:0;32073:56;;32147:15;:::i;:::-;32140:22;;;;32012:158;:::o;3954:174::-;4011:16;4030:6;;-1:-1:-1;;;;;4047:17:0;;;-1:-1:-1;;;;;;4047:17:0;;;;;;4080:40;;4030:6;;;;;;;4080:40;;4011:16;4080:40;3954:174;;:::o;35363:1266::-;35475:28;35506;35517:7;35526;35506:10;:28::i;:::-;-1:-1:-1;;;;;35551:19:0;;;;;;:11;:19;;;;;;35475:59;;-1:-1:-1;35551:19:0;;35547:117;;;-1:-1:-1;;;;;35627:15:0;;;;;;:7;:15;;;;;;:25;;35645:7;;35627:25;:::i;:::-;-1:-1:-1;;;;;35609:15:0;;;;;;:7;:15;;;;;:43;35547:117;-1:-1:-1;;;;;35678:22:0;;;;;;:11;:22;;;;;;;;35674:132;;;35777:17;;;;-1:-1:-1;;;;;35756:18:0;;;;;;:7;:18;;;;;;:38;;35777:17;35756:38;:::i;:::-;-1:-1:-1;;;;;35735:18:0;;;;;;:7;:18;;;;;:59;35674:132;35852:9;;-1:-1:-1;;;;;35836:15:0;;35852:9;35836:15;;;:7;:15;;;;;;:25;;35852:9;35836:25;:::i;:::-;-1:-1:-1;;;;;35818:15:0;;;;;;;:7;:15;;;;;;;;:43;;;;35912:17;;;35893:18;;;;;;;;;;:36;;35912:17;35893:36;:::i;:::-;-1:-1:-1;;;;;35872:18:0;;;;;;:7;:18;;;;;;;:57;;;;35953:6;;;:10;;;:24;;;35976:1;35967;:6;;;:10;35953:24;35950:56;;;35979:27;35991:1;:6;;;35999:1;:6;;;35979:11;:27::i;:::-;36034:1;36020;:11;;;:15;:34;;;;36053:1;36039;:11;;;:15;36020:34;36017:170;;;36070:39;36084:1;:11;;;36097:1;:11;;;36070:13;:39::i;:::-;36146:15;;;36163:11;;;36129:46;;23131:25:1;;;-1:-1:-1;;;;;36146:15:0;;;;36129:46;;;-1:-1:-1;;;;;;;;;;;36129:46:0;23119:2:1;23104:18;36129:46:0;;;;;;;36017:170;36217:1;36200;:14;;;:18;:40;;;;36239:1;36222;:14;;;:18;36200:40;36197:191;;;36256:48;36273:1;:14;;;36289:1;:14;;;36256:16;:48::i;:::-;36341:18;;36361:14;;;;36324:52;;23131:25:1;;;-1:-1:-1;;;;;36341:18:0;;;;36324:52;;;-1:-1:-1;;;;;;;;;;;36324:52:0;23119:2:1;23104:18;36324:52:0;;;;;;;36197:191;36411:1;36401;:7;;;:11;:26;;;;36426:1;36416;:7;;;:11;36401:26;36398:142;;;36443:27;36453:1;:7;;;36462:1;:7;;;36443:9;:27::i;:::-;17434:42;-1:-1:-1;;;;;36490:38:0;36499:6;-1:-1:-1;;;;;36490:38:0;-1:-1:-1;;;;;;;;;;;36520:1:0;:7;;;36490:38;;;;23131:25:1;;23119:2;23104:18;;23086:76;36490:38:0;;;;;;;;36398:142;36582:9;-1:-1:-1;;;;;36565:46:0;36574:6;-1:-1:-1;;;;;36565:46:0;-1:-1:-1;;;;;;;;;;;36593:1:0;:17;;;36565:46;;;;23131:25:1;;23119:2;23104:18;;23086:76;36565:46:0;;;;;;;;35363:1266;;;;;:::o;36637:1611::-;19444:8;:15;;-1:-1:-1;;19444:15:0;19455:4;19444:15;;;36807:16:::1;::::0;;36821:1:::1;36807:16:::0;;;;;::::1;::::0;;;-1:-1:-1;;36807:16:0::1;::::0;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;36807:16:0::1;36783:40;;36856:4;36838;36843:1;36838:7;;;;;;-1:-1:-1::0;;;36838:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;36838:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;;:23;;;;36886:6:::1;::::0;:13:::1;::::0;;-1:-1:-1;;;36886:13:0;;;;:6;;;::::1;::::0;:11:::1;::::0;:13:::1;::::0;;::::1;::::0;36838:7;;36886:13;;;;;:6;:13;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36876:4;36881:1;36876:7;;;;;;-1:-1:-1::0;;;36876:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;36876:23:0;;::::1;:7;::::0;;::::1;::::0;;;;;:23;36924:4:::1;::::0;36914:7;;36924:4;::::1;::::0;36914;;36919:1:::1;::::0;36914:7;::::1;;;-1:-1:-1::0;;;36914:7:0::1;;;;;;;;;-1:-1:-1::0;;;;;36914:14:0;;::::1;:7;::::0;;::::1;::::0;;;;;:14;36973:6:::1;::::0;36941:53:::1;::::0;36958:4:::1;::::0;36973:6:::1;36982:11:::0;36941:8:::1;:53::i;:::-;37031:6;::::0;:218:::1;::::0;-1:-1:-1;;;37031:218:0;;-1:-1:-1;;;;;37031:6:0;;::::1;::::0;:60:::1;::::0;:218:::1;::::0;37106:11;;37031:6:::1;::::0;37176:4;;37203::::1;::::0;37223:15:::1;::::0;37031:218:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;37283:4:0::1;::::0;37321:29:::1;::::0;-1:-1:-1;;;37321:29:0;;37344:4:::1;37321:29;::::0;::::1;7824:51:1::0;-1:-1:-1;;;;;37283:4:0;;::::1;::::0;-1:-1:-1;37262:11:0::1;::::0;-1:-1:-1;37283:4:0;;37321:14:::1;::::0;7797:18:1;;37321:29:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37363:40;::::0;-1:-1:-1;;;37363:40:0;;37384:4:::1;37363:40;::::0;::::1;8369:51:1::0;8436:18;;;8429:34;;;37299:51:0;;-1:-1:-1;;;;;;37363:12:0;::::1;::::0;::::1;::::0;8342:18:1;;37363:40:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;37416:26;37482:11;37467;37446:9;:18;;;:32;;;;:::i;:::-;37445:48;;;;:::i;:::-;37416:77;;37504:29;37576:11;37561;37537:9;:21;;;:35;;;;:::i;:::-;37536:51;;;;:::i;:::-;37614:15;::::0;37600:50:::1;::::0;-1:-1:-1;;;37600:50:0;;-1:-1:-1;;;;;37614:15:0;;::::1;37600:50;::::0;::::1;8369:51:1::0;8436:18;;;8429:34;;;37504:83:0;;-1:-1:-1;37600:13:0;::::1;::::0;::::1;::::0;8342:18:1;;37600:50:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;37675:18:0::1;::::0;37661:56:::1;::::0;-1:-1:-1;;;37661:56:0;;-1:-1:-1;;;;;37675:18:0;;::::1;37661:56;::::0;::::1;8369:51:1::0;8436:18;;;8429:34;;;37661:13:0;;::::1;::::0;::::1;::::0;8342:18:1;;37661:56:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;37751:1:0::1;37730:9;:22:::0;;;37763:21;:25;-1:-1:-1;;19482:8:0;:16;;-1:-1:-1;;19482:16:0;;;-1:-1:-1;;;36637:1611:0:o;32178:542::-;32275:7;;32311;;32228;;;;;32329:279;32353:9;:16;32349:20;;32329:279;;;32419:7;32395;:21;32403:9;32413:1;32403:12;;;;;;-1:-1:-1;;;32403:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32403:12:0;32395:21;;;;;;;;;;;;;:31;;:66;;;32454:7;32430;:21;32438:9;32448:1;32438:12;;;;;;-1:-1:-1;;;32438:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32438:12:0;32430:21;;;;;;;;;;;;;:31;32395:66;32391:97;;;32471:7;;32480;;32463:25;;;;;;;32178:542;;:::o;32391:97::-;32521:7;:21;32529:9;32539:1;32529:12;;;;;;-1:-1:-1;;;32529:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32529:12:0;32521:21;;;;;;;;;;;;;32513:29;;:7;:29;:::i;:::-;32503:39;;32575:7;:21;32583:9;32593:1;32583:12;;;;;;-1:-1:-1;;;32583:12:0;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;32583:12:0;32575:21;;;;;;;;;;;;;32567:29;;:7;:29;:::i;:::-;32557:39;-1:-1:-1;32371:3:0;;;;:::i;:::-;;;;32329:279;;;;32642:7;;32634;;:15;;;;:::i;:::-;32624:7;:25;32620:56;;;32659:7;;32668;;32651:25;;;;;;32178:542;;:::o;32620:56::-;32695:7;;32704;;-1:-1:-1;32178:542:0;-1:-1:-1;32178:542:0:o;29468:383::-;29537:36;;:::i;:::-;29598:29;29610:7;29619;29598:11;:29::i;:::-;29586:41;;29764:52;29776:9;29787:7;29796;29805:10;:8;:10::i;:::-;29764:11;:52::i;:::-;29745:15;;;29638:178;29721:22;;;29638:178;29701:19;;;29638:178;29685:14;;;29638:178;29658:25;;;29638:178;;;29468:383;;;;:::o;28564:124::-;28642:4;28632:7;;:14;;;;;;;:::i;:::-;;;;-1:-1:-1;;28657:11:0;:23;;28676:4;;28657:11;:15;;:23;;28676:4;;28657:23;:::i;:::-;;;;-1:-1:-1;;;;28564:124:0:o;28696:249::-;28800:9;28776:11;:20;;;:33;;;;;;;:::i;:::-;;;;-1:-1:-1;;28835:15:0;;-1:-1:-1;;;;;28835:15:0;28823:28;;;;:11;:28;;;;;;;;28820:70;;;28861:15;;-1:-1:-1;;;;;28861:15:0;28853:24;;;;:7;:24;;;;;:37;;28881:9;;28853:24;:37;;28881:9;;28853:37;:::i;:::-;;;;-1:-1:-1;;28820:70:0;28909:15;;-1:-1:-1;;;;;28909:15:0;28901:24;;;;:7;:24;;;;;:36;;28928:9;;28901:24;:36;;28928:9;;28901:36;:::i;28957:279::-;29072:12;29045:11;:23;;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;29110:18:0;;-1:-1:-1;;;;;29110:18:0;29098:31;;;;:11;:31;;;;;;;;29095:79;;;29139:18;;-1:-1:-1;;;;;29139:18:0;29131:27;;;;:7;:27;;;;;:43;;29162:12;;29131:27;:43;;29162:12;;29131:43;:::i;:::-;;;;-1:-1:-1;;29095:79:0;29193:18;;-1:-1:-1;;;;;29193:18:0;29185:27;;;;:7;:27;;;;;:43;;29216:12;;29185:27;:43;;29216:12;;29185:43;:::i;29244:216::-;29332:5;29312:11;:16;;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;29363:18:0;;-1:-1:-1;;;;;29363:18:0;29351:31;;;;:11;:31;;;;;;;;29348:64;;;17434:42;29383:20;;;;:7;:20;;;:29;;29407:5;;29383:20;:29;;29407:5;;29383:29;:::i;:::-;;;;-1:-1:-1;;29348:64:0;17434:42;29423:20;;;;:7;:20;;;:29;;29447:5;;29423:20;:29;;29447:5;;29423:29;:::i;29861:1062::-;29931:28;;:::i;:::-;29977:12;;;29974:932;;30004:17;;;:27;;;30044:8;;29974:932;30073:7;:12;;30084:1;30073:12;30070:836;;;30119:5;:9;30130:4;;30111:17;;:7;:17;:::i;:::-;30110:24;;;;:::i;:::-;30101:6;;;:33;30172:14;;30188:4;;30164:22;;:7;:22;:::i;:::-;30163:29;;;;:::i;:::-;30149:11;;;:43;30232:17;;30250:4;;30224:25;;:7;:25;:::i;:::-;:30;;;;:::i;:::-;30207:14;;;:47;30287:10;;30298:4;;30279:18;;:7;:18;:::i;:::-;:23;;;;:::i;:::-;30269:7;;;:33;30369:14;;30351:8;:17;30339:11;;;;:29;;30351:17;30339:29;:::i;:::-;:44;;;;:::i;:::-;30317:9;:66;;:18;;:66;;;;;:::i;:::-;;;;-1:-1:-1;;30456:14:0;;30435:20;;30423:11;;;;:32;;30435:20;30423:32;:::i;:::-;:47;;;;:::i;:::-;30398:21;:72;;:21;;:72;;;;;:::i;:::-;;;;-1:-1:-1;;30547:7:0;;;;30535:11;;;;30520:14;;;;30513:6;;;;30505:14;;:7;:14;:::i;:::-;:29;;;;:::i;:::-;:41;;;;:::i;:::-;:49;;;;:::i;:::-;30485:17;;;:69;30569:8;;30070:836;30627:5;:9;30637:4;;30619:17;;:7;:17;:::i;:::-;:22;;;;:::i;:::-;30610:6;;;:31;30674:10;;30685:4;;30666:18;;:7;:18;:::i;:::-;:23;;;;:::i;:::-;30656:7;;;:33;30726:20;;30747:4;;30718:28;;:7;:28;:::i;:::-;:33;;;;:::i;:::-;30704:11;;;:47;;;30766:21;:36;;:21;;:36;;30704:47;;30766:36;:::i;:::-;;;;-1:-1:-1;;30864:7:0;;;;30852:11;;;;30845:6;;;;30837:14;;:7;:14;:::i;30931:1073::-;31057:15;;;;;;31187:19;31195:11;31187:7;:19;:::i;:::-;31177:29;-1:-1:-1;31222:12:0;;;31219:776;;-1:-1:-1;31256:7:0;;-1:-1:-1;31274:1:0;;-1:-1:-1;31274:1:0;;-1:-1:-1;31274:1:0;;-1:-1:-1;31274:1:0;31249:33;;31219:776;31302:7;:12;;31313:1;31302:12;31299:696;;;31344:11;31337:1;:6;;;:18;;;;:::i;:::-;31330:25;;31394:11;31382:1;:11;;;:23;;;;:::i;:::-;31370:35;;31450:11;31435:1;:14;;;:26;;;;:::i;:::-;31420:41;;31492:11;31484:1;:7;;;:19;;;;:::i;:::-;31476:27;-1:-1:-1;31476:27:0;31560:12;31550:9;31537:12;31545:4;31537:7;:12;:::i;:::-;:22;;;;:::i;:::-;:35;;;;:::i;:::-;:41;;;;:::i;:::-;31518:60;;31593:68;;31299:696;31716:11;31709:1;:6;;;:18;;;;:::i;:::-;31702:25;;31772:11;31757:1;:14;;;:26;;;;:::i;31299:696::-;30931:1073;;;;;;;;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:768:1:-;68:5;121:3;114:4;106:6;102:17;98:27;88:2;;143:5;136;129:20;88:2;183:6;170:20;209:4;233:60;249:43;289:2;249:43;:::i;:::-;233:60;:::i;:::-;315:3;339:2;334:3;327:15;367:2;362:3;358:12;351:19;;402:2;394:6;390:15;454:3;449:2;443;440:1;436:10;428:6;424:23;420:32;417:41;414:2;;;475:5;468;461:20;414:2;501:5;515:238;529:2;526:1;523:9;515:238;;;600:3;587:17;617:31;642:5;617:31;:::i;:::-;661:18;;699:12;;;;731;;;;547:1;540:9;515:238;;;-1:-1:-1;771:5:1;;78:704;-1:-1:-1;;;;;;;78:704:1:o;787:257::-;846:6;899:2;887:9;878:7;874:23;870:32;867:2;;;920:6;912;905:22;867:2;964:9;951:23;983:31;1008:5;983:31;:::i;1049:261::-;1119:6;1172:2;1160:9;1151:7;1147:23;1143:32;1140:2;;;1193:6;1185;1178:22;1140:2;1230:9;1224:16;1249:31;1274:5;1249:31;:::i;1315:398::-;1383:6;1391;1444:2;1432:9;1423:7;1419:23;1415:32;1412:2;;;1465:6;1457;1450:22;1412:2;1509:9;1496:23;1528:31;1553:5;1528:31;:::i;:::-;1578:5;-1:-1:-1;1635:2:1;1620:18;;1607:32;1648:33;1607:32;1648:33;:::i;:::-;1700:7;1690:17;;;1402:311;;;;;:::o;1718:466::-;1795:6;1803;1811;1864:2;1852:9;1843:7;1839:23;1835:32;1832:2;;;1885:6;1877;1870:22;1832:2;1929:9;1916:23;1948:31;1973:5;1948:31;:::i;:::-;1998:5;-1:-1:-1;2055:2:1;2040:18;;2027:32;2068:33;2027:32;2068:33;:::i;:::-;1822:362;;2120:7;;-1:-1:-1;;;2174:2:1;2159:18;;;;2146:32;;1822:362::o;2189:392::-;2254:6;2262;2315:2;2303:9;2294:7;2290:23;2286:32;2283:2;;;2336:6;2328;2321:22;2283:2;2380:9;2367:23;2399:31;2424:5;2399:31;:::i;:::-;2449:5;-1:-1:-1;2506:2:1;2491:18;;2478:32;2519:30;2478:32;2519:30;:::i;2586:325::-;2654:6;2662;2715:2;2703:9;2694:7;2690:23;2686:32;2683:2;;;2736:6;2728;2721:22;2683:2;2780:9;2767:23;2799:31;2824:5;2799:31;:::i;:::-;2849:5;2901:2;2886:18;;;;2873:32;;-1:-1:-1;;;2673:238:1:o;2916:1204::-;3034:6;3042;3095:2;3083:9;3074:7;3070:23;3066:32;3063:2;;;3116:6;3108;3101:22;3063:2;3161:9;3148:23;3190:18;3231:2;3223:6;3220:14;3217:2;;;3252:6;3244;3237:22;3217:2;3280:61;3333:7;3324:6;3313:9;3309:22;3280:61;:::i;:::-;3270:71;;3360:2;3350:12;;3415:2;3404:9;3400:18;3387:32;3444:2;3434:8;3431:16;3428:2;;;3465:6;3457;3450:22;3428:2;3493:24;;;-1:-1:-1;3548:4:1;3540:13;;3536:27;-1:-1:-1;3526:2:1;;3582:6;3574;3567:22;3526:2;3623;3610:16;3646:60;3662:43;3702:2;3662:43;:::i;3646:60::-;3728:3;3752:2;3747:3;3740:15;3780:2;3775:3;3771:12;3764:19;;3811:2;3807;3803:11;3859:7;3854:2;3848;3845:1;3841:10;3837:2;3833:19;3829:28;3826:41;3823:2;;;3885:6;3877;3870:22;3823:2;3912:6;3903:15;;3927:163;3941:2;3938:1;3935:9;3927:163;;;3998:17;;3986:30;;3959:1;3952:9;;;;;4036:12;;;;4068;;3927:163;;;3931:3;4109:5;4099:15;;;;;;;3053:1067;;;;;:::o;4125:497::-;4215:6;4223;4276:2;4264:9;4255:7;4251:23;4247:32;4244:2;;;4297:6;4289;4282:22;4244:2;4342:9;4329:23;4375:18;4367:6;4364:30;4361:2;;;4412:6;4404;4397:22;4361:2;4440:61;4493:7;4484:6;4473:9;4469:22;4440:61;:::i;:::-;4430:71;;;4551:2;4540:9;4536:18;4523:32;4564:28;4586:5;4564:28;:::i;4627:937::-;4722:6;4753:2;4796;4784:9;4775:7;4771:23;4767:32;4764:2;;;4817:6;4809;4802:22;4764:2;4855:9;4849:16;4888:18;4880:6;4877:30;4874:2;;;4925:6;4917;4910:22;4874:2;4953:22;;5006:4;4998:13;;4994:27;-1:-1:-1;4984:2:1;;5040:6;5032;5025:22;4984:2;5074;5068:9;5097:60;5113:43;5153:2;5113:43;:::i;5097:60::-;5179:3;5203:2;5198:3;5191:15;5231:2;5226:3;5222:12;5215:19;;5262:2;5258;5254:11;5310:7;5305:2;5299;5296:1;5292:10;5288:2;5284:19;5280:28;5277:41;5274:2;;;5336:6;5328;5321:22;5274:2;5363:6;5354:15;;5378:156;5392:2;5389:1;5386:9;5378:156;;;5449:10;;5437:23;;5410:1;5403:9;;;;;5480:12;;;;5512;;5378:156;;;-1:-1:-1;5553:5:1;4733:831;-1:-1:-1;;;;;;;4733:831:1:o;5569:255::-;5636:6;5689:2;5677:9;5668:7;5664:23;5660:32;5657:2;;;5710:6;5702;5695:22;5657:2;5747:9;5741:16;5766:28;5788:5;5766:28;:::i;5829:319::-;5894:6;5902;5955:2;5943:9;5934:7;5930:23;5926:32;5923:2;;;5976:6;5968;5961:22;5923:2;6020:9;6007:23;6039:28;6061:5;6039:28;:::i;6153:190::-;6212:6;6265:2;6253:9;6244:7;6240:23;6236:32;6233:2;;;6286:6;6278;6271:22;6233:2;-1:-1:-1;6314:23:1;;6223:120;-1:-1:-1;6223:120:1:o;6348:194::-;6418:6;6471:2;6459:9;6450:7;6446:23;6442:32;6439:2;;;6492:6;6484;6477:22;6439:2;-1:-1:-1;6520:16:1;;6429:113;-1:-1:-1;6429:113:1:o;6547:258::-;6615:6;6623;6676:2;6664:9;6655:7;6651:23;6647:32;6644:2;;;6697:6;6689;6682:22;6644:2;-1:-1:-1;;6725:23:1;;;6795:2;6780:18;;;6767:32;;-1:-1:-1;6634:171:1:o;6810:395::-;6896:6;6904;6912;6920;6973:3;6961:9;6952:7;6948:23;6944:33;6941:2;;;6995:6;6987;6980:22;6941:2;-1:-1:-1;;7023:23:1;;;7093:2;7078:18;;7065:32;;-1:-1:-1;7144:2:1;7129:18;;7116:32;;7195:2;7180:18;7167:32;;-1:-1:-1;6931:274:1;-1:-1:-1;6931:274:1:o;7210:463::-;7263:3;7301:5;7295:12;7328:6;7323:3;7316:19;7354:4;7383:2;7378:3;7374:12;7367:19;;7420:2;7413:5;7409:14;7441:3;7453:195;7467:6;7464:1;7461:13;7453:195;;;7532:13;;-1:-1:-1;;;;;7528:39:1;7516:52;;7588:12;;;;7623:15;;;;7564:1;7482:9;7453:195;;;-1:-1:-1;7664:3:1;;7271:402;-1:-1:-1;;;;;7271:402:1:o;8889:603::-;9001:4;9030:2;9059;9048:9;9041:21;9091:6;9085:13;9134:6;9129:2;9118:9;9114:18;9107:34;9159:4;9172:140;9186:6;9183:1;9180:13;9172:140;;;9281:14;;;9277:23;;9271:30;9247:17;;;9266:2;9243:26;9236:66;9201:10;;9172:140;;;9330:6;9327:1;9324:13;9321:2;;;9400:4;9395:2;9386:6;9375:9;9371:22;9367:31;9360:45;9321:2;-1:-1:-1;9476:2:1;9455:15;-1:-1:-1;;9451:29:1;9436:45;;;;9483:2;9432:54;;9010:482;-1:-1:-1;;;9010:482:1:o;15376:354::-;15578:2;15560:21;;;15617:2;15597:18;;;15590:30;15656:32;15651:2;15636:18;;15629:60;15721:2;15706:18;;15550:180::o;17610:356::-;17812:2;17794:21;;;17831:18;;;17824:30;17890:34;17885:2;17870:18;;17863:62;17957:2;17942:18;;17784:182::o;19081:349::-;19283:2;19265:21;;;19322:2;19302:18;;;19295:30;19361:27;19356:2;19341:18;;19334:55;19421:2;19406:18;;19255:175::o;20973:348::-;21175:2;21157:21;;;21214:2;21194:18;;;21187:30;21253:26;21248:2;21233:18;;21226:54;21312:2;21297:18;;21147:174::o;22562:418::-;22764:2;22746:21;;;22803:2;22783:18;;;22776:30;22842:34;22837:2;22822:18;;22815:62;-1:-1:-1;;;22908:2:1;22893:18;;22886:52;22970:3;22955:19;;22736:244::o;23167:332::-;23374:6;23363:9;23356:25;23417:2;23412;23401:9;23397:18;23390:30;23337:4;23437:56;23489:2;23478:9;23474:18;23466:6;23437:56;:::i;:::-;23429:64;23346:153;-1:-1:-1;;;;23346:153:1:o;23504:582::-;23803:6;23792:9;23785:25;23846:6;23841:2;23830:9;23826:18;23819:34;23889:3;23884:2;23873:9;23869:18;23862:31;23766:4;23910:57;23962:3;23951:9;23947:19;23939:6;23910:57;:::i;:::-;-1:-1:-1;;;;;24003:32:1;;;;23998:2;23983:18;;23976:60;-1:-1:-1;24067:3:1;24052:19;24045:35;23902:65;23775:311;-1:-1:-1;;;23775:311:1:o;24929:275::-;25000:2;24994:9;25065:2;25046:13;;-1:-1:-1;;25042:27:1;25030:40;;25100:18;25085:34;;25121:22;;;25082:62;25079:2;;;25147:18;;:::i;:::-;25183:2;25176:22;24974:230;;-1:-1:-1;24974:230:1:o;25209:183::-;25269:4;25302:18;25294:6;25291:30;25288:2;;;25324:18;;:::i;:::-;-1:-1:-1;25369:1:1;25365:14;25381:4;25361:25;;25278:114::o;25397:128::-;25437:3;25468:1;25464:6;25461:1;25458:13;25455:2;;;25474:18;;:::i;:::-;-1:-1:-1;25510:9:1;;25445:80::o;25530:217::-;25570:1;25596;25586:2;;-1:-1:-1;;;25621:31:1;;25675:4;25672:1;25665:15;25703:4;25628:1;25693:15;25586:2;-1:-1:-1;25732:9:1;;25576:171::o;25752:422::-;25841:1;25884:5;25841:1;25898:270;25919:7;25909:8;25906:21;25898:270;;;25978:4;25974:1;25970:6;25966:17;25960:4;25957:27;25954:2;;;25987:18;;:::i;:::-;26037:7;26027:8;26023:22;26020:2;;;26057:16;;;;26020:2;26136:22;;;;26096:15;;;;25898:270;;;25902:3;25816:358;;;;;:::o;26179:140::-;26237:5;26266:47;26307:4;26297:8;26293:19;26287:4;26373:5;26403:8;26393:2;;-1:-1:-1;26444:1:1;26458:5;;26393:2;26492:4;26482:2;;-1:-1:-1;26529:1:1;26543:5;;26482:2;26574:4;26592:1;26587:59;;;;26660:1;26655:130;;;;26567:218;;26587:59;26617:1;26608:10;;26631:5;;;26655:130;26692:3;26682:8;26679:17;26676:2;;;26699:18;;:::i;:::-;-1:-1:-1;;26755:1:1;26741:16;;26770:5;;26567:218;;26869:2;26859:8;26856:16;26850:3;26844:4;26841:13;26837:36;26831:2;26821:8;26818:16;26813:2;26807:4;26804:12;26800:35;26797:77;26794:2;;;-1:-1:-1;26906:19:1;;;26938:5;;26794:2;26985:34;27010:8;27004:4;26985:34;:::i;:::-;27055:6;27051:1;27047:6;27043:19;27034:7;27031:32;27028:2;;;27066:18;;:::i;:::-;27104:20;;26383:747;-1:-1:-1;;;26383:747:1:o;27135:168::-;27175:7;27241:1;27237;27233:6;27229:14;27226:1;27223:21;27218:1;27211:9;27204:17;27200:45;27197:2;;;27248:18;;:::i;:::-;-1:-1:-1;27288:9:1;;27187:116::o;27308:125::-;27348:4;27376:1;27373;27370:8;27367:2;;;27381:18;;:::i;:::-;-1:-1:-1;27418:9:1;;27357:76::o;27438:135::-;27477:3;-1:-1:-1;;27498:17:1;;27495:2;;;27518:18;;:::i;:::-;-1:-1:-1;27565:1:1;27554:13;;27485:88::o;27578:127::-;27639:10;27634:3;27630:20;27627:1;27620:31;27670:4;27667:1;27660:15;27694:4;27691:1;27684:15;27710:127;27771:10;27766:3;27762:20;27759:1;27752:31;27802:4;27799:1;27792:15;27826:4;27823:1;27816:15;27842:131;-1:-1:-1;;;;;27917:31:1;;27907:42;;27897:2;;27963:1;27960;27953:12;27978:118;28064:5;28057:13;28050:21;28043:5;28040:32;28030:2;;28086:1;28083;28076:12
Swarm Source
ipfs://c064b03aab7fdbcbac88b04ff6bfffa542218e5f5cab2bf03fecfac640609fa2
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.