Token

Overview CRC1155

Total Supply:
0 N/A

Holders:
112 addresses

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
NoBuNFT

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-08-18
*/

// File: hardhat/console.sol


pragma solidity >= 0.4.22 <0.9.0;

library console {
	address constant CONSOLE_ADDRESS = address(0x000000000000000000636F6e736F6c652e6c6f67);

	function _sendLogPayload(bytes memory payload) private view {
		uint256 payloadLength = payload.length;
		address consoleAddress = CONSOLE_ADDRESS;
		assembly {
			let payloadStart := add(payload, 32)
			let r := staticcall(gas(), consoleAddress, payloadStart, payloadLength, 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));
	}

}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

// File: @openzeppelin/contracts/access/Ownable.sol


// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        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);
    }
}

// File: @openzeppelin/contracts/utils/Address.sol


// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)

pragma solidity ^0.8.1;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     *
     * [IMPORTANT]
     * ====
     * You shouldn't rely on `isContract` to protect against flash loan attacks!
     *
     * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets
     * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract
     * constructor.
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize/address.code.length, which returns 0
        // for contracts in construction, since the code is only stored at the end
        // of the constructor execution.

        return account.code.length > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        (bool success, ) = recipient.call{value: amount}("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain `call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        (bool success, bytes memory returndata) = target.call{value: value}(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        (bool success, bytes memory returndata) = target.staticcall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        (bool success, bytes memory returndata) = target.delegatecall(data);
        return verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
     * revert reason using the provided one.
     *
     * _Available since v4.3._
     */
    function verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) internal pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly
                /// @solidity memory-safe-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

// File: @openzeppelin/contracts/utils/introspection/IERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface of the ERC165 standard, as defined in the
 * https://eips.ethereum.org/EIPS/eip-165[EIP].
 *
 * Implementers can declare support of contract interfaces, which can then be
 * queried by others ({ERC165Checker}).
 *
 * For an implementation, see {ERC165}.
 */
interface IERC165 {
    /**
     * @dev Returns true if this contract implements the interface defined by
     * `interfaceId`. See the corresponding
     * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
     * to learn more about how these ids are created.
     *
     * This function call must use less than 30 000 gas.
     */
    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

// File: @openzeppelin/contracts/utils/introspection/ERC165.sol


// OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol)

pragma solidity ^0.8.0;


/**
 * @dev Implementation of the {IERC165} interface.
 *
 * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
 * for the additional interface id that will be supported. For example:
 *
 * ```solidity
 * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
 *     return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
 * }
 * ```
 *
 * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
 */
abstract contract ERC165 is IERC165 {
    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
        return interfaceId == type(IERC165).interfaceId;
    }
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol)

pragma solidity ^0.8.0;


/**
 * @dev _Available since v3.1._
 */
interface IERC1155Receiver is IERC165 {
    /**
     * @dev Handles the receipt of a single ERC1155 token type. This function is
     * called at the end of a `safeTransferFrom` after the balance has been updated.
     *
     * NOTE: To accept the transfer, this must return
     * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))`
     * (i.e. 0xf23a6e61, or its own function selector).
     *
     * @param operator The address which initiated the transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param id The ID of the token being transferred
     * @param value The amount of tokens being transferred
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed
     */
    function onERC1155Received(
        address operator,
        address from,
        uint256 id,
        uint256 value,
        bytes calldata data
    ) external returns (bytes4);

    /**
     * @dev Handles the receipt of a multiple ERC1155 token types. This function
     * is called at the end of a `safeBatchTransferFrom` after the balances have
     * been updated.
     *
     * NOTE: To accept the transfer(s), this must return
     * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))`
     * (i.e. 0xbc197c81, or its own function selector).
     *
     * @param operator The address which initiated the batch transfer (i.e. msg.sender)
     * @param from The address which previously owned the token
     * @param ids An array containing ids of each token being transferred (order and length must match values array)
     * @param values An array containing amounts of each token being transferred (order and length must match ids array)
     * @param data Additional data with no specified format
     * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed
     */
    function onERC1155BatchReceived(
        address operator,
        address from,
        uint256[] calldata ids,
        uint256[] calldata values,
        bytes calldata data
    ) external returns (bytes4);
}

// File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol)

pragma solidity ^0.8.0;


/**
 * @dev Required interface of an ERC1155 compliant contract, as defined in the
 * https://eips.ethereum.org/EIPS/eip-1155[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155 is IERC165 {
    /**
     * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`.
     */
    event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value);

    /**
     * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all
     * transfers.
     */
    event TransferBatch(
        address indexed operator,
        address indexed from,
        address indexed to,
        uint256[] ids,
        uint256[] values
    );

    /**
     * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to
     * `approved`.
     */
    event ApprovalForAll(address indexed account, address indexed operator, bool approved);

    /**
     * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI.
     *
     * If an {URI} event was emitted for `id`, the standard
     * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value
     * returned by {IERC1155MetadataURI-uri}.
     */
    event URI(string value, uint256 indexed id);

    /**
     * @dev Returns the amount of tokens of token type `id` owned by `account`.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) external view returns (uint256);

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids)
        external
        view
        returns (uint256[] memory);

    /**
     * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`,
     *
     * Emits an {ApprovalForAll} event.
     *
     * Requirements:
     *
     * - `operator` cannot be the caller.
     */
    function setApprovalForAll(address operator, bool approved) external;

    /**
     * @dev Returns true if `operator` is approved to transfer ``account``'s tokens.
     *
     * See {setApprovalForAll}.
     */
    function isApprovedForAll(address account, address operator) external view returns (bool);

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes calldata data
    ) external;

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] calldata ids,
        uint256[] calldata amounts,
        bytes calldata data
    ) external;
}

// File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol)

pragma solidity ^0.8.0;


/**
 * @dev Interface of the optional ERC1155MetadataExtension interface, as defined
 * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP].
 *
 * _Available since v3.1._
 */
interface IERC1155MetadataURI is IERC1155 {
    /**
     * @dev Returns the URI for token type `id`.
     *
     * If the `\{id\}` substring is present in the URI, it must be replaced by
     * clients with the actual token type ID.
     */
    function uri(uint256 id) external view returns (string memory);
}

// File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol


// OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol)

pragma solidity ^0.8.0;







/**
 * @dev Implementation of the basic standard multi-token.
 * See https://eips.ethereum.org/EIPS/eip-1155
 * Originally based on code by Enjin: https://github.com/enjin/erc-1155
 *
 * _Available since v3.1._
 */
contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI {
    using Address for address;

    // Mapping from token ID to account balances
    mapping(uint256 => mapping(address => uint256)) private _balances;

    // Mapping from account to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json
    string private _uri;

    /**
     * @dev See {_setURI}.
     */
    constructor(string memory uri_) {
        _setURI(uri_);
    }

    /**
     * @dev See {IERC165-supportsInterface}.
     */
    function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) {
        return
            interfaceId == type(IERC1155).interfaceId ||
            interfaceId == type(IERC1155MetadataURI).interfaceId ||
            super.supportsInterface(interfaceId);
    }

    /**
     * @dev See {IERC1155MetadataURI-uri}.
     *
     * This implementation returns the same URI for *all* token types. It relies
     * on the token type ID substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * Clients calling this function must replace the `\{id\}` substring with the
     * actual token type ID.
     */
    function uri(uint256) public view virtual override returns (string memory) {
        return _uri;
    }

    /**
     * @dev See {IERC1155-balanceOf}.
     *
     * Requirements:
     *
     * - `account` cannot be the zero address.
     */
    function balanceOf(address account, uint256 id) public view virtual override returns (uint256) {
        require(account != address(0), "ERC1155: address zero is not a valid owner");
        return _balances[id][account];
    }

    /**
     * @dev See {IERC1155-balanceOfBatch}.
     *
     * Requirements:
     *
     * - `accounts` and `ids` must have the same length.
     */
    function balanceOfBatch(address[] memory accounts, uint256[] memory ids)
        public
        view
        virtual
        override
        returns (uint256[] memory)
    {
        require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch");

        uint256[] memory batchBalances = new uint256[](accounts.length);

        for (uint256 i = 0; i < accounts.length; ++i) {
            batchBalances[i] = balanceOf(accounts[i], ids[i]);
        }

        return batchBalances;
    }

    /**
     * @dev See {IERC1155-setApprovalForAll}.
     */
    function setApprovalForAll(address operator, bool approved) public virtual override {
        _setApprovalForAll(_msgSender(), operator, approved);
    }

    /**
     * @dev See {IERC1155-isApprovedForAll}.
     */
    function isApprovedForAll(address account, address operator) public view virtual override returns (bool) {
        return _operatorApprovals[account][operator];
    }

    /**
     * @dev See {IERC1155-safeTransferFrom}.
     */
    function safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeTransferFrom(from, to, id, amount, data);
    }

    /**
     * @dev See {IERC1155-safeBatchTransferFrom}.
     */
    function safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) public virtual override {
        require(
            from == _msgSender() || isApprovedForAll(from, _msgSender()),
            "ERC1155: caller is not token owner nor approved"
        );
        _safeBatchTransferFrom(from, to, ids, amounts, data);
    }

    /**
     * @dev Transfers `amount` tokens of token type `id` from `from` to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - `from` must have a balance of tokens of type `id` of at least `amount`.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _safeTransferFrom(
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }
        _balances[id][to] += amount;

        emit TransferSingle(operator, from, to, id, amount);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _safeBatchTransferFrom(
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");
        require(to != address(0), "ERC1155: transfer to the zero address");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; ++i) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: insufficient balance for transfer");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
            _balances[id][to] += amount;
        }

        emit TransferBatch(operator, from, to, ids, amounts);

        _afterTokenTransfer(operator, from, to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data);
    }

    /**
     * @dev Sets a new URI for all token types, by relying on the token type ID
     * substitution mechanism
     * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP].
     *
     * By this mechanism, any occurrence of the `\{id\}` substring in either the
     * URI or any of the amounts in the JSON file at said URI will be replaced by
     * clients with the token type ID.
     *
     * For example, the `https://token-cdn-domain/\{id\}.json` URI would be
     * interpreted by clients as
     * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json`
     * for token type ID 0x4cce0.
     *
     * See {uri}.
     *
     * Because these URIs cannot be meaningfully represented by the {URI} event,
     * this function emits no events.
     */
    function _setURI(string memory newuri) internal virtual {
        _uri = newuri;
    }

    /**
     * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`.
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `to` cannot be the zero address.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the
     * acceptance magic value.
     */
    function _mint(
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        _balances[id][to] += amount;
        emit TransferSingle(operator, address(0), to, id, amount);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data);
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the
     * acceptance magic value.
     */
    function _mintBatch(
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {
        require(to != address(0), "ERC1155: mint to the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, address(0), to, ids, amounts, data);

        for (uint256 i = 0; i < ids.length; i++) {
            _balances[ids[i]][to] += amounts[i];
        }

        emit TransferBatch(operator, address(0), to, ids, amounts);

        _afterTokenTransfer(operator, address(0), to, ids, amounts, data);

        _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data);
    }

    /**
     * @dev Destroys `amount` tokens of token type `id` from `from`
     *
     * Emits a {TransferSingle} event.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `from` must have at least `amount` tokens of token type `id`.
     */
    function _burn(
        address from,
        uint256 id,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");

        address operator = _msgSender();
        uint256[] memory ids = _asSingletonArray(id);
        uint256[] memory amounts = _asSingletonArray(amount);

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        uint256 fromBalance = _balances[id][from];
        require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
        unchecked {
            _balances[id][from] = fromBalance - amount;
        }

        emit TransferSingle(operator, from, address(0), id, amount);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}.
     *
     * Emits a {TransferBatch} event.
     *
     * Requirements:
     *
     * - `ids` and `amounts` must have the same length.
     */
    function _burnBatch(
        address from,
        uint256[] memory ids,
        uint256[] memory amounts
    ) internal virtual {
        require(from != address(0), "ERC1155: burn from the zero address");
        require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch");

        address operator = _msgSender();

        _beforeTokenTransfer(operator, from, address(0), ids, amounts, "");

        for (uint256 i = 0; i < ids.length; i++) {
            uint256 id = ids[i];
            uint256 amount = amounts[i];

            uint256 fromBalance = _balances[id][from];
            require(fromBalance >= amount, "ERC1155: burn amount exceeds balance");
            unchecked {
                _balances[id][from] = fromBalance - amount;
            }
        }

        emit TransferBatch(operator, from, address(0), ids, amounts);

        _afterTokenTransfer(operator, from, address(0), ids, amounts, "");
    }

    /**
     * @dev Approve `operator` to operate on all of `owner` tokens
     *
     * Emits an {ApprovalForAll} event.
     */
    function _setApprovalForAll(
        address owner,
        address operator,
        bool approved
    ) internal virtual {
        require(owner != operator, "ERC1155: setting approval status for self");
        _operatorApprovals[owner][operator] = approved;
        emit ApprovalForAll(owner, operator, approved);
    }

    /**
     * @dev Hook that is called before any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `ids` and `amounts` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    /**
     * @dev Hook that is called after any token transfer. This includes minting
     * and burning, as well as batched variants.
     *
     * The same hook is called on both single and batched variants. For single
     * transfers, the length of the `id` and `amount` arrays will be 1.
     *
     * Calling conditions (for each `id` and `amount` pair):
     *
     * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * of token type `id` will be  transferred to `to`.
     * - When `from` is zero, `amount` tokens of token type `id` will be minted
     * for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens of token type `id`
     * will be burned.
     * - `from` and `to` are never both zero.
     * - `ids` and `amounts` have the same, non-zero length.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) internal virtual {}

    function _doSafeTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256 id,
        uint256 amount,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) {
                if (response != IERC1155Receiver.onERC1155Received.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _doSafeBatchTransferAcceptanceCheck(
        address operator,
        address from,
        address to,
        uint256[] memory ids,
        uint256[] memory amounts,
        bytes memory data
    ) private {
        if (to.isContract()) {
            try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns (
                bytes4 response
            ) {
                if (response != IERC1155Receiver.onERC1155BatchReceived.selector) {
                    revert("ERC1155: ERC1155Receiver rejected tokens");
                }
            } catch Error(string memory reason) {
                revert(reason);
            } catch {
                revert("ERC1155: transfer to non ERC1155Receiver implementer");
            }
        }
    }

    function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) {
        uint256[] memory array = new uint256[](1);
        array[0] = element;

        return array;
    }
}

// File: contracts/3_Ballot.sol


pragma solidity ^0.8.9;




contract NoBuNFT is ERC1155, Ownable {
  
  uint256 public mintRate = 99 ether;
  uint256[] public minted = [0, 0, 0, 0];
  uint256[] public supplies = [250, 500, 875, 1125];
  uint256[] public tokenIds;
  uint256 constant public MAX_SUPPLY = 2750;
  uint256[MAX_SUPPLY] internal availableIds;
  uint256 public totalMinted;

  address public teamWallet = 0x2713Ebec92C27E52d953b5d5911364b0815dbe05;

  uint256 public PUBLICSALE = 1660827600 ; // Aug 18 2022 9 AM est

  uint256 public ArtistFee = 100; // 10%
  address public ArtistWallet = 0x40A2D2CFd09A6A743a26B808dCbAc8E0a3C183ac;
  address public creatorWallet = 0x89C3e96498efBf91633Eb2E4D36002f61eD805B8;
  uint256 public creatorFee = 200; // 20%
  address public LpWallet = 0x2B48Ff95E577b4dDdd0bFe9473C945D574e4e4E7;
  uint256 public LpFee = 550; // 55%
  uint256 public marketingFee =50; // 5%
  address public marketingWallet = 0xa2Be3029E6168540FC48017F43ec6691faa30E2f;

  uint256 constant SCALE = 1000;

  constructor() ERC1155("") {}

  struct TokenInfo{
    uint id;
    uint count;
    uint max;
  }

  function setURI(string memory newuri) public onlyOwner {
     _setURI(newuri);
  }

  function _getNewId(uint _totalMinted) internal returns(uint256 value) {
    uint256 remaining = MAX_SUPPLY - _totalMinted;
    uint256 rand = uint256(keccak256(abi.encodePacked(msg.sender, block.difficulty, block.timestamp, remaining))) % remaining;
    value = 0;
    // if array value exists, use, otherwise, use generated random value
    if (availableIds[rand] != 0)
      value = availableIds[rand];
    else
      value = rand;
    // store remaining - 1 in used ID to create mapping
    if (availableIds[remaining - 1] == 0)
      availableIds[rand] = remaining - 1;
    else
      availableIds[rand] = availableIds[remaining - 1];
    uint256 i = 1;
    while(value >= supplies[i]) {
      value -= supplies[i];
      i ++;
    }
    return i;
  } 

  function mint(uint256 amount) public payable {
    require(msg.value >= (amount * mintRate), "Insufficient Fund");
    require(totalMinted + amount <= MAX_SUPPLY, "Limit exceed");
    for (uint i = 0; i < amount; i++ ) {
      uint256 id = _getNewId(totalMinted+i);
      _mint(msg.sender, id, 1, "");
    }
    totalMinted += amount;
  }

  function burn(
      address from,
      uint256 id,
      uint256 amount
  ) public onlyOwner {
      _burn(from, id, amount);
  }
    
  function setMintrate(uint256 _newMintrate) public onlyOwner {
      mintRate = _newMintrate;
  }

  function walletOfOwner(address from) public view returns (TokenInfo[] memory){
    uint256 i = 0;
    uint256 count = 0;
    while (i < 4){
      if(balanceOf(from, i) > 0) count++;
      i++;
    }

    TokenInfo[] memory tokenIDs = new TokenInfo[](count);
    uint256 balance;
    uint256 tokenIdx = 0;
    for (i = 0; i < 4; i++) {
      balance = balanceOf(from, i);
      if (balance > 0) {
        tokenIDs[tokenIdx] = TokenInfo(i, balance, supplies[i]);
        tokenIdx++;
      }
    }
    
    return tokenIDs;
  }

  function withdraw() external {
    uint256 balance = address(this).balance;
    uint256 artist = balance * ArtistFee / SCALE;
    uint256 creator = balance * creatorFee / SCALE;
    uint256 lp = balance * LpFee / SCALE;
    uint256 marketing = balance * marketingFee / SCALE;
    
    (bool sent,) = payable(ArtistWallet).call{value: artist}("");
    require(sent, "Sending eth failed");
    (sent, ) = payable(creatorWallet).call{value: creator}("");
    require(sent, "Sending eth failed");
    (sent, ) = payable(LpWallet).call{value: lp}("");
    require(sent, "Sending eth failed");
    (sent, ) = payable(marketingWallet).call{value: marketing}("");
    require(sent, "Sending eth failed");
    (sent, ) = payable(teamWallet).call{value: address(this).balance}("");
    require(sent, "Sending eth failed");
  }

  function setTeamWallet(address account) external onlyOwner {
    teamWallet = account;
  }

  function airdropNFTs(
    address[] memory _holders,
    uint256[] memory _counts
  ) external onlyOwner {
    require(_holders.length == _counts.length, "Input Data error");
    for (uint256 i = 0; i < _holders.length; i++) {
      _mint(_holders[i], 0, _counts[i], "");
      totalMinted += _counts[i];
    }
  }

}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","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":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"inputs":[],"name":"ArtistFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ArtistWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LpFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"LpWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PUBLICSALE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_holders","type":"address[]"},{"internalType":"uint256[]","name":"_counts","type":"uint256[]"}],"name":"airdropNFTs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"creatorFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"creatorWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMintrate","type":"uint256"}],"name":"setMintrate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"supplies","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"}],"name":"walletOfOwner","outputs":[{"components":[{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256","name":"max","type":"uint256"}],"internalType":"struct NoBuNFT.TokenInfo[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405268055de6a779bbac00006004556040518060800160405280600060ff168152602001600060ff168152602001600060ff168152602001600060ff16815250600590600462000054929190620003b0565b50604051806080016040528060fa61ffff1681526020016101f461ffff16815260200161036b61ffff16815260200161046561ffff1681525060069060046200009f92919062000407565b50732713ebec92c27e52d953b5d5911364b0815dbe05610ac760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506362fe37d0610ac8556064610ac9557340a2d2cfd09a6a743a26b808dcbac8e0a3c183ac610aca60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507389c3e96498efbf91633eb2e4d36002f61ed805b8610acb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060c8610acc55732b48ff95e577b4dddd0bfe9473c945d574e4e4e7610acd60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610226610ace556032610acf5573a2be3029e6168540fc48017f43ec6691faa30e2f610ad060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200027d57600080fd5b50604051806020016040528060008152506200029f81620002c660201b60201c565b50620002c0620002b4620002e260201b60201c565b620002ea60201b60201c565b62000574565b8060029080519060200190620002de9291906200045f565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054828255906000526020600020908101928215620003f4579160200282015b82811115620003f3578251829060ff16905591602001919060010190620003d1565b5b509050620004039190620004f0565b5090565b8280548282559060005260206000209081019282156200044c579160200282015b828111156200044b578251829061ffff1690559160200191906001019062000428565b5b5090506200045b9190620004f0565b5090565b8280546200046d906200053e565b90600052602060002090601f016020900481019282620004915760008555620004dd565b82601f10620004ac57805160ff1916838001178555620004dd565b82800160010185558215620004dd579182015b82811115620004dc578251825591602001919060010190620004bf565b5b509050620004ec9190620004f0565b5090565b5b808211156200050b576000816000905550600101620004f1565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200055757607f821691505b602082108114156200056e576200056d6200050f565b5b50919050565b61473380620005846000396000f3fe6080604052600436106102035760003560e01c80637cdc65f211610118578063ca0dcf16116100a0578063e88958dc1161006f578063e88958dc1461075f578063e985e9c51461078a578063f242432a146107c7578063f2fde38b146107f0578063f5298aca1461081957610203565b8063ca0dcf16146106a5578063d58778d6146106d0578063e213b5f61461070d578063e65a38791461073657610203565b8063a0712d68116100e7578063a0712d68146105df578063a22cb465146105fb578063a2309ff814610624578063a5c0cf4e1461064f578063c885ca861461067a57610203565b80637cdc65f2146105215780637dc0bf3f1461054c57806383cf6e43146105895780638da5cb5b146105b457610203565b806332cb6b0c1161019b5780634e1273f41161016a5780634e1273f41461044c57806359927044146104895780636b67c4df146104b4578063715018a6146104df57806375f0a874146104f657610203565b806332cb6b0c146103a2578063362c3484146103cd5780633ccfd60b146103f8578063438b63001461040f57610203565b80630e89341c116101d75780630e89341c146102d65780631525ff7d1461031357806326f1a1fd1461033c5780632eb2c2d61461037957610203565b8062fdd58e1461020857806301ffc9a71461024557806302fe5305146102825780630bac15ae146102ab575b600080fd5b34801561021457600080fd5b5061022f600480360381019061022a9190612ca1565b610842565b60405161023c9190612cf0565b60405180910390f35b34801561025157600080fd5b5061026c60048036038101906102679190612d63565b61090b565b6040516102799190612dab565b60405180910390f35b34801561028e57600080fd5b506102a960048036038101906102a49190612f0c565b6109ed565b005b3480156102b757600080fd5b506102c0610a01565b6040516102cd9190612cf0565b60405180910390f35b3480156102e257600080fd5b506102fd60048036038101906102f89190612f55565b610a08565b60405161030a919061300a565b60405180910390f35b34801561031f57600080fd5b5061033a6004803603810190610335919061302c565b610a9c565b005b34801561034857600080fd5b50610363600480360381019061035e9190612f55565b610ae9565b6040516103709190612cf0565b60405180910390f35b34801561038557600080fd5b506103a0600480360381019061039b91906131c2565b610b0d565b005b3480156103ae57600080fd5b506103b7610bae565b6040516103c49190612cf0565b60405180910390f35b3480156103d957600080fd5b506103e2610bb4565b6040516103ef91906132a0565b60405180910390f35b34801561040457600080fd5b5061040d610bdb565b005b34801561041b57600080fd5b506104366004803603810190610431919061302c565b611073565b60405161044391906133bb565b60405180910390f35b34801561045857600080fd5b50610473600480360381019061046e91906134a0565b6111be565b60405161048091906135c7565b60405180910390f35b34801561049557600080fd5b5061049e6112d7565b6040516104ab91906132a0565b60405180910390f35b3480156104c057600080fd5b506104c96112fe565b6040516104d69190612cf0565b60405180910390f35b3480156104eb57600080fd5b506104f4611305565b005b34801561050257600080fd5b5061050b611319565b60405161051891906132a0565b60405180910390f35b34801561052d57600080fd5b50610536611340565b60405161054391906132a0565b60405180910390f35b34801561055857600080fd5b50610573600480360381019061056e9190612f55565b611367565b6040516105809190612cf0565b60405180910390f35b34801561059557600080fd5b5061059e61138b565b6040516105ab91906132a0565b60405180910390f35b3480156105c057600080fd5b506105c96113b2565b6040516105d691906132a0565b60405180910390f35b6105f960048036038101906105f49190612f55565b6113dc565b005b34801561060757600080fd5b50610622600480360381019061061d9190613615565b6114f3565b005b34801561063057600080fd5b50610639611509565b6040516106469190612cf0565b60405180910390f35b34801561065b57600080fd5b50610664611510565b6040516106719190612cf0565b60405180910390f35b34801561068657600080fd5b5061068f611517565b60405161069c9190612cf0565b60405180910390f35b3480156106b157600080fd5b506106ba61151e565b6040516106c79190612cf0565b60405180910390f35b3480156106dc57600080fd5b506106f760048036038101906106f29190612f55565b611524565b6040516107049190612cf0565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f91906134a0565b611548565b005b34801561074257600080fd5b5061075d60048036038101906107589190612f55565b61163c565b005b34801561076b57600080fd5b5061077461164e565b6040516107819190612cf0565b60405180910390f35b34801561079657600080fd5b506107b160048036038101906107ac9190613655565b611655565b6040516107be9190612dab565b60405180910390f35b3480156107d357600080fd5b506107ee60048036038101906107e99190613695565b6116e9565b005b3480156107fc57600080fd5b506108176004803603810190610812919061302c565b61178a565b005b34801561082557600080fd5b50610840600480360381019061083b919061372c565b61180e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108aa906137f1565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109d657507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109e657506109e582611826565b5b9050919050565b6109f5611890565b6109fe8161190e565b50565b610ac85481565b606060028054610a1790613840565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4390613840565b8015610a905780601f10610a6557610100808354040283529160200191610a90565b820191906000526020600020905b815481529060010190602001808311610a7357829003601f168201915b50505050509050919050565b610aa4611890565b80610ac760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60068181548110610af957600080fd5b906000526020600020016000915090505481565b610b15611928565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610b5b5750610b5a85610b55611928565b611655565b5b610b9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b91906138e4565b60405180910390fd5b610ba78585858585611930565b5050505050565b610abe81565b610acd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600047905060006103e8610ac95483610bf49190613933565b610bfe91906139bc565b905060006103e8610acc5484610c149190613933565b610c1e91906139bc565b905060006103e8610ace5485610c349190613933565b610c3e91906139bc565b905060006103e8610acf5486610c549190613933565b610c5e91906139bc565b90506000610aca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1685604051610ca990613a1e565b60006040518083038185875af1925050503d8060008114610ce6576040519150601f19603f3d011682016040523d82523d6000602084013e610ceb565b606091505b5050905080610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2690613a7f565b60405180910390fd5b610acb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684604051610d7690613a1e565b60006040518083038185875af1925050503d8060008114610db3576040519150601f19603f3d011682016040523d82523d6000602084013e610db8565b606091505b50508091505080610dfe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df590613a7f565b60405180910390fd5b610acd60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1683604051610e4590613a1e565b60006040518083038185875af1925050503d8060008114610e82576040519150601f19603f3d011682016040523d82523d6000602084013e610e87565b606091505b50508091505080610ecd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec490613a7f565b60405180910390fd5b610ad060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610f1490613a1e565b60006040518083038185875af1925050503d8060008114610f51576040519150601f19603f3d011682016040523d82523d6000602084013e610f56565b606091505b50508091505080610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613a7f565b60405180910390fd5b610ac760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610fe390613a1e565b60006040518083038185875af1925050503d8060008114611020576040519150601f19603f3d011682016040523d82523d6000602084013e611025565b606091505b5050809150508061106b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106290613a7f565b60405180910390fd5b505050505050565b60606000805b60048210156110b657600061108e8584610842565b11156110a357808061109f90613a9f565b9150505b81806110ae90613a9f565b925050611079565b60008167ffffffffffffffff8111156110d2576110d1612de1565b5b60405190808252806020026020018201604052801561110b57816020015b6110f8612b35565b8152602001906001900390816110f05790505b50905060008060009050600094505b60048510156111b15761112d8786610842565b9150600082111561119e5760405180606001604052808681526020018381526020016006878154811061116357611162613ae8565b5b906000526020600020015481525083828151811061118457611183613ae8565b5b6020026020010181905250808061119a90613a9f565b9150505b84806111a990613a9f565b95505061111a565b8295505050505050919050565b60608151835114611204576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fb90613b89565b60405180910390fd5b6000835167ffffffffffffffff81111561122157611220612de1565b5b60405190808252806020026020018201604052801561124f5781602001602082028036833780820191505090505b50905060005b84518110156112cc5761129c85828151811061127457611273613ae8565b5b602002602001015185838151811061128f5761128e613ae8565b5b6020026020010151610842565b8282815181106112af576112ae613ae8565b5b602002602001018181525050806112c590613a9f565b9050611255565b508091505092915050565b610ac760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610acf5481565b61130d611890565b6113176000611c52565b565b610ad060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610acb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6005818154811061137757600080fd5b906000526020600020016000915090505481565b610aca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600454816113ea9190613933565b34101561142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142390613bf5565b60405180910390fd5b610abe81610ac65461143e9190613c15565b111561147f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147690613cb7565b60405180910390fd5b60005b818110156114d55760006114a382610ac65461149e9190613c15565b611d18565b90506114c13382600160405180602001604052806000815250611eb9565b5080806114cd90613a9f565b915050611482565b5080610ac660008282546114e99190613c15565b9250508190555050565b6115056114fe611928565b838361206a565b5050565b610ac65481565b610ace5481565b610ac95481565b60045481565b6007818154811061153457600080fd5b906000526020600020016000915090505481565b611550611890565b8051825114611594576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158b90613d23565b60405180910390fd5b60005b8251811015611637576115f08382815181106115b6576115b5613ae8565b5b602002602001015160008484815181106115d3576115d2613ae8565b5b602002602001015160405180602001604052806000815250611eb9565b81818151811061160357611602613ae8565b5b6020026020010151610ac6600082825461161d9190613c15565b92505081905550808061162f90613a9f565b915050611597565b505050565b611644611890565b8060048190555050565b610acc5481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6116f1611928565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480611737575061173685611731611928565b611655565b5b611776576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176d906138e4565b60405180910390fd5b61178385858585856121d7565b5050505050565b611792611890565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611802576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117f990613db5565b60405180910390fd5b61180b81611c52565b50565b611816611890565b611821838383612473565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b611898611928565b73ffffffffffffffffffffffffffffffffffffffff166118b66113b2565b73ffffffffffffffffffffffffffffffffffffffff161461190c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161190390613e21565b60405180910390fd5b565b8060029080519060200190611924929190612b56565b5050565b600033905090565b8151835114611974576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161196b90613eb3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156119e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119db90613f45565b60405180910390fd5b60006119ee611928565b90506119fe8187878787876126ba565b60005b8451811015611baf576000858281518110611a1f57611a1e613ae8565b5b602002602001015190506000858381518110611a3e57611a3d613ae8565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad690613fd7565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611b949190613c15565b9250508190555050505080611ba890613a9f565b9050611a01565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611c26929190613ff7565b60405180910390a4611c3c8187878787876126c2565b611c4a8187878787876126ca565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008082610abe611d29919061402e565b905060008133444285604051602001611d4594939291906140cb565b6040516020818303038152906040528051906020012060001c611d689190614119565b9050600092506000600882610abe8110611d8557611d84613ae8565b5b015414611daa57600881610abe8110611da157611da0613ae8565b5b01549250611dae565b8092505b60006008600184611dbf919061402e565b610abe8110611dd157611dd0613ae8565b5b01541415611e0557600182611de6919061402e565b600882610abe8110611dfb57611dfa613ae8565b5b0181905550611e43565b6008600183611e14919061402e565b610abe8110611e2657611e25613ae8565b5b0154600882610abe8110611e3d57611e3c613ae8565b5b01819055505b6000600190505b60068181548110611e5e57611e5d613ae8565b5b90600052602060002001548410611eae5760068181548110611e8357611e82613ae8565b5b906000526020600020015484611e99919061402e565b93508080611ea690613a9f565b915050611e4a565b809350505050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611f29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f20906141bc565b60405180910390fd5b6000611f33611928565b90506000611f40856128b1565b90506000611f4d856128b1565b9050611f5e836000898585896126ba565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611fbd9190613c15565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161203b9291906141dc565b60405180910390a4612052836000898585896126c2565b6120618360008989898961292b565b50505050505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156120d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d090614277565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516121ca9190612dab565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612247576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223e90613f45565b60405180910390fd5b6000612251611928565b9050600061225e856128b1565b9050600061226b856128b1565b905061227b8389898585896126ba565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015612312576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161230990613fd7565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123c79190613c15565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516124449291906141dc565b60405180910390a461245a848a8a86868a6126c2565b612468848a8a8a8a8a61292b565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90614309565b60405180910390fd5b60006124ed611928565b905060006124fa846128b1565b90506000612507846128b1565b9050612527838760008585604051806020016040528060008152506126ba565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156125be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125b59061439b565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f62898960405161268b9291906141dc565b60405180910390a46126b1848860008686604051806020016040528060008152506126c2565b50505050505050565b505050505050565b505050505050565b6126e98473ffffffffffffffffffffffffffffffffffffffff16612b12565b156128a9578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161272f959493929190614410565b602060405180830381600087803b15801561274957600080fd5b505af192505050801561277a57506040513d601f19601f82011682018060405250810190612777919061448d565b60015b612820576127866144c7565b806308c379a014156127e3575061279b6144e9565b806127a657506127e5565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127da919061300a565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612817906145f1565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146128a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289e90614683565b60405180910390fd5b505b505050505050565b60606000600167ffffffffffffffff8111156128d0576128cf612de1565b5b6040519080825280602002602001820160405280156128fe5781602001602082028036833780820191505090505b509050828160008151811061291657612915613ae8565b5b60200260200101818152505080915050919050565b61294a8473ffffffffffffffffffffffffffffffffffffffff16612b12565b15612b0a578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016129909594939291906146a3565b602060405180830381600087803b1580156129aa57600080fd5b505af19250505080156129db57506040513d601f19601f820116820180604052508101906129d8919061448d565b60015b612a81576129e76144c7565b806308c379a01415612a4457506129fc6144e9565b80612a075750612a46565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a3b919061300a565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a78906145f1565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614612b08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aff90614683565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60405180606001604052806000815260200160008152602001600081525090565b828054612b6290613840565b90600052602060002090601f016020900481019282612b845760008555612bcb565b82601f10612b9d57805160ff1916838001178555612bcb565b82800160010185558215612bcb579182015b82811115612bca578251825591602001919060010190612baf565b5b509050612bd89190612bdc565b5090565b5b80821115612bf5576000816000905550600101612bdd565b5090565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612c3882612c0d565b9050919050565b612c4881612c2d565b8114612c5357600080fd5b50565b600081359050612c6581612c3f565b92915050565b6000819050919050565b612c7e81612c6b565b8114612c8957600080fd5b50565b600081359050612c9b81612c75565b92915050565b60008060408385031215612cb857612cb7612c03565b5b6000612cc685828601612c56565b9250506020612cd785828601612c8c565b9150509250929050565b612cea81612c6b565b82525050565b6000602082019050612d056000830184612ce1565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d4081612d0b565b8114612d4b57600080fd5b50565b600081359050612d5d81612d37565b92915050565b600060208284031215612d7957612d78612c03565b5b6000612d8784828501612d4e565b91505092915050565b60008115159050919050565b612da581612d90565b82525050565b6000602082019050612dc06000830184612d9c565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612e1982612dd0565b810181811067ffffffffffffffff82111715612e3857612e37612de1565b5b80604052505050565b6000612e4b612bf9565b9050612e578282612e10565b919050565b600067ffffffffffffffff821115612e7757612e76612de1565b5b612e8082612dd0565b9050602081019050919050565b82818337600083830152505050565b6000612eaf612eaa84612e5c565b612e41565b905082815260208101848484011115612ecb57612eca612dcb565b5b612ed6848285612e8d565b509392505050565b600082601f830112612ef357612ef2612dc6565b5b8135612f03848260208601612e9c565b91505092915050565b600060208284031215612f2257612f21612c03565b5b600082013567ffffffffffffffff811115612f4057612f3f612c08565b5b612f4c84828501612ede565b91505092915050565b600060208284031215612f6b57612f6a612c03565b5b6000612f7984828501612c8c565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612fbc578082015181840152602081019050612fa1565b83811115612fcb576000848401525b50505050565b6000612fdc82612f82565b612fe68185612f8d565b9350612ff6818560208601612f9e565b612fff81612dd0565b840191505092915050565b600060208201905081810360008301526130248184612fd1565b905092915050565b60006020828403121561304257613041612c03565b5b600061305084828501612c56565b91505092915050565b600067ffffffffffffffff82111561307457613073612de1565b5b602082029050602081019050919050565b600080fd5b600061309d61309884613059565b612e41565b905080838252602082019050602084028301858111156130c0576130bf613085565b5b835b818110156130e957806130d58882612c8c565b8452602084019350506020810190506130c2565b5050509392505050565b600082601f83011261310857613107612dc6565b5b813561311884826020860161308a565b91505092915050565b600067ffffffffffffffff82111561313c5761313b612de1565b5b61314582612dd0565b9050602081019050919050565b600061316561316084613121565b612e41565b90508281526020810184848401111561318157613180612dcb565b5b61318c848285612e8d565b509392505050565b600082601f8301126131a9576131a8612dc6565b5b81356131b9848260208601613152565b91505092915050565b600080600080600060a086880312156131de576131dd612c03565b5b60006131ec88828901612c56565b95505060206131fd88828901612c56565b945050604086013567ffffffffffffffff81111561321e5761321d612c08565b5b61322a888289016130f3565b935050606086013567ffffffffffffffff81111561324b5761324a612c08565b5b613257888289016130f3565b925050608086013567ffffffffffffffff81111561327857613277612c08565b5b61328488828901613194565b9150509295509295909350565b61329a81612c2d565b82525050565b60006020820190506132b56000830184613291565b92915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6132f081612c6b565b82525050565b60608201600082015161330c60008501826132e7565b50602082015161331f60208501826132e7565b50604082015161333260408501826132e7565b50505050565b600061334483836132f6565b60608301905092915050565b6000602082019050919050565b6000613368826132bb565b61337281856132c6565b935061337d836132d7565b8060005b838110156133ae5781516133958882613338565b97506133a083613350565b925050600181019050613381565b5085935050505092915050565b600060208201905081810360008301526133d5818461335d565b905092915050565b600067ffffffffffffffff8211156133f8576133f7612de1565b5b602082029050602081019050919050565b600061341c613417846133dd565b612e41565b9050808382526020820190506020840283018581111561343f5761343e613085565b5b835b8181101561346857806134548882612c56565b845260208401935050602081019050613441565b5050509392505050565b600082601f83011261348757613486612dc6565b5b8135613497848260208601613409565b91505092915050565b600080604083850312156134b7576134b6612c03565b5b600083013567ffffffffffffffff8111156134d5576134d4612c08565b5b6134e185828601613472565b925050602083013567ffffffffffffffff81111561350257613501612c08565b5b61350e858286016130f3565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b600061355083836132e7565b60208301905092915050565b6000602082019050919050565b600061357482613518565b61357e8185613523565b935061358983613534565b8060005b838110156135ba5781516135a18882613544565b97506135ac8361355c565b92505060018101905061358d565b5085935050505092915050565b600060208201905081810360008301526135e18184613569565b905092915050565b6135f281612d90565b81146135fd57600080fd5b50565b60008135905061360f816135e9565b92915050565b6000806040838503121561362c5761362b612c03565b5b600061363a85828601612c56565b925050602061364b85828601613600565b9150509250929050565b6000806040838503121561366c5761366b612c03565b5b600061367a85828601612c56565b925050602061368b85828601612c56565b9150509250929050565b600080600080600060a086880312156136b1576136b0612c03565b5b60006136bf88828901612c56565b95505060206136d088828901612c56565b94505060406136e188828901612c8c565b93505060606136f288828901612c8c565b925050608086013567ffffffffffffffff81111561371357613712612c08565b5b61371f88828901613194565b9150509295509295909350565b60008060006060848603121561374557613744612c03565b5b600061375386828701612c56565b935050602061376486828701612c8c565b925050604061377586828701612c8c565b9150509250925092565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b60006137db602a83612f8d565b91506137e68261377f565b604082019050919050565b6000602082019050818103600083015261380a816137ce565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061385857607f821691505b6020821081141561386c5761386b613811565b5b50919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b60006138ce602f83612f8d565b91506138d982613872565b604082019050919050565b600060208201905081810360008301526138fd816138c1565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061393e82612c6b565b915061394983612c6b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561398257613981613904565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006139c782612c6b565b91506139d283612c6b565b9250826139e2576139e161398d565b5b828204905092915050565b600081905092915050565b50565b6000613a086000836139ed565b9150613a13826139f8565b600082019050919050565b6000613a29826139fb565b9150819050919050565b7f53656e64696e6720657468206661696c65640000000000000000000000000000600082015250565b6000613a69601283612f8d565b9150613a7482613a33565b602082019050919050565b60006020820190508181036000830152613a9881613a5c565b9050919050565b6000613aaa82612c6b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613add57613adc613904565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000613b73602983612f8d565b9150613b7e82613b17565b604082019050919050565b60006020820190508181036000830152613ba281613b66565b9050919050565b7f496e73756666696369656e742046756e64000000000000000000000000000000600082015250565b6000613bdf601183612f8d565b9150613bea82613ba9565b602082019050919050565b60006020820190508181036000830152613c0e81613bd2565b9050919050565b6000613c2082612c6b565b9150613c2b83612c6b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c6057613c5f613904565b5b828201905092915050565b7f4c696d6974206578636565640000000000000000000000000000000000000000600082015250565b6000613ca1600c83612f8d565b9150613cac82613c6b565b602082019050919050565b60006020820190508181036000830152613cd081613c94565b9050919050565b7f496e7075742044617461206572726f7200000000000000000000000000000000600082015250565b6000613d0d601083612f8d565b9150613d1882613cd7565b602082019050919050565b60006020820190508181036000830152613d3c81613d00565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613d9f602683612f8d565b9150613daa82613d43565b604082019050919050565b60006020820190508181036000830152613dce81613d92565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613e0b602083612f8d565b9150613e1682613dd5565b602082019050919050565b60006020820190508181036000830152613e3a81613dfe565b9050919050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b6000613e9d602883612f8d565b9150613ea882613e41565b604082019050919050565b60006020820190508181036000830152613ecc81613e90565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613f2f602583612f8d565b9150613f3a82613ed3565b604082019050919050565b60006020820190508181036000830152613f5e81613f22565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613fc1602a83612f8d565b9150613fcc82613f65565b604082019050919050565b60006020820190508181036000830152613ff081613fb4565b9050919050565b600060408201905081810360008301526140118185613569565b905081810360208301526140258184613569565b90509392505050565b600061403982612c6b565b915061404483612c6b565b92508282101561405757614056613904565b5b828203905092915050565b60008160601b9050919050565b600061407a82614062565b9050919050565b600061408c8261406f565b9050919050565b6140a461409f82612c2d565b614081565b82525050565b6000819050919050565b6140c56140c082612c6b565b6140aa565b82525050565b60006140d78287614093565b6014820191506140e782866140b4565b6020820191506140f782856140b4565b60208201915061410782846140b4565b60208201915081905095945050505050565b600061412482612c6b565b915061412f83612c6b565b92508261413f5761413e61398d565b5b828206905092915050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006141a6602183612f8d565b91506141b18261414a565b604082019050919050565b600060208201905081810360008301526141d581614199565b9050919050565b60006040820190506141f16000830185612ce1565b6141fe6020830184612ce1565b9392505050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b6000614261602983612f8d565b915061426c82614205565b604082019050919050565b6000602082019050818103600083015261429081614254565b9050919050565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006142f3602383612f8d565b91506142fe82614297565b604082019050919050565b60006020820190508181036000830152614322816142e6565b9050919050565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000614385602483612f8d565b915061439082614329565b604082019050919050565b600060208201905081810360008301526143b481614378565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006143e2826143bb565b6143ec81856143c6565b93506143fc818560208601612f9e565b61440581612dd0565b840191505092915050565b600060a0820190506144256000830188613291565b6144326020830187613291565b81810360408301526144448186613569565b905081810360608301526144588185613569565b9050818103608083015261446c81846143d7565b90509695505050505050565b60008151905061448781612d37565b92915050565b6000602082840312156144a3576144a2612c03565b5b60006144b184828501614478565b91505092915050565b60008160e01c9050919050565b600060033d11156144e65760046000803e6144e36000516144ba565b90505b90565b600060443d10156144f95761457c565b614501612bf9565b60043d036004823e80513d602482011167ffffffffffffffff8211171561452957505061457c565b808201805167ffffffffffffffff811115614547575050505061457c565b80602083010160043d03850181111561456457505050505061457c565b61457382602001850186612e10565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006145db603483612f8d565b91506145e68261457f565b604082019050919050565b6000602082019050818103600083015261460a816145ce565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b600061466d602883612f8d565b915061467882614611565b604082019050919050565b6000602082019050818103600083015261469c81614660565b9050919050565b600060a0820190506146b86000830188613291565b6146c56020830187613291565b6146d26040830186612ce1565b6146df6060830185612ce1565b81810360808301526146f181846143d7565b9050969550505050505056fea2646970667358221220d2a4da6e7ac321ff55bddfb81e0e58b2c6ed6fdf2824655b4dc0081f9e8e932b64736f6c63430008090033

Deployed ByteCode Sourcemap

104694:4393:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89097:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;88120:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;105797:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;105108:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;88841:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;108661:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;104822:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;91041:439;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;104906:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;105418:68;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;107822:833;;;;;;;;;;;;;:::i;:::-;;107272:544;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;89493:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;105031:70;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;105529:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;68249:103;;;;;;;;;;;;;:::i;:::-;;105571:75;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;105297:73;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;104779:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;105220:72;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;67601:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;106669:346;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;90090:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;104998:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;105491;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;105178:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;104740:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;104876:25;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;108759:323;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;107168:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;105375:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;90317:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;90557:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;68507:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;107021:137;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;89097:230;89183:7;89230:1;89211:21;;:7;:21;;;;89203:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;89297:9;:13;89307:2;89297:13;;;;;;;;;;;:22;89311:7;89297:22;;;;;;;;;;;;;;;;89290:29;;89097:230;;;;:::o;88120:310::-;88222:4;88274:26;88259:41;;;:11;:41;;;;:110;;;;88332:37;88317:52;;;:11;:52;;;;88259:110;:163;;;;88386:36;88410:11;88386:23;:36::i;:::-;88259:163;88239:183;;88120:310;;;:::o;105797:84::-;67487:13;:11;:13::i;:::-;105860:15:::1;105868:6;105860:7;:15::i;:::-;105797:84:::0;:::o;105108:38::-;;;;:::o;88841:105::-;88901:13;88934:4;88927:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;88841:105;;;:::o;108661:92::-;67487:13;:11;:13::i;:::-;108740:7:::1;108727:10;;:20;;;;;;;;;;;;;;;;;;108661:92:::0;:::o;104822:49::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;91041:439::-;91282:12;:10;:12::i;:::-;91274:20;;:4;:20;;;:60;;;;91298:36;91315:4;91321:12;:10;:12::i;:::-;91298:16;:36::i;:::-;91274:60;91252:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;91420:52;91443:4;91449:2;91453:3;91458:7;91467:4;91420:22;:52::i;:::-;91041:439;;;;;:::o;104906:41::-;104943:4;104906:41;:::o;105418:68::-;;;;;;;;;;;;;:::o;107822:833::-;107858:15;107876:21;107858:39;;107904:14;105678:4;107931:9;;107921:7;:19;;;;:::i;:::-;:27;;;;:::i;:::-;107904:44;;107955:15;105678:4;107983:10;;107973:7;:20;;;;:::i;:::-;:28;;;;:::i;:::-;107955:46;;108008:10;105678:4;108031:5;;108021:7;:15;;;;:::i;:::-;:23;;;;:::i;:::-;108008:36;;108051:17;105678:4;108081:12;;108071:7;:22;;;;:::i;:::-;:30;;;;:::i;:::-;108051:50;;108115:9;108137:12;;;;;;;;;;;108129:26;;108163:6;108129:45;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;108114:60;;;108189:4;108181:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;108242:13;;;;;;;;;;;108234:27;;108269:7;108234:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;108223:58;;;;;108296:4;108288:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;108349:8;;;;;;;;;;;108341:22;;108371:2;108341:37;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;108330:48;;;;;108393:4;108385:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;108446:15;;;;;;;;;;;108438:29;;108475:9;108438:51;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;108427:62;;;;;108504:4;108496:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;108557:10;;;;;;;;;;;108549:24;;108581:21;108549:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;108538:69;;;;;108622:4;108614:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;107851:804;;;;;;107822:833::o;107272:544::-;107330:18;107356:9;107376:13;107400:76;107411:1;107407;:5;107400:76;;;107446:1;107425:18;107435:4;107441:1;107425:9;:18::i;:::-;:22;107422:34;;;107449:7;;;;;:::i;:::-;;;;107422:34;107465:3;;;;;:::i;:::-;;;;107400:76;;;107484:27;107530:5;107514:22;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;107484:52;;107543:15;107565:16;107584:1;107565:20;;107601:1;107597:5;;107592:191;107608:1;107604;:5;107592:191;;;107635:18;107645:4;107651:1;107635:9;:18::i;:::-;107625:28;;107676:1;107666:7;:11;107662:114;;;107711:34;;;;;;;;107721:1;107711:34;;;;107724:7;107711:34;;;;107733:8;107742:1;107733:11;;;;;;;;:::i;:::-;;;;;;;;;;107711:34;;;107690:8;107699;107690:18;;;;;;;;:::i;:::-;;;;;;;:55;;;;107756:10;;;;;:::i;:::-;;;;107662:114;107611:3;;;;;:::i;:::-;;;;107592:191;;;107802:8;107795:15;;;;;;;107272:544;;;:::o;89493:524::-;89649:16;89710:3;:10;89691:8;:15;:29;89683:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;89779:30;89826:8;:15;89812:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;89779:63;;89860:9;89855:122;89879:8;:15;89875:1;:19;89855:122;;;89935:30;89945:8;89954:1;89945:11;;;;;;;;:::i;:::-;;;;;;;;89958:3;89962:1;89958:6;;;;;;;;:::i;:::-;;;;;;;;89935:9;:30::i;:::-;89916:13;89930:1;89916:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;89896:3;;;;:::i;:::-;;;89855:122;;;;89996:13;89989:20;;;89493:524;;;;:::o;105031:70::-;;;;;;;;;;;;;:::o;105529:31::-;;;;:::o;68249:103::-;67487:13;:11;:13::i;:::-;68314:30:::1;68341:1;68314:18;:30::i;:::-;68249:103::o:0;105571:75::-;;;;;;;;;;;;;:::o;105297:73::-;;;;;;;;;;;;;:::o;104779:38::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;105220:72::-;;;;;;;;;;;;;:::o;67601:87::-;67647:7;67674:6;;;;;;;;;;;67667:13;;67601:87;:::o;106669:346::-;106752:8;;106743:6;:17;;;;:::i;:::-;106729:9;:32;;106721:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;104943:4;106812:6;106798:11;;:20;;;;:::i;:::-;:34;;106790:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;106861:6;106856:126;106877:6;106873:1;:10;106856:126;;;106900:10;106913:24;106935:1;106923:11;;:13;;;;:::i;:::-;106913:9;:24::i;:::-;106900:37;;106946:28;106952:10;106964:2;106968:1;106946:28;;;;;;;;;;;;:5;:28::i;:::-;106891:91;106885:3;;;;;:::i;:::-;;;;106856:126;;;;107003:6;106988:11;;:21;;;;;;;:::i;:::-;;;;;;;;106669:346;:::o;90090:155::-;90185:52;90204:12;:10;:12::i;:::-;90218:8;90228;90185:18;:52::i;:::-;90090:155;;:::o;104998:26::-;;;;:::o;105491:::-;;;;:::o;105178:30::-;;;;:::o;104740:34::-;;;;:::o;104876:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;108759:323::-;67487:13;:11;:13::i;:::-;108901:7:::1;:14;108882:8;:15;:33;108874:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;108948:9;108943:134;108967:8;:15;108963:1;:19;108943:134;;;108998:37;109004:8;109013:1;109004:11;;;;;;;;:::i;:::-;;;;;;;;109017:1;109020:7;109028:1;109020:10;;;;;;;;:::i;:::-;;;;;;;;108998:37;;;;;;;;;;;::::0;:5:::1;:37::i;:::-;109059:7;109067:1;109059:10;;;;;;;;:::i;:::-;;;;;;;;109044:11;;:25;;;;;;;:::i;:::-;;;;;;;;108984:3;;;;;:::i;:::-;;;;108943:134;;;;108759:323:::0;;:::o;107168:98::-;67487:13;:11;:13::i;:::-;107248:12:::1;107237:8;:23;;;;107168:98:::0;:::o;105375:31::-;;;;:::o;90317:168::-;90416:4;90440:18;:27;90459:7;90440:27;;;;;;;;;;;;;;;:37;90468:8;90440:37;;;;;;;;;;;;;;;;;;;;;;;;;90433:44;;90317:168;;;;:::o;90557:407::-;90773:12;:10;:12::i;:::-;90765:20;;:4;:20;;;:60;;;;90789:36;90806:4;90812:12;:10;:12::i;:::-;90789:16;:36::i;:::-;90765:60;90743:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;90911:45;90929:4;90935:2;90939;90943:6;90951:4;90911:17;:45::i;:::-;90557:407;;;;;:::o;68507:201::-;67487:13;:11;:13::i;:::-;68616:1:::1;68596:22;;:8;:22;;;;68588:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;68672:28;68691:8;68672:18;:28::i;:::-;68507:201:::0;:::o;107021:137::-;67487:13;:11;:13::i;:::-;107129:23:::1;107135:4;107141:2;107145:6;107129:5;:23::i;:::-;107021:137:::0;;;:::o;79401:157::-;79486:4;79525:25;79510:40;;;:11;:40;;;;79503:47;;79401:157;;;:::o;67766:132::-;67841:12;:10;:12::i;:::-;67830:23;;:7;:5;:7::i;:::-;:23;;;67822:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;67766:132::o;95266:88::-;95340:6;95333:4;:13;;;;;;;;;;;;:::i;:::-;;95266:88;:::o;66152:98::-;66205:7;66232:10;66225:17;;66152:98;:::o;93276:1146::-;93503:7;:14;93489:3;:10;:28;93481:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;93595:1;93581:16;;:2;:16;;;;93573:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;93652:16;93671:12;:10;:12::i;:::-;93652:31;;93696:60;93717:8;93727:4;93733:2;93737:3;93742:7;93751:4;93696:20;:60::i;:::-;93774:9;93769:421;93793:3;:10;93789:1;:14;93769:421;;;93825:10;93838:3;93842:1;93838:6;;;;;;;;:::i;:::-;;;;;;;;93825:19;;93859:14;93876:7;93884:1;93876:10;;;;;;;;:::i;:::-;;;;;;;;93859:27;;93903:19;93925:9;:13;93935:2;93925:13;;;;;;;;;;;:19;93939:4;93925:19;;;;;;;;;;;;;;;;93903:41;;93982:6;93967:11;:21;;93959:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;94115:6;94101:11;:20;94079:9;:13;94089:2;94079:13;;;;;;;;;;;:19;94093:4;94079:19;;;;;;;;;;;;;;;:42;;;;94172:6;94151:9;:13;94161:2;94151:13;;;;;;;;;;;:17;94165:2;94151:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;93810:380;;;93805:3;;;;:::i;:::-;;;93769:421;;;;94237:2;94207:47;;94231:4;94207:47;;94221:8;94207:47;;;94241:3;94246:7;94207:47;;;;;;;:::i;:::-;;;;;;;;94267:59;94287:8;94297:4;94303:2;94307:3;94312:7;94321:4;94267:19;:59::i;:::-;94339:75;94375:8;94385:4;94391:2;94395:3;94400:7;94409:4;94339:35;:75::i;:::-;93470:952;93276:1146;;;;;:::o;68868:191::-;68942:16;68961:6;;;;;;;;;;;68942:25;;68987:8;68978:6;;:17;;;;;;;;;;;;;;;;;;69042:8;69011:40;;69032:8;69011:40;;;;;;;;;;;;68931:128;68868:191;:::o;105887:775::-;105942:13;105964:17;105997:12;104943:4;105984:25;;;;:::i;:::-;105964:45;;106016:12;106128:9;106066:10;106078:16;106096:15;106113:9;106049:74;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;106039:85;;;;;;106031:94;;:106;;;;:::i;:::-;106016:121;;106152:1;106144:9;;106260:1;106238:12;106251:4;106238:18;;;;;;;:::i;:::-;;;;:23;106234:93;;106278:12;106291:4;106278:18;;;;;;;:::i;:::-;;;;106270:26;;106234:93;;;106323:4;106315:12;;106234:93;106426:1;106395:12;106420:1;106408:9;:13;;;;:::i;:::-;106395:27;;;;;;;:::i;:::-;;;;:32;106391:146;;;106469:1;106457:9;:13;;;;:::i;:::-;106436:12;106449:4;106436:18;;;;;;;:::i;:::-;;;:34;;;;106391:146;;;106510:12;106535:1;106523:9;:13;;;;:::i;:::-;106510:27;;;;;;;:::i;:::-;;;;106489:12;106502:4;106489:18;;;;;;;:::i;:::-;;;:48;;;;106391:146;106544:9;106556:1;106544:13;;106564:78;106579:8;106588:1;106579:11;;;;;;;;:::i;:::-;;;;;;;;;;106570:5;:20;106564:78;;106610:8;106619:1;106610:11;;;;;;;;:::i;:::-;;;;;;;;;;106601:20;;;;;:::i;:::-;;;106630:4;;;;;:::i;:::-;;;;106564:78;;;106655:1;106648:8;;;;;105887:775;;;:::o;95740:729::-;95907:1;95893:16;;:2;:16;;;;95885:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;95960:16;95979:12;:10;:12::i;:::-;95960:31;;96002:20;96025:21;96043:2;96025:17;:21::i;:::-;96002:44;;96057:24;96084:25;96102:6;96084:17;:25::i;:::-;96057:52;;96122:66;96143:8;96161:1;96165:2;96169:3;96174:7;96183:4;96122:20;:66::i;:::-;96222:6;96201:9;:13;96211:2;96201:13;;;;;;;;;;;:17;96215:2;96201:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;96281:2;96244:52;;96277:1;96244:52;;96259:8;96244:52;;;96285:2;96289:6;96244:52;;;;;;;:::i;:::-;;;;;;;;96309:65;96329:8;96347:1;96351:2;96355:3;96360:7;96369:4;96309:19;:65::i;:::-;96387:74;96418:8;96436:1;96440:2;96444;96448:6;96456:4;96387:30;:74::i;:::-;95874:595;;;95740:729;;;;:::o;100153:331::-;100308:8;100299:17;;:5;:17;;;;100291:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;100411:8;100373:18;:25;100392:5;100373:25;;;;;;;;;;;;;;;:35;100399:8;100373:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;100457:8;100435:41;;100450:5;100435:41;;;100467:8;100435:41;;;;;;:::i;:::-;;;;;;;;100153:331;;;:::o;91944:974::-;92146:1;92132:16;;:2;:16;;;;92124:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;92203:16;92222:12;:10;:12::i;:::-;92203:31;;92245:20;92268:21;92286:2;92268:17;:21::i;:::-;92245:44;;92300:24;92327:25;92345:6;92327:17;:25::i;:::-;92300:52;;92365:60;92386:8;92396:4;92402:2;92406:3;92411:7;92420:4;92365:20;:60::i;:::-;92438:19;92460:9;:13;92470:2;92460:13;;;;;;;;;;;:19;92474:4;92460:19;;;;;;;;;;;;;;;;92438:41;;92513:6;92498:11;:21;;92490:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;92638:6;92624:11;:20;92602:9;:13;92612:2;92602:13;;;;;;;;;;;:19;92616:4;92602:19;;;;;;;;;;;;;;;:42;;;;92687:6;92666:9;:13;92676:2;92666:13;;;;;;;;;;;:17;92680:2;92666:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;92742:2;92711:46;;92736:4;92711:46;;92726:8;92711:46;;;92746:2;92750:6;92711:46;;;;;;;:::i;:::-;;;;;;;;92770:59;92790:8;92800:4;92806:2;92810:3;92815:7;92824:4;92770:19;:59::i;:::-;92842:68;92873:8;92883:4;92889:2;92893;92897:6;92905:4;92842:30;:68::i;:::-;92113:805;;;;91944:974;;;;;:::o;97983:808::-;98126:1;98110:18;;:4;:18;;;;98102:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;98181:16;98200:12;:10;:12::i;:::-;98181:31;;98223:20;98246:21;98264:2;98246:17;:21::i;:::-;98223:44;;98278:24;98305:25;98323:6;98305:17;:25::i;:::-;98278:52;;98343:66;98364:8;98374:4;98388:1;98392:3;98397:7;98343:66;;;;;;;;;;;;:20;:66::i;:::-;98422:19;98444:9;:13;98454:2;98444:13;;;;;;;;;;;:19;98458:4;98444:19;;;;;;;;;;;;;;;;98422:41;;98497:6;98482:11;:21;;98474:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;98616:6;98602:11;:20;98580:9;:13;98590:2;98580:13;;;;;;;;;;;:19;98594:4;98580:19;;;;;;;;;;;;;;;:42;;;;98690:1;98651:54;;98676:4;98651:54;;98666:8;98651:54;;;98694:2;98698:6;98651:54;;;;;;;:::i;:::-;;;;;;;;98718:65;98738:8;98748:4;98762:1;98766:3;98771:7;98718:65;;;;;;;;;;;;:19;:65::i;:::-;98091:700;;;;97983:808;;;:::o;101442:221::-;;;;;;;:::o;102618:220::-;;;;;;;:::o;103598:813::-;103838:15;:2;:13;;;:15::i;:::-;103834:570;;;103891:2;103874:43;;;103918:8;103928:4;103934:3;103939:7;103948:4;103874:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;103870:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;104266:6;104259:14;;;;;;;;;;;:::i;:::-;;;;;;;;103870:523;;;104315:62;;;;;;;;;;:::i;:::-;;;;;;;;103870:523;104047:48;;;104035:60;;;:8;:60;;;;104031:159;;104120:50;;;;;;;;;;:::i;:::-;;;;;;;;104031:159;103954:251;103834:570;103598:813;;;;;;:::o;104419:198::-;104485:16;104514:22;104553:1;104539:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;104514:41;;104577:7;104566:5;104572:1;104566:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;104604:5;104597:12;;;104419:198;;;:::o;102846:744::-;103061:15;:2;:13;;;:15::i;:::-;103057:526;;;103114:2;103097:38;;;103136:8;103146:4;103152:2;103156:6;103164:4;103097:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;103093:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;103445:6;103438:14;;;;;;;;;;;:::i;:::-;;;;;;;;103093:479;;;103494:62;;;;;;;;;;:::i;:::-;;;;;;;;103093:479;103231:43;;;103219:55;;;:8;:55;;;;103215:154;;103299:50;;;;;;;;;;:::i;:::-;;;;;;;;103215:154;103170:214;103057:526;102846:744;;;;;;:::o;70299:326::-;70359:4;70616:1;70594:7;:19;;;:23;70587:30;;70299:326;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:154::-;4573:6;4568:3;4563;4550:30;4635:1;4626:6;4621:3;4617:16;4610:27;4489:154;;;:::o;4649:412::-;4727:5;4752:66;4768:49;4810:6;4768:49;:::i;:::-;4752:66;:::i;:::-;4743:75;;4841:6;4834:5;4827:21;4879:4;4872:5;4868:16;4917:3;4908:6;4903:3;4899:16;4896:25;4893:112;;;4924:79;;:::i;:::-;4893:112;5014:41;5048:6;5043:3;5038;5014:41;:::i;:::-;4733:328;4649:412;;;;;:::o;5081:340::-;5137:5;5186:3;5179:4;5171:6;5167:17;5163:27;5153:122;;5194:79;;:::i;:::-;5153:122;5311:6;5298:20;5336:79;5411:3;5403:6;5396:4;5388:6;5384:17;5336:79;:::i;:::-;5327:88;;5143:278;5081:340;;;;:::o;5427:509::-;5496:6;5545:2;5533:9;5524:7;5520:23;5516:32;5513:119;;;5551:79;;:::i;:::-;5513:119;5699:1;5688:9;5684:17;5671:31;5729:18;5721:6;5718:30;5715:117;;;5751:79;;:::i;:::-;5715:117;5856:63;5911:7;5902:6;5891:9;5887:22;5856:63;:::i;:::-;5846:73;;5642:287;5427:509;;;;:::o;5942:329::-;6001:6;6050:2;6038:9;6029:7;6025:23;6021:32;6018:119;;;6056:79;;:::i;:::-;6018:119;6176:1;6201:53;6246:7;6237:6;6226:9;6222:22;6201:53;:::i;:::-;6191:63;;6147:117;5942:329;;;;:::o;6277:99::-;6329:6;6363:5;6357:12;6347:22;;6277:99;;;:::o;6382:169::-;6466:11;6500:6;6495:3;6488:19;6540:4;6535:3;6531:14;6516:29;;6382:169;;;;:::o;6557:307::-;6625:1;6635:113;6649:6;6646:1;6643:13;6635:113;;;6734:1;6729:3;6725:11;6719:18;6715:1;6710:3;6706:11;6699:39;6671:2;6668:1;6664:10;6659:15;;6635:113;;;6766:6;6763:1;6760:13;6757:101;;;6846:1;6837:6;6832:3;6828:16;6821:27;6757:101;6606:258;6557:307;;;:::o;6870:364::-;6958:3;6986:39;7019:5;6986:39;:::i;:::-;7041:71;7105:6;7100:3;7041:71;:::i;:::-;7034:78;;7121:52;7166:6;7161:3;7154:4;7147:5;7143:16;7121:52;:::i;:::-;7198:29;7220:6;7198:29;:::i;:::-;7193:3;7189:39;7182:46;;6962:272;6870:364;;;;:::o;7240:313::-;7353:4;7391:2;7380:9;7376:18;7368:26;;7440:9;7434:4;7430:20;7426:1;7415:9;7411:17;7404:47;7468:78;7541:4;7532:6;7468:78;:::i;:::-;7460:86;;7240:313;;;;:::o;7559:329::-;7618:6;7667:2;7655:9;7646:7;7642:23;7638:32;7635:119;;;7673:79;;:::i;:::-;7635:119;7793:1;7818:53;7863:7;7854:6;7843:9;7839:22;7818:53;:::i;:::-;7808:63;;7764:117;7559:329;;;;:::o;7894:311::-;7971:4;8061:18;8053:6;8050:30;8047:56;;;8083:18;;:::i;:::-;8047:56;8133:4;8125:6;8121:17;8113:25;;8193:4;8187;8183:15;8175:23;;7894:311;;;:::o;8211:117::-;8320:1;8317;8310:12;8351:710;8447:5;8472:81;8488:64;8545:6;8488:64;:::i;:::-;8472:81;:::i;:::-;8463:90;;8573:5;8602:6;8595:5;8588:21;8636:4;8629:5;8625:16;8618:23;;8689:4;8681:6;8677:17;8669:6;8665:30;8718:3;8710:6;8707:15;8704:122;;;8737:79;;:::i;:::-;8704:122;8852:6;8835:220;8869:6;8864:3;8861:15;8835:220;;;8944:3;8973:37;9006:3;8994:10;8973:37;:::i;:::-;8968:3;8961:50;9040:4;9035:3;9031:14;9024:21;;8911:144;8895:4;8890:3;8886:14;8879:21;;8835:220;;;8839:21;8453:608;;8351:710;;;;;:::o;9084:370::-;9155:5;9204:3;9197:4;9189:6;9185:17;9181:27;9171:122;;9212:79;;:::i;:::-;9171:122;9329:6;9316:20;9354:94;9444:3;9436:6;9429:4;9421:6;9417:17;9354:94;:::i;:::-;9345:103;;9161:293;9084:370;;;;:::o;9460:307::-;9521:4;9611:18;9603:6;9600:30;9597:56;;;9633:18;;:::i;:::-;9597:56;9671:29;9693:6;9671:29;:::i;:::-;9663:37;;9755:4;9749;9745:15;9737:23;;9460:307;;;:::o;9773:410::-;9850:5;9875:65;9891:48;9932:6;9891:48;:::i;:::-;9875:65;:::i;:::-;9866:74;;9963:6;9956:5;9949:21;10001:4;9994:5;9990:16;10039:3;10030:6;10025:3;10021:16;10018:25;10015:112;;;10046:79;;:::i;:::-;10015:112;10136:41;10170:6;10165:3;10160;10136:41;:::i;:::-;9856:327;9773:410;;;;;:::o;10202:338::-;10257:5;10306:3;10299:4;10291:6;10287:17;10283:27;10273:122;;10314:79;;:::i;:::-;10273:122;10431:6;10418:20;10456:78;10530:3;10522:6;10515:4;10507:6;10503:17;10456:78;:::i;:::-;10447:87;;10263:277;10202:338;;;;:::o;10546:1509::-;10700:6;10708;10716;10724;10732;10781:3;10769:9;10760:7;10756:23;10752:33;10749:120;;;10788:79;;:::i;:::-;10749:120;10908:1;10933:53;10978:7;10969:6;10958:9;10954:22;10933:53;:::i;:::-;10923:63;;10879:117;11035:2;11061:53;11106:7;11097:6;11086:9;11082:22;11061:53;:::i;:::-;11051:63;;11006:118;11191:2;11180:9;11176:18;11163:32;11222:18;11214:6;11211:30;11208:117;;;11244:79;;:::i;:::-;11208:117;11349:78;11419:7;11410:6;11399:9;11395:22;11349:78;:::i;:::-;11339:88;;11134:303;11504:2;11493:9;11489:18;11476:32;11535:18;11527:6;11524:30;11521:117;;;11557:79;;:::i;:::-;11521:117;11662:78;11732:7;11723:6;11712:9;11708:22;11662:78;:::i;:::-;11652:88;;11447:303;11817:3;11806:9;11802:19;11789:33;11849:18;11841:6;11838:30;11835:117;;;11871:79;;:::i;:::-;11835:117;11976:62;12030:7;12021:6;12010:9;12006:22;11976:62;:::i;:::-;11966:72;;11760:288;10546:1509;;;;;;;;:::o;12061:118::-;12148:24;12166:5;12148:24;:::i;:::-;12143:3;12136:37;12061:118;;:::o;12185:222::-;12278:4;12316:2;12305:9;12301:18;12293:26;;12329:71;12397:1;12386:9;12382:17;12373:6;12329:71;:::i;:::-;12185:222;;;;:::o;12413:141::-;12507:6;12541:5;12535:12;12525:22;;12413:141;;;:::o;12560:211::-;12686:11;12720:6;12715:3;12708:19;12760:4;12755:3;12751:14;12736:29;;12560:211;;;;:::o;12777:159::-;12871:4;12894:3;12886:11;;12924:4;12919:3;12915:14;12907:22;;12777:159;;;:::o;12942:108::-;13019:24;13037:5;13019:24;:::i;:::-;13014:3;13007:37;12942:108;;:::o;13116:673::-;13257:4;13252:3;13248:14;13342:4;13335:5;13331:16;13325:23;13361:63;13418:4;13413:3;13409:14;13395:12;13361:63;:::i;:::-;13272:162;13517:4;13510:5;13506:16;13500:23;13536:63;13593:4;13588:3;13584:14;13570:12;13536:63;:::i;:::-;13444:165;13690:4;13683:5;13679:16;13673:23;13709:63;13766:4;13761:3;13757:14;13743:12;13709:63;:::i;:::-;13619:163;13226:563;13116:673;;:::o;13795:287::-;13918:10;13939:100;14035:3;14027:6;13939:100;:::i;:::-;14071:4;14066:3;14062:14;14048:28;;13795:287;;;;:::o;14088:140::-;14185:4;14217;14212:3;14208:14;14200:22;;14088:140;;;:::o;14298:948::-;14471:3;14500:81;14575:5;14500:81;:::i;:::-;14597:113;14703:6;14698:3;14597:113;:::i;:::-;14590:120;;14734:83;14811:5;14734:83;:::i;:::-;14840:7;14871:1;14856:365;14881:6;14878:1;14875:13;14856:365;;;14957:6;14951:13;14984:117;15097:3;15082:13;14984:117;:::i;:::-;14977:124;;15124:87;15204:6;15124:87;:::i;:::-;15114:97;;14916:305;14903:1;14900;14896:9;14891:14;;14856:365;;;14860:14;15237:3;15230:10;;14476:770;;;14298:948;;;;:::o;15252:481::-;15449:4;15487:2;15476:9;15472:18;15464:26;;15536:9;15530:4;15526:20;15522:1;15511:9;15507:17;15500:47;15564:162;15721:4;15712:6;15564:162;:::i;:::-;15556:170;;15252:481;;;;:::o;15739:311::-;15816:4;15906:18;15898:6;15895:30;15892:56;;;15928:18;;:::i;:::-;15892:56;15978:4;15970:6;15966:17;15958:25;;16038:4;16032;16028:15;16020:23;;15739:311;;;:::o;16073:710::-;16169:5;16194:81;16210:64;16267:6;16210:64;:::i;:::-;16194:81;:::i;:::-;16185:90;;16295:5;16324:6;16317:5;16310:21;16358:4;16351:5;16347:16;16340:23;;16411:4;16403:6;16399:17;16391:6;16387:30;16440:3;16432:6;16429:15;16426:122;;;16459:79;;:::i;:::-;16426:122;16574:6;16557:220;16591:6;16586:3;16583:15;16557:220;;;16666:3;16695:37;16728:3;16716:10;16695:37;:::i;:::-;16690:3;16683:50;16762:4;16757:3;16753:14;16746:21;;16633:144;16617:4;16612:3;16608:14;16601:21;;16557:220;;;16561:21;16175:608;;16073:710;;;;;:::o;16806:370::-;16877:5;16926:3;16919:4;16911:6;16907:17;16903:27;16893:122;;16934:79;;:::i;:::-;16893:122;17051:6;17038:20;17076:94;17166:3;17158:6;17151:4;17143:6;17139:17;17076:94;:::i;:::-;17067:103;;16883:293;16806:370;;;;:::o;17182:894::-;17300:6;17308;17357:2;17345:9;17336:7;17332:23;17328:32;17325:119;;;17363:79;;:::i;:::-;17325:119;17511:1;17500:9;17496:17;17483:31;17541:18;17533:6;17530:30;17527:117;;;17563:79;;:::i;:::-;17527:117;17668:78;17738:7;17729:6;17718:9;17714:22;17668:78;:::i;:::-;17658:88;;17454:302;17823:2;17812:9;17808:18;17795:32;17854:18;17846:6;17843:30;17840:117;;;17876:79;;:::i;:::-;17840:117;17981:78;18051:7;18042:6;18031:9;18027:22;17981:78;:::i;:::-;17971:88;;17766:303;17182:894;;;;;:::o;18082:114::-;18149:6;18183:5;18177:12;18167:22;;18082:114;;;:::o;18202:184::-;18301:11;18335:6;18330:3;18323:19;18375:4;18370:3;18366:14;18351:29;;18202:184;;;;:::o;18392:132::-;18459:4;18482:3;18474:11;;18512:4;18507:3;18503:14;18495:22;;18392:132;;;:::o;18530:179::-;18599:10;18620:46;18662:3;18654:6;18620:46;:::i;:::-;18698:4;18693:3;18689:14;18675:28;;18530:179;;;;:::o;18715:113::-;18785:4;18817;18812:3;18808:14;18800:22;;18715:113;;;:::o;18864:732::-;18983:3;19012:54;19060:5;19012:54;:::i;:::-;19082:86;19161:6;19156:3;19082:86;:::i;:::-;19075:93;;19192:56;19242:5;19192:56;:::i;:::-;19271:7;19302:1;19287:284;19312:6;19309:1;19306:13;19287:284;;;19388:6;19382:13;19415:63;19474:3;19459:13;19415:63;:::i;:::-;19408:70;;19501:60;19554:6;19501:60;:::i;:::-;19491:70;;19347:224;19334:1;19331;19327:9;19322:14;;19287:284;;;19291:14;19587:3;19580:10;;18988:608;;;18864:732;;;;:::o;19602:373::-;19745:4;19783:2;19772:9;19768:18;19760:26;;19832:9;19826:4;19822:20;19818:1;19807:9;19803:17;19796:47;19860:108;19963:4;19954:6;19860:108;:::i;:::-;19852:116;;19602:373;;;;:::o;19981:116::-;20051:21;20066:5;20051:21;:::i;:::-;20044:5;20041:32;20031:60;;20087:1;20084;20077:12;20031:60;19981:116;:::o;20103:133::-;20146:5;20184:6;20171:20;20162:29;;20200:30;20224:5;20200:30;:::i;:::-;20103:133;;;;:::o;20242:468::-;20307:6;20315;20364:2;20352:9;20343:7;20339:23;20335:32;20332:119;;;20370:79;;:::i;:::-;20332:119;20490:1;20515:53;20560:7;20551:6;20540:9;20536:22;20515:53;:::i;:::-;20505:63;;20461:117;20617:2;20643:50;20685:7;20676:6;20665:9;20661:22;20643:50;:::i;:::-;20633:60;;20588:115;20242:468;;;;;:::o;20716:474::-;20784:6;20792;20841:2;20829:9;20820:7;20816:23;20812:32;20809:119;;;20847:79;;:::i;:::-;20809:119;20967:1;20992:53;21037:7;21028:6;21017:9;21013:22;20992:53;:::i;:::-;20982:63;;20938:117;21094:2;21120:53;21165:7;21156:6;21145:9;21141:22;21120:53;:::i;:::-;21110:63;;21065:118;20716:474;;;;;:::o;21196:1089::-;21300:6;21308;21316;21324;21332;21381:3;21369:9;21360:7;21356:23;21352:33;21349:120;;;21388:79;;:::i;:::-;21349:120;21508:1;21533:53;21578:7;21569:6;21558:9;21554:22;21533:53;:::i;:::-;21523:63;;21479:117;21635:2;21661:53;21706:7;21697:6;21686:9;21682:22;21661:53;:::i;:::-;21651:63;;21606:118;21763:2;21789:53;21834:7;21825:6;21814:9;21810:22;21789:53;:::i;:::-;21779:63;;21734:118;21891:2;21917:53;21962:7;21953:6;21942:9;21938:22;21917:53;:::i;:::-;21907:63;;21862:118;22047:3;22036:9;22032:19;22019:33;22079:18;22071:6;22068:30;22065:117;;;22101:79;;:::i;:::-;22065:117;22206:62;22260:7;22251:6;22240:9;22236:22;22206:62;:::i;:::-;22196:72;;21990:288;21196:1089;;;;;;;;:::o;22291:619::-;22368:6;22376;22384;22433:2;22421:9;22412:7;22408:23;22404:32;22401:119;;;22439:79;;:::i;:::-;22401:119;22559:1;22584:53;22629:7;22620:6;22609:9;22605:22;22584:53;:::i;:::-;22574:63;;22530:117;22686:2;22712:53;22757:7;22748:6;22737:9;22733:22;22712:53;:::i;:::-;22702:63;;22657:118;22814:2;22840:53;22885:7;22876:6;22865:9;22861:22;22840:53;:::i;:::-;22830:63;;22785:118;22291:619;;;;;:::o;22916:229::-;23056:34;23052:1;23044:6;23040:14;23033:58;23125:12;23120:2;23112:6;23108:15;23101:37;22916:229;:::o;23151:366::-;23293:3;23314:67;23378:2;23373:3;23314:67;:::i;:::-;23307:74;;23390:93;23479:3;23390:93;:::i;:::-;23508:2;23503:3;23499:12;23492:19;;23151:366;;;:::o;23523:419::-;23689:4;23727:2;23716:9;23712:18;23704:26;;23776:9;23770:4;23766:20;23762:1;23751:9;23747:17;23740:47;23804:131;23930:4;23804:131;:::i;:::-;23796:139;;23523:419;;;:::o;23948:180::-;23996:77;23993:1;23986:88;24093:4;24090:1;24083:15;24117:4;24114:1;24107:15;24134:320;24178:6;24215:1;24209:4;24205:12;24195:22;;24262:1;24256:4;24252:12;24283:18;24273:81;;24339:4;24331:6;24327:17;24317:27;;24273:81;24401:2;24393:6;24390:14;24370:18;24367:38;24364:84;;;24420:18;;:::i;:::-;24364:84;24185:269;24134:320;;;:::o;24460:234::-;24600:34;24596:1;24588:6;24584:14;24577:58;24669:17;24664:2;24656:6;24652:15;24645:42;24460:234;:::o;24700:366::-;24842:3;24863:67;24927:2;24922:3;24863:67;:::i;:::-;24856:74;;24939:93;25028:3;24939:93;:::i;:::-;25057:2;25052:3;25048:12;25041:19;;24700:366;;;:::o;25072:419::-;25238:4;25276:2;25265:9;25261:18;25253:26;;25325:9;25319:4;25315:20;25311:1;25300:9;25296:17;25289:47;25353:131;25479:4;25353:131;:::i;:::-;25345:139;;25072:419;;;:::o;25497:180::-;25545:77;25542:1;25535:88;25642:4;25639:1;25632:15;25666:4;25663:1;25656:15;25683:348;25723:7;25746:20;25764:1;25746:20;:::i;:::-;25741:25;;25780:20;25798:1;25780:20;:::i;:::-;25775:25;;25968:1;25900:66;25896:74;25893:1;25890:81;25885:1;25878:9;25871:17;25867:105;25864:131;;;25975:18;;:::i;:::-;25864:131;26023:1;26020;26016:9;26005:20;;25683:348;;;;:::o;26037:180::-;26085:77;26082:1;26075:88;26182:4;26179:1;26172:15;26206:4;26203:1;26196:15;26223:185;26263:1;26280:20;26298:1;26280:20;:::i;:::-;26275:25;;26314:20;26332:1;26314:20;:::i;:::-;26309:25;;26353:1;26343:35;;26358:18;;:::i;:::-;26343:35;26400:1;26397;26393:9;26388:14;;26223:185;;;;:::o;26414:147::-;26515:11;26552:3;26537:18;;26414:147;;;;:::o;26567:114::-;;:::o;26687:398::-;26846:3;26867:83;26948:1;26943:3;26867:83;:::i;:::-;26860:90;;26959:93;27048:3;26959:93;:::i;:::-;27077:1;27072:3;27068:11;27061:18;;26687:398;;;:::o;27091:379::-;27275:3;27297:147;27440:3;27297:147;:::i;:::-;27290:154;;27461:3;27454:10;;27091:379;;;:::o;27476:168::-;27616:20;27612:1;27604:6;27600:14;27593:44;27476:168;:::o;27650:366::-;27792:3;27813:67;27877:2;27872:3;27813:67;:::i;:::-;27806:74;;27889:93;27978:3;27889:93;:::i;:::-;28007:2;28002:3;27998:12;27991:19;;27650:366;;;:::o;28022:419::-;28188:4;28226:2;28215:9;28211:18;28203:26;;28275:9;28269:4;28265:20;28261:1;28250:9;28246:17;28239:47;28303:131;28429:4;28303:131;:::i;:::-;28295:139;;28022:419;;;:::o;28447:233::-;28486:3;28509:24;28527:5;28509:24;:::i;:::-;28500:33;;28555:66;28548:5;28545:77;28542:103;;;28625:18;;:::i;:::-;28542:103;28672:1;28665:5;28661:13;28654:20;;28447:233;;;:::o;28686:180::-;28734:77;28731:1;28724:88;28831:4;28828:1;28821:15;28855:4;28852:1;28845:15;28872:228;29012:34;29008:1;29000:6;28996:14;28989:58;29081:11;29076:2;29068:6;29064:15;29057:36;28872:228;:::o;29106:366::-;29248:3;29269:67;29333:2;29328:3;29269:67;:::i;:::-;29262:74;;29345:93;29434:3;29345:93;:::i;:::-;29463:2;29458:3;29454:12;29447:19;;29106:366;;;:::o;29478:419::-;29644:4;29682:2;29671:9;29667:18;29659:26;;29731:9;29725:4;29721:20;29717:1;29706:9;29702:17;29695:47;29759:131;29885:4;29759:131;:::i;:::-;29751:139;;29478:419;;;:::o;29903:167::-;30043:19;30039:1;30031:6;30027:14;30020:43;29903:167;:::o;30076:366::-;30218:3;30239:67;30303:2;30298:3;30239:67;:::i;:::-;30232:74;;30315:93;30404:3;30315:93;:::i;:::-;30433:2;30428:3;30424:12;30417:19;;30076:366;;;:::o;30448:419::-;30614:4;30652:2;30641:9;30637:18;30629:26;;30701:9;30695:4;30691:20;30687:1;30676:9;30672:17;30665:47;30729:131;30855:4;30729:131;:::i;:::-;30721:139;;30448:419;;;:::o;30873:305::-;30913:3;30932:20;30950:1;30932:20;:::i;:::-;30927:25;;30966:20;30984:1;30966:20;:::i;:::-;30961:25;;31120:1;31052:66;31048:74;31045:1;31042:81;31039:107;;;31126:18;;:::i;:::-;31039:107;31170:1;31167;31163:9;31156:16;;30873:305;;;;:::o;31184:162::-;31324:14;31320:1;31312:6;31308:14;31301:38;31184:162;:::o;31352:366::-;31494:3;31515:67;31579:2;31574:3;31515:67;:::i;:::-;31508:74;;31591:93;31680:3;31591:93;:::i;:::-;31709:2;31704:3;31700:12;31693:19;;31352:366;;;:::o;31724:419::-;31890:4;31928:2;31917:9;31913:18;31905:26;;31977:9;31971:4;31967:20;31963:1;31952:9;31948:17;31941:47;32005:131;32131:4;32005:131;:::i;:::-;31997:139;;31724:419;;;:::o;32149:166::-;32289:18;32285:1;32277:6;32273:14;32266:42;32149:166;:::o;32321:366::-;32463:3;32484:67;32548:2;32543:3;32484:67;:::i;:::-;32477:74;;32560:93;32649:3;32560:93;:::i;:::-;32678:2;32673:3;32669:12;32662:19;;32321:366;;;:::o;32693:419::-;32859:4;32897:2;32886:9;32882:18;32874:26;;32946:9;32940:4;32936:20;32932:1;32921:9;32917:17;32910:47;32974:131;33100:4;32974:131;:::i;:::-;32966:139;;32693:419;;;:::o;33118:225::-;33258:34;33254:1;33246:6;33242:14;33235:58;33327:8;33322:2;33314:6;33310:15;33303:33;33118:225;:::o;33349:366::-;33491:3;33512:67;33576:2;33571:3;33512:67;:::i;:::-;33505:74;;33588:93;33677:3;33588:93;:::i;:::-;33706:2;33701:3;33697:12;33690:19;;33349:366;;;:::o;33721:419::-;33887:4;33925:2;33914:9;33910:18;33902:26;;33974:9;33968:4;33964:20;33960:1;33949:9;33945:17;33938:47;34002:131;34128:4;34002:131;:::i;:::-;33994:139;;33721:419;;;:::o;34146:182::-;34286:34;34282:1;34274:6;34270:14;34263:58;34146:182;:::o;34334:366::-;34476:3;34497:67;34561:2;34556:3;34497:67;:::i;:::-;34490:74;;34573:93;34662:3;34573:93;:::i;:::-;34691:2;34686:3;34682:12;34675:19;;34334:366;;;:::o;34706:419::-;34872:4;34910:2;34899:9;34895:18;34887:26;;34959:9;34953:4;34949:20;34945:1;34934:9;34930:17;34923:47;34987:131;35113:4;34987:131;:::i;:::-;34979:139;;34706:419;;;:::o;35131:227::-;35271:34;35267:1;35259:6;35255:14;35248:58;35340:10;35335:2;35327:6;35323:15;35316:35;35131:227;:::o;35364:366::-;35506:3;35527:67;35591:2;35586:3;35527:67;:::i;:::-;35520:74;;35603:93;35692:3;35603:93;:::i;:::-;35721:2;35716:3;35712:12;35705:19;;35364:366;;;:::o;35736:419::-;35902:4;35940:2;35929:9;35925:18;35917:26;;35989:9;35983:4;35979:20;35975:1;35964:9;35960:17;35953:47;36017:131;36143:4;36017:131;:::i;:::-;36009:139;;35736:419;;;:::o;36161:224::-;36301:34;36297:1;36289:6;36285:14;36278:58;36370:7;36365:2;36357:6;36353:15;36346:32;36161:224;:::o;36391:366::-;36533:3;36554:67;36618:2;36613:3;36554:67;:::i;:::-;36547:74;;36630:93;36719:3;36630:93;:::i;:::-;36748:2;36743:3;36739:12;36732:19;;36391:366;;;:::o;36763:419::-;36929:4;36967:2;36956:9;36952:18;36944:26;;37016:9;37010:4;37006:20;37002:1;36991:9;36987:17;36980:47;37044:131;37170:4;37044:131;:::i;:::-;37036:139;;36763:419;;;:::o;37188:229::-;37328:34;37324:1;37316:6;37312:14;37305:58;37397:12;37392:2;37384:6;37380:15;37373:37;37188:229;:::o;37423:366::-;37565:3;37586:67;37650:2;37645:3;37586:67;:::i;:::-;37579:74;;37662:93;37751:3;37662:93;:::i;:::-;37780:2;37775:3;37771:12;37764:19;;37423:366;;;:::o;37795:419::-;37961:4;37999:2;37988:9;37984:18;37976:26;;38048:9;38042:4;38038:20;38034:1;38023:9;38019:17;38012:47;38076:131;38202:4;38076:131;:::i;:::-;38068:139;;37795:419;;;:::o;38220:634::-;38441:4;38479:2;38468:9;38464:18;38456:26;;38528:9;38522:4;38518:20;38514:1;38503:9;38499:17;38492:47;38556:108;38659:4;38650:6;38556:108;:::i;:::-;38548:116;;38711:9;38705:4;38701:20;38696:2;38685:9;38681:18;38674:48;38739:108;38842:4;38833:6;38739:108;:::i;:::-;38731:116;;38220:634;;;;;:::o;38860:191::-;38900:4;38920:20;38938:1;38920:20;:::i;:::-;38915:25;;38954:20;38972:1;38954:20;:::i;:::-;38949:25;;38993:1;38990;38987:8;38984:34;;;38998:18;;:::i;:::-;38984:34;39043:1;39040;39036:9;39028:17;;38860:191;;;;:::o;39057:94::-;39090:8;39138:5;39134:2;39130:14;39109:35;;39057:94;;;:::o;39157:::-;39196:7;39225:20;39239:5;39225:20;:::i;:::-;39214:31;;39157:94;;;:::o;39257:100::-;39296:7;39325:26;39345:5;39325:26;:::i;:::-;39314:37;;39257:100;;;:::o;39363:157::-;39468:45;39488:24;39506:5;39488:24;:::i;:::-;39468:45;:::i;:::-;39463:3;39456:58;39363:157;;:::o;39526:79::-;39565:7;39594:5;39583:16;;39526:79;;;:::o;39611:157::-;39716:45;39736:24;39754:5;39736:24;:::i;:::-;39716:45;:::i;:::-;39711:3;39704:58;39611:157;;:::o;39774:679::-;39970:3;39985:75;40056:3;40047:6;39985:75;:::i;:::-;40085:2;40080:3;40076:12;40069:19;;40098:75;40169:3;40160:6;40098:75;:::i;:::-;40198:2;40193:3;40189:12;40182:19;;40211:75;40282:3;40273:6;40211:75;:::i;:::-;40311:2;40306:3;40302:12;40295:19;;40324:75;40395:3;40386:6;40324:75;:::i;:::-;40424:2;40419:3;40415:12;40408:19;;40444:3;40437:10;;39774:679;;;;;;;:::o;40459:176::-;40491:1;40508:20;40526:1;40508:20;:::i;:::-;40503:25;;40542:20;40560:1;40542:20;:::i;:::-;40537:25;;40581:1;40571:35;;40586:18;;:::i;:::-;40571:35;40627:1;40624;40620:9;40615:14;;40459:176;;;;:::o;40641:220::-;40781:34;40777:1;40769:6;40765:14;40758:58;40850:3;40845:2;40837:6;40833:15;40826:28;40641:220;:::o;40867:366::-;41009:3;41030:67;41094:2;41089:3;41030:67;:::i;:::-;41023:74;;41106:93;41195:3;41106:93;:::i;:::-;41224:2;41219:3;41215:12;41208:19;;40867:366;;;:::o;41239:419::-;41405:4;41443:2;41432:9;41428:18;41420:26;;41492:9;41486:4;41482:20;41478:1;41467:9;41463:17;41456:47;41520:131;41646:4;41520:131;:::i;:::-;41512:139;;41239:419;;;:::o;41664:332::-;41785:4;41823:2;41812:9;41808:18;41800:26;;41836:71;41904:1;41893:9;41889:17;41880:6;41836:71;:::i;:::-;41917:72;41985:2;41974:9;41970:18;41961:6;41917:72;:::i;:::-;41664:332;;;;;:::o;42002:228::-;42142:34;42138:1;42130:6;42126:14;42119:58;42211:11;42206:2;42198:6;42194:15;42187:36;42002:228;:::o;42236:366::-;42378:3;42399:67;42463:2;42458:3;42399:67;:::i;:::-;42392:74;;42475:93;42564:3;42475:93;:::i;:::-;42593:2;42588:3;42584:12;42577:19;;42236:366;;;:::o;42608:419::-;42774:4;42812:2;42801:9;42797:18;42789:26;;42861:9;42855:4;42851:20;42847:1;42836:9;42832:17;42825:47;42889:131;43015:4;42889:131;:::i;:::-;42881:139;;42608:419;;;:::o;43033:222::-;43173:34;43169:1;43161:6;43157:14;43150:58;43242:5;43237:2;43229:6;43225:15;43218:30;43033:222;:::o;43261:366::-;43403:3;43424:67;43488:2;43483:3;43424:67;:::i;:::-;43417:74;;43500:93;43589:3;43500:93;:::i;:::-;43618:2;43613:3;43609:12;43602:19;;43261:366;;;:::o;43633:419::-;43799:4;43837:2;43826:9;43822:18;43814:26;;43886:9;43880:4;43876:20;43872:1;43861:9;43857:17;43850:47;43914:131;44040:4;43914:131;:::i;:::-;43906:139;;43633:419;;;:::o;44058:223::-;44198:34;44194:1;44186:6;44182:14;44175:58;44267:6;44262:2;44254:6;44250:15;44243:31;44058:223;:::o;44287:366::-;44429:3;44450:67;44514:2;44509:3;44450:67;:::i;:::-;44443:74;;44526:93;44615:3;44526:93;:::i;:::-;44644:2;44639:3;44635:12;44628:19;;44287:366;;;:::o;44659:419::-;44825:4;44863:2;44852:9;44848:18;44840:26;;44912:9;44906:4;44902:20;44898:1;44887:9;44883:17;44876:47;44940:131;45066:4;44940:131;:::i;:::-;44932:139;;44659:419;;;:::o;45084:98::-;45135:6;45169:5;45163:12;45153:22;;45084:98;;;:::o;45188:168::-;45271:11;45305:6;45300:3;45293:19;45345:4;45340:3;45336:14;45321:29;;45188:168;;;;:::o;45362:360::-;45448:3;45476:38;45508:5;45476:38;:::i;:::-;45530:70;45593:6;45588:3;45530:70;:::i;:::-;45523:77;;45609:52;45654:6;45649:3;45642:4;45635:5;45631:16;45609:52;:::i;:::-;45686:29;45708:6;45686:29;:::i;:::-;45681:3;45677:39;45670:46;;45452:270;45362:360;;;;:::o;45728:1053::-;46051:4;46089:3;46078:9;46074:19;46066:27;;46103:71;46171:1;46160:9;46156:17;46147:6;46103:71;:::i;:::-;46184:72;46252:2;46241:9;46237:18;46228:6;46184:72;:::i;:::-;46303:9;46297:4;46293:20;46288:2;46277:9;46273:18;46266:48;46331:108;46434:4;46425:6;46331:108;:::i;:::-;46323:116;;46486:9;46480:4;46476:20;46471:2;46460:9;46456:18;46449:48;46514:108;46617:4;46608:6;46514:108;:::i;:::-;46506:116;;46670:9;46664:4;46660:20;46654:3;46643:9;46639:19;46632:49;46698:76;46769:4;46760:6;46698:76;:::i;:::-;46690:84;;45728:1053;;;;;;;;:::o;46787:141::-;46843:5;46874:6;46868:13;46859:22;;46890:32;46916:5;46890:32;:::i;:::-;46787:141;;;;:::o;46934:349::-;47003:6;47052:2;47040:9;47031:7;47027:23;47023:32;47020:119;;;47058:79;;:::i;:::-;47020:119;47178:1;47203:63;47258:7;47249:6;47238:9;47234:22;47203:63;:::i;:::-;47193:73;;47149:127;46934:349;;;;:::o;47289:106::-;47333:8;47382:5;47377:3;47373:15;47352:36;;47289:106;;;:::o;47401:183::-;47436:3;47474:1;47456:16;47453:23;47450:128;;;47512:1;47509;47506;47491:23;47534:34;47565:1;47559:8;47534:34;:::i;:::-;47527:41;;47450:128;47401:183;:::o;47590:711::-;47629:3;47667:4;47649:16;47646:26;47643:39;;;47675:5;;47643:39;47704:20;;:::i;:::-;47779:1;47761:16;47757:24;47754:1;47748:4;47733:49;47812:4;47806:11;47911:16;47904:4;47896:6;47892:17;47889:39;47856:18;47848:6;47845:30;47829:113;47826:146;;;47957:5;;;;47826:146;48003:6;47997:4;47993:17;48039:3;48033:10;48066:18;48058:6;48055:30;48052:43;;;48088:5;;;;;;48052:43;48136:6;48129:4;48124:3;48120:14;48116:27;48195:1;48177:16;48173:24;48167:4;48163:35;48158:3;48155:44;48152:57;;;48202:5;;;;;;;48152:57;48219;48267:6;48261:4;48257:17;48249:6;48245:30;48239:4;48219:57;:::i;:::-;48292:3;48285:10;;47633:668;;;;;47590:711;;:::o;48307:239::-;48447:34;48443:1;48435:6;48431:14;48424:58;48516:22;48511:2;48503:6;48499:15;48492:47;48307:239;:::o;48552:366::-;48694:3;48715:67;48779:2;48774:3;48715:67;:::i;:::-;48708:74;;48791:93;48880:3;48791:93;:::i;:::-;48909:2;48904:3;48900:12;48893:19;;48552:366;;;:::o;48924:419::-;49090:4;49128:2;49117:9;49113:18;49105:26;;49177:9;49171:4;49167:20;49163:1;49152:9;49148:17;49141:47;49205:131;49331:4;49205:131;:::i;:::-;49197:139;;48924:419;;;:::o;49349:227::-;49489:34;49485:1;49477:6;49473:14;49466:58;49558:10;49553:2;49545:6;49541:15;49534:35;49349:227;:::o;49582:366::-;49724:3;49745:67;49809:2;49804:3;49745:67;:::i;:::-;49738:74;;49821:93;49910:3;49821:93;:::i;:::-;49939:2;49934:3;49930:12;49923:19;;49582:366;;;:::o;49954:419::-;50120:4;50158:2;50147:9;50143:18;50135:26;;50207:9;50201:4;50197:20;50193:1;50182:9;50178:17;50171:47;50235:131;50361:4;50235:131;:::i;:::-;50227:139;;49954:419;;;:::o;50379:751::-;50602:4;50640:3;50629:9;50625:19;50617:27;;50654:71;50722:1;50711:9;50707:17;50698:6;50654:71;:::i;:::-;50735:72;50803:2;50792:9;50788:18;50779:6;50735:72;:::i;:::-;50817;50885:2;50874:9;50870:18;50861:6;50817:72;:::i;:::-;50899;50967:2;50956:9;50952:18;50943:6;50899:72;:::i;:::-;51019:9;51013:4;51009:20;51003:3;50992:9;50988:19;50981:49;51047:76;51118:4;51109:6;51047:76;:::i;:::-;51039:84;;50379:751;;;;;;;;:::o

Swarm Source

ipfs://d2a4da6e7ac321ff55bddfb81e0e58b2c6ed6fdf2824655b4dc0081f9e8e932b
Loading