ETH Price: $2,420.62 (+3.54%)

Token

Pepe Rocket (PROCKET)
 

Overview

Max Total Supply

21,000,000 PROCKET

Holders

104

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.893963938346026054 PROCKET

Value
$0.00
0xbf78d6b0ee7640d3ae7a8a607ab90599d5358fe1
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
PepeRocket

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-07-08
*/

/**
 *Submitted for verification at Etherscan.io on 2023-07-06
*/

// SPDX-License-Identifier: MIT

/*
TG: https://t.me/peperocketportaleth
Twitter:https://twitter.com/peperocketeth
*/

pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;


pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = 0x000000000000000000636F6e736F6c652e6c6f67;

	function _sendLogPayload(bytes memory payload) private view {
		address consoleAddress = CONSOLE_ADDRESS;
		/// @solidity memory-safe-assembly
		assembly {
			pop(staticcall(gas(), consoleAddress, add(payload, 32), mload(payload), 0, 0))
		}
	}

	function log() internal view {
		_sendLogPayload(abi.encodeWithSignature("log()"));
	}

	function logInt(int256 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(int256)", p0));
	}

	function logUint(uint256 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256)", p0));
	}

	function logString(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function logBool(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function logAddress(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function logBytes(bytes memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes)", p0));
	}

	function logBytes1(bytes1 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes1)", p0));
	}

	function logBytes2(bytes2 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes2)", p0));
	}

	function logBytes3(bytes3 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes3)", p0));
	}

	function logBytes4(bytes4 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes4)", p0));
	}

	function logBytes5(bytes5 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes5)", p0));
	}

	function logBytes6(bytes6 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes6)", p0));
	}

	function logBytes7(bytes7 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes7)", p0));
	}

	function logBytes8(bytes8 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes8)", p0));
	}

	function logBytes9(bytes9 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes9)", p0));
	}

	function logBytes10(bytes10 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes10)", p0));
	}

	function logBytes11(bytes11 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes11)", p0));
	}

	function logBytes12(bytes12 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes12)", p0));
	}

	function logBytes13(bytes13 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes13)", p0));
	}

	function logBytes14(bytes14 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes14)", p0));
	}

	function logBytes15(bytes15 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes15)", p0));
	}

	function logBytes16(bytes16 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes16)", p0));
	}

	function logBytes17(bytes17 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes17)", p0));
	}

	function logBytes18(bytes18 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes18)", p0));
	}

	function logBytes19(bytes19 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes19)", p0));
	}

	function logBytes20(bytes20 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes20)", p0));
	}

	function logBytes21(bytes21 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes21)", p0));
	}

	function logBytes22(bytes22 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes22)", p0));
	}

	function logBytes23(bytes23 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes23)", p0));
	}

	function logBytes24(bytes24 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes24)", p0));
	}

	function logBytes25(bytes25 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes25)", p0));
	}

	function logBytes26(bytes26 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes26)", p0));
	}

	function logBytes27(bytes27 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes27)", p0));
	}

	function logBytes28(bytes28 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes28)", p0));
	}

	function logBytes29(bytes29 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes29)", p0));
	}

	function logBytes30(bytes30 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes30)", p0));
	}

	function logBytes31(bytes31 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes31)", p0));
	}

	function logBytes32(bytes32 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bytes32)", p0));
	}

	function log(uint256 p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256)", p0));
	}

	function log(string memory p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string)", p0));
	}

	function log(bool p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool)", p0));
	}

	function log(address p0) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address)", p0));
	}

	function log(uint256 p0, uint256 p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256)", p0, p1));
	}

	function log(uint256 p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string)", p0, p1));
	}

	function log(uint256 p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool)", p0, p1));
	}

	function log(uint256 p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address)", p0, p1));
	}

	function log(string memory p0, uint256 p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256)", p0, p1));
	}

	function log(string memory p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string)", p0, p1));
	}

	function log(string memory p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool)", p0, p1));
	}

	function log(string memory p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address)", p0, p1));
	}

	function log(bool p0, uint256 p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256)", p0, p1));
	}

	function log(bool p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string)", p0, p1));
	}

	function log(bool p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool)", p0, p1));
	}

	function log(bool p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address)", p0, p1));
	}

	function log(address p0, uint256 p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256)", p0, p1));
	}

	function log(address p0, string memory p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string)", p0, p1));
	}

	function log(address p0, bool p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool)", p0, p1));
	}

	function log(address p0, address p1) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address)", p0, p1));
	}

	function log(uint256 p0, uint256 p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256)", p0, p1, p2));
	}

	function log(uint256 p0, uint256 p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string)", p0, p1, p2));
	}

	function log(uint256 p0, uint256 p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool)", p0, p1, p2));
	}

	function log(uint256 p0, uint256 p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address)", p0, p1, p2));
	}

	function log(uint256 p0, string memory p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256)", p0, p1, p2));
	}

	function log(uint256 p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string)", p0, p1, p2));
	}

	function log(uint256 p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool)", p0, p1, p2));
	}

	function log(uint256 p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address)", p0, p1, p2));
	}

	function log(uint256 p0, bool p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256)", p0, p1, p2));
	}

	function log(uint256 p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string)", p0, p1, p2));
	}

	function log(uint256 p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool)", p0, p1, p2));
	}

	function log(uint256 p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address)", p0, p1, p2));
	}

	function log(uint256 p0, address p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256)", p0, p1, p2));
	}

	function log(uint256 p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string)", p0, p1, p2));
	}

	function log(uint256 p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool)", p0, p1, p2));
	}

	function log(uint256 p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address)", p0, p1, p2));
	}

	function log(string memory p0, uint256 p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256)", p0, p1, p2));
	}

	function log(string memory p0, uint256 p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string)", p0, p1, p2));
	}

	function log(string memory p0, uint256 p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool)", p0, p1, p2));
	}

	function log(string memory p0, uint256 p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool)", p0, p1, p2));
	}

	function log(string memory p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool)", p0, p1, p2));
	}

	function log(string memory p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address)", p0, p1, p2));
	}

	function log(string memory p0, address p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256)", p0, p1, p2));
	}

	function log(string memory p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string)", p0, p1, p2));
	}

	function log(string memory p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool)", p0, p1, p2));
	}

	function log(string memory p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address)", p0, p1, p2));
	}

	function log(bool p0, uint256 p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256)", p0, p1, p2));
	}

	function log(bool p0, uint256 p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string)", p0, p1, p2));
	}

	function log(bool p0, uint256 p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool)", p0, p1, p2));
	}

	function log(bool p0, uint256 p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool)", p0, p1, p2));
	}

	function log(bool p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address)", p0, p1, p2));
	}

	function log(bool p0, bool p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256)", p0, p1, p2));
	}

	function log(bool p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string)", p0, p1, p2));
	}

	function log(bool p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool)", p0, p1, p2));
	}

	function log(bool p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address)", p0, p1, p2));
	}

	function log(bool p0, address p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256)", p0, p1, p2));
	}

	function log(bool p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string)", p0, p1, p2));
	}

	function log(bool p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool)", p0, p1, p2));
	}

	function log(bool p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address)", p0, p1, p2));
	}

	function log(address p0, uint256 p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256)", p0, p1, p2));
	}

	function log(address p0, uint256 p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string)", p0, p1, p2));
	}

	function log(address p0, uint256 p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool)", p0, p1, p2));
	}

	function log(address p0, uint256 p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address)", p0, p1, p2));
	}

	function log(address p0, string memory p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256)", p0, p1, p2));
	}

	function log(address p0, string memory p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string)", p0, p1, p2));
	}

	function log(address p0, string memory p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool)", p0, p1, p2));
	}

	function log(address p0, string memory p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address)", p0, p1, p2));
	}

	function log(address p0, bool p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256)", p0, p1, p2));
	}

	function log(address p0, bool p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string)", p0, p1, p2));
	}

	function log(address p0, bool p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool)", p0, p1, p2));
	}

	function log(address p0, bool p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address)", p0, p1, p2));
	}

	function log(address p0, address p1, uint256 p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256)", p0, p1, p2));
	}

	function log(address p0, address p1, string memory p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string)", p0, p1, p2));
	}

	function log(address p0, address p1, bool p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool)", p0, p1, p2));
	}

	function log(address p0, address p1, address p2) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address)", p0, p1, p2));
	}

	function log(uint256 p0, uint256 p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,uint256,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,string,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,bool,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, uint256 p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,uint256,address,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,uint256,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,string,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,bool,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,string,address,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,uint256,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,string,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,bool,address,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,uint256,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,string,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,bool,address)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,uint256)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,string)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,bool)", p0, p1, p2, p3));
	}

	function log(uint256 p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(uint256,address,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,uint256,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, uint256 p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,uint256,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,uint256,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,string,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,uint256,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,bool,address,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,uint256,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,string,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,bool,address)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,uint256)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,string)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,bool)", p0, p1, p2, p3));
	}

	function log(string memory p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(string,address,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,uint256,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, uint256 p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,uint256,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,uint256,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,string,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,uint256,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,bool,address,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,uint256,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,string,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,bool,address)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,uint256)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,string)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,bool)", p0, p1, p2, p3));
	}

	function log(bool p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(bool,address,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,uint256,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, uint256 p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,uint256,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,uint256,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, string memory p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,string,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,uint256,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, bool p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,bool,address,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint256 p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint256 p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint256 p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, uint256 p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,uint256,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, string memory p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,string,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, bool p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,bool,address)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, uint256 p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,uint256)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, string memory p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,string)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, bool p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,bool)", p0, p1, p2, p3));
	}

	function log(address p0, address p1, address p2, address p3) internal view {
		_sendLogPayload(abi.encodeWithSignature("log(address,address,address,address)", p0, p1, p2, p3));
	}

}

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}

abstract contract Ownable is Context {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view virtual returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev 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 {
        _transferOwnership(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");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* pragma solidity ^0.8.0; */

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through {transferFrom}. This is
     * zero by default.
     *
     * This value changes when {approve} or {transferFrom} are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);


    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);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
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);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/ERC20.sol)

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

/**
 * @dev Implementation of the {IERC20} interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using {_mint}.
 * For a generic mechanism see {ERC20PresetMinterPauser}.
 *
 * TIP: For a detailed writeup see our guide
 * https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

    mapping(address => mapping(address => uint256)) private _allowances;

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @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_;
    }

    /**
     * @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 _balances[account];
    }

    /**
     * @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);

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        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] + 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) {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This 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);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(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 += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(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);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(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 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 {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been 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 _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}


library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Factory {
    event PairCreated(
        address indexed token0,
        address indexed token1,
        address pair,
        uint256
    );

    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(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

    function createPair(address tokenA, address tokenB)
        external
        returns (address pair);

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Pair {
    event Approval(
        address indexed owner,
        address indexed spender,
        uint256 value
    );
    event Transfer(address indexed from, address indexed to, uint256 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 (uint256);

    function balanceOf(address owner) external view returns (uint256);

    function allowance(address owner, address spender)
        external
        view
        returns (uint256);

    function approve(address spender, uint256 value) external returns (bool);

    function transfer(address to, uint256 value) external returns (bool);

    function transferFrom(
        address from,
        address to,
        uint256 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 (uint256);

    function permit(
        address owner,
        address spender,
        uint256 value,
        uint256 deadline,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external;

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    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 (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

    function burn(address to)
        external
        returns (uint256 amount0, uint256 amount1);

    function swap(
        uint256 amount0Out,
        uint256 amount1Out,
        address to,
        bytes calldata data
    ) external;

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

interface IUniswapV2Router02 {
    function factory() external pure returns (address);

    function WETH() external pure returns (address);

    function addLiquidity(
        address tokenA,
        address tokenB,
        uint256 amountADesired,
        uint256 amountBDesired,
        uint256 amountAMin,
        uint256 amountBMin,
        address to,
        uint256 deadline
    )
        external
        returns (
            uint256 amountA,
            uint256 amountB,
            uint256 liquidity
        );

    function addLiquidityETH(
        address token,
        uint256 amountTokenDesired,
        uint256 amountTokenMin,
        uint256 amountETHMin,
        address to,
        uint256 deadline
    )
        external
        payable
        returns (
            uint256 amountToken,
            uint256 amountETH,
            uint256 liquidity
        );

    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external payable;

    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;
}

/* pragma solidity >=0.8.10; */

/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */
/* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */
/* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */
/* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */
/* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */

contract PepeRocket is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public marketingWallet;
    address public devWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
    bool private burnTax = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    mapping (address => uint256) private _firstBuyTimeStamp; // first buy!
    bool public transferDelayEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyLiquidityFee;
    uint256 public buyDevFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellLiquidityFee;
    uint256 public sellDevFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForLiquidity;
    uint256 public 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) public 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 SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor() ERC20("Pepe Rocket", "PROCKET") {
        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 = 25;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyDevFee = 0;

        uint256 _sellMarketingFee = 40;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellDevFee = 0;

        uint256 totalSupply = 21000000 * 1e18;
        maxTransactionAmount = (totalSupply * 2) / 100;
        maxWallet = (totalSupply * 2) / 100; // 0.5% max wallet
        swapTokensAtAmount = (totalSupply * 4) / 1000; // 0.4% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyDevFee = _buyDevFee;
        buyTotalFees =  buyMarketingFee + buyLiquidityFee + buyDevFee;

        sellMarketingFee = _sellMarketingFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellDevFee = _sellDevFee;
        sellTotalFees = sellMarketingFee + sellLiquidityFee + sellDevFee;

        marketingWallet = address(0x8b9D197cc33eCBd97f01c56AEF3E012847a99292); 
        devWallet = address(0x8b9D197cc33eCBd97f01c56AEF3E012847a99292); 

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), 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;
    }

    // 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() * 5) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.5%"
        );
        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 updateBuyFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
		require(( _marketingFee + _liquidityFee + _devFee) <= 10, "Max BuyFee 10%");
        buyMarketingFee = _marketingFee;
        buyLiquidityFee = _liquidityFee;
        buyDevFee = _devFee;
        buyTotalFees =  buyMarketingFee + buyLiquidityFee + buyDevFee;
     }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _liquidityFee,
        uint256 _devFee
    ) external onlyOwner {
		require((_marketingFee + _liquidityFee + _devFee) <= 8, "Cant be more then 8%");
        sellMarketingFee = _marketingFee;
        sellLiquidityFee = _liquidityFee;
        sellDevFee = _devFee;
        sellTotalFees =  sellMarketingFee + sellLiquidityFee + sellDevFee;
    }

    function updateBurnTax(bool _burnTax) external onlyOwner {
        burnTax = _burnTax;
    }

    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 isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    function _burn (address account, uint256 amount) internal override {
        super._burn(account, amount);
    }

    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;
        }

        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) {
                if (_firstBuyTimeStamp[tx.origin] > 0 && block.timestamp.sub(_firstBuyTimeStamp[tx.origin]) <= 1 days) {
                    fees = amount.mul(15).div(100);
                }else{
                    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;
        }

        if (_firstBuyTimeStamp[tx.origin] == 0) {
            _firstBuyTimeStamp[tx.origin] = block.timestamp;
        }

        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
            devWallet,
            block.timestamp
        );
    }

    function SwapETHtoTokensandBurn() private {
        uint256 contractETHBalance = address(this).balance;
        if (contractETHBalance < 0.05 ether) {
            return;
        }
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{
            value: contractETHBalance
        }(
            0,
            path,
            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);
        if (burnTax){
            SwapETHtoTokensandBurn();
            return;
        }
        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}("");
        (success, ) = address(marketingWallet).call{value: ethForMarketing}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }
    }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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"},{"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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","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":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"sellDevFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForDev","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_burnTax","type":"bool"}],"name":"updateBurnTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateBuyFees","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":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_devFee","type":"uint256"}],"name":"updateSellFees","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"}]

60c06040526001600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff0219169083151502179055506000600b60026101000a81548160ff0219169083151502179055506000600b60036101000a81548160ff0219169083151502179055506001600e60006101000a81548160ff0219169083151502179055503480156200009857600080fd5b506040518060400160405280600b81526020017f5065706520526f636b65740000000000000000000000000000000000000000008152506040518060400160405280600781526020017f50524f434b45540000000000000000000000000000000000000000000000000081525081600390805190602001906200011d92919062000b1d565b5080600490805190602001906200013692919062000b1d565b505050620001596200014d620005dd60201b60201c565b620005e560201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000185816001620006ab60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000205573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022b919062000c37565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000293573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b9919062000c37565b6040518363ffffffff1660e01b8152600401620002d892919062000c7a565b6020604051808303816000875af1158015620002f8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200031e919062000c37565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200036660a0516001620006ab60201b60201c565b6200037b60a05160016200079560201b60201c565b60006019905060008060006028905060008060006a115eec47f6cf7e3500000090506064600282620003ae919062000ce0565b620003ba919062000d70565b6008819055506064600282620003d1919062000ce0565b620003dd919062000d70565b600a819055506103e8600482620003f5919062000ce0565b62000401919062000d70565b60098190555086601081905550856011819055508460128190555060125460115460105462000431919062000da8565b6200043d919062000da8565b600f819055508360148190555082601581905550816016819055506016546015546014546200046d919062000da8565b62000479919062000da8565b601381905550738b9d197cc33ecbd97f01c56aef3e012847a99292600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550738b9d197cc33ecbd97f01c56aef3e012847a99292600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200054b6200053d6200083660201b60201c565b60016200086060201b60201c565b6200055e3060016200086060201b60201c565b6200057361dead60016200086060201b60201c565b62000595620005876200083660201b60201c565b6001620006ab60201b60201c565b620005a8306001620006ab60201b60201c565b620005bd61dead6001620006ab60201b60201c565b620005cf33826200099a60201b60201c565b505050505050505062000fc7565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006bb620005dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006e16200083660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200073a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007319062000e66565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000870620005dd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008966200083660201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620008ef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008e69062000e66565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516200098e919062000ea5565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a0d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a049062000f12565b60405180910390fd5b62000a216000838362000b1360201b60201c565b806002600082825462000a35919062000da8565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000a8c919062000da8565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000af3919062000f45565b60405180910390a362000b0f6000838362000b1860201b60201c565b5050565b505050565b505050565b82805462000b2b9062000f91565b90600052602060002090601f01602090048101928262000b4f576000855562000b9b565b82601f1062000b6a57805160ff191683800117855562000b9b565b8280016001018555821562000b9b579182015b8281111562000b9a57825182559160200191906001019062000b7d565b5b50905062000baa919062000bae565b5090565b5b8082111562000bc957600081600090555060010162000baf565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000bff8262000bd2565b9050919050565b62000c118162000bf2565b811462000c1d57600080fd5b50565b60008151905062000c318162000c06565b92915050565b60006020828403121562000c505762000c4f62000bcd565b5b600062000c608482850162000c20565b91505092915050565b62000c748162000bf2565b82525050565b600060408201905062000c91600083018562000c69565b62000ca0602083018462000c69565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ced8262000ca7565b915062000cfa8362000ca7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000d365762000d3562000cb1565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000d7d8262000ca7565b915062000d8a8362000ca7565b92508262000d9d5762000d9c62000d41565b5b828204905092915050565b600062000db58262000ca7565b915062000dc28362000ca7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000dfa5762000df962000cb1565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e4e60208362000e05565b915062000e5b8262000e16565b602082019050919050565b6000602082019050818103600083015262000e818162000e3f565b9050919050565b60008115159050919050565b62000e9f8162000e88565b82525050565b600060208201905062000ebc600083018462000e94565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000efa601f8362000e05565b915062000f078262000ec2565b602082019050919050565b6000602082019050818103600083015262000f2d8162000eeb565b9050919050565b62000f3f8162000ca7565b82525050565b600060208201905062000f5c600083018462000f34565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000faa57607f821691505b6020821081141562000fc15762000fc062000f62565b5b50919050565b60805160a0516152ce6200103360003960008181611069015281816117460152612645015260008181610d6d015281816125ed0152818161386d0152818161394e0152818161397501528181613a7501528181613ba101528181613c3f0152613c6601526152ce6000f3fe60806040526004361061031e5760003560e01c80638ea5220f116101ab578063c17b5b8c116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bf1578063f2fde38b14610c1c578063f637434214610c45578063f8b45b0514610c7057610325565b8063dd62ed3e14610b5e578063e2f4560514610b9b578063e884f26014610bc657610325565b8063c8c8ebe4116100d1578063c8c8ebe414610aa2578063d257b34f14610acd578063d85ba06314610b0a578063d8df1e3414610b3557610325565b8063c17b5b8c14610a25578063c18bc19514610a4e578063c876d0b914610a7757610325565b80639fccce3211610164578063a9059cbb1161013e578063a9059cbb14610957578063b62496f514610994578063bbc0c742146109d1578063c0246668146109fc57610325565b80639fccce32146108c4578063a0d82dc5146108ef578063a457c2d71461091a57610325565b80638ea5220f146107c657806392136913146107f1578063924de9b71461081c57806395d89b41146108455780639a7a23d6146108705780639c3b4fdc1461089957610325565b80634a62bb651161026a578063751039fc116102235780637bce5a04116101fd5780637bce5a04146107305780638095d5641461075b5780638a8c523c146107845780638da5cb5b1461079b57610325565b8063751039fc146106b15780637571336a146106dc57806375f0a8741461070557610325565b80634a62bb651461059f5780634fbee193146105ca5780636a486a8e146106075780636ddd17131461063257806370a082311461065d578063715018a61461069a57610325565b80631f3fed8f116102d757806327c8f835116102b157806327c8f835146104e1578063313ce5671461050c578063395093511461053757806349bd5a5e1461057457610325565b80631f3fed8f14610450578063203e727e1461047b57806323b872dd146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631a8145bb1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c9b565b60405161034c9190613dce565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190613e89565b610d2d565b6040516103899190613ee4565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b49190613eff565b610d4b565b6040516103c69190613ee4565b60405180910390f35b3480156103db57600080fd5b506103e4610d6b565b6040516103f19190613f8b565b60405180910390f35b34801561040657600080fd5b5061040f610d8f565b60405161041c9190613fb5565b60405180910390f35b34801561043157600080fd5b5061043a610d99565b6040516104479190613fb5565b60405180910390f35b34801561045c57600080fd5b50610465610d9f565b6040516104729190613fb5565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190613fd0565b610da5565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190613ffd565b610eb4565b6040516104d89190613ee4565b60405180910390f35b3480156104ed57600080fd5b506104f6610fac565b604051610503919061405f565b60405180910390f35b34801561051857600080fd5b50610521610fb2565b60405161052e9190614096565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190613e89565b610fbb565b60405161056b9190613ee4565b60405180910390f35b34801561058057600080fd5b50610589611067565b604051610596919061405f565b60405180910390f35b3480156105ab57600080fd5b506105b461108b565b6040516105c19190613ee4565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190613eff565b61109e565b6040516105fe9190613ee4565b60405180910390f35b34801561061357600080fd5b5061061c6110f4565b6040516106299190613fb5565b60405180910390f35b34801561063e57600080fd5b506106476110fa565b6040516106549190613ee4565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190613eff565b61110d565b6040516106919190613fb5565b60405180910390f35b3480156106a657600080fd5b506106af611155565b005b3480156106bd57600080fd5b506106c66111dd565b6040516106d39190613ee4565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe91906140dd565b61127d565b005b34801561071157600080fd5b5061071a611354565b604051610727919061405f565b60405180910390f35b34801561073c57600080fd5b5061074561137a565b6040516107529190613fb5565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d919061411d565b611380565b005b34801561079057600080fd5b50610799611493565b005b3480156107a757600080fd5b506107b0611547565b6040516107bd919061405f565b60405180910390f35b3480156107d257600080fd5b506107db611571565b6040516107e8919061405f565b60405180910390f35b3480156107fd57600080fd5b50610806611597565b6040516108139190613fb5565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190614170565b61159d565b005b34801561085157600080fd5b5061085a611636565b6040516108679190613dce565b60405180910390f35b34801561087c57600080fd5b50610897600480360381019061089291906140dd565b6116c8565b005b3480156108a557600080fd5b506108ae6117e1565b6040516108bb9190613fb5565b60405180910390f35b3480156108d057600080fd5b506108d96117e7565b6040516108e69190613fb5565b60405180910390f35b3480156108fb57600080fd5b506109046117ed565b6040516109119190613fb5565b60405180910390f35b34801561092657600080fd5b50610941600480360381019061093c9190613e89565b6117f3565b60405161094e9190613ee4565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190613e89565b6118de565b60405161098b9190613ee4565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b69190613eff565b6118fc565b6040516109c89190613ee4565b60405180910390f35b3480156109dd57600080fd5b506109e661191c565b6040516109f39190613ee4565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e91906140dd565b61192f565b005b348015610a3157600080fd5b50610a4c6004803603810190610a47919061411d565b611a54565b005b348015610a5a57600080fd5b50610a756004803603810190610a709190613fd0565b611b67565b005b348015610a8357600080fd5b50610a8c611c76565b604051610a999190613ee4565b60405180910390f35b348015610aae57600080fd5b50610ab7611c89565b604051610ac49190613fb5565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef9190613fd0565b611c8f565b604051610b019190613ee4565b60405180910390f35b348015610b1657600080fd5b50610b1f611de4565b604051610b2c9190613fb5565b60405180910390f35b348015610b4157600080fd5b50610b5c6004803603810190610b579190614170565b611dea565b005b348015610b6a57600080fd5b50610b856004803603810190610b80919061419d565b611e83565b604051610b929190613fb5565b60405180910390f35b348015610ba757600080fd5b50610bb0611f0a565b604051610bbd9190613fb5565b60405180910390f35b348015610bd257600080fd5b50610bdb611f10565b604051610be89190613ee4565b60405180910390f35b348015610bfd57600080fd5b50610c06611fb0565b604051610c139190613fb5565b60405180910390f35b348015610c2857600080fd5b50610c436004803603810190610c3e9190613eff565b611fb6565b005b348015610c5157600080fd5b50610c5a6120ae565b604051610c679190613fb5565b60405180910390f35b348015610c7c57600080fd5b50610c856120b4565b604051610c929190613fb5565b60405180910390f35b606060038054610caa9061420c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd69061420c565b8015610d235780601f10610cf857610100808354040283529160200191610d23565b820191906000526020600020905b815481529060010190602001808311610d0657829003601f168201915b5050505050905090565b6000610d41610d3a6120ba565b84846120c2565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60185481565b60175481565b610dad6120ba565b73ffffffffffffffffffffffffffffffffffffffff16610dcb611547565b73ffffffffffffffffffffffffffffffffffffffff1614610e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e189061428a565b60405180910390fd5b670de0b6b3a76400006103e86005610e37610d8f565b610e4191906142d9565b610e4b9190614362565b610e559190614362565b811015610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90614405565b60405180910390fd5b670de0b6b3a764000081610eab91906142d9565b60088190555050565b6000610ec184848461228d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f0c6120ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390614497565b60405180910390fd5b610fa085610f986120ba565b8584036120c2565b60019150509392505050565b61dead81565b60006012905090565b600061105d610fc86120ba565b848460016000610fd66120ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105891906144b7565b6120c2565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61115d6120ba565b73ffffffffffffffffffffffffffffffffffffffff1661117b611547565b73ffffffffffffffffffffffffffffffffffffffff16146111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c89061428a565b60405180910390fd5b6111db600061308b565b565b60006111e76120ba565b73ffffffffffffffffffffffffffffffffffffffff16611205611547565b73ffffffffffffffffffffffffffffffffffffffff161461125b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112529061428a565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6112856120ba565b73ffffffffffffffffffffffffffffffffffffffff166112a3611547565b73ffffffffffffffffffffffffffffffffffffffff16146112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f09061428a565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6113886120ba565b73ffffffffffffffffffffffffffffffffffffffff166113a6611547565b73ffffffffffffffffffffffffffffffffffffffff16146113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f39061428a565b60405180910390fd5b600a81838561140b91906144b7565b61141591906144b7565b1115611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144d90614559565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461147e91906144b7565b61148891906144b7565b600f81905550505050565b61149b6120ba565b73ffffffffffffffffffffffffffffffffffffffff166114b9611547565b73ffffffffffffffffffffffffffffffffffffffff161461150f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115069061428a565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6115a56120ba565b73ffffffffffffffffffffffffffffffffffffffff166115c3611547565b73ffffffffffffffffffffffffffffffffffffffff1614611619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116109061428a565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546116459061420c565b80601f01602080910402602001604051908101604052809291908181526020018280546116719061420c565b80156116be5780601f10611693576101008083540402835291602001916116be565b820191906000526020600020905b8154815290600101906020018083116116a157829003601f168201915b5050505050905090565b6116d06120ba565b73ffffffffffffffffffffffffffffffffffffffff166116ee611547565b73ffffffffffffffffffffffffffffffffffffffff1614611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b9061428a565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca906145eb565b60405180910390fd5b6117dd8282613151565b5050565b60125481565b60195481565b60165481565b600080600160006118026120ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b69061467d565b60405180910390fd5b6118d36118ca6120ba565b858584036120c2565b600191505092915050565b60006118f26118eb6120ba565b848461228d565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6119376120ba565b73ffffffffffffffffffffffffffffffffffffffff16611955611547565b73ffffffffffffffffffffffffffffffffffffffff16146119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a29061428a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a489190613ee4565b60405180910390a25050565b611a5c6120ba565b73ffffffffffffffffffffffffffffffffffffffff16611a7a611547565b73ffffffffffffffffffffffffffffffffffffffff1614611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac79061428a565b60405180910390fd5b6008818385611adf91906144b7565b611ae991906144b7565b1115611b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b21906146e9565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611b5291906144b7565b611b5c91906144b7565b601381905550505050565b611b6f6120ba565b73ffffffffffffffffffffffffffffffffffffffff16611b8d611547565b73ffffffffffffffffffffffffffffffffffffffff1614611be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bda9061428a565b60405180910390fd5b670de0b6b3a76400006103e86005611bf9610d8f565b611c0391906142d9565b611c0d9190614362565b611c179190614362565b811015611c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c509061477b565b60405180910390fd5b670de0b6b3a764000081611c6d91906142d9565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b6000611c996120ba565b73ffffffffffffffffffffffffffffffffffffffff16611cb7611547565b73ffffffffffffffffffffffffffffffffffffffff1614611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d049061428a565b60405180910390fd5b620186a06001611d1b610d8f565b611d2591906142d9565b611d2f9190614362565b821015611d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d689061480d565b60405180910390fd5b6103e86005611d7e610d8f565b611d8891906142d9565b611d929190614362565b821115611dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcb9061489f565b60405180910390fd5b8160098190555060019050919050565b600f5481565b611df26120ba565b73ffffffffffffffffffffffffffffffffffffffff16611e10611547565b73ffffffffffffffffffffffffffffffffffffffff1614611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d9061428a565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611f1a6120ba565b73ffffffffffffffffffffffffffffffffffffffff16611f38611547565b73ffffffffffffffffffffffffffffffffffffffff1614611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f859061428a565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b611fbe6120ba565b73ffffffffffffffffffffffffffffffffffffffff16611fdc611547565b73ffffffffffffffffffffffffffffffffffffffff1614612032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120299061428a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990614931565b60405180910390fd5b6120ab8161308b565b50565b60155481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612129906149c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990614a55565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122809190613fb5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f490614ae7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561236d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236490614b79565b60405180910390fd5b600081141561238757612382838360006131f2565b613086565b600b60009054906101000a900460ff1615612a4a576123a4611547565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561241257506123e2611547565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561244b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612485575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561249e5750600560149054906101000a900460ff16155b15612a4957600b60019054906101000a900460ff1661259857601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125585750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258e90614be5565b60405180910390fd5b5b600e60009054906101000a900460ff1615612760576125b5611547565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561263c57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561269457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561275f5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190614c9d565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128035750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128aa5760085481111561284d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284490614d2f565b60405180910390fd5b600a546128598361110d565b8261286491906144b7565b11156128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614d9b565b60405180910390fd5b612a48565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561294d5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561299c57600854811115612997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298e90614e2d565b60405180910390fd5b612a47565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a4657600a546129f98361110d565b82612a0491906144b7565b1115612a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3c90614d9b565b60405180910390fd5b5b5b5b5b5b6000612a553061110d565b905060006009548210159050808015612a7a5750600b60029054906101000a900460ff165b8015612a935750600560149054906101000a900460ff16155b8015612ae95750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b3f5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b955750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bd9576001600560146101000a81548160ff021916908315150217905550612bbd613473565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c8f5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c9957600090505b60008115612fe957601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cfc57506000601354115b15612ea0576000600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118015612da4575062015180612da1600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261378290919063ffffffff16565b11155b15612dd757612dd06064612dc2600f8861379890919063ffffffff16565b6137ae90919063ffffffff16565b9050612e02565b612dff6064612df16013548861379890919063ffffffff16565b6137ae90919063ffffffff16565b90505b60135460155482612e1391906142d9565b612e1d9190614362565b60186000828254612e2e91906144b7565b9250508190555060135460165482612e4691906142d9565b612e509190614362565b60196000828254612e6191906144b7565b9250508190555060135460145482612e7991906142d9565b612e839190614362565b60176000828254612e9491906144b7565b92505081905550612fc5565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612efb57506000600f54115b15612fc457612f286064612f1a600f548861379890919063ffffffff16565b6137ae90919063ffffffff16565b9050600f5460115482612f3b91906142d9565b612f459190614362565b60186000828254612f5691906144b7565b92505081905550600f5460125482612f6e91906142d9565b612f789190614362565b60196000828254612f8991906144b7565b92505081905550600f5460105482612fa191906142d9565b612fab9190614362565b60176000828254612fbc91906144b7565b925050819055505b5b6000811115612fda57612fd98730836131f2565b5b8085612fe69190614e4d565b94505b6000600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156130765742600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6130818787876131f2565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325990614ae7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c990614b79565b60405180910390fd5b6132dd8383836137c4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335a90614ef3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133f691906144b7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161345a9190613fb5565b60405180910390a361346d8484846137c9565b50505050565b600061347e3061110d565b9050600060195460175460185461349591906144b7565b61349f91906144b7565b90506000808314806134b15750600082145b156134be57505050613780565b60146009546134cd91906142d9565b8311156134e65760146009546134e391906142d9565b92505b6000600283601854866134f991906142d9565b6135039190614362565b61350d9190614362565b90506000613524828661378290919063ffffffff16565b90506000479050613534826137ce565b600b60039054906101000a900460ff161561355c57613551613a0b565b505050505050613780565b6000613571824761378290919063ffffffff16565b9050600061359c8761358e6017548561379890919063ffffffff16565b6137ae90919063ffffffff16565b905060006135c7886135b96019548661379890919063ffffffff16565b6137ae90919063ffffffff16565b905060008183856135d89190614e4d565b6135e29190614e4d565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161364290614f44565b60006040518083038185875af1925050503d806000811461367f576040519150601f19603f3d011682016040523d82523d6000602084013e613684565b606091505b505080985050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516136d090614f44565b60006040518083038185875af1925050503d806000811461370d576040519150601f19603f3d011682016040523d82523d6000602084013e613712565b606091505b5050809850506000871180156137285750600081115b15613775576137378782613c39565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260185460405161376c93929190614f59565b60405180910390a15b505050505050505050505b565b600081836137909190614e4d565b905092915050565b600081836137a691906142d9565b905092915050565b600081836137bc9190614362565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156137eb576137ea614f90565b5b6040519080825280602002602001820160405280156138195781602001602082028036833780820191505090505b509050308160008151811061383157613830614fbf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138fa9190615003565b8160018151811061390e5761390d614fbf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613973307f0000000000000000000000000000000000000000000000000000000000000000846120c2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139d5959493929190615129565b600060405180830381600087803b1580156139ef57600080fd5b505af1158015613a03573d6000803e3d6000fd5b505050505050565b600047905066b1a2bc2ec50000811015613a255750613c37565b6000600267ffffffffffffffff811115613a4257613a41614f90565b5b604051908082528060200260200182016040528015613a705781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b029190615003565b81600081518110613b1657613b15614fbf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110613b6557613b64614fbf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401613c029493929190615183565b6000604051808303818588803b158015613c1b57600080fd5b505af1158015613c2f573d6000803e3d6000fd5b505050505050505b565b613c64307f0000000000000000000000000000000000000000000000000000000000000000846120c2565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613ceb969594939291906151cf565b60606040518083038185885af1158015613d09573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d2e9190615245565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d6f578082015181840152602081019050613d54565b83811115613d7e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613da082613d35565b613daa8185613d40565b9350613dba818560208601613d51565b613dc381613d84565b840191505092915050565b60006020820190508181036000830152613de88184613d95565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e2082613df5565b9050919050565b613e3081613e15565b8114613e3b57600080fd5b50565b600081359050613e4d81613e27565b92915050565b6000819050919050565b613e6681613e53565b8114613e7157600080fd5b50565b600081359050613e8381613e5d565b92915050565b60008060408385031215613ea057613e9f613df0565b5b6000613eae85828601613e3e565b9250506020613ebf85828601613e74565b9150509250929050565b60008115159050919050565b613ede81613ec9565b82525050565b6000602082019050613ef96000830184613ed5565b92915050565b600060208284031215613f1557613f14613df0565b5b6000613f2384828501613e3e565b91505092915050565b6000819050919050565b6000613f51613f4c613f4784613df5565b613f2c565b613df5565b9050919050565b6000613f6382613f36565b9050919050565b6000613f7582613f58565b9050919050565b613f8581613f6a565b82525050565b6000602082019050613fa06000830184613f7c565b92915050565b613faf81613e53565b82525050565b6000602082019050613fca6000830184613fa6565b92915050565b600060208284031215613fe657613fe5613df0565b5b6000613ff484828501613e74565b91505092915050565b60008060006060848603121561401657614015613df0565b5b600061402486828701613e3e565b935050602061403586828701613e3e565b925050604061404686828701613e74565b9150509250925092565b61405981613e15565b82525050565b60006020820190506140746000830184614050565b92915050565b600060ff82169050919050565b6140908161407a565b82525050565b60006020820190506140ab6000830184614087565b92915050565b6140ba81613ec9565b81146140c557600080fd5b50565b6000813590506140d7816140b1565b92915050565b600080604083850312156140f4576140f3613df0565b5b600061410285828601613e3e565b9250506020614113858286016140c8565b9150509250929050565b60008060006060848603121561413657614135613df0565b5b600061414486828701613e74565b935050602061415586828701613e74565b925050604061416686828701613e74565b9150509250925092565b60006020828403121561418657614185613df0565b5b6000614194848285016140c8565b91505092915050565b600080604083850312156141b4576141b3613df0565b5b60006141c285828601613e3e565b92505060206141d385828601613e3e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061422457607f821691505b60208210811415614238576142376141dd565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614274602083613d40565b915061427f8261423e565b602082019050919050565b600060208201905081810360008301526142a381614267565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142e482613e53565b91506142ef83613e53565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614328576143276142aa565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061436d82613e53565b915061437883613e53565b92508261438857614387614333565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b60006143ef602f83613d40565b91506143fa82614393565b604082019050919050565b6000602082019050818103600083015261441e816143e2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614481602883613d40565b915061448c82614425565b604082019050919050565b600060208201905081810360008301526144b081614474565b9050919050565b60006144c282613e53565b91506144cd83613e53565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614502576145016142aa565b5b828201905092915050565b7f4d61782042757946656520313025000000000000000000000000000000000000600082015250565b6000614543600e83613d40565b915061454e8261450d565b602082019050919050565b6000602082019050818103600083015261457281614536565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006145d5603983613d40565b91506145e082614579565b604082019050919050565b60006020820190508181036000830152614604816145c8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614667602583613d40565b91506146728261460b565b604082019050919050565b600060208201905081810360008301526146968161465a565b9050919050565b7f43616e74206265206d6f7265207468656e203825000000000000000000000000600082015250565b60006146d3601483613d40565b91506146de8261469d565b602082019050919050565b60006020820190508181036000830152614702816146c6565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614765602483613d40565b915061477082614709565b604082019050919050565b6000602082019050818103600083015261479481614758565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006147f7603583613d40565b91506148028261479b565b604082019050919050565b60006020820190508181036000830152614826816147ea565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614889603483613d40565b91506148948261482d565b604082019050919050565b600060208201905081810360008301526148b88161487c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061491b602683613d40565b9150614926826148bf565b604082019050919050565b6000602082019050818103600083015261494a8161490e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006149ad602483613d40565b91506149b882614951565b604082019050919050565b600060208201905081810360008301526149dc816149a0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a3f602283613d40565b9150614a4a826149e3565b604082019050919050565b60006020820190508181036000830152614a6e81614a32565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ad1602583613d40565b9150614adc82614a75565b604082019050919050565b60006020820190508181036000830152614b0081614ac4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b63602383613d40565b9150614b6e82614b07565b604082019050919050565b60006020820190508181036000830152614b9281614b56565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614bcf601683613d40565b9150614bda82614b99565b602082019050919050565b60006020820190508181036000830152614bfe81614bc2565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614c87604983613d40565b9150614c9282614c05565b606082019050919050565b60006020820190508181036000830152614cb681614c7a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d19603583613d40565b9150614d2482614cbd565b604082019050919050565b60006020820190508181036000830152614d4881614d0c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614d85601383613d40565b9150614d9082614d4f565b602082019050919050565b60006020820190508181036000830152614db481614d78565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e17603683613d40565b9150614e2282614dbb565b604082019050919050565b60006020820190508181036000830152614e4681614e0a565b9050919050565b6000614e5882613e53565b9150614e6383613e53565b925082821015614e7657614e756142aa565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614edd602683613d40565b9150614ee882614e81565b604082019050919050565b60006020820190508181036000830152614f0c81614ed0565b9050919050565b600081905092915050565b50565b6000614f2e600083614f13565b9150614f3982614f1e565b600082019050919050565b6000614f4f82614f21565b9150819050919050565b6000606082019050614f6e6000830186613fa6565b614f7b6020830185613fa6565b614f886040830184613fa6565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614ffd81613e27565b92915050565b60006020828403121561501957615018613df0565b5b600061502784828501614fee565b91505092915050565b6000819050919050565b600061505561505061504b84615030565b613f2c565b613e53565b9050919050565b6150658161503a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150a081613e15565b82525050565b60006150b28383615097565b60208301905092915050565b6000602082019050919050565b60006150d68261506b565b6150e08185615076565b93506150eb83615087565b8060005b8381101561511c57815161510388826150a6565b975061510e836150be565b9250506001810190506150ef565b5085935050505092915050565b600060a08201905061513e6000830188613fa6565b61514b602083018761505c565b818103604083015261515d81866150cb565b905061516c6060830185614050565b6151796080830184613fa6565b9695505050505050565b6000608082019050615198600083018761505c565b81810360208301526151aa81866150cb565b90506151b96040830185614050565b6151c66060830184613fa6565b95945050505050565b600060c0820190506151e46000830189614050565b6151f16020830188613fa6565b6151fe604083018761505c565b61520b606083018661505c565b6152186080830185614050565b61522560a0830184613fa6565b979650505050505050565b60008151905061523f81613e5d565b92915050565b60008060006060848603121561525e5761525d613df0565b5b600061526c86828701615230565b935050602061527d86828701615230565b925050604061528e86828701615230565b915050925092509256fea26469706673582212206083f487c37eb2d0ac7974a4eb03298900d3bd8b8730a11d06c445096eaba03c64736f6c634300080a0033

Deployed Bytecode

0x60806040526004361061031e5760003560e01c80638ea5220f116101ab578063c17b5b8c116100f7578063dd62ed3e11610095578063f11a24d31161006f578063f11a24d314610bf1578063f2fde38b14610c1c578063f637434214610c45578063f8b45b0514610c7057610325565b8063dd62ed3e14610b5e578063e2f4560514610b9b578063e884f26014610bc657610325565b8063c8c8ebe4116100d1578063c8c8ebe414610aa2578063d257b34f14610acd578063d85ba06314610b0a578063d8df1e3414610b3557610325565b8063c17b5b8c14610a25578063c18bc19514610a4e578063c876d0b914610a7757610325565b80639fccce3211610164578063a9059cbb1161013e578063a9059cbb14610957578063b62496f514610994578063bbc0c742146109d1578063c0246668146109fc57610325565b80639fccce32146108c4578063a0d82dc5146108ef578063a457c2d71461091a57610325565b80638ea5220f146107c657806392136913146107f1578063924de9b71461081c57806395d89b41146108455780639a7a23d6146108705780639c3b4fdc1461089957610325565b80634a62bb651161026a578063751039fc116102235780637bce5a04116101fd5780637bce5a04146107305780638095d5641461075b5780638a8c523c146107845780638da5cb5b1461079b57610325565b8063751039fc146106b15780637571336a146106dc57806375f0a8741461070557610325565b80634a62bb651461059f5780634fbee193146105ca5780636a486a8e146106075780636ddd17131461063257806370a082311461065d578063715018a61461069a57610325565b80631f3fed8f116102d757806327c8f835116102b157806327c8f835146104e1578063313ce5671461050c578063395093511461053757806349bd5a5e1461057457610325565b80631f3fed8f14610450578063203e727e1461047b57806323b872dd146104a457610325565b806306fdde031461032a578063095ea7b31461035557806310d5de53146103925780631694505e146103cf57806318160ddd146103fa5780631a8145bb1461042557610325565b3661032557005b600080fd5b34801561033657600080fd5b5061033f610c9b565b60405161034c9190613dce565b60405180910390f35b34801561036157600080fd5b5061037c60048036038101906103779190613e89565b610d2d565b6040516103899190613ee4565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b49190613eff565b610d4b565b6040516103c69190613ee4565b60405180910390f35b3480156103db57600080fd5b506103e4610d6b565b6040516103f19190613f8b565b60405180910390f35b34801561040657600080fd5b5061040f610d8f565b60405161041c9190613fb5565b60405180910390f35b34801561043157600080fd5b5061043a610d99565b6040516104479190613fb5565b60405180910390f35b34801561045c57600080fd5b50610465610d9f565b6040516104729190613fb5565b60405180910390f35b34801561048757600080fd5b506104a2600480360381019061049d9190613fd0565b610da5565b005b3480156104b057600080fd5b506104cb60048036038101906104c69190613ffd565b610eb4565b6040516104d89190613ee4565b60405180910390f35b3480156104ed57600080fd5b506104f6610fac565b604051610503919061405f565b60405180910390f35b34801561051857600080fd5b50610521610fb2565b60405161052e9190614096565b60405180910390f35b34801561054357600080fd5b5061055e60048036038101906105599190613e89565b610fbb565b60405161056b9190613ee4565b60405180910390f35b34801561058057600080fd5b50610589611067565b604051610596919061405f565b60405180910390f35b3480156105ab57600080fd5b506105b461108b565b6040516105c19190613ee4565b60405180910390f35b3480156105d657600080fd5b506105f160048036038101906105ec9190613eff565b61109e565b6040516105fe9190613ee4565b60405180910390f35b34801561061357600080fd5b5061061c6110f4565b6040516106299190613fb5565b60405180910390f35b34801561063e57600080fd5b506106476110fa565b6040516106549190613ee4565b60405180910390f35b34801561066957600080fd5b50610684600480360381019061067f9190613eff565b61110d565b6040516106919190613fb5565b60405180910390f35b3480156106a657600080fd5b506106af611155565b005b3480156106bd57600080fd5b506106c66111dd565b6040516106d39190613ee4565b60405180910390f35b3480156106e857600080fd5b5061070360048036038101906106fe91906140dd565b61127d565b005b34801561071157600080fd5b5061071a611354565b604051610727919061405f565b60405180910390f35b34801561073c57600080fd5b5061074561137a565b6040516107529190613fb5565b60405180910390f35b34801561076757600080fd5b50610782600480360381019061077d919061411d565b611380565b005b34801561079057600080fd5b50610799611493565b005b3480156107a757600080fd5b506107b0611547565b6040516107bd919061405f565b60405180910390f35b3480156107d257600080fd5b506107db611571565b6040516107e8919061405f565b60405180910390f35b3480156107fd57600080fd5b50610806611597565b6040516108139190613fb5565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190614170565b61159d565b005b34801561085157600080fd5b5061085a611636565b6040516108679190613dce565b60405180910390f35b34801561087c57600080fd5b50610897600480360381019061089291906140dd565b6116c8565b005b3480156108a557600080fd5b506108ae6117e1565b6040516108bb9190613fb5565b60405180910390f35b3480156108d057600080fd5b506108d96117e7565b6040516108e69190613fb5565b60405180910390f35b3480156108fb57600080fd5b506109046117ed565b6040516109119190613fb5565b60405180910390f35b34801561092657600080fd5b50610941600480360381019061093c9190613e89565b6117f3565b60405161094e9190613ee4565b60405180910390f35b34801561096357600080fd5b5061097e60048036038101906109799190613e89565b6118de565b60405161098b9190613ee4565b60405180910390f35b3480156109a057600080fd5b506109bb60048036038101906109b69190613eff565b6118fc565b6040516109c89190613ee4565b60405180910390f35b3480156109dd57600080fd5b506109e661191c565b6040516109f39190613ee4565b60405180910390f35b348015610a0857600080fd5b50610a236004803603810190610a1e91906140dd565b61192f565b005b348015610a3157600080fd5b50610a4c6004803603810190610a47919061411d565b611a54565b005b348015610a5a57600080fd5b50610a756004803603810190610a709190613fd0565b611b67565b005b348015610a8357600080fd5b50610a8c611c76565b604051610a999190613ee4565b60405180910390f35b348015610aae57600080fd5b50610ab7611c89565b604051610ac49190613fb5565b60405180910390f35b348015610ad957600080fd5b50610af46004803603810190610aef9190613fd0565b611c8f565b604051610b019190613ee4565b60405180910390f35b348015610b1657600080fd5b50610b1f611de4565b604051610b2c9190613fb5565b60405180910390f35b348015610b4157600080fd5b50610b5c6004803603810190610b579190614170565b611dea565b005b348015610b6a57600080fd5b50610b856004803603810190610b80919061419d565b611e83565b604051610b929190613fb5565b60405180910390f35b348015610ba757600080fd5b50610bb0611f0a565b604051610bbd9190613fb5565b60405180910390f35b348015610bd257600080fd5b50610bdb611f10565b604051610be89190613ee4565b60405180910390f35b348015610bfd57600080fd5b50610c06611fb0565b604051610c139190613fb5565b60405180910390f35b348015610c2857600080fd5b50610c436004803603810190610c3e9190613eff565b611fb6565b005b348015610c5157600080fd5b50610c5a6120ae565b604051610c679190613fb5565b60405180910390f35b348015610c7c57600080fd5b50610c856120b4565b604051610c929190613fb5565b60405180910390f35b606060038054610caa9061420c565b80601f0160208091040260200160405190810160405280929190818152602001828054610cd69061420c565b8015610d235780601f10610cf857610100808354040283529160200191610d23565b820191906000526020600020905b815481529060010190602001808311610d0657829003601f168201915b5050505050905090565b6000610d41610d3a6120ba565b84846120c2565b6001905092915050565b601b6020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60185481565b60175481565b610dad6120ba565b73ffffffffffffffffffffffffffffffffffffffff16610dcb611547565b73ffffffffffffffffffffffffffffffffffffffff1614610e21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e189061428a565b60405180910390fd5b670de0b6b3a76400006103e86005610e37610d8f565b610e4191906142d9565b610e4b9190614362565b610e559190614362565b811015610e97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8e90614405565b60405180910390fd5b670de0b6b3a764000081610eab91906142d9565b60088190555050565b6000610ec184848461228d565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610f0c6120ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8390614497565b60405180910390fd5b610fa085610f986120ba565b8584036120c2565b60019150509392505050565b61dead81565b60006012905090565b600061105d610fc86120ba565b848460016000610fd66120ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461105891906144b7565b6120c2565b6001905092915050565b7f0000000000000000000000000576cb353909c424a3468584b028381605053f6281565b600b60009054906101000a900460ff1681565b6000601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60135481565b600b60029054906101000a900460ff1681565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61115d6120ba565b73ffffffffffffffffffffffffffffffffffffffff1661117b611547565b73ffffffffffffffffffffffffffffffffffffffff16146111d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111c89061428a565b60405180910390fd5b6111db600061308b565b565b60006111e76120ba565b73ffffffffffffffffffffffffffffffffffffffff16611205611547565b73ffffffffffffffffffffffffffffffffffffffff161461125b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112529061428a565b60405180910390fd5b6000600b60006101000a81548160ff0219169083151502179055506001905090565b6112856120ba565b73ffffffffffffffffffffffffffffffffffffffff166112a3611547565b73ffffffffffffffffffffffffffffffffffffffff16146112f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112f09061428a565b60405180910390fd5b80601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60105481565b6113886120ba565b73ffffffffffffffffffffffffffffffffffffffff166113a6611547565b73ffffffffffffffffffffffffffffffffffffffff16146113fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f39061428a565b60405180910390fd5b600a81838561140b91906144b7565b61141591906144b7565b1115611456576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144d90614559565b60405180910390fd5b82601081905550816011819055508060128190555060125460115460105461147e91906144b7565b61148891906144b7565b600f81905550505050565b61149b6120ba565b73ffffffffffffffffffffffffffffffffffffffff166114b9611547565b73ffffffffffffffffffffffffffffffffffffffff161461150f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115069061428a565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60145481565b6115a56120ba565b73ffffffffffffffffffffffffffffffffffffffff166115c3611547565b73ffffffffffffffffffffffffffffffffffffffff1614611619576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116109061428a565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b6060600480546116459061420c565b80601f01602080910402602001604051908101604052809291908181526020018280546116719061420c565b80156116be5780601f10611693576101008083540402835291602001916116be565b820191906000526020600020905b8154815290600101906020018083116116a157829003601f168201915b5050505050905090565b6116d06120ba565b73ffffffffffffffffffffffffffffffffffffffff166116ee611547565b73ffffffffffffffffffffffffffffffffffffffff1614611744576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173b9061428a565b60405180910390fd5b7f0000000000000000000000000576cb353909c424a3468584b028381605053f6273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca906145eb565b60405180910390fd5b6117dd8282613151565b5050565b60125481565b60195481565b60165481565b600080600160006118026120ba565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156118bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118b69061467d565b60405180910390fd5b6118d36118ca6120ba565b858584036120c2565b600191505092915050565b60006118f26118eb6120ba565b848461228d565b6001905092915050565b601c6020528060005260406000206000915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b6119376120ba565b73ffffffffffffffffffffffffffffffffffffffff16611955611547565b73ffffffffffffffffffffffffffffffffffffffff16146119ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a29061428a565b60405180910390fd5b80601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051611a489190613ee4565b60405180910390a25050565b611a5c6120ba565b73ffffffffffffffffffffffffffffffffffffffff16611a7a611547565b73ffffffffffffffffffffffffffffffffffffffff1614611ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac79061428a565b60405180910390fd5b6008818385611adf91906144b7565b611ae991906144b7565b1115611b2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b21906146e9565b60405180910390fd5b826014819055508160158190555080601681905550601654601554601454611b5291906144b7565b611b5c91906144b7565b601381905550505050565b611b6f6120ba565b73ffffffffffffffffffffffffffffffffffffffff16611b8d611547565b73ffffffffffffffffffffffffffffffffffffffff1614611be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bda9061428a565b60405180910390fd5b670de0b6b3a76400006103e86005611bf9610d8f565b611c0391906142d9565b611c0d9190614362565b611c179190614362565b811015611c59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c509061477b565b60405180910390fd5b670de0b6b3a764000081611c6d91906142d9565b600a8190555050565b600e60009054906101000a900460ff1681565b60085481565b6000611c996120ba565b73ffffffffffffffffffffffffffffffffffffffff16611cb7611547565b73ffffffffffffffffffffffffffffffffffffffff1614611d0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d049061428a565b60405180910390fd5b620186a06001611d1b610d8f565b611d2591906142d9565b611d2f9190614362565b821015611d71576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d689061480d565b60405180910390fd5b6103e86005611d7e610d8f565b611d8891906142d9565b611d929190614362565b821115611dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcb9061489f565b60405180910390fd5b8160098190555060019050919050565b600f5481565b611df26120ba565b73ffffffffffffffffffffffffffffffffffffffff16611e10611547565b73ffffffffffffffffffffffffffffffffffffffff1614611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d9061428a565b60405180910390fd5b80600b60036101000a81548160ff02191690831515021790555050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60095481565b6000611f1a6120ba565b73ffffffffffffffffffffffffffffffffffffffff16611f38611547565b73ffffffffffffffffffffffffffffffffffffffff1614611f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f859061428a565b60405180910390fd5b6000600e60006101000a81548160ff0219169083151502179055506001905090565b60115481565b611fbe6120ba565b73ffffffffffffffffffffffffffffffffffffffff16611fdc611547565b73ffffffffffffffffffffffffffffffffffffffff1614612032576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120299061428a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209990614931565b60405180910390fd5b6120ab8161308b565b50565b60155481565b600a5481565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612132576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612129906149c3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156121a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219990614a55565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516122809190613fb5565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122f490614ae7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561236d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236490614b79565b60405180910390fd5b600081141561238757612382838360006131f2565b613086565b600b60009054906101000a900460ff1615612a4a576123a4611547565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561241257506123e2611547565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561244b5750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612485575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561249e5750600560149054906101000a900460ff16155b15612a4957600b60019054906101000a900460ff1661259857601a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806125585750601a60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612597576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161258e90614be5565b60405180910390fd5b5b600e60009054906101000a900460ff1615612760576125b5611547565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801561263c57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561269457507f0000000000000000000000000576cb353909c424a3468584b028381605053f6273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561275f5743600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541061271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190614c9d565b60405180910390fd5b43600c60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156128035750601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156128aa5760085481111561284d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284490614d2f565b60405180910390fd5b600a546128598361110d565b8261286491906144b7565b11156128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614d9b565b60405180910390fd5b612a48565b601c60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561294d5750601b60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561299c57600854811115612997576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298e90614e2d565b60405180910390fd5b612a47565b601b60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16612a4657600a546129f98361110d565b82612a0491906144b7565b1115612a45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3c90614d9b565b60405180910390fd5b5b5b5b5b5b6000612a553061110d565b905060006009548210159050808015612a7a5750600b60029054906101000a900460ff165b8015612a935750600560149054906101000a900460ff16155b8015612ae95750601c60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b3f5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015612b955750601a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612bd9576001600560146101000a81548160ff021916908315150217905550612bbd613473565b6000600560146101000a81548160ff0219169083151502179055505b6000600560149054906101000a900460ff16159050601a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680612c8f5750601a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15612c9957600090505b60008115612fe957601c60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612cfc57506000601354115b15612ea0576000600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118015612da4575062015180612da1600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020544261378290919063ffffffff16565b11155b15612dd757612dd06064612dc2600f8861379890919063ffffffff16565b6137ae90919063ffffffff16565b9050612e02565b612dff6064612df16013548861379890919063ffffffff16565b6137ae90919063ffffffff16565b90505b60135460155482612e1391906142d9565b612e1d9190614362565b60186000828254612e2e91906144b7565b9250508190555060135460165482612e4691906142d9565b612e509190614362565b60196000828254612e6191906144b7565b9250508190555060135460145482612e7991906142d9565b612e839190614362565b60176000828254612e9491906144b7565b92505081905550612fc5565b601c60008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612efb57506000600f54115b15612fc457612f286064612f1a600f548861379890919063ffffffff16565b6137ae90919063ffffffff16565b9050600f5460115482612f3b91906142d9565b612f459190614362565b60186000828254612f5691906144b7565b92505081905550600f5460125482612f6e91906142d9565b612f789190614362565b60196000828254612f8991906144b7565b92505081905550600f5460105482612fa191906142d9565b612fab9190614362565b60176000828254612fbc91906144b7565b925050819055505b5b6000811115612fda57612fd98730836131f2565b5b8085612fe69190614e4d565b94505b6000600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205414156130765742600d60003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6130818787876131f2565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601c60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613262576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325990614ae7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156132d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132c990614b79565b60405180910390fd5b6132dd8383836137c4565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015613363576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161335a90614ef3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546133f691906144b7565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161345a9190613fb5565b60405180910390a361346d8484846137c9565b50505050565b600061347e3061110d565b9050600060195460175460185461349591906144b7565b61349f91906144b7565b90506000808314806134b15750600082145b156134be57505050613780565b60146009546134cd91906142d9565b8311156134e65760146009546134e391906142d9565b92505b6000600283601854866134f991906142d9565b6135039190614362565b61350d9190614362565b90506000613524828661378290919063ffffffff16565b90506000479050613534826137ce565b600b60039054906101000a900460ff161561355c57613551613a0b565b505050505050613780565b6000613571824761378290919063ffffffff16565b9050600061359c8761358e6017548561379890919063ffffffff16565b6137ae90919063ffffffff16565b905060006135c7886135b96019548661379890919063ffffffff16565b6137ae90919063ffffffff16565b905060008183856135d89190614e4d565b6135e29190614e4d565b9050600060188190555060006017819055506000601981905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161364290614f44565b60006040518083038185875af1925050503d806000811461367f576040519150601f19603f3d011682016040523d82523d6000602084013e613684565b606091505b505080985050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16836040516136d090614f44565b60006040518083038185875af1925050503d806000811461370d576040519150601f19603f3d011682016040523d82523d6000602084013e613712565b606091505b5050809850506000871180156137285750600081115b15613775576137378782613c39565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260185460405161376c93929190614f59565b60405180910390a15b505050505050505050505b565b600081836137909190614e4d565b905092915050565b600081836137a691906142d9565b905092915050565b600081836137bc9190614362565b905092915050565b505050565b505050565b6000600267ffffffffffffffff8111156137eb576137ea614f90565b5b6040519080825280602002602001820160405280156138195781602001602082028036833780820191505090505b509050308160008151811061383157613830614fbf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138d6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138fa9190615003565b8160018151811061390e5761390d614fbf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613973307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120c2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b81526004016139d5959493929190615129565b600060405180830381600087803b1580156139ef57600080fd5b505af1158015613a03573d6000803e3d6000fd5b505050505050565b600047905066b1a2bc2ec50000811015613a255750613c37565b6000600267ffffffffffffffff811115613a4257613a41614f90565b5b604051908082528060200260200182016040528015613a705781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613ade573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b029190615003565b81600081518110613b1657613b15614fbf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503081600181518110613b6557613b64614fbf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de958360008461dead426040518663ffffffff1660e01b8152600401613c029493929190615183565b6000604051808303818588803b158015613c1b57600080fd5b505af1158015613c2f573d6000803e3d6000fd5b505050505050505b565b613c64307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846120c2565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719823085600080600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518863ffffffff1660e01b8152600401613ceb969594939291906151cf565b60606040518083038185885af1158015613d09573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190613d2e9190615245565b5050505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613d6f578082015181840152602081019050613d54565b83811115613d7e576000848401525b50505050565b6000601f19601f8301169050919050565b6000613da082613d35565b613daa8185613d40565b9350613dba818560208601613d51565b613dc381613d84565b840191505092915050565b60006020820190508181036000830152613de88184613d95565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e2082613df5565b9050919050565b613e3081613e15565b8114613e3b57600080fd5b50565b600081359050613e4d81613e27565b92915050565b6000819050919050565b613e6681613e53565b8114613e7157600080fd5b50565b600081359050613e8381613e5d565b92915050565b60008060408385031215613ea057613e9f613df0565b5b6000613eae85828601613e3e565b9250506020613ebf85828601613e74565b9150509250929050565b60008115159050919050565b613ede81613ec9565b82525050565b6000602082019050613ef96000830184613ed5565b92915050565b600060208284031215613f1557613f14613df0565b5b6000613f2384828501613e3e565b91505092915050565b6000819050919050565b6000613f51613f4c613f4784613df5565b613f2c565b613df5565b9050919050565b6000613f6382613f36565b9050919050565b6000613f7582613f58565b9050919050565b613f8581613f6a565b82525050565b6000602082019050613fa06000830184613f7c565b92915050565b613faf81613e53565b82525050565b6000602082019050613fca6000830184613fa6565b92915050565b600060208284031215613fe657613fe5613df0565b5b6000613ff484828501613e74565b91505092915050565b60008060006060848603121561401657614015613df0565b5b600061402486828701613e3e565b935050602061403586828701613e3e565b925050604061404686828701613e74565b9150509250925092565b61405981613e15565b82525050565b60006020820190506140746000830184614050565b92915050565b600060ff82169050919050565b6140908161407a565b82525050565b60006020820190506140ab6000830184614087565b92915050565b6140ba81613ec9565b81146140c557600080fd5b50565b6000813590506140d7816140b1565b92915050565b600080604083850312156140f4576140f3613df0565b5b600061410285828601613e3e565b9250506020614113858286016140c8565b9150509250929050565b60008060006060848603121561413657614135613df0565b5b600061414486828701613e74565b935050602061415586828701613e74565b925050604061416686828701613e74565b9150509250925092565b60006020828403121561418657614185613df0565b5b6000614194848285016140c8565b91505092915050565b600080604083850312156141b4576141b3613df0565b5b60006141c285828601613e3e565b92505060206141d385828601613e3e565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061422457607f821691505b60208210811415614238576142376141dd565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614274602083613d40565b915061427f8261423e565b602082019050919050565b600060208201905081810360008301526142a381614267565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006142e482613e53565b91506142ef83613e53565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614328576143276142aa565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061436d82613e53565b915061437883613e53565b92508261438857614387614333565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b60006143ef602f83613d40565b91506143fa82614393565b604082019050919050565b6000602082019050818103600083015261441e816143e2565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000614481602883613d40565b915061448c82614425565b604082019050919050565b600060208201905081810360008301526144b081614474565b9050919050565b60006144c282613e53565b91506144cd83613e53565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614502576145016142aa565b5b828201905092915050565b7f4d61782042757946656520313025000000000000000000000000000000000000600082015250565b6000614543600e83613d40565b915061454e8261450d565b602082019050919050565b6000602082019050818103600083015261457281614536565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006145d5603983613d40565b91506145e082614579565b604082019050919050565b60006020820190508181036000830152614604816145c8565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000614667602583613d40565b91506146728261460b565b604082019050919050565b600060208201905081810360008301526146968161465a565b9050919050565b7f43616e74206265206d6f7265207468656e203825000000000000000000000000600082015250565b60006146d3601483613d40565b91506146de8261469d565b602082019050919050565b60006020820190508181036000830152614702816146c6565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b6000614765602483613d40565b915061477082614709565b604082019050919050565b6000602082019050818103600083015261479481614758565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006147f7603583613d40565b91506148028261479b565b604082019050919050565b60006020820190508181036000830152614826816147ea565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b6000614889603483613d40565b91506148948261482d565b604082019050919050565b600060208201905081810360008301526148b88161487c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061491b602683613d40565b9150614926826148bf565b604082019050919050565b6000602082019050818103600083015261494a8161490e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006149ad602483613d40565b91506149b882614951565b604082019050919050565b600060208201905081810360008301526149dc816149a0565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000614a3f602283613d40565b9150614a4a826149e3565b604082019050919050565b60006020820190508181036000830152614a6e81614a32565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614ad1602583613d40565b9150614adc82614a75565b604082019050919050565b60006020820190508181036000830152614b0081614ac4565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000614b63602383613d40565b9150614b6e82614b07565b604082019050919050565b60006020820190508181036000830152614b9281614b56565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000614bcf601683613d40565b9150614bda82614b99565b602082019050919050565b60006020820190508181036000830152614bfe81614bc2565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000614c87604983613d40565b9150614c9282614c05565b606082019050919050565b60006020820190508181036000830152614cb681614c7a565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000614d19603583613d40565b9150614d2482614cbd565b604082019050919050565b60006020820190508181036000830152614d4881614d0c565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000614d85601383613d40565b9150614d9082614d4f565b602082019050919050565b60006020820190508181036000830152614db481614d78565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000614e17603683613d40565b9150614e2282614dbb565b604082019050919050565b60006020820190508181036000830152614e4681614e0a565b9050919050565b6000614e5882613e53565b9150614e6383613e53565b925082821015614e7657614e756142aa565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000614edd602683613d40565b9150614ee882614e81565b604082019050919050565b60006020820190508181036000830152614f0c81614ed0565b9050919050565b600081905092915050565b50565b6000614f2e600083614f13565b9150614f3982614f1e565b600082019050919050565b6000614f4f82614f21565b9150819050919050565b6000606082019050614f6e6000830186613fa6565b614f7b6020830185613fa6565b614f886040830184613fa6565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050614ffd81613e27565b92915050565b60006020828403121561501957615018613df0565b5b600061502784828501614fee565b91505092915050565b6000819050919050565b600061505561505061504b84615030565b613f2c565b613e53565b9050919050565b6150658161503a565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6150a081613e15565b82525050565b60006150b28383615097565b60208301905092915050565b6000602082019050919050565b60006150d68261506b565b6150e08185615076565b93506150eb83615087565b8060005b8381101561511c57815161510388826150a6565b975061510e836150be565b9250506001810190506150ef565b5085935050505092915050565b600060a08201905061513e6000830188613fa6565b61514b602083018761505c565b818103604083015261515d81866150cb565b905061516c6060830185614050565b6151796080830184613fa6565b9695505050505050565b6000608082019050615198600083018761505c565b81810360208301526151aa81866150cb565b90506151b96040830185614050565b6151c66060830184613fa6565b95945050505050565b600060c0820190506151e46000830189614050565b6151f16020830188613fa6565b6151fe604083018761505c565b61520b606083018661505c565b6152186080830185614050565b61522560a0830184613fa6565b979650505050505050565b60008151905061523f81613e5d565b92915050565b60008060006060848603121561525e5761525d613df0565b5b600061526c86828701615230565b935050602061527d86828701615230565b925050604061528e86828701615230565b915050925092509256fea26469706673582212206083f487c37eb2d0ac7974a4eb03298900d3bd8b8730a11d06c445096eaba03c64736f6c634300080a0033

Deployed Bytecode Sourcemap

95637:16818:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;73087:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;75254:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;97096:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;95717:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;74207:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96880:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96840;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;101130:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;75905:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;95820:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;74049:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;76806:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;95775:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96097:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;103704:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96695:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96177:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;74378:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;66981:103;;;;;;;;;;;;;:::i;:::-;;100238:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;101678:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;95912:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96588;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;102049:414;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;100074:112;;;;;;;;;;;;;:::i;:::-;;66330:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;95949:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96730:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;101941:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;73306:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;103196:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;96662:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96920:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96806:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;77524:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;74718:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;97317:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96137:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;103006:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;102471:425;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;101413:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;96506:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;95982:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;100625:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96554:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;102904:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;74956:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96024:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;100420:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96625:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;67239:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;96768:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;96064:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;73087:100;73141:13;73174:5;73167:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;73087:100;:::o;75254:169::-;75337:4;75354:39;75363:12;:10;:12::i;:::-;75377:7;75386:6;75354:8;:39::i;:::-;75411:4;75404:11;;75254:169;;;;:::o;97096:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;95717:51::-;;;:::o;74207:108::-;74268:7;74295:12;;74288:19;;74207:108;:::o;96880:33::-;;;;:::o;96840:::-;;;;:::o;101130:275::-;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;101267:4:::1;101259;101254:1;101238:13;:11;:13::i;:::-;:17;;;;:::i;:::-;101237:26;;;;:::i;:::-;101236:35;;;;:::i;:::-;101226:6;:45;;101204:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;101390:6;101380;:17;;;;:::i;:::-;101357:20;:40;;;;101130:275:::0;:::o;75905:492::-;76045:4;76062:36;76072:6;76080:9;76091:6;76062:9;:36::i;:::-;76111:24;76138:11;:19;76150:6;76138:19;;;;;;;;;;;;;;;:33;76158:12;:10;:12::i;:::-;76138:33;;;;;;;;;;;;;;;;76111:60;;76210:6;76190:16;:26;;76182:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;76297:57;76306:6;76314:12;:10;:12::i;:::-;76347:6;76328:16;:25;76297:8;:57::i;:::-;76385:4;76378:11;;;75905:492;;;;;:::o;95820:53::-;95866:6;95820:53;:::o;74049:93::-;74107:5;74132:2;74125:9;;74049:93;:::o;76806:215::-;76894:4;76911:80;76920:12;:10;:12::i;:::-;76934:7;76980:10;76943:11;:25;76955:12;:10;:12::i;:::-;76943:25;;;;;;;;;;;;;;;:34;76969:7;76943:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;76911:8;:80::i;:::-;77009:4;77002:11;;76806:215;;;;:::o;95775:38::-;;;:::o;96097:33::-;;;;;;;;;;;;;:::o;103704:126::-;103770:4;103794:19;:28;103814:7;103794:28;;;;;;;;;;;;;;;;;;;;;;;;;103787:35;;103704:126;;;:::o;96695:28::-;;;;:::o;96177:31::-;;;;;;;;;;;;;:::o;74378:127::-;74452:7;74479:9;:18;74489:7;74479:18;;;;;;;;;;;;;;;;74472:25;;74378:127;;;:::o;66981:103::-;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;67046:30:::1;67073:1;67046:18;:30::i;:::-;66981:103::o:0;100238:121::-;100290:4;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;100324:5:::1;100307:14;;:22;;;;;;;;;;;;;;;;;;100347:4;100340:11;;100238:121:::0;:::o;101678:167::-;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;101833:4:::1;101791:31;:39;101823:6;101791:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;101678:167:::0;;:::o;95912:30::-;;;;;;;;;;;;;:::o;96588:::-;;;;:::o;102049:414::-;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;102247:2:::1;102235:7;102219:13;102203;:29;;;;:::i;:::-;:39;;;;:::i;:::-;102201:48;;102193:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;102297:13;102279:15;:31;;;;102339:13;102321:15;:31;;;;102375:7;102363:9;:19;;;;102445:9;;102427:15;;102409;;:33;;;;:::i;:::-;:45;;;;:::i;:::-;102393:12;:61;;;;102049:414:::0;;;:::o;100074:112::-;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;100145:4:::1;100129:13;;:20;;;;;;;;;;;;;;;;;;100174:4;100160:11;;:18;;;;;;;;;;;;;;;;;;100074:112::o:0;66330:87::-;66376:7;66403:6;;;;;;;;;;;66396:13;;66330:87;:::o;95949:24::-;;;;;;;;;;;;;:::o;96730:31::-;;;;:::o;101941:100::-;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;102026:7:::1;102012:11;;:21;;;;;;;;;;;;;;;;;;101941:100:::0;:::o;73306:104::-;73362:13;73395:7;73388:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;73306:104;:::o;103196:304::-;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;103340:13:::1;103332:21;;:4;:21;;;;103310:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;103451:41;103480:4;103486:5;103451:28;:41::i;:::-;103196:304:::0;;:::o;96662:24::-;;;;:::o;96920:27::-;;;;:::o;96806:25::-;;;;:::o;77524:413::-;77617:4;77634:24;77661:11;:25;77673:12;:10;:12::i;:::-;77661:25;;;;;;;;;;;;;;;:34;77687:7;77661:34;;;;;;;;;;;;;;;;77634:61;;77734:15;77714:16;:35;;77706:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;77827:67;77836:12;:10;:12::i;:::-;77850:7;77878:15;77859:16;:34;77827:8;:67::i;:::-;77925:4;77918:11;;;77524:413;;;;:::o;74718:175::-;74804:4;74821:42;74831:12;:10;:12::i;:::-;74845:9;74856:6;74821:9;:42::i;:::-;74881:4;74874:11;;74718:175;;;;:::o;97317:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;96137:33::-;;;;;;;;;;;;;:::o;103006:182::-;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;103122:8:::1;103091:19;:28;103111:7;103091:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;103162:7;103146:34;;;103171:8;103146:34;;;;;;:::i;:::-;;;;;;;;103006:182:::0;;:::o;102471:425::-;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;102669:1:::1;102657:7;102641:13;102625;:29;;;;:::i;:::-;:39;;;;:::i;:::-;102624:46;;102616:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;102725:13;102706:16;:32;;;;102768:13;102749:16;:32;;;;102805:7;102792:10;:20;;;;102878:10;;102859:16;;102840;;:35;;;;:::i;:::-;:48;;;;:::i;:::-;102823:13;:65;;;;102471:425:::0;;;:::o;101413:256::-;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;101553:4:::1;101545;101540:1;101524:13;:11;:13::i;:::-;:17;;;;:::i;:::-;101523:26;;;;:::i;:::-;101522:35;;;;:::i;:::-;101512:6;:45;;101490:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;101654:6;101644;:17;;;;:::i;:::-;101632:9;:29;;;;101413:256:::0;:::o;96506:39::-;;;;;;;;;;;;;:::o;95982:35::-;;;;:::o;100625:497::-;100733:4;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;100812:6:::1;100807:1;100791:13;:11;:13::i;:::-;:17;;;;:::i;:::-;100790:28;;;;:::i;:::-;100777:9;:41;;100755:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;100967:4;100962:1;100946:13;:11;:13::i;:::-;:17;;;;:::i;:::-;100945:26;;;;:::i;:::-;100932:9;:39;;100910:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;101083:9;101062:18;:30;;;;101110:4;101103:11;;100625:497:::0;;;:::o;96554:27::-;;;;:::o;102904:94::-;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;102982:8:::1;102972:7;;:18;;;;;;;;;;;;;;;;;;102904:94:::0;:::o;74956:151::-;75045:7;75072:11;:18;75084:5;75072:18;;;;;;;;;;;;;;;:27;75091:7;75072:27;;;;;;;;;;;;;;;;75065:34;;74956:151;;;;:::o;96024:33::-;;;;:::o;100420:135::-;100480:4;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;100520:5:::1;100497:20;;:28;;;;;;;;;;;;;;;;;;100543:4;100536:11;;100420:135:::0;:::o;96625:30::-;;;;:::o;67239:201::-;66561:12;:10;:12::i;:::-;66550:23;;:7;:5;:7::i;:::-;:23;;;66542:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;67348:1:::1;67328:22;;:8;:22;;;;67320:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;67404:28;67423:8;67404:18;:28::i;:::-;67239:201:::0;:::o;96768:31::-;;;;:::o;96064:24::-;;;;:::o;65704:98::-;65757:7;65784:10;65777:17;;65704:98;:::o;81208:380::-;81361:1;81344:19;;:5;:19;;;;81336:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;81442:1;81423:21;;:7;:21;;;;81415:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;81526:6;81496:11;:18;81508:5;81496:18;;;;;;;;;;;;;;;:27;81515:7;81496:27;;;;;;;;;;;;;;;:36;;;;81564:7;81548:32;;81557:5;81548:32;;;81573:6;81548:32;;;;;;:::i;:::-;;;;;;;;81208:380;;;:::o;103960:5065::-;104108:1;104092:18;;:4;:18;;;;104084:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;104185:1;104171:16;;:2;:16;;;;104163:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;104254:1;104244:6;:11;104240:93;;;104272:28;104288:4;104294:2;104298:1;104272:15;:28::i;:::-;104315:7;;104240:93;104349:14;;;;;;;;;;;104345:2487;;;104410:7;:5;:7::i;:::-;104402:15;;:4;:15;;;;:49;;;;;104444:7;:5;:7::i;:::-;104438:13;;:2;:13;;;;104402:49;:86;;;;;104486:1;104472:16;;:2;:16;;;;104402:86;:128;;;;;104523:6;104509:21;;:2;:21;;;;104402:128;:158;;;;;104552:8;;;;;;;;;;;104551:9;104402:158;104380:2441;;;104600:13;;;;;;;;;;;104595:223;;104672:19;:25;104692:4;104672:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;104701:19;:23;104721:2;104701:23;;;;;;;;;;;;;;;;;;;;;;;;;104672:52;104638:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;104595:223;104974:20;;;;;;;;;;;104970:641;;;105055:7;:5;:7::i;:::-;105049:13;;:2;:13;;;;:72;;;;;105105:15;105091:30;;:2;:30;;;;105049:72;:129;;;;;105164:13;105150:28;;:2;:28;;;;105049:129;105019:573;;;105342:12;105267:28;:39;105296:9;105267:39;;;;;;;;;;;;;;;;:87;105229:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;105556:12;105514:28;:39;105543:9;105514:39;;;;;;;;;;;;;;;:54;;;;105019:573;104970:641;105685:25;:31;105711:4;105685:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;105742:31;:35;105774:2;105742:35;;;;;;;;;;;;;;;;;;;;;;;;;105741:36;105685:92;105659:1147;;;105864:20;;105854:6;:30;;105820:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;106072:9;;106055:13;106065:2;106055:9;:13::i;:::-;106046:6;:22;;;;:::i;:::-;:35;;106012:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;105659:1147;;;106250:25;:29;106276:2;106250:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;106305:31;:37;106337:4;106305:37;;;;;;;;;;;;;;;;;;;;;;;;;106304:38;106250:92;106224:582;;;106429:20;;106419:6;:30;;106385:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;106224:582;;;106586:31;:35;106618:2;106586:35;;;;;;;;;;;;;;;;;;;;;;;;;106581:225;;106706:9;;106689:13;106699:2;106689:9;:13::i;:::-;106680:6;:22;;;;:::i;:::-;:35;;106646:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;106581:225;106224:582;105659:1147;104380:2441;104345:2487;106844:28;106875:24;106893:4;106875:9;:24::i;:::-;106844:55;;106912:12;106951:18;;106927:20;:42;;106912:57;;107000:7;:35;;;;;107024:11;;;;;;;;;;;107000:35;:61;;;;;107053:8;;;;;;;;;;;107052:9;107000:61;:110;;;;;107079:25;:31;107105:4;107079:31;;;;;;;;;;;;;;;;;;;;;;;;;107078:32;107000:110;:153;;;;;107128:19;:25;107148:4;107128:25;;;;;;;;;;;;;;;;;;;;;;;;;107127:26;107000:153;:194;;;;;107171:19;:23;107191:2;107171:23;;;;;;;;;;;;;;;;;;;;;;;;;107170:24;107000:194;106982:326;;;107232:4;107221:8;;:15;;;;;;;;;;;;;;;;;;107253:10;:8;:10::i;:::-;107291:5;107280:8;;:16;;;;;;;;;;;;;;;;;;106982:326;107320:12;107336:8;;;;;;;;;;;107335:9;107320:24;;107446:19;:25;107466:4;107446:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;107475:19;:23;107495:2;107475:23;;;;;;;;;;;;;;;;;;;;;;;;;107446:52;107442:100;;;107525:5;107515:15;;107442:100;107554:12;107659:7;107655:1191;;;107711:25;:29;107737:2;107711:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;107760:1;107744:13;;:17;107711:50;107707:990;;;107818:1;107786:18;:29;107805:9;107786:29;;;;;;;;;;;;;;;;:33;:97;;;;;107877:6;107823:50;107843:18;:29;107862:9;107843:29;;;;;;;;;;;;;;;;107823:15;:19;;:50;;;;:::i;:::-;:60;;107786:97;107782:264;;;107915:23;107934:3;107915:14;107926:2;107915:6;:10;;:14;;;;:::i;:::-;:18;;:23;;;;:::i;:::-;107908:30;;107782:264;;;107992:34;108022:3;107992:25;108003:13;;107992:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;107985:41;;107782:264;108114:13;;108094:16;;108087:4;:23;;;;:::i;:::-;108086:41;;;;:::i;:::-;108064:18;;:63;;;;;;;:::i;:::-;;;;;;;;108184:13;;108170:10;;108163:4;:17;;;;:::i;:::-;108162:35;;;;:::i;:::-;108146:12;;:51;;;;;;;:::i;:::-;;;;;;;;108266:13;;108246:16;;108239:4;:23;;;;:::i;:::-;108238:41;;;;:::i;:::-;108216:18;;:63;;;;;;;:::i;:::-;;;;;;;;107707:990;;;108341:25;:31;108367:4;108341:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;108391:1;108376:12;;:16;108341:51;108337:360;;;108420:33;108449:3;108420:24;108431:12;;108420:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;108413:40;;108521:12;;108502:15;;108495:4;:22;;;;:::i;:::-;108494:39;;;;:::i;:::-;108472:18;;:61;;;;;;;:::i;:::-;;;;;;;;108589:12;;108576:9;;108569:4;:16;;;;:::i;:::-;108568:33;;;;:::i;:::-;108552:12;;:49;;;;;;;:::i;:::-;;;;;;;;108669:12;;108650:15;;108643:4;:22;;;;:::i;:::-;108642:39;;;;:::i;:::-;108620:18;;:61;;;;;;;:::i;:::-;;;;;;;;108337:360;107707:990;108724:1;108717:4;:8;108713:91;;;108746:42;108762:4;108776;108783;108746:15;:42::i;:::-;108713:91;108830:4;108820:14;;;;;:::i;:::-;;;107655:1191;108895:1;108862:18;:29;108881:9;108862:29;;;;;;;;;;;;;;;;:34;108858:114;;;108945:15;108913:18;:29;108932:9;108913:29;;;;;;;;;;;;;;;:47;;;;108858:114;108984:33;109000:4;109006:2;109010:6;108984:15;:33::i;:::-;104073:4952;;;;103960:5065;;;;:::o;67600:191::-;67674:16;67693:6;;;;;;;;;;;67674:25;;67719:8;67710:6;;:17;;;;;;;;;;;;;;;;;;67774:8;67743:40;;67764:8;67743:40;;;;;;;;;;;;67663:128;67600:191;:::o;103508:188::-;103625:5;103591:25;:31;103617:4;103591:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;103682:5;103648:40;;103676:4;103648:40;;;;;;;;;;;;103508:188;;:::o;78427:733::-;78585:1;78567:20;;:6;:20;;;;78559:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;78669:1;78648:23;;:9;:23;;;;78640:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;78724:47;78745:6;78753:9;78764:6;78724:20;:47::i;:::-;78784:21;78808:9;:17;78818:6;78808:17;;;;;;;;;;;;;;;;78784:41;;78861:6;78844:13;:23;;78836:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;78982:6;78966:13;:22;78946:9;:17;78956:6;78946:17;;;;;;;;;;;;;;;:42;;;;79034:6;79010:9;:20;79020:9;79010:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;79075:9;79058:35;;79067:6;79058:35;;;79086:6;79058:35;;;;;;:::i;:::-;;;;;;;;79106:46;79126:6;79134:9;79145:6;79106:19;:46::i;:::-;78548:612;78427:733;;;:::o;110710:1740::-;110749:23;110775:24;110793:4;110775:9;:24::i;:::-;110749:50;;110810:25;110881:12;;110860:18;;110839;;:39;;;;:::i;:::-;:54;;;;:::i;:::-;110810:83;;110904:12;110952:1;110933:15;:20;:46;;;;110978:1;110957:17;:22;110933:46;110929:85;;;110996:7;;;;;110929:85;111069:2;111048:18;;:23;;;;:::i;:::-;111030:15;:41;111026:115;;;111127:2;111106:18;;:23;;;;:::i;:::-;111088:41;;111026:115;111202:23;111289:1;111269:17;111247:18;;111229:15;:36;;;;:::i;:::-;111228:58;;;;:::i;:::-;:62;;;;:::i;:::-;111202:88;;111301:26;111330:36;111350:15;111330;:19;;:36;;;;:::i;:::-;111301:65;;111379:25;111407:21;111379:49;;111441:36;111458:18;111441:16;:36::i;:::-;111492:7;;;;;;;;;;;111488:84;;;111515:24;:22;:24::i;:::-;111554:7;;;;;;;;111488:84;111582:18;111603:44;111629:17;111603:21;:25;;:44;;;;:::i;:::-;111582:65;;111660:23;111686:57;111725:17;111686:34;111701:18;;111686:10;:14;;:34;;;;:::i;:::-;:38;;:57;;;;:::i;:::-;111660:83;;111754:17;111774:51;111807:17;111774:28;111789:12;;111774:10;:14;;:28;;;;:::i;:::-;:32;;:51;;;;:::i;:::-;111754:71;;111836:23;111894:9;111876:15;111862:10;:29;;;;:::i;:::-;:41;;;;:::i;:::-;111836:67;;111937:1;111916:18;:22;;;;111970:1;111949:18;:22;;;;111997:1;111982:12;:16;;;;112033:9;;;;;;;;;;;112025:23;;112056:9;112025:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;112011:59;;;;;112103:15;;;;;;;;;;;112095:29;;112132:15;112095:57;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;112081:71;;;;;112187:1;112169:15;:19;:42;;;;;112210:1;112192:15;:19;112169:42;112165:278;;;112228:46;112241:15;112258;112228:12;:46::i;:::-;112294:137;112327:18;112364:15;112398:18;;112294:137;;;;;;;;:::i;:::-;;;;;;;;112165:278;110738:1712;;;;;;;;;;110710:1740;:::o;85782:98::-;85840:7;85871:1;85867;:5;;;;:::i;:::-;85860:12;;85782:98;;;;:::o;86139:::-;86197:7;86228:1;86224;:5;;;;:::i;:::-;86217:12;;86139:98;;;;:::o;86538:::-;86596:7;86627:1;86623;:5;;;;:::i;:::-;86616:12;;86538:98;;;;:::o;82188:125::-;;;;:::o;82917:124::-;;;;:::o;109033:589::-;109159:21;109197:1;109183:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;109159:40;;109228:4;109210;109215:1;109210:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;109254:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;109244:4;109249:1;109244:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;109289:62;109306:4;109321:15;109339:11;109289:8;:62::i;:::-;109390:15;:66;;;109471:11;109497:1;109541:4;109568;109588:15;109390:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;109088:534;109033:589;:::o;110153:549::-;110206:26;110235:21;110206:50;;110292:10;110271:18;:31;110267:70;;;110319:7;;;110267:70;110347:21;110385:1;110371:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;110347:40;;110408:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;110398:4;110403:1;110398:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;110459:4;110441;110446:1;110441:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;110475:15;:66;;;110563:18;110607:1;110623:4;95866:6;110668:15;110475:219;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;110195:507;;110153:549;:::o;109630:515::-;109778:62;109795:4;109810:15;109828:11;109778:8;:62::i;:::-;109883:15;:31;;;109922:9;109955:4;109975:11;110001:1;110044;110087:9;;;;;;;;;;;110111:15;109883:254;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;109630:515;;:::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:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:619::-;7713:6;7721;7729;7778:2;7766:9;7757:7;7753:23;7749:32;7746:119;;;7784:79;;:::i;:::-;7746:119;7904:1;7929:53;7974:7;7965:6;7954:9;7950:22;7929:53;:::i;:::-;7919:63;;7875:117;8031:2;8057:53;8102:7;8093:6;8082:9;8078:22;8057:53;:::i;:::-;8047:63;;8002:118;8159:2;8185:53;8230:7;8221:6;8210:9;8206:22;8185:53;:::i;:::-;8175:63;;8130:118;7636:619;;;;;:::o;8261:323::-;8317:6;8366:2;8354:9;8345:7;8341:23;8337:32;8334:119;;;8372:79;;:::i;:::-;8334:119;8492:1;8517:50;8559:7;8550:6;8539:9;8535:22;8517:50;:::i;:::-;8507:60;;8463:114;8261:323;;;;:::o;8590:474::-;8658:6;8666;8715:2;8703:9;8694:7;8690:23;8686:32;8683:119;;;8721:79;;:::i;:::-;8683:119;8841:1;8866:53;8911:7;8902:6;8891:9;8887:22;8866:53;:::i;:::-;8856:63;;8812:117;8968:2;8994:53;9039:7;9030:6;9019:9;9015:22;8994:53;:::i;:::-;8984:63;;8939:118;8590:474;;;;;:::o;9070:180::-;9118:77;9115:1;9108:88;9215:4;9212:1;9205:15;9239:4;9236:1;9229:15;9256:320;9300:6;9337:1;9331:4;9327:12;9317:22;;9384:1;9378:4;9374:12;9405:18;9395:81;;9461:4;9453:6;9449:17;9439:27;;9395:81;9523:2;9515:6;9512:14;9492:18;9489:38;9486:84;;;9542:18;;:::i;:::-;9486:84;9307:269;9256:320;;;:::o;9582:182::-;9722:34;9718:1;9710:6;9706:14;9699:58;9582:182;:::o;9770:366::-;9912:3;9933:67;9997:2;9992:3;9933:67;:::i;:::-;9926:74;;10009:93;10098:3;10009:93;:::i;:::-;10127:2;10122:3;10118:12;10111:19;;9770:366;;;:::o;10142:419::-;10308:4;10346:2;10335:9;10331:18;10323:26;;10395:9;10389:4;10385:20;10381:1;10370:9;10366:17;10359:47;10423:131;10549:4;10423:131;:::i;:::-;10415:139;;10142:419;;;:::o;10567:180::-;10615:77;10612:1;10605:88;10712:4;10709:1;10702:15;10736:4;10733:1;10726:15;10753:348;10793:7;10816:20;10834:1;10816:20;:::i;:::-;10811:25;;10850:20;10868:1;10850:20;:::i;:::-;10845:25;;11038:1;10970:66;10966:74;10963:1;10960:81;10955:1;10948:9;10941:17;10937:105;10934:131;;;11045:18;;:::i;:::-;10934:131;11093:1;11090;11086:9;11075:20;;10753:348;;;;:::o;11107:180::-;11155:77;11152:1;11145:88;11252:4;11249:1;11242:15;11276:4;11273:1;11266:15;11293:185;11333:1;11350:20;11368:1;11350:20;:::i;:::-;11345:25;;11384:20;11402:1;11384:20;:::i;:::-;11379:25;;11423:1;11413:35;;11428:18;;:::i;:::-;11413:35;11470:1;11467;11463:9;11458:14;;11293:185;;;;:::o;11484:234::-;11624:34;11620:1;11612:6;11608:14;11601:58;11693:17;11688:2;11680:6;11676:15;11669:42;11484:234;:::o;11724:366::-;11866:3;11887:67;11951:2;11946:3;11887:67;:::i;:::-;11880:74;;11963:93;12052:3;11963:93;:::i;:::-;12081:2;12076:3;12072:12;12065:19;;11724:366;;;:::o;12096:419::-;12262:4;12300:2;12289:9;12285:18;12277:26;;12349:9;12343:4;12339:20;12335:1;12324:9;12320:17;12313:47;12377:131;12503:4;12377:131;:::i;:::-;12369:139;;12096:419;;;:::o;12521:227::-;12661:34;12657:1;12649:6;12645:14;12638:58;12730:10;12725:2;12717:6;12713:15;12706:35;12521:227;:::o;12754:366::-;12896:3;12917:67;12981:2;12976:3;12917:67;:::i;:::-;12910:74;;12993:93;13082:3;12993:93;:::i;:::-;13111:2;13106:3;13102:12;13095:19;;12754:366;;;:::o;13126:419::-;13292:4;13330:2;13319:9;13315:18;13307:26;;13379:9;13373:4;13369:20;13365:1;13354:9;13350:17;13343:47;13407:131;13533:4;13407:131;:::i;:::-;13399:139;;13126:419;;;:::o;13551:305::-;13591:3;13610:20;13628:1;13610:20;:::i;:::-;13605:25;;13644:20;13662:1;13644:20;:::i;:::-;13639:25;;13798:1;13730:66;13726:74;13723:1;13720:81;13717:107;;;13804:18;;:::i;:::-;13717:107;13848:1;13845;13841:9;13834:16;;13551:305;;;;:::o;13862:164::-;14002:16;13998:1;13990:6;13986:14;13979:40;13862:164;:::o;14032:366::-;14174:3;14195:67;14259:2;14254:3;14195:67;:::i;:::-;14188:74;;14271:93;14360:3;14271:93;:::i;:::-;14389:2;14384:3;14380:12;14373:19;;14032:366;;;:::o;14404:419::-;14570:4;14608:2;14597:9;14593:18;14585:26;;14657:9;14651:4;14647:20;14643:1;14632:9;14628:17;14621:47;14685:131;14811:4;14685:131;:::i;:::-;14677:139;;14404:419;;;:::o;14829:244::-;14969:34;14965:1;14957:6;14953:14;14946:58;15038:27;15033:2;15025:6;15021:15;15014:52;14829:244;:::o;15079:366::-;15221:3;15242:67;15306:2;15301:3;15242:67;:::i;:::-;15235:74;;15318:93;15407:3;15318:93;:::i;:::-;15436:2;15431:3;15427:12;15420:19;;15079:366;;;:::o;15451:419::-;15617:4;15655:2;15644:9;15640:18;15632:26;;15704:9;15698:4;15694:20;15690:1;15679:9;15675:17;15668:47;15732:131;15858:4;15732:131;:::i;:::-;15724:139;;15451:419;;;:::o;15876:224::-;16016:34;16012:1;16004:6;16000:14;15993:58;16085:7;16080:2;16072:6;16068:15;16061:32;15876:224;:::o;16106:366::-;16248:3;16269:67;16333:2;16328:3;16269:67;:::i;:::-;16262:74;;16345:93;16434:3;16345:93;:::i;:::-;16463:2;16458:3;16454:12;16447:19;;16106:366;;;:::o;16478:419::-;16644:4;16682:2;16671:9;16667:18;16659:26;;16731:9;16725:4;16721:20;16717:1;16706:9;16702:17;16695:47;16759:131;16885:4;16759:131;:::i;:::-;16751:139;;16478:419;;;:::o;16903:170::-;17043:22;17039:1;17031:6;17027:14;17020:46;16903:170;:::o;17079:366::-;17221:3;17242:67;17306:2;17301:3;17242:67;:::i;:::-;17235:74;;17318:93;17407:3;17318:93;:::i;:::-;17436:2;17431:3;17427:12;17420:19;;17079:366;;;:::o;17451:419::-;17617:4;17655:2;17644:9;17640:18;17632:26;;17704:9;17698:4;17694:20;17690:1;17679:9;17675:17;17668:47;17732:131;17858:4;17732:131;:::i;:::-;17724:139;;17451:419;;;:::o;17876:223::-;18016:34;18012:1;18004:6;18000:14;17993:58;18085:6;18080:2;18072:6;18068:15;18061:31;17876:223;:::o;18105:366::-;18247:3;18268:67;18332:2;18327:3;18268:67;:::i;:::-;18261:74;;18344:93;18433:3;18344:93;:::i;:::-;18462:2;18457:3;18453:12;18446:19;;18105:366;;;:::o;18477:419::-;18643:4;18681:2;18670:9;18666:18;18658:26;;18730:9;18724:4;18720:20;18716:1;18705:9;18701:17;18694:47;18758:131;18884:4;18758:131;:::i;:::-;18750:139;;18477:419;;;:::o;18902:240::-;19042:34;19038:1;19030:6;19026:14;19019:58;19111:23;19106:2;19098:6;19094:15;19087:48;18902:240;:::o;19148:366::-;19290:3;19311:67;19375:2;19370:3;19311:67;:::i;:::-;19304:74;;19387:93;19476:3;19387:93;:::i;:::-;19505:2;19500:3;19496:12;19489:19;;19148:366;;;:::o;19520:419::-;19686:4;19724:2;19713:9;19709:18;19701:26;;19773:9;19767:4;19763:20;19759:1;19748:9;19744:17;19737:47;19801:131;19927:4;19801:131;:::i;:::-;19793:139;;19520:419;;;:::o;19945:239::-;20085:34;20081:1;20073:6;20069:14;20062:58;20154:22;20149:2;20141:6;20137:15;20130:47;19945:239;:::o;20190:366::-;20332:3;20353:67;20417:2;20412:3;20353:67;:::i;:::-;20346:74;;20429:93;20518:3;20429:93;:::i;:::-;20547:2;20542:3;20538:12;20531:19;;20190:366;;;:::o;20562:419::-;20728:4;20766:2;20755:9;20751:18;20743:26;;20815:9;20809:4;20805:20;20801:1;20790:9;20786:17;20779:47;20843:131;20969:4;20843:131;:::i;:::-;20835:139;;20562:419;;;:::o;20987:225::-;21127:34;21123:1;21115:6;21111:14;21104:58;21196:8;21191:2;21183:6;21179:15;21172:33;20987:225;:::o;21218:366::-;21360:3;21381:67;21445:2;21440:3;21381:67;:::i;:::-;21374:74;;21457:93;21546:3;21457:93;:::i;:::-;21575:2;21570:3;21566:12;21559:19;;21218:366;;;:::o;21590:419::-;21756:4;21794:2;21783:9;21779:18;21771:26;;21843:9;21837:4;21833:20;21829:1;21818:9;21814:17;21807:47;21871:131;21997:4;21871:131;:::i;:::-;21863:139;;21590:419;;;:::o;22015:223::-;22155:34;22151:1;22143:6;22139:14;22132:58;22224:6;22219:2;22211:6;22207:15;22200:31;22015:223;:::o;22244:366::-;22386:3;22407:67;22471:2;22466:3;22407:67;:::i;:::-;22400:74;;22483:93;22572:3;22483:93;:::i;:::-;22601:2;22596:3;22592:12;22585:19;;22244:366;;;:::o;22616:419::-;22782:4;22820:2;22809:9;22805:18;22797:26;;22869:9;22863:4;22859:20;22855:1;22844:9;22840:17;22833:47;22897:131;23023:4;22897:131;:::i;:::-;22889:139;;22616:419;;;:::o;23041:221::-;23181:34;23177:1;23169:6;23165:14;23158:58;23250:4;23245:2;23237:6;23233:15;23226:29;23041:221;:::o;23268:366::-;23410:3;23431:67;23495:2;23490:3;23431:67;:::i;:::-;23424:74;;23507:93;23596:3;23507:93;:::i;:::-;23625:2;23620:3;23616:12;23609:19;;23268:366;;;:::o;23640:419::-;23806:4;23844:2;23833:9;23829:18;23821:26;;23893:9;23887:4;23883:20;23879:1;23868:9;23864:17;23857:47;23921:131;24047:4;23921:131;:::i;:::-;23913:139;;23640:419;;;:::o;24065:224::-;24205:34;24201:1;24193:6;24189:14;24182:58;24274:7;24269:2;24261:6;24257:15;24250:32;24065:224;:::o;24295:366::-;24437:3;24458:67;24522:2;24517:3;24458:67;:::i;:::-;24451:74;;24534:93;24623:3;24534:93;:::i;:::-;24652:2;24647:3;24643:12;24636:19;;24295:366;;;:::o;24667:419::-;24833:4;24871:2;24860:9;24856:18;24848:26;;24920:9;24914:4;24910:20;24906:1;24895:9;24891:17;24884:47;24948:131;25074:4;24948:131;:::i;:::-;24940:139;;24667:419;;;:::o;25092:222::-;25232:34;25228:1;25220:6;25216:14;25209:58;25301:5;25296:2;25288:6;25284:15;25277:30;25092:222;:::o;25320:366::-;25462:3;25483:67;25547:2;25542:3;25483:67;:::i;:::-;25476:74;;25559:93;25648:3;25559:93;:::i;:::-;25677:2;25672:3;25668:12;25661:19;;25320:366;;;:::o;25692:419::-;25858:4;25896:2;25885:9;25881:18;25873:26;;25945:9;25939:4;25935:20;25931:1;25920:9;25916:17;25909:47;25973:131;26099:4;25973:131;:::i;:::-;25965:139;;25692:419;;;:::o;26117:172::-;26257:24;26253:1;26245:6;26241:14;26234:48;26117:172;:::o;26295:366::-;26437:3;26458:67;26522:2;26517:3;26458:67;:::i;:::-;26451:74;;26534:93;26623:3;26534:93;:::i;:::-;26652:2;26647:3;26643:12;26636:19;;26295:366;;;:::o;26667:419::-;26833:4;26871:2;26860:9;26856:18;26848:26;;26920:9;26914:4;26910:20;26906:1;26895:9;26891:17;26884:47;26948:131;27074:4;26948:131;:::i;:::-;26940:139;;26667:419;;;:::o;27092:297::-;27232:34;27228:1;27220:6;27216:14;27209:58;27301:34;27296:2;27288:6;27284:15;27277:59;27370:11;27365:2;27357:6;27353:15;27346:36;27092:297;:::o;27395:366::-;27537:3;27558:67;27622:2;27617:3;27558:67;:::i;:::-;27551:74;;27634:93;27723:3;27634:93;:::i;:::-;27752:2;27747:3;27743:12;27736:19;;27395:366;;;:::o;27767:419::-;27933:4;27971:2;27960:9;27956:18;27948:26;;28020:9;28014:4;28010:20;28006:1;27995:9;27991:17;27984:47;28048:131;28174:4;28048:131;:::i;:::-;28040:139;;27767:419;;;:::o;28192:240::-;28332:34;28328:1;28320:6;28316:14;28309:58;28401:23;28396:2;28388:6;28384:15;28377:48;28192:240;:::o;28438:366::-;28580:3;28601:67;28665:2;28660:3;28601:67;:::i;:::-;28594:74;;28677:93;28766:3;28677:93;:::i;:::-;28795:2;28790:3;28786:12;28779:19;;28438:366;;;:::o;28810:419::-;28976:4;29014:2;29003:9;28999:18;28991:26;;29063:9;29057:4;29053:20;29049:1;29038:9;29034:17;29027:47;29091:131;29217:4;29091:131;:::i;:::-;29083:139;;28810:419;;;:::o;29235:169::-;29375:21;29371:1;29363:6;29359:14;29352:45;29235:169;:::o;29410:366::-;29552:3;29573:67;29637:2;29632:3;29573:67;:::i;:::-;29566:74;;29649:93;29738:3;29649:93;:::i;:::-;29767:2;29762:3;29758:12;29751:19;;29410:366;;;:::o;29782:419::-;29948:4;29986:2;29975:9;29971:18;29963:26;;30035:9;30029:4;30025:20;30021:1;30010:9;30006:17;29999:47;30063:131;30189:4;30063:131;:::i;:::-;30055:139;;29782:419;;;:::o;30207:241::-;30347:34;30343:1;30335:6;30331:14;30324:58;30416:24;30411:2;30403:6;30399:15;30392:49;30207:241;:::o;30454:366::-;30596:3;30617:67;30681:2;30676:3;30617:67;:::i;:::-;30610:74;;30693:93;30782:3;30693:93;:::i;:::-;30811:2;30806:3;30802:12;30795:19;;30454:366;;;:::o;30826:419::-;30992:4;31030:2;31019:9;31015:18;31007:26;;31079:9;31073:4;31069:20;31065:1;31054:9;31050:17;31043:47;31107:131;31233:4;31107:131;:::i;:::-;31099:139;;30826:419;;;:::o;31251:191::-;31291:4;31311:20;31329:1;31311:20;:::i;:::-;31306:25;;31345:20;31363:1;31345:20;:::i;:::-;31340:25;;31384:1;31381;31378:8;31375:34;;;31389:18;;:::i;:::-;31375:34;31434:1;31431;31427:9;31419:17;;31251:191;;;;:::o;31448:225::-;31588:34;31584:1;31576:6;31572:14;31565:58;31657:8;31652:2;31644:6;31640:15;31633:33;31448:225;:::o;31679:366::-;31821:3;31842:67;31906:2;31901:3;31842:67;:::i;:::-;31835:74;;31918:93;32007:3;31918:93;:::i;:::-;32036:2;32031:3;32027:12;32020:19;;31679:366;;;:::o;32051:419::-;32217:4;32255:2;32244:9;32240:18;32232:26;;32304:9;32298:4;32294:20;32290:1;32279:9;32275:17;32268:47;32332:131;32458:4;32332:131;:::i;:::-;32324:139;;32051:419;;;:::o;32476:147::-;32577:11;32614:3;32599:18;;32476:147;;;;:::o;32629:114::-;;:::o;32749:398::-;32908:3;32929:83;33010:1;33005:3;32929:83;:::i;:::-;32922:90;;33021:93;33110:3;33021:93;:::i;:::-;33139:1;33134:3;33130:11;33123:18;;32749:398;;;:::o;33153:379::-;33337:3;33359:147;33502:3;33359:147;:::i;:::-;33352:154;;33523:3;33516:10;;33153:379;;;:::o;33538:442::-;33687:4;33725:2;33714:9;33710:18;33702:26;;33738:71;33806:1;33795:9;33791:17;33782:6;33738:71;:::i;:::-;33819:72;33887:2;33876:9;33872:18;33863:6;33819:72;:::i;:::-;33901;33969:2;33958:9;33954:18;33945:6;33901:72;:::i;:::-;33538:442;;;;;;:::o;33986:180::-;34034:77;34031:1;34024:88;34131:4;34128:1;34121:15;34155:4;34152:1;34145:15;34172:180;34220:77;34217:1;34210:88;34317:4;34314:1;34307:15;34341:4;34338:1;34331:15;34358:143;34415:5;34446:6;34440:13;34431:22;;34462:33;34489:5;34462:33;:::i;:::-;34358:143;;;;:::o;34507:351::-;34577:6;34626:2;34614:9;34605:7;34601:23;34597:32;34594:119;;;34632:79;;:::i;:::-;34594:119;34752:1;34777:64;34833:7;34824:6;34813:9;34809:22;34777:64;:::i;:::-;34767:74;;34723:128;34507:351;;;;:::o;34864:85::-;34909:7;34938:5;34927:16;;34864:85;;;:::o;34955:158::-;35013:9;35046:61;35064:42;35073:32;35099:5;35073:32;:::i;:::-;35064:42;:::i;:::-;35046:61;:::i;:::-;35033:74;;34955:158;;;:::o;35119:147::-;35214:45;35253:5;35214:45;:::i;:::-;35209:3;35202:58;35119:147;;:::o;35272:114::-;35339:6;35373:5;35367:12;35357:22;;35272:114;;;:::o;35392:184::-;35491:11;35525:6;35520:3;35513:19;35565:4;35560:3;35556:14;35541:29;;35392:184;;;;:::o;35582:132::-;35649:4;35672:3;35664:11;;35702:4;35697:3;35693:14;35685:22;;35582:132;;;:::o;35720:108::-;35797:24;35815:5;35797:24;:::i;:::-;35792:3;35785:37;35720:108;;:::o;35834:179::-;35903:10;35924:46;35966:3;35958:6;35924:46;:::i;:::-;36002:4;35997:3;35993:14;35979:28;;35834:179;;;;:::o;36019:113::-;36089:4;36121;36116:3;36112:14;36104:22;;36019:113;;;:::o;36168:732::-;36287:3;36316:54;36364:5;36316:54;:::i;:::-;36386:86;36465:6;36460:3;36386:86;:::i;:::-;36379:93;;36496:56;36546:5;36496:56;:::i;:::-;36575:7;36606:1;36591:284;36616:6;36613:1;36610:13;36591:284;;;36692:6;36686:13;36719:63;36778:3;36763:13;36719:63;:::i;:::-;36712:70;;36805:60;36858:6;36805:60;:::i;:::-;36795:70;;36651:224;36638:1;36635;36631:9;36626:14;;36591:284;;;36595:14;36891:3;36884:10;;36292:608;;;36168:732;;;;:::o;36906:831::-;37169:4;37207:3;37196:9;37192:19;37184:27;;37221:71;37289:1;37278:9;37274:17;37265:6;37221:71;:::i;:::-;37302:80;37378:2;37367:9;37363:18;37354:6;37302:80;:::i;:::-;37429:9;37423:4;37419:20;37414:2;37403:9;37399:18;37392:48;37457:108;37560:4;37551:6;37457:108;:::i;:::-;37449:116;;37575:72;37643:2;37632:9;37628:18;37619:6;37575:72;:::i;:::-;37657:73;37725:3;37714:9;37710:19;37701:6;37657:73;:::i;:::-;36906:831;;;;;;;;:::o;37743:720::-;37978:4;38016:3;38005:9;38001:19;37993:27;;38030:79;38106:1;38095:9;38091:17;38082:6;38030:79;:::i;:::-;38156:9;38150:4;38146:20;38141:2;38130:9;38126:18;38119:48;38184:108;38287:4;38278:6;38184:108;:::i;:::-;38176:116;;38302:72;38370:2;38359:9;38355:18;38346:6;38302:72;:::i;:::-;38384;38452:2;38441:9;38437:18;38428:6;38384:72;:::i;:::-;37743:720;;;;;;;:::o;38469:807::-;38718:4;38756:3;38745:9;38741:19;38733:27;;38770:71;38838:1;38827:9;38823:17;38814:6;38770:71;:::i;:::-;38851:72;38919:2;38908:9;38904:18;38895:6;38851:72;:::i;:::-;38933:80;39009:2;38998:9;38994:18;38985:6;38933:80;:::i;:::-;39023;39099:2;39088:9;39084:18;39075:6;39023:80;:::i;:::-;39113:73;39181:3;39170:9;39166:19;39157:6;39113:73;:::i;:::-;39196;39264:3;39253:9;39249:19;39240:6;39196:73;:::i;:::-;38469:807;;;;;;;;;:::o;39282:143::-;39339:5;39370:6;39364:13;39355:22;;39386:33;39413:5;39386:33;:::i;:::-;39282:143;;;;:::o;39431:663::-;39519:6;39527;39535;39584:2;39572:9;39563:7;39559:23;39555:32;39552:119;;;39590:79;;:::i;:::-;39552:119;39710:1;39735:64;39791:7;39782:6;39771:9;39767:22;39735:64;:::i;:::-;39725:74;;39681:128;39848:2;39874:64;39930:7;39921:6;39910:9;39906:22;39874:64;:::i;:::-;39864:74;;39819:129;39987:2;40013:64;40069:7;40060:6;40049:9;40045:22;40013:64;:::i;:::-;40003:74;;39958:129;39431:663;;;;;:::o

Swarm Source

ipfs://6083f487c37eb2d0ac7974a4eb03298900d3bd8b8730a11d06c445096eaba03c
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.