ETH Price: $3,388.96 (-2.03%)
Gas: 6 Gwei

Token

SNEX (SNEX)
 

Overview

Max Total Supply

5,000 SNEX

Holders

75

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Filtered by Token Holder
freecookies.eth
Balance
1 SNEX
0x66d8f275b22e0d1f9482f3f55be8424b5777f557
Loading...
Loading
Loading...
Loading
Loading...
Loading

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

Contract Source Code Verified (Exact Match)

Contract Name:
SNEX

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: CC-BY-4.0
/*
▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄
██░▄▄▄░██░▀██░██░▄▄▄█▄▀█▀▄██
██▄▄▄▀▀██░█░█░██░▄▄▄███░████
██░▀▀▀░██░██▄░██░▀▀▀█▀▄█▄▀██
▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀

v1.00 - 2023

written by Ariel Sebastián Becker

NOTICE
======

This is a custom contract, tailored and pruned to fit Spurious Dragon's limit of 24,576 bytes.
Because of that, you will see some modifications made to third-party libraries such as OpenZeppelin's.

THIS SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.

*/
pragma solidity ^0.8.17;

string constant _strReverted = 'Unable to send value; recipient may have reverted!';
string constant _strLowCallFailed = 'Low-level call failed.';
string constant _strNonContract = 'Call to non-contract.';
string constant _strDelegateCallFailed = 'Low-level delegate call failed.';
string constant _strDelegateCallNonContract = 'Low-level delegate call to non-contract.';
string constant _strBalanceZeroAddy = 'Balance query for the zero address.';
string constant _strTransferZeroAddy = 'Cannot transfer to the zero address!';
string constant _strNotAuthorized = 'Not authorized!';
string constant _strTransferFailed = 'Transfer failed.';
string constant _strOutOfBounds = 'Out of bounds!';
string constant _strPaused = 'Contract is paused.';
string constant _strNotEnoughBalance = 'Insufficient balance!';
string constant _strTransferToNon721 = 'Attempted transfer to non ERC721Receiver implementer!';
string constant _strTokenName = 'SNEX';
string constant _strTokenTicker = 'SNEX';
string constant _strInvalidMultiproof = 'Invalid multiproof.';
string constant _strNotAllowlist = 'Not in allowlist!';
string constant _strPresaleFinished = 'Presale finished!';
string constant _strInPresale = 'Public sale not enabled yet!';
string constant _strJSONName = '"name": "';
string constant _strJSONDescription = '"description": "';

pragma solidity ^0.8.17;
interface IERC165 {
	function supportsInterface(bytes4 interfaceId) external view returns(bool);
}

pragma solidity ^0.8.17;
interface IERC721 is IERC165 {
	event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
	event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
	event ApprovalForAll(address indexed owner, address indexed operator, bool approved);

	function balanceOf(address owner) external view returns(uint256 balance);
	function ownerOf(uint256 tokenId) external view returns(address owner);
	function safeTransferFrom(address from, address to, uint256 tokenId) external;
	function transferFrom(address from, address to, uint256 tokenId) external;
	function approve(address to, uint256 tokenId) external;
	function getApproved(uint256 tokenId) external view returns(address operator);
	function setApprovalForAll(address operator, bool _approved) external;
	function isApprovedForAll(address owner, address operator) external view returns(bool);
	function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
}

pragma solidity ^0.8.17;
interface IERC721Receiver {
	function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns(bytes4);
}

pragma solidity ^0.8.17;
library Address {

	function isContract(address account) internal view returns(bool) {
		uint256 size;
		assembly {
			size := extcodesize(account)
		}
		return size > 0;
	}

	function sendValue(address payable recipient, uint256 amount) internal {
		require(address(this).balance >= amount, _strNotEnoughBalance);
		(bool success, ) = recipient.call{value: amount}('');
		require(success, _strReverted);
	}

	function functionCall(address target, bytes memory data) internal returns(bytes memory) {
		return functionCall(target, data, _strLowCallFailed);
	}

	function functionCall(address target, bytes memory data, string memory errorMessage) internal returns(bytes memory) {
		return functionCallWithValue(target, data, 0, errorMessage);
	}

	function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns(bytes memory) {
		return functionCallWithValue(target, data, value, _strLowCallFailed);
	}

	function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns(bytes memory) {
		require(address(this).balance >= value, _strNotEnoughBalance);
		require(isContract(target), _strNonContract);
		(bool success, bytes memory returndata) = target.call{value: value}(data);
		return verifyCallResult(success, returndata, errorMessage);
	}

	function functionStaticCall(address target, bytes memory data) internal view returns(bytes memory) {
		return functionStaticCall(target, data, _strLowCallFailed);
	}

	function functionStaticCall( address target, bytes memory data, string memory errorMessage) internal view returns(bytes memory) {
		require(isContract(target), _strNonContract);
		(bool success, bytes memory returndata) = target.staticcall(data);
		return verifyCallResult(success, returndata, errorMessage);
	}

	function functionDelegateCall(address target, bytes memory data) internal returns(bytes memory) {
		return functionDelegateCall(target, data, _strDelegateCallFailed);
	}

	function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns(bytes memory) {
		require(isContract(target), _strDelegateCallNonContract);
		(bool success, bytes memory returndata) = target.delegatecall(data);
		return verifyCallResult(success, returndata, errorMessage);
	}

	function verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) internal pure returns(bytes memory) {
		if(success) {
			return returndata;
		}
		else {
			if(returndata.length > 0) {
				assembly {
					let returndata_size := mload(returndata)
					revert(add(32, returndata), returndata_size)
				}
			}
			else {
				revert(errorMessage);
			}
		}
	}
}

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

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

pragma solidity ^0.8.17;
library Strings {
	bytes16 private constant _SYMBOLS = '0123456789abcdef';
	uint8 private constant _ADDRESS_LENGTH = 20;

	function toString(uint256 value) internal pure returns(string memory) {
		if(value == 0) {
			return '0';
		}
		uint256 temp = value;
		uint256 digits;
		while (temp != 0) {
			digits++;
			temp /= 10;
		}
		bytes memory buffer = new bytes(digits);
		while (value != 0) {
			digits -= 1;
			buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
			value /= 10;
		}
		return string(buffer);
	}

	function toHexString(uint256 value, uint256 length) internal pure returns(string memory) {
		bytes memory buffer = new bytes(2 * length + 2);
		buffer[0] = '0';
		buffer[1] = 'x';
		for(uint256 i = 2 * length + 1; i > 1; --i) {
			buffer[i] = _SYMBOLS[value & 0xf];
			value >>= 4;
		}

		return string(buffer);
	}

	function toHexString(address addr) internal pure returns(string memory) {
		return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH);
	}

	function stringLength(string memory s) internal pure returns(uint256) {
		return bytes(s).length;
	}
}

pragma solidity ^0.8.17;
abstract contract ERC165 is IERC165 {
	function supportsInterface(bytes4 interfaceId) public view virtual override returns(bool) {
		return interfaceId == type(IERC165).interfaceId;
	}
}

pragma solidity ^0.8.17;
contract ERC721 is Context, ERC165, IERC721 {
	using Address for address;
	using Strings for uint256;

	mapping(uint256 => address) private _owners;
	mapping(address => uint256) private _balances;
	mapping(uint256 => address) private _tokenApprovals;
	mapping(address => mapping(address => bool)) private _operatorApprovals;

	function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns(bool) {
		return
		interfaceId == type(IERC721).interfaceId ||
		super.supportsInterface(interfaceId);
	}

	function balanceOf(address owner) public view virtual override returns(uint256) {
		require(owner != address(0), _strBalanceZeroAddy);
		return _balances[owner];
	}

	function ownerOf(uint256 tokenId) public view virtual override returns(address) {
		address owner = _owners[tokenId];
		require(owner != address(0), _strOutOfBounds);
		return owner;
	}

	function approve(address to, uint256 tokenId) public virtual override {
		address owner = ERC721.ownerOf(tokenId);
		require(to != owner, _strNotAuthorized);
		require(
			_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
				_strNotAuthorized
		);
		_approve(to, tokenId);
	}

	function getApproved(uint256 tokenId) public view virtual override returns(address) {
		require(_exists(tokenId), _strOutOfBounds);
		return _tokenApprovals[tokenId];
	}

	function setApprovalForAll(address operator, bool approved) public virtual override {
		require(operator != _msgSender(), _strNotAuthorized);
		_operatorApprovals[_msgSender()][operator] = approved;
		emit ApprovalForAll(_msgSender(), operator, approved);
	}

	function isApprovedForAll(address owner, address operator) public view virtual override returns(bool) {
		return _operatorApprovals[owner][operator];
	}

	function transferFrom(address from, address to, uint256 tokenId) public virtual override {
		require(_isApprovedOrOwner(_msgSender(), tokenId), _strNotAuthorized);
		_transfer(from, to, tokenId);
	}

	function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override {
		safeTransferFrom(from, to, tokenId, '');
	}

	function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override {
		require(_isApprovedOrOwner(_msgSender(), tokenId), _strNotAuthorized);
		_safeTransfer(from, to, tokenId, _data);
	}

	function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual {
		_transfer(from, to, tokenId);
		require(_checkOnERC721Received(from, to, tokenId, _data), _strTransferToNon721);
	}

	function _exists(uint256 tokenId) internal view virtual returns(bool) {
		return _owners[tokenId] != address(0);
	}

	function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns(bool) {
		require(_exists(tokenId), _strOutOfBounds);
		address owner = ERC721.ownerOf(tokenId);
		return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender));
	}

	function _safeMint(address to, uint256 tokenId) internal virtual {
		_safeMint(to, tokenId, '');
	}

	function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual {
		_mint(to, tokenId);
		require(
			_checkOnERC721Received(address(0), to, tokenId, _data),
				_strTransferToNon721
		);
	}

	function _mint(address to, uint256 tokenId) internal virtual {
		require(!_exists(tokenId), _strOutOfBounds);
		_balances[to] += 1;
		_owners[tokenId] = to;
		emit Transfer(address(0), to, tokenId);
	}

	function _transfer(address from, address to, uint256 tokenId) internal virtual {
		require(ERC721.ownerOf(tokenId) == from, _strNotAuthorized);
		require(to != address(0), _strTransferZeroAddy);
		require(_exists(tokenId), _strOutOfBounds);
		_approve(address(0), tokenId);
		_balances[from] -= 1;
		_balances[to] += 1;
		_owners[tokenId] = to;
		emit Transfer(from, to, tokenId);
	}

	function _approve(address to, uint256 tokenId) internal virtual {
		_tokenApprovals[tokenId] = to;
		emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
	}

	function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns(bool) {
		if(to.isContract()) {
			try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns(bytes4 retval) {
				return retval == IERC721Receiver.onERC721Received.selector;
			} catch (bytes memory reason) {
				if(reason.length == 0) {
					revert(_strTransferToNon721);
				} else {
					assembly {
						revert(add(32, reason), mload(reason))
					}
				}
			}
		}
		else {
			return true;
		}
	}
}

pragma solidity ^0.8.17;
interface IERC4906 is IERC165, IERC721 {
	/// @dev This event emits when the metadata of a token is changed.
	/// So that the third-party platforms such as NFT market could
	/// timely update the images and related attributes of the NFT.
	event MetadataUpdate(uint256 _tokenId);

	/// @dev This event emits when the metadata of a range of tokens is changed.
	/// So that the third-party platforms such as NFT market could
	/// timely update the images and related attributes of the NFTs.
	event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId);
}

pragma solidity ^0.8.17;
contract Ownable {
	string public constant NOT_CURRENT_OWNER = '018001';
	string public constant CANNOT_TRANSFER_TO_ZERO_ADDRESS = '018002';
	address public owner;
	event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

	constructor() {
		owner = msg.sender;
	}

	modifier onlyOwner() {
		require(msg.sender == owner, NOT_CURRENT_OWNER);
		_;
	}

	function transferOwnership(address _newOwner) public onlyOwner {
		require(_newOwner != address(0), CANNOT_TRANSFER_TO_ZERO_ADDRESS);
		emit OwnershipTransferred(owner, _newOwner);
		owner = _newOwner;
	}
}

pragma solidity ^0.8.17;
library Base64 {
	string internal constant _TABLE = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';

	function encode(bytes memory data) internal pure returns(string memory) {
		if(data.length == 0) return '';
		string memory table = _TABLE;
		string memory result = new string(4 * ((data.length + 2) / 3));

		assembly {
			let tablePtr := add(table, 1)
			let resultPtr := add(result, 32)
			for {
				let dataPtr := data
				let endPtr := add(data, mload(data))
			} lt(dataPtr, endPtr) {

			} {
				dataPtr := add(dataPtr, 3)
				let input := mload(dataPtr)
				mstore8(resultPtr, mload(add(tablePtr, and(shr(18, input), 0x3F))))
				resultPtr := add(resultPtr, 1) // Advance
				mstore8(resultPtr, mload(add(tablePtr, and(shr(12, input), 0x3F))))
				resultPtr := add(resultPtr, 1) // Advance
				mstore8(resultPtr, mload(add(tablePtr, and(shr(6, input), 0x3F))))
				resultPtr := add(resultPtr, 1) // Advance
				mstore8(resultPtr, mload(add(tablePtr, and(input, 0x3F))))
				resultPtr := add(resultPtr, 1) // Advance
			}

			switch mod(mload(data), 3)
			case 1 {
				mstore8(sub(resultPtr, 1), 0x3d)
				mstore8(sub(resultPtr, 2), 0x3d)
			}
			case 2 {
				mstore8(sub(resultPtr, 1), 0x3d)
			}
		}

		return result;
	}
}

pragma solidity ^0.8.17;

/**
 * @dev Tailored and pruned.
 */
library MerkleProof {
	function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
		return processProof(proof, leaf) == root;
	}

	function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
		bytes32 computedHash = leaf;
		for(uint256 i = 0; i < proof.length; i++) {
			computedHash = _hashPair(computedHash, proof[i]);
		}
		return computedHash;
	}

	function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
		bytes32 computedHash = leaf;
		for(uint256 i = 0; i < proof.length; i++) {
			computedHash = _hashPair(computedHash, proof[i]);
		}
		return computedHash;
	}

	function processMultiProof(bytes32[] memory proof, bool[] memory proofFlags, bytes32[] memory leaves) internal pure returns (bytes32 merkleRoot) {
		uint256 leavesLen = leaves.length;
		uint256 totalHashes = proofFlags.length;

		require(leavesLen + proof.length - 1 == totalHashes, _strInvalidMultiproof);

		bytes32[] memory hashes = new bytes32[](totalHashes);
		uint256 leafPos = 0;
		uint256 hashPos = 0;
		uint256 proofPos = 0;

		for(uint256 i = 0; i < totalHashes; i++) {
			bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
			bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
			hashes[i] = _hashPair(a, b);
		}

		if(totalHashes > 0) {
			return hashes[totalHashes - 1];
		}
		else if(leavesLen > 0) {
			return leaves[0];
		}
		else {
			return proof[0];
		}
	}

	function processMultiProofCalldata(bytes32[] calldata proof, bool[] calldata proofFlags, bytes32[] memory leaves) internal pure returns (bytes32 merkleRoot) {
		uint256 leavesLen = leaves.length;
		uint256 totalHashes = proofFlags.length;

		require(leavesLen + proof.length - 1 == totalHashes, _strInvalidMultiproof);

		bytes32[] memory hashes = new bytes32[](totalHashes);
		uint256 leafPos = 0;
		uint256 hashPos = 0;
		uint256 proofPos = 0;

		for(uint256 i = 0; i < totalHashes; i++) {
			bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
			bytes32 b = proofFlags[i] ? leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++] : proof[proofPos++];
			hashes[i] = _hashPair(a, b);
		}

		if(totalHashes > 0) {
			return hashes[totalHashes - 1];
		}
		else if(leavesLen > 0) {
			return leaves[0];
		}
		else {
			return proof[0];
		}
	}

	function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
		return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
	}

	function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
		/// @solidity memory-safe-assembly
		assembly {
			mstore(0x00, a)
			mstore(0x20, b)
			value := keccak256(0x00, 0x40)
		}
	}
}

pragma solidity ^0.8.17;
contract SNEX is Context, ERC721, IERC4906 {
	using MerkleProof for bytes32[];

	bool private _boolPaused = false;
	bool private _boolAllowList = true;

	bytes32 _allowlistMerkleRoot;

	uint256 private _presaleMintFee = 10000000000000000; //10000000000000000, 0.01 ETH
	uint256 private _publicMintFee = 50000000000000000; //50000000000000000, 0.05 ETH
	uint256 private _mintedTokens = 0;
	uint256 private _maxCap = 5000;
	uint256 private _presaleMaxSales = 1000;
	uint256 private _sellerFeePoints = 750; // 7.5%

	address private _addrContractOwner = 0x4DaE7E6c0Ca196643012cDc526bBc6b445A2ca59;

	string private _strDescription = 'Proof of rich';
	string private _strBaseURI = 'https://proofofrich.com/';
	string private _strExternalURLPrefix = string(abi.encodePacked(_strBaseURI, 'token/'));
	string private _strScript = '';
	string private _strCommonBlack = 'common-black';
	string private _strCommonWhite = 'common-white';
	string private _strCommonBlack2 = 'common-black-common-black';
	string private _strCommonWhite2 = 'common-white-common-white';
	string private _strCommonCommon = 'common-common';
	string private _strCommonCommon2 = 'common-common-common-common';

	string[27] private _strPalette = ['#00a5e3','#8dd7bf','#ff96c5','#ff5768','#ffbf65','#fc6238','#ffd872','#f2d4cc','#e77577','#6c88c4','#c05780','#ff828b','#e7c582','#00b0ba','#0065a2','#00cdac','#ff6f68','#ffdacc','#ff60a8','#cff800','#ff5c77','#4dd091','#ffec59','#ffa23a','#74737a','#ffffff','#292929'];

	string private _strSVGContract = '';
	string private _strSVGPrefix = '';
	string private _strSVGUnrevealed = '';

	string private _strContractJSON = string(abi.encodePacked(
		'{',
			_strJSONName, _strTokenName, '",',
			_strJSONDescription, _strDescription, '",',
			'"symbol": "', _strTokenTicker, '",',
			'"image": "', _strSVGContract, '",',
			'"external_link": "', _strBaseURI, '",',
			'"total_supply": "', Strings.toString(_maxCap),'",',
			'"seller_fee_basis_points": "', Strings.toString(_sellerFeePoints),'",',
			'"fee_recipient": "', Strings.toHexString(_addrContractOwner), '"'
		'}'
	));

	struct TokenProperties {
		bool revealed;
		uint256 rarity;
		uint256[] tokenColors;
	}

	mapping(uint => TokenProperties) private tokenData;

// ==================================================================
//                              MODIFIERS
// ==================================================================

	modifier insideBounds(uint256 tokenId) {
		require(tokenId > 0, _strOutOfBounds);
		require(tokenId <= _mintedTokens, _strOutOfBounds);
		_;
	}

	modifier onlyAdmin {
		require(_msgSender() == _addrContractOwner, _strNotAuthorized);
		_;
	}

	constructor() ERC721() {}
// ==================================================================
//                       AUX INTERNAL FUNCTIONS
// ==================================================================

	function _buildArrayColors(uint256 tokenId) internal view returns(string memory) {
		string memory _retValue = "[";

		for(uint i = 0; i < 4; i++) {
			_retValue = string(abi.encodePacked(_retValue, Strings.toString(tokenData[tokenId].tokenColors[i])));
			if(i < 3) {
				_retValue = string(abi.encodePacked(_retValue, ","));
			}
		}
		_retValue = string(abi.encodePacked(_retValue, "]"));

		return _retValue;
	}

	function _buildHexColor(uint256 _tokenId, uint256 _colorIndex) internal view returns(string memory) {
		return _strPalette[tokenData[_tokenId].tokenColors[_colorIndex]];
	}

	function _buildSVG(uint256 _tokenId) internal view returns(string memory) {
		return string(abi.encodePacked(
			_strSVGPrefix, _buildHexColor(_tokenId, 0), ";fill-opacity:1;stroke-width:2.64583;stroke-linecap:round;stroke-linejoin:round' id='segment1' cx='65.458244' cy='10.460792' r='13.229167' transform='rotate(36.46956)' /><circle style='fill:", _buildHexColor(_tokenId, 1), ";fill-opacity:1;stroke-width:2.64583;stroke-linecap:round;stroke-linejoin:round' id='segment2' cx='69.997108' cy='8.2027063' r='13.229167' transform='rotate(36.46956)' /><circle style='fill:", _buildHexColor(_tokenId, 2), ";fill-opacity:1;stroke-width:2.64583;stroke-linecap:round;stroke-linejoin:round' id='segment3' cx='76.831429' cy='8.6074381' r='13.229167' transform='rotate(36.46956)' /><circle style='fill:", _buildHexColor(_tokenId, 3), ";fill-opacity:1;stroke-width:2.64583;stroke-linecap:round;stroke-linejoin:round' id='segment4' cx='82.556908' cy='11.740624' r='13.229167' transform='rotate(36.46956)' /></svg>"));
	}

	function _ownerBalance(uint256 tokenId) internal view returns(uint256) {
		address owner = ownerOf(tokenId);
		return owner.balance;
	}

	function _getTokenRarity(uint256 _rarity) internal view returns(string memory) {
		string memory retValue = '';
		if(_rarity == 1) {
			retValue = _strCommonBlack;
		}
		else if(_rarity == 2) {
			retValue = _strCommonWhite;
		}
		else if(_rarity == 3) {
			retValue = _strCommonBlack2;
		}
		else if(_rarity == 4) {
			retValue = _strCommonWhite2;
		}
		else if(_rarity == 5) {
			retValue = _strCommonCommon;
		}
		else if(_rarity == 6) {
			retValue = _strCommonCommon2;
		}
		else {
			retValue = 'Unrevealed';
		}

		return retValue;
	}

// ==================================================================
//                       MAIN PUBLIC FUNCTIONS
// ==================================================================

// ------------------------------------------------------------------
//                               GETTERS
// ------------------------------------------------------------------
	/// @dev Returns the URI to the contract's JSON.
	///	 Note: can be a URL or a base64-encoded JSON.
	function contractURI() public view returns(string memory) {
		string memory _retValue = string(
			abi.encodePacked(
				'data:application/json;base64,',
				Base64.encode(abi.encodePacked(_strContractJSON))
			)
		);

		return _retValue;
	}

	/// @dev Generates the token HTML.
	/// @param tokenId Token ID.
	function generateHTML(uint256 tokenId) insideBounds(tokenId) public view returns(string memory) {
		bytes memory html = abi.encodePacked(
			"<!DOCTYPE html><html><head><meta charset='UTF-8' /><style>body{margin: 0;}canvas{background:#000;display:block;}</style></head><body><canvas id='snex'></canvas><script>const tokenId=", Strings.toString(tokenId), ";let minimum=5;let balance=", Strings.toString(_ownerBalance(tokenId)),";if(balance==0){minimum=0}let snakeLength=Math.floor(balance/1000000000000000000)+minimum;if(snakeLength>9995){snakeLength=9995}const tokenColors=", _buildArrayColors(tokenId),";</script><script>", _strScript, "</script></body></html>"
		);

		return string(
			abi.encodePacked(
				'data:text/html;base64,',
				Base64.encode(html)
			)
		);
	}

	/// @dev Returns contract's total minted tokens.
	function mintedTokens() public view returns(uint256) {
		return _mintedTokens;
	}

	/// @dev Returns the contract's name.
	function name() public view returns(string memory) {
		return _strTokenName;
	}

	function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) {
		return interfaceId == bytes4(0x49064906) || super.supportsInterface(interfaceId);
	}

	/// @dev Returns the contract's symbol, or ticker.
	function symbol() public view returns(string memory) {
		return _strTokenTicker;
	}

	/// @dev Returns a base64-encoded JSON that describes the given tokenID
	/// @param tokenId Token ID.
	function tokenURI(uint256 tokenId) insideBounds(tokenId) public view returns(string memory) {
		string memory _strSuffix = '';
		if(tokenData[tokenId].revealed == true) {
			_strSuffix = string(abi.encodePacked(
				'"image": "', _buildSVG(tokenId), '",',
				'"animation_url": "', generateHTML(tokenId), '"'
			));
		}
		else {
			_strSuffix = string(abi.encodePacked(
				'"image": "', _strSVGUnrevealed, '"'
			));
		}
		return string(
			abi.encodePacked(
				'data:application/json;base64,',
				Base64.encode(abi.encodePacked(
					'{',
						_strJSONName, 'SNEX #', Strings.toString(tokenId), '",',
						_strJSONDescription, _strDescription, '",',
						'"external_url": "', _strExternalURLPrefix, Strings.toString(tokenId), '",',
						'"attributes": [',
							'{',
								'"trait_type": "Rarity", ',
								'"value": "', _getTokenRarity(tokenData[tokenId].rarity), '"',
							'}',
						'],',
						_strSuffix,
					'}'
				))
			)
		);
	}

	/// @dev Returns contract's max supply.
	function totalSupply() public view returns(uint256) {
		return _maxCap;
	}

// ------------------------------------------------------------------
//                               SETTERS
// ------------------------------------------------------------------
	/// @dev Changes the contract's owner.
	///	 Note: Only current contract's owner can change this.
	/// @param _newOwner Address of the new owner.
	function changeContractOwner(address _newOwner) onlyAdmin public {
		_addrContractOwner = _newOwner;
	}

	/// @dev Changes mint fee.
	///	 Note: Only contract's owner can change this.
	/// @param _newValue New value in wei.
	/// @param _isPresale true for presale fee, false for public fee.
	function changeMintFee(uint256 _newValue, bool _isPresale) onlyAdmin public {
		if(_isPresale) {
			_presaleMintFee = _newValue;
		}
		else {
			_publicMintFee = _newValue;
		}
	}

	/// @dev Changes onchain contents.
	///	 Note: Only contract's owner can change this.
	/// @param _string New content, minified.
	/// @param _index 1 for contract-level SVG, 2 for unrevealed SVG, 3 for revealed SVG prefix, 4 for JS script, 5 for description, 6 for base URI.
	function changeOnchainData(string memory _string, uint8 _index) onlyAdmin public {
		if(_index == 1) {
			_strSVGContract = _string;
		}
		else if(_index == 2) {
			_strSVGUnrevealed = _string;
		}
		else if(_index == 3) {
			_strSVGPrefix = _string;
		}
		else if(_index == 4) {
			_strScript = _string;
		}
		else if(_index == 5) {
			_strDescription = _string;
		}
		else if(_index == 6) {
			_strBaseURI = _string;
		}
		if(_mintedTokens > 0) {
			emit BatchMetadataUpdate(1, (_mintedTokens + 1));
		}
	}

	/// @dev Mints a new token during public sale.
	function mint() public payable {
		uint256 _newTokenId = _mintedTokens + 1;
		require(!_boolPaused, _strPaused);
		require(_newTokenId > 0, _strOutOfBounds);
		require(_newTokenId <= _maxCap, _strOutOfBounds);
		require(!_boolAllowList, _strInPresale);

		if(_msgSender() != _addrContractOwner) {
			require(msg.value >= _publicMintFee, _strNotEnoughBalance);
		}

		_mintedTokens++;
		_mint(_msgSender(), _newTokenId);
		tokenData[_newTokenId].revealed = false;
		tokenData[_newTokenId].rarity = 0;
	}

	/// @dev Mints a new token during presale.
	function presaleMint(bytes32[] memory _proof) public payable {
		uint256 _newTokenId = _mintedTokens + 1;
		bytes32 _leaf = keccak256(bytes.concat(keccak256(abi.encode(_msgSender(), 1))));
		require(!_boolPaused, _strPaused);
		require(_newTokenId > 0, _strOutOfBounds);
		require(_newTokenId <= _maxCap, _strOutOfBounds);
		require(_boolAllowList, _strPresaleFinished);
		require(MerkleProof.verify(_proof, _allowlistMerkleRoot, _leaf), _strNotAllowlist);

		if(_msgSender() != _addrContractOwner) {
			require(msg.value >= _presaleMintFee, _strNotEnoughBalance);
		}

		if(_newTokenId == _presaleMaxSales) {
			// Pauses the contract automatically to avoid overmint.
			// Also changes to public mint mode.
			_boolPaused = true;
			_boolAllowList = false;
		}

		_mintedTokens++;
		_mint(_msgSender(), _newTokenId);
		tokenData[_newTokenId].revealed = false;
		tokenData[_newTokenId].rarity = 0;
	}

	/// @dev Reveals the traits of the given tokens.
	///	 Note: Only contract's owner can use this function.
	/// @param _tokenRarity Rarity expressed as an index, array.
	/// @param _colorList List containing array of colors for each token.
	/// @param _initialToken First token number to be revealed.
	/// @param _finalToken Last token number to be revealed.
	function reveal(uint256[] memory _tokenRarity, uint256[][] memory _colorList, uint256 _initialToken, uint256 _finalToken) onlyAdmin public {
		uint256 _paramCounter = 0;
		require(_initialToken > 0, _strOutOfBounds);
		require(_finalToken <= _mintedTokens, _strOutOfBounds);
		for(uint i = _initialToken; i <= _finalToken ; i++) {
			tokenData[i].revealed = true;
			tokenData[i].rarity = _tokenRarity[_paramCounter];
			tokenData[i].tokenColors = _colorList[_paramCounter];
			_paramCounter++;
		}

		emit BatchMetadataUpdate(_initialToken, _finalToken);
	}

	/// @dev Ends the presale stage. Optionally pauses the contract.
	///	 Note: Only contract's owner can use this function.
	/// @param _boolAlsoPause set this to true to pause the contract.
	function finishPreSale(bool _boolAlsoPause) public onlyAdmin {
		_boolAllowList = false;
		if(_boolAlsoPause) {
			_boolPaused = true;
		}
	}

	/// @dev Sets the merkle root.
	///	 Note: Only contract's owner can use this function.
	/// @param _merkleRoot merkle root.
	function setAllowlistMerkleRoot(bytes32 _merkleRoot) public onlyAdmin {
		_allowlistMerkleRoot = _merkleRoot;
	}

	/// @dev Pauses or unpauses the contract
	///	 Note: Only contract's owner can change this.
	/// @param _state boolean, true to pause, false to unpause
	function setPauseStatus(bool _state) onlyAdmin public {
		_boolPaused = _state;
	}

	/// @dev Allows to withdraw any ETH available on this contract.
	///	 Note: Only contract's owner can withdraw.
	function withdraw() public onlyAdmin payable {
		uint balance = address(this).balance;
		require(!_boolPaused, _strPaused);
		require(balance > 0, _strNotEnoughBalance);
		(bool success, ) = (_msgSender()).call{value: balance}('');
		require(success, _strTransferFailed);
	}
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","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":false,"internalType":"uint256","name":"_fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_toTokenId","type":"uint256"}],"name":"BatchMetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"MetadataUpdate","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeContractOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newValue","type":"uint256"},{"internalType":"bool","name":"_isPresale","type":"bool"}],"name":"changeMintFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_string","type":"string"},{"internalType":"uint8","name":"_index","type":"uint8"}],"name":"changeOnchainData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_boolAlsoPause","type":"bool"}],"name":"finishPreSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"generateHTML","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"_proof","type":"bytes32[]"}],"name":"presaleMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_tokenRarity","type":"uint256[]"},{"internalType":"uint256[][]","name":"_colorList","type":"uint256[][]"},{"internalType":"uint256","name":"_initialToken","type":"uint256"},{"internalType":"uint256","name":"_finalToken","type":"uint256"}],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setAllowlistMerkleRoot","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":"bool","name":"_state","type":"bool"}],"name":"setPauseStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526000600460006101000a81548160ff0219169083151502179055506001600460016101000a81548160ff021916908315150217905550662386f26fc1000060065566b1a2bc2ec5000060075560006008556113886009556103e8600a556102ee600b55734dae7e6c0ca196643012cdc526bbc6b445a2ca59600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600d81526020017f50726f6f66206f66207269636800000000000000000000000000000000000000815250600d9081620001029190620012a5565b506040518060400160405280601881526020017f68747470733a2f2f70726f6f666f66726963682e636f6d2f0000000000000000815250600e9081620001499190620012a5565b50600e6040516020016200015e919062001476565b604051602081830303815290604052600f90816200017d9190620012a5565b5060405180602001604052806000815250601090816200019e9190620012a5565b506040518060400160405280600c81526020017f636f6d6d6f6e2d626c61636b000000000000000000000000000000000000000081525060119081620001e59190620012a5565b506040518060400160405280600c81526020017f636f6d6d6f6e2d77686974650000000000000000000000000000000000000000815250601290816200022c9190620012a5565b506040518060400160405280601981526020017f636f6d6d6f6e2d626c61636b2d636f6d6d6f6e2d626c61636b0000000000000081525060139081620002739190620012a5565b506040518060400160405280601981526020017f636f6d6d6f6e2d77686974652d636f6d6d6f6e2d77686974650000000000000081525060149081620002ba9190620012a5565b506040518060400160405280600d81526020017f636f6d6d6f6e2d636f6d6d6f6e0000000000000000000000000000000000000081525060159081620003019190620012a5565b506040518060400160405280601b81526020017f636f6d6d6f6e2d636f6d6d6f6e2d636f6d6d6f6e2d636f6d6d6f6e000000000081525060169081620003489190620012a5565b506040518061036001604052806040518060400160405280600781526020017f233030613565330000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233864643762660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666393663350000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666353736380000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666626636350000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236663363233380000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666643837320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236632643463630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236537373537370000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233663383863340000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236330353738300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666383238620000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236537633538320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030623062610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030363561320000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233030636461630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666366636380000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666646163630000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666363061380000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236366663830300000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666356337370000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233464643039310000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666656335390000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666613233610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f233734373337610000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f236666666666660000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f2332393239323900000000000000000000000000000000000000000000000000815250815250601790601b6200099e92919062000f4b565b506040518060200160405280600081525060329081620009bf9190620012a5565b506040518060200160405280600081525060339081620009e09190620012a5565b50604051806020016040528060008152506034908162000a019190620012a5565b506040518060400160405280600981526020017f226e616d65223a202200000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f534e4558000000000000000000000000000000000000000000000000000000008152506040518060400160405280601081526020017f226465736372697074696f6e223a202200000000000000000000000000000000815250600d6040518060400160405280600481526020017f534e4558000000000000000000000000000000000000000000000000000000008152506032600e62000af360095462000b8860201b60201c565b62000b06600b5462000b8860201b60201c565b62000b39600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1662000d0160201b60201c565b60405160200162000b549a99989796959493929190620017cf565b6040516020818303038152906040526035908162000b739190620012a5565b5034801562000b8157600080fd5b5062001b6b565b60606000820362000bd1576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905062000cfc565b600082905060005b6000821462000c0957808062000bef9062001961565b915050600a8262000c019190620019dd565b915062000bd9565b60008167ffffffffffffffff81111562000c285762000c2762001036565b5b6040519080825280601f01601f19166020018201604052801562000c5b5781602001600182028036833780820191505090505b5090505b6000851462000cf55760018262000c77919062001a15565b9150600a8562000c88919062001a50565b603062000c96919062001a88565b60f81b81838151811062000caf5762000cae62001ac3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8562000ced9190620019dd565b945062000c5f565b8093505050505b919050565b606062000d2f8273ffffffffffffffffffffffffffffffffffffffff16601460ff1662000d3660201b60201c565b9050919050565b60606000600283600262000d4b919062001af2565b62000d57919062001a88565b67ffffffffffffffff81111562000d735762000d7262001036565b5b6040519080825280601f01601f19166020018201604052801562000da65781602001600182028036833780820191505090505b5090507f30000000000000000000000000000000000000000000000000000000000000008160008151811062000de15762000de062001ac3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f78000000000000000000000000000000000000000000000000000000000000008160018151811062000e485762000e4762001ac3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506000600184600262000e8a919062001af2565b62000e96919062001a88565b90505b600181111562000f40577f3031323334353637383961626364656600000000000000000000000000000000600f86166010811062000edc5762000edb62001ac3565b5b1a60f81b82828151811062000ef65762000ef562001ac3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c94508062000f389062001b3d565b905062000e99565b508091505092915050565b82601b810192821562000f8b579160200282015b8281111562000f8a57825182908162000f799190620012a5565b509160200191906001019062000f5f565b5b50905062000f9a919062000f9e565b5090565b5b8082111562000fc2576000818162000fb8919062000fc6565b5060010162000f9f565b5090565b50805462000fd49062001094565b6000825580601f1062000fe8575062001009565b601f0160209004906000526020600020908101906200100891906200100c565b5b50565b5b80821115620010275760008160009055506001016200100d565b5090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620010ad57607f821691505b602082108103620010c357620010c262001065565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b6000600883026200112d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620010ee565b620011398683620010ee565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062001186620011806200117a8462001151565b6200115b565b62001151565b9050919050565b6000819050919050565b620011a28362001165565b620011ba620011b1826200118d565b848454620010fb565b825550505050565b600090565b620011d1620011c2565b620011de81848462001197565b505050565b5b818110156200120657620011fa600082620011c7565b600181019050620011e4565b5050565b601f82111562001255576200121f81620010c9565b6200122a84620010de565b810160208510156200123a578190505b620012526200124985620010de565b830182620011e3565b50505b505050565b600082821c905092915050565b60006200127a600019846008026200125a565b1980831691505092915050565b600062001295838362001267565b9150826002028217905092915050565b620012b0826200102b565b67ffffffffffffffff811115620012cc57620012cb62001036565b5b620012d8825462001094565b620012e58282856200120a565b600060209050601f8311600181146200131d576000841562001308578287015190505b62001314858262001287565b86555062001384565b601f1984166200132d86620010c9565b60005b82811015620013575784890151825560018201915060208501945060208101905062001330565b8683101562001377578489015162001373601f89168262001267565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b60008154620013a68162001094565b620013b281866200138c565b94506001821660008114620013d05760018114620013e6576200141d565b60ff19831686528115158202860193506200141d565b620013f185620010c9565b60005b838110156200141557815481890152600182019150602081019050620013f4565b838801955050505b50505092915050565b7f746f6b656e2f0000000000000000000000000000000000000000000000000000600082015250565b60006200145e6006836200138c565b91506200146b8262001426565b600682019050919050565b600062001484828462001397565b915062001491826200144f565b915081905092915050565b7f7b00000000000000000000000000000000000000000000000000000000000000600082015250565b6000620014d46001836200138c565b9150620014e1826200149c565b600182019050919050565b60005b838110156200150c578082015181840152602081019050620014ef565b60008484015250505050565b600062001525826200102b565b6200153181856200138c565b935062001543818560208601620014ec565b80840191505092915050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b6000620015876002836200138c565b915062001594826200154f565b600282019050919050565b7f2273796d626f6c223a2022000000000000000000000000000000000000000000600082015250565b6000620015d7600b836200138c565b9150620015e4826200159f565b600b82019050919050565b7f22696d616765223a202200000000000000000000000000000000000000000000600082015250565b600062001627600a836200138c565b91506200163482620015ef565b600a82019050919050565b7f2265787465726e616c5f6c696e6b223a20220000000000000000000000000000600082015250565b6000620016776012836200138c565b915062001684826200163f565b601282019050919050565b7f22746f74616c5f737570706c79223a2022000000000000000000000000000000600082015250565b6000620016c76011836200138c565b9150620016d4826200168f565b601182019050919050565b7f2273656c6c65725f6665655f62617369735f706f696e7473223a202200000000600082015250565b600062001717601c836200138c565b91506200172482620016df565b601c82019050919050565b7f226665655f726563697069656e74223a20220000000000000000000000000000600082015250565b6000620017676012836200138c565b915062001774826200172f565b601282019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b6000620017b76002836200138c565b9150620017c4826200177f565b600282019050919050565b6000620017dc82620014c5565b9150620017ea828d62001518565b9150620017f8828c62001518565b9150620018058262001578565b915062001813828b62001518565b915062001821828a62001397565b91506200182e8262001578565b91506200183b82620015c8565b915062001849828962001518565b9150620018568262001578565b9150620018638262001618565b915062001871828862001397565b91506200187e8262001578565b91506200188b8262001668565b915062001899828762001397565b9150620018a68262001578565b9150620018b382620016b8565b9150620018c1828662001518565b9150620018ce8262001578565b9150620018db8262001708565b9150620018e9828562001518565b9150620018f68262001578565b9150620019038262001758565b915062001911828462001518565b91506200191e82620017a8565b91508190509b9a5050505050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006200196e8262001151565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203620019a357620019a262001932565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620019ea8262001151565b9150620019f78362001151565b92508262001a0a5762001a09620019ae565b5b828204905092915050565b600062001a228262001151565b915062001a2f8362001151565b925082820390508181111562001a4a5762001a4962001932565b5b92915050565b600062001a5d8262001151565b915062001a6a8362001151565b92508262001a7d5762001a7c620019ae565b5b828206905092915050565b600062001a958262001151565b915062001aa28362001151565b925082820190508082111562001abd5762001abc62001932565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600062001aff8262001151565b915062001b0c8362001151565b925082820262001b1c8162001151565b9150828204841483151762001b365762001b3562001932565b5b5092915050565b600062001b4a8262001151565b91506000820362001b605762001b5f62001932565b5b600182039050919050565b615eb48062001b7b6000396000f3fe60806040526004361061019c5760003560e01c806370a08231116100ec578063b88d4fde1161008a578063e8a3d48511610064578063e8a3d48514610592578063e985e9c5146105bd578063edc0c72c146105fa578063f95df414146106165761019c565b8063b88d4fde14610503578063c38bb5371461052c578063c87b56dd146105555761019c565b80638d75fe05116100c65780638d75fe051461045b57806395d89b4114610486578063a22cb465146104b1578063a71db72f146104da5761019c565b806370a08231146103b857806384bc8593146103f5578063877a3ebb146104325761019c565b806323b872dd1161015957806342842e0e1161013357806342842e0e146103005780635a04a8d9146103295780636352211e146103525780636d6ff2011461038f5761019c565b806323b872dd146102a45780633ccfd60b146102cd5780633ead67b5146102d75761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b3146102465780631249c58b1461026f57806318160ddd14610279575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190613c5e565b61063f565b6040516101d59190613ca6565b60405180910390f35b3480156101ea57600080fd5b506101f36106a0565b6040516102009190613d51565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190613da9565b6106dd565b60405161023d9190613e17565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190613e5e565b61079b565b005b610277610925565b005b34801561028557600080fd5b5061028e610c96565b60405161029b9190613ead565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c69190613ec8565b610ca0565b005b6102d5610d39565b005b3480156102e357600080fd5b506102fe60048036038101906102f99190613f1b565b611003565b005b34801561030c57600080fd5b5061032760048036038101906103229190613ec8565b611117565b005b34801561033557600080fd5b50610350600480360381019061034b9190613f74565b611137565b005b34801561035e57600080fd5b5061037960048036038101906103749190613da9565b611247565b6040516103869190613e17565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b191906141ca565b611331565b005b3480156103c457600080fd5b506103df60048036038101906103da9190613f1b565b611614565b6040516103ec9190613ead565b60405180910390f35b34801561040157600080fd5b5061041c60048036038101906104179190613da9565b6116e8565b6040516104299190613d51565b60405180910390f35b34801561043e57600080fd5b5061045960048036038101906104549190614269565b611861565b005b34801561046757600080fd5b5061047061194f565b60405161047d9190613ead565b60405180910390f35b34801561049257600080fd5b5061049b611959565b6040516104a89190613d51565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d391906142a9565b611996565b005b3480156104e657600080fd5b5061050160048036038101906104fc91906143d7565b611b50565b005b34801561050f57600080fd5b5061052a600480360381019061052591906144d4565b611d38565b005b34801561053857600080fd5b50610553600480360381019061054e9190613f74565b611dd3565b005b34801561056157600080fd5b5061057c60048036038101906105779190613da9565b611ec0565b6040516105899190613d51565b60405180910390f35b34801561059e57600080fd5b506105a7612155565b6040516105b49190613d51565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190614557565b6121aa565b6040516105f19190613ca6565b60405180910390f35b610614600480360381019061060f9190614690565b61223e565b005b34801561062257600080fd5b5061063d600480360381019061063891906146d9565b6126d0565b005b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106995750610698826127aa565b5b9050919050565b60606040518060400160405280600481526020017f534e455800000000000000000000000000000000000000000000000000000000815250905090565b60006106e882612824565b6040518060400160405280600e81526020017f4f7574206f6620626f756e6473210000000000000000000000000000000000008152509061075f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107569190613d51565b60405180910390fd5b506002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107a682611247565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600f81526020017f4e6f7420617574686f72697a65642100000000000000000000000000000000008152509061084f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108469190613d51565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff1661086f61288f565b73ffffffffffffffffffffffffffffffffffffffff16148061089e575061089d8161089861288f565b6121aa565b5b6040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090c9190613d51565b60405180910390fd5b506109208383612897565b505050565b600060016008546109369190614735565b9050600460009054906101000a900460ff16156040518060400160405280601381526020017f436f6e7472616374206973207061757365642e00000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b79190613d51565b60405180910390fd5b50600081116040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a339190613d51565b60405180910390fd5b506009548111156040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab19190613d51565b60405180910390fd5b50600460019054906101000a900460ff16156040518060400160405280601c81526020017f5075626c69632073616c65206e6f7420656e61626c656420796574210000000081525090610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3a9190613d51565b60405180910390fd5b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b8561288f565b73ffffffffffffffffffffffffffffffffffffffff1614610c1f576007543410156040518060400160405280601581526020017f496e73756666696369656e742062616c616e636521000000000000000000000081525090610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c149190613d51565b60405180910390fd5b505b60086000815480929190610c3290614769565b9190505550610c48610c4261288f565b82612950565b60006036600083815260200190815260200160002060000160006101000a81548160ff0219169083151502179055506000603660008381526020019081526020016000206001018190555050565b6000600954905090565b610cb1610cab61288f565b82612ad9565b6040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f9190613d51565b60405180910390fd5b50610d34838383612bf0565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610d7a61288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff9190613d51565b60405180910390fd5b506000479050600460009054906101000a900460ff16156040518060400160405280601381526020017f436f6e7472616374206973207061757365642e0000000000000000000000000081525090610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d9190613d51565b60405180910390fd5b50600081116040518060400160405280601581526020017f496e73756666696369656e742062616c616e636521000000000000000000000081525090610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f099190613d51565b60405180910390fd5b506000610f1d61288f565b73ffffffffffffffffffffffffffffffffffffffff1682604051610f40906147e2565b60006040518083038185875af1925050503d8060008114610f7d576040519150601f19603f3d011682016040523d82523d6000602084013e610f82565b606091505b50509050806040518060400160405280601081526020017f5472616e73666572206661696c65642e0000000000000000000000000000000081525090610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff59190613d51565b60405180910390fd5b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661104461288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a6564210000000000000000000000000000000000815250906110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c99190613d51565b60405180910390fd5b5080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61113283838360405180602001604052806000815250611d38565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661117861288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd9190613d51565b60405180910390fd5b506000600460016101000a81548160ff0219169083151502179055508015611244576001600460006101000a81548160ff0219169083151502179055505b50565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e9190613d51565b60405180910390fd5b5080915050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661137261288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f79190613d51565b60405180910390fd5b5060008083116040518060400160405280600e81526020017f4f7574206f6620626f756e6473210000000000000000000000000000000000008152509061147d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114749190613d51565b60405180910390fd5b506008548211156040518060400160405280600e81526020017f4f7574206f6620626f756e647321000000000000000000000000000000000000815250906114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f29190613d51565b60405180910390fd5b5060008390505b8281116115d35760016036600083815260200190815260200160002060000160006101000a81548160ff02191690831515021790555085828151811061154b5761154a6147f7565b5b602002602001015160366000838152602001908152602001600020600101819055508482815181106115805761157f6147f7565b5b60200260200101516036600083815260200190815260200160002060020190805190602001906115b1929190613b88565b5081806115bd90614769565b92505080806115cb90614769565b915050611502565b507f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c8383604051611605929190614826565b60405180910390a15050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415604051806060016040528060238152602001615e5c60239139906116a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116979190613d51565b60405180910390fd5b50600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606081600081116040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d9190613d51565b60405180910390fd5b506008548111156040518060400160405280600e81526020017f4f7574206f6620626f756e647321000000000000000000000000000000000000815250906117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db9190613d51565b60405180910390fd5b5060006117f084612f14565b6118016117fc86613074565b612f14565b61180a866130a2565b601060405160200161181f9493929190614c55565b6040516020818303038152906040529050611839816131b3565b6040516020016118499190614d16565b60405160208183030381529060405292505050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166118a261288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090611930576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119279190613d51565b60405180910390fd5b508015611943578160068190555061194b565b816007819055505b5050565b6000600854905090565b60606040518060400160405280600481526020017f534e455800000000000000000000000000000000000000000000000000000000815250905090565b61199e61288f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b9190613d51565b60405180910390fd5b508060036000611a5261288f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611aff61288f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b449190613ca6565b60405180910390a35050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b9161288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c169190613d51565b60405180910390fd5b5060018160ff1603611c40578160329081611c3a9190614ecf565b50611ce1565b60028160ff1603611c60578160349081611c5a9190614ecf565b50611ce0565b60038160ff1603611c80578160339081611c7a9190614ecf565b50611cdf565b60048160ff1603611ca0578160109081611c9a9190614ecf565b50611cde565b60058160ff1603611cc05781600d9081611cba9190614ecf565b50611cdd565b60068160ff1603611cdc5781600e9081611cda9190614ecf565b505b5b5b5b5b5b60006008541115611d34577f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c600180600854611d1d9190614735565b604051611d2b929190614fdc565b60405180910390a15b5050565b611d49611d4361288f565b83612ad9565b6040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090611dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db79190613d51565b60405180910390fd5b50611dcd84848484613316565b50505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e1461288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e999190613d51565b60405180910390fd5b5080600460006101000a81548160ff02191690831515021790555050565b606081600081116040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090611f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f359190613d51565b60405180910390fd5b506008548111156040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090611fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb39190613d51565b60405180910390fd5b506000604051806020016040528060008152509050600115156036600086815260200190815260200160002060000160009054906101000a900460ff16151503612039576120098461338e565b612012856116e8565b604051602001612023929190615135565b604051602081830303815290604052905061205d565b603460405160200161204b9190615185565b60405160208183030381529060405290505b61212d6040518060400160405280600981526020017f226e616d65223a2022000000000000000000000000000000000000000000000081525061209f86612f14565b6040518060400160405280601081526020017f226465736372697074696f6e223a202200000000000000000000000000000000815250600d600f6120e28a612f14565b612101603660008d8152602001908152602001600020600101546133e8565b88604051602001612119989796959493929190615412565b6040516020818303038152906040526131b3565b60405160200161213d919061556a565b60405160208183030381529060405292505050919050565b60606000612182603560405160200161216e919061558c565b6040516020818303038152906040526131b3565b604051602001612192919061556a565b60405160208183030381529060405290508091505090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600160085461224f9190614735565b9050600061225b61288f565b600160405160200161226e9291906155d4565b60405160208183030381529060405280519060200120604051602001612294919061561e565b604051602081830303815290604052805190602001209050600460009054906101000a900460ff16156040518060400160405280601381526020017f436f6e7472616374206973207061757365642e0000000000000000000000000081525090612334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232b9190613d51565b60405180910390fd5b50600082116040518060400160405280600e81526020017f4f7574206f6620626f756e647321000000000000000000000000000000000000815250906123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a79190613d51565b60405180910390fd5b506009548211156040518060400160405280600e81526020017f4f7574206f6620626f756e6473210000000000000000000000000000000000008152509061242e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124259190613d51565b60405180910390fd5b50600460019054906101000a900460ff166040518060400160405280601181526020017f50726573616c652066696e697368656421000000000000000000000000000000815250906124b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ad9190613d51565b60405180910390fd5b506124c483600554836137e1565b6040518060400160405280601181526020017f4e6f7420696e20616c6c6f776c697374210000000000000000000000000000008152509061253b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125329190613d51565b60405180910390fd5b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661257d61288f565b73ffffffffffffffffffffffffffffffffffffffff1614612617576006543410156040518060400160405280601581526020017f496e73756666696369656e742062616c616e636521000000000000000000000081525090612615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260c9190613d51565b60405180910390fd5b505b600a548203612657576001600460006101000a81548160ff0219169083151502179055506000600460016101000a81548160ff0219169083151502179055505b6008600081548092919061266a90614769565b919050555061268061267a61288f565b83612950565b60006036600084815260200190815260200160002060000160006101000a81548160ff02191690831515021790555060006036600084815260200190815260200160002060010181905550505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661271161288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a65642100000000000000000000000000000000008152509061279f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127969190613d51565b60405180910390fd5b508060058190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061281d575061281c826137f8565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661290a83611247565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61295981612824565b156040518060400160405280600e81526020017f4f7574206f6620626f756e647321000000000000000000000000000000000000815250906129d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c89190613d51565b60405180910390fd5b5060018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a219190614735565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612ae482612824565b6040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090612b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b529190613d51565b60405180910390fd5b506000612b6783611247565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612bd657508373ffffffffffffffffffffffffffffffffffffffff16612bbe846106dd565b73ffffffffffffffffffffffffffffffffffffffff16145b80612be75750612be681856121aa565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612c1082611247565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090612c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c959190613d51565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415604051806060016040528060248152602001615dc36024913990612d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d219190613d51565b60405180910390fd5b50612d3481612824565b6040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090612dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da29190613d51565b60405180910390fd5b50612db7600082612897565b60018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e069190615639565b9250508190555060018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e5c9190614735565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008203612f5b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061306f565b600082905060005b60008214612f8d578080612f7690614769565b915050600a82612f86919061569c565b9150612f63565b60008167ffffffffffffffff811115612fa957612fa8613fa6565b5b6040519080825280601f01601f191660200182016040528015612fdb5781602001600182028036833780820191505090505b5090505b6000851461306857600182612ff49190615639565b9150600a8561300391906156cd565b603061300f9190614735565b60f81b818381518110613025576130246147f7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613061919061569c565b9450612fdf565b8093505050505b919050565b60008061308083611247565b90508073ffffffffffffffffffffffffffffffffffffffff1631915050919050565b606060006040518060400160405280600181526020017f5b00000000000000000000000000000000000000000000000000000000000000815250905060005b60048110156131875781613126603660008781526020019081526020016000206002018381548110613116576131156147f7565b5b9060005260206000200154612f14565b6040516020016131379291906156fe565b604051602081830303815290604052915060038110156131745781604051602001613162919061576e565b60405160208183030381529060405291505b808061317f90614769565b9150506130e1565b508060405160200161319991906157dc565b604051602081830303815290604052905080915050919050565b606060008251036131d557604051806020016040528060008152509050613311565b6000604051806060016040528060408152602001615e1c60409139905060006003600285516132049190614735565b61320e919061569c565b600461321a91906157fe565b67ffffffffffffffff81111561323357613232613fa6565b5b6040519080825280601f01601f1916602001820160405280156132655781602001600182028036833780820191505090505b509050600182016020820185865187015b808210156132d1576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050613276565b50506003865106600181146132ed576002811461330057613308565b603d6001830353603d6002830353613308565b603d60018303535b50505080925050505b919050565b613321848484612bf0565b61332d84848484613862565b604051806060016040528060358152602001615de76035913990613387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337e9190613d51565b60405180910390fd5b5050505050565b6060603361339d836000613a03565b6133a8846001613a03565b6133b3856002613a03565b6133be866003613a03565b6040516020016133d2959493929190615c68565b6040516020818303038152906040529050919050565b6060600060405180602001604052806000815250905060018303613498576011805461341390614b40565b80601f016020809104026020016040519081016040528092919081815260200182805461343f90614b40565b801561348c5780601f106134615761010080835404028352916020019161348c565b820191906000526020600020905b81548152906001019060200180831161346f57829003601f168201915b505050505090506137d8565b6002830361353257601280546134ad90614b40565b80601f01602080910402602001604051908101604052809291908181526020018280546134d990614b40565b80156135265780601f106134fb57610100808354040283529160200191613526565b820191906000526020600020905b81548152906001019060200180831161350957829003601f168201915b505050505090506137d7565b600383036135cc576013805461354790614b40565b80601f016020809104026020016040519081016040528092919081815260200182805461357390614b40565b80156135c05780601f10613595576101008083540402835291602001916135c0565b820191906000526020600020905b8154815290600101906020018083116135a357829003601f168201915b505050505090506137d6565b6004830361366657601480546135e190614b40565b80601f016020809104026020016040519081016040528092919081815260200182805461360d90614b40565b801561365a5780601f1061362f5761010080835404028352916020019161365a565b820191906000526020600020905b81548152906001019060200180831161363d57829003601f168201915b505050505090506137d5565b60058303613700576015805461367b90614b40565b80601f01602080910402602001604051908101604052809291908181526020018280546136a790614b40565b80156136f45780601f106136c9576101008083540402835291602001916136f4565b820191906000526020600020905b8154815290600101906020018083116136d757829003601f168201915b505050505090506137d4565b6006830361379a576016805461371590614b40565b80601f016020809104026020016040519081016040528092919081815260200182805461374190614b40565b801561378e5780601f106137635761010080835404028352916020019161378e565b820191906000526020600020905b81548152906001019060200180831161377157829003601f168201915b505050505090506137d3565b6040518060400160405280600a81526020017f556e72657665616c65640000000000000000000000000000000000000000000081525090505b5b5b5b5b5b80915050919050565b6000826137ee8584613add565b1490509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006138838473ffffffffffffffffffffffffffffffffffffffff16613b33565b156139f6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026138ac61288f565b8786866040518563ffffffff1660e01b81526004016138ce9493929190615d34565b6020604051808303816000875af192505050801561390a57506040513d601f19601f820116820180604052508101906139079190615d95565b60015b6139a6573d806000811461393a576040519150601f19603f3d011682016040523d82523d6000602084013e61393f565b606091505b50600081510361399e57604051806060016040528060358152602001615de7603591396040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139959190613d51565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506139fb565b600190505b949350505050565b60606017603660008581526020019081526020016000206002018381548110613a2f57613a2e6147f7565b5b9060005260206000200154601b8110613a4b57613a4a6147f7565b5b018054613a5790614b40565b80601f0160208091040260200160405190810160405280929190818152602001828054613a8390614b40565b8015613ad05780601f10613aa557610100808354040283529160200191613ad0565b820191906000526020600020905b815481529060010190602001808311613ab357829003601f168201915b5050505050905092915050565b60008082905060005b8451811015613b2857613b1382868381518110613b0657613b056147f7565b5b6020026020010151613b46565b91508080613b2090614769565b915050613ae6565b508091505092915050565b600080823b905060008111915050919050565b6000818310613b5e57613b598284613b71565b613b69565b613b688383613b71565b5b905092915050565b600082600052816020526040600020905092915050565b828054828255906000526020600020908101928215613bc4579160200282015b82811115613bc3578251825591602001919060010190613ba8565b5b509050613bd19190613bd5565b5090565b5b80821115613bee576000816000905550600101613bd6565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613c3b81613c06565b8114613c4657600080fd5b50565b600081359050613c5881613c32565b92915050565b600060208284031215613c7457613c73613bfc565b5b6000613c8284828501613c49565b91505092915050565b60008115159050919050565b613ca081613c8b565b82525050565b6000602082019050613cbb6000830184613c97565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cfb578082015181840152602081019050613ce0565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d2382613cc1565b613d2d8185613ccc565b9350613d3d818560208601613cdd565b613d4681613d07565b840191505092915050565b60006020820190508181036000830152613d6b8184613d18565b905092915050565b6000819050919050565b613d8681613d73565b8114613d9157600080fd5b50565b600081359050613da381613d7d565b92915050565b600060208284031215613dbf57613dbe613bfc565b5b6000613dcd84828501613d94565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e0182613dd6565b9050919050565b613e1181613df6565b82525050565b6000602082019050613e2c6000830184613e08565b92915050565b613e3b81613df6565b8114613e4657600080fd5b50565b600081359050613e5881613e32565b92915050565b60008060408385031215613e7557613e74613bfc565b5b6000613e8385828601613e49565b9250506020613e9485828601613d94565b9150509250929050565b613ea781613d73565b82525050565b6000602082019050613ec26000830184613e9e565b92915050565b600080600060608486031215613ee157613ee0613bfc565b5b6000613eef86828701613e49565b9350506020613f0086828701613e49565b9250506040613f1186828701613d94565b9150509250925092565b600060208284031215613f3157613f30613bfc565b5b6000613f3f84828501613e49565b91505092915050565b613f5181613c8b565b8114613f5c57600080fd5b50565b600081359050613f6e81613f48565b92915050565b600060208284031215613f8a57613f89613bfc565b5b6000613f9884828501613f5f565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613fde82613d07565b810181811067ffffffffffffffff82111715613ffd57613ffc613fa6565b5b80604052505050565b6000614010613bf2565b905061401c8282613fd5565b919050565b600067ffffffffffffffff82111561403c5761403b613fa6565b5b602082029050602081019050919050565b600080fd5b600061406561406084614021565b614006565b905080838252602082019050602084028301858111156140885761408761404d565b5b835b818110156140b1578061409d8882613d94565b84526020840193505060208101905061408a565b5050509392505050565b600082601f8301126140d0576140cf613fa1565b5b81356140e0848260208601614052565b91505092915050565b600067ffffffffffffffff82111561410457614103613fa6565b5b602082029050602081019050919050565b6000614128614123846140e9565b614006565b9050808382526020820190506020840283018581111561414b5761414a61404d565b5b835b8181101561419257803567ffffffffffffffff8111156141705761416f613fa1565b5b80860161417d89826140bb565b8552602085019450505060208101905061414d565b5050509392505050565b600082601f8301126141b1576141b0613fa1565b5b81356141c1848260208601614115565b91505092915050565b600080600080608085870312156141e4576141e3613bfc565b5b600085013567ffffffffffffffff81111561420257614201613c01565b5b61420e878288016140bb565b945050602085013567ffffffffffffffff81111561422f5761422e613c01565b5b61423b8782880161419c565b935050604061424c87828801613d94565b925050606061425d87828801613d94565b91505092959194509250565b600080604083850312156142805761427f613bfc565b5b600061428e85828601613d94565b925050602061429f85828601613f5f565b9150509250929050565b600080604083850312156142c0576142bf613bfc565b5b60006142ce85828601613e49565b92505060206142df85828601613f5f565b9150509250929050565b600080fd5b600067ffffffffffffffff82111561430957614308613fa6565b5b61431282613d07565b9050602081019050919050565b82818337600083830152505050565b600061434161433c846142ee565b614006565b90508281526020810184848401111561435d5761435c6142e9565b5b61436884828561431f565b509392505050565b600082601f83011261438557614384613fa1565b5b813561439584826020860161432e565b91505092915050565b600060ff82169050919050565b6143b48161439e565b81146143bf57600080fd5b50565b6000813590506143d1816143ab565b92915050565b600080604083850312156143ee576143ed613bfc565b5b600083013567ffffffffffffffff81111561440c5761440b613c01565b5b61441885828601614370565b9250506020614429858286016143c2565b9150509250929050565b600067ffffffffffffffff82111561444e5761444d613fa6565b5b61445782613d07565b9050602081019050919050565b600061447761447284614433565b614006565b905082815260208101848484011115614493576144926142e9565b5b61449e84828561431f565b509392505050565b600082601f8301126144bb576144ba613fa1565b5b81356144cb848260208601614464565b91505092915050565b600080600080608085870312156144ee576144ed613bfc565b5b60006144fc87828801613e49565b945050602061450d87828801613e49565b935050604061451e87828801613d94565b925050606085013567ffffffffffffffff81111561453f5761453e613c01565b5b61454b878288016144a6565b91505092959194509250565b6000806040838503121561456e5761456d613bfc565b5b600061457c85828601613e49565b925050602061458d85828601613e49565b9150509250929050565b600067ffffffffffffffff8211156145b2576145b1613fa6565b5b602082029050602081019050919050565b6000819050919050565b6145d6816145c3565b81146145e157600080fd5b50565b6000813590506145f3816145cd565b92915050565b600061460c61460784614597565b614006565b9050808382526020820190506020840283018581111561462f5761462e61404d565b5b835b81811015614658578061464488826145e4565b845260208401935050602081019050614631565b5050509392505050565b600082601f83011261467757614676613fa1565b5b81356146878482602086016145f9565b91505092915050565b6000602082840312156146a6576146a5613bfc565b5b600082013567ffffffffffffffff8111156146c4576146c3613c01565b5b6146d084828501614662565b91505092915050565b6000602082840312156146ef576146ee613bfc565b5b60006146fd848285016145e4565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061474082613d73565b915061474b83613d73565b925082820190508082111561476357614762614706565b5b92915050565b600061477482613d73565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036147a6576147a5614706565b5b600182019050919050565b600081905092915050565b50565b60006147cc6000836147b1565b91506147d7826147bc565b600082019050919050565b60006147ed826147bf565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060408201905061483b6000830185613e9e565b6148486020830184613e9e565b9392505050565b600081905092915050565b7f3c21444f43545950452068746d6c3e3c68746d6c3e3c686561643e3c6d65746160008201527f20636861727365743d275554462d3827202f3e3c7374796c653e626f64797b6d60208201527f617267696e3a20303b7d63616e7661737b6261636b67726f756e643a2330303060408201527f3b646973706c61793a626c6f636b3b7d3c2f7374796c653e3c2f686561643e3c60608201527f626f64793e3c63616e7661732069643d27736e6578273e3c2f63616e7661733e60808201527f3c7363726970743e636f6e737420746f6b656e49643d0000000000000000000060a082015250565b600061494e60b68361484f565b91506149598261485a565b60b682019050919050565b600061496f82613cc1565b614979818561484f565b9350614989818560208601613cdd565b80840191505092915050565b7f3b6c6574206d696e696d756d3d353b6c65742062616c616e63653d0000000000600082015250565b60006149cb601b8361484f565b91506149d682614995565b601b82019050919050565b7f3b69662862616c616e63653d3d30297b6d696e696d756d3d307d6c657420736e60008201527f616b654c656e6774683d4d6174682e666c6f6f722862616c616e63652f31303060208201527f30303030303030303030303030303030292b6d696e696d756d3b696628736e6160408201527f6b654c656e6774683e39393935297b736e616b654c656e6774683d393939357d60608201527f636f6e737420746f6b656e436f6c6f72733d0000000000000000000000000000608082015250565b6000614aaf60928361484f565b9150614aba826149e1565b609282019050919050565b7f3b3c2f7363726970743e3c7363726970743e0000000000000000000000000000600082015250565b6000614afb60128361484f565b9150614b0682614ac5565b601282019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b5857607f821691505b602082108103614b6b57614b6a614b11565b5b50919050565b60008190508160005260206000209050919050565b60008154614b9381614b40565b614b9d818661484f565b94506001821660008114614bb85760018114614bcd57614c00565b60ff1983168652811515820286019350614c00565b614bd685614b71565b60005b83811015614bf857815481890152600182019150602081019050614bd9565b838801955050505b50505092915050565b7f3c2f7363726970743e3c2f626f64793e3c2f68746d6c3e000000000000000000600082015250565b6000614c3f60178361484f565b9150614c4a82614c09565b601782019050919050565b6000614c6082614941565b9150614c6c8287614964565b9150614c77826149be565b9150614c838286614964565b9150614c8e82614aa2565b9150614c9a8285614964565b9150614ca582614aee565b9150614cb18284614b86565b9150614cbc82614c32565b915081905095945050505050565b7f646174613a746578742f68746d6c3b6261736536342c00000000000000000000600082015250565b6000614d0060168361484f565b9150614d0b82614cca565b601682019050919050565b6000614d2182614cf3565b9150614d2d8284614964565b915081905092915050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614d857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614d48565b614d8f8683614d48565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614dcc614dc7614dc284613d73565b614da7565b613d73565b9050919050565b6000819050919050565b614de683614db1565b614dfa614df282614dd3565b848454614d55565b825550505050565b600090565b614e0f614e02565b614e1a818484614ddd565b505050565b5b81811015614e3e57614e33600082614e07565b600181019050614e20565b5050565b601f821115614e8357614e5481614b71565b614e5d84614d38565b81016020851015614e6c578190505b614e80614e7885614d38565b830182614e1f565b50505b505050565b600082821c905092915050565b6000614ea660001984600802614e88565b1980831691505092915050565b6000614ebf8383614e95565b9150826002028217905092915050565b614ed882613cc1565b67ffffffffffffffff811115614ef157614ef0613fa6565b5b614efb8254614b40565b614f06828285614e42565b600060209050601f831160018114614f395760008415614f27578287015190505b614f318582614eb3565b865550614f99565b601f198416614f4786614b71565b60005b82811015614f6f57848901518255600182019150602085019450602081019050614f4a565b86831015614f8c5784890151614f88601f891682614e95565b8355505b6001600288020188555050505b505050505050565b6000819050919050565b6000614fc6614fc1614fbc84614fa1565b614da7565b613d73565b9050919050565b614fd681614fab565b82525050565b6000604082019050614ff16000830185614fcd565b614ffe6020830184613e9e565b9392505050565b7f22696d616765223a202200000000000000000000000000000000000000000000600082015250565b600061503b600a8361484f565b915061504682615005565b600a82019050919050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b600061508760028361484f565b915061509282615051565b600282019050919050565b7f22616e696d6174696f6e5f75726c223a20220000000000000000000000000000600082015250565b60006150d360128361484f565b91506150de8261509d565b601282019050919050565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b600061511f60018361484f565b915061512a826150e9565b600182019050919050565b60006151408261502e565b915061514c8285614964565b91506151578261507a565b9150615162826150c6565b915061516e8284614964565b915061517982615112565b91508190509392505050565b60006151908261502e565b915061519c8284614b86565b91506151a782615112565b915081905092915050565b7f7b00000000000000000000000000000000000000000000000000000000000000600082015250565b60006151e860018361484f565b91506151f3826151b2565b600182019050919050565b7f534e455820230000000000000000000000000000000000000000000000000000600082015250565b600061523460068361484f565b915061523f826151fe565b600682019050919050565b7f2265787465726e616c5f75726c223a2022000000000000000000000000000000600082015250565b600061528060118361484f565b915061528b8261524a565b601182019050919050565b7f2261747472696275746573223a205b0000000000000000000000000000000000600082015250565b60006152cc600f8361484f565b91506152d782615296565b600f82019050919050565b7f2274726169745f74797065223a2022526172697479222c200000000000000000600082015250565b600061531860188361484f565b9150615323826152e2565b601882019050919050565b7f2276616c7565223a202200000000000000000000000000000000000000000000600082015250565b6000615364600a8361484f565b915061536f8261532e565b600a82019050919050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006153b060018361484f565b91506153bb8261537a565b600182019050919050565b7f5d2c000000000000000000000000000000000000000000000000000000000000600082015250565b60006153fc60028361484f565b9150615407826153c6565b600282019050919050565b600061541d826151db565b9150615429828b614964565b915061543482615227565b9150615440828a614964565b915061544b8261507a565b91506154578289614964565b91506154638288614b86565b915061546e8261507a565b915061547982615273565b91506154858287614b86565b91506154918286614964565b915061549c8261507a565b91506154a7826152bf565b91506154b2826151db565b91506154bd8261530b565b91506154c882615357565b91506154d48285614964565b91506154df82615112565b91506154ea826153a3565b91506154f5826153ef565b91506155018284614964565b915061550c826153a3565b91508190509998505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000615554601d8361484f565b915061555f8261551e565b601d82019050919050565b600061557582615547565b91506155818284614964565b915081905092915050565b60006155988284614b86565b915081905092915050565b60006155be6155b96155b484614fa1565b614da7565b61439e565b9050919050565b6155ce816155a3565b82525050565b60006040820190506155e96000830185613e08565b6155f660208301846155c5565b9392505050565b6000819050919050565b615618615613826145c3565b6155fd565b82525050565b600061562a8284615607565b60208201915081905092915050565b600061564482613d73565b915061564f83613d73565b925082820390508181111561566757615666614706565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006156a782613d73565b91506156b283613d73565b9250826156c2576156c161566d565b5b828204905092915050565b60006156d882613d73565b91506156e383613d73565b9250826156f3576156f261566d565b5b828206905092915050565b600061570a8285614964565b91506157168284614964565b91508190509392505050565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b600061575860018361484f565b915061576382615722565b600182019050919050565b600061577a8284614964565b91506157858261574b565b915081905092915050565b7f5d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006157c660018361484f565b91506157d182615790565b600182019050919050565b60006157e88284614964565b91506157f3826157b9565b915081905092915050565b600061580982613d73565b915061581483613d73565b925082820261582281613d73565b9150828204841483151761583957615838614706565b5b5092915050565b7f3b66696c6c2d6f7061636974793a313b7374726f6b652d77696474683a322e3660008201527f343538333b7374726f6b652d6c696e656361703a726f756e643b7374726f6b6560208201527f2d6c696e656a6f696e3a726f756e64272069643d277365676d656e743127206360408201527f783d2736352e343538323434272063793d2731302e3436303739322720723d2760608201527f31332e32323931363727207472616e73666f726d3d27726f746174652833362e60808201527f34363935362927202f3e3c636972636c65207374796c653d2766696c6c3a000060a082015250565b600061593460be8361484f565b915061593f82615840565b60be82019050919050565b7f3b66696c6c2d6f7061636974793a313b7374726f6b652d77696474683a322e3660008201527f343538333b7374726f6b652d6c696e656361703a726f756e643b7374726f6b6560208201527f2d6c696e656a6f696e3a726f756e64272069643d277365676d656e743227206360408201527f783d2736392e393937313038272063793d27382e323032373036332720723d2760608201527f31332e32323931363727207472616e73666f726d3d27726f746174652833362e60808201527f34363935362927202f3e3c636972636c65207374796c653d2766696c6c3a000060a082015250565b6000615a3e60be8361484f565b9150615a498261594a565b60be82019050919050565b7f3b66696c6c2d6f7061636974793a313b7374726f6b652d77696474683a322e3660008201527f343538333b7374726f6b652d6c696e656361703a726f756e643b7374726f6b6560208201527f2d6c696e656a6f696e3a726f756e64272069643d277365676d656e743327206360408201527f783d2737362e383331343239272063793d27382e363037343338312720723d2760608201527f31332e32323931363727207472616e73666f726d3d27726f746174652833362e60808201527f34363935362927202f3e3c636972636c65207374796c653d2766696c6c3a000060a082015250565b6000615b4860be8361484f565b9150615b5382615a54565b60be82019050919050565b7f3b66696c6c2d6f7061636974793a313b7374726f6b652d77696474683a322e3660008201527f343538333b7374726f6b652d6c696e656361703a726f756e643b7374726f6b6560208201527f2d6c696e656a6f696e3a726f756e64272069643d277365676d656e743427206360408201527f783d2738322e353536393038272063793d2731312e3734303632342720723d2760608201527f31332e32323931363727207472616e73666f726d3d27726f746174652833362e60808201527f34363935362927202f3e3c2f7376673e0000000000000000000000000000000060a082015250565b6000615c5260b08361484f565b9150615c5d82615b5e565b60b082019050919050565b6000615c748288614b86565b9150615c808287614964565b9150615c8b82615927565b9150615c978286614964565b9150615ca282615a31565b9150615cae8285614964565b9150615cb982615b3b565b9150615cc58284614964565b9150615cd082615c45565b91508190509695505050505050565b600081519050919050565b600082825260208201905092915050565b6000615d0682615cdf565b615d108185615cea565b9350615d20818560208601613cdd565b615d2981613d07565b840191505092915050565b6000608082019050615d496000830187613e08565b615d566020830186613e08565b615d636040830185613e9e565b8181036060830152615d758184615cfb565b905095945050505050565b600081519050615d8f81613c32565b92915050565b600060208284031215615dab57615daa613bfc565b5b6000615db984828501615d80565b9150509291505056fe43616e6e6f74207472616e7366657220746f20746865207a65726f206164647265737321417474656d70746564207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572214142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f42616c616e636520717565727920666f7220746865207a65726f20616464726573732ea26469706673582212208d3b1b6856a0299aefcf49c5e6db7caf026ccfd44ac98340ca36e33b226f1b3164736f6c63430008130033

Deployed Bytecode

0x60806040526004361061019c5760003560e01c806370a08231116100ec578063b88d4fde1161008a578063e8a3d48511610064578063e8a3d48514610592578063e985e9c5146105bd578063edc0c72c146105fa578063f95df414146106165761019c565b8063b88d4fde14610503578063c38bb5371461052c578063c87b56dd146105555761019c565b80638d75fe05116100c65780638d75fe051461045b57806395d89b4114610486578063a22cb465146104b1578063a71db72f146104da5761019c565b806370a08231146103b857806384bc8593146103f5578063877a3ebb146104325761019c565b806323b872dd1161015957806342842e0e1161013357806342842e0e146103005780635a04a8d9146103295780636352211e146103525780636d6ff2011461038f5761019c565b806323b872dd146102a45780633ccfd60b146102cd5780633ead67b5146102d75761019c565b806301ffc9a7146101a157806306fdde03146101de578063081812fc14610209578063095ea7b3146102465780631249c58b1461026f57806318160ddd14610279575b600080fd5b3480156101ad57600080fd5b506101c860048036038101906101c39190613c5e565b61063f565b6040516101d59190613ca6565b60405180910390f35b3480156101ea57600080fd5b506101f36106a0565b6040516102009190613d51565b60405180910390f35b34801561021557600080fd5b50610230600480360381019061022b9190613da9565b6106dd565b60405161023d9190613e17565b60405180910390f35b34801561025257600080fd5b5061026d60048036038101906102689190613e5e565b61079b565b005b610277610925565b005b34801561028557600080fd5b5061028e610c96565b60405161029b9190613ead565b60405180910390f35b3480156102b057600080fd5b506102cb60048036038101906102c69190613ec8565b610ca0565b005b6102d5610d39565b005b3480156102e357600080fd5b506102fe60048036038101906102f99190613f1b565b611003565b005b34801561030c57600080fd5b5061032760048036038101906103229190613ec8565b611117565b005b34801561033557600080fd5b50610350600480360381019061034b9190613f74565b611137565b005b34801561035e57600080fd5b5061037960048036038101906103749190613da9565b611247565b6040516103869190613e17565b60405180910390f35b34801561039b57600080fd5b506103b660048036038101906103b191906141ca565b611331565b005b3480156103c457600080fd5b506103df60048036038101906103da9190613f1b565b611614565b6040516103ec9190613ead565b60405180910390f35b34801561040157600080fd5b5061041c60048036038101906104179190613da9565b6116e8565b6040516104299190613d51565b60405180910390f35b34801561043e57600080fd5b5061045960048036038101906104549190614269565b611861565b005b34801561046757600080fd5b5061047061194f565b60405161047d9190613ead565b60405180910390f35b34801561049257600080fd5b5061049b611959565b6040516104a89190613d51565b60405180910390f35b3480156104bd57600080fd5b506104d860048036038101906104d391906142a9565b611996565b005b3480156104e657600080fd5b5061050160048036038101906104fc91906143d7565b611b50565b005b34801561050f57600080fd5b5061052a600480360381019061052591906144d4565b611d38565b005b34801561053857600080fd5b50610553600480360381019061054e9190613f74565b611dd3565b005b34801561056157600080fd5b5061057c60048036038101906105779190613da9565b611ec0565b6040516105899190613d51565b60405180910390f35b34801561059e57600080fd5b506105a7612155565b6040516105b49190613d51565b60405180910390f35b3480156105c957600080fd5b506105e460048036038101906105df9190614557565b6121aa565b6040516105f19190613ca6565b60405180910390f35b610614600480360381019061060f9190614690565b61223e565b005b34801561062257600080fd5b5061063d600480360381019061063891906146d9565b6126d0565b005b6000634906490660e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106995750610698826127aa565b5b9050919050565b60606040518060400160405280600481526020017f534e455800000000000000000000000000000000000000000000000000000000815250905090565b60006106e882612824565b6040518060400160405280600e81526020017f4f7574206f6620626f756e6473210000000000000000000000000000000000008152509061075f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107569190613d51565b60405180910390fd5b506002600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006107a682611247565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600f81526020017f4e6f7420617574686f72697a65642100000000000000000000000000000000008152509061084f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108469190613d51565b60405180910390fd5b508073ffffffffffffffffffffffffffffffffffffffff1661086f61288f565b73ffffffffffffffffffffffffffffffffffffffff16148061089e575061089d8161089861288f565b6121aa565b5b6040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090610915576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090c9190613d51565b60405180910390fd5b506109208383612897565b505050565b600060016008546109369190614735565b9050600460009054906101000a900460ff16156040518060400160405280601381526020017f436f6e7472616374206973207061757365642e00000000000000000000000000815250906109c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b79190613d51565b60405180910390fd5b50600081116040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a339190613d51565b60405180910390fd5b506009548111156040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090610aba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab19190613d51565b60405180910390fd5b50600460019054906101000a900460ff16156040518060400160405280601c81526020017f5075626c69632073616c65206e6f7420656e61626c656420796574210000000081525090610b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3a9190613d51565b60405180910390fd5b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610b8561288f565b73ffffffffffffffffffffffffffffffffffffffff1614610c1f576007543410156040518060400160405280601581526020017f496e73756666696369656e742062616c616e636521000000000000000000000081525090610c1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c149190613d51565b60405180910390fd5b505b60086000815480929190610c3290614769565b9190505550610c48610c4261288f565b82612950565b60006036600083815260200190815260200160002060000160006101000a81548160ff0219169083151502179055506000603660008381526020019081526020016000206001018190555050565b6000600954905090565b610cb1610cab61288f565b82612ad9565b6040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090610d28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1f9190613d51565b60405180910390fd5b50610d34838383612bf0565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16610d7a61288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090610e08576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dff9190613d51565b60405180910390fd5b506000479050600460009054906101000a900460ff16156040518060400160405280601381526020017f436f6e7472616374206973207061757365642e0000000000000000000000000081525090610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d9190613d51565b60405180910390fd5b50600081116040518060400160405280601581526020017f496e73756666696369656e742062616c616e636521000000000000000000000081525090610f12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f099190613d51565b60405180910390fd5b506000610f1d61288f565b73ffffffffffffffffffffffffffffffffffffffff1682604051610f40906147e2565b60006040518083038185875af1925050503d8060008114610f7d576040519150601f19603f3d011682016040523d82523d6000602084013e610f82565b606091505b50509050806040518060400160405280601081526020017f5472616e73666572206661696c65642e0000000000000000000000000000000081525090610ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff59190613d51565b60405180910390fd5b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661104461288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a6564210000000000000000000000000000000000815250906110d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c99190613d51565b60405180910390fd5b5080600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b61113283838360405180602001604052806000815250611d38565b505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661117861288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090611206576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111fd9190613d51565b60405180910390fd5b506000600460016101000a81548160ff0219169083151502179055508015611244576001600460006101000a81548160ff0219169083151502179055505b50565b60008060008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090611327576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131e9190613d51565b60405180910390fd5b5080915050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661137261288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090611400576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113f79190613d51565b60405180910390fd5b5060008083116040518060400160405280600e81526020017f4f7574206f6620626f756e6473210000000000000000000000000000000000008152509061147d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114749190613d51565b60405180910390fd5b506008548211156040518060400160405280600e81526020017f4f7574206f6620626f756e647321000000000000000000000000000000000000815250906114fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f29190613d51565b60405180910390fd5b5060008390505b8281116115d35760016036600083815260200190815260200160002060000160006101000a81548160ff02191690831515021790555085828151811061154b5761154a6147f7565b5b602002602001015160366000838152602001908152602001600020600101819055508482815181106115805761157f6147f7565b5b60200260200101516036600083815260200190815260200160002060020190805190602001906115b1929190613b88565b5081806115bd90614769565b92505080806115cb90614769565b915050611502565b507f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c8383604051611605929190614826565b60405180910390a15050505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415604051806060016040528060238152602001615e5c60239139906116a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116979190613d51565b60405180910390fd5b50600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b606081600081116040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090611766576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161175d9190613d51565b60405180910390fd5b506008548111156040518060400160405280600e81526020017f4f7574206f6620626f756e647321000000000000000000000000000000000000815250906117e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117db9190613d51565b60405180910390fd5b5060006117f084612f14565b6118016117fc86613074565b612f14565b61180a866130a2565b601060405160200161181f9493929190614c55565b6040516020818303038152906040529050611839816131b3565b6040516020016118499190614d16565b60405160208183030381529060405292505050919050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166118a261288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090611930576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119279190613d51565b60405180910390fd5b508015611943578160068190555061194b565b816007819055505b5050565b6000600854905090565b60606040518060400160405280600481526020017f534e455800000000000000000000000000000000000000000000000000000000815250905090565b61199e61288f565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090611a44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3b9190613d51565b60405180910390fd5b508060036000611a5261288f565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611aff61288f565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611b449190613ca6565b60405180910390a35050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611b9161288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090611c1f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c169190613d51565b60405180910390fd5b5060018160ff1603611c40578160329081611c3a9190614ecf565b50611ce1565b60028160ff1603611c60578160349081611c5a9190614ecf565b50611ce0565b60038160ff1603611c80578160339081611c7a9190614ecf565b50611cdf565b60048160ff1603611ca0578160109081611c9a9190614ecf565b50611cde565b60058160ff1603611cc05781600d9081611cba9190614ecf565b50611cdd565b60068160ff1603611cdc5781600e9081611cda9190614ecf565b505b5b5b5b5b5b60006008541115611d34577f6bd5c950a8d8df17f772f5af37cb3655737899cbf903264b9795592da439661c600180600854611d1d9190614735565b604051611d2b929190614fdc565b60405180910390a15b5050565b611d49611d4361288f565b83612ad9565b6040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090611dc0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db79190613d51565b60405180910390fd5b50611dcd84848484613316565b50505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16611e1461288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e999190613d51565b60405180910390fd5b5080600460006101000a81548160ff02191690831515021790555050565b606081600081116040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090611f3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f359190613d51565b60405180910390fd5b506008548111156040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090611fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb39190613d51565b60405180910390fd5b506000604051806020016040528060008152509050600115156036600086815260200190815260200160002060000160009054906101000a900460ff16151503612039576120098461338e565b612012856116e8565b604051602001612023929190615135565b604051602081830303815290604052905061205d565b603460405160200161204b9190615185565b60405160208183030381529060405290505b61212d6040518060400160405280600981526020017f226e616d65223a2022000000000000000000000000000000000000000000000081525061209f86612f14565b6040518060400160405280601081526020017f226465736372697074696f6e223a202200000000000000000000000000000000815250600d600f6120e28a612f14565b612101603660008d8152602001908152602001600020600101546133e8565b88604051602001612119989796959493929190615412565b6040516020818303038152906040526131b3565b60405160200161213d919061556a565b60405160208183030381529060405292505050919050565b60606000612182603560405160200161216e919061558c565b6040516020818303038152906040526131b3565b604051602001612192919061556a565b60405160208183030381529060405290508091505090565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000600160085461224f9190614735565b9050600061225b61288f565b600160405160200161226e9291906155d4565b60405160208183030381529060405280519060200120604051602001612294919061561e565b604051602081830303815290604052805190602001209050600460009054906101000a900460ff16156040518060400160405280601381526020017f436f6e7472616374206973207061757365642e0000000000000000000000000081525090612334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232b9190613d51565b60405180910390fd5b50600082116040518060400160405280600e81526020017f4f7574206f6620626f756e647321000000000000000000000000000000000000815250906123b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a79190613d51565b60405180910390fd5b506009548211156040518060400160405280600e81526020017f4f7574206f6620626f756e6473210000000000000000000000000000000000008152509061242e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124259190613d51565b60405180910390fd5b50600460019054906101000a900460ff166040518060400160405280601181526020017f50726573616c652066696e697368656421000000000000000000000000000000815250906124b6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ad9190613d51565b60405180910390fd5b506124c483600554836137e1565b6040518060400160405280601181526020017f4e6f7420696e20616c6c6f776c697374210000000000000000000000000000008152509061253b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125329190613d51565b60405180910390fd5b50600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661257d61288f565b73ffffffffffffffffffffffffffffffffffffffff1614612617576006543410156040518060400160405280601581526020017f496e73756666696369656e742062616c616e636521000000000000000000000081525090612615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161260c9190613d51565b60405180910390fd5b505b600a548203612657576001600460006101000a81548160ff0219169083151502179055506000600460016101000a81548160ff0219169083151502179055505b6008600081548092919061266a90614769565b919050555061268061267a61288f565b83612950565b60006036600084815260200190815260200160002060000160006101000a81548160ff02191690831515021790555060006036600084815260200190815260200160002060010181905550505050565b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1661271161288f565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a65642100000000000000000000000000000000008152509061279f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127969190613d51565b60405180910390fd5b508060058190555050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061281d575061281c826137f8565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff1660008084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661290a83611247565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61295981612824565b156040518060400160405280600e81526020017f4f7574206f6620626f756e647321000000000000000000000000000000000000815250906129d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c89190613d51565b60405180910390fd5b5060018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a219190614735565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612ae482612824565b6040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090612b5b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b529190613d51565b60405180910390fd5b506000612b6783611247565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612bd657508373ffffffffffffffffffffffffffffffffffffffff16612bbe846106dd565b73ffffffffffffffffffffffffffffffffffffffff16145b80612be75750612be681856121aa565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612c1082611247565b73ffffffffffffffffffffffffffffffffffffffff16146040518060400160405280600f81526020017f4e6f7420617574686f72697a656421000000000000000000000000000000000081525090612c9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c959190613d51565b60405180910390fd5b50600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415604051806060016040528060248152602001615dc36024913990612d2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d219190613d51565b60405180910390fd5b50612d3481612824565b6040518060400160405280600e81526020017f4f7574206f6620626f756e64732100000000000000000000000000000000000081525090612dab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da29190613d51565b60405180910390fd5b50612db7600082612897565b60018060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e069190615639565b9250508190555060018060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612e5c9190614735565b925050819055508160008083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b606060008203612f5b576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061306f565b600082905060005b60008214612f8d578080612f7690614769565b915050600a82612f86919061569c565b9150612f63565b60008167ffffffffffffffff811115612fa957612fa8613fa6565b5b6040519080825280601f01601f191660200182016040528015612fdb5781602001600182028036833780820191505090505b5090505b6000851461306857600182612ff49190615639565b9150600a8561300391906156cd565b603061300f9190614735565b60f81b818381518110613025576130246147f7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613061919061569c565b9450612fdf565b8093505050505b919050565b60008061308083611247565b90508073ffffffffffffffffffffffffffffffffffffffff1631915050919050565b606060006040518060400160405280600181526020017f5b00000000000000000000000000000000000000000000000000000000000000815250905060005b60048110156131875781613126603660008781526020019081526020016000206002018381548110613116576131156147f7565b5b9060005260206000200154612f14565b6040516020016131379291906156fe565b604051602081830303815290604052915060038110156131745781604051602001613162919061576e565b60405160208183030381529060405291505b808061317f90614769565b9150506130e1565b508060405160200161319991906157dc565b604051602081830303815290604052905080915050919050565b606060008251036131d557604051806020016040528060008152509050613311565b6000604051806060016040528060408152602001615e1c60409139905060006003600285516132049190614735565b61320e919061569c565b600461321a91906157fe565b67ffffffffffffffff81111561323357613232613fa6565b5b6040519080825280601f01601f1916602001820160405280156132655781602001600182028036833780820191505090505b509050600182016020820185865187015b808210156132d1576003820191508151603f8160121c168501518453600184019350603f81600c1c168501518453600184019350603f8160061c168501518453600184019350603f8116850151845360018401935050613276565b50506003865106600181146132ed576002811461330057613308565b603d6001830353603d6002830353613308565b603d60018303535b50505080925050505b919050565b613321848484612bf0565b61332d84848484613862565b604051806060016040528060358152602001615de76035913990613387576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161337e9190613d51565b60405180910390fd5b5050505050565b6060603361339d836000613a03565b6133a8846001613a03565b6133b3856002613a03565b6133be866003613a03565b6040516020016133d2959493929190615c68565b6040516020818303038152906040529050919050565b6060600060405180602001604052806000815250905060018303613498576011805461341390614b40565b80601f016020809104026020016040519081016040528092919081815260200182805461343f90614b40565b801561348c5780601f106134615761010080835404028352916020019161348c565b820191906000526020600020905b81548152906001019060200180831161346f57829003601f168201915b505050505090506137d8565b6002830361353257601280546134ad90614b40565b80601f01602080910402602001604051908101604052809291908181526020018280546134d990614b40565b80156135265780601f106134fb57610100808354040283529160200191613526565b820191906000526020600020905b81548152906001019060200180831161350957829003601f168201915b505050505090506137d7565b600383036135cc576013805461354790614b40565b80601f016020809104026020016040519081016040528092919081815260200182805461357390614b40565b80156135c05780601f10613595576101008083540402835291602001916135c0565b820191906000526020600020905b8154815290600101906020018083116135a357829003601f168201915b505050505090506137d6565b6004830361366657601480546135e190614b40565b80601f016020809104026020016040519081016040528092919081815260200182805461360d90614b40565b801561365a5780601f1061362f5761010080835404028352916020019161365a565b820191906000526020600020905b81548152906001019060200180831161363d57829003601f168201915b505050505090506137d5565b60058303613700576015805461367b90614b40565b80601f01602080910402602001604051908101604052809291908181526020018280546136a790614b40565b80156136f45780601f106136c9576101008083540402835291602001916136f4565b820191906000526020600020905b8154815290600101906020018083116136d757829003601f168201915b505050505090506137d4565b6006830361379a576016805461371590614b40565b80601f016020809104026020016040519081016040528092919081815260200182805461374190614b40565b801561378e5780601f106137635761010080835404028352916020019161378e565b820191906000526020600020905b81548152906001019060200180831161377157829003601f168201915b505050505090506137d3565b6040518060400160405280600a81526020017f556e72657665616c65640000000000000000000000000000000000000000000081525090505b5b5b5b5b5b80915050919050565b6000826137ee8584613add565b1490509392505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60006138838473ffffffffffffffffffffffffffffffffffffffff16613b33565b156139f6578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026138ac61288f565b8786866040518563ffffffff1660e01b81526004016138ce9493929190615d34565b6020604051808303816000875af192505050801561390a57506040513d601f19601f820116820180604052508101906139079190615d95565b60015b6139a6573d806000811461393a576040519150601f19603f3d011682016040523d82523d6000602084013e61393f565b606091505b50600081510361399e57604051806060016040528060358152602001615de7603591396040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139959190613d51565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506139fb565b600190505b949350505050565b60606017603660008581526020019081526020016000206002018381548110613a2f57613a2e6147f7565b5b9060005260206000200154601b8110613a4b57613a4a6147f7565b5b018054613a5790614b40565b80601f0160208091040260200160405190810160405280929190818152602001828054613a8390614b40565b8015613ad05780601f10613aa557610100808354040283529160200191613ad0565b820191906000526020600020905b815481529060010190602001808311613ab357829003601f168201915b5050505050905092915050565b60008082905060005b8451811015613b2857613b1382868381518110613b0657613b056147f7565b5b6020026020010151613b46565b91508080613b2090614769565b915050613ae6565b508091505092915050565b600080823b905060008111915050919050565b6000818310613b5e57613b598284613b71565b613b69565b613b688383613b71565b5b905092915050565b600082600052816020526040600020905092915050565b828054828255906000526020600020908101928215613bc4579160200282015b82811115613bc3578251825591602001919060010190613ba8565b5b509050613bd19190613bd5565b5090565b5b80821115613bee576000816000905550600101613bd6565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613c3b81613c06565b8114613c4657600080fd5b50565b600081359050613c5881613c32565b92915050565b600060208284031215613c7457613c73613bfc565b5b6000613c8284828501613c49565b91505092915050565b60008115159050919050565b613ca081613c8b565b82525050565b6000602082019050613cbb6000830184613c97565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015613cfb578082015181840152602081019050613ce0565b60008484015250505050565b6000601f19601f8301169050919050565b6000613d2382613cc1565b613d2d8185613ccc565b9350613d3d818560208601613cdd565b613d4681613d07565b840191505092915050565b60006020820190508181036000830152613d6b8184613d18565b905092915050565b6000819050919050565b613d8681613d73565b8114613d9157600080fd5b50565b600081359050613da381613d7d565b92915050565b600060208284031215613dbf57613dbe613bfc565b5b6000613dcd84828501613d94565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613e0182613dd6565b9050919050565b613e1181613df6565b82525050565b6000602082019050613e2c6000830184613e08565b92915050565b613e3b81613df6565b8114613e4657600080fd5b50565b600081359050613e5881613e32565b92915050565b60008060408385031215613e7557613e74613bfc565b5b6000613e8385828601613e49565b9250506020613e9485828601613d94565b9150509250929050565b613ea781613d73565b82525050565b6000602082019050613ec26000830184613e9e565b92915050565b600080600060608486031215613ee157613ee0613bfc565b5b6000613eef86828701613e49565b9350506020613f0086828701613e49565b9250506040613f1186828701613d94565b9150509250925092565b600060208284031215613f3157613f30613bfc565b5b6000613f3f84828501613e49565b91505092915050565b613f5181613c8b565b8114613f5c57600080fd5b50565b600081359050613f6e81613f48565b92915050565b600060208284031215613f8a57613f89613bfc565b5b6000613f9884828501613f5f565b91505092915050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613fde82613d07565b810181811067ffffffffffffffff82111715613ffd57613ffc613fa6565b5b80604052505050565b6000614010613bf2565b905061401c8282613fd5565b919050565b600067ffffffffffffffff82111561403c5761403b613fa6565b5b602082029050602081019050919050565b600080fd5b600061406561406084614021565b614006565b905080838252602082019050602084028301858111156140885761408761404d565b5b835b818110156140b1578061409d8882613d94565b84526020840193505060208101905061408a565b5050509392505050565b600082601f8301126140d0576140cf613fa1565b5b81356140e0848260208601614052565b91505092915050565b600067ffffffffffffffff82111561410457614103613fa6565b5b602082029050602081019050919050565b6000614128614123846140e9565b614006565b9050808382526020820190506020840283018581111561414b5761414a61404d565b5b835b8181101561419257803567ffffffffffffffff8111156141705761416f613fa1565b5b80860161417d89826140bb565b8552602085019450505060208101905061414d565b5050509392505050565b600082601f8301126141b1576141b0613fa1565b5b81356141c1848260208601614115565b91505092915050565b600080600080608085870312156141e4576141e3613bfc565b5b600085013567ffffffffffffffff81111561420257614201613c01565b5b61420e878288016140bb565b945050602085013567ffffffffffffffff81111561422f5761422e613c01565b5b61423b8782880161419c565b935050604061424c87828801613d94565b925050606061425d87828801613d94565b91505092959194509250565b600080604083850312156142805761427f613bfc565b5b600061428e85828601613d94565b925050602061429f85828601613f5f565b9150509250929050565b600080604083850312156142c0576142bf613bfc565b5b60006142ce85828601613e49565b92505060206142df85828601613f5f565b9150509250929050565b600080fd5b600067ffffffffffffffff82111561430957614308613fa6565b5b61431282613d07565b9050602081019050919050565b82818337600083830152505050565b600061434161433c846142ee565b614006565b90508281526020810184848401111561435d5761435c6142e9565b5b61436884828561431f565b509392505050565b600082601f83011261438557614384613fa1565b5b813561439584826020860161432e565b91505092915050565b600060ff82169050919050565b6143b48161439e565b81146143bf57600080fd5b50565b6000813590506143d1816143ab565b92915050565b600080604083850312156143ee576143ed613bfc565b5b600083013567ffffffffffffffff81111561440c5761440b613c01565b5b61441885828601614370565b9250506020614429858286016143c2565b9150509250929050565b600067ffffffffffffffff82111561444e5761444d613fa6565b5b61445782613d07565b9050602081019050919050565b600061447761447284614433565b614006565b905082815260208101848484011115614493576144926142e9565b5b61449e84828561431f565b509392505050565b600082601f8301126144bb576144ba613fa1565b5b81356144cb848260208601614464565b91505092915050565b600080600080608085870312156144ee576144ed613bfc565b5b60006144fc87828801613e49565b945050602061450d87828801613e49565b935050604061451e87828801613d94565b925050606085013567ffffffffffffffff81111561453f5761453e613c01565b5b61454b878288016144a6565b91505092959194509250565b6000806040838503121561456e5761456d613bfc565b5b600061457c85828601613e49565b925050602061458d85828601613e49565b9150509250929050565b600067ffffffffffffffff8211156145b2576145b1613fa6565b5b602082029050602081019050919050565b6000819050919050565b6145d6816145c3565b81146145e157600080fd5b50565b6000813590506145f3816145cd565b92915050565b600061460c61460784614597565b614006565b9050808382526020820190506020840283018581111561462f5761462e61404d565b5b835b81811015614658578061464488826145e4565b845260208401935050602081019050614631565b5050509392505050565b600082601f83011261467757614676613fa1565b5b81356146878482602086016145f9565b91505092915050565b6000602082840312156146a6576146a5613bfc565b5b600082013567ffffffffffffffff8111156146c4576146c3613c01565b5b6146d084828501614662565b91505092915050565b6000602082840312156146ef576146ee613bfc565b5b60006146fd848285016145e4565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061474082613d73565b915061474b83613d73565b925082820190508082111561476357614762614706565b5b92915050565b600061477482613d73565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036147a6576147a5614706565b5b600182019050919050565b600081905092915050565b50565b60006147cc6000836147b1565b91506147d7826147bc565b600082019050919050565b60006147ed826147bf565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600060408201905061483b6000830185613e9e565b6148486020830184613e9e565b9392505050565b600081905092915050565b7f3c21444f43545950452068746d6c3e3c68746d6c3e3c686561643e3c6d65746160008201527f20636861727365743d275554462d3827202f3e3c7374796c653e626f64797b6d60208201527f617267696e3a20303b7d63616e7661737b6261636b67726f756e643a2330303060408201527f3b646973706c61793a626c6f636b3b7d3c2f7374796c653e3c2f686561643e3c60608201527f626f64793e3c63616e7661732069643d27736e6578273e3c2f63616e7661733e60808201527f3c7363726970743e636f6e737420746f6b656e49643d0000000000000000000060a082015250565b600061494e60b68361484f565b91506149598261485a565b60b682019050919050565b600061496f82613cc1565b614979818561484f565b9350614989818560208601613cdd565b80840191505092915050565b7f3b6c6574206d696e696d756d3d353b6c65742062616c616e63653d0000000000600082015250565b60006149cb601b8361484f565b91506149d682614995565b601b82019050919050565b7f3b69662862616c616e63653d3d30297b6d696e696d756d3d307d6c657420736e60008201527f616b654c656e6774683d4d6174682e666c6f6f722862616c616e63652f31303060208201527f30303030303030303030303030303030292b6d696e696d756d3b696628736e6160408201527f6b654c656e6774683e39393935297b736e616b654c656e6774683d393939357d60608201527f636f6e737420746f6b656e436f6c6f72733d0000000000000000000000000000608082015250565b6000614aaf60928361484f565b9150614aba826149e1565b609282019050919050565b7f3b3c2f7363726970743e3c7363726970743e0000000000000000000000000000600082015250565b6000614afb60128361484f565b9150614b0682614ac5565b601282019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614b5857607f821691505b602082108103614b6b57614b6a614b11565b5b50919050565b60008190508160005260206000209050919050565b60008154614b9381614b40565b614b9d818661484f565b94506001821660008114614bb85760018114614bcd57614c00565b60ff1983168652811515820286019350614c00565b614bd685614b71565b60005b83811015614bf857815481890152600182019150602081019050614bd9565b838801955050505b50505092915050565b7f3c2f7363726970743e3c2f626f64793e3c2f68746d6c3e000000000000000000600082015250565b6000614c3f60178361484f565b9150614c4a82614c09565b601782019050919050565b6000614c6082614941565b9150614c6c8287614964565b9150614c77826149be565b9150614c838286614964565b9150614c8e82614aa2565b9150614c9a8285614964565b9150614ca582614aee565b9150614cb18284614b86565b9150614cbc82614c32565b915081905095945050505050565b7f646174613a746578742f68746d6c3b6261736536342c00000000000000000000600082015250565b6000614d0060168361484f565b9150614d0b82614cca565b601682019050919050565b6000614d2182614cf3565b9150614d2d8284614964565b915081905092915050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302614d857fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82614d48565b614d8f8683614d48565b95508019841693508086168417925050509392505050565b6000819050919050565b6000614dcc614dc7614dc284613d73565b614da7565b613d73565b9050919050565b6000819050919050565b614de683614db1565b614dfa614df282614dd3565b848454614d55565b825550505050565b600090565b614e0f614e02565b614e1a818484614ddd565b505050565b5b81811015614e3e57614e33600082614e07565b600181019050614e20565b5050565b601f821115614e8357614e5481614b71565b614e5d84614d38565b81016020851015614e6c578190505b614e80614e7885614d38565b830182614e1f565b50505b505050565b600082821c905092915050565b6000614ea660001984600802614e88565b1980831691505092915050565b6000614ebf8383614e95565b9150826002028217905092915050565b614ed882613cc1565b67ffffffffffffffff811115614ef157614ef0613fa6565b5b614efb8254614b40565b614f06828285614e42565b600060209050601f831160018114614f395760008415614f27578287015190505b614f318582614eb3565b865550614f99565b601f198416614f4786614b71565b60005b82811015614f6f57848901518255600182019150602085019450602081019050614f4a565b86831015614f8c5784890151614f88601f891682614e95565b8355505b6001600288020188555050505b505050505050565b6000819050919050565b6000614fc6614fc1614fbc84614fa1565b614da7565b613d73565b9050919050565b614fd681614fab565b82525050565b6000604082019050614ff16000830185614fcd565b614ffe6020830184613e9e565b9392505050565b7f22696d616765223a202200000000000000000000000000000000000000000000600082015250565b600061503b600a8361484f565b915061504682615005565b600a82019050919050565b7f222c000000000000000000000000000000000000000000000000000000000000600082015250565b600061508760028361484f565b915061509282615051565b600282019050919050565b7f22616e696d6174696f6e5f75726c223a20220000000000000000000000000000600082015250565b60006150d360128361484f565b91506150de8261509d565b601282019050919050565b7f2200000000000000000000000000000000000000000000000000000000000000600082015250565b600061511f60018361484f565b915061512a826150e9565b600182019050919050565b60006151408261502e565b915061514c8285614964565b91506151578261507a565b9150615162826150c6565b915061516e8284614964565b915061517982615112565b91508190509392505050565b60006151908261502e565b915061519c8284614b86565b91506151a782615112565b915081905092915050565b7f7b00000000000000000000000000000000000000000000000000000000000000600082015250565b60006151e860018361484f565b91506151f3826151b2565b600182019050919050565b7f534e455820230000000000000000000000000000000000000000000000000000600082015250565b600061523460068361484f565b915061523f826151fe565b600682019050919050565b7f2265787465726e616c5f75726c223a2022000000000000000000000000000000600082015250565b600061528060118361484f565b915061528b8261524a565b601182019050919050565b7f2261747472696275746573223a205b0000000000000000000000000000000000600082015250565b60006152cc600f8361484f565b91506152d782615296565b600f82019050919050565b7f2274726169745f74797065223a2022526172697479222c200000000000000000600082015250565b600061531860188361484f565b9150615323826152e2565b601882019050919050565b7f2276616c7565223a202200000000000000000000000000000000000000000000600082015250565b6000615364600a8361484f565b915061536f8261532e565b600a82019050919050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006153b060018361484f565b91506153bb8261537a565b600182019050919050565b7f5d2c000000000000000000000000000000000000000000000000000000000000600082015250565b60006153fc60028361484f565b9150615407826153c6565b600282019050919050565b600061541d826151db565b9150615429828b614964565b915061543482615227565b9150615440828a614964565b915061544b8261507a565b91506154578289614964565b91506154638288614b86565b915061546e8261507a565b915061547982615273565b91506154858287614b86565b91506154918286614964565b915061549c8261507a565b91506154a7826152bf565b91506154b2826151db565b91506154bd8261530b565b91506154c882615357565b91506154d48285614964565b91506154df82615112565b91506154ea826153a3565b91506154f5826153ef565b91506155018284614964565b915061550c826153a3565b91508190509998505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000615554601d8361484f565b915061555f8261551e565b601d82019050919050565b600061557582615547565b91506155818284614964565b915081905092915050565b60006155988284614b86565b915081905092915050565b60006155be6155b96155b484614fa1565b614da7565b61439e565b9050919050565b6155ce816155a3565b82525050565b60006040820190506155e96000830185613e08565b6155f660208301846155c5565b9392505050565b6000819050919050565b615618615613826145c3565b6155fd565b82525050565b600061562a8284615607565b60208201915081905092915050565b600061564482613d73565b915061564f83613d73565b925082820390508181111561566757615666614706565b5b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006156a782613d73565b91506156b283613d73565b9250826156c2576156c161566d565b5b828204905092915050565b60006156d882613d73565b91506156e383613d73565b9250826156f3576156f261566d565b5b828206905092915050565b600061570a8285614964565b91506157168284614964565b91508190509392505050565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b600061575860018361484f565b915061576382615722565b600182019050919050565b600061577a8284614964565b91506157858261574b565b915081905092915050565b7f5d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006157c660018361484f565b91506157d182615790565b600182019050919050565b60006157e88284614964565b91506157f3826157b9565b915081905092915050565b600061580982613d73565b915061581483613d73565b925082820261582281613d73565b9150828204841483151761583957615838614706565b5b5092915050565b7f3b66696c6c2d6f7061636974793a313b7374726f6b652d77696474683a322e3660008201527f343538333b7374726f6b652d6c696e656361703a726f756e643b7374726f6b6560208201527f2d6c696e656a6f696e3a726f756e64272069643d277365676d656e743127206360408201527f783d2736352e343538323434272063793d2731302e3436303739322720723d2760608201527f31332e32323931363727207472616e73666f726d3d27726f746174652833362e60808201527f34363935362927202f3e3c636972636c65207374796c653d2766696c6c3a000060a082015250565b600061593460be8361484f565b915061593f82615840565b60be82019050919050565b7f3b66696c6c2d6f7061636974793a313b7374726f6b652d77696474683a322e3660008201527f343538333b7374726f6b652d6c696e656361703a726f756e643b7374726f6b6560208201527f2d6c696e656a6f696e3a726f756e64272069643d277365676d656e743227206360408201527f783d2736392e393937313038272063793d27382e323032373036332720723d2760608201527f31332e32323931363727207472616e73666f726d3d27726f746174652833362e60808201527f34363935362927202f3e3c636972636c65207374796c653d2766696c6c3a000060a082015250565b6000615a3e60be8361484f565b9150615a498261594a565b60be82019050919050565b7f3b66696c6c2d6f7061636974793a313b7374726f6b652d77696474683a322e3660008201527f343538333b7374726f6b652d6c696e656361703a726f756e643b7374726f6b6560208201527f2d6c696e656a6f696e3a726f756e64272069643d277365676d656e743327206360408201527f783d2737362e383331343239272063793d27382e363037343338312720723d2760608201527f31332e32323931363727207472616e73666f726d3d27726f746174652833362e60808201527f34363935362927202f3e3c636972636c65207374796c653d2766696c6c3a000060a082015250565b6000615b4860be8361484f565b9150615b5382615a54565b60be82019050919050565b7f3b66696c6c2d6f7061636974793a313b7374726f6b652d77696474683a322e3660008201527f343538333b7374726f6b652d6c696e656361703a726f756e643b7374726f6b6560208201527f2d6c696e656a6f696e3a726f756e64272069643d277365676d656e743427206360408201527f783d2738322e353536393038272063793d2731312e3734303632342720723d2760608201527f31332e32323931363727207472616e73666f726d3d27726f746174652833362e60808201527f34363935362927202f3e3c2f7376673e0000000000000000000000000000000060a082015250565b6000615c5260b08361484f565b9150615c5d82615b5e565b60b082019050919050565b6000615c748288614b86565b9150615c808287614964565b9150615c8b82615927565b9150615c978286614964565b9150615ca282615a31565b9150615cae8285614964565b9150615cb982615b3b565b9150615cc58284614964565b9150615cd082615c45565b91508190509695505050505050565b600081519050919050565b600082825260208201905092915050565b6000615d0682615cdf565b615d108185615cea565b9350615d20818560208601613cdd565b615d2981613d07565b840191505092915050565b6000608082019050615d496000830187613e08565b615d566020830186613e08565b615d636040830185613e9e565b8181036060830152615d758184615cfb565b905095945050505050565b600081519050615d8f81613c32565b92915050565b600060208284031215615dab57615daa613bfc565b5b6000615db984828501615d80565b9150509291505056fe43616e6e6f74207472616e7366657220746f20746865207a65726f206164647265737321417474656d70746564207472616e7366657220746f206e6f6e20455243373231526563656976657220696d706c656d656e746572214142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f42616c616e636520717565727920666f7220746865207a65726f20616464726573732ea26469706673582212208d3b1b6856a0299aefcf49c5e6db7caf026ccfd44ac98340ca36e33b226f1b3164736f6c63430008130033

Deployed Bytecode Sourcemap

18401:14075:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25551:198;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25465:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9369:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9066:298;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28804:517;;;:::i;:::-;;27034:76;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9972:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32193:280;;;:::i;:::-;;27449:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10178:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31434:146;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8872:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30666:570;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8700:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24497:784;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27749:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25337:83;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25807:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9546:262;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28220:530;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10325:236;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31989:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26002:985;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24174:250;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9813:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29371:925;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31714:114;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25551:198;25653:4;25693:10;25686:18;;25671:33;;;:11;:33;;;;:73;;;;25708:36;25732:11;25708:23;:36::i;:::-;25671:73;25664:80;;25551:198;;;:::o;25465:81::-;25501:13;25528;;;;;;;;;;;;;;;;;25521:20;;25465:81;:::o;9369:172::-;9444:7;9466:16;9474:7;9466;:16::i;:::-;9484:15;;;;;;;;;;;;;;;;;9458:42;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9512:15;:24;9528:7;9512:24;;;;;;;;;;;;;;;;;;;;;9505:31;;9369:172;;;:::o;9066:298::-;9141:13;9157:23;9172:7;9157:14;:23::i;:::-;9141:39;;9199:5;9193:11;;:2;:11;;;;9206:17;;;;;;;;;;;;;;;;;9185:39;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9258:5;9242:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;9267:37;9284:5;9291:12;:10;:12::i;:::-;9267:16;:37::i;:::-;9242:62;9311:17;;;;;;;;;;;;;;;;;9229:104;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9338:21;9347:2;9351:7;9338:8;:21::i;:::-;9136:228;9066:298;;:::o;28804:517::-;28840:19;28878:1;28862:13;;:17;;;;:::i;:::-;28840:39;;28893:11;;;;;;;;;;;28892:12;28906:10;;;;;;;;;;;;;;;;;28884:33;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;28944:1;28930:11;:15;28947;;;;;;;;;;;;;;;;;28922:41;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;28991:7;;28976:11;:22;;29000:15;;;;;;;;;;;;;;;;;28968:48;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29030:14;;;;;;;;;;;29029:15;29046:13;;;;;;;;;;;;;;;;;29021:39;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29086:18;;;;;;;;;;;29070:34;;:12;:10;:12::i;:::-;:34;;;29067:109;;29133:14;;29120:9;:27;;29149:20;;;;;;;;;;;;;;;;;29112:58;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29067:109;29182:13;;:15;;;;;;;;;:::i;:::-;;;;;;29202:32;29208:12;:10;:12::i;:::-;29222:11;29202:5;:32::i;:::-;29273:5;29239:9;:22;29249:11;29239:22;;;;;;;;;;;:31;;;:39;;;;;;;;;;;;;;;;;;29315:1;29283:9;:22;29293:11;29283:22;;;;;;;;;;;:29;;:33;;;;28835:486;28804:517::o;27034:76::-;27077:7;27098;;27091:14;;27034:76;:::o;9972:201::-;10074:41;10093:12;:10;:12::i;:::-;10107:7;10074:18;:41::i;:::-;10117:17;;;;;;;;;;;;;;;;;10066:69;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10140:28;10150:4;10156:2;10160:7;10140:9;:28::i;:::-;9972:201;;;:::o;32193:280::-;21077:18;;;;;;;;;;;21061:34;;:12;:10;:12::i;:::-;:34;;;21097:17;;;;;;;;;;;;;;;;;21053:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;32243:12:::1;32258:21;32243:36;;32293:11;;;;;;;;;;;32292:12;32306:10;;;;;;;;;;;;;;;;::::0;32284:33:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;32340:1;32330:7;:11;32343:20;;;;;;;;;;;;;;;;::::0;32322:42:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;32370:12;32389;:10;:12::i;:::-;32388:19;;32415:7;32388:39;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32369:58;;;32440:7;32449:18;;;;;;;;;;;;;;;;::::0;32432:36:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;32238:235;;32193:280::o:0;27449:105::-;21077:18;;;;;;;;;;;21061:34;;:12;:10;:12::i;:::-;:34;;;21097:17;;;;;;;;;;;;;;;;;21053:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;27540:9:::1;27519:18;;:30;;;;;;;;;;;;;;;;;;27449:105:::0;:::o;10178:142::-;10276:39;10293:4;10299:2;10303:7;10276:39;;;;;;;;;;;;:16;:39::i;:::-;10178:142;;;:::o;31434:146::-;21077:18;;;;;;;;;;;21061:34;;:12;:10;:12::i;:::-;:34;;;21097:17;;;;;;;;;;;;;;;;;21053:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;31517:5:::1;31500:14;;:22;;;;;;;;;;;;;;;;;;31530:14;31527:49;;;31566:4;31552:11;;:18;;;;;;;;;;;;;;;;;;31527:49;31434:146:::0;:::o;8872:189::-;8943:7;8957:13;8973:7;:16;8981:7;8973:16;;;;;;;;;;;;;;;;;;;;;8957:32;;9019:1;9002:19;;:5;:19;;;;9023:15;;;;;;;;;;;;;;;;;8994:45;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9051:5;9044:12;;;8872:189;;;:::o;30666:570::-;21077:18;;;;;;;;;;;21061:34;;:12;:10;:12::i;:::-;:34;;;21097:17;;;;;;;;;;;;;;;;;21053:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;30810:21:::1;30864:1:::0;30848:13:::1;:17;30867:15;;;;;;;;;;;;;;;;::::0;30840:43:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;30911:13;;30896:11;:28;;30926:15;;;;;;;;;;;;;;;;::::0;30888:54:::1;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;30951:6;30960:13;30951:22;;30947:226;30980:11;30975:1;:16;30947:226;;31029:4;31005:9;:12;31015:1;31005:12;;;;;;;;;;;:21;;;:28;;;;;;;;;;;;;;;;;;31061:12;31074:13;31061:27;;;;;;;;:::i;:::-;;;;;;;;31039:9;:12;31049:1;31039:12;;;;;;;;;;;:19;;:49;;;;31121:10;31132:13;31121:25;;;;;;;;:::i;:::-;;;;;;;;31094:9;:12;31104:1;31094:12;;;;;;;;;;;:24;;:52;;;;;;;;;;;;:::i;:::-;;31152:15;;;;;:::i;:::-;;;;30994:3;;;;;:::i;:::-;;;;30947:226;;;;31184:47;31204:13;31219:11;31184:47;;;;;;;:::i;:::-;;;;;;;;30805:431;30666:570:::0;;;;:::o;8700:167::-;8771:7;8810:1;8793:19;;:5;:19;;;;8814;;;;;;;;;;;;;;;;;8785:49;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;8846:9;:16;8856:5;8846:16;;;;;;;;;;;;;;;;8839:23;;8700:167;;;:::o;24497:784::-;24578:13;24549:7;20939:1;20929:7;:11;20942:15;;;;;;;;;;;;;;;;;20921:37;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20982:13;;20971:7;:24;;20997:15;;;;;;;;;;;;;;;;;20963:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;24598:17:::1;24826:25;24843:7;24826:16;:25::i;:::-;24884:40;24901:22;24915:7;24901:13;:22::i;:::-;24884:16;:40::i;:::-;25075:26;25093:7;25075:17;:26::i;:::-;25124:10;24618:548;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24598:568;;25246:19;25260:4;25246:13;:19::i;:::-;25192:79;;;;;;;;:::i;:::-;;;;;;;;;;;;;25173:103;;;24497:784:::0;;;;:::o;27749:186::-;21077:18;;;;;;;;;;;21061:34;;:12;:10;:12::i;:::-;:34;;;21097:17;;;;;;;;;;;;;;;;;21053:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;27833:10:::1;27830:101;;;27869:9;27851:15;:27;;;;27830:101;;;27916:9;27899:14;:26;;;;27830:101;27749:186:::0;;:::o;25337:83::-;25381:7;25402:13;;25395:20;;25337:83;:::o;25807:85::-;25845:13;25872:15;;;;;;;;;;;;;;;;;25865:22;;25807:85;:::o;9546:262::-;9655:12;:10;:12::i;:::-;9643:24;;:8;:24;;;;9669:17;;;;;;;;;;;;;;;;;9635:52;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;9737:8;9692:18;:32;9711:12;:10;:12::i;:::-;9692:32;;;;;;;;;;;;;;;:42;9725:8;9692:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;9784:8;9755:48;;9770:12;:10;:12::i;:::-;9755:48;;;9794:8;9755:48;;;;;;:::i;:::-;;;;;;;;9546:262;;:::o;28220:530::-;21077:18;;;;;;;;;;;21061:34;;:12;:10;:12::i;:::-;:34;;;21097:17;;;;;;;;;;;;;;;;;21053:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;28319:1:::1;28309:6;:11;;::::0;28306:354:::1;;28346:7;28328:15;:25;;;;;;:::i;:::-;;28306:354;;;28381:1;28371:6;:11;;::::0;28368:292:::1;;28410:7;28390:17;:27;;;;;;:::i;:::-;;28368:292;;;28445:1;28435:6;:11;;::::0;28432:228:::1;;28470:7;28454:13;:23;;;;;;:::i;:::-;;28432:228;;;28505:1;28495:6;:11;;::::0;28492:168:::1;;28527:7;28514:10;:20;;;;;;:::i;:::-;;28492:168;;;28562:1;28552:6;:11;;::::0;28549:111:::1;;28589:7;28571:15;:25;;;;;;:::i;:::-;;28549:111;;;28624:1;28614:6;:11;;::::0;28611:49:::1;;28647:7;28633:11;:21;;;;;;:::i;:::-;;28611:49;28549:111;28492:168;28432:228;28368:292;28306:354;28683:1;28667:13;;:17;28664:82;;;28697:43;28717:1;28737::::0;28721:13:::1;;:17;;;;:::i;:::-;28697:43;;;;;;;:::i;:::-;;;;;;;;28664:82;28220:530:::0;;:::o;10325:236::-;10451:41;10470:12;:10;:12::i;:::-;10484:7;10451:18;:41::i;:::-;10494:17;;;;;;;;;;;;;;;;;10443:69;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10517:39;10531:4;10537:2;10541:7;10550:5;10517:13;:39::i;:::-;10325:236;;;;:::o;31989:84::-;21077:18;;;;;;;;;;;21061:34;;:12;:10;:12::i;:::-;:34;;;21097:17;;;;;;;;;;;;;;;;;21053:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;32062:6:::1;32048:11;;:20;;;;;;;;;;;;;;;;;;31989:84:::0;:::o;26002:985::-;26079:13;26050:7;20939:1;20929:7;:11;20942:15;;;;;;;;;;;;;;;;;20921:37;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20982:13;;20971:7;:24;;20997:15;;;;;;;;;;;;;;;;;20963:50;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;26099:24:::1;:29;;;;;;;;;;;::::0;::::1;;26167:4;26136:35;;:9;:18;26146:7;26136:18;;;;;;;;;;;:27;;;;;;;;;;;;:35;;::::0;26133:302:::1;;26236:18;26246:7;26236:9;:18::i;:::-;26289:21;26302:7;26289:12;:21::i;:::-;26199:122;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26179:143;;26133:302;;;26400:17;26363:65;;;;;;;;:::i;:::-;;;;;;;;;;;;;26343:86;;26133:302;26519:452;26569:12;;;;;;;;;;;;;;;;::::0;26593:25:::1;26610:7;26593:16;:25::i;:::-;26633:19;;;;;;;;;;;;;;;;::::0;26654:15:::1;26705:21;26728:25;26745:7;26728:16;:25::i;:::-;26860:42;26876:9;:18;26886:7;26876:18;;;;;;;;;;;:25;;;26860:15;:42::i;:::-;26942:10;26533:437;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26519:13;:452::i;:::-;26458:519;;;;;;;;:::i;:::-;;;;;;;;;;;;;26439:543;;;26002:985:::0;;;;:::o;24174:250::-;24217:13;24237:23;24336:49;24367:16;24350:34;;;;;;;;:::i;:::-;;;;;;;;;;;;;24336:13;:49::i;:::-;24275:116;;;;;;;;:::i;:::-;;;;;;;;;;;;;24237:159;;24410:9;24403:16;;;24174:250;:::o;9813:154::-;9909:4;9927:18;:25;9946:5;9927:25;;;;;;;;;;;;;;;:35;9953:8;9927:35;;;;;;;;;;;;;;;;;;;;;;;;;9920:42;;9813:154;;;;:::o;29371:925::-;29437:19;29475:1;29459:13;;:17;;;;:::i;:::-;29437:39;;29481:13;29541:12;:10;:12::i;:::-;29555:1;29530:27;;;;;;;;;:::i;:::-;;;;;;;;;;;;;29520:38;;;;;;29507:52;;;;;;;;:::i;:::-;;;;;;;;;;;;;29497:63;;;;;;29481:79;;29574:11;;;;;;;;;;;29573:12;29587:10;;;;;;;;;;;;;;;;;29565:33;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29625:1;29611:11;:15;29628;;;;;;;;;;;;;;;;;29603:41;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29672:7;;29657:11;:22;;29681:15;;;;;;;;;;;;;;;;;29649:48;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29710:14;;;;;;;;;;;29726:19;;;;;;;;;;;;;;;;;29702:44;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29759:55;29778:6;29786:20;;29808:5;29759:18;:55::i;:::-;29816:16;;;;;;;;;;;;;;;;;29751:82;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29859:18;;;;;;;;;;;29843:34;;:12;:10;:12::i;:::-;:34;;;29840:110;;29906:15;;29893:9;:28;;29923:20;;;;;;;;;;;;;;;;;29885:59;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;29840:110;29974:16;;29959:11;:31;29956:195;;30113:4;30099:11;;:18;;;;;;;;;;;;;;;;;;30140:5;30123:14;;:22;;;;;;;;;;;;;;;;;;29956:195;30157:13;;:15;;;;;;;;;:::i;:::-;;;;;;30177:32;30183:12;:10;:12::i;:::-;30197:11;30177:5;:32::i;:::-;30248:5;30214:9;:22;30224:11;30214:22;;;;;;;;;;;:31;;;:39;;;;;;;;;;;;;;;;;;30290:1;30258:9;:22;30268:11;30258:22;;;;;;;;;;;:29;;:33;;;;29432:864;;29371:925;:::o;31714:114::-;21077:18;;;;;;;;;;;21061:34;;:12;:10;:12::i;:::-;:34;;;21097:17;;;;;;;;;;;;;;;;;21053:62;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;31812:11:::1;31789:20;:34;;;;31714:114:::0;:::o;8485:210::-;8586:4;8622:25;8607:40;;;:11;:40;;;;:83;;;;8654:36;8678:11;8654:23;:36::i;:::-;8607:83;8597:93;;8485:210;;;:::o;10796:117::-;10860:4;10906:1;10878:30;;:7;:16;10886:7;10878:16;;;;;;;;;;;;;;;;;;;;;:30;;;;10871:37;;10796:117;;;:::o;6557:88::-;6609:7;6630:10;6623:17;;6557:88;:::o;12154:159::-;12250:2;12223:15;:24;12239:7;12223:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;12300:7;12296:2;12262:46;;12271:23;12286:7;12271:14;:23::i;:::-;12262:46;;;;;;;;;;;;12154:159;;:::o;11546:206::-;11621:16;11629:7;11621;:16::i;:::-;11620:17;11639:15;;;;;;;;;;;;;;;;;11612:43;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11677:1;11660:9;:13;11670:2;11660:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11702:2;11683:7;:16;11691:7;11683:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11739:7;11735:2;11714:33;;11731:1;11714:33;;;;;;;;;;;;11546:206;;:::o;10918:295::-;11010:4;11029:16;11037:7;11029;:16::i;:::-;11047:15;;;;;;;;;;;;;;;;;11021:42;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11068:13;11084:23;11099:7;11084:14;:23::i;:::-;11068:39;;11131:5;11120:16;;:7;:16;;;:51;;;;11164:7;11140:31;;:20;11152:7;11140:11;:20::i;:::-;:31;;;11120:51;:87;;;;11175:32;11192:5;11199:7;11175:16;:32::i;:::-;11120:87;11112:96;;;10918:295;;;;:::o;11757:392::-;11876:4;11849:31;;:23;11864:7;11849:14;:23::i;:::-;:31;;;11882:17;;;;;;;;;;;;;;;;;11841:59;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11927:1;11913:16;;:2;:16;;;;11931:20;;;;;;;;;;;;;;;;;11905:47;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;11965:16;11973:7;11965;:16::i;:::-;11983:15;;;;;;;;;;;;;;;;;11957:42;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;12004:29;12021:1;12025:7;12004:8;:29::i;:::-;12057:1;12038:9;:15;12048:4;12038:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;12080:1;12063:9;:13;12073:2;12063:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;12105:2;12086:7;:16;12094:7;12086:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;12136:7;12132:2;12117:27;;12126:4;12117:27;;;;;;;;;;;;11757:392;;;:::o;6901:413::-;6956:13;6988:1;6979:5;:10;6976:37;;6997:10;;;;;;;;;;;;;;;;;;;;;6976:37;7017:12;7032:5;7017:20;;7042:14;7061:54;7076:1;7068:4;:9;7061:54;;7085:8;;;;;:::i;:::-;;;;7107:2;7099:10;;;;;:::i;:::-;;;7061:54;;;7119:19;7151:6;7141:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7119:39;;7163:121;7179:1;7170:5;:10;7163:121;;7198:1;7188:11;;;;;:::i;:::-;;;7256:2;7248:5;:10;;;;:::i;:::-;7235:2;:24;;;;:::i;:::-;7222:39;;7205:6;7212;7205:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;7276:2;7267:11;;;;;:::i;:::-;;;7163:121;;;7302:6;7288:21;;;;;6901:413;;;;:::o;22981:138::-;23043:7;23057:13;23073:16;23081:7;23073;:16::i;:::-;23057:32;;23101:5;:13;;;23094:20;;;22981:138;;;:::o;21352:427::-;21418:13;21438:23;:29;;;;;;;;;;;;;;;;;;;21478:6;21474:221;21494:1;21490;:5;21474:221;;;21544:9;21555:51;21572:9;:18;21582:7;21572:18;;;;;;;;;;;:30;;21603:1;21572:33;;;;;;;;:::i;:::-;;;;;;;;;;21555:16;:51::i;:::-;21527:80;;;;;;;;;:::i;:::-;;;;;;;;;;;;;21508:100;;21621:1;21617;:5;21614:76;;;21667:9;21650:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;21631:52;;21614:76;21497:3;;;;;:::i;:::-;;;;21474:221;;;;21735:9;21718:32;;;;;;;;:::i;:::-;;;;;;;;;;;;;21699:52;;21765:9;21758:16;;;21352:427;;;:::o;14265:1165::-;14322:13;14360:1;14345:4;:11;:16;14342:30;;14363:9;;;;;;;;;;;;;;;;14342:30;14377:19;14399:6;;;;;;;;;;;;;;;;;14377:28;;14410:20;14469:1;14464;14450:4;:11;:15;;;;:::i;:::-;14449:21;;;;:::i;:::-;14444:1;:27;;;;:::i;:::-;14433:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14410:62;;14521:1;14514:5;14510:13;14557:2;14549:6;14545:15;14591:4;14631;14625:11;14619:4;14615:22;14565:651;14656:6;14647:7;14644:19;14565:651;;;14705:1;14696:7;14692:15;14681:26;;14732:7;14726:14;14805:4;14797:5;14793:2;14789:14;14785:25;14775:8;14771:40;14765:47;14754:9;14746:67;14847:1;14836:9;14832:17;14819:30;;14925:4;14917:5;14913:2;14909:14;14905:25;14895:8;14891:40;14885:47;14874:9;14866:67;14967:1;14956:9;14952:17;14939:30;;15044:4;15036:5;15033:1;15029:13;15025:24;15015:8;15011:39;15005:46;14994:9;14986:66;15086:1;15075:9;15071:17;15058:30;;15155:4;15148:5;15144:16;15134:8;15130:31;15124:38;15113:9;15105:58;15197:1;15186:9;15182:17;15169:30;;14674:542;14565:651;;;14569:74;;15247:1;15240:4;15234:11;15230:19;15259:1;15254:90;;;;15354:1;15349:52;;;;15223:178;;15254:90;15295:4;15291:1;15280:9;15276:17;15268:32;15333:4;15329:1;15318:9;15314:17;15306:32;15254:90;;15349:52;15390:4;15386:1;15375:9;15371:17;15363:32;15223:178;;14488:918;;15419:6;15412:13;;;;14265:1165;;;;:::o;10566:225::-;10674:28;10684:4;10690:2;10694:7;10674:9;:28::i;:::-;10715:48;10738:4;10744:2;10748:7;10757:5;10715:22;:48::i;:::-;10765:20;;;;;;;;;;;;;;;;;10707:79;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;10566:225;;;;:::o;21963:1013::-;22022:13;22078;22093:27;22108:8;22118:1;22093:14;:27::i;:::-;22316;22331:8;22341:1;22316:14;:27::i;:::-;22539;22554:8;22564:1;22539:14;:27::i;:::-;22762;22777:8;22787:1;22762:14;:27::i;:::-;22056:914;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22042:929;;21963:1013;;;:::o;23124:566::-;23188:13;23208:22;:27;;;;;;;;;;;;;;23254:1;23243:7;:12;23240:424;;23274:15;23263:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23240:424;;;23318:1;23307:7;:12;23304:360;;23338:15;23327:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23304:360;;;23382:1;23371:7;:12;23368:296;;23402:16;23391:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23368:296;;;23447:1;23436:7;:12;23433:231;;23467:16;23456:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23433:231;;;23512:1;23501:7;:12;23498:166;;23532:16;23521:27;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23498:166;;;23577:1;23566:7;:12;23563:101;;23597:17;23586:28;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23563:101;;;23635:23;;;;;;;;;;;;;;;;;;;23563:101;23498:166;23433:231;23368:296;23304:360;23240:424;23677:8;23670:15;;;23124:566;;;:::o;15529:147::-;15620:4;15667;15638:25;15651:5;15658:4;15638:12;:25::i;:::-;:33;15631:40;;15529:147;;;;;:::o;7969:::-;8053:4;8086:25;8071:40;;;:11;:40;;;;8064:47;;7969:147;;;:::o;12318:555::-;12429:4;12443:15;:2;:13;;;:15::i;:::-;12440:429;;;12486:2;12470:36;;;12507:12;:10;:12::i;:::-;12521:4;12527:7;12536:5;12470:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12466:366;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12694:1;12677:6;:13;:18;12674:152;;12712:20;;;;;;;;;;;;;;;;;12705:28;;;;;;;;;;;:::i;:::-;;;;;;;;12674:152;12803:6;12797:13;12788:6;12784:2;12780:15;12773:38;12466:366;12590:41;;;12580:51;;;:6;:51;;;;12573:58;;;;;12440:429;12859:4;12852:11;;12318:555;;;;;;;:::o;21784:174::-;21869:13;21896:11;21908:9;:19;21918:8;21908:19;;;;;;;;;;;:31;;21940:11;21908:44;;;;;;;;:::i;:::-;;;;;;;;;;21896:57;;;;;;;:::i;:::-;;;21889:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21784:174;;;;:::o;15681:259::-;15764:7;15778:20;15801:4;15778:27;;15814:9;15810:102;15833:5;:12;15829:1;:16;15810:102;;;15873:33;15883:12;15897:5;15903:1;15897:8;;;;;;;;:::i;:::-;;;;;;;;15873:9;:33::i;:::-;15858:48;;15847:3;;;;;:::i;:::-;;;;15810:102;;;;15923:12;15916:19;;;15681:259;;;;:::o;3749:159::-;3808:4;3819:12;3871:7;3859:20;3851:28;;3902:1;3895:4;:8;3888:15;;;3749:159;;;:::o;18003:140::-;18066:7;18091:1;18087;:5;:51;;18118:20;18133:1;18136;18118:14;:20::i;:::-;18087:51;;;18095:20;18110:1;18113;18095:14;:20::i;:::-;18087:51;18080:58;;18003:140;;;;:::o;18148:220::-;18216:13;18302:1;18296:4;18289:15;18322:1;18316:4;18309:15;18354:4;18348;18338:21;18329:30;;18148:220;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:246::-;1879:1;1889:113;1903:6;1900:1;1897:13;1889:113;;;1988:1;1983:3;1979:11;1973:18;1969:1;1964:3;1960:11;1953:39;1925:2;1922:1;1918:10;1913:15;;1889:113;;;2036:1;2027:6;2022:3;2018:16;2011:27;1860:184;1798:246;;;:::o;2050:102::-;2091:6;2142:2;2138:7;2133:2;2126:5;2122:14;2118:28;2108:38;;2050:102;;;:::o;2158:377::-;2246:3;2274:39;2307:5;2274:39;:::i;:::-;2329:71;2393:6;2388:3;2329:71;:::i;:::-;2322:78;;2409:65;2467:6;2462:3;2455:4;2448:5;2444:16;2409:65;:::i;:::-;2499:29;2521:6;2499:29;:::i;:::-;2494:3;2490:39;2483:46;;2250:285;2158:377;;;;:::o;2541:313::-;2654:4;2692:2;2681:9;2677:18;2669:26;;2741:9;2735:4;2731:20;2727:1;2716:9;2712:17;2705:47;2769:78;2842:4;2833:6;2769:78;:::i;:::-;2761:86;;2541:313;;;;:::o;2860:77::-;2897:7;2926:5;2915:16;;2860:77;;;:::o;2943:122::-;3016:24;3034:5;3016:24;:::i;:::-;3009:5;3006:35;2996:63;;3055:1;3052;3045:12;2996:63;2943:122;:::o;3071:139::-;3117:5;3155:6;3142:20;3133:29;;3171:33;3198:5;3171:33;:::i;:::-;3071:139;;;;:::o;3216:329::-;3275:6;3324:2;3312:9;3303:7;3299:23;3295:32;3292:119;;;3330:79;;:::i;:::-;3292:119;3450:1;3475:53;3520:7;3511:6;3500:9;3496:22;3475:53;:::i;:::-;3465:63;;3421:117;3216:329;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:329::-;5926:6;5975:2;5963:9;5954:7;5950:23;5946:32;5943:119;;;5981:79;;:::i;:::-;5943:119;6101:1;6126:53;6171:7;6162:6;6151:9;6147:22;6126:53;:::i;:::-;6116:63;;6072:117;5867:329;;;;:::o;6202:116::-;6272:21;6287:5;6272:21;:::i;:::-;6265:5;6262:32;6252:60;;6308:1;6305;6298:12;6252:60;6202:116;:::o;6324:133::-;6367:5;6405:6;6392:20;6383:29;;6421:30;6445:5;6421:30;:::i;:::-;6324:133;;;;:::o;6463:323::-;6519:6;6568:2;6556:9;6547:7;6543:23;6539:32;6536:119;;;6574:79;;:::i;:::-;6536:119;6694:1;6719:50;6761:7;6752:6;6741:9;6737:22;6719:50;:::i;:::-;6709:60;;6665:114;6463:323;;;;:::o;6792:117::-;6901:1;6898;6891:12;6915:180;6963:77;6960:1;6953:88;7060:4;7057:1;7050:15;7084:4;7081:1;7074:15;7101:281;7184:27;7206:4;7184:27;:::i;:::-;7176:6;7172:40;7314:6;7302:10;7299:22;7278:18;7266:10;7263:34;7260:62;7257:88;;;7325:18;;:::i;:::-;7257:88;7365:10;7361:2;7354:22;7144:238;7101:281;;:::o;7388:129::-;7422:6;7449:20;;:::i;:::-;7439:30;;7478:33;7506:4;7498:6;7478:33;:::i;:::-;7388:129;;;:::o;7523:311::-;7600:4;7690:18;7682:6;7679:30;7676:56;;;7712:18;;:::i;:::-;7676:56;7762:4;7754:6;7750:17;7742:25;;7822:4;7816;7812:15;7804:23;;7523:311;;;:::o;7840:117::-;7949:1;7946;7939:12;7980:710;8076:5;8101:81;8117:64;8174:6;8117:64;:::i;:::-;8101:81;:::i;:::-;8092:90;;8202:5;8231:6;8224:5;8217:21;8265:4;8258:5;8254:16;8247:23;;8318:4;8310:6;8306:17;8298:6;8294:30;8347:3;8339:6;8336:15;8333:122;;;8366:79;;:::i;:::-;8333:122;8481:6;8464:220;8498:6;8493:3;8490:15;8464:220;;;8573:3;8602:37;8635:3;8623:10;8602:37;:::i;:::-;8597:3;8590:50;8669:4;8664:3;8660:14;8653:21;;8540:144;8524:4;8519:3;8515:14;8508:21;;8464:220;;;8468:21;8082:608;;7980:710;;;;;:::o;8713:370::-;8784:5;8833:3;8826:4;8818:6;8814:17;8810:27;8800:122;;8841:79;;:::i;:::-;8800:122;8958:6;8945:20;8983:94;9073:3;9065:6;9058:4;9050:6;9046:17;8983:94;:::i;:::-;8974:103;;8790:293;8713:370;;;;:::o;9089:336::-;9191:4;9281:18;9273:6;9270:30;9267:56;;;9303:18;;:::i;:::-;9267:56;9353:4;9345:6;9341:17;9333:25;;9413:4;9407;9403:15;9395:23;;9089:336;;;:::o;9450:990::-;9571:5;9596:106;9612:89;9694:6;9612:89;:::i;:::-;9596:106;:::i;:::-;9587:115;;9722:5;9751:6;9744:5;9737:21;9785:4;9778:5;9774:16;9767:23;;9838:4;9830:6;9826:17;9818:6;9814:30;9867:3;9859:6;9856:15;9853:122;;;9886:79;;:::i;:::-;9853:122;10001:6;9984:450;10018:6;10013:3;10010:15;9984:450;;;10107:3;10094:17;10143:18;10130:11;10127:35;10124:122;;;10165:79;;:::i;:::-;10124:122;10289:11;10281:6;10277:24;10327:62;10385:3;10373:10;10327:62;:::i;:::-;10322:3;10315:75;10419:4;10414:3;10410:14;10403:21;;10060:374;;10044:4;10039:3;10035:14;10028:21;;9984:450;;;9988:21;9577:863;;9450:990;;;;;:::o;10465:420::-;10561:5;10610:3;10603:4;10595:6;10591:17;10587:27;10577:122;;10618:79;;:::i;:::-;10577:122;10735:6;10722:20;10760:119;10875:3;10867:6;10860:4;10852:6;10848:17;10760:119;:::i;:::-;10751:128;;10567:318;10465:420;;;;:::o;10891:1235::-;11052:6;11060;11068;11076;11125:3;11113:9;11104:7;11100:23;11096:33;11093:120;;;11132:79;;:::i;:::-;11093:120;11280:1;11269:9;11265:17;11252:31;11310:18;11302:6;11299:30;11296:117;;;11332:79;;:::i;:::-;11296:117;11437:78;11507:7;11498:6;11487:9;11483:22;11437:78;:::i;:::-;11427:88;;11223:302;11592:2;11581:9;11577:18;11564:32;11623:18;11615:6;11612:30;11609:117;;;11645:79;;:::i;:::-;11609:117;11750:103;11845:7;11836:6;11825:9;11821:22;11750:103;:::i;:::-;11740:113;;11535:328;11902:2;11928:53;11973:7;11964:6;11953:9;11949:22;11928:53;:::i;:::-;11918:63;;11873:118;12030:2;12056:53;12101:7;12092:6;12081:9;12077:22;12056:53;:::i;:::-;12046:63;;12001:118;10891:1235;;;;;;;:::o;12132:468::-;12197:6;12205;12254:2;12242:9;12233:7;12229:23;12225:32;12222:119;;;12260:79;;:::i;:::-;12222:119;12380:1;12405:53;12450:7;12441:6;12430:9;12426:22;12405:53;:::i;:::-;12395:63;;12351:117;12507:2;12533:50;12575:7;12566:6;12555:9;12551:22;12533:50;:::i;:::-;12523:60;;12478:115;12132:468;;;;;:::o;12606:::-;12671:6;12679;12728:2;12716:9;12707:7;12703:23;12699:32;12696:119;;;12734:79;;:::i;:::-;12696:119;12854:1;12879:53;12924:7;12915:6;12904:9;12900:22;12879:53;:::i;:::-;12869:63;;12825:117;12981:2;13007:50;13049:7;13040:6;13029:9;13025:22;13007:50;:::i;:::-;12997:60;;12952:115;12606:468;;;;;:::o;13080:117::-;13189:1;13186;13179:12;13203:308;13265:4;13355:18;13347:6;13344:30;13341:56;;;13377:18;;:::i;:::-;13341:56;13415:29;13437:6;13415:29;:::i;:::-;13407:37;;13499:4;13493;13489:15;13481:23;;13203:308;;;:::o;13517:146::-;13614:6;13609:3;13604;13591:30;13655:1;13646:6;13641:3;13637:16;13630:27;13517:146;;;:::o;13669:425::-;13747:5;13772:66;13788:49;13830:6;13788:49;:::i;:::-;13772:66;:::i;:::-;13763:75;;13861:6;13854:5;13847:21;13899:4;13892:5;13888:16;13937:3;13928:6;13923:3;13919:16;13916:25;13913:112;;;13944:79;;:::i;:::-;13913:112;14034:54;14081:6;14076:3;14071;14034:54;:::i;:::-;13753:341;13669:425;;;;;:::o;14114:340::-;14170:5;14219:3;14212:4;14204:6;14200:17;14196:27;14186:122;;14227:79;;:::i;:::-;14186:122;14344:6;14331:20;14369:79;14444:3;14436:6;14429:4;14421:6;14417:17;14369:79;:::i;:::-;14360:88;;14176:278;14114:340;;;;:::o;14460:86::-;14495:7;14535:4;14528:5;14524:16;14513:27;;14460:86;;;:::o;14552:118::-;14623:22;14639:5;14623:22;:::i;:::-;14616:5;14613:33;14603:61;;14660:1;14657;14650:12;14603:61;14552:118;:::o;14676:135::-;14720:5;14758:6;14745:20;14736:29;;14774:31;14799:5;14774:31;:::i;:::-;14676:135;;;;:::o;14817:650::-;14893:6;14901;14950:2;14938:9;14929:7;14925:23;14921:32;14918:119;;;14956:79;;:::i;:::-;14918:119;15104:1;15093:9;15089:17;15076:31;15134:18;15126:6;15123:30;15120:117;;;15156:79;;:::i;:::-;15120:117;15261:63;15316:7;15307:6;15296:9;15292:22;15261:63;:::i;:::-;15251:73;;15047:287;15373:2;15399:51;15442:7;15433:6;15422:9;15418:22;15399:51;:::i;:::-;15389:61;;15344:116;14817:650;;;;;:::o;15473:307::-;15534:4;15624:18;15616:6;15613:30;15610:56;;;15646:18;;:::i;:::-;15610:56;15684:29;15706:6;15684:29;:::i;:::-;15676:37;;15768:4;15762;15758:15;15750:23;;15473:307;;;:::o;15786:423::-;15863:5;15888:65;15904:48;15945:6;15904:48;:::i;:::-;15888:65;:::i;:::-;15879:74;;15976:6;15969:5;15962:21;16014:4;16007:5;16003:16;16052:3;16043:6;16038:3;16034:16;16031:25;16028:112;;;16059:79;;:::i;:::-;16028:112;16149:54;16196:6;16191:3;16186;16149:54;:::i;:::-;15869:340;15786:423;;;;;:::o;16228:338::-;16283:5;16332:3;16325:4;16317:6;16313:17;16309:27;16299:122;;16340:79;;:::i;:::-;16299:122;16457:6;16444:20;16482:78;16556:3;16548:6;16541:4;16533:6;16529:17;16482:78;:::i;:::-;16473:87;;16289:277;16228:338;;;;:::o;16572:943::-;16667:6;16675;16683;16691;16740:3;16728:9;16719:7;16715:23;16711:33;16708:120;;;16747:79;;:::i;:::-;16708:120;16867:1;16892:53;16937:7;16928:6;16917:9;16913:22;16892:53;:::i;:::-;16882:63;;16838:117;16994:2;17020:53;17065:7;17056:6;17045:9;17041:22;17020:53;:::i;:::-;17010:63;;16965:118;17122:2;17148:53;17193:7;17184:6;17173:9;17169:22;17148:53;:::i;:::-;17138:63;;17093:118;17278:2;17267:9;17263:18;17250:32;17309:18;17301:6;17298:30;17295:117;;;17331:79;;:::i;:::-;17295:117;17436:62;17490:7;17481:6;17470:9;17466:22;17436:62;:::i;:::-;17426:72;;17221:287;16572:943;;;;;;;:::o;17521:474::-;17589:6;17597;17646:2;17634:9;17625:7;17621:23;17617:32;17614:119;;;17652:79;;:::i;:::-;17614:119;17772:1;17797:53;17842:7;17833:6;17822:9;17818:22;17797:53;:::i;:::-;17787:63;;17743:117;17899:2;17925:53;17970:7;17961:6;17950:9;17946:22;17925:53;:::i;:::-;17915:63;;17870:118;17521:474;;;;;:::o;18001:311::-;18078:4;18168:18;18160:6;18157:30;18154:56;;;18190:18;;:::i;:::-;18154:56;18240:4;18232:6;18228:17;18220:25;;18300:4;18294;18290:15;18282:23;;18001:311;;;:::o;18318:77::-;18355:7;18384:5;18373:16;;18318:77;;;:::o;18401:122::-;18474:24;18492:5;18474:24;:::i;:::-;18467:5;18464:35;18454:63;;18513:1;18510;18503:12;18454:63;18401:122;:::o;18529:139::-;18575:5;18613:6;18600:20;18591:29;;18629:33;18656:5;18629:33;:::i;:::-;18529:139;;;;:::o;18691:710::-;18787:5;18812:81;18828:64;18885:6;18828:64;:::i;:::-;18812:81;:::i;:::-;18803:90;;18913:5;18942:6;18935:5;18928:21;18976:4;18969:5;18965:16;18958:23;;19029:4;19021:6;19017:17;19009:6;19005:30;19058:3;19050:6;19047:15;19044:122;;;19077:79;;:::i;:::-;19044:122;19192:6;19175:220;19209:6;19204:3;19201:15;19175:220;;;19284:3;19313:37;19346:3;19334:10;19313:37;:::i;:::-;19308:3;19301:50;19380:4;19375:3;19371:14;19364:21;;19251:144;19235:4;19230:3;19226:14;19219:21;;19175:220;;;19179:21;18793:608;;18691:710;;;;;:::o;19424:370::-;19495:5;19544:3;19537:4;19529:6;19525:17;19521:27;19511:122;;19552:79;;:::i;:::-;19511:122;19669:6;19656:20;19694:94;19784:3;19776:6;19769:4;19761:6;19757:17;19694:94;:::i;:::-;19685:103;;19501:293;19424:370;;;;:::o;19800:539::-;19884:6;19933:2;19921:9;19912:7;19908:23;19904:32;19901:119;;;19939:79;;:::i;:::-;19901:119;20087:1;20076:9;20072:17;20059:31;20117:18;20109:6;20106:30;20103:117;;;20139:79;;:::i;:::-;20103:117;20244:78;20314:7;20305:6;20294:9;20290:22;20244:78;:::i;:::-;20234:88;;20030:302;19800:539;;;;:::o;20345:329::-;20404:6;20453:2;20441:9;20432:7;20428:23;20424:32;20421:119;;;20459:79;;:::i;:::-;20421:119;20579:1;20604:53;20649:7;20640:6;20629:9;20625:22;20604:53;:::i;:::-;20594:63;;20550:117;20345:329;;;;:::o;20680:180::-;20728:77;20725:1;20718:88;20825:4;20822:1;20815:15;20849:4;20846:1;20839:15;20866:191;20906:3;20925:20;20943:1;20925:20;:::i;:::-;20920:25;;20959:20;20977:1;20959:20;:::i;:::-;20954:25;;21002:1;20999;20995:9;20988:16;;21023:3;21020:1;21017:10;21014:36;;;21030:18;;:::i;:::-;21014:36;20866:191;;;;:::o;21063:233::-;21102:3;21125:24;21143:5;21125:24;:::i;:::-;21116:33;;21171:66;21164:5;21161:77;21158:103;;21241:18;;:::i;:::-;21158:103;21288:1;21281:5;21277:13;21270:20;;21063:233;;;:::o;21302:147::-;21403:11;21440:3;21425:18;;21302:147;;;;:::o;21455:114::-;;:::o;21575:398::-;21734:3;21755:83;21836:1;21831:3;21755:83;:::i;:::-;21748:90;;21847:93;21936:3;21847:93;:::i;:::-;21965:1;21960:3;21956:11;21949:18;;21575:398;;;:::o;21979:379::-;22163:3;22185:147;22328:3;22185:147;:::i;:::-;22178:154;;22349:3;22342:10;;21979:379;;;:::o;22364:180::-;22412:77;22409:1;22402:88;22509:4;22506:1;22499:15;22533:4;22530:1;22523:15;22550:332;22671:4;22709:2;22698:9;22694:18;22686:26;;22722:71;22790:1;22779:9;22775:17;22766:6;22722:71;:::i;:::-;22803:72;22871:2;22860:9;22856:18;22847:6;22803:72;:::i;:::-;22550:332;;;;;:::o;22888:148::-;22990:11;23027:3;23012:18;;22888:148;;;;:::o;23042:523::-;23182:34;23178:1;23170:6;23166:14;23159:58;23251:34;23246:2;23238:6;23234:15;23227:59;23324:34;23319:2;23311:6;23307:15;23300:59;23393:34;23388:2;23380:6;23376:15;23369:59;23463:34;23457:3;23449:6;23445:16;23438:60;23533:24;23527:3;23519:6;23515:16;23508:50;23042:523;:::o;23571:404::-;23731:3;23752:86;23834:3;23829;23752:86;:::i;:::-;23745:93;;23847;23936:3;23847:93;:::i;:::-;23965:3;23960;23956:13;23949:20;;23571:404;;;:::o;23981:390::-;24087:3;24115:39;24148:5;24115:39;:::i;:::-;24170:89;24252:6;24247:3;24170:89;:::i;:::-;24163:96;;24268:65;24326:6;24321:3;24314:4;24307:5;24303:16;24268:65;:::i;:::-;24358:6;24353:3;24349:16;24342:23;;24091:280;23981:390;;;;:::o;24377:177::-;24517:29;24513:1;24505:6;24501:14;24494:53;24377:177;:::o;24560:402::-;24720:3;24741:85;24823:2;24818:3;24741:85;:::i;:::-;24734:92;;24835:93;24924:3;24835:93;:::i;:::-;24953:2;24948:3;24944:12;24937:19;;24560:402;;;:::o;24968:449::-;25108:34;25104:1;25096:6;25092:14;25085:58;25177:34;25172:2;25164:6;25160:15;25153:59;25250:34;25245:2;25237:6;25233:15;25226:59;25319:34;25314:2;25306:6;25302:15;25295:59;25389:20;25383:3;25375:6;25371:16;25364:46;24968:449;:::o;25423:404::-;25583:3;25604:86;25686:3;25681;25604:86;:::i;:::-;25597:93;;25699;25788:3;25699:93;:::i;:::-;25817:3;25812;25808:13;25801:20;;25423:404;;;:::o;25833:168::-;25973:20;25969:1;25961:6;25957:14;25950:44;25833:168;:::o;26007:402::-;26167:3;26188:85;26270:2;26265:3;26188:85;:::i;:::-;26181:92;;26282:93;26371:3;26282:93;:::i;:::-;26400:2;26395:3;26391:12;26384:19;;26007:402;;;:::o;26415:180::-;26463:77;26460:1;26453:88;26560:4;26557:1;26550:15;26584:4;26581:1;26574:15;26601:320;26645:6;26682:1;26676:4;26672:12;26662:22;;26729:1;26723:4;26719:12;26750:18;26740:81;;26806:4;26798:6;26794:17;26784:27;;26740:81;26868:2;26860:6;26857:14;26837:18;26834:38;26831:84;;26887:18;;:::i;:::-;26831:84;26652:269;26601:320;;;:::o;26927:141::-;26976:4;26999:3;26991:11;;27022:3;27019:1;27012:14;27056:4;27053:1;27043:18;27035:26;;26927:141;;;:::o;27098:874::-;27201:3;27238:5;27232:12;27267:36;27293:9;27267:36;:::i;:::-;27319:89;27401:6;27396:3;27319:89;:::i;:::-;27312:96;;27439:1;27428:9;27424:17;27455:1;27450:166;;;;27630:1;27625:341;;;;27417:549;;27450:166;27534:4;27530:9;27519;27515:25;27510:3;27503:38;27596:6;27589:14;27582:22;27574:6;27570:35;27565:3;27561:45;27554:52;;27450:166;;27625:341;27692:38;27724:5;27692:38;:::i;:::-;27752:1;27766:154;27780:6;27777:1;27774:13;27766:154;;;27854:7;27848:14;27844:1;27839:3;27835:11;27828:35;27904:1;27895:7;27891:15;27880:26;;27802:4;27799:1;27795:12;27790:17;;27766:154;;;27949:6;27944:3;27940:16;27933:23;;27632:334;;27417:549;;27205:767;;27098:874;;;;:::o;27978:173::-;28118:25;28114:1;28106:6;28102:14;28095:49;27978:173;:::o;28157:402::-;28317:3;28338:85;28420:2;28415:3;28338:85;:::i;:::-;28331:92;;28432:93;28521:3;28432:93;:::i;:::-;28550:2;28545:3;28541:12;28534:19;;28157:402;;;:::o;28565:2079::-;29343:3;29365:148;29509:3;29365:148;:::i;:::-;29358:155;;29530:95;29621:3;29612:6;29530:95;:::i;:::-;29523:102;;29642:148;29786:3;29642:148;:::i;:::-;29635:155;;29807:95;29898:3;29889:6;29807:95;:::i;:::-;29800:102;;29919:148;30063:3;29919:148;:::i;:::-;29912:155;;30084:95;30175:3;30166:6;30084:95;:::i;:::-;30077:102;;30196:148;30340:3;30196:148;:::i;:::-;30189:155;;30361:92;30449:3;30440:6;30361:92;:::i;:::-;30354:99;;30470:148;30614:3;30470:148;:::i;:::-;30463:155;;30635:3;30628:10;;28565:2079;;;;;;;:::o;30650:172::-;30790:24;30786:1;30778:6;30774:14;30767:48;30650:172;:::o;30828:402::-;30988:3;31009:85;31091:2;31086:3;31009:85;:::i;:::-;31002:92;;31103:93;31192:3;31103:93;:::i;:::-;31221:2;31216:3;31212:12;31205:19;;30828:402;;;:::o;31236:541::-;31469:3;31491:148;31635:3;31491:148;:::i;:::-;31484:155;;31656:95;31747:3;31738:6;31656:95;:::i;:::-;31649:102;;31768:3;31761:10;;31236:541;;;;:::o;31783:93::-;31820:6;31867:2;31862;31855:5;31851:14;31847:23;31837:33;;31783:93;;;:::o;31882:107::-;31926:8;31976:5;31970:4;31966:16;31945:37;;31882:107;;;;:::o;31995:393::-;32064:6;32114:1;32102:10;32098:18;32137:97;32167:66;32156:9;32137:97;:::i;:::-;32255:39;32285:8;32274:9;32255:39;:::i;:::-;32243:51;;32327:4;32323:9;32316:5;32312:21;32303:30;;32376:4;32366:8;32362:19;32355:5;32352:30;32342:40;;32071:317;;31995:393;;;;;:::o;32394:60::-;32422:3;32443:5;32436:12;;32394:60;;;:::o;32460:142::-;32510:9;32543:53;32561:34;32570:24;32588:5;32570:24;:::i;:::-;32561:34;:::i;:::-;32543:53;:::i;:::-;32530:66;;32460:142;;;:::o;32608:75::-;32651:3;32672:5;32665:12;;32608:75;;;:::o;32689:269::-;32799:39;32830:7;32799:39;:::i;:::-;32860:91;32909:41;32933:16;32909:41;:::i;:::-;32901:6;32894:4;32888:11;32860:91;:::i;:::-;32854:4;32847:105;32765:193;32689:269;;;:::o;32964:73::-;33009:3;32964:73;:::o;33043:189::-;33120:32;;:::i;:::-;33161:65;33219:6;33211;33205:4;33161:65;:::i;:::-;33096:136;33043:189;;:::o;33238:186::-;33298:120;33315:3;33308:5;33305:14;33298:120;;;33369:39;33406:1;33399:5;33369:39;:::i;:::-;33342:1;33335:5;33331:13;33322:22;;33298:120;;;33238:186;;:::o;33430:543::-;33531:2;33526:3;33523:11;33520:446;;;33565:38;33597:5;33565:38;:::i;:::-;33649:29;33667:10;33649:29;:::i;:::-;33639:8;33635:44;33832:2;33820:10;33817:18;33814:49;;;33853:8;33838:23;;33814:49;33876:80;33932:22;33950:3;33932:22;:::i;:::-;33922:8;33918:37;33905:11;33876:80;:::i;:::-;33535:431;;33520:446;33430:543;;;:::o;33979:117::-;34033:8;34083:5;34077:4;34073:16;34052:37;;33979:117;;;;:::o;34102:169::-;34146:6;34179:51;34227:1;34223:6;34215:5;34212:1;34208:13;34179:51;:::i;:::-;34175:56;34260:4;34254;34250:15;34240:25;;34153:118;34102:169;;;;:::o;34276:295::-;34352:4;34498:29;34523:3;34517:4;34498:29;:::i;:::-;34490:37;;34560:3;34557:1;34553:11;34547:4;34544:21;34536:29;;34276:295;;;;:::o;34576:1395::-;34693:37;34726:3;34693:37;:::i;:::-;34795:18;34787:6;34784:30;34781:56;;;34817:18;;:::i;:::-;34781:56;34861:38;34893:4;34887:11;34861:38;:::i;:::-;34946:67;35006:6;34998;34992:4;34946:67;:::i;:::-;35040:1;35064:4;35051:17;;35096:2;35088:6;35085:14;35113:1;35108:618;;;;35770:1;35787:6;35784:77;;;35836:9;35831:3;35827:19;35821:26;35812:35;;35784:77;35887:67;35947:6;35940:5;35887:67;:::i;:::-;35881:4;35874:81;35743:222;35078:887;;35108:618;35160:4;35156:9;35148:6;35144:22;35194:37;35226:4;35194:37;:::i;:::-;35253:1;35267:208;35281:7;35278:1;35275:14;35267:208;;;35360:9;35355:3;35351:19;35345:26;35337:6;35330:42;35411:1;35403:6;35399:14;35389:24;;35458:2;35447:9;35443:18;35430:31;;35304:4;35301:1;35297:12;35292:17;;35267:208;;;35503:6;35494:7;35491:19;35488:179;;;35561:9;35556:3;35552:19;35546:26;35604:48;35646:4;35638:6;35634:17;35623:9;35604:48;:::i;:::-;35596:6;35589:64;35511:156;35488:179;35713:1;35709;35701:6;35697:14;35693:22;35687:4;35680:36;35115:611;;;35078:887;;34668:1303;;;34576:1395;;:::o;35977:85::-;36022:7;36051:5;36040:16;;35977:85;;;:::o;36068:158::-;36126:9;36159:61;36177:42;36186:32;36212:5;36186:32;:::i;:::-;36177:42;:::i;:::-;36159:61;:::i;:::-;36146:74;;36068:158;;;:::o;36232:147::-;36327:45;36366:5;36327:45;:::i;:::-;36322:3;36315:58;36232:147;;:::o;36385:348::-;36514:4;36552:2;36541:9;36537:18;36529:26;;36565:79;36641:1;36630:9;36626:17;36617:6;36565:79;:::i;:::-;36654:72;36722:2;36711:9;36707:18;36698:6;36654:72;:::i;:::-;36385:348;;;;;:::o;36739:214::-;36879:66;36875:1;36867:6;36863:14;36856:90;36739:214;:::o;36959:402::-;37119:3;37140:85;37222:2;37217:3;37140:85;:::i;:::-;37133:92;;37234:93;37323:3;37234:93;:::i;:::-;37352:2;37347:3;37343:12;37336:19;;36959:402;;;:::o;37367:214::-;37507:66;37503:1;37495:6;37491:14;37484:90;37367:214;:::o;37587:400::-;37747:3;37768:84;37850:1;37845:3;37768:84;:::i;:::-;37761:91;;37861:93;37950:3;37861:93;:::i;:::-;37979:1;37974:3;37970:11;37963:18;;37587:400;;;:::o;37993:214::-;38133:66;38129:1;38121:6;38117:14;38110:90;37993:214;:::o;38213:402::-;38373:3;38394:85;38476:2;38471:3;38394:85;:::i;:::-;38387:92;;38488:93;38577:3;38488:93;:::i;:::-;38606:2;38601:3;38597:12;38590:19;;38213:402;;;:::o;38621:214::-;38761:66;38757:1;38749:6;38745:14;38738:90;38621:214;:::o;38841:400::-;39001:3;39022:84;39104:1;39099:3;39022:84;:::i;:::-;39015:91;;39115:93;39204:3;39115:93;:::i;:::-;39233:1;39228:3;39224:11;39217:18;;38841:400;;;:::o;39247:1499::-;39831:3;39853:148;39997:3;39853:148;:::i;:::-;39846:155;;40018:95;40109:3;40100:6;40018:95;:::i;:::-;40011:102;;40130:148;40274:3;40130:148;:::i;:::-;40123:155;;40295:148;40439:3;40295:148;:::i;:::-;40288:155;;40460:95;40551:3;40542:6;40460:95;:::i;:::-;40453:102;;40572:148;40716:3;40572:148;:::i;:::-;40565:155;;40737:3;40730:10;;39247:1499;;;;;:::o;40752:801::-;41083:3;41105:148;41249:3;41105:148;:::i;:::-;41098:155;;41270:92;41358:3;41349:6;41270:92;:::i;:::-;41263:99;;41379:148;41523:3;41379:148;:::i;:::-;41372:155;;41544:3;41537:10;;40752:801;;;;:::o;41559:155::-;41699:3;41695:1;41687:6;41683:14;41676:27;41559:155;:::o;41724:416::-;41884:3;41909:84;41991:1;41986:3;41909:84;:::i;:::-;41902:91;;42006:93;42095:3;42006:93;:::i;:::-;42128:1;42123:3;42119:11;42112:18;;41724:416;;;:::o;42150:164::-;42294:8;42290:1;42282:6;42278:14;42271:32;42150:164;:::o;42324:416::-;42484:3;42509:84;42591:1;42586:3;42509:84;:::i;:::-;42502:91;;42606:93;42695:3;42606:93;:::i;:::-;42728:1;42723:3;42719:11;42712:18;;42324:416;;;:::o;42750:222::-;42894:66;42890:1;42882:6;42878:14;42871:90;42750:222;:::o;42982:418::-;43142:3;43167:85;43249:2;43244:3;43167:85;:::i;:::-;43160:92;;43265:93;43354:3;43265:93;:::i;:::-;43387:2;43382:3;43378:12;43371:19;;42982:418;;;:::o;43410:222::-;43554:66;43550:1;43542:6;43538:14;43531:90;43410:222;:::o;43642:418::-;43802:3;43827:85;43909:2;43904:3;43827:85;:::i;:::-;43820:92;;43925:93;44014:3;43925:93;:::i;:::-;44047:2;44042:3;44038:12;44031:19;;43642:418;;;:::o;44070:222::-;44214:66;44210:1;44202:6;44198:14;44191:90;44070:222;:::o;44302:418::-;44462:3;44487:85;44569:2;44564:3;44487:85;:::i;:::-;44480:92;;44585:93;44674:3;44585:93;:::i;:::-;44707:2;44702:3;44698:12;44691:19;;44302:418;;;:::o;44730:222::-;44874:66;44870:1;44862:6;44858:14;44851:90;44730:222;:::o;44962:418::-;45122:3;45147:85;45229:2;45224:3;45147:85;:::i;:::-;45140:92;;45245:93;45334:3;45245:93;:::i;:::-;45367:2;45362:3;45358:12;45351:19;;44962:418;;;:::o;45390:151::-;45530:3;45526:1;45518:6;45514:14;45507:27;45390:151;:::o;45547:400::-;45707:3;45728:84;45810:1;45805:3;45728:84;:::i;:::-;45721:91;;45821:93;45910:3;45821:93;:::i;:::-;45939:1;45934:3;45930:11;45923:18;;45547:400;;;:::o;45953:152::-;46093:4;46089:1;46081:6;46077:14;46070:28;45953:152;:::o;46111:400::-;46271:3;46292:84;46374:1;46369:3;46292:84;:::i;:::-;46285:91;;46385:93;46474:3;46385:93;:::i;:::-;46503:1;46498:3;46494:11;46487:18;;46111:400;;;:::o;46517:5107::-;48393:3;48415:148;48559:3;48415:148;:::i;:::-;48408:155;;48580:95;48671:3;48662:6;48580:95;:::i;:::-;48573:102;;48692:148;48836:3;48692:148;:::i;:::-;48685:155;;48857:95;48948:3;48939:6;48857:95;:::i;:::-;48850:102;;48969:148;49113:3;48969:148;:::i;:::-;48962:155;;49134:95;49225:3;49216:6;49134:95;:::i;:::-;49127:102;;49246:92;49334:3;49325:6;49246:92;:::i;:::-;49239:99;;49355:148;49499:3;49355:148;:::i;:::-;49348:155;;49520:148;49664:3;49520:148;:::i;:::-;49513:155;;49685:92;49773:3;49764:6;49685:92;:::i;:::-;49678:99;;49794:95;49885:3;49876:6;49794:95;:::i;:::-;49787:102;;49906:148;50050:3;49906:148;:::i;:::-;49899:155;;50071:148;50215:3;50071:148;:::i;:::-;50064:155;;50236:148;50380:3;50236:148;:::i;:::-;50229:155;;50401:148;50545:3;50401:148;:::i;:::-;50394:155;;50566:148;50710:3;50566:148;:::i;:::-;50559:155;;50731:95;50822:3;50813:6;50731:95;:::i;:::-;50724:102;;50843:148;50987:3;50843:148;:::i;:::-;50836:155;;51008:148;51152:3;51008:148;:::i;:::-;51001:155;;51173:148;51317:3;51173:148;:::i;:::-;51166:155;;51338:95;51429:3;51420:6;51338:95;:::i;:::-;51331:102;;51450:148;51594:3;51450:148;:::i;:::-;51443:155;;51615:3;51608:10;;46517:5107;;;;;;;;;;;:::o;51630:179::-;51770:31;51766:1;51758:6;51754:14;51747:55;51630:179;:::o;51815:402::-;51975:3;51996:85;52078:2;52073:3;51996:85;:::i;:::-;51989:92;;52090:93;52179:3;52090:93;:::i;:::-;52208:2;52203:3;52199:12;52192:19;;51815:402;;;:::o;52223:541::-;52456:3;52478:148;52622:3;52478:148;:::i;:::-;52471:155;;52643:95;52734:3;52725:6;52643:95;:::i;:::-;52636:102;;52755:3;52748:10;;52223:541;;;;:::o;52770:269::-;52899:3;52921:92;53009:3;53000:6;52921:92;:::i;:::-;52914:99;;53030:3;53023:10;;52770:269;;;;:::o;53045:154::-;53101:9;53134:59;53150:42;53159:32;53185:5;53159:32;:::i;:::-;53150:42;:::i;:::-;53134:59;:::i;:::-;53121:72;;53045:154;;;:::o;53205:143::-;53298:43;53335:5;53298:43;:::i;:::-;53293:3;53286:56;53205:143;;:::o;53354:344::-;53481:4;53519:2;53508:9;53504:18;53496:26;;53532:71;53600:1;53589:9;53585:17;53576:6;53532:71;:::i;:::-;53613:78;53687:2;53676:9;53672:18;53663:6;53613:78;:::i;:::-;53354:344;;;;;:::o;53704:79::-;53743:7;53772:5;53761:16;;53704:79;;;:::o;53789:157::-;53894:45;53914:24;53932:5;53914:24;:::i;:::-;53894:45;:::i;:::-;53889:3;53882:58;53789:157;;:::o;53952:256::-;54064:3;54079:75;54150:3;54141:6;54079:75;:::i;:::-;54179:2;54174:3;54170:12;54163:19;;54199:3;54192:10;;53952:256;;;;:::o;54214:194::-;54254:4;54274:20;54292:1;54274:20;:::i;:::-;54269:25;;54308:20;54326:1;54308:20;:::i;:::-;54303:25;;54352:1;54349;54345:9;54337:17;;54376:1;54370:4;54367:11;54364:37;;;54381:18;;:::i;:::-;54364:37;54214:194;;;;:::o;54414:180::-;54462:77;54459:1;54452:88;54559:4;54556:1;54549:15;54583:4;54580:1;54573:15;54600:185;54640:1;54657:20;54675:1;54657:20;:::i;:::-;54652:25;;54691:20;54709:1;54691:20;:::i;:::-;54686:25;;54730:1;54720:35;;54735:18;;:::i;:::-;54720:35;54777:1;54774;54770:9;54765:14;;54600:185;;;;:::o;54791:176::-;54823:1;54840:20;54858:1;54840:20;:::i;:::-;54835:25;;54874:20;54892:1;54874:20;:::i;:::-;54869:25;;54913:1;54903:35;;54918:18;;:::i;:::-;54903:35;54959:1;54956;54952:9;54947:14;;54791:176;;;;:::o;54973:435::-;55153:3;55175:95;55266:3;55257:6;55175:95;:::i;:::-;55168:102;;55287:95;55378:3;55369:6;55287:95;:::i;:::-;55280:102;;55399:3;55392:10;;54973:435;;;;;:::o;55414:151::-;55554:3;55550:1;55542:6;55538:14;55531:27;55414:151;:::o;55571:400::-;55731:3;55752:84;55834:1;55829:3;55752:84;:::i;:::-;55745:91;;55845:93;55934:3;55845:93;:::i;:::-;55963:1;55958:3;55954:11;55947:18;;55571:400;;;:::o;55977:541::-;56210:3;56232:95;56323:3;56314:6;56232:95;:::i;:::-;56225:102;;56344:148;56488:3;56344:148;:::i;:::-;56337:155;;56509:3;56502:10;;55977:541;;;;:::o;56524:151::-;56664:3;56660:1;56652:6;56648:14;56641:27;56524:151;:::o;56681:400::-;56841:3;56862:84;56944:1;56939:3;56862:84;:::i;:::-;56855:91;;56955:93;57044:3;56955:93;:::i;:::-;57073:1;57068:3;57064:11;57057:18;;56681:400;;;:::o;57087:541::-;57320:3;57342:95;57433:3;57424:6;57342:95;:::i;:::-;57335:102;;57454:148;57598:3;57454:148;:::i;:::-;57447:155;;57619:3;57612:10;;57087:541;;;;:::o;57634:410::-;57674:7;57697:20;57715:1;57697:20;:::i;:::-;57692:25;;57731:20;57749:1;57731:20;:::i;:::-;57726:25;;57786:1;57783;57779:9;57808:30;57826:11;57808:30;:::i;:::-;57797:41;;57987:1;57978:7;57974:15;57971:1;57968:22;57948:1;57941:9;57921:83;57898:139;;58017:18;;:::i;:::-;57898:139;57682:362;57634:410;;;;:::o;58050:527::-;58190:34;58186:1;58178:6;58174:14;58167:58;58259:34;58254:2;58246:6;58242:15;58235:59;58328:34;58323:2;58315:6;58311:15;58304:59;58397:34;58392:2;58384:6;58380:15;58373:59;58467:34;58461:3;58453:6;58449:16;58442:60;58537:32;58531:3;58523:6;58519:16;58512:58;58050:527;:::o;58583:404::-;58743:3;58764:86;58846:3;58841;58764:86;:::i;:::-;58757:93;;58859;58948:3;58859:93;:::i;:::-;58977:3;58972;58968:13;58961:20;;58583:404;;;:::o;58993:527::-;59133:34;59129:1;59121:6;59117:14;59110:58;59202:34;59197:2;59189:6;59185:15;59178:59;59271:34;59266:2;59258:6;59254:15;59247:59;59340:34;59335:2;59327:6;59323:15;59316:59;59410:34;59404:3;59396:6;59392:16;59385:60;59480:32;59474:3;59466:6;59462:16;59455:58;58993:527;:::o;59526:404::-;59686:3;59707:86;59789:3;59784;59707:86;:::i;:::-;59700:93;;59802;59891:3;59802:93;:::i;:::-;59920:3;59915;59911:13;59904:20;;59526:404;;;:::o;59936:527::-;60076:34;60072:1;60064:6;60060:14;60053:58;60145:34;60140:2;60132:6;60128:15;60121:59;60214:34;60209:2;60201:6;60197:15;60190:59;60283:34;60278:2;60270:6;60266:15;60259:59;60353:34;60347:3;60339:6;60335:16;60328:60;60423:32;60417:3;60409:6;60405:16;60398:58;59936:527;:::o;60469:404::-;60629:3;60650:86;60732:3;60727;60650:86;:::i;:::-;60643:93;;60745;60834:3;60745:93;:::i;:::-;60863:3;60858;60854:13;60847:20;;60469:404;;;:::o;60879:513::-;61019:34;61015:1;61007:6;61003:14;60996:58;61088:34;61083:2;61075:6;61071:15;61064:59;61157:34;61152:2;61144:6;61140:15;61133:59;61226:34;61221:2;61213:6;61209:15;61202:59;61296:34;61290:3;61282:6;61278:16;61271:60;61366:18;61360:3;61352:6;61348:16;61341:44;60879:513;:::o;61398:404::-;61558:3;61579:86;61661:3;61656;61579:86;:::i;:::-;61572:93;;61674;61763:3;61674:93;:::i;:::-;61792:3;61787;61783:13;61776:20;;61398:404;;;:::o;61808:1973::-;62533:3;62555:92;62643:3;62634:6;62555:92;:::i;:::-;62548:99;;62664:95;62755:3;62746:6;62664:95;:::i;:::-;62657:102;;62776:148;62920:3;62776:148;:::i;:::-;62769:155;;62941:95;63032:3;63023:6;62941:95;:::i;:::-;62934:102;;63053:148;63197:3;63053:148;:::i;:::-;63046:155;;63218:95;63309:3;63300:6;63218:95;:::i;:::-;63211:102;;63330:148;63474:3;63330:148;:::i;:::-;63323:155;;63495:95;63586:3;63577:6;63495:95;:::i;:::-;63488:102;;63607:148;63751:3;63607:148;:::i;:::-;63600:155;;63772:3;63765:10;;61808:1973;;;;;;;;:::o;63787:98::-;63838:6;63872:5;63866:12;63856:22;;63787:98;;;:::o;63891:168::-;63974:11;64008:6;64003:3;63996:19;64048:4;64043:3;64039:14;64024:29;;63891:168;;;;:::o;64065:373::-;64151:3;64179:38;64211:5;64179:38;:::i;:::-;64233:70;64296:6;64291:3;64233:70;:::i;:::-;64226:77;;64312:65;64370:6;64365:3;64358:4;64351:5;64347:16;64312:65;:::i;:::-;64402:29;64424:6;64402:29;:::i;:::-;64397:3;64393:39;64386:46;;64155:283;64065:373;;;;:::o;64444:640::-;64639:4;64677:3;64666:9;64662:19;64654:27;;64691:71;64759:1;64748:9;64744:17;64735:6;64691:71;:::i;:::-;64772:72;64840:2;64829:9;64825:18;64816:6;64772:72;:::i;:::-;64854;64922:2;64911:9;64907:18;64898:6;64854:72;:::i;:::-;64973:9;64967:4;64963:20;64958:2;64947:9;64943:18;64936:48;65001:76;65072:4;65063:6;65001:76;:::i;:::-;64993:84;;64444:640;;;;;;;:::o;65090:141::-;65146:5;65177:6;65171:13;65162:22;;65193:32;65219:5;65193:32;:::i;:::-;65090:141;;;;:::o;65237:349::-;65306:6;65355:2;65343:9;65334:7;65330:23;65326:32;65323:119;;;65361:79;;:::i;:::-;65323:119;65481:1;65506:63;65561:7;65552:6;65541:9;65537:22;65506:63;:::i;:::-;65496:73;;65452:127;65237:349;;;;:::o

Swarm Source

ipfs://8d3b1b6856a0299aefcf49c5e6db7caf026ccfd44ac98340ca36e33b226f1b31
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.