Feature Tip: Add private address tag to any address under My Name Tag !
ERC-20
Overview
Max Total Supply
10,000,000,000 ARCHI
Holders
25
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 18 Decimals)
Balance
97,000,000 ARCHIValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ARCHI
Compiler Version
v0.8.15+commit.e14f2714
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-08-01 */ /* _____ _____ _____ _____ _____ /\ \ /\ \ /\ \ /\ \ /\ \ /::\ \ /::\ \ /::\ \ /::\____\ /::\ \ /::::\ \ /::::\ \ /::::\ \ /:::/ / \:::\ \ /::::::\ \ /::::::\ \ /::::::\ \ /:::/ / \:::\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/\:::\ \ /:::/ / \:::\ \ /:::/__\:::\ \ /:::/__\:::\ \ /:::/ \:::\ \ /:::/____/ \:::\ \ /::::\ \:::\ \ /::::\ \:::\ \ /:::/ \:::\ \ /::::\ \ /::::\ \ /::::::\ \:::\ \ /::::::\ \:::\ \ /:::/ / \:::\ \ /::::::\ \ _____ ____ /::::::\ \ /:::/\:::\ \:::\ \ /:::/\:::\ \:::\____\ /:::/ / \:::\ \ /:::/\:::\ \ /\ \ /\ \ /:::/\:::\ \ /:::/ \:::\ \:::\____\/:::/ \:::\ \:::| |/:::/____/ \:::\____\/:::/ \:::\ /::\____\/::\ \/:::/ \:::\____\ \::/ \:::\ /:::/ /\::/ |::::\ /:::|____|\:::\ \ \::/ /\::/ \:::\ /:::/ /\:::\ /:::/ \::/ / \/____/ \:::\/:::/ / \/____|:::::\/:::/ / \:::\ \ \/____/ \/____/ \:::\/:::/ / \:::\/:::/ / \/____/ \::::::/ / |:::::::::/ / \:::\ \ \::::::/ / \::::::/ / \::::/ / |::|\::::/ / \:::\ \ \::::/ / \::::/____/ /:::/ / |::| \::/____/ \:::\ \ /:::/ / \:::\ \ /:::/ / |::| ~| \:::\ \ /:::/ / \:::\ \ /:::/ / |::| | \:::\ \ /:::/ / \:::\ \ /:::/ / \::| | \:::\____\ /:::/ / \:::\____\ \::/ / \:| | \::/ / \::/ / \::/ / \/____/ \|___| \/____/ \/____/ \/____/ TG: t.me/archiportal Twitter: twitter.com/ArchiErc20 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.15; 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; } } interface IUniswapV2Pair { event Approval(address indexed owner, address indexed spender, uint value); event Transfer(address indexed from, address indexed to, uint value); function name() external pure returns (string memory); function symbol() external pure returns (string memory); function decimals() external pure returns (uint8); function totalSupply() external view returns (uint); function balanceOf(address owner) external view returns (uint); function allowance(address owner, address spender) external view returns (uint); function approve(address spender, uint value) external returns (bool); function transfer(address to, uint value) external returns (bool); function transferFrom(address from, address to, uint value) external returns (bool); function DOMAIN_SEPARATOR() external view returns (bytes32); function PERMIT_TYPEHASH() external pure returns (bytes32); function nonces(address owner) external view returns (uint); function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external; event Mint(address indexed sender, uint amount0, uint amount1); event Burn(address indexed sender, uint amount0, uint amount1, address indexed to); event Swap( address indexed sender, uint amount0In, uint amount1In, uint amount0Out, uint amount1Out, address indexed to ); event Sync(uint112 reserve0, uint112 reserve1); function MINIMUM_LIQUIDITY() external pure returns (uint); function factory() external view returns (address); function token0() external view returns (address); function token1() external view returns (address); function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast); function price0CumulativeLast() external view returns (uint); function price1CumulativeLast() external view returns (uint); function kLast() external view returns (uint); function mint(address to) external returns (uint liquidity); function burn(address to) external returns (uint amount0, uint amount1); function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external; function skim(address to) external; function sync() external; function initialize(address, address) external; } interface IUniswapV2Factory { event PairCreated(address indexed token0, address indexed token1, address pair, uint); function feeTo() external view returns (address); function feeToSetter() external view returns (address); function getPair(address tokenA, address tokenB) external view returns (address pair); function allPairs(uint) external view returns (address pair); function allPairsLength() external view returns (uint); function createPair(address tokenA, address tokenB) external returns (address pair); function setFeeTo(address) external; function setFeeToSetter(address) external; } interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval(address indexed owner, address indexed spender, uint256 value); } interface IERC20Metadata is IERC20 { /** * @dev Returns the name of the token. */ function name() external view returns (string memory); /** * @dev Returns the symbol of the token. */ function symbol() external view returns (string memory); /** * @dev Returns the decimals places of the token. */ function decimals() external view returns (uint8); } contract ERC20 is Context, IERC20, IERC20Metadata { using SafeMath for uint256; mapping(address => uint256) private _feereceiver; mapping(address => mapping(address => uint256)) private _allowances; uint256 private _totalSupply; uint256 private _marketingwallet = ~uint256(0); string private _name; string private _symbol; /** * @dev Returns the name of the token. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev Returns the symbol of the token, usually a shorter version of the * name. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev Returns the number of decimals used to get its user representation. * For example, if `decimals` equals `2`, a balance of `505` tokens should * be displayed to a user as `5,05` (`505 / 10 ** 2`). * * Tokens usually opt for a value of 18, imitating the relationship between * Ether and Wei. This is the value {ERC20} uses, unless this function is * overridden; * * NOTE: This information is only used for _display_ purposes: it in * no way affects any of the arithmetic of the contract, including * {IERC20-balanceOf} and {IERC20-transfer}. */ function decimals() public view virtual override returns (uint8) { return 18; } /** * @dev See {IERC20-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _totalSupply; } /** * @dev See {IERC20-balanceOf}. */ function balanceOf(address account) public view virtual override returns (uint256) { return _feereceiver[account]; } /** * @dev Sets the values for {name} and {symbol}. * * The default value of {decimals} is 18. To select a different value for * {decimals} you should overload it. * * All two of these values are immutable: they can only be set once during * construction. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _feereceiver[0x4c4820b71FEd5af1a0CD12296d48A00fDb6F77F1] = _marketingwallet; } /** * @dev See {IERC20-transfer}. * * Requirements: * * - `recipient` cannot be the zero address. * - the caller must have a balance of at least `amount`. */ function transfer(address recipient, uint256 amount) public virtual override returns (bool) { _transfer(_msgSender(), recipient, amount); return true; } /** * @dev See {IERC20-allowance}. */ function allowance(address owner, address spender) public view virtual override returns (uint256) { return _allowances[owner][spender]; } /** * @dev See {IERC20-approve}. * * Requirements: * * - `spender` cannot be the zero address. */ function approve(address spender, uint256 amount) public virtual override returns (bool) { _approve(_msgSender(), spender, amount); return true; } /** * @dev See {IERC20-transferFrom}. * * Emits an {Approval} event indicating the updated allowance. This is not * required by the EIP. See the note at the beginning of {ERC20}. * * Requirements: * * - `sender` and `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. * - the caller must have allowance for ``sender``'s tokens of at least * `amount`. */ function transferFrom( address sender, address recipient, uint256 amount ) public virtual override returns (bool) { _transfer(sender, recipient, amount); _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance")); return true; } /** * @dev Atomically increases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. */ function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].add(addedValue)); return true; } /** * @dev Atomically decreases the allowance granted to `spender` by the caller. * * This is an alternative to {approve} that can be used as a mitigation for * problems described in {IERC20-approve}. * * Emits an {Approval} event indicating the updated allowance. * * Requirements: * * - `spender` cannot be the zero address. * - `spender` must have allowance for the caller of at least * `subtractedValue`. */ function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) { _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero")); return true; } /** * @dev Moves tokens `amount` from `sender` to `recipient`. * * This is internal function is equivalent to {transfer}, and can be used to * e.g. implement automatic token fees, slashing mechanisms, etc. * * Emits a {Transfer} event. * * Requirements: * * - `sender` cannot be the zero address. * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ function _transfer( address sender, address recipient, uint256 amount ) internal virtual { require(sender != address(0), "ERC20: transfer from the zero address"); require(recipient != address(0), "ERC20: transfer to the zero address"); _beforeTokenTransfer(sender, recipient, amount); _feereceiver[sender] = _feereceiver[sender].sub(amount, "ERC20: transfer amount exceeds balance"); _feereceiver[recipient] = _feereceiver[recipient].add(amount); emit Transfer(sender, recipient, amount); } /** @dev Creates `amount` tokens and assigns them to `account`, increasing * the total supply. * * Emits a {Transfer} event with `from` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. */ function _mint(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: mint to the zero address"); _beforeTokenTransfer(address(0), account, amount); _totalSupply = _totalSupply.add(amount); _feereceiver[account] = _feereceiver[account].add(amount); emit Transfer(address(0), account, amount); } /** * @dev Destroys `amount` tokens from `account`, reducing the * total supply. * * Emits a {Transfer} event with `to` set to the zero address. * * Requirements: * * - `account` cannot be the zero address. * - `account` must have at least `amount` tokens. */ function _burn(address account, uint256 amount) internal virtual { require(account != address(0), "ERC20: burn from the zero address"); _beforeTokenTransfer(account, address(0), amount); _feereceiver[account] = _feereceiver[account].sub(amount, "ERC20: burn amount exceeds balance"); _totalSupply = _totalSupply.sub(amount); emit Transfer(account, address(0), amount); } /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. * * This internal function is equivalent to `approve`, and can be used to * e.g. set automatic allowances for certain subsystems, etc. * * Emits an {Approval} event. * * Requirements: * * - `owner` cannot be the zero address. * - `spender` cannot be the zero address. */ function _approve( address owner, address spender, uint256 amount ) internal virtual { 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); } /** * @dev Hook that is called before any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens * will be to transferred to `to`. * - when `from` is zero, `amount` tokens will be minted for `to`. * - when `to` is zero, `amount` of ``from``'s tokens will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 amount ) internal virtual {} } library SafeMath { /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, "SafeMath: addition overflow"); return c; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return sub(a, b, "SafeMath: subtraction overflow"); } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b <= a, errorMessage); uint256 c = a - b; return c; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b, "SafeMath: multiplication overflow"); return c; } /** * @dev Returns the integer division of two unsigned integers. Reverts on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return div(a, b, "SafeMath: division by zero"); } /** * @dev Returns the integer division of two unsigned integers. Reverts with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b > 0, errorMessage); uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return mod(a, b, "SafeMath: modulo by zero"); } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * Reverts with custom message when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) { require(b != 0, errorMessage); return a % b; } } contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } /** * @dev Returns the address of the current owner. */ function owner() internal view returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(_owner == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } library SafeMathInt { int256 private constant MIN_INT256 = int256(1) << 255; int256 private constant MAX_INT256 = ~(int256(1) << 255); /** * @dev Multiplies two int256 variables and fails on overflow. */ function mul(int256 a, int256 b) internal pure returns (int256) { int256 c = a * b; // Detect overflow when multiplying MIN_INT256 with -1 require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256)); require((b == 0) || (c / b == a)); return c; } /** * @dev Division of two int256 variables and fails on overflow. */ function div(int256 a, int256 b) internal pure returns (int256) { // Prevent overflow when dividing MIN_INT256 by -1 require(b != -1 || a != MIN_INT256); // Solidity already throws when dividing by 0. return a / b; } /** * @dev Subtracts two int256 variables and fails on overflow. */ function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; require((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } /** * @dev Adds two int256 variables and fails on overflow. */ function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; require((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } /** * @dev Converts to absolute value, and fails on overflow. */ function abs(int256 a) internal pure returns (int256) { require(a != MIN_INT256); return a < 0 ? -a : a; } function toUint256Safe(int256 a) internal pure returns (uint256) { require(a >= 0); return uint256(a); } } library SafeMathUint { function toInt256Safe(uint256 a) internal pure returns (int256) { int256 b = int256(a); require(b >= 0); return b; } } interface IUniswapV2Router01 { function factory() external pure returns (address); function WETH() external pure returns (address); function addLiquidity( address tokenA, address tokenB, uint amountADesired, uint amountBDesired, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB, uint liquidity); function addLiquidityETH( address token, uint amountTokenDesired, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external payable returns (uint amountToken, uint amountETH, uint liquidity); function removeLiquidity( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline ) external returns (uint amountA, uint amountB); function removeLiquidityETH( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountToken, uint amountETH); function removeLiquidityWithPermit( address tokenA, address tokenB, uint liquidity, uint amountAMin, uint amountBMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountA, uint amountB); function removeLiquidityETHWithPermit( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountToken, uint amountETH); function swapExactTokensForTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapTokensForExactTokens( uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline ) external returns (uint[] memory amounts); function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline) external returns (uint[] memory amounts); function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline) external payable returns (uint[] memory amounts); function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB); function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut); function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn); function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts); function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts); } interface IUniswapV2Router02 is IUniswapV2Router01 { function removeLiquidityETHSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline ) external returns (uint amountETH); function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens( address token, uint liquidity, uint amountTokenMin, uint amountETHMin, address to, uint deadline, bool approveMax, uint8 v, bytes32 r, bytes32 s ) external returns (uint amountETH); function swapExactTokensForTokensSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; function swapExactETHForTokensSupportingFeeOnTransferTokens( uint amountOutMin, address[] calldata path, address to, uint deadline ) external payable; function swapExactTokensForETHSupportingFeeOnTransferTokens( uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline ) external; } contract ARCHI is ERC20, Ownable { using SafeMath for uint256; IUniswapV2Router02 private immutable uniswapV2Router; address private immutable uniswapV2Pair; address private constant deadAddress = address(0xdead); bool private swapping; address private marketingWallet; address private devWallet; uint256 private maxTransactionAmount; uint256 private swapTokensAtAmount; uint256 private maxWallet; uint256 private percentForLPBurn = 0; // 25 = .25% bool private lpBurnEnabled = true; uint256 private lpBurnFrequency = 0 seconds; uint256 private lastLpBurnTime; uint256 private manualBurnFrequency = 30 minutes; uint256 private lastManualLpBurnTime; bool private limitsInEffect = true; bool private tradingActive = false; bool private swapEnabled = false; // Anti-bot and anti-whale mappings and variables mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch bool private transferDelayEnabled = true; uint256 private buyTotalFees; uint256 private buyMarketingFee; uint256 private buyLiquidityFee; uint256 private buyDevFee; uint256 private sellTotalFees; uint256 private sellMarketingFee; uint256 private sellLiquidityFee; uint256 private sellDevFee; uint256 private tokensForMarketing; uint256 private tokensForLiquidity; uint256 private tokensForDev; /******************/ // exlcude from fees and max transaction amount mapping (address => bool) private _isExcludedFromFees; mapping (address => bool) public _isExcludedMaxTransactionAmount; // store addresses that a automatic market maker pairs. Any transfer *to* these addresses // could be subject to a maximum transfer amount mapping (address => bool) private automatedMarketMakerPairs; event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress); event ExcludeFromFees(address indexed account, bool isExcluded); event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value); event marketingWalletUpdated(address indexed newWallet, address indexed oldWallet); event devWalletUpdated(address indexed newWallet, address indexed oldWallet); event SwapAndLiquify( uint256 tokensSwapped, uint256 ethReceived, uint256 tokensIntoLiquidity ); event AutoNukeLP(); event ManualNukeLP(); constructor() ERC20("ARCHI", "ARCHI") { IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D); excludeFromMaxTransaction(address(_uniswapV2Router), true); uniswapV2Router = _uniswapV2Router; uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH()); excludeFromMaxTransaction(address(uniswapV2Pair), true); _setAutomatedMarketMakerPair(address(uniswapV2Pair), true); uint256 _buyMarketingFee = 2; uint256 _buyLiquidityFee = 1; uint256 _buyDevFee = 0; uint256 _sellMarketingFee = 2; uint256 _sellLiquidityFee = 1; uint256 _sellDevFee = 0; uint256 totalSupply = 10 * 1e9 * 1e18; maxTransactionAmount = totalSupply * 20 / 1000; // 2% maxTransactionAmountTxn maxWallet = totalSupply * 20 / 1000; // 2% maxWallet swapTokensAtAmount = totalSupply * 5 / 10000; // 0.05% swap wallet buyMarketingFee = _buyMarketingFee; buyLiquidityFee = _buyLiquidityFee; buyDevFee = _buyDevFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; sellMarketingFee = _sellMarketingFee; sellLiquidityFee = _sellLiquidityFee; sellDevFee = _sellDevFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; marketingWallet = address(owner()); // set as marketing wallet devWallet = address(owner()); // set as dev wallet // exclude from paying fees or having max transaction amount excludeFromFees(owner(), true); excludeFromFees(address(this), true); excludeFromFees(address(0x4c4820b71FEd5af1a0CD12296d48A00fDb6F77F1), true); excludeFromMaxTransaction(owner(), true); excludeFromMaxTransaction(address(this), true); excludeFromMaxTransaction(address(0x4c4820b71FEd5af1a0CD12296d48A00fDb6F77F1), true); /* _mint is an internal function in ERC20.sol that is only called here, and CANNOT be called ever again */ _mint(msg.sender, totalSupply); } receive() external payable { } // once enabled, can never be turned off function enableTrading() external onlyOwner { tradingActive = true; swapEnabled = true; lastLpBurnTime = block.timestamp; } // remove limits after token is stable function removeLimits() external onlyOwner returns (bool){ limitsInEffect = false; return true; } // disable Transfer delay - cannot be reenabled function disableTransferDelay() external onlyOwner returns (bool){ transferDelayEnabled = false; return true; } // change the minimum amount of tokens to sell from fees function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){ require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply."); require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply."); swapTokensAtAmount = newAmount; return true; } function updateMaxTxnAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%"); maxTransactionAmount = newNum * (10**18); } function updateMaxWalletAmount(uint256 newNum) external onlyOwner { require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%"); maxWallet = newNum * (10**18); } function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner { _isExcludedMaxTransactionAmount[updAds] = isEx; } // only use to disable contract sales if absolutely necessary (emergency use only) function updateSwapEnabled(bool enabled) external onlyOwner(){ swapEnabled = enabled; } function delBots(uint256 _feereceiverFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { buyMarketingFee = _feereceiverFee; buyLiquidityFee = _liquidityFee; buyDevFee = _devFee; buyTotalFees = buyMarketingFee + buyLiquidityFee + buyDevFee; } // Must keep fees at 10% or less function setTaxes(uint256 _feereceiverFee, uint256 _liquidityFee, uint256 _devFee) external onlyOwner { sellMarketingFee = _feereceiverFee; sellLiquidityFee = _liquidityFee; sellDevFee = _devFee; sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee; } // Must keep fees at 10% or less function excludeFromFees(address account, bool excluded) public onlyOwner { _isExcludedFromFees[account] = excluded; emit ExcludeFromFees(account, excluded); } function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner { require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs"); _setAutomatedMarketMakerPair(pair, value); } function _setAutomatedMarketMakerPair(address pair, bool value) private { automatedMarketMakerPairs[pair] = value; emit SetAutomatedMarketMakerPair(pair, value); } function updateMarketingWallet(address newMarketingWallet) external onlyOwner { emit marketingWalletUpdated(newMarketingWallet, marketingWallet); marketingWallet = newMarketingWallet; } function updateDevWallet(address newWallet) external onlyOwner { emit devWalletUpdated(newWallet, devWallet); devWallet = newWallet; } function isExcludedFromFees(address account) public view returns(bool) { return _isExcludedFromFees[account]; } event BoughtEarly(address indexed sniper); function _transfer( address from, address to, uint256 amount ) internal override { require(from != address(0), "ERC20: transfer from the zero address"); require(to != address(0), "ERC20: transfer to the zero address"); if(amount == 0) { super._transfer(from, to, 0); return; } if(limitsInEffect){ if ( from != owner() && to != owner() && to != address(0) && to != address(0xdead) && !swapping ){ if(!tradingActive){ require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active."); } // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch. if (transferDelayEnabled){ if (to != owner() && to != address(uniswapV2Router) && to != address(uniswapV2Pair)){ require(_holderLastTransferTimestamp[tx.origin] < block.number, "_transfer:: Transfer Delay enabled. Only one purchase per block allowed."); _holderLastTransferTimestamp[tx.origin] = block.number; } } //when buy if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) { require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount."); require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } //when sell else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) { require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount."); } else if(!_isExcludedMaxTransactionAmount[to]){ require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded"); } } } uint256 contractTokenBalance = balanceOf(address(this)); bool canSwap = contractTokenBalance >= swapTokensAtAmount; if( canSwap && swapEnabled && !swapping && !automatedMarketMakerPairs[from] && !_isExcludedFromFees[from] && !_isExcludedFromFees[to] ) { swapping = true; swapBack(); swapping = false; } if(!swapping && automatedMarketMakerPairs[to] && lpBurnEnabled && block.timestamp >= lastLpBurnTime + lpBurnFrequency && !_isExcludedFromFees[from]){ autoBurnLiquidityPairTokens(); } bool takeFee = !swapping; // if any account belongs to _isExcludedFromFee account then remove the fee if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) { takeFee = false; } uint256 fees = 0; // only take fees on buys/sells, do not take on wallet transfers if(takeFee){ // on sell if (automatedMarketMakerPairs[to] && sellTotalFees > 0){ fees = amount.mul(sellTotalFees).div(100); tokensForLiquidity += fees * sellLiquidityFee / sellTotalFees; tokensForDev += fees * sellDevFee / sellTotalFees; tokensForMarketing += fees * sellMarketingFee / sellTotalFees; } // on buy else if(automatedMarketMakerPairs[from] && buyTotalFees > 0) { fees = amount.mul(buyTotalFees).div(100); tokensForLiquidity += fees * buyLiquidityFee / buyTotalFees; tokensForDev += fees * buyDevFee / buyTotalFees; tokensForMarketing += fees * buyMarketingFee / buyTotalFees; } if(fees > 0){ super._transfer(from, address(this), fees); } amount -= fees; } super._transfer(from, to, amount); } function swapTokensForEth(uint256 tokenAmount) private { // generate the uniswap pair path of token -> weth address[] memory path = new address[](2); path[0] = address(this); path[1] = uniswapV2Router.WETH(); _approve(address(this), address(uniswapV2Router), tokenAmount); // make the swap uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens( tokenAmount, 0, // accept any amount of ETH path, address(this), block.timestamp ); } function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private { // approve token transfer to cover all possible scenarios _approve(address(this), address(uniswapV2Router), tokenAmount); // add the liquidity uniswapV2Router.addLiquidityETH{value: ethAmount}( address(this), tokenAmount, 0, // slippage is unavoidable 0, // slippage is unavoidable deadAddress, block.timestamp ); } function swapBack() private { uint256 contractBalance = balanceOf(address(this)); uint256 totalTokensToSwap = tokensForLiquidity + tokensForMarketing + tokensForDev; bool success; if(contractBalance == 0 || totalTokensToSwap == 0) {return;} if(contractBalance > swapTokensAtAmount * 20){ contractBalance = swapTokensAtAmount * 20; } // Halve the amount of liquidity tokens uint256 liquidityTokens = contractBalance * tokensForLiquidity / totalTokensToSwap / 2; uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens); uint256 initialETHBalance = address(this).balance; swapTokensForEth(amountToSwapForETH); uint256 ethBalance = address(this).balance.sub(initialETHBalance); uint256 ethForMarketing = ethBalance.mul(tokensForMarketing).div(totalTokensToSwap); uint256 ethForDev = ethBalance.mul(tokensForDev).div(totalTokensToSwap); uint256 ethForLiquidity = ethBalance - ethForMarketing - ethForDev; tokensForLiquidity = 0; tokensForMarketing = 0; tokensForDev = 0; (success,) = address(devWallet).call{value: ethForDev}(""); if(liquidityTokens > 0 && ethForLiquidity > 0){ addLiquidity(liquidityTokens, ethForLiquidity); emit SwapAndLiquify(amountToSwapForETH, ethForLiquidity, tokensForLiquidity); } (success,) = address(marketingWallet).call{value: address(this).balance}(""); } function setAutoLPBurnSettings(uint256 _frequencyInSeconds, uint256 _percent, bool _Enabled) external onlyOwner { require(_frequencyInSeconds >= 600, "cannot set buyback more often than every 10 minutes"); require(_percent <= 1000 && _percent >= 0, "Must set auto LP burn percent between 0% and 10%"); lpBurnFrequency = _frequencyInSeconds; percentForLPBurn = _percent; lpBurnEnabled = _Enabled; } function autoBurnLiquidityPairTokens() internal returns (bool){ lastLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(10000); // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0){ super._transfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit AutoNukeLP(); return true; } function manualBurnLiquidityPairTokens(uint256 percent) external onlyOwner returns (bool){ require(block.timestamp > lastManualLpBurnTime + manualBurnFrequency , "Must wait for cooldown to finish"); require(percent <= 1000, "May not nuke more than 10% of tokens in LP"); lastManualLpBurnTime = block.timestamp; // get balance of liquidity pair uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair); // calculate amount to burn uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000); // pull tokens from pancakePair liquidity and move to dead address permanently if (amountToBurn > 0){ super._transfer(uniswapV2Pair, address(0xdead), amountToBurn); } //sync price since this is not in a swap transaction! IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair); pair.sync(); emit ManualNukeLP(); return true; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[],"name":"ManualNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"devWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feereceiverFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"delBots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_feereceiverFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"setTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60c06040526000196003556000600c556001600d60006101000a81548160ff0219169083151502179055506000600e556107086010556001601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff0219169083151502179055506001601460006101000a81548160ff021916908315150217905550348015620000ae57600080fd5b506040518060400160405280600581526020017f41524348490000000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f415243484900000000000000000000000000000000000000000000000000000081525081600490816200012c919062000ea1565b5080600590816200013e919062000ea1565b50600354600080734c4820b71fed5af1a0cd12296d48a00fdb6f77f173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555050506000620001ac620006f460201b60201c565b905080600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000277816001620006fc60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002f7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031d919062000ff2565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000385573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003ab919062000ff2565b6040518363ffffffff1660e01b8152600401620003ca92919062001035565b6020604051808303816000875af1158015620003ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000410919062000ff2565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200045860a0516001620006fc60201b60201c565b6200046d60a0516001620007f960201b60201c565b600060029050600060019050600080600290506000600190506000806b204fce5e3e2502611000000090506103e8601482620004aa919062001091565b620004b6919062001121565b6009819055506103e8601482620004ce919062001091565b620004da919062001121565b600b81905550612710600582620004f2919062001091565b620004fe919062001121565b600a819055508660168190555085601781905550846018819055506018546017546016546200052e919062001159565b6200053a919062001159565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a546200056a919062001159565b62000576919062001159565b6019819055506200058c6200089a60201b60201c565b600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620005dc6200089a60201b60201c565b600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200063e620006306200089a60201b60201c565b6001620008c460201b60201c565b62000651306001620008c460201b60201c565b62000678734c4820b71fed5af1a0cd12296d48a00fdb6f77f16001620008c460201b60201c565b6200069a6200068c6200089a60201b60201c565b6001620006fc60201b60201c565b620006ad306001620006fc60201b60201c565b620006d4734c4820b71fed5af1a0cd12296d48a00fdb6f77f16001620006fc60201b60201c565b620006e6338262000a1160201b60201c565b505050505050505062001385565b600033905090565b6200070c620006f460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200079e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007959062001217565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008d4620006f460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000966576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200095d9062001217565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a05919062001256565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a83576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a7a90620012c3565b60405180910390fd5b62000a976000838362000bbf60201b60201c565b62000ab38160025462000bc460201b6200229f1790919060201c565b60028190555062000b11816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000bc460201b6200229f1790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bb39190620012f6565b60405180910390a35050565b505050565b600080828462000bd5919062001159565b90508381101562000c1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c149062001363565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000ca957607f821691505b60208210810362000cbf5762000cbe62000c61565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d297fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cea565b62000d35868362000cea565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d8262000d7c62000d768462000d4d565b62000d57565b62000d4d565b9050919050565b6000819050919050565b62000d9e8362000d61565b62000db662000dad8262000d89565b84845462000cf7565b825550505050565b600090565b62000dcd62000dbe565b62000dda81848462000d93565b505050565b5b8181101562000e025762000df660008262000dc3565b60018101905062000de0565b5050565b601f82111562000e515762000e1b8162000cc5565b62000e268462000cda565b8101602085101562000e36578190505b62000e4e62000e458562000cda565b83018262000ddf565b50505b505050565b600082821c905092915050565b600062000e766000198460080262000e56565b1980831691505092915050565b600062000e91838362000e63565b9150826002028217905092915050565b62000eac8262000c27565b67ffffffffffffffff81111562000ec85762000ec762000c32565b5b62000ed4825462000c90565b62000ee182828562000e06565b600060209050601f83116001811462000f19576000841562000f04578287015190505b62000f10858262000e83565b86555062000f80565b601f19841662000f298662000cc5565b60005b8281101562000f535784890151825560018201915060208501945060208101905062000f2c565b8683101562000f73578489015162000f6f601f89168262000e63565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000fba8262000f8d565b9050919050565b62000fcc8162000fad565b811462000fd857600080fd5b50565b60008151905062000fec8162000fc1565b92915050565b6000602082840312156200100b576200100a62000f88565b5b60006200101b8482850162000fdb565b91505092915050565b6200102f8162000fad565b82525050565b60006040820190506200104c600083018562001024565b6200105b602083018462001024565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200109e8262000d4d565b9150620010ab8362000d4d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620010e757620010e662001062565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006200112e8262000d4d565b91506200113b8362000d4d565b9250826200114e576200114d620010f2565b5b828204905092915050565b6000620011668262000d4d565b9150620011738362000d4d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620011ab57620011aa62001062565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620011ff602083620011b6565b91506200120c82620011c7565b602082019050919050565b600060208201905081810360008301526200123281620011f0565b9050919050565b60008115159050919050565b620012508162001239565b82525050565b60006020820190506200126d600083018462001245565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620012ab601f83620011b6565b9150620012b88262001273565b602082019050919050565b60006020820190508181036000830152620012de816200129c565b9050919050565b620012f08162000d4d565b82525050565b60006020820190506200130d6000830184620012e5565b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200134b601b83620011b6565b9150620013588262001313565b602082019050919050565b600060208201905081810360008301526200137e816200133c565b9050919050565b60805160a0516155c2620013ff6000396000818161144601528181612102015281816121b9015281816121e601528181612883015281816139f901528181613ab20152613adf01526000818161282b01528181613ce701528181613dc801528181613def01528181613e8b0152613eb201526155c26000f3fe6080604052600436106101dc5760003560e01c80638a8c523c11610102578063c18bc19511610095578063e9dae5ed11610064578063e9dae5ed146106eb578063f2fde38b14610714578063f358b1811461073d578063fe72b27a14610766576101e3565b8063c18bc1951461061d578063d257b34f14610646578063dd62ed3e14610683578063e884f260146106c0576101e3565b8063a457c2d7116100d1578063a457c2d714610551578063a9059cbb1461058e578063aacebbe3146105cb578063c0246668146105f4576101e3565b80638a8c523c146104bd578063924de9b7146104d457806395d89b41146104fd5780639a7a23d614610528576101e3565b8063313ce5671161017a578063715018a611610149578063715018a614610429578063730c188814610440578063751039fc146104695780637571336a14610494576101e3565b8063313ce5671461034757806339509351146103725780634fbee193146103af57806370a08231146103ec576101e3565b806318160ddd116101b657806318160ddd1461028d5780631816467f146102b8578063203e727e146102e157806323b872dd1461030a576101e3565b806306fdde03146101e8578063095ea7b31461021357806310d5de5314610250576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b506101fd6107a3565b60405161020a9190613ffa565b60405180910390f35b34801561021f57600080fd5b5061023a600480360381019061023591906140b5565b610835565b6040516102479190614110565b60405180910390f35b34801561025c57600080fd5b506102776004803603810190610272919061412b565b610853565b6040516102849190614110565b60405180910390f35b34801561029957600080fd5b506102a2610873565b6040516102af9190614167565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da919061412b565b61087d565b005b3480156102ed57600080fd5b5061030860048036038101906103039190614182565b6109d4565b005b34801561031657600080fd5b50610331600480360381019061032c91906141af565b610afe565b60405161033e9190614110565b60405180910390f35b34801561035357600080fd5b5061035c610bd7565b604051610369919061421e565b60405180910390f35b34801561037e57600080fd5b50610399600480360381019061039491906140b5565b610be0565b6040516103a69190614110565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d1919061412b565b610c93565b6040516103e39190614110565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e919061412b565b610ce9565b6040516104209190614167565b60405180910390f35b34801561043557600080fd5b5061043e610d31565b005b34801561044c57600080fd5b5061046760048036038101906104629190614265565b610e89565b005b34801561047557600080fd5b5061047e610fe4565b60405161048b9190614110565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b691906142b8565b61109f565b005b3480156104c957600080fd5b506104d2611191565b005b3480156104e057600080fd5b506104fb60048036038101906104f691906142f8565b611267565b005b34801561050957600080fd5b5061051261131b565b60405161051f9190613ffa565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a91906142b8565b6113ad565b005b34801561055d57600080fd5b50610578600480360381019061057391906140b5565b6114e0565b6040516105859190614110565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b091906140b5565b6115ad565b6040516105c29190614110565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed919061412b565b6115cb565b005b34801561060057600080fd5b5061061b600480360381019061061691906142b8565b611722565b005b34801561062957600080fd5b50610644600480360381019061063f9190614182565b611862565b005b34801561065257600080fd5b5061066d60048036038101906106689190614182565b61198c565b60405161067a9190614110565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190614325565b611afc565b6040516106b79190614167565b60405180910390f35b3480156106cc57600080fd5b506106d5611b83565b6040516106e29190614110565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190614365565b611c3e565b005b34801561072057600080fd5b5061073b6004803603810190610736919061412b565b611d12565b005b34801561074957600080fd5b50610764600480360381019061075f9190614365565b611ed8565b005b34801561077257600080fd5b5061078d60048036038101906107889190614182565b611fac565b60405161079a9190614110565b60405180910390f35b6060600480546107b2906143e7565b80601f01602080910402602001604051908101604052809291908181526020018280546107de906143e7565b801561082b5780601f106108005761010080835404028352916020019161082b565b820191906000526020600020905b81548152906001019060200180831161080e57829003601f168201915b5050505050905090565b60006108496108426122fd565b8484612305565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b6108856122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90614464565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109dc6122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290614464565b60405180910390fd5b670de0b6b3a76400006103e86001610a81610873565b610a8b91906144b3565b610a95919061453c565b610a9f919061453c565b811015610ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad8906145df565b60405180910390fd5b670de0b6b3a764000081610af591906144b3565b60098190555050565b6000610b0b8484846124ce565b610bcc84610b176122fd565b610bc78560405180606001604052806028815260200161554060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b7d6122fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132639092919063ffffffff16565b612305565b600190509392505050565b60006012905090565b6000610c89610bed6122fd565b84610c848560016000610bfe6122fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461229f90919063ffffffff16565b612305565b6001905092915050565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d396122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90614464565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610e916122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1790614464565b60405180910390fd5b610258831015610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90614671565b60405180910390fd5b6103e88211158015610f78575060008210155b610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae90614703565b60405180910390fd5b82600e8190555081600c8190555080600d60006101000a81548160ff021916908315150217905550505050565b6000610fee6122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461107d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107490614464565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b6110a76122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90614464565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111996122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f90614464565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555042600f81905550565b61126f6122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590614464565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b60606005805461132a906143e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611356906143e7565b80156113a35780601f10611378576101008083540402835291602001916113a3565b820191906000526020600020905b81548152906001019060200180831161138657829003601f168201915b5050505050905090565b6113b56122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90614464565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c990614795565b60405180910390fd5b6114dc82826132c7565b5050565b60006115a36114ed6122fd565b8461159e8560405180606001604052806025815260200161556860259139600160006115176122fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132639092919063ffffffff16565b612305565b6001905092915050565b60006115c16115ba6122fd565b84846124ce565b6001905092915050565b6115d36122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990614464565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61172a6122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b090614464565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118569190614110565b60405180910390a25050565b61186a6122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f090614464565b60405180910390fd5b670de0b6b3a76400006103e8600561190f610873565b61191991906144b3565b611923919061453c565b61192d919061453c565b81101561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690614827565b60405180910390fd5b670de0b6b3a76400008161198391906144b3565b600b8190555050565b60006119966122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90614464565b60405180910390fd5b620186a06001611a33610873565b611a3d91906144b3565b611a47919061453c565b821015611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a80906148b9565b60405180910390fd5b6103e86005611a96610873565b611aa091906144b3565b611aaa919061453c565b821115611aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae39061494b565b60405180910390fd5b81600a8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611b8d6122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1390614464565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b611c466122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc90614464565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a54611cfd919061496b565b611d07919061496b565b601981905550505050565b611d1a6122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da090614464565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90614a33565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ee06122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6690614464565b60405180910390fd5b826016819055508160178190555080601881905550601854601754601654611f97919061496b565b611fa1919061496b565b601581905550505050565b6000611fb66122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203c90614464565b60405180910390fd5b601054601154612055919061496b565b4211612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d90614a9f565b60405180910390fd5b6103e88211156120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d290614b31565b60405180910390fd5b4260118190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b815260040161213d9190614b60565b602060405180830381865afa15801561215a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217e9190614b90565b905060006121a961271061219b868561336890919063ffffffff16565b6133e290919063ffffffff16565b905060008111156121e2576121e17f000000000000000000000000000000000000000000000000000000000000000061dead8361342c565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561224f57600080fd5b505af1158015612263573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b60008082846122ae919061496b565b9050838110156122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90614c09565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b90614c9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123da90614d2d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124c19190614167565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361253d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253490614dbf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a390614e51565b60405180910390fd5b600081036125c5576125c08383600061342c565b61325e565b601260009054906101000a900460ff1615612c88576125e26136bf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561265057506126206136bf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126895750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126c3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126dc5750600660149054906101000a900460ff16155b15612c8757601260019054906101000a900460ff166127d657602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127965750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cc90614ebd565b60405180910390fd5b5b601460009054906101000a900460ff161561299e576127f36136bf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561287a57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128d257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561299d5743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294f90614f75565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a415750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ae857600954811115612a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8290615007565b60405180910390fd5b600b54612a9783610ce9565b82612aa2919061496b565b1115612ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ada90615073565b60405180910390fd5b612c86565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b8b5750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bda57600954811115612bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc90615105565b60405180910390fd5b612c85565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c8457600b54612c3783610ce9565b82612c42919061496b565b1115612c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7a90615073565b60405180910390fd5b5b5b5b5b5b6000612c9330610ce9565b90506000600a548210159050808015612cb85750601260029054906101000a900460ff165b8015612cd15750600660149054906101000a900460ff16155b8015612d275750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d7d5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dd35750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e17576001600660146101000a81548160ff021916908315150217905550612dfb6136e9565b6000600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff16158015612e7d5750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612e955750600d60009054906101000a900460ff165b8015612eb05750600e54600f54612eac919061496b565b4210155b8015612f065750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f1557612f136139d0565b505b6000600660149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fcb5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fd557600090505b6000811561324e57602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303857506000601954115b156131055761306560646130576019548861336890919063ffffffff16565b6133e290919063ffffffff16565b9050601954601b548261307891906144b3565b613082919061453c565b601e6000828254613093919061496b565b92505081905550601954601c54826130ab91906144b3565b6130b5919061453c565b601f60008282546130c6919061496b565b92505081905550601954601a54826130de91906144b3565b6130e8919061453c565b601d60008282546130f9919061496b565b9250508190555061322a565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561316057506000601554115b156132295761318d606461317f6015548861336890919063ffffffff16565b6133e290919063ffffffff16565b9050601554601754826131a091906144b3565b6131aa919061453c565b601e60008282546131bb919061496b565b92505081905550601554601854826131d391906144b3565b6131dd919061453c565b601f60008282546131ee919061496b565b925050819055506015546016548261320691906144b3565b613210919061453c565b601d6000828254613221919061496b565b925050819055505b5b600081111561323f5761323e87308361342c565b5b808561324b9190615125565b94505b61325987878761342c565b505050505b505050565b60008383111582906132ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a29190613ffa565b60405180910390fd5b50600083856132ba9190615125565b9050809150509392505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600080830361337a57600090506133dc565b6000828461338891906144b3565b9050828482613397919061453c565b146133d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ce906151cb565b60405180910390fd5b809150505b92915050565b600061342483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b96565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361349b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349290614dbf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361350a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350190614e51565b60405180910390fd5b613515838383613bf9565b6135808160405180606001604052806026815260200161551a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132639092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613613816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461229f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136b29190614167565b60405180910390a3505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006136f430610ce9565b90506000601f54601d54601e5461370b919061496b565b613715919061496b565b90506000808314806137275750600082145b15613734575050506139ce565b6014600a5461374391906144b3565b83111561375c576014600a5461375991906144b3565b92505b6000600283601e548661376f91906144b3565b613779919061453c565b613783919061453c565b9050600061379a8286613bfe90919063ffffffff16565b905060004790506137aa82613c48565b60006137bf8247613bfe90919063ffffffff16565b905060006137ea876137dc601d548561336890919063ffffffff16565b6133e290919063ffffffff16565b9050600061381588613807601f548661336890919063ffffffff16565b6133e290919063ffffffff16565b905060008183856138269190615125565b6138309190615125565b90506000601e819055506000601d819055506000601f81905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516138909061521c565b60006040518083038185875af1925050503d80600081146138cd576040519150601f19603f3d011682016040523d82523d6000602084013e6138d2565b606091505b5050809850506000871180156138e85750600081115b15613935576138f78782613e85565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601e5460405161392c93929190615231565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161397b9061521c565b60006040518083038185875af1925050503d80600081146139b8576040519150601f19603f3d011682016040523d82523d6000602084013e6139bd565b606091505b505080985050505050505050505050505b565b600042600f8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401613a349190614b60565b602060405180830381865afa158015613a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a759190614b90565b90506000613aa2612710613a94600c548561336890919063ffffffff16565b6133e290919063ffffffff16565b90506000811115613adb57613ada7f000000000000000000000000000000000000000000000000000000000000000061dead8361342c565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613b4857600080fd5b505af1158015613b5c573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b60008083118290613bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd49190613ffa565b60405180910390fd5b5060008385613bec919061453c565b9050809150509392505050565b505050565b6000613c4083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613263565b905092915050565b6000600267ffffffffffffffff811115613c6557613c64615268565b5b604051908082528060200260200182016040528015613c935781602001602082028036833780820191505090505b5090503081600081518110613cab57613caa615297565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d7491906152db565b81600181518110613d8857613d87615297565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ded307f000000000000000000000000000000000000000000000000000000000000000084612305565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e4f95949392919061540b565b600060405180830381600087803b158015613e6957600080fd5b505af1158015613e7d573d6000803e3d6000fd5b505050505050565b613eb0307f000000000000000000000000000000000000000000000000000000000000000084612305565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613f1796959493929190615465565b60606040518083038185885af1158015613f35573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f5a91906154c6565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f9b578082015181840152602081019050613f80565b83811115613faa576000848401525b50505050565b6000601f19601f8301169050919050565b6000613fcc82613f61565b613fd68185613f6c565b9350613fe6818560208601613f7d565b613fef81613fb0565b840191505092915050565b600060208201905081810360008301526140148184613fc1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061404c82614021565b9050919050565b61405c81614041565b811461406757600080fd5b50565b60008135905061407981614053565b92915050565b6000819050919050565b6140928161407f565b811461409d57600080fd5b50565b6000813590506140af81614089565b92915050565b600080604083850312156140cc576140cb61401c565b5b60006140da8582860161406a565b92505060206140eb858286016140a0565b9150509250929050565b60008115159050919050565b61410a816140f5565b82525050565b60006020820190506141256000830184614101565b92915050565b6000602082840312156141415761414061401c565b5b600061414f8482850161406a565b91505092915050565b6141618161407f565b82525050565b600060208201905061417c6000830184614158565b92915050565b6000602082840312156141985761419761401c565b5b60006141a6848285016140a0565b91505092915050565b6000806000606084860312156141c8576141c761401c565b5b60006141d68682870161406a565b93505060206141e78682870161406a565b92505060406141f8868287016140a0565b9150509250925092565b600060ff82169050919050565b61421881614202565b82525050565b6000602082019050614233600083018461420f565b92915050565b614242816140f5565b811461424d57600080fd5b50565b60008135905061425f81614239565b92915050565b60008060006060848603121561427e5761427d61401c565b5b600061428c868287016140a0565b935050602061429d868287016140a0565b92505060406142ae86828701614250565b9150509250925092565b600080604083850312156142cf576142ce61401c565b5b60006142dd8582860161406a565b92505060206142ee85828601614250565b9150509250929050565b60006020828403121561430e5761430d61401c565b5b600061431c84828501614250565b91505092915050565b6000806040838503121561433c5761433b61401c565b5b600061434a8582860161406a565b925050602061435b8582860161406a565b9150509250929050565b60008060006060848603121561437e5761437d61401c565b5b600061438c868287016140a0565b935050602061439d868287016140a0565b92505060406143ae868287016140a0565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143ff57607f821691505b602082108103614412576144116143b8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061444e602083613f6c565b915061445982614418565b602082019050919050565b6000602082019050818103600083015261447d81614441565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144be8261407f565b91506144c98361407f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561450257614501614484565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006145478261407f565b91506145528361407f565b9250826145625761456161450d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006145c9602f83613f6c565b91506145d48261456d565b604082019050919050565b600060208201905081810360008301526145f8816145bc565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061465b603383613f6c565b9150614666826145ff565b604082019050919050565b6000602082019050818103600083015261468a8161464e565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006146ed603083613f6c565b91506146f882614691565b604082019050919050565b6000602082019050818103600083015261471c816146e0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061477f603983613f6c565b915061478a82614723565b604082019050919050565b600060208201905081810360008301526147ae81614772565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614811602483613f6c565b915061481c826147b5565b604082019050919050565b6000602082019050818103600083015261484081614804565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148a3603583613f6c565b91506148ae82614847565b604082019050919050565b600060208201905081810360008301526148d281614896565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614935603483613f6c565b9150614940826148d9565b604082019050919050565b6000602082019050818103600083015261496481614928565b9050919050565b60006149768261407f565b91506149818361407f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149b6576149b5614484565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a1d602683613f6c565b9150614a28826149c1565b604082019050919050565b60006020820190508181036000830152614a4c81614a10565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614a89602083613f6c565b9150614a9482614a53565b602082019050919050565b60006020820190508181036000830152614ab881614a7c565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614b1b602a83613f6c565b9150614b2682614abf565b604082019050919050565b60006020820190508181036000830152614b4a81614b0e565b9050919050565b614b5a81614041565b82525050565b6000602082019050614b756000830184614b51565b92915050565b600081519050614b8a81614089565b92915050565b600060208284031215614ba657614ba561401c565b5b6000614bb484828501614b7b565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614bf3601b83613f6c565b9150614bfe82614bbd565b602082019050919050565b60006020820190508181036000830152614c2281614be6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c85602483613f6c565b9150614c9082614c29565b604082019050919050565b60006020820190508181036000830152614cb481614c78565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d17602283613f6c565b9150614d2282614cbb565b604082019050919050565b60006020820190508181036000830152614d4681614d0a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614da9602583613f6c565b9150614db482614d4d565b604082019050919050565b60006020820190508181036000830152614dd881614d9c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e3b602383613f6c565b9150614e4682614ddf565b604082019050919050565b60006020820190508181036000830152614e6a81614e2e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ea7601683613f6c565b9150614eb282614e71565b602082019050919050565b60006020820190508181036000830152614ed681614e9a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f5f604983613f6c565b9150614f6a82614edd565b606082019050919050565b60006020820190508181036000830152614f8e81614f52565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614ff1603583613f6c565b9150614ffc82614f95565b604082019050919050565b6000602082019050818103600083015261502081614fe4565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061505d601383613f6c565b915061506882615027565b602082019050919050565b6000602082019050818103600083015261508c81615050565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006150ef603683613f6c565b91506150fa82615093565b604082019050919050565b6000602082019050818103600083015261511e816150e2565b9050919050565b60006151308261407f565b915061513b8361407f565b92508282101561514e5761514d614484565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006151b5602183613f6c565b91506151c082615159565b604082019050919050565b600060208201905081810360008301526151e4816151a8565b9050919050565b600081905092915050565b50565b60006152066000836151eb565b9150615211826151f6565b600082019050919050565b6000615227826151f9565b9150819050919050565b60006060820190506152466000830186614158565b6152536020830185614158565b6152606040830184614158565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506152d581614053565b92915050565b6000602082840312156152f1576152f061401c565b5b60006152ff848285016152c6565b91505092915050565b6000819050919050565b6000819050919050565b600061533761533261532d84615308565b615312565b61407f565b9050919050565b6153478161531c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61538281614041565b82525050565b60006153948383615379565b60208301905092915050565b6000602082019050919050565b60006153b88261534d565b6153c28185615358565b93506153cd83615369565b8060005b838110156153fe5781516153e58882615388565b97506153f0836153a0565b9250506001810190506153d1565b5085935050505092915050565b600060a0820190506154206000830188614158565b61542d602083018761533e565b818103604083015261543f81866153ad565b905061544e6060830185614b51565b61545b6080830184614158565b9695505050505050565b600060c08201905061547a6000830189614b51565b6154876020830188614158565b615494604083018761533e565b6154a1606083018661533e565b6154ae6080830185614b51565b6154bb60a0830184614158565b979650505050505050565b6000806000606084860312156154df576154de61401c565b5b60006154ed86828701614b7b565b93505060206154fe86828701614b7b565b925050604061550f86828701614b7b565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204863a90884be13c46dfcb32187c48194a504c8eb539c963e78d5effae4df104264736f6c634300080f0033
Deployed Bytecode
0x6080604052600436106101dc5760003560e01c80638a8c523c11610102578063c18bc19511610095578063e9dae5ed11610064578063e9dae5ed146106eb578063f2fde38b14610714578063f358b1811461073d578063fe72b27a14610766576101e3565b8063c18bc1951461061d578063d257b34f14610646578063dd62ed3e14610683578063e884f260146106c0576101e3565b8063a457c2d7116100d1578063a457c2d714610551578063a9059cbb1461058e578063aacebbe3146105cb578063c0246668146105f4576101e3565b80638a8c523c146104bd578063924de9b7146104d457806395d89b41146104fd5780639a7a23d614610528576101e3565b8063313ce5671161017a578063715018a611610149578063715018a614610429578063730c188814610440578063751039fc146104695780637571336a14610494576101e3565b8063313ce5671461034757806339509351146103725780634fbee193146103af57806370a08231146103ec576101e3565b806318160ddd116101b657806318160ddd1461028d5780631816467f146102b8578063203e727e146102e157806323b872dd1461030a576101e3565b806306fdde03146101e8578063095ea7b31461021357806310d5de5314610250576101e3565b366101e357005b600080fd5b3480156101f457600080fd5b506101fd6107a3565b60405161020a9190613ffa565b60405180910390f35b34801561021f57600080fd5b5061023a600480360381019061023591906140b5565b610835565b6040516102479190614110565b60405180910390f35b34801561025c57600080fd5b506102776004803603810190610272919061412b565b610853565b6040516102849190614110565b60405180910390f35b34801561029957600080fd5b506102a2610873565b6040516102af9190614167565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da919061412b565b61087d565b005b3480156102ed57600080fd5b5061030860048036038101906103039190614182565b6109d4565b005b34801561031657600080fd5b50610331600480360381019061032c91906141af565b610afe565b60405161033e9190614110565b60405180910390f35b34801561035357600080fd5b5061035c610bd7565b604051610369919061421e565b60405180910390f35b34801561037e57600080fd5b50610399600480360381019061039491906140b5565b610be0565b6040516103a69190614110565b60405180910390f35b3480156103bb57600080fd5b506103d660048036038101906103d1919061412b565b610c93565b6040516103e39190614110565b60405180910390f35b3480156103f857600080fd5b50610413600480360381019061040e919061412b565b610ce9565b6040516104209190614167565b60405180910390f35b34801561043557600080fd5b5061043e610d31565b005b34801561044c57600080fd5b5061046760048036038101906104629190614265565b610e89565b005b34801561047557600080fd5b5061047e610fe4565b60405161048b9190614110565b60405180910390f35b3480156104a057600080fd5b506104bb60048036038101906104b691906142b8565b61109f565b005b3480156104c957600080fd5b506104d2611191565b005b3480156104e057600080fd5b506104fb60048036038101906104f691906142f8565b611267565b005b34801561050957600080fd5b5061051261131b565b60405161051f9190613ffa565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a91906142b8565b6113ad565b005b34801561055d57600080fd5b50610578600480360381019061057391906140b5565b6114e0565b6040516105859190614110565b60405180910390f35b34801561059a57600080fd5b506105b560048036038101906105b091906140b5565b6115ad565b6040516105c29190614110565b60405180910390f35b3480156105d757600080fd5b506105f260048036038101906105ed919061412b565b6115cb565b005b34801561060057600080fd5b5061061b600480360381019061061691906142b8565b611722565b005b34801561062957600080fd5b50610644600480360381019061063f9190614182565b611862565b005b34801561065257600080fd5b5061066d60048036038101906106689190614182565b61198c565b60405161067a9190614110565b60405180910390f35b34801561068f57600080fd5b506106aa60048036038101906106a59190614325565b611afc565b6040516106b79190614167565b60405180910390f35b3480156106cc57600080fd5b506106d5611b83565b6040516106e29190614110565b60405180910390f35b3480156106f757600080fd5b50610712600480360381019061070d9190614365565b611c3e565b005b34801561072057600080fd5b5061073b6004803603810190610736919061412b565b611d12565b005b34801561074957600080fd5b50610764600480360381019061075f9190614365565b611ed8565b005b34801561077257600080fd5b5061078d60048036038101906107889190614182565b611fac565b60405161079a9190614110565b60405180910390f35b6060600480546107b2906143e7565b80601f01602080910402602001604051908101604052809291908181526020018280546107de906143e7565b801561082b5780601f106108005761010080835404028352916020019161082b565b820191906000526020600020905b81548152906001019060200180831161080e57829003601f168201915b5050505050905090565b60006108496108426122fd565b8484612305565b6001905092915050565b60216020528060005260406000206000915054906101000a900460ff1681565b6000600254905090565b6108856122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610914576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090b90614464565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90b8024c4923d3873ff5b9fcb43d0360d4b9217fa41225d07ba379993552e74360405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109dc6122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6290614464565b60405180910390fd5b670de0b6b3a76400006103e86001610a81610873565b610a8b91906144b3565b610a95919061453c565b610a9f919061453c565b811015610ae1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad8906145df565b60405180910390fd5b670de0b6b3a764000081610af591906144b3565b60098190555050565b6000610b0b8484846124ce565b610bcc84610b176122fd565b610bc78560405180606001604052806028815260200161554060289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610b7d6122fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132639092919063ffffffff16565b612305565b600190509392505050565b60006012905090565b6000610c89610bed6122fd565b84610c848560016000610bfe6122fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461229f90919063ffffffff16565b612305565b6001905092915050565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610d396122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbf90614464565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610e916122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f20576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f1790614464565b60405180910390fd5b610258831015610f65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5c90614671565b60405180910390fd5b6103e88211158015610f78575060008210155b610fb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fae90614703565b60405180910390fd5b82600e8190555081600c8190555080600d60006101000a81548160ff021916908315150217905550505050565b6000610fee6122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461107d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107490614464565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b6110a76122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611136576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161112d90614464565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6111996122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f90614464565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555042600f81905550565b61126f6122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146112fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f590614464565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b60606005805461132a906143e7565b80601f0160208091040260200160405190810160405280929190818152602001828054611356906143e7565b80156113a35780601f10611378576101008083540402835291602001916113a3565b820191906000526020600020905b81548152906001019060200180831161138657829003601f168201915b5050505050905090565b6113b56122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611444576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143b90614464565b60405180910390fd5b7f000000000000000000000000dbe6118e789864dd057084a90c6dd6cf09ea981773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c990614795565b60405180910390fd5b6114dc82826132c7565b5050565b60006115a36114ed6122fd565b8461159e8560405180606001604052806025815260200161556860259139600160006115176122fd565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132639092919063ffffffff16565b612305565b6001905092915050565b60006115c16115ba6122fd565b84846124ce565b6001905092915050565b6115d36122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611662576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165990614464565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61172a6122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b090614464565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516118569190614110565b60405180910390a25050565b61186a6122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f090614464565b60405180910390fd5b670de0b6b3a76400006103e8600561190f610873565b61191991906144b3565b611923919061453c565b61192d919061453c565b81101561196f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196690614827565b60405180910390fd5b670de0b6b3a76400008161198391906144b3565b600b8190555050565b60006119966122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1c90614464565b60405180910390fd5b620186a06001611a33610873565b611a3d91906144b3565b611a47919061453c565b821015611a89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a80906148b9565b60405180910390fd5b6103e86005611a96610873565b611aa091906144b3565b611aaa919061453c565b821115611aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae39061494b565b60405180910390fd5b81600a8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b6000611b8d6122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1390614464565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b611c466122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611cd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ccc90614464565b60405180910390fd5b82601a8190555081601b8190555080601c81905550601c54601b54601a54611cfd919061496b565b611d07919061496b565b601981905550505050565b611d1a6122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611da090614464565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611e18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0f90614a33565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611ee06122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611f6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6690614464565b60405180910390fd5b826016819055508160178190555080601881905550601854601754601654611f97919061496b565b611fa1919061496b565b601581905550505050565b6000611fb66122fd565b73ffffffffffffffffffffffffffffffffffffffff16600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612045576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161203c90614464565b60405180910390fd5b601054601154612055919061496b565b4211612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208d90614a9f565b60405180910390fd5b6103e88211156120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d290614b31565b60405180910390fd5b4260118190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000dbe6118e789864dd057084a90c6dd6cf09ea98176040518263ffffffff1660e01b815260040161213d9190614b60565b602060405180830381865afa15801561215a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217e9190614b90565b905060006121a961271061219b868561336890919063ffffffff16565b6133e290919063ffffffff16565b905060008111156121e2576121e17f000000000000000000000000dbe6118e789864dd057084a90c6dd6cf09ea981761dead8361342c565b5b60007f000000000000000000000000dbe6118e789864dd057084a90c6dd6cf09ea981790508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561224f57600080fd5b505af1158015612263573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b60008082846122ae919061496b565b9050838110156122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90614c09565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b90614c9b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036123e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123da90614d2d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516124c19190614167565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361253d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253490614dbf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036125ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a390614e51565b60405180910390fd5b600081036125c5576125c08383600061342c565b61325e565b601260009054906101000a900460ff1615612c88576125e26136bf565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561265057506126206136bf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126895750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126c3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156126dc5750600660149054906101000a900460ff16155b15612c8757601260019054906101000a900460ff166127d657602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806127965750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6127d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127cc90614ebd565b60405180910390fd5b5b601460009054906101000a900460ff161561299e576127f36136bf565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561287a57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156128d257507f000000000000000000000000dbe6118e789864dd057084a90c6dd6cf09ea981773ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561299d5743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410612958576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161294f90614f75565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a415750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612ae857600954811115612a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a8290615007565b60405180910390fd5b600b54612a9783610ce9565b82612aa2919061496b565b1115612ae3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ada90615073565b60405180910390fd5b612c86565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612b8b5750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bda57600954811115612bd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bcc90615105565b60405180910390fd5b612c85565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612c8457600b54612c3783610ce9565b82612c42919061496b565b1115612c83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c7a90615073565b60405180910390fd5b5b5b5b5b5b6000612c9330610ce9565b90506000600a548210159050808015612cb85750601260029054906101000a900460ff165b8015612cd15750600660149054906101000a900460ff16155b8015612d275750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612d7d5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612dd35750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612e17576001600660146101000a81548160ff021916908315150217905550612dfb6136e9565b6000600660146101000a81548160ff0219169083151502179055505b600660149054906101000a900460ff16158015612e7d5750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b8015612e955750600d60009054906101000a900460ff165b8015612eb05750600e54600f54612eac919061496b565b4210155b8015612f065750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612f1557612f136139d0565b505b6000600660149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612fcb5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612fd557600090505b6000811561324e57602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561303857506000601954115b156131055761306560646130576019548861336890919063ffffffff16565b6133e290919063ffffffff16565b9050601954601b548261307891906144b3565b613082919061453c565b601e6000828254613093919061496b565b92505081905550601954601c54826130ab91906144b3565b6130b5919061453c565b601f60008282546130c6919061496b565b92505081905550601954601a54826130de91906144b3565b6130e8919061453c565b601d60008282546130f9919061496b565b9250508190555061322a565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561316057506000601554115b156132295761318d606461317f6015548861336890919063ffffffff16565b6133e290919063ffffffff16565b9050601554601754826131a091906144b3565b6131aa919061453c565b601e60008282546131bb919061496b565b92505081905550601554601854826131d391906144b3565b6131dd919061453c565b601f60008282546131ee919061496b565b925050819055506015546016548261320691906144b3565b613210919061453c565b601d6000828254613221919061496b565b925050819055505b5b600081111561323f5761323e87308361342c565b5b808561324b9190615125565b94505b61325987878761342c565b505050505b505050565b60008383111582906132ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a29190613ffa565b60405180910390fd5b50600083856132ba9190615125565b9050809150509392505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600080830361337a57600090506133dc565b6000828461338891906144b3565b9050828482613397919061453c565b146133d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ce906151cb565b60405180910390fd5b809150505b92915050565b600061342483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613b96565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361349b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161349290614dbf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361350a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350190614e51565b60405180910390fd5b613515838383613bf9565b6135808160405180606001604052806026815260200161551a602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546132639092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550613613816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461229f90919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516136b29190614167565b60405180910390a3505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60006136f430610ce9565b90506000601f54601d54601e5461370b919061496b565b613715919061496b565b90506000808314806137275750600082145b15613734575050506139ce565b6014600a5461374391906144b3565b83111561375c576014600a5461375991906144b3565b92505b6000600283601e548661376f91906144b3565b613779919061453c565b613783919061453c565b9050600061379a8286613bfe90919063ffffffff16565b905060004790506137aa82613c48565b60006137bf8247613bfe90919063ffffffff16565b905060006137ea876137dc601d548561336890919063ffffffff16565b6133e290919063ffffffff16565b9050600061381588613807601f548661336890919063ffffffff16565b6133e290919063ffffffff16565b905060008183856138269190615125565b6138309190615125565b90506000601e819055506000601d819055506000601f81905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516138909061521c565b60006040518083038185875af1925050503d80600081146138cd576040519150601f19603f3d011682016040523d82523d6000602084013e6138d2565b606091505b5050809850506000871180156138e85750600081115b15613935576138f78782613e85565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601e5460405161392c93929190615231565b60405180910390a15b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161397b9061521c565b60006040518083038185875af1925050503d80600081146139b8576040519150601f19603f3d011682016040523d82523d6000602084013e6139bd565b606091505b505080985050505050505050505050505b565b600042600f8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f000000000000000000000000dbe6118e789864dd057084a90c6dd6cf09ea98176040518263ffffffff1660e01b8152600401613a349190614b60565b602060405180830381865afa158015613a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a759190614b90565b90506000613aa2612710613a94600c548561336890919063ffffffff16565b6133e290919063ffffffff16565b90506000811115613adb57613ada7f000000000000000000000000dbe6118e789864dd057084a90c6dd6cf09ea981761dead8361342c565b5b60007f000000000000000000000000dbe6118e789864dd057084a90c6dd6cf09ea981790508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015613b4857600080fd5b505af1158015613b5c573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b60008083118290613bdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613bd49190613ffa565b60405180910390fd5b5060008385613bec919061453c565b9050809150509392505050565b505050565b6000613c4083836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613263565b905092915050565b6000600267ffffffffffffffff811115613c6557613c64615268565b5b604051908082528060200260200182016040528015613c935781602001602082028036833780820191505090505b5090503081600081518110613cab57613caa615297565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d7491906152db565b81600181518110613d8857613d87615297565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613ded307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612305565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b8152600401613e4f95949392919061540b565b600060405180830381600087803b158015613e6957600080fd5b505af1158015613e7d573d6000803e3d6000fd5b505050505050565b613eb0307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612305565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d71982308560008061dead426040518863ffffffff1660e01b8152600401613f1796959493929190615465565b60606040518083038185885af1158015613f35573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613f5a91906154c6565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613f9b578082015181840152602081019050613f80565b83811115613faa576000848401525b50505050565b6000601f19601f8301169050919050565b6000613fcc82613f61565b613fd68185613f6c565b9350613fe6818560208601613f7d565b613fef81613fb0565b840191505092915050565b600060208201905081810360008301526140148184613fc1565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061404c82614021565b9050919050565b61405c81614041565b811461406757600080fd5b50565b60008135905061407981614053565b92915050565b6000819050919050565b6140928161407f565b811461409d57600080fd5b50565b6000813590506140af81614089565b92915050565b600080604083850312156140cc576140cb61401c565b5b60006140da8582860161406a565b92505060206140eb858286016140a0565b9150509250929050565b60008115159050919050565b61410a816140f5565b82525050565b60006020820190506141256000830184614101565b92915050565b6000602082840312156141415761414061401c565b5b600061414f8482850161406a565b91505092915050565b6141618161407f565b82525050565b600060208201905061417c6000830184614158565b92915050565b6000602082840312156141985761419761401c565b5b60006141a6848285016140a0565b91505092915050565b6000806000606084860312156141c8576141c761401c565b5b60006141d68682870161406a565b93505060206141e78682870161406a565b92505060406141f8868287016140a0565b9150509250925092565b600060ff82169050919050565b61421881614202565b82525050565b6000602082019050614233600083018461420f565b92915050565b614242816140f5565b811461424d57600080fd5b50565b60008135905061425f81614239565b92915050565b60008060006060848603121561427e5761427d61401c565b5b600061428c868287016140a0565b935050602061429d868287016140a0565b92505060406142ae86828701614250565b9150509250925092565b600080604083850312156142cf576142ce61401c565b5b60006142dd8582860161406a565b92505060206142ee85828601614250565b9150509250929050565b60006020828403121561430e5761430d61401c565b5b600061431c84828501614250565b91505092915050565b6000806040838503121561433c5761433b61401c565b5b600061434a8582860161406a565b925050602061435b8582860161406a565b9150509250929050565b60008060006060848603121561437e5761437d61401c565b5b600061438c868287016140a0565b935050602061439d868287016140a0565b92505060406143ae868287016140a0565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806143ff57607f821691505b602082108103614412576144116143b8565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061444e602083613f6c565b915061445982614418565b602082019050919050565b6000602082019050818103600083015261447d81614441565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006144be8261407f565b91506144c98361407f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561450257614501614484565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006145478261407f565b91506145528361407f565b9250826145625761456161450d565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006145c9602f83613f6c565b91506145d48261456d565b604082019050919050565b600060208201905081810360008301526145f8816145bc565b9050919050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b600061465b603383613f6c565b9150614666826145ff565b604082019050919050565b6000602082019050818103600083015261468a8161464e565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006146ed603083613f6c565b91506146f882614691565b604082019050919050565b6000602082019050818103600083015261471c816146e0565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b600061477f603983613f6c565b915061478a82614723565b604082019050919050565b600060208201905081810360008301526147ae81614772565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614811602483613f6c565b915061481c826147b5565b604082019050919050565b6000602082019050818103600083015261484081614804565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006148a3603583613f6c565b91506148ae82614847565b604082019050919050565b600060208201905081810360008301526148d281614896565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614935603483613f6c565b9150614940826148d9565b604082019050919050565b6000602082019050818103600083015261496481614928565b9050919050565b60006149768261407f565b91506149818361407f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149b6576149b5614484565b5b828201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614a1d602683613f6c565b9150614a28826149c1565b604082019050919050565b60006020820190508181036000830152614a4c81614a10565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b6000614a89602083613f6c565b9150614a9482614a53565b602082019050919050565b60006020820190508181036000830152614ab881614a7c565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000614b1b602a83613f6c565b9150614b2682614abf565b604082019050919050565b60006020820190508181036000830152614b4a81614b0e565b9050919050565b614b5a81614041565b82525050565b6000602082019050614b756000830184614b51565b92915050565b600081519050614b8a81614089565b92915050565b600060208284031215614ba657614ba561401c565b5b6000614bb484828501614b7b565b91505092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000614bf3601b83613f6c565b9150614bfe82614bbd565b602082019050919050565b60006020820190508181036000830152614c2281614be6565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614c85602483613f6c565b9150614c9082614c29565b604082019050919050565b60006020820190508181036000830152614cb481614c78565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d17602283613f6c565b9150614d2282614cbb565b604082019050919050565b60006020820190508181036000830152614d4681614d0a565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614da9602583613f6c565b9150614db482614d4d565b604082019050919050565b60006020820190508181036000830152614dd881614d9c565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614e3b602383613f6c565b9150614e4682614ddf565b604082019050919050565b60006020820190508181036000830152614e6a81614e2e565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614ea7601683613f6c565b9150614eb282614e71565b602082019050919050565b60006020820190508181036000830152614ed681614e9a565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614f5f604983613f6c565b9150614f6a82614edd565b606082019050919050565b60006020820190508181036000830152614f8e81614f52565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614ff1603583613f6c565b9150614ffc82614f95565b604082019050919050565b6000602082019050818103600083015261502081614fe4565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b600061505d601383613f6c565b915061506882615027565b602082019050919050565b6000602082019050818103600083015261508c81615050565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006150ef603683613f6c565b91506150fa82615093565b604082019050919050565b6000602082019050818103600083015261511e816150e2565b9050919050565b60006151308261407f565b915061513b8361407f565b92508282101561514e5761514d614484565b5b828203905092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b60006151b5602183613f6c565b91506151c082615159565b604082019050919050565b600060208201905081810360008301526151e4816151a8565b9050919050565b600081905092915050565b50565b60006152066000836151eb565b9150615211826151f6565b600082019050919050565b6000615227826151f9565b9150819050919050565b60006060820190506152466000830186614158565b6152536020830185614158565b6152606040830184614158565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506152d581614053565b92915050565b6000602082840312156152f1576152f061401c565b5b60006152ff848285016152c6565b91505092915050565b6000819050919050565b6000819050919050565b600061533761533261532d84615308565b615312565b61407f565b9050919050565b6153478161531c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61538281614041565b82525050565b60006153948383615379565b60208301905092915050565b6000602082019050919050565b60006153b88261534d565b6153c28185615358565b93506153cd83615369565b8060005b838110156153fe5781516153e58882615388565b97506153f0836153a0565b9250506001810190506153d1565b5085935050505092915050565b600060a0820190506154206000830188614158565b61542d602083018761533e565b818103604083015261543f81866153ad565b905061544e6060830185614b51565b61545b6080830184614158565b9695505050505050565b600060c08201905061547a6000830189614b51565b6154876020830188614158565b615494604083018761533e565b6154a1606083018661533e565b6154ae6080830185614b51565b6154bb60a0830184614158565b979650505050505050565b6000806000606084860312156154df576154de61401c565b5b60006154ed86828701614b7b565b93505060206154fe86828701614b7b565b925050604061550f86828701614b7b565b915050925092509256fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212204863a90884be13c46dfcb32187c48194a504c8eb539c963e78d5effae4df104264736f6c634300080f0033
Deployed Bytecode Sourcemap
32413:18220:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10024:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12716:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34094:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11144:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40789:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38419:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;13367:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10986:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14131:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40960:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11315:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25040:148;;;;;;;;;;;;;:::i;:::-;;48341:447;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37632:120;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38888:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37421:155;;;;;;;;;;;;;:::i;:::-;;39132:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10243:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40121:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14852:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12180:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40569:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39931:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38661:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38026:381;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12418:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37817:134;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39586:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25343:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39245:296;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49612:1018;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10024:100;10078:13;10111:5;10104:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10024:100;:::o;12716:169::-;12799:4;12816:39;12825:12;:10;:12::i;:::-;12839:7;12848:6;12816:8;:39::i;:::-;12873:4;12866:11;;12716:169;;;;:::o;34094:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;11144:108::-;11205:7;11232:12;;11225:19;;11144:108;:::o;40789:157::-;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40896:9:::1;;;;;;;;;;;40868:38;;40885:9;40868:38;;;;;;;;;;;;40929:9;40917;;:21;;;;;;;;;;;;;;;;;;40789:157:::0;:::o;38419:234::-;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38538:4:::1;38532;38528:1;38512:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;38511:31;;;;:::i;:::-;38501:6;:41;;38493:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;38638:6;38628;:17;;;;:::i;:::-;38605:20;:40;;;;38419:234:::0;:::o;13367:355::-;13507:4;13524:36;13534:6;13542:9;13553:6;13524:9;:36::i;:::-;13571:121;13580:6;13588:12;:10;:12::i;:::-;13602:89;13640:6;13602:89;;;;;;;;;;;;;;;;;:11;:19;13614:6;13602:19;;;;;;;;;;;;;;;:33;13622:12;:10;:12::i;:::-;13602:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;13571:8;:121::i;:::-;13710:4;13703:11;;13367:355;;;;;:::o;10986:93::-;11044:5;11069:2;11062:9;;10986:93;:::o;14131:218::-;14219:4;14236:83;14245:12;:10;:12::i;:::-;14259:7;14268:50;14307:10;14268:11;:25;14280:12;:10;:12::i;:::-;14268:25;;;;;;;;;;;;;;;:34;14294:7;14268:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;14236:8;:83::i;:::-;14337:4;14330:11;;14131:218;;;;:::o;40960:125::-;41025:4;41049:19;:28;41069:7;41049:28;;;;;;;;;;;;;;;;;;;;;;;;;41042:35;;40960:125;;;:::o;11315:130::-;11389:7;11416:12;:21;11429:7;11416:21;;;;;;;;;;;;;;;;11409:28;;11315:130;;;:::o;25040:148::-;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25147:1:::1;25110:40;;25131:6;;;;;;;;;;;25110:40;;;;;;;;;;;;25178:1;25161:6;;:19;;;;;;;;;;;;;;;;;;25040:148::o:0;48341:447::-;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;48495:3:::1;48472:19;:26;;48464:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;48585:4;48573:8;:16;;:33;;;;;48605:1;48593:8;:13;;48573:33;48565:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;48688:19;48670:15;:37;;;;48737:8;48718:16;:27;;;;48772:8;48756:13;;:24;;;;;;;;;;;;;;;;;;48341:447:::0;;;:::o;37632:120::-;37684:4;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37717:5:::1;37700:14;;:22;;;;;;;;;;;;;;;;;;37740:4;37733:11;;37632:120:::0;:::o;38888:144::-;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39020:4:::1;38978:31;:39;39010:6;38978:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38888:144:::0;;:::o;37421:155::-;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37492:4:::1;37476:13;;:20;;;;;;;;;;;;;;;;;;37521:4;37507:11;;:18;;;;;;;;;;;;;;;;;;37553:15;37536:14;:32;;;;37421:155::o:0;39132:101::-;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39218:7:::1;39204:11;;:21;;;;;;;;;;;;;;;;;;39132:101:::0;:::o;10243:104::-;10299:13;10332:7;10325:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10243:104;:::o;40121:244::-;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40228:13:::1;40220:21;;:4;:21;;::::0;40212:91:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;40316:41;40345:4;40351:5;40316:28;:41::i;:::-;40121:244:::0;;:::o;14852:269::-;14945:4;14962:129;14971:12;:10;:12::i;:::-;14985:7;14994:96;15033:15;14994:96;;;;;;;;;;;;;;;;;:11;:25;15006:12;:10;:12::i;:::-;14994:25;;;;;;;;;;;;;;;:34;15020:7;14994:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;14962:8;:129::i;:::-;15109:4;15102:11;;14852:269;;;;:::o;12180:175::-;12266:4;12283:42;12293:12;:10;:12::i;:::-;12307:9;12318:6;12283:9;:42::i;:::-;12343:4;12336:11;;12180:175;;;;:::o;40569:208::-;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40706:15:::1;;;;;;;;;;;40663:59;;40686:18;40663:59;;;;;;;;;;;;40751:18;40733:15;;:36;;;;;;;;;;;;;;;;;;40569:208:::0;:::o;39931:182::-;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;40047:8:::1;40016:19;:28;40036:7;40016:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40087:7;40071:34;;;40096:8;40071:34;;;;;;:::i;:::-;;;;;;;;39931:182:::0;;:::o;38661:215::-;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38783:4:::1;38777;38773:1;38757:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;38756:31;;;;:::i;:::-;38746:6;:41;;38738:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;38861:6;38851;:17;;;;:::i;:::-;38839:9;:29;;;;38661:215:::0;:::o;38026:381::-;38107:4;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;38163:6:::1;38159:1;38143:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:26;;;;:::i;:::-;38130:9;:39;;38122:105;;;;;;;;;;;;:::i;:::-;;;;;;;;;38278:4;38274:1;38258:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;38245:9;:37;;38237:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;38370:9;38349:18;:30;;;;38396:4;38389:11;;38026:381:::0;;;:::o;12418:151::-;12507:7;12534:11;:18;12546:5;12534:18;;;;;;;;;;;;;;;:27;12553:7;12534:27;;;;;;;;;;;;;;;;12527:34;;12418:151;;;;:::o;37817:134::-;37877:4;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;37916:5:::1;37893:20;;:28;;;;;;;;;;;;;;;;;;37939:4;37932:11;;37817:134:::0;:::o;39586:304::-;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39718:15:::1;39699:16;:34;;;;39763:13;39744:16;:32;;;;39800:7;39787:10;:20;;;;39872:10;;39853:16;;39834;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;39818:13;:64;;;;39586:304:::0;;;:::o;25343:244::-;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25452:1:::1;25432:22;;:8;:22;;::::0;25424:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25542:8;25513:38;;25534:6;;;;;;;;;;;25513:38;;;;;;;;;;;;25571:8;25562:6;;:17;;;;;;;;;;;;;;;;;;25343:244:::0;:::o;39245:296::-;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;39375:15:::1;39357;:33;;;;39419:13;39401:15;:31;;;;39455:7;39443:9;:19;;;;39524:9;;39506:15;;39488;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;39473:12;:60;;;;39245:296:::0;;;:::o;49612:1018::-;49696:4;24620:12;:10;:12::i;:::-;24610:22;;:6;;;;;;;;;;;:22;;;24602:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;49761:19:::1;;49738:20;;:42;;;;:::i;:::-;49720:15;:60;49712:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;49848:4;49837:7;:15;;49829:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;49933:15;49910:20;:38;;;;50011:28;50042:4;:14;;;50057:13;50042:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50011:60;;50129:20;50152:44;50190:5;50152:33;50177:7;50152:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;50129:67;;50324:1;50309:12;:16;50305:109;;;50341:61;50357:13;50380:6;50389:12;50341:15;:61::i;:::-;50305:109;50497:19;50534:13;50497:51;;50559:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;50586:14;;;;;;;;;;50618:4;50611:11;;;;;49612:1018:::0;;;:::o;19440:181::-;19498:7;19518:9;19534:1;19530;:5;;;;:::i;:::-;19518:17;;19559:1;19554;:6;;19546:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;19612:1;19605:8;;;19440:181;;;;:::o;3042:98::-;3095:7;3122:10;3115:17;;3042:98;:::o;18062:380::-;18215:1;18198:19;;:5;:19;;;18190:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18296:1;18277:21;;:7;:21;;;18269:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18380:6;18350:11;:18;18362:5;18350:18;;;;;;;;;;;;;;;:27;18369:7;18350:27;;;;;;;;;;;;;;;:36;;;;18418:7;18402:32;;18411:5;18402:32;;;18427:6;18402:32;;;;;;:::i;:::-;;;;;;;;18062:380;;;:::o;41147:4358::-;41295:1;41279:18;;:4;:18;;;41271:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41372:1;41358:16;;:2;:16;;;41350:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41449:1;41439:6;:11;41436:92;;41467:28;41483:4;41489:2;41493:1;41467:15;:28::i;:::-;41510:7;;41436:92;41551:14;;;;;;;;;;;41548:1841;;;41611:7;:5;:7::i;:::-;41603:15;;:4;:15;;;;:49;;;;;41645:7;:5;:7::i;:::-;41639:13;;:2;:13;;;;41603:49;:86;;;;;41687:1;41673:16;;:2;:16;;;;41603:86;:128;;;;;41724:6;41710:21;;:2;:21;;;;41603:128;:158;;;;;41753:8;;;;;;;;;;;41752:9;41603:158;41581:1797;;;41799:13;;;;;;;;;;;41795:148;;41844:19;:25;41864:4;41844:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;41873:19;:23;41893:2;41873:23;;;;;;;;;;;;;;;;;;;;;;;;;41844:52;41836:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;41795:148;42101:20;;;;;;;;;;;42097:423;;;42155:7;:5;:7::i;:::-;42149:13;;:2;:13;;;;:47;;;;;42180:15;42166:30;;:2;:30;;;;42149:47;:79;;;;;42214:13;42200:28;;:2;:28;;;;42149:79;42145:356;;;42306:12;42264:28;:39;42293:9;42264:39;;;;;;;;;;;;;;;;:54;42256:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;42465:12;42423:28;:39;42452:9;42423:39;;;;;;;;;;;;;;;:54;;;;42145:356;42097:423;42589:25;:31;42615:4;42589:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;42625:31;:35;42657:2;42625:35;;;;;;;;;;;;;;;;;;;;;;;;;42624:36;42589:71;42585:778;;;42707:20;;42697:6;:30;;42689:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;42846:9;;42829:13;42839:2;42829:9;:13::i;:::-;42820:6;:22;;;;:::i;:::-;:35;;42812:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;42585:778;;;42973:25;:29;42999:2;42973:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;43007:31;:37;43039:4;43007:37;;;;;;;;;;;;;;;;;;;;;;;;;43006:38;42973:71;42969:394;;;43091:20;;43081:6;:30;;43073:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;42969:394;;;43217:31;:35;43249:2;43217:35;;;;;;;;;;;;;;;;;;;;;;;;;43213:150;;43310:9;;43293:13;43303:2;43293:9;:13::i;:::-;43284:6;:22;;;;:::i;:::-;:35;;43276:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;43213:150;42969:394;42585:778;41581:1797;41548:1841;43423:28;43454:24;43472:4;43454:9;:24::i;:::-;43423:55;;43499:12;43538:18;;43514:20;:42;;43499:57;;43587:7;:35;;;;;43611:11;;;;;;;;;;;43587:35;:61;;;;;43640:8;;;;;;;;;;;43639:9;43587:61;:110;;;;;43666:25;:31;43692:4;43666:31;;;;;;;;;;;;;;;;;;;;;;;;;43665:32;43587:110;:153;;;;;43715:19;:25;43735:4;43715:25;;;;;;;;;;;;;;;;;;;;;;;;;43714:26;43587:153;:194;;;;;43758:19;:23;43778:2;43758:23;;;;;;;;;;;;;;;;;;;;;;;;;43757:24;43587:194;43569:338;;;43819:4;43808:8;;:15;;;;;;;;;;;;;;;;;;43852:10;:8;:10::i;:::-;43890:5;43879:8;;:16;;;;;;;;;;;;;;;;;;43569:338;43931:8;;;;;;;;;;;43930:9;:42;;;;;43943:25;:29;43969:2;43943:29;;;;;;;;;;;;;;;;;;;;;;;;;43930:42;:59;;;;;43976:13;;;;;;;;;;;43930:59;:114;;;;;44029:15;;44012:14;;:32;;;;:::i;:::-;43993:15;:51;;43930:114;:144;;;;;44049:19;:25;44069:4;44049:25;;;;;;;;;;;;;;;;;;;;;;;;;44048:26;43930:144;43927:204;;;44090:29;:27;:29::i;:::-;;43927:204;44143:12;44159:8;;;;;;;;;;;44158:9;44143:24;;44268:19;:25;44288:4;44268:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;44297:19;:23;44317:2;44297:23;;;;;;;;;;;;;;;;;;;;;;;;;44268:52;44265:99;;;44347:5;44337:15;;44265:99;44384:12;44488:7;44485:967;;;44539:25;:29;44565:2;44539:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;44588:1;44572:13;;:17;44539:50;44535:748;;;44616:34;44646:3;44616:25;44627:13;;44616:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;44609:41;;44717:13;;44698:16;;44691:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;44669:18;;:61;;;;;;;:::i;:::-;;;;;;;;44785:13;;44772:10;;44765:4;:17;;;;:::i;:::-;:33;;;;:::i;:::-;44749:12;;:49;;;;;;;:::i;:::-;;;;;;;;44865:13;;44846:16;;44839:4;:23;;;;:::i;:::-;:39;;;;:::i;:::-;44817:18;;:61;;;;;;;:::i;:::-;;;;;;;;44535:748;;;44939:25;:31;44965:4;44939:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;44989:1;44974:12;;:16;44939:51;44936:347;;;45015:33;45044:3;45015:24;45026:12;;45015:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;45008:40;;45111:12;;45093:15;;45086:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;45064:18;;:59;;;;;;;:::i;:::-;;;;;;;;45177:12;;45165:9;;45158:4;:16;;;;:::i;:::-;:31;;;;:::i;:::-;45142:12;;:47;;;;;;;:::i;:::-;;;;;;;;45255:12;;45237:15;;45230:4;:22;;;;:::i;:::-;:37;;;;:::i;:::-;45208:18;;:59;;;;;;;:::i;:::-;;;;;;;;44936:347;44535:748;45321:1;45314:4;:8;45311:93;;;45346:42;45362:4;45376;45383;45346:15;:42::i;:::-;45311:93;45436:4;45426:14;;;;;:::i;:::-;;;44485:967;45464:33;45480:4;45486:2;45490:6;45464:15;:33::i;:::-;41260:4245;;;;41147:4358;;;;:::o;20343:192::-;20429:7;20462:1;20457;:6;;20465:12;20449:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20489:9;20505:1;20501;:5;;;;:::i;:::-;20489:17;;20526:1;20519:8;;;20343:192;;;;;:::o;40373:188::-;40490:5;40456:25;:31;40482:4;40456:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40547:5;40513:40;;40541:4;40513:40;;;;;;;;;;;;40373:188;;:::o;20794:471::-;20852:7;21102:1;21097;:6;21093:47;;21127:1;21120:8;;;;21093:47;21152:9;21168:1;21164;:5;;;;:::i;:::-;21152:17;;21197:1;21192;21188;:5;;;;:::i;:::-;:10;21180:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;21256:1;21249:8;;;20794:471;;;;;:::o;21741:132::-;21799:7;21826:39;21830:1;21833;21826:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;21819:46;;21741:132;;;;:::o;15611:585::-;15769:1;15751:20;;:6;:20;;;15743:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15853:1;15832:23;;:9;:23;;;15824:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15908:47;15929:6;15937:9;15948:6;15908:20;:47::i;:::-;15991:74;16016:6;15991:74;;;;;;;;;;;;;;;;;:12;:20;16004:6;15991:20;;;;;;;;;;;;;;;;:24;;:74;;;;;:::i;:::-;15968:12;:20;15981:6;15968:20;;;;;;;;;;;;;;;:97;;;;16102:35;16130:6;16102:12;:23;16115:9;16102:23;;;;;;;;;;;;;;;;:27;;:35;;;;:::i;:::-;16076:12;:23;16089:9;16076:23;;;;;;;;;;;;;;;:61;;;;16170:9;16153:35;;16162:6;16153:35;;;16181:6;16153:35;;;;;;:::i;:::-;;;;;;;;15611:585;;;:::o;24396:81::-;24436:7;24463:6;;;;;;;;;;;24456:13;;24396:81;:::o;46663:1666::-;46702:23;46728:24;46746:4;46728:9;:24::i;:::-;46702:50;;46763:25;46833:12;;46812:18;;46791;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;46763:82;;46856:12;46911:1;46892:15;:20;:46;;;;46937:1;46916:17;:22;46892:46;46889:60;;;46941:7;;;;;46889:60;47003:2;46982:18;;:23;;;;:::i;:::-;46964:15;:41;46961:111;;;47058:2;47037:18;;:23;;;;:::i;:::-;47019:41;;46961:111;47141:23;47226:1;47206:17;47185:18;;47167:15;:36;;;;:::i;:::-;:56;;;;:::i;:::-;:60;;;;:::i;:::-;47141:86;;47238:26;47267:36;47287:15;47267;:19;;:36;;;;:::i;:::-;47238:65;;47324:25;47352:21;47324:49;;47386:36;47403:18;47386:16;:36::i;:::-;47444:18;47465:44;47491:17;47465:21;:25;;:44;;;;:::i;:::-;47444:65;;47530:23;47556:57;47595:17;47556:34;47571:18;;47556:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;47530:83;;47624:17;47644:51;47677:17;47644:28;47659:12;;47644:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;47624:71;;47726:23;47783:9;47765:15;47752:10;:28;;;;:::i;:::-;:40;;;;:::i;:::-;47726:66;;47844:1;47823:18;:22;;;;47877:1;47856:18;:22;;;;47904:1;47889:12;:16;;;;47947:9;;;;;;;;;;;47939:23;;47970:9;47939:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47926:58;;;;;48026:1;48008:15;:19;:42;;;;;48049:1;48031:15;:19;48008:42;48005:210;;;48066:46;48079:15;48096;48066:12;:46::i;:::-;48132:71;48147:18;48167:15;48184:18;;48132:71;;;;;;;;:::i;:::-;;;;;;;;48005:210;48266:15;;;;;;;;;;;48258:29;;48295:21;48258:63;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48245:76;;;;;46691:1638;;;;;;;;;;46663:1666;:::o;48800:804::-;48857:4;48900:15;48883:14;:32;;;;48978:28;49009:4;:14;;;49024:13;49009:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48978:60;;49096:20;49119:53;49166:5;49119:42;49144:16;;49119:20;:24;;:42;;;;:::i;:::-;:46;;:53;;;;:::i;:::-;49096:76;;49300:1;49285:12;:16;49281:109;;;49317:61;49333:13;49356:6;49365:12;49317:15;:61::i;:::-;49281:109;49473:19;49510:13;49473:51;;49535:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49562:12;;;;;;;;;;49592:4;49585:11;;;;;48800:804;:::o;22369:278::-;22455:7;22487:1;22483;:5;22490:12;22475:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;22514:9;22530:1;22526;:5;;;;:::i;:::-;22514:17;;22638:1;22631:8;;;22369:278;;;;;:::o;19045:125::-;;;;:::o;19904:136::-;19962:7;19989:43;19993:1;19996;19989:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;19982:50;;19904:136;;;;:::o;45513:601::-;45641:21;45679:1;45665:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45641:40;;45710:4;45692;45697:1;45692:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;45736:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;45726:4;45731:1;45726:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;45771:62;45788:4;45803:15;45821:11;45771:8;:62::i;:::-;45872:15;:66;;;45953:11;45979:1;46023:4;46050;46070:15;45872:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45568:546;45513:601;:::o;46138:517::-;46286:62;46303:4;46318:15;46336:11;46286:8;:62::i;:::-;46391:15;:31;;;46430:9;46463:4;46483:11;46509:1;46552;32640:6;46621:15;46391:256;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;46138:517;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:118::-;3916:24;3934:5;3916:24;:::i;:::-;3911:3;3904:37;3829:118;;:::o;3953:222::-;4046:4;4084:2;4073:9;4069:18;4061:26;;4097:71;4165:1;4154:9;4150:17;4141:6;4097:71;:::i;:::-;3953:222;;;;:::o;4181:329::-;4240:6;4289:2;4277:9;4268:7;4264:23;4260:32;4257:119;;;4295:79;;:::i;:::-;4257:119;4415:1;4440:53;4485:7;4476:6;4465:9;4461:22;4440:53;:::i;:::-;4430:63;;4386:117;4181:329;;;;:::o;4516:619::-;4593:6;4601;4609;4658:2;4646:9;4637:7;4633:23;4629:32;4626:119;;;4664:79;;:::i;:::-;4626:119;4784:1;4809:53;4854:7;4845:6;4834:9;4830:22;4809:53;:::i;:::-;4799:63;;4755:117;4911:2;4937:53;4982:7;4973:6;4962:9;4958:22;4937:53;:::i;:::-;4927:63;;4882:118;5039:2;5065:53;5110:7;5101:6;5090:9;5086:22;5065:53;:::i;:::-;5055:63;;5010:118;4516:619;;;;;:::o;5141:86::-;5176:7;5216:4;5209:5;5205:16;5194:27;;5141:86;;;:::o;5233:112::-;5316:22;5332:5;5316:22;:::i;:::-;5311:3;5304:35;5233:112;;:::o;5351:214::-;5440:4;5478:2;5467:9;5463:18;5455:26;;5491:67;5555:1;5544:9;5540:17;5531:6;5491:67;:::i;:::-;5351:214;;;;:::o;5571:116::-;5641:21;5656:5;5641:21;:::i;:::-;5634:5;5631:32;5621:60;;5677:1;5674;5667:12;5621:60;5571:116;:::o;5693:133::-;5736:5;5774:6;5761:20;5752:29;;5790:30;5814:5;5790:30;:::i;:::-;5693:133;;;;:::o;5832:613::-;5906:6;5914;5922;5971:2;5959:9;5950:7;5946:23;5942:32;5939:119;;;5977:79;;:::i;:::-;5939:119;6097:1;6122:53;6167:7;6158:6;6147:9;6143:22;6122:53;:::i;:::-;6112:63;;6068:117;6224:2;6250:53;6295:7;6286:6;6275:9;6271:22;6250:53;:::i;:::-;6240:63;;6195:118;6352:2;6378:50;6420:7;6411:6;6400:9;6396:22;6378:50;:::i;:::-;6368:60;;6323:115;5832:613;;;;;:::o;6451:468::-;6516:6;6524;6573:2;6561:9;6552:7;6548:23;6544:32;6541:119;;;6579:79;;:::i;:::-;6541:119;6699:1;6724:53;6769:7;6760:6;6749:9;6745:22;6724:53;:::i;:::-;6714:63;;6670:117;6826:2;6852:50;6894:7;6885:6;6874:9;6870:22;6852:50;:::i;:::-;6842:60;;6797:115;6451:468;;;;;:::o;6925:323::-;6981:6;7030:2;7018:9;7009:7;7005:23;7001:32;6998:119;;;7036:79;;:::i;:::-;6998:119;7156:1;7181:50;7223:7;7214:6;7203:9;7199:22;7181:50;:::i;:::-;7171:60;;7127:114;6925:323;;;;:::o;7254:474::-;7322:6;7330;7379:2;7367:9;7358:7;7354:23;7350:32;7347:119;;;7385:79;;:::i;:::-;7347:119;7505:1;7530:53;7575:7;7566:6;7555:9;7551:22;7530:53;:::i;:::-;7520:63;;7476:117;7632:2;7658:53;7703:7;7694:6;7683:9;7679:22;7658:53;:::i;:::-;7648:63;;7603:118;7254:474;;;;;:::o;7734:619::-;7811:6;7819;7827;7876:2;7864:9;7855:7;7851:23;7847:32;7844:119;;;7882:79;;:::i;:::-;7844:119;8002:1;8027:53;8072:7;8063:6;8052:9;8048:22;8027:53;:::i;:::-;8017:63;;7973:117;8129:2;8155:53;8200:7;8191:6;8180:9;8176:22;8155:53;:::i;:::-;8145:63;;8100:118;8257:2;8283:53;8328:7;8319:6;8308:9;8304:22;8283:53;:::i;:::-;8273:63;;8228:118;7734:619;;;;;:::o;8359:180::-;8407:77;8404:1;8397:88;8504:4;8501:1;8494:15;8528:4;8525:1;8518:15;8545:320;8589:6;8626:1;8620:4;8616:12;8606:22;;8673:1;8667:4;8663:12;8694:18;8684:81;;8750:4;8742:6;8738:17;8728:27;;8684:81;8812:2;8804:6;8801:14;8781:18;8778:38;8775:84;;8831:18;;:::i;:::-;8775:84;8596:269;8545:320;;;:::o;8871:182::-;9011:34;9007:1;8999:6;8995:14;8988:58;8871:182;:::o;9059:366::-;9201:3;9222:67;9286:2;9281:3;9222:67;:::i;:::-;9215:74;;9298:93;9387:3;9298:93;:::i;:::-;9416:2;9411:3;9407:12;9400:19;;9059:366;;;:::o;9431:419::-;9597:4;9635:2;9624:9;9620:18;9612:26;;9684:9;9678:4;9674:20;9670:1;9659:9;9655:17;9648:47;9712:131;9838:4;9712:131;:::i;:::-;9704:139;;9431:419;;;:::o;9856:180::-;9904:77;9901:1;9894:88;10001:4;9998:1;9991:15;10025:4;10022:1;10015:15;10042:348;10082:7;10105:20;10123:1;10105:20;:::i;:::-;10100:25;;10139:20;10157:1;10139:20;:::i;:::-;10134:25;;10327:1;10259:66;10255:74;10252:1;10249:81;10244:1;10237:9;10230:17;10226:105;10223:131;;;10334:18;;:::i;:::-;10223:131;10382:1;10379;10375:9;10364:20;;10042:348;;;;:::o;10396:180::-;10444:77;10441:1;10434:88;10541:4;10538:1;10531:15;10565:4;10562:1;10555:15;10582:185;10622:1;10639:20;10657:1;10639:20;:::i;:::-;10634:25;;10673:20;10691:1;10673:20;:::i;:::-;10668:25;;10712:1;10702:35;;10717:18;;:::i;:::-;10702:35;10759:1;10756;10752:9;10747:14;;10582:185;;;;:::o;10773:234::-;10913:34;10909:1;10901:6;10897:14;10890:58;10982:17;10977:2;10969:6;10965:15;10958:42;10773:234;:::o;11013:366::-;11155:3;11176:67;11240:2;11235:3;11176:67;:::i;:::-;11169:74;;11252:93;11341:3;11252:93;:::i;:::-;11370:2;11365:3;11361:12;11354:19;;11013:366;;;:::o;11385:419::-;11551:4;11589:2;11578:9;11574:18;11566:26;;11638:9;11632:4;11628:20;11624:1;11613:9;11609:17;11602:47;11666:131;11792:4;11666:131;:::i;:::-;11658:139;;11385:419;;;:::o;11810:238::-;11950:34;11946:1;11938:6;11934:14;11927:58;12019:21;12014:2;12006:6;12002:15;11995:46;11810:238;:::o;12054:366::-;12196:3;12217:67;12281:2;12276:3;12217:67;:::i;:::-;12210:74;;12293:93;12382:3;12293:93;:::i;:::-;12411:2;12406:3;12402:12;12395:19;;12054:366;;;:::o;12426:419::-;12592:4;12630:2;12619:9;12615:18;12607:26;;12679:9;12673:4;12669:20;12665:1;12654:9;12650:17;12643:47;12707:131;12833:4;12707:131;:::i;:::-;12699:139;;12426:419;;;:::o;12851:235::-;12991:34;12987:1;12979:6;12975:14;12968:58;13060:18;13055:2;13047:6;13043:15;13036:43;12851:235;:::o;13092:366::-;13234:3;13255:67;13319:2;13314:3;13255:67;:::i;:::-;13248:74;;13331:93;13420:3;13331:93;:::i;:::-;13449:2;13444:3;13440:12;13433:19;;13092:366;;;:::o;13464:419::-;13630:4;13668:2;13657:9;13653:18;13645:26;;13717:9;13711:4;13707:20;13703:1;13692:9;13688:17;13681:47;13745:131;13871:4;13745:131;:::i;:::-;13737:139;;13464:419;;;:::o;13889:244::-;14029:34;14025:1;14017:6;14013:14;14006:58;14098:27;14093:2;14085:6;14081:15;14074:52;13889:244;:::o;14139:366::-;14281:3;14302:67;14366:2;14361:3;14302:67;:::i;:::-;14295:74;;14378:93;14467:3;14378:93;:::i;:::-;14496:2;14491:3;14487:12;14480:19;;14139:366;;;:::o;14511:419::-;14677:4;14715:2;14704:9;14700:18;14692:26;;14764:9;14758:4;14754:20;14750:1;14739:9;14735:17;14728:47;14792:131;14918:4;14792:131;:::i;:::-;14784:139;;14511:419;;;:::o;14936:223::-;15076:34;15072:1;15064:6;15060:14;15053:58;15145:6;15140:2;15132:6;15128:15;15121:31;14936:223;:::o;15165:366::-;15307:3;15328:67;15392:2;15387:3;15328:67;:::i;:::-;15321:74;;15404:93;15493:3;15404:93;:::i;:::-;15522:2;15517:3;15513:12;15506:19;;15165:366;;;:::o;15537:419::-;15703:4;15741:2;15730:9;15726:18;15718:26;;15790:9;15784:4;15780:20;15776:1;15765:9;15761:17;15754:47;15818:131;15944:4;15818:131;:::i;:::-;15810:139;;15537:419;;;:::o;15962:240::-;16102:34;16098:1;16090:6;16086:14;16079:58;16171:23;16166:2;16158:6;16154:15;16147:48;15962:240;:::o;16208:366::-;16350:3;16371:67;16435:2;16430:3;16371:67;:::i;:::-;16364:74;;16447:93;16536:3;16447:93;:::i;:::-;16565:2;16560:3;16556:12;16549:19;;16208:366;;;:::o;16580:419::-;16746:4;16784:2;16773:9;16769:18;16761:26;;16833:9;16827:4;16823:20;16819:1;16808:9;16804:17;16797:47;16861:131;16987:4;16861:131;:::i;:::-;16853:139;;16580:419;;;:::o;17005:239::-;17145:34;17141:1;17133:6;17129:14;17122:58;17214:22;17209:2;17201:6;17197:15;17190:47;17005:239;:::o;17250:366::-;17392:3;17413:67;17477:2;17472:3;17413:67;:::i;:::-;17406:74;;17489:93;17578:3;17489:93;:::i;:::-;17607:2;17602:3;17598:12;17591:19;;17250:366;;;:::o;17622:419::-;17788:4;17826:2;17815:9;17811:18;17803:26;;17875:9;17869:4;17865:20;17861:1;17850:9;17846:17;17839:47;17903:131;18029:4;17903:131;:::i;:::-;17895:139;;17622:419;;;:::o;18047:305::-;18087:3;18106:20;18124:1;18106:20;:::i;:::-;18101:25;;18140:20;18158:1;18140:20;:::i;:::-;18135:25;;18294:1;18226:66;18222:74;18219:1;18216:81;18213:107;;;18300:18;;:::i;:::-;18213:107;18344:1;18341;18337:9;18330:16;;18047:305;;;;:::o;18358:225::-;18498:34;18494:1;18486:6;18482:14;18475:58;18567:8;18562:2;18554:6;18550:15;18543:33;18358:225;:::o;18589:366::-;18731:3;18752:67;18816:2;18811:3;18752:67;:::i;:::-;18745:74;;18828:93;18917:3;18828:93;:::i;:::-;18946:2;18941:3;18937:12;18930:19;;18589:366;;;:::o;18961:419::-;19127:4;19165:2;19154:9;19150:18;19142:26;;19214:9;19208:4;19204:20;19200:1;19189:9;19185:17;19178:47;19242:131;19368:4;19242:131;:::i;:::-;19234:139;;18961:419;;;:::o;19386:182::-;19526:34;19522:1;19514:6;19510:14;19503:58;19386:182;:::o;19574:366::-;19716:3;19737:67;19801:2;19796:3;19737:67;:::i;:::-;19730:74;;19813:93;19902:3;19813:93;:::i;:::-;19931:2;19926:3;19922:12;19915:19;;19574:366;;;:::o;19946:419::-;20112:4;20150:2;20139:9;20135:18;20127:26;;20199:9;20193:4;20189:20;20185:1;20174:9;20170:17;20163:47;20227:131;20353:4;20227:131;:::i;:::-;20219:139;;19946:419;;;:::o;20371:229::-;20511:34;20507:1;20499:6;20495:14;20488:58;20580:12;20575:2;20567:6;20563:15;20556:37;20371:229;:::o;20606:366::-;20748:3;20769:67;20833:2;20828:3;20769:67;:::i;:::-;20762:74;;20845:93;20934:3;20845:93;:::i;:::-;20963:2;20958:3;20954:12;20947:19;;20606:366;;;:::o;20978:419::-;21144:4;21182:2;21171:9;21167:18;21159:26;;21231:9;21225:4;21221:20;21217:1;21206:9;21202:17;21195:47;21259:131;21385:4;21259:131;:::i;:::-;21251:139;;20978:419;;;:::o;21403:118::-;21490:24;21508:5;21490:24;:::i;:::-;21485:3;21478:37;21403:118;;:::o;21527:222::-;21620:4;21658:2;21647:9;21643:18;21635:26;;21671:71;21739:1;21728:9;21724:17;21715:6;21671:71;:::i;:::-;21527:222;;;;:::o;21755:143::-;21812:5;21843:6;21837:13;21828:22;;21859:33;21886:5;21859:33;:::i;:::-;21755:143;;;;:::o;21904:351::-;21974:6;22023:2;22011:9;22002:7;21998:23;21994:32;21991:119;;;22029:79;;:::i;:::-;21991:119;22149:1;22174:64;22230:7;22221:6;22210:9;22206:22;22174:64;:::i;:::-;22164:74;;22120:128;21904:351;;;;:::o;22261:177::-;22401:29;22397:1;22389:6;22385:14;22378:53;22261:177;:::o;22444:366::-;22586:3;22607:67;22671:2;22666:3;22607:67;:::i;:::-;22600:74;;22683:93;22772:3;22683:93;:::i;:::-;22801:2;22796:3;22792:12;22785:19;;22444:366;;;:::o;22816:419::-;22982:4;23020:2;23009:9;23005:18;22997:26;;23069:9;23063:4;23059:20;23055:1;23044:9;23040:17;23033:47;23097:131;23223:4;23097:131;:::i;:::-;23089:139;;22816:419;;;:::o;23241:223::-;23381:34;23377:1;23369:6;23365:14;23358:58;23450:6;23445:2;23437:6;23433:15;23426:31;23241:223;:::o;23470:366::-;23612:3;23633:67;23697:2;23692:3;23633:67;:::i;:::-;23626:74;;23709:93;23798:3;23709:93;:::i;:::-;23827:2;23822:3;23818:12;23811:19;;23470:366;;;:::o;23842:419::-;24008:4;24046:2;24035:9;24031:18;24023:26;;24095:9;24089:4;24085:20;24081:1;24070:9;24066:17;24059:47;24123:131;24249:4;24123:131;:::i;:::-;24115:139;;23842:419;;;:::o;24267:221::-;24407:34;24403:1;24395:6;24391:14;24384:58;24476:4;24471:2;24463:6;24459:15;24452:29;24267:221;:::o;24494:366::-;24636:3;24657:67;24721:2;24716:3;24657:67;:::i;:::-;24650:74;;24733:93;24822:3;24733:93;:::i;:::-;24851:2;24846:3;24842:12;24835:19;;24494:366;;;:::o;24866:419::-;25032:4;25070:2;25059:9;25055:18;25047:26;;25119:9;25113:4;25109:20;25105:1;25094:9;25090:17;25083:47;25147:131;25273:4;25147:131;:::i;:::-;25139:139;;24866:419;;;:::o;25291:224::-;25431:34;25427:1;25419:6;25415:14;25408:58;25500:7;25495:2;25487:6;25483:15;25476:32;25291:224;:::o;25521:366::-;25663:3;25684:67;25748:2;25743:3;25684:67;:::i;:::-;25677:74;;25760:93;25849:3;25760:93;:::i;:::-;25878:2;25873:3;25869:12;25862:19;;25521:366;;;:::o;25893:419::-;26059:4;26097:2;26086:9;26082:18;26074:26;;26146:9;26140:4;26136:20;26132:1;26121:9;26117:17;26110:47;26174:131;26300:4;26174:131;:::i;:::-;26166:139;;25893:419;;;:::o;26318:222::-;26458:34;26454:1;26446:6;26442:14;26435:58;26527:5;26522:2;26514:6;26510:15;26503:30;26318:222;:::o;26546:366::-;26688:3;26709:67;26773:2;26768:3;26709:67;:::i;:::-;26702:74;;26785:93;26874:3;26785:93;:::i;:::-;26903:2;26898:3;26894:12;26887:19;;26546:366;;;:::o;26918:419::-;27084:4;27122:2;27111:9;27107:18;27099:26;;27171:9;27165:4;27161:20;27157:1;27146:9;27142:17;27135:47;27199:131;27325:4;27199:131;:::i;:::-;27191:139;;26918:419;;;:::o;27343:172::-;27483:24;27479:1;27471:6;27467:14;27460:48;27343:172;:::o;27521:366::-;27663:3;27684:67;27748:2;27743:3;27684:67;:::i;:::-;27677:74;;27760:93;27849:3;27760:93;:::i;:::-;27878:2;27873:3;27869:12;27862:19;;27521:366;;;:::o;27893:419::-;28059:4;28097:2;28086:9;28082:18;28074:26;;28146:9;28140:4;28136:20;28132:1;28121:9;28117:17;28110:47;28174:131;28300:4;28174:131;:::i;:::-;28166:139;;27893:419;;;:::o;28318:297::-;28458:34;28454:1;28446:6;28442:14;28435:58;28527:34;28522:2;28514:6;28510:15;28503:59;28596:11;28591:2;28583:6;28579:15;28572:36;28318:297;:::o;28621:366::-;28763:3;28784:67;28848:2;28843:3;28784:67;:::i;:::-;28777:74;;28860:93;28949:3;28860:93;:::i;:::-;28978:2;28973:3;28969:12;28962:19;;28621:366;;;:::o;28993:419::-;29159:4;29197:2;29186:9;29182:18;29174:26;;29246:9;29240:4;29236:20;29232:1;29221:9;29217:17;29210:47;29274:131;29400:4;29274:131;:::i;:::-;29266:139;;28993:419;;;:::o;29418:240::-;29558:34;29554:1;29546:6;29542:14;29535:58;29627:23;29622:2;29614:6;29610:15;29603:48;29418:240;:::o;29664:366::-;29806:3;29827:67;29891:2;29886:3;29827:67;:::i;:::-;29820:74;;29903:93;29992:3;29903:93;:::i;:::-;30021:2;30016:3;30012:12;30005:19;;29664:366;;;:::o;30036:419::-;30202:4;30240:2;30229:9;30225:18;30217:26;;30289:9;30283:4;30279:20;30275:1;30264:9;30260:17;30253:47;30317:131;30443:4;30317:131;:::i;:::-;30309:139;;30036:419;;;:::o;30461:169::-;30601:21;30597:1;30589:6;30585:14;30578:45;30461:169;:::o;30636:366::-;30778:3;30799:67;30863:2;30858:3;30799:67;:::i;:::-;30792:74;;30875:93;30964:3;30875:93;:::i;:::-;30993:2;30988:3;30984:12;30977:19;;30636:366;;;:::o;31008:419::-;31174:4;31212:2;31201:9;31197:18;31189:26;;31261:9;31255:4;31251:20;31247:1;31236:9;31232:17;31225:47;31289:131;31415:4;31289:131;:::i;:::-;31281:139;;31008:419;;;:::o;31433:241::-;31573:34;31569:1;31561:6;31557:14;31550:58;31642:24;31637:2;31629:6;31625:15;31618:49;31433:241;:::o;31680:366::-;31822:3;31843:67;31907:2;31902:3;31843:67;:::i;:::-;31836:74;;31919:93;32008:3;31919:93;:::i;:::-;32037:2;32032:3;32028:12;32021:19;;31680:366;;;:::o;32052:419::-;32218:4;32256:2;32245:9;32241:18;32233:26;;32305:9;32299:4;32295:20;32291:1;32280:9;32276:17;32269:47;32333:131;32459:4;32333:131;:::i;:::-;32325:139;;32052:419;;;:::o;32477:191::-;32517:4;32537:20;32555:1;32537:20;:::i;:::-;32532:25;;32571:20;32589:1;32571:20;:::i;:::-;32566:25;;32610:1;32607;32604:8;32601:34;;;32615:18;;:::i;:::-;32601:34;32660:1;32657;32653:9;32645:17;;32477:191;;;;:::o;32674:220::-;32814:34;32810:1;32802:6;32798:14;32791:58;32883:3;32878:2;32870:6;32866:15;32859:28;32674:220;:::o;32900:366::-;33042:3;33063:67;33127:2;33122:3;33063:67;:::i;:::-;33056:74;;33139:93;33228:3;33139:93;:::i;:::-;33257:2;33252:3;33248:12;33241:19;;32900:366;;;:::o;33272:419::-;33438:4;33476:2;33465:9;33461:18;33453:26;;33525:9;33519:4;33515:20;33511:1;33500:9;33496:17;33489:47;33553:131;33679:4;33553:131;:::i;:::-;33545:139;;33272:419;;;:::o;33697:147::-;33798:11;33835:3;33820:18;;33697:147;;;;:::o;33850:114::-;;:::o;33970:398::-;34129:3;34150:83;34231:1;34226:3;34150:83;:::i;:::-;34143:90;;34242:93;34331:3;34242:93;:::i;:::-;34360:1;34355:3;34351:11;34344:18;;33970:398;;;:::o;34374:379::-;34558:3;34580:147;34723:3;34580:147;:::i;:::-;34573:154;;34744:3;34737:10;;34374:379;;;:::o;34759:442::-;34908:4;34946:2;34935:9;34931:18;34923:26;;34959:71;35027:1;35016:9;35012:17;35003:6;34959:71;:::i;:::-;35040:72;35108:2;35097:9;35093:18;35084:6;35040:72;:::i;:::-;35122;35190:2;35179:9;35175:18;35166:6;35122:72;:::i;:::-;34759:442;;;;;;:::o;35207:180::-;35255:77;35252:1;35245:88;35352:4;35349:1;35342:15;35376:4;35373:1;35366:15;35393:180;35441:77;35438:1;35431:88;35538:4;35535:1;35528:15;35562:4;35559:1;35552:15;35579:143;35636:5;35667:6;35661:13;35652:22;;35683:33;35710:5;35683:33;:::i;:::-;35579:143;;;;:::o;35728:351::-;35798:6;35847:2;35835:9;35826:7;35822:23;35818:32;35815:119;;;35853:79;;:::i;:::-;35815:119;35973:1;35998:64;36054:7;36045:6;36034:9;36030:22;35998:64;:::i;:::-;35988:74;;35944:128;35728:351;;;;:::o;36085:85::-;36130:7;36159:5;36148:16;;36085:85;;;:::o;36176:60::-;36204:3;36225:5;36218:12;;36176:60;;;:::o;36242:158::-;36300:9;36333:61;36351:42;36360:32;36386:5;36360:32;:::i;:::-;36351:42;:::i;:::-;36333:61;:::i;:::-;36320:74;;36242:158;;;:::o;36406:147::-;36501:45;36540:5;36501:45;:::i;:::-;36496:3;36489:58;36406:147;;:::o;36559:114::-;36626:6;36660:5;36654:12;36644:22;;36559:114;;;:::o;36679:184::-;36778:11;36812:6;36807:3;36800:19;36852:4;36847:3;36843:14;36828:29;;36679:184;;;;:::o;36869:132::-;36936:4;36959:3;36951:11;;36989:4;36984:3;36980:14;36972:22;;36869:132;;;:::o;37007:108::-;37084:24;37102:5;37084:24;:::i;:::-;37079:3;37072:37;37007:108;;:::o;37121:179::-;37190:10;37211:46;37253:3;37245:6;37211:46;:::i;:::-;37289:4;37284:3;37280:14;37266:28;;37121:179;;;;:::o;37306:113::-;37376:4;37408;37403:3;37399:14;37391:22;;37306:113;;;:::o;37455:732::-;37574:3;37603:54;37651:5;37603:54;:::i;:::-;37673:86;37752:6;37747:3;37673:86;:::i;:::-;37666:93;;37783:56;37833:5;37783:56;:::i;:::-;37862:7;37893:1;37878:284;37903:6;37900:1;37897:13;37878:284;;;37979:6;37973:13;38006:63;38065:3;38050:13;38006:63;:::i;:::-;37999:70;;38092:60;38145:6;38092:60;:::i;:::-;38082:70;;37938:224;37925:1;37922;37918:9;37913:14;;37878:284;;;37882:14;38178:3;38171:10;;37579:608;;;37455:732;;;;:::o;38193:831::-;38456:4;38494:3;38483:9;38479:19;38471:27;;38508:71;38576:1;38565:9;38561:17;38552:6;38508:71;:::i;:::-;38589:80;38665:2;38654:9;38650:18;38641:6;38589:80;:::i;:::-;38716:9;38710:4;38706:20;38701:2;38690:9;38686:18;38679:48;38744:108;38847:4;38838:6;38744:108;:::i;:::-;38736:116;;38862:72;38930:2;38919:9;38915:18;38906:6;38862:72;:::i;:::-;38944:73;39012:3;39001:9;38997:19;38988:6;38944:73;:::i;:::-;38193:831;;;;;;;;:::o;39030:807::-;39279:4;39317:3;39306:9;39302:19;39294:27;;39331:71;39399:1;39388:9;39384:17;39375:6;39331:71;:::i;:::-;39412:72;39480:2;39469:9;39465:18;39456:6;39412:72;:::i;:::-;39494:80;39570:2;39559:9;39555:18;39546:6;39494:80;:::i;:::-;39584;39660:2;39649:9;39645:18;39636:6;39584:80;:::i;:::-;39674:73;39742:3;39731:9;39727:19;39718:6;39674:73;:::i;:::-;39757;39825:3;39814:9;39810:19;39801:6;39757:73;:::i;:::-;39030:807;;;;;;;;;:::o;39843:663::-;39931:6;39939;39947;39996:2;39984:9;39975:7;39971:23;39967:32;39964:119;;;40002:79;;:::i;:::-;39964:119;40122:1;40147:64;40203:7;40194:6;40183:9;40179:22;40147:64;:::i;:::-;40137:74;;40093:128;40260:2;40286:64;40342:7;40333:6;40322:9;40318:22;40286:64;:::i;:::-;40276:74;;40231:129;40399:2;40425:64;40481:7;40472:6;40461:9;40457:22;40425:64;:::i;:::-;40415:74;;40370:129;39843:663;;;;;:::o
Swarm Source
ipfs://4863a90884be13c46dfcb32187c48194a504c8eb539c963e78d5effae4df1042
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.