Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
240 TRUBL
Holders
209
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
2 TRUBLLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Source Code Verified (Exact Match)
Contract Name:
TruchetBlocks
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-07-01 */ // SPDX-License-Identifier: MIT pragma solidity 0.8.9; interface IERC165 { function supportsInterface(bytes4 interfaceId) external view returns (bool); } 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; } interface IERC721Receiver { function onERC721Received(address operator, address from, uint256 tokenId, bytes calldata data) external returns (bytes4); } interface IERC721Metadata is IERC721 { function name() external view returns (string memory); function symbol() external view returns (string memory); function tokenURI(uint256 tokenId) external view returns (string memory); } abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } abstract contract ERC165 is IERC165 { function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; string private _name; string private _symbol; mapping (uint256 => address) private _owners; mapping (address => uint256) private _balances; mapping (uint256 => address) private _tokenApprovals; mapping (address => mapping (address => bool)) private _operatorApprovals; constructor (string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } function name() public view virtual override returns (string memory) { return _name; } function symbol() public view virtual override returns (string memory) { return _symbol; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } function _baseURI() internal view virtual returns (string memory) { return ""; } function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all"); _approve(to, tokenId); } function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _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), "ERC721: transfer caller is not owner nor approved"); _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), "ERC721: transfer caller is not owner nor approved"); _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), "ERC721: transfer to non ERC721Receiver implementer"); } 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), "ERC721: operator query for nonexistent token"); 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), "ERC721: transfer to non ERC721Receiver implementer"); } function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } function _transfer(address from, address to, uint256 tokenId) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); _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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), msgSender); } function owner() public view virtual returns (address) { return _owner; } modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } function renounceOwnership() public virtual onlyOwner { emit OwnershipTransferred(_owner, address(0)); _owner = address(0); } function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } abstract contract ReentrancyGuard { uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } modifier nonReentrant() { require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); _status = _ENTERED; _; _status = _NOT_ENTERED; } } library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; 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 toAsciiString(address x) internal pure returns (string memory) { bytes memory s = new bytes(40); for (uint i = 0; i < 20; i++) { bytes1 b = bytes1(uint8(uint(uint160(x)) / (2**(8*(19 - i))))); bytes1 hi = bytes1(uint8(b) / 16); bytes1 lo = bytes1(uint8(b) - 16 * uint8(hi)); s[2*i] = char(hi); s[2*i+1] = char(lo); } return string(s); } function char(bytes1 b) internal pure returns (bytes1 c) { if (uint8(b) < 10) return bytes1(uint8(b) + 0x30); else return bytes1(uint8(b) + 0x57); } } library Base64 { bytes internal constant TABLE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; function encode(bytes memory data) internal pure returns (string memory) { uint256 len = data.length; if (len == 0) return ""; uint256 encodedLen = 4 * ((len + 2) / 3); bytes memory result = new bytes(encodedLen + 32); bytes memory table = TABLE; assembly { let tablePtr := add(table, 1) let resultPtr := add(result, 32) for { let i := 0 } lt(i, len) { } { i := add(i, 3) let input := and(mload(add(data, i)), 0xffffff) let out := mload(add(tablePtr, and(shr(18, input), 0x3F))) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(12, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(shr(6, input), 0x3F))), 0xFF)) out := shl(8, out) out := add(out, and(mload(add(tablePtr, and(input, 0x3F))), 0xFF)) out := shl(224, out) mstore(resultPtr, out) resultPtr := add(resultPtr, 4) } switch mod(len, 3) case 1 { mstore(sub(resultPtr, 2), shl(240, 0x3d3d)) } case 2 { mstore(sub(resultPtr, 1), shl(248, 0x3d)) } mstore(result, encodedLen) } return string(result); } } library DynamicBuffer { function allocate(uint256 capacity) internal pure returns (bytes memory buffer) { assembly { let container := mload(0x40) { let size := add(capacity, 0x60) let newNextFree := add(container, size) mstore(0x40, newNextFree) } { let length := add(capacity, 0x40) mstore(container, length) } buffer := add(container, 0x20) mstore(buffer, 0) } return buffer; } function appendUnchecked(bytes memory buffer, bytes memory data) internal pure { assembly { let length := mload(data) for { data := add(data, 0x20) let dataEnd := add(data, length) let copyTo := add(buffer, add(mload(buffer), 0x20)) } lt(data, dataEnd) { data := add(data, 0x20) copyTo := add(copyTo, 0x20) } { mstore(copyTo, mload(data)) } mstore(buffer, add(mload(buffer), length)) } } function appendSafe(bytes memory buffer, bytes memory data) internal pure { uint256 capacity; uint256 length; assembly { capacity := sub(mload(sub(buffer, 0x20)), 0x40) length := mload(buffer) } require(length + data.length <= capacity, "DynamicBuffer: Appending out of bounds."); appendUnchecked(buffer, data); } } library Address { function isContract(address account) internal view returns (bool) { uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } function functionCallWithValue(address target, bytes memory data, uint256 value) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (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, "Address: low-level static call failed"); } function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (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, "Address: low-level delegate call failed"); } function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) { if (success) { return returndata; } else { if (returndata.length > 0) { // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } contract TruchetBlocks is ERC721, ReentrancyGuard, Ownable { using Strings for int; using Strings for uint; using Strings for bytes32; using DynamicBuffer for bytes; uint num_tiles = 16; int half = 32; int full = 64; bool public sale_active = false; uint public sale_price = 0.00512 ether; uint public max_supply = 512; uint public truchets_minted = 0; string[] patterns; string[] svg_path_strings; mapping(uint => string) public truchet_seeds; /** * @dev Set up all the variables for the Traits in the collection. */ constructor() ERC721("TruchetBlocks", "TRUBL") { patterns = ["Lines", "Waves", "Leaves", "Circles", "Triangles", "Y-Fronts", "Divides", "Frowns"]; svg_path_strings = [ 'M24 0h16L0 40V24m24 40h16l24-24V24L24 64', 'M24 64h16a24 24 0 0 1 24-24V24a40 40 0 0 0-40 40m0-64A24 24 0 0 1 0 24v16A40 40 0 0 0 40 0H24', 'M0 0a64 64 0 0 1 64 64A64 64 0 0 1 0 0', 'M0 0a64 64 0 0 1 64 64H0', 'm0 0 64 64H0', 'M24 0a8 8 0 0 0 16 0M0 24v16a24 24 0 0 1 24 24h16a24 24 0 0 1 24-24V24H0', 'M24 0a8 8 0 0 0 16 0M24 64a8 8 0 0 1 16 0M0 24h64v16H0V24', 'M24 0a8 8 0 0 0 16 0M0 24a8 8 0 0 1 0 16m24 24h16a24 24 0 0 1 24-24V24a40 40 0 0 0-40 40' ]; } /** * @dev Calculate the total amount minted so far. */ function totalSupply() public view returns (uint) { return truchets_minted; } /** * @dev Mint a Truchet and add the Seed to the mapping. */ function mint() public payable nonReentrant { require(totalSupply() < max_supply, "All the Truchet Blocks have already been minted."); require(sale_active, "Truchet Blocks are not on sale at the moment."); require(msg.value >= sale_price, "Insufficient funds to mint a Truchet Block."); uint new_truchet_id = totalSupply() + 1; string memory seed = generateSeed(msg.sender); _safeMint(msg.sender, new_truchet_id); truchet_seeds[new_truchet_id] = seed; truchets_minted += 1; } /** * @dev Generate the random seed for the `_truchet_id`. * * @return uint256 */ function generateSeed(address _sender) internal view returns (string memory) { uint balance = this.balanceOf(_sender); address address_string; if (balance > 0) { address_string = address(uint160(uint(keccak256(abi.encodePacked(_sender, balance.toString()))))); } else { address_string = _sender; } return Strings.toAsciiString(address_string); } /** * @dev Get the seed for the `_truchet_id`. * * @return uint256 */ function getSeed(uint _truchet_id) public view returns (string memory) { return truchet_seeds[_truchet_id]; } /** * @dev Output the svg in the json array for the lols. * * @return string memory */ function tokenURI(uint _truchet_id) public view override returns (string memory) { require(_exists(_truchet_id), "Truchet doesn't exist."); string memory truchet_seed = truchet_seeds[_truchet_id]; uint pattern = rand(truchet_seed, 0, patterns.length); uint gradient_angle = rand(truchet_seed, 1, 360); string memory colour = getSliceFromBytesString(truchet_seed, 0, 6); string memory grandient_start = getSliceFromBytesString(truchet_seed, 6, 6); string memory gradient_end = getSliceFromBytesString(truchet_seed, 8, 6); bytes memory svg = generateSVG(_truchet_id, truchet_seed, pattern, colour, grandient_start, gradient_end, gradient_angle); string memory json = string(abi.encodePacked( 'data:application/json,{"name":"Truchet Block #', bytes(_truchet_id.toString()), '","image":"data:image/svg+xml;base64,', bytes(Base64.encode(svg)), '","attributes":[{"trait_type": "Pattern", "value": "', bytes(patterns[pattern]), '"},{"trait_type": "Colour", "value": "#', colour, '"},{"trait_type": "Gradient Start", "value": "#', grandient_start, '"},{"trait_type": "Gradient End", "value": "#', gradient_end, '"},{"trait_type": "Gradient Angle", "value": "', bytes(gradient_angle.toString()), ' degrees"}], "background_color": "', gradient_end, '"}' )); return json; } /** * @dev Build the entire SVG using the randomly generated attributes/traits. * * @return bytes memory */ function generateSVG(uint _truchet_id, string memory _truchet_seed, uint _pattern, string memory _colour, string memory _gradient_start, string memory _gradient_end, uint _gradient_angle) internal view returns (bytes memory) { bytes memory svg = DynamicBuffer.allocate(2**15); svg.appendUnchecked('<svg id="tb_svg_'); svg.appendUnchecked(bytes(_truchet_id.toString())); svg.appendUnchecked('" xmlns:svg="http://www.w3.org/2000/svg" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.0" viewBox="0 0 1024 1024" width="1024" height="1024">'); if (_pattern == 1 || _pattern == 2 || _pattern == 3 || _pattern == 4) { svg.appendUnchecked('<style>#tb_svg_'); svg.appendUnchecked(bytes(_truchet_id.toString())); svg.appendUnchecked(' .tb_bm {mix-blend-mode:multiply;}</style>'); } svg.appendUnchecked('<defs><linearGradient id="tb_bg_'); svg.appendUnchecked(bytes(_truchet_id.toString())); svg.appendUnchecked('" gradientTransform="rotate('); svg.appendUnchecked(bytes(_gradient_angle.toString())); svg.appendUnchecked(')"><stop offset="20%" stop-color="#'); svg.appendUnchecked(bytes(_gradient_start)); svg.appendUnchecked('"/><stop offset="80%" stop-color="#'); svg.appendUnchecked(bytes(_gradient_end)); svg.appendUnchecked('"/></linearGradient><svg id="tb_p_'); svg.appendUnchecked(bytes(_truchet_id.toString())); svg.appendUnchecked('"><path d="'); svg.appendUnchecked(bytes(svg_path_strings[_pattern])); svg.appendUnchecked('" style="fill:#'); svg.appendUnchecked(bytes(_colour)); svg.appendUnchecked(';"/></svg></defs><rect width="100%" height="100%" style="fill:url(#tb_bg_'); svg.appendUnchecked(bytes(_truchet_id.toString())); svg.appendUnchecked(');"/>'); uint angle; int y = 0; int x = 0; int sum; for (int i=0; i<int(num_tiles * num_tiles);) { x = i % int(num_tiles); y = i / int(num_tiles); svg.appendUnchecked('<use xlink:href="#tb_p_'); svg.appendUnchecked(bytes(_truchet_id.toString())); svg.appendUnchecked('" transform="'); angle = rand(_truchet_seed, uint(i + 2), 3); if (angle == 0) { svg.appendUnchecked('translate('); svg.appendUnchecked(bytes(uint(y * full).toString())); svg.appendUnchecked(' '); svg.appendUnchecked(bytes(uint(x * full).toString())); svg.appendUnchecked(')'); } else if (angle == 1) { svg.appendUnchecked('rotate(90, '); sum = ((half - (x * half)) + (y * half)); if (sum < 0) { svg.appendUnchecked('-'); sum = sum * -1; } svg.appendUnchecked(bytes(uint(sum).toString())); svg.appendUnchecked(', '); sum = (((x * half) + half) + (y * half)); if (sum < 0) { svg.appendUnchecked('-'); sum = sum * -1; } svg.appendUnchecked(bytes(uint(sum).toString())); svg.appendUnchecked(')'); } else if (angle == 2) { svg.appendUnchecked('rotate(180, '); sum = ((y * half) + half); if (sum < 0) { svg.appendUnchecked('-'); sum = sum * -1; } svg.appendUnchecked(bytes(uint(sum).toString())); svg.appendUnchecked(', '); sum = ((x * half) + half); if (sum < 0) { svg.appendUnchecked('-'); sum = sum * -1; } svg.appendUnchecked(bytes(uint(sum).toString())); svg.appendUnchecked(')'); } else if (angle == 3) { svg.appendUnchecked('rotate(270, '); sum = (((x * half) + half) + (y * half)); if (sum < 0) { svg.appendUnchecked('-'); sum = sum * -1; } svg.appendUnchecked(bytes(uint(sum).toString())); svg.appendUnchecked(', '); sum = (((x * half) + half) - (y * half)); if (sum < 0) { svg.appendUnchecked('-'); sum = sum * -1; } svg.appendUnchecked(bytes(uint(sum).toString())); svg.appendUnchecked(')'); } svg.appendUnchecked('"'); if (_pattern == 1 || _pattern == 2 || _pattern == 3 || _pattern == 4) { if (rand(_truchet_seed, uint(i+3), 3) == 1) { svg.appendUnchecked(' class="tb_bm"'); } } svg.appendUnchecked('/>'); unchecked { i++; } } svg.appendUnchecked('</svg>'); return svg; } /** * @dev Get a slice of `_length` from `_string`, starting at `_offset`. * * @return string memory */ function getSliceFromBytesString(string memory _string, uint _offset, uint _length) internal pure returns (string memory) { bytes memory characters = bytes(_string); bytes memory colour = new bytes(_length); for (uint i=0; i<_length;) { colour[i] = characters[_offset + i]; unchecked { i++; } } return string(colour); } /** * @dev Get a random number from the `_seed` using `_mod` to limit it. * * @return uint256 */ function rand(string memory _seed, uint _nonce, uint _mod) internal pure returns (uint256) { return uint256(keccak256(abi.encode(_seed, _nonce))) % _mod; } /** * @dev Toggle the Sale state. */ function toggleSaleState() public onlyOwner { sale_active = !sale_active; } /** * @dev Allow withdrawal of funds to the Owner's wallet. */ function withdrawFunds() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{value: address(this).balance}(""); require(success); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"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":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"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":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_truchet_id","type":"uint256"}],"name":"getSeed","outputs":[{"internalType":"string","name":"","type":"string"}],"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":"max_supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"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":[],"name":"sale_active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sale_price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","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":[],"name":"toggleSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_truchet_id","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":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"truchet_seeds","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"truchets_minted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawFunds","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052601060085560206009556040600a556000600b60006101000a81548160ff0219169083151502179055506612309ce5400000600c55610200600d556000600e553480156200005157600080fd5b506040518060400160405280600d81526020017f54727563686574426c6f636b73000000000000000000000000000000000000008152506040518060400160405280600581526020017f545255424c0000000000000000000000000000000000000000000000000000008152508160009080519060200190620000d6929190620004fb565b508060019080519060200190620000ef929190620004fb565b505050600160068190555060006200010c620004f360201b60201c565b905080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506040518061010001604052806040518060400160405280600581526020017f4c696e657300000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600581526020017f576176657300000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f4c6561766573000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f436972636c65730000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600981526020017f547269616e676c6573000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f592d46726f6e747300000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f446976696465730000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f46726f776e730000000000000000000000000000000000000000000000000000815250815250600f9060086200039f9291906200058c565b506040518061010001604052806040518060600160405280602881526020016200629e6028913981526020016040518060800160405280605d8152602001620062c6605d913981526020016040518060600160405280602681526020016200619f6026913981526020016040518060400160405280601881526020017f4d3020306136342036342030203020312036342036344830000000000000000081525081526020016040518060400160405280600c81526020017f6d302030203634203634483000000000000000000000000000000000000000008152508152602001604051806080016040528060488152602001620061c56048913981526020016040518060600160405280603981526020016200620d60399139815260200160405180608001604052806058815260200162006246605891398152506010906008620004ec9291906200058c565b50620006e5565b600033905090565b8280546200050990620006af565b90600052602060002090601f0160209004810192826200052d576000855562000579565b82601f106200054857805160ff191683800117855562000579565b8280016001018555821562000579579182015b82811115620005785782518255916020019190600101906200055b565b5b509050620005889190620005f3565b5090565b828054828255906000526020600020908101928215620005e0579160200282015b82811115620005df578251829080519060200190620005ce929190620004fb565b5091602001919060010190620005ad565b5b509050620005ef919062000612565b5090565b5b808211156200060e576000816000905550600101620005f4565b5090565b5b808211156200063657600081816200062c91906200063a565b5060010162000613565b5090565b5080546200064890620006af565b6000825580601f106200065c57506200067d565b601f0160209004906000526020600020908101906200067c9190620005f3565b5b50565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620006c857607f821691505b60208210811415620006df57620006de62000680565b5b50919050565b615aaa80620006f56000396000f3fe6080604052600436106101815760003560e01c80638a333b50116100d1578063b89899711161008a578063e0d4ea3711610064578063e0d4ea3714610530578063e0df72161461056d578063e985e9c514610598578063f2fde38b146105d557610181565b8063b8989971146104b1578063c87b56dd146104dc578063daaeec861461051957610181565b80638a333b50146103b35780638da5cb5b146103de57806395d89b411461040957806395ec54db14610434578063a22cb4651461045f578063b88d4fde1461048857610181565b8063222f33101161013e57806342842e0e1161011857806342842e0e146102f95780636352211e1461032257806370a082311461035f578063715018a61461039c57610181565b8063222f33101461028957806323b872dd146102c657806324600fc3146102ef57610181565b806301ffc9a71461018657806306fdde03146101c3578063081812fc146101ee578063095ea7b31461022b5780631249c58b1461025457806318160ddd1461025e575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190613946565b6105fe565b6040516101ba919061398e565b60405180910390f35b3480156101cf57600080fd5b506101d86106e0565b6040516101e59190613a42565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190613a9a565b610772565b6040516102229190613b08565b60405180910390f35b34801561023757600080fd5b50610252600480360381019061024d9190613b4f565b6107f7565b005b61025c61090f565b005b34801561026a57600080fd5b50610273610ab9565b6040516102809190613b9e565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190613a9a565b610ac3565b6040516102bd9190613a42565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613bb9565b610b63565b005b6102f7610bc3565b005b34801561030557600080fd5b50610320600480360381019061031b9190613bb9565b610cb8565b005b34801561032e57600080fd5b5061034960048036038101906103449190613a9a565b610cd8565b6040516103569190613b08565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190613c0c565b610d8a565b6040516103939190613b9e565b60405180910390f35b3480156103a857600080fd5b506103b1610e42565b005b3480156103bf57600080fd5b506103c8610f7f565b6040516103d59190613b9e565b60405180910390f35b3480156103ea57600080fd5b506103f3610f85565b6040516104009190613b08565b60405180910390f35b34801561041557600080fd5b5061041e610faf565b60405161042b9190613a42565b60405180910390f35b34801561044057600080fd5b50610449611041565b6040516104569190613b9e565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613c65565b611047565b005b34801561049457600080fd5b506104af60048036038101906104aa9190613dda565b6111c8565b005b3480156104bd57600080fd5b506104c661122a565b6040516104d39190613b9e565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe9190613a9a565b611230565b6040516105109190613a42565b60405180910390f35b34801561052557600080fd5b5061052e6113fd565b005b34801561053c57600080fd5b5061055760048036038101906105529190613a9a565b6114a5565b6040516105649190613a42565b60405180910390f35b34801561057957600080fd5b5061058261154a565b60405161058f919061398e565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190613e5d565b61155d565b6040516105cc919061398e565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f79190613c0c565b6115f1565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106c957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106d957506106d88261179d565b5b9050919050565b6060600080546106ef90613ecc565b80601f016020809104026020016040519081016040528092919081815260200182805461071b90613ecc565b80156107685780601f1061073d57610100808354040283529160200191610768565b820191906000526020600020905b81548152906001019060200180831161074b57829003601f168201915b5050505050905090565b600061077d82611807565b6107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b390613f70565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080282610cd8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a90614002565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610892611873565b73ffffffffffffffffffffffffffffffffffffffff1614806108c157506108c0816108bb611873565b61155d565b5b610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790614094565b60405180910390fd5b61090a838361187b565b505050565b60026006541415610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c90614100565b60405180910390fd5b6002600681905550600d54610968610ab9565b106109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099f90614192565b60405180910390fd5b600b60009054906101000a900460ff166109f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ee90614224565b60405180910390fd5b600c54341015610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a33906142b6565b60405180910390fd5b60006001610a48610ab9565b610a529190614305565b90506000610a5f33611934565b9050610a6b3383611a1e565b80601160008481526020019081526020016000209080519060200190610a92929190613837565b506001600e6000828254610aa69190614305565b9250508190555050506001600681905550565b6000600e54905090565b60116020528060005260406000206000915090508054610ae290613ecc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0e90613ecc565b8015610b5b5780601f10610b3057610100808354040283529160200191610b5b565b820191906000526020600020905b815481529060010190602001808311610b3e57829003601f168201915b505050505081565b610b74610b6e611873565b82611a3c565b610bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baa906143cd565b60405180910390fd5b610bbe838383611b1a565b505050565b610bcb611873565b73ffffffffffffffffffffffffffffffffffffffff16610be9610f85565b73ffffffffffffffffffffffffffffffffffffffff1614610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3690614439565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610c659061448a565b60006040518083038185875af1925050503d8060008114610ca2576040519150601f19603f3d011682016040523d82523d6000602084013e610ca7565b606091505b5050905080610cb557600080fd5b50565b610cd3838383604051806020016040528060008152506111c8565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7890614511565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df2906145a3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e4a611873565b73ffffffffffffffffffffffffffffffffffffffff16610e68610f85565b73ffffffffffffffffffffffffffffffffffffffff1614610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb590614439565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d5481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610fbe90613ecc565b80601f0160208091040260200160405190810160405280929190818152602001828054610fea90613ecc565b80156110375780601f1061100c57610100808354040283529160200191611037565b820191906000526020600020905b81548152906001019060200180831161101a57829003601f168201915b5050505050905090565b600c5481565b61104f611873565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b49061460f565b60405180910390fd5b80600560006110ca611873565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611177611873565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111bc919061398e565b60405180910390a35050565b6111d96111d3611873565b83611a3c565b611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f906143cd565b60405180910390fd5b61122484848484611d76565b50505050565b600e5481565b606061123b82611807565b61127a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112719061467b565b60405180910390fd5b600060116000848152602001908152602001600020805461129a90613ecc565b80601f01602080910402602001604051908101604052809291908181526020018280546112c690613ecc565b80156113135780601f106112e857610100808354040283529160200191611313565b820191906000526020600020905b8154815290600101906020018083116112f657829003601f168201915b50505050509050600061132d826000600f80549050611dd2565b9050600061133f836001610168611dd2565b905060006113508460006006611e14565b9050600061136085600680611e14565b905060006113718660086006611e14565b905060006113848988888787878b611efc565b905060006113918a612ef6565b61139a83613057565b600f89815481106113ae576113ad61469b565b5b906000526020600020018787876113c48c612ef6565b896040516020016113dc989796959493929190614bb2565b60405160208183030381529060405290508098505050505050505050919050565b611405611873565b73ffffffffffffffffffffffffffffffffffffffff16611423610f85565b73ffffffffffffffffffffffffffffffffffffffff1614611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147090614439565b60405180910390fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b60606011600083815260200190815260200160002080546114c590613ecc565b80601f01602080910402602001604051908101604052809291908181526020018280546114f190613ecc565b801561153e5780601f106115135761010080835404028352916020019161153e565b820191906000526020600020905b81548152906001019060200180831161152157829003601f168201915b50505050509050919050565b600b60009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115f9611873565b73ffffffffffffffffffffffffffffffffffffffff16611617610f85565b73ffffffffffffffffffffffffffffffffffffffff161461166d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166490614439565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490614cf9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118ee83610cd8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606060003073ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016119719190613b08565b60206040518083038186803b15801561198957600080fd5b505afa15801561199d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c19190614d2e565b9050600080821115611a0857836119d783612ef6565b6040516020016119e8929190614da3565b6040516020818303038152906040528051906020012060001c9050611a0c565b8390505b611a15816131ef565b92505050919050565b611a388282604051806020016040528060008152506133b2565b5050565b6000611a4782611807565b611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90614e3d565b60405180910390fd5b6000611a9183610cd8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b0057508373ffffffffffffffffffffffffffffffffffffffff16611ae884610772565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b115750611b10818561155d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b3a82610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8790614ecf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf790614f61565b60405180910390fd5b611c0b83838361340d565b611c1660008261187b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c669190614f81565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cbd9190614305565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611d81848484611b1a565b611d8d84848484613412565b611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc390615027565b60405180910390fd5b50505050565b6000818484604051602001611de8929190615047565b6040516020818303038152906040528051906020012060001c611e0b91906150a6565b90509392505050565b6060600084905060008367ffffffffffffffff811115611e3757611e36613caf565b5b6040519080825280601f01601f191660200182016040528015611e695781602001600182028036833780820191505090505b50905060005b84811015611eef57828187611e849190614305565b81518110611e9557611e9461469b565b5b602001015160f81c60f81b828281518110611eb357611eb261469b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050611e6f565b5080925050509392505050565b60606000611f0b6180006135a9565b9050611f556040518060400160405280601081526020017f3c7376672069643d2274625f7376675f00000000000000000000000000000000815250826135d390919063ffffffff16565b611f70611f618a612ef6565b826135d390919063ffffffff16565b611f9b6040518060e0016040528060b881526020016158a260b89139826135d390919063ffffffff16565b6001871480611faa5750600287145b80611fb55750600387145b80611fc05750600487145b156120545761200d6040518060400160405280600f81526020017f3c7374796c653e2374625f7376675f0000000000000000000000000000000000815250826135d390919063ffffffff16565b6120286120198a612ef6565b826135d390919063ffffffff16565b6120536040518060600160405280602a8152602001615a4b602a9139826135d390919063ffffffff16565b5b61209c6040518060400160405280602081526020017f3c646566733e3c6c696e6561724772616469656e742069643d2274625f62675f815250826135d390919063ffffffff16565b6120b76120a88a612ef6565b826135d390919063ffffffff16565b6120ff6040518060400160405280601c81526020017f22206772616469656e745472616e73666f726d3d22726f746174652800000000815250826135d390919063ffffffff16565b61211a61210b84612ef6565b826135d390919063ffffffff16565b612145604051806060016040528060238152602001615a2860239139826135d390919063ffffffff16565b61215885826135d390919063ffffffff16565b612183604051806060016040528060238152602001615a0560239139826135d390919063ffffffff16565b61219684826135d390919063ffffffff16565b6121c160405180606001604052806022815260200161595a60229139826135d390919063ffffffff16565b6121dc6121cd8a612ef6565b826135d390919063ffffffff16565b6122246040518060400160405280600b81526020017f223e3c7061746820643d22000000000000000000000000000000000000000000815250826135d390919063ffffffff16565b6122dd6010888154811061223b5761223a61469b565b5b90600052602060002001805461225090613ecc565b80601f016020809104026020016040519081016040528092919081815260200182805461227c90613ecc565b80156122c95780601f1061229e576101008083540402835291602001916122c9565b820191906000526020600020905b8154815290600101906020018083116122ac57829003601f168201915b5050505050826135d390919063ffffffff16565b6123256040518060400160405280600f81526020017f22207374796c653d2266696c6c3a230000000000000000000000000000000000815250826135d390919063ffffffff16565b61233886826135d390919063ffffffff16565b6123636040518060800160405280604981526020016159bc60499139826135d390919063ffffffff16565b61237e61236f8a612ef6565b826135d390919063ffffffff16565b6123c66040518060400160405280600581526020017f293b222f3e000000000000000000000000000000000000000000000000000000815250826135d390919063ffffffff16565b6000806000905060008080600090505b6008546008546123e691906150d7565b811215612e9a57600854816123fb919061513b565b92506008548161240b919061516c565b93506124556040518060400160405280601781526020017f3c75736520786c696e6b3a687265663d222374625f705f000000000000000000815250876135d390919063ffffffff16565b6124706124618f612ef6565b876135d390919063ffffffff16565b6124b86040518060400160405280600d81526020017f22207472616e73666f726d3d2200000000000000000000000000000000000000815250876135d390919063ffffffff16565b6124d08d6002836124c991906151d6565b6003611dd2565b94506000851415612608576125236040518060400160405280600a81526020017f7472616e736c6174652800000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b61254b61253c600a5486612537919061526a565b612ef6565b876135d390919063ffffffff16565b6125936040518060400160405280600181526020017f2000000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b6125bb6125ac600a54856125a7919061526a565b612ef6565b876135d390919063ffffffff16565b6126036040518060400160405280600181526020017f2900000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b612d69565b600185141561288e576126596040518060400160405280600b81526020017f726f746174652839302c20000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b60095484612667919061526a565b60095484612675919061526a565b6009546126829190615381565b61268c91906151d6565b9150600082121561270e576126df6040518060400160405280600181526020017f2d00000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261270b919061526a565b91505b61272961271a83612ef6565b876135d390919063ffffffff16565b6127716040518060400160405280600281526020017f2c20000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b6009548461277f919061526a565b60095460095485612790919061526a565b61279a91906151d6565b6127a491906151d6565b91506000821215612826576127f76040518060400160405280600181526020017f2d00000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612823919061526a565b91505b61284161283283612ef6565b876135d390919063ffffffff16565b6128896040518060400160405280600181526020017f2900000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b612d68565b6002851415612ae4576128df6040518060400160405280600c81526020017f726f74617465283138302c200000000000000000000000000000000000000000815250876135d390919063ffffffff16565b600954600954856128f0919061526a565b6128fa91906151d6565b9150600082121561297c5761294d6040518060400160405280600181526020017f2d00000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612979919061526a565b91505b61299761298883612ef6565b876135d390919063ffffffff16565b6129df6040518060400160405280600281526020017f2c20000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b600954600954846129f0919061526a565b6129fa91906151d6565b91506000821215612a7c57612a4d6040518060400160405280600181526020017f2d00000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612a79919061526a565b91505b612a97612a8883612ef6565b876135d390919063ffffffff16565b612adf6040518060400160405280600181526020017f2900000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b612d67565b6003851415612d6657612b356040518060400160405280600c81526020017f726f74617465283237302c200000000000000000000000000000000000000000815250876135d390919063ffffffff16565b60095484612b43919061526a565b60095460095485612b54919061526a565b612b5e91906151d6565b612b6891906151d6565b91506000821215612bea57612bbb6040518060400160405280600181526020017f2d00000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612be7919061526a565b91505b612c05612bf683612ef6565b876135d390919063ffffffff16565b612c4d6040518060400160405280600281526020017f2c20000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b60095484612c5b919061526a565b60095460095485612c6c919061526a565b612c7691906151d6565b612c809190615381565b91506000821215612d0257612cd36040518060400160405280600181526020017f2d00000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612cff919061526a565b91505b612d1d612d0e83612ef6565b876135d390919063ffffffff16565b612d656040518060400160405280600181526020017f2900000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b5b5b5b5b612db16040518060400160405280600181526020017f2200000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b60018c1480612dc0575060028c145b80612dcb575060038c145b80612dd6575060048c145b15612e45576001612df58e600384612dee91906151d6565b6003611dd2565b1415612e4457612e436040518060400160405280600e81526020017f20636c6173733d2274625f626d22000000000000000000000000000000000000815250876135d390919063ffffffff16565b5b5b612e8d6040518060400160405280600281526020017f2f3e000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b80806001019150506123d6565b50612ee36040518060400160405280600681526020017f3c2f7376673e0000000000000000000000000000000000000000000000000000815250866135d390919063ffffffff16565b8495505050505050979650505050505050565b60606000821415612f3e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613052565b600082905060005b60008214612f70578080612f5990615415565b915050600a82612f69919061545e565b9150612f46565b60008167ffffffffffffffff811115612f8c57612f8b613caf565b5b6040519080825280601f01601f191660200182016040528015612fbe5781602001600182028036833780820191505090505b5090505b6000851461304b57600182612fd79190614f81565b9150600a85612fe691906150a6565b6030612ff29190614305565b60f81b8183815181106130085761300761469b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613044919061545e565b9450612fc2565b8093505050505b919050565b6060600082519050600081141561308057604051806020016040528060008152509150506131ea565b600060036002836130919190614305565b61309b919061545e565b60046130a791906150d7565b905060006020826130b89190614305565b67ffffffffffffffff8111156130d1576130d0613caf565b5b6040519080825280601f01601f1916602001820160405280156131035781602001600182028036833780820191505090505b509050600060405180606001604052806040815260200161597c604091399050600181016020830160005b868110156131a75760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b9050808452600484019350505061312e565b5060038606600181146131c157600281146131d1576131dc565b613d3d60f01b60028303526131dc565b603d60f81b60018303525b508484525050819450505050505b919050565b60606000602867ffffffffffffffff81111561320e5761320d613caf565b5b6040519080825280601f01601f1916602001820160405280156132405781602001600182028036833780820191505090505b50905060005b60148110156133a857600081601361325e9190614f81565b600861326a91906150d7565b600261327691906155c2565b8573ffffffffffffffffffffffffffffffffffffffff16613297919061545e565b60f81b9050600060108260f81c6132ae919061561a565b60f81b905060008160f81c60106132c5919061564b565b8360f81c6132d39190615686565b60f81b90506132e182613610565b858560026132ef91906150d7565b81518110613300576132ff61469b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061333881613610565b85600186600261334891906150d7565b6133529190614305565b815181106133635761336261469b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050505080806133a090615415565b915050613246565b5080915050919050565b6133bc8383613656565b6133c96000848484613412565b613408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ff90615027565b60405180910390fd5b505050565b505050565b60006134338473ffffffffffffffffffffffffffffffffffffffff16613824565b1561359c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261345c611873565b8786866040518563ffffffff1660e01b815260040161347e9493929190615704565b602060405180830381600087803b15801561349857600080fd5b505af19250505080156134c957506040513d601f19601f820116820180604052508101906134c69190615765565b60015b61354c573d80600081146134f9576040519150601f19603f3d011682016040523d82523d6000602084013e6134fe565b606091505b50600081511415613544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353b90615027565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506135a1565b600190505b949350505050565b60606040516060830180820180604052505060408301808252506020810191506000825250919050565b8051602082019150808201602084510184015b8184101561360357835181526020840193506020810190506135e6565b5050808351018352505050565b6000600a8260f81c60ff16101561363b5760308260f81c6136319190615792565b60f81b9050613651565b60578260f81c61364b9190615792565b60f81b90505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136bd90615815565b60405180910390fd5b6136cf81611807565b1561370f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370690615881565b60405180910390fd5b61371b6000838361340d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461376b9190614305565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461384390613ecc565b90600052602060002090601f01602090048101928261386557600085556138ac565b82601f1061387e57805160ff19168380011785556138ac565b828001600101855582156138ac579182015b828111156138ab578251825591602001919060010190613890565b5b5090506138b991906138bd565b5090565b5b808211156138d65760008160009055506001016138be565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613923816138ee565b811461392e57600080fd5b50565b6000813590506139408161391a565b92915050565b60006020828403121561395c5761395b6138e4565b5b600061396a84828501613931565b91505092915050565b60008115159050919050565b61398881613973565b82525050565b60006020820190506139a3600083018461397f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139e35780820151818401526020810190506139c8565b838111156139f2576000848401525b50505050565b6000601f19601f8301169050919050565b6000613a14826139a9565b613a1e81856139b4565b9350613a2e8185602086016139c5565b613a37816139f8565b840191505092915050565b60006020820190508181036000830152613a5c8184613a09565b905092915050565b6000819050919050565b613a7781613a64565b8114613a8257600080fd5b50565b600081359050613a9481613a6e565b92915050565b600060208284031215613ab057613aaf6138e4565b5b6000613abe84828501613a85565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613af282613ac7565b9050919050565b613b0281613ae7565b82525050565b6000602082019050613b1d6000830184613af9565b92915050565b613b2c81613ae7565b8114613b3757600080fd5b50565b600081359050613b4981613b23565b92915050565b60008060408385031215613b6657613b656138e4565b5b6000613b7485828601613b3a565b9250506020613b8585828601613a85565b9150509250929050565b613b9881613a64565b82525050565b6000602082019050613bb36000830184613b8f565b92915050565b600080600060608486031215613bd257613bd16138e4565b5b6000613be086828701613b3a565b9350506020613bf186828701613b3a565b9250506040613c0286828701613a85565b9150509250925092565b600060208284031215613c2257613c216138e4565b5b6000613c3084828501613b3a565b91505092915050565b613c4281613973565b8114613c4d57600080fd5b50565b600081359050613c5f81613c39565b92915050565b60008060408385031215613c7c57613c7b6138e4565b5b6000613c8a85828601613b3a565b9250506020613c9b85828601613c50565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ce7826139f8565b810181811067ffffffffffffffff82111715613d0657613d05613caf565b5b80604052505050565b6000613d196138da565b9050613d258282613cde565b919050565b600067ffffffffffffffff821115613d4557613d44613caf565b5b613d4e826139f8565b9050602081019050919050565b82818337600083830152505050565b6000613d7d613d7884613d2a565b613d0f565b905082815260208101848484011115613d9957613d98613caa565b5b613da4848285613d5b565b509392505050565b600082601f830112613dc157613dc0613ca5565b5b8135613dd1848260208601613d6a565b91505092915050565b60008060008060808587031215613df457613df36138e4565b5b6000613e0287828801613b3a565b9450506020613e1387828801613b3a565b9350506040613e2487828801613a85565b925050606085013567ffffffffffffffff811115613e4557613e446138e9565b5b613e5187828801613dac565b91505092959194509250565b60008060408385031215613e7457613e736138e4565b5b6000613e8285828601613b3a565b9250506020613e9385828601613b3a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ee457607f821691505b60208210811415613ef857613ef7613e9d565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613f5a602c836139b4565b9150613f6582613efe565b604082019050919050565b60006020820190508181036000830152613f8981613f4d565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fec6021836139b4565b9150613ff782613f90565b604082019050919050565b6000602082019050818103600083015261401b81613fdf565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061407e6038836139b4565b915061408982614022565b604082019050919050565b600060208201905081810360008301526140ad81614071565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006140ea601f836139b4565b91506140f5826140b4565b602082019050919050565b60006020820190508181036000830152614119816140dd565b9050919050565b7f416c6c20746865205472756368657420426c6f636b73206861766520616c726560008201527f616479206265656e206d696e7465642e00000000000000000000000000000000602082015250565b600061417c6030836139b4565b915061418782614120565b604082019050919050565b600060208201905081810360008301526141ab8161416f565b9050919050565b7f5472756368657420426c6f636b7320617265206e6f74206f6e2073616c65206160008201527f7420746865206d6f6d656e742e00000000000000000000000000000000000000602082015250565b600061420e602d836139b4565b9150614219826141b2565b604082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b7f496e73756666696369656e742066756e647320746f206d696e7420612054727560008201527f6368657420426c6f636b2e000000000000000000000000000000000000000000602082015250565b60006142a0602b836139b4565b91506142ab82614244565b604082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061431082613a64565b915061431b83613a64565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143505761434f6142d6565b5b828201905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006143b76031836139b4565b91506143c28261435b565b604082019050919050565b600060208201905081810360008301526143e6816143aa565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144236020836139b4565b915061442e826143ed565b602082019050919050565b6000602082019050818103600083015261445281614416565b9050919050565b600081905092915050565b50565b6000614474600083614459565b915061447f82614464565b600082019050919050565b600061449582614467565b9150819050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006144fb6029836139b4565b91506145068261449f565b604082019050919050565b6000602082019050818103600083015261452a816144ee565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061458d602a836139b4565b915061459882614531565b604082019050919050565b600060208201905081810360008301526145bc81614580565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006145f96019836139b4565b9150614604826145c3565b602082019050919050565b60006020820190508181036000830152614628816145ec565b9050919050565b7f5472756368657420646f65736e27742065786973742e00000000000000000000600082015250565b60006146656016836139b4565b91506146708261462f565b602082019050919050565b6000602082019050818103600083015261469481614658565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e2c7b226e616d65223a225460008201527f72756368657420426c6f636b2023000000000000000000000000000000000000602082015250565b6000614731602e836146ca565b915061473c826146d5565b602e82019050919050565b600081519050919050565b600061475d82614747565b6147678185614459565b93506147778185602086016139c5565b80840191505092915050565b7f222c22696d616765223a22646174613a696d6167652f7376672b786d6c3b626160008201527f736536342c000000000000000000000000000000000000000000000000000000602082015250565b60006147df6025836146ca565b91506147ea82614783565b602582019050919050565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a202260008201527f5061747465726e222c202276616c7565223a2022000000000000000000000000602082015250565b60006148516034836146ca565b915061485c826147f5565b603482019050919050565b60008190508160005260206000209050919050565b6000815461488981613ecc565b6148938186614459565b945060018216600081146148ae57600181146148bf576148f2565b60ff198316865281860193506148f2565b6148c885614867565b60005b838110156148ea578154818901526001820191506020810190506148cb565b838801955050505b50505092915050565b7f227d2c7b2274726169745f74797065223a2022436f6c6f7572222c202276616c60008201527f7565223a20222300000000000000000000000000000000000000000000000000602082015250565b60006149576027836146ca565b9150614962826148fb565b602782019050919050565b6000614978826139a9565b61498281856146ca565b93506149928185602086016139c5565b80840191505092915050565b7f227d2c7b2274726169745f74797065223a20224772616469656e74205374617260008201527f74222c202276616c7565223a2022230000000000000000000000000000000000602082015250565b60006149fa602f836146ca565b9150614a058261499e565b602f82019050919050565b7f227d2c7b2274726169745f74797065223a20224772616469656e7420456e642260008201527f2c202276616c7565223a20222300000000000000000000000000000000000000602082015250565b6000614a6c602d836146ca565b9150614a7782614a10565b602d82019050919050565b7f227d2c7b2274726169745f74797065223a20224772616469656e7420416e676c60008201527f65222c202276616c7565223a2022000000000000000000000000000000000000602082015250565b6000614ade602e836146ca565b9150614ae982614a82565b602e82019050919050565b7f2064656772656573227d5d2c20226261636b67726f756e645f636f6c6f72223a60008201527f2022000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b506022836146ca565b9150614b5b82614af4565b602282019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b9c6002836146ca565b9150614ba782614b66565b600282019050919050565b6000614bbd82614724565b9150614bc9828b614752565b9150614bd4826147d2565b9150614be0828a614752565b9150614beb82614844565b9150614bf7828961487c565b9150614c028261494a565b9150614c0e828861496d565b9150614c19826149ed565b9150614c25828761496d565b9150614c3082614a5f565b9150614c3c828661496d565b9150614c4782614ad1565b9150614c538285614752565b9150614c5e82614b43565b9150614c6a828461496d565b9150614c7582614b8f565b91508190509998505050505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ce36026836139b4565b9150614cee82614c87565b604082019050919050565b60006020820190508181036000830152614d1281614cd6565b9050919050565b600081519050614d2881613a6e565b92915050565b600060208284031215614d4457614d436138e4565b5b6000614d5284828501614d19565b91505092915050565b60008160601b9050919050565b6000614d7382614d5b565b9050919050565b6000614d8582614d68565b9050919050565b614d9d614d9882613ae7565b614d7a565b82525050565b6000614daf8285614d8c565b601482019150614dbf828461496d565b91508190509392505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614e27602c836139b4565b9150614e3282614dcb565b604082019050919050565b60006020820190508181036000830152614e5681614e1a565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614eb96029836139b4565b9150614ec482614e5d565b604082019050919050565b60006020820190508181036000830152614ee881614eac565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f4b6024836139b4565b9150614f5682614eef565b604082019050919050565b60006020820190508181036000830152614f7a81614f3e565b9050919050565b6000614f8c82613a64565b9150614f9783613a64565b925082821015614faa57614fa96142d6565b5b828203905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006150116032836139b4565b915061501c82614fb5565b604082019050919050565b6000602082019050818103600083015261504081615004565b9050919050565b600060408201905081810360008301526150618185613a09565b90506150706020830184613b8f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150b182613a64565b91506150bc83613a64565b9250826150cc576150cb615077565b5b828206905092915050565b60006150e282613a64565b91506150ed83613a64565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615126576151256142d6565b5b828202905092915050565b6000819050919050565b600061514682615131565b915061515183615131565b92508261516157615160615077565b5b828207905092915050565b600061517782615131565b915061518283615131565b92508261519257615191615077565b5b600160000383147f8000000000000000000000000000000000000000000000000000000000000000831416156151cb576151ca6142d6565b5b828205905092915050565b60006151e182615131565b91506151ec83615131565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03831360008312151615615227576152266142d6565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161561525f5761525e6142d6565b5b828201905092915050565b600061527582615131565b915061528083615131565b9250827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821160008413600084131616156152bf576152be6142d6565b5b817f800000000000000000000000000000000000000000000000000000000000000005831260008412600084131616156152fc576152fb6142d6565b5b827f80000000000000000000000000000000000000000000000000000000000000000582126000841360008412161615615339576153386142d6565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0582126000841260008412161615615376576153756142d6565b5b828202905092915050565b600061538c82615131565b915061539783615131565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156153d2576153d16142d6565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561540a576154096142d6565b5b828203905092915050565b600061542082613a64565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615453576154526142d6565b5b600182019050919050565b600061546982613a64565b915061547483613a64565b92508261548457615483615077565b5b828204905092915050565b60008160011c9050919050565b6000808291508390505b60018511156154e6578086048111156154c2576154c16142d6565b5b60018516156154d15780820291505b80810290506154df8561548f565b94506154a6565b94509492505050565b6000826154ff57600190506155bb565b8161550d57600090506155bb565b8160018114615523576002811461552d5761555c565b60019150506155bb565b60ff84111561553f5761553e6142d6565b5b8360020a915084821115615556576155556142d6565b5b506155bb565b5060208310610133831016604e8410600b84101617156155915782820a90508381111561558c5761558b6142d6565b5b6155bb565b61559e848484600161549c565b925090508184048111156155b5576155b46142d6565b5b81810290505b9392505050565b60006155cd82613a64565b91506155d883613a64565b92506156057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846154ef565b905092915050565b600060ff82169050919050565b60006156258261560d565b91506156308361560d565b9250826156405761563f615077565b5b828204905092915050565b60006156568261560d565b91506156618361560d565b92508160ff048311821515161561567b5761567a6142d6565b5b828202905092915050565b60006156918261560d565b915061569c8361560d565b9250828210156156af576156ae6142d6565b5b828203905092915050565b600082825260208201905092915050565b60006156d682614747565b6156e081856156ba565b93506156f08185602086016139c5565b6156f9816139f8565b840191505092915050565b60006080820190506157196000830187613af9565b6157266020830186613af9565b6157336040830185613b8f565b818103606083015261574581846156cb565b905095945050505050565b60008151905061575f8161391a565b92915050565b60006020828403121561577b5761577a6138e4565b5b600061578984828501615750565b91505092915050565b600061579d8261560d565b91506157a88361560d565b92508260ff038211156157be576157bd6142d6565b5b828201905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006157ff6020836139b4565b915061580a826157c9565b602082019050919050565b6000602082019050818103600083015261582e816157f2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061586b601c836139b4565b915061587682615835565b602082019050919050565b6000602082019050818103600083015261589a8161585e565b905091905056fe2220786d6c6e733a7376673d22687474703a2f2f7777772e77332e6f72672f323030302f7376672220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b222076657273696f6e3d22312e30222076696577426f783d2230203020313032342031303234222077696474683d223130323422206865696768743d2231303234223e222f3e3c2f6c696e6561724772616469656e743e3c7376672069643d2274625f705f4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3b222f3e3c2f7376673e3c2f646566733e3c726563742077696474683d223130302522206865696768743d223130302522207374796c653d2266696c6c3a75726c282374625f62675f222f3e3c73746f70206f66667365743d22383025222073746f702d636f6c6f723d222329223e3c73746f70206f66667365743d22323025222073746f702d636f6c6f723d2223202e74625f626d207b6d69782d626c656e642d6d6f64653a6d756c7469706c793b7d3c2f7374796c653ea264697066735822122085f24880de8a5ceda9d9ca21ce748c831575e46293d80eafad526728d61fccb964736f6c634300080900334d302030613634203634203020302031203634203634413634203634203020302031203020304d323420306138203820302030203020313620304d302032347631366132342032342030203020312032342032346831366132342032342030203020312032342d323456323448304d323420306138203820302030203020313620304d32342036346138203820302030203120313620304d3020323468363476313648305632344d323420306138203820302030203020313620304d302032346138203820302030203120302031366d32342032346831366132342032342030203020312032342d32345632346134302034302030203020302d34302034304d323420306831364c302034305632346d32342034306831366c32342d32345632344c32342036344d32342036346831366132342032342030203020312032342d32345632346134302034302030203020302d34302034306d302d363441323420323420302030203120302032347631364134302034302030203020302034302030483234
Deployed Bytecode
0x6080604052600436106101815760003560e01c80638a333b50116100d1578063b89899711161008a578063e0d4ea3711610064578063e0d4ea3714610530578063e0df72161461056d578063e985e9c514610598578063f2fde38b146105d557610181565b8063b8989971146104b1578063c87b56dd146104dc578063daaeec861461051957610181565b80638a333b50146103b35780638da5cb5b146103de57806395d89b411461040957806395ec54db14610434578063a22cb4651461045f578063b88d4fde1461048857610181565b8063222f33101161013e57806342842e0e1161011857806342842e0e146102f95780636352211e1461032257806370a082311461035f578063715018a61461039c57610181565b8063222f33101461028957806323b872dd146102c657806324600fc3146102ef57610181565b806301ffc9a71461018657806306fdde03146101c3578063081812fc146101ee578063095ea7b31461022b5780631249c58b1461025457806318160ddd1461025e575b600080fd5b34801561019257600080fd5b506101ad60048036038101906101a89190613946565b6105fe565b6040516101ba919061398e565b60405180910390f35b3480156101cf57600080fd5b506101d86106e0565b6040516101e59190613a42565b60405180910390f35b3480156101fa57600080fd5b5061021560048036038101906102109190613a9a565b610772565b6040516102229190613b08565b60405180910390f35b34801561023757600080fd5b50610252600480360381019061024d9190613b4f565b6107f7565b005b61025c61090f565b005b34801561026a57600080fd5b50610273610ab9565b6040516102809190613b9e565b60405180910390f35b34801561029557600080fd5b506102b060048036038101906102ab9190613a9a565b610ac3565b6040516102bd9190613a42565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613bb9565b610b63565b005b6102f7610bc3565b005b34801561030557600080fd5b50610320600480360381019061031b9190613bb9565b610cb8565b005b34801561032e57600080fd5b5061034960048036038101906103449190613a9a565b610cd8565b6040516103569190613b08565b60405180910390f35b34801561036b57600080fd5b5061038660048036038101906103819190613c0c565b610d8a565b6040516103939190613b9e565b60405180910390f35b3480156103a857600080fd5b506103b1610e42565b005b3480156103bf57600080fd5b506103c8610f7f565b6040516103d59190613b9e565b60405180910390f35b3480156103ea57600080fd5b506103f3610f85565b6040516104009190613b08565b60405180910390f35b34801561041557600080fd5b5061041e610faf565b60405161042b9190613a42565b60405180910390f35b34801561044057600080fd5b50610449611041565b6040516104569190613b9e565b60405180910390f35b34801561046b57600080fd5b5061048660048036038101906104819190613c65565b611047565b005b34801561049457600080fd5b506104af60048036038101906104aa9190613dda565b6111c8565b005b3480156104bd57600080fd5b506104c661122a565b6040516104d39190613b9e565b60405180910390f35b3480156104e857600080fd5b5061050360048036038101906104fe9190613a9a565b611230565b6040516105109190613a42565b60405180910390f35b34801561052557600080fd5b5061052e6113fd565b005b34801561053c57600080fd5b5061055760048036038101906105529190613a9a565b6114a5565b6040516105649190613a42565b60405180910390f35b34801561057957600080fd5b5061058261154a565b60405161058f919061398e565b60405180910390f35b3480156105a457600080fd5b506105bf60048036038101906105ba9190613e5d565b61155d565b6040516105cc919061398e565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f79190613c0c565b6115f1565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806106c957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806106d957506106d88261179d565b5b9050919050565b6060600080546106ef90613ecc565b80601f016020809104026020016040519081016040528092919081815260200182805461071b90613ecc565b80156107685780601f1061073d57610100808354040283529160200191610768565b820191906000526020600020905b81548152906001019060200180831161074b57829003601f168201915b5050505050905090565b600061077d82611807565b6107bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b390613f70565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061080282610cd8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610873576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086a90614002565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610892611873565b73ffffffffffffffffffffffffffffffffffffffff1614806108c157506108c0816108bb611873565b61155d565b5b610900576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f790614094565b60405180910390fd5b61090a838361187b565b505050565b60026006541415610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c90614100565b60405180910390fd5b6002600681905550600d54610968610ab9565b106109a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099f90614192565b60405180910390fd5b600b60009054906101000a900460ff166109f7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ee90614224565b60405180910390fd5b600c54341015610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a33906142b6565b60405180910390fd5b60006001610a48610ab9565b610a529190614305565b90506000610a5f33611934565b9050610a6b3383611a1e565b80601160008481526020019081526020016000209080519060200190610a92929190613837565b506001600e6000828254610aa69190614305565b9250508190555050506001600681905550565b6000600e54905090565b60116020528060005260406000206000915090508054610ae290613ecc565b80601f0160208091040260200160405190810160405280929190818152602001828054610b0e90613ecc565b8015610b5b5780601f10610b3057610100808354040283529160200191610b5b565b820191906000526020600020905b815481529060010190602001808311610b3e57829003601f168201915b505050505081565b610b74610b6e611873565b82611a3c565b610bb3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baa906143cd565b60405180910390fd5b610bbe838383611b1a565b505050565b610bcb611873565b73ffffffffffffffffffffffffffffffffffffffff16610be9610f85565b73ffffffffffffffffffffffffffffffffffffffff1614610c3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3690614439565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610c659061448a565b60006040518083038185875af1925050503d8060008114610ca2576040519150601f19603f3d011682016040523d82523d6000602084013e610ca7565b606091505b5050905080610cb557600080fd5b50565b610cd3838383604051806020016040528060008152506111c8565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d81576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7890614511565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610dfb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df2906145a3565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610e4a611873565b73ffffffffffffffffffffffffffffffffffffffff16610e68610f85565b73ffffffffffffffffffffffffffffffffffffffff1614610ebe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb590614439565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600d5481565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060018054610fbe90613ecc565b80601f0160208091040260200160405190810160405280929190818152602001828054610fea90613ecc565b80156110375780601f1061100c57610100808354040283529160200191611037565b820191906000526020600020905b81548152906001019060200180831161101a57829003601f168201915b5050505050905090565b600c5481565b61104f611873565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b49061460f565b60405180910390fd5b80600560006110ca611873565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611177611873565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516111bc919061398e565b60405180910390a35050565b6111d96111d3611873565b83611a3c565b611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f906143cd565b60405180910390fd5b61122484848484611d76565b50505050565b600e5481565b606061123b82611807565b61127a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112719061467b565b60405180910390fd5b600060116000848152602001908152602001600020805461129a90613ecc565b80601f01602080910402602001604051908101604052809291908181526020018280546112c690613ecc565b80156113135780601f106112e857610100808354040283529160200191611313565b820191906000526020600020905b8154815290600101906020018083116112f657829003601f168201915b50505050509050600061132d826000600f80549050611dd2565b9050600061133f836001610168611dd2565b905060006113508460006006611e14565b9050600061136085600680611e14565b905060006113718660086006611e14565b905060006113848988888787878b611efc565b905060006113918a612ef6565b61139a83613057565b600f89815481106113ae576113ad61469b565b5b906000526020600020018787876113c48c612ef6565b896040516020016113dc989796959493929190614bb2565b60405160208183030381529060405290508098505050505050505050919050565b611405611873565b73ffffffffffffffffffffffffffffffffffffffff16611423610f85565b73ffffffffffffffffffffffffffffffffffffffff1614611479576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147090614439565b60405180910390fd5b600b60009054906101000a900460ff1615600b60006101000a81548160ff021916908315150217905550565b60606011600083815260200190815260200160002080546114c590613ecc565b80601f01602080910402602001604051908101604052809291908181526020018280546114f190613ecc565b801561153e5780601f106115135761010080835404028352916020019161153e565b820191906000526020600020905b81548152906001019060200180831161152157829003601f168201915b50505050509050919050565b600b60009054906101000a900460ff1681565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6115f9611873565b73ffffffffffffffffffffffffffffffffffffffff16611617610f85565b73ffffffffffffffffffffffffffffffffffffffff161461166d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166490614439565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490614cf9565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166118ee83610cd8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b606060003073ffffffffffffffffffffffffffffffffffffffff166370a08231846040518263ffffffff1660e01b81526004016119719190613b08565b60206040518083038186803b15801561198957600080fd5b505afa15801561199d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c19190614d2e565b9050600080821115611a0857836119d783612ef6565b6040516020016119e8929190614da3565b6040516020818303038152906040528051906020012060001c9050611a0c565b8390505b611a15816131ef565b92505050919050565b611a388282604051806020016040528060008152506133b2565b5050565b6000611a4782611807565b611a86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a7d90614e3d565b60405180910390fd5b6000611a9183610cd8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b0057508373ffffffffffffffffffffffffffffffffffffffff16611ae884610772565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b115750611b10818561155d565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b3a82610cd8565b73ffffffffffffffffffffffffffffffffffffffff1614611b90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8790614ecf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf790614f61565b60405180910390fd5b611c0b83838361340d565b611c1660008261187b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c669190614f81565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611cbd9190614305565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611d81848484611b1a565b611d8d84848484613412565b611dcc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc390615027565b60405180910390fd5b50505050565b6000818484604051602001611de8929190615047565b6040516020818303038152906040528051906020012060001c611e0b91906150a6565b90509392505050565b6060600084905060008367ffffffffffffffff811115611e3757611e36613caf565b5b6040519080825280601f01601f191660200182016040528015611e695781602001600182028036833780820191505090505b50905060005b84811015611eef57828187611e849190614305565b81518110611e9557611e9461469b565b5b602001015160f81c60f81b828281518110611eb357611eb261469b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053508080600101915050611e6f565b5080925050509392505050565b60606000611f0b6180006135a9565b9050611f556040518060400160405280601081526020017f3c7376672069643d2274625f7376675f00000000000000000000000000000000815250826135d390919063ffffffff16565b611f70611f618a612ef6565b826135d390919063ffffffff16565b611f9b6040518060e0016040528060b881526020016158a260b89139826135d390919063ffffffff16565b6001871480611faa5750600287145b80611fb55750600387145b80611fc05750600487145b156120545761200d6040518060400160405280600f81526020017f3c7374796c653e2374625f7376675f0000000000000000000000000000000000815250826135d390919063ffffffff16565b6120286120198a612ef6565b826135d390919063ffffffff16565b6120536040518060600160405280602a8152602001615a4b602a9139826135d390919063ffffffff16565b5b61209c6040518060400160405280602081526020017f3c646566733e3c6c696e6561724772616469656e742069643d2274625f62675f815250826135d390919063ffffffff16565b6120b76120a88a612ef6565b826135d390919063ffffffff16565b6120ff6040518060400160405280601c81526020017f22206772616469656e745472616e73666f726d3d22726f746174652800000000815250826135d390919063ffffffff16565b61211a61210b84612ef6565b826135d390919063ffffffff16565b612145604051806060016040528060238152602001615a2860239139826135d390919063ffffffff16565b61215885826135d390919063ffffffff16565b612183604051806060016040528060238152602001615a0560239139826135d390919063ffffffff16565b61219684826135d390919063ffffffff16565b6121c160405180606001604052806022815260200161595a60229139826135d390919063ffffffff16565b6121dc6121cd8a612ef6565b826135d390919063ffffffff16565b6122246040518060400160405280600b81526020017f223e3c7061746820643d22000000000000000000000000000000000000000000815250826135d390919063ffffffff16565b6122dd6010888154811061223b5761223a61469b565b5b90600052602060002001805461225090613ecc565b80601f016020809104026020016040519081016040528092919081815260200182805461227c90613ecc565b80156122c95780601f1061229e576101008083540402835291602001916122c9565b820191906000526020600020905b8154815290600101906020018083116122ac57829003601f168201915b5050505050826135d390919063ffffffff16565b6123256040518060400160405280600f81526020017f22207374796c653d2266696c6c3a230000000000000000000000000000000000815250826135d390919063ffffffff16565b61233886826135d390919063ffffffff16565b6123636040518060800160405280604981526020016159bc60499139826135d390919063ffffffff16565b61237e61236f8a612ef6565b826135d390919063ffffffff16565b6123c66040518060400160405280600581526020017f293b222f3e000000000000000000000000000000000000000000000000000000815250826135d390919063ffffffff16565b6000806000905060008080600090505b6008546008546123e691906150d7565b811215612e9a57600854816123fb919061513b565b92506008548161240b919061516c565b93506124556040518060400160405280601781526020017f3c75736520786c696e6b3a687265663d222374625f705f000000000000000000815250876135d390919063ffffffff16565b6124706124618f612ef6565b876135d390919063ffffffff16565b6124b86040518060400160405280600d81526020017f22207472616e73666f726d3d2200000000000000000000000000000000000000815250876135d390919063ffffffff16565b6124d08d6002836124c991906151d6565b6003611dd2565b94506000851415612608576125236040518060400160405280600a81526020017f7472616e736c6174652800000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b61254b61253c600a5486612537919061526a565b612ef6565b876135d390919063ffffffff16565b6125936040518060400160405280600181526020017f2000000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b6125bb6125ac600a54856125a7919061526a565b612ef6565b876135d390919063ffffffff16565b6126036040518060400160405280600181526020017f2900000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b612d69565b600185141561288e576126596040518060400160405280600b81526020017f726f746174652839302c20000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b60095484612667919061526a565b60095484612675919061526a565b6009546126829190615381565b61268c91906151d6565b9150600082121561270e576126df6040518060400160405280600181526020017f2d00000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261270b919061526a565b91505b61272961271a83612ef6565b876135d390919063ffffffff16565b6127716040518060400160405280600281526020017f2c20000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b6009548461277f919061526a565b60095460095485612790919061526a565b61279a91906151d6565b6127a491906151d6565b91506000821215612826576127f76040518060400160405280600181526020017f2d00000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612823919061526a565b91505b61284161283283612ef6565b876135d390919063ffffffff16565b6128896040518060400160405280600181526020017f2900000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b612d68565b6002851415612ae4576128df6040518060400160405280600c81526020017f726f74617465283138302c200000000000000000000000000000000000000000815250876135d390919063ffffffff16565b600954600954856128f0919061526a565b6128fa91906151d6565b9150600082121561297c5761294d6040518060400160405280600181526020017f2d00000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612979919061526a565b91505b61299761298883612ef6565b876135d390919063ffffffff16565b6129df6040518060400160405280600281526020017f2c20000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b600954600954846129f0919061526a565b6129fa91906151d6565b91506000821215612a7c57612a4d6040518060400160405280600181526020017f2d00000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612a79919061526a565b91505b612a97612a8883612ef6565b876135d390919063ffffffff16565b612adf6040518060400160405280600181526020017f2900000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b612d67565b6003851415612d6657612b356040518060400160405280600c81526020017f726f74617465283237302c200000000000000000000000000000000000000000815250876135d390919063ffffffff16565b60095484612b43919061526a565b60095460095485612b54919061526a565b612b5e91906151d6565b612b6891906151d6565b91506000821215612bea57612bbb6040518060400160405280600181526020017f2d00000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612be7919061526a565b91505b612c05612bf683612ef6565b876135d390919063ffffffff16565b612c4d6040518060400160405280600281526020017f2c20000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b60095484612c5b919061526a565b60095460095485612c6c919061526a565b612c7691906151d6565b612c809190615381565b91506000821215612d0257612cd36040518060400160405280600181526020017f2d00000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612cff919061526a565b91505b612d1d612d0e83612ef6565b876135d390919063ffffffff16565b612d656040518060400160405280600181526020017f2900000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b5b5b5b5b612db16040518060400160405280600181526020017f2200000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b60018c1480612dc0575060028c145b80612dcb575060038c145b80612dd6575060048c145b15612e45576001612df58e600384612dee91906151d6565b6003611dd2565b1415612e4457612e436040518060400160405280600e81526020017f20636c6173733d2274625f626d22000000000000000000000000000000000000815250876135d390919063ffffffff16565b5b5b612e8d6040518060400160405280600281526020017f2f3e000000000000000000000000000000000000000000000000000000000000815250876135d390919063ffffffff16565b80806001019150506123d6565b50612ee36040518060400160405280600681526020017f3c2f7376673e0000000000000000000000000000000000000000000000000000815250866135d390919063ffffffff16565b8495505050505050979650505050505050565b60606000821415612f3e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613052565b600082905060005b60008214612f70578080612f5990615415565b915050600a82612f69919061545e565b9150612f46565b60008167ffffffffffffffff811115612f8c57612f8b613caf565b5b6040519080825280601f01601f191660200182016040528015612fbe5781602001600182028036833780820191505090505b5090505b6000851461304b57600182612fd79190614f81565b9150600a85612fe691906150a6565b6030612ff29190614305565b60f81b8183815181106130085761300761469b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85613044919061545e565b9450612fc2565b8093505050505b919050565b6060600082519050600081141561308057604051806020016040528060008152509150506131ea565b600060036002836130919190614305565b61309b919061545e565b60046130a791906150d7565b905060006020826130b89190614305565b67ffffffffffffffff8111156130d1576130d0613caf565b5b6040519080825280601f01601f1916602001820160405280156131035781602001600182028036833780820191505090505b509050600060405180606001604052806040815260200161597c604091399050600181016020830160005b868110156131a75760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b9050808452600484019350505061312e565b5060038606600181146131c157600281146131d1576131dc565b613d3d60f01b60028303526131dc565b603d60f81b60018303525b508484525050819450505050505b919050565b60606000602867ffffffffffffffff81111561320e5761320d613caf565b5b6040519080825280601f01601f1916602001820160405280156132405781602001600182028036833780820191505090505b50905060005b60148110156133a857600081601361325e9190614f81565b600861326a91906150d7565b600261327691906155c2565b8573ffffffffffffffffffffffffffffffffffffffff16613297919061545e565b60f81b9050600060108260f81c6132ae919061561a565b60f81b905060008160f81c60106132c5919061564b565b8360f81c6132d39190615686565b60f81b90506132e182613610565b858560026132ef91906150d7565b81518110613300576132ff61469b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535061333881613610565b85600186600261334891906150d7565b6133529190614305565b815181106133635761336261469b565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535050505080806133a090615415565b915050613246565b5080915050919050565b6133bc8383613656565b6133c96000848484613412565b613408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133ff90615027565b60405180910390fd5b505050565b505050565b60006134338473ffffffffffffffffffffffffffffffffffffffff16613824565b1561359c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261345c611873565b8786866040518563ffffffff1660e01b815260040161347e9493929190615704565b602060405180830381600087803b15801561349857600080fd5b505af19250505080156134c957506040513d601f19601f820116820180604052508101906134c69190615765565b60015b61354c573d80600081146134f9576040519150601f19603f3d011682016040523d82523d6000602084013e6134fe565b606091505b50600081511415613544576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161353b90615027565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506135a1565b600190505b949350505050565b60606040516060830180820180604052505060408301808252506020810191506000825250919050565b8051602082019150808201602084510184015b8184101561360357835181526020840193506020810190506135e6565b5050808351018352505050565b6000600a8260f81c60ff16101561363b5760308260f81c6136319190615792565b60f81b9050613651565b60578260f81c61364b9190615792565b60f81b90505b919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156136c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136bd90615815565b60405180910390fd5b6136cf81611807565b1561370f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370690615881565b60405180910390fd5b61371b6000838361340d565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461376b9190614305565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461384390613ecc565b90600052602060002090601f01602090048101928261386557600085556138ac565b82601f1061387e57805160ff19168380011785556138ac565b828001600101855582156138ac579182015b828111156138ab578251825591602001919060010190613890565b5b5090506138b991906138bd565b5090565b5b808211156138d65760008160009055506001016138be565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b613923816138ee565b811461392e57600080fd5b50565b6000813590506139408161391a565b92915050565b60006020828403121561395c5761395b6138e4565b5b600061396a84828501613931565b91505092915050565b60008115159050919050565b61398881613973565b82525050565b60006020820190506139a3600083018461397f565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156139e35780820151818401526020810190506139c8565b838111156139f2576000848401525b50505050565b6000601f19601f8301169050919050565b6000613a14826139a9565b613a1e81856139b4565b9350613a2e8185602086016139c5565b613a37816139f8565b840191505092915050565b60006020820190508181036000830152613a5c8184613a09565b905092915050565b6000819050919050565b613a7781613a64565b8114613a8257600080fd5b50565b600081359050613a9481613a6e565b92915050565b600060208284031215613ab057613aaf6138e4565b5b6000613abe84828501613a85565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613af282613ac7565b9050919050565b613b0281613ae7565b82525050565b6000602082019050613b1d6000830184613af9565b92915050565b613b2c81613ae7565b8114613b3757600080fd5b50565b600081359050613b4981613b23565b92915050565b60008060408385031215613b6657613b656138e4565b5b6000613b7485828601613b3a565b9250506020613b8585828601613a85565b9150509250929050565b613b9881613a64565b82525050565b6000602082019050613bb36000830184613b8f565b92915050565b600080600060608486031215613bd257613bd16138e4565b5b6000613be086828701613b3a565b9350506020613bf186828701613b3a565b9250506040613c0286828701613a85565b9150509250925092565b600060208284031215613c2257613c216138e4565b5b6000613c3084828501613b3a565b91505092915050565b613c4281613973565b8114613c4d57600080fd5b50565b600081359050613c5f81613c39565b92915050565b60008060408385031215613c7c57613c7b6138e4565b5b6000613c8a85828601613b3a565b9250506020613c9b85828601613c50565b9150509250929050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b613ce7826139f8565b810181811067ffffffffffffffff82111715613d0657613d05613caf565b5b80604052505050565b6000613d196138da565b9050613d258282613cde565b919050565b600067ffffffffffffffff821115613d4557613d44613caf565b5b613d4e826139f8565b9050602081019050919050565b82818337600083830152505050565b6000613d7d613d7884613d2a565b613d0f565b905082815260208101848484011115613d9957613d98613caa565b5b613da4848285613d5b565b509392505050565b600082601f830112613dc157613dc0613ca5565b5b8135613dd1848260208601613d6a565b91505092915050565b60008060008060808587031215613df457613df36138e4565b5b6000613e0287828801613b3a565b9450506020613e1387828801613b3a565b9350506040613e2487828801613a85565b925050606085013567ffffffffffffffff811115613e4557613e446138e9565b5b613e5187828801613dac565b91505092959194509250565b60008060408385031215613e7457613e736138e4565b5b6000613e8285828601613b3a565b9250506020613e9385828601613b3a565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613ee457607f821691505b60208210811415613ef857613ef7613e9d565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613f5a602c836139b4565b9150613f6582613efe565b604082019050919050565b60006020820190508181036000830152613f8981613f4d565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613fec6021836139b4565b9150613ff782613f90565b604082019050919050565b6000602082019050818103600083015261401b81613fdf565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b600061407e6038836139b4565b915061408982614022565b604082019050919050565b600060208201905081810360008301526140ad81614071565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b60006140ea601f836139b4565b91506140f5826140b4565b602082019050919050565b60006020820190508181036000830152614119816140dd565b9050919050565b7f416c6c20746865205472756368657420426c6f636b73206861766520616c726560008201527f616479206265656e206d696e7465642e00000000000000000000000000000000602082015250565b600061417c6030836139b4565b915061418782614120565b604082019050919050565b600060208201905081810360008301526141ab8161416f565b9050919050565b7f5472756368657420426c6f636b7320617265206e6f74206f6e2073616c65206160008201527f7420746865206d6f6d656e742e00000000000000000000000000000000000000602082015250565b600061420e602d836139b4565b9150614219826141b2565b604082019050919050565b6000602082019050818103600083015261423d81614201565b9050919050565b7f496e73756666696369656e742066756e647320746f206d696e7420612054727560008201527f6368657420426c6f636b2e000000000000000000000000000000000000000000602082015250565b60006142a0602b836139b4565b91506142ab82614244565b604082019050919050565b600060208201905081810360008301526142cf81614293565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061431082613a64565b915061431b83613a64565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156143505761434f6142d6565b5b828201905092915050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b60006143b76031836139b4565b91506143c28261435b565b604082019050919050565b600060208201905081810360008301526143e6816143aa565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006144236020836139b4565b915061442e826143ed565b602082019050919050565b6000602082019050818103600083015261445281614416565b9050919050565b600081905092915050565b50565b6000614474600083614459565b915061447f82614464565b600082019050919050565b600061449582614467565b9150819050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006144fb6029836139b4565b91506145068261449f565b604082019050919050565b6000602082019050818103600083015261452a816144ee565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b600061458d602a836139b4565b915061459882614531565b604082019050919050565b600060208201905081810360008301526145bc81614580565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b60006145f96019836139b4565b9150614604826145c3565b602082019050919050565b60006020820190508181036000830152614628816145ec565b9050919050565b7f5472756368657420646f65736e27742065786973742e00000000000000000000600082015250565b60006146656016836139b4565b91506146708261462f565b602082019050919050565b6000602082019050818103600083015261469481614658565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081905092915050565b7f646174613a6170706c69636174696f6e2f6a736f6e2c7b226e616d65223a225460008201527f72756368657420426c6f636b2023000000000000000000000000000000000000602082015250565b6000614731602e836146ca565b915061473c826146d5565b602e82019050919050565b600081519050919050565b600061475d82614747565b6147678185614459565b93506147778185602086016139c5565b80840191505092915050565b7f222c22696d616765223a22646174613a696d6167652f7376672b786d6c3b626160008201527f736536342c000000000000000000000000000000000000000000000000000000602082015250565b60006147df6025836146ca565b91506147ea82614783565b602582019050919050565b7f222c2261747472696275746573223a5b7b2274726169745f74797065223a202260008201527f5061747465726e222c202276616c7565223a2022000000000000000000000000602082015250565b60006148516034836146ca565b915061485c826147f5565b603482019050919050565b60008190508160005260206000209050919050565b6000815461488981613ecc565b6148938186614459565b945060018216600081146148ae57600181146148bf576148f2565b60ff198316865281860193506148f2565b6148c885614867565b60005b838110156148ea578154818901526001820191506020810190506148cb565b838801955050505b50505092915050565b7f227d2c7b2274726169745f74797065223a2022436f6c6f7572222c202276616c60008201527f7565223a20222300000000000000000000000000000000000000000000000000602082015250565b60006149576027836146ca565b9150614962826148fb565b602782019050919050565b6000614978826139a9565b61498281856146ca565b93506149928185602086016139c5565b80840191505092915050565b7f227d2c7b2274726169745f74797065223a20224772616469656e74205374617260008201527f74222c202276616c7565223a2022230000000000000000000000000000000000602082015250565b60006149fa602f836146ca565b9150614a058261499e565b602f82019050919050565b7f227d2c7b2274726169745f74797065223a20224772616469656e7420456e642260008201527f2c202276616c7565223a20222300000000000000000000000000000000000000602082015250565b6000614a6c602d836146ca565b9150614a7782614a10565b602d82019050919050565b7f227d2c7b2274726169745f74797065223a20224772616469656e7420416e676c60008201527f65222c202276616c7565223a2022000000000000000000000000000000000000602082015250565b6000614ade602e836146ca565b9150614ae982614a82565b602e82019050919050565b7f2064656772656573227d5d2c20226261636b67726f756e645f636f6c6f72223a60008201527f2022000000000000000000000000000000000000000000000000000000000000602082015250565b6000614b506022836146ca565b9150614b5b82614af4565b602282019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614b9c6002836146ca565b9150614ba782614b66565b600282019050919050565b6000614bbd82614724565b9150614bc9828b614752565b9150614bd4826147d2565b9150614be0828a614752565b9150614beb82614844565b9150614bf7828961487c565b9150614c028261494a565b9150614c0e828861496d565b9150614c19826149ed565b9150614c25828761496d565b9150614c3082614a5f565b9150614c3c828661496d565b9150614c4782614ad1565b9150614c538285614752565b9150614c5e82614b43565b9150614c6a828461496d565b9150614c7582614b8f565b91508190509998505050505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614ce36026836139b4565b9150614cee82614c87565b604082019050919050565b60006020820190508181036000830152614d1281614cd6565b9050919050565b600081519050614d2881613a6e565b92915050565b600060208284031215614d4457614d436138e4565b5b6000614d5284828501614d19565b91505092915050565b60008160601b9050919050565b6000614d7382614d5b565b9050919050565b6000614d8582614d68565b9050919050565b614d9d614d9882613ae7565b614d7a565b82525050565b6000614daf8285614d8c565b601482019150614dbf828461496d565b91508190509392505050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614e27602c836139b4565b9150614e3282614dcb565b604082019050919050565b60006020820190508181036000830152614e5681614e1a565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614eb96029836139b4565b9150614ec482614e5d565b604082019050919050565b60006020820190508181036000830152614ee881614eac565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614f4b6024836139b4565b9150614f5682614eef565b604082019050919050565b60006020820190508181036000830152614f7a81614f3e565b9050919050565b6000614f8c82613a64565b9150614f9783613a64565b925082821015614faa57614fa96142d6565b5b828203905092915050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006150116032836139b4565b915061501c82614fb5565b604082019050919050565b6000602082019050818103600083015261504081615004565b9050919050565b600060408201905081810360008301526150618185613a09565b90506150706020830184613b8f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006150b182613a64565b91506150bc83613a64565b9250826150cc576150cb615077565b5b828206905092915050565b60006150e282613a64565b91506150ed83613a64565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615615126576151256142d6565b5b828202905092915050565b6000819050919050565b600061514682615131565b915061515183615131565b92508261516157615160615077565b5b828207905092915050565b600061517782615131565b915061518283615131565b92508261519257615191615077565b5b600160000383147f8000000000000000000000000000000000000000000000000000000000000000831416156151cb576151ca6142d6565b5b828205905092915050565b60006151e182615131565b91506151ec83615131565b9250817f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03831360008312151615615227576152266142d6565b5b817f800000000000000000000000000000000000000000000000000000000000000003831260008312161561525f5761525e6142d6565b5b828201905092915050565b600061527582615131565b915061528083615131565b9250827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821160008413600084131616156152bf576152be6142d6565b5b817f800000000000000000000000000000000000000000000000000000000000000005831260008412600084131616156152fc576152fb6142d6565b5b827f80000000000000000000000000000000000000000000000000000000000000000582126000841360008412161615615339576153386142d6565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0582126000841260008412161615615376576153756142d6565b5b828202905092915050565b600061538c82615131565b915061539783615131565b9250827f8000000000000000000000000000000000000000000000000000000000000000018212600084121516156153d2576153d16142d6565b5b827f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01821360008412161561540a576154096142d6565b5b828203905092915050565b600061542082613a64565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615453576154526142d6565b5b600182019050919050565b600061546982613a64565b915061547483613a64565b92508261548457615483615077565b5b828204905092915050565b60008160011c9050919050565b6000808291508390505b60018511156154e6578086048111156154c2576154c16142d6565b5b60018516156154d15780820291505b80810290506154df8561548f565b94506154a6565b94509492505050565b6000826154ff57600190506155bb565b8161550d57600090506155bb565b8160018114615523576002811461552d5761555c565b60019150506155bb565b60ff84111561553f5761553e6142d6565b5b8360020a915084821115615556576155556142d6565b5b506155bb565b5060208310610133831016604e8410600b84101617156155915782820a90508381111561558c5761558b6142d6565b5b6155bb565b61559e848484600161549c565b925090508184048111156155b5576155b46142d6565b5b81810290505b9392505050565b60006155cd82613a64565b91506155d883613a64565b92506156057fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846154ef565b905092915050565b600060ff82169050919050565b60006156258261560d565b91506156308361560d565b9250826156405761563f615077565b5b828204905092915050565b60006156568261560d565b91506156618361560d565b92508160ff048311821515161561567b5761567a6142d6565b5b828202905092915050565b60006156918261560d565b915061569c8361560d565b9250828210156156af576156ae6142d6565b5b828203905092915050565b600082825260208201905092915050565b60006156d682614747565b6156e081856156ba565b93506156f08185602086016139c5565b6156f9816139f8565b840191505092915050565b60006080820190506157196000830187613af9565b6157266020830186613af9565b6157336040830185613b8f565b818103606083015261574581846156cb565b905095945050505050565b60008151905061575f8161391a565b92915050565b60006020828403121561577b5761577a6138e4565b5b600061578984828501615750565b91505092915050565b600061579d8261560d565b91506157a88361560d565b92508260ff038211156157be576157bd6142d6565b5b828201905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b60006157ff6020836139b4565b915061580a826157c9565b602082019050919050565b6000602082019050818103600083015261582e816157f2565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b600061586b601c836139b4565b915061587682615835565b602082019050919050565b6000602082019050818103600083015261589a8161585e565b905091905056fe2220786d6c6e733a7376673d22687474703a2f2f7777772e77332e6f72672f323030302f7376672220786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d22687474703a2f2f7777772e77332e6f72672f313939392f786c696e6b222076657273696f6e3d22312e30222076696577426f783d2230203020313032342031303234222077696474683d223130323422206865696768743d2231303234223e222f3e3c2f6c696e6561724772616469656e743e3c7376672069643d2274625f705f4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2f3b222f3e3c2f7376673e3c2f646566733e3c726563742077696474683d223130302522206865696768743d223130302522207374796c653d2266696c6c3a75726c282374625f62675f222f3e3c73746f70206f66667365743d22383025222073746f702d636f6c6f723d222329223e3c73746f70206f66667365743d22323025222073746f702d636f6c6f723d2223202e74625f626d207b6d69782d626c656e642d6d6f64653a6d756c7469706c793b7d3c2f7374796c653ea264697066735822122085f24880de8a5ceda9d9ca21ce748c831575e46293d80eafad526728d61fccb964736f6c63430008090033
Deployed Bytecode Sourcemap
16658:9734:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2631:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3308:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4248:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3902:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;18131:511;;;:::i;:::-;;17970:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17094:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4888:235;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26229:160;;;:::i;:::-;;5126:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3087:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2891:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9053:133;;;;;;;;;;;;;:::i;:::-;;16973:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8864:78;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3402:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16931:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4455:272;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5271:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17005:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19448:1379;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26069:82;;;;;;;;;;;;;:::i;:::-;;19224:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16896:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4730:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9189:223;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2631:257;2733:4;2766:25;2751:40;;;:11;:40;;;;:92;;;;2810:33;2795:48;;;:11;:48;;;;2751:92;:132;;;;2847:36;2871:11;2847:23;:36::i;:::-;2751:132;2744:139;;2631:257;;;:::o;3308:91::-;3362:13;3389:5;3382:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3308:91;:::o;4248:204::-;4324:7;4346:16;4354:7;4346;:16::i;:::-;4338:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4423:15;:24;4439:7;4423:24;;;;;;;;;;;;;;;;;;;;;4416:31;;4248:204;;;:::o;3902:343::-;3977:13;3993:23;4008:7;3993:14;:23::i;:::-;3977:39;;4035:5;4029:11;;:2;:11;;;;4021:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;4107:5;4091:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;4116:37;4133:5;4140:12;:10;:12::i;:::-;4116:16;:37::i;:::-;4091:62;4083:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;4219:21;4228:2;4232:7;4219:8;:21::i;:::-;3972:273;3902:343;;:::o;18131:511::-;9538:1;9656:7;;:19;;9648:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;9538:1;9716:7;:18;;;;18206:10:::1;;18190:13;:11;:13::i;:::-;:26;18182:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;18282:11;;;;;;;;;;;18274:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;18369:10;;18356:9;:23;;18348:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;18434:19;18472:1;18456:13;:11;:13::i;:::-;:17;;;;:::i;:::-;18434:39;;18480:18;18501:24;18514:10;18501:12;:24::i;:::-;18480:45;;18532:37;18542:10;18554:14;18532:9;:37::i;:::-;18608:4;18576:13;:29;18590:14;18576:29;;;;;;;;;;;:36;;;;;;;;;;;;:::i;:::-;;18636:1;18617:15;;:20;;;;;;;:::i;:::-;;;;;;;;18177:465;;9497:1:::0;9745:7;:22;;;;18131:511::o;17970:84::-;18014:4;18034:15;;18027:22;;17970:84;:::o;17094:44::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4888:235::-;4990:41;5009:12;:10;:12::i;:::-;5023:7;4990:18;:41::i;:::-;4982:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5090:28;5100:4;5106:2;5110:7;5090:9;:28::i;:::-;4888:235;;;:::o;26229:160::-;8990:12;:10;:12::i;:::-;8979:23;;:7;:5;:7::i;:::-;:23;;;8971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26287:12:::1;26313:10;26305:24;;26337:21;26305:58;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26286:77;;;26376:7;26368:16;;;::::0;::::1;;26281:108;26229:160::o:0;5126:142::-;5224:39;5241:4;5247:2;5251:7;5224:39;;;;;;;;;;;;:16;:39::i;:::-;5126:142;;;:::o;3087:218::-;3159:7;3173:13;3189:7;:16;3197:7;3189:16;;;;;;;;;;;;;;;;;;;;;3173:32;;3235:1;3218:19;;:5;:19;;;;3210:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3295:5;3288:12;;;3087:218;;;:::o;2891:193::-;2963:7;3002:1;2985:19;;:5;:19;;;;2977:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;3063:9;:16;3073:5;3063:16;;;;;;;;;;;;;;;;3056:23;;2891:193;;;:::o;9053:133::-;8990:12;:10;:12::i;:::-;8979:23;;:7;:5;:7::i;:::-;:23;;;8971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9154:1:::1;9117:40;;9138:6;;;;;;;;;;;9117:40;;;;;;;;;;;;9179:1;9162:6;;:19;;;;;;;;;;;;;;;;;;9053:133::o:0;16973:28::-;;;;:::o;8864:78::-;8910:7;8931:6;;;;;;;;;;;8924:13;;8864:78;:::o;3402:95::-;3458:13;3485:7;3478:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3402:95;:::o;16931:38::-;;;;:::o;4455:272::-;4564:12;:10;:12::i;:::-;4552:24;;:8;:24;;;;4544:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;4656:8;4611:18;:32;4630:12;:10;:12::i;:::-;4611:32;;;;;;;;;;;;;;;:42;4644:8;4611:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;4703:8;4674:48;;4689:12;:10;:12::i;:::-;4674:48;;;4713:8;4674:48;;;;;;:::i;:::-;;;;;;;;4455:272;;:::o;5271:270::-;5397:41;5416:12;:10;:12::i;:::-;5430:7;5397:18;:41::i;:::-;5389:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5497:39;5511:4;5517:2;5521:7;5530:5;5497:13;:39::i;:::-;5271:270;;;;:::o;17005:31::-;;;;:::o;19448:1379::-;19514:13;19544:20;19552:11;19544:7;:20::i;:::-;19536:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;19598:26;19627:13;:26;19641:11;19627:26;;;;;;;;;;;19598:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19660:12;19675:38;19680:12;19694:1;19697:8;:15;;;;19675:4;:38::i;:::-;19660:53;;19718:19;19740:26;19745:12;19759:1;19762:3;19740:4;:26::i;:::-;19718:48;;19773:20;19796:43;19820:12;19834:1;19837;19796:23;:43::i;:::-;19773:66;;19844:29;19876:43;19900:12;19914:1;19917;19876:23;:43::i;:::-;19844:75;;19924:26;19953:43;19977:12;19991:1;19994;19953:23;:43::i;:::-;19924:72;;20003:16;20022:102;20034:11;20047:12;20061:7;20070:6;20078:15;20095:12;20109:14;20022:11;:102::i;:::-;20003:121;;20131:18;20241:22;:11;:20;:22::i;:::-;20321:18;20335:3;20321:13;:18::i;:::-;20412:8;20421:7;20412:17;;;;;;;;:::i;:::-;;;;;;;;;20483:6;20550:15;20624:12;20702:25;:14;:23;:25::i;:::-;20776:12;20159:644;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20131:673;;20818:4;20811:11;;;;;;;;;;19448:1379;;;:::o;26069:82::-;8990:12;:10;:12::i;:::-;8979:23;;:7;:5;:7::i;:::-;:23;;;8971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26135:11:::1;;;;;;;;;;;26134:12;26120:11;;:26;;;;;;;;;;;;;;;;;;26069:82::o:0;19224:116::-;19280:13;19309;:26;19323:11;19309:26;;;;;;;;;;;19302:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19224:116;;;:::o;16896:31::-;;;;;;;;;;;;;:::o;4730:155::-;4827:4;4845:18;:25;4864:5;4845:25;;;;;;;;;;;;;;;:35;4871:8;4845:35;;;;;;;;;;;;;;;;;;;;;;;;;4838:42;;4730:155;;;;:::o;9189:223::-;8990:12;:10;:12::i;:::-;8979:23;;:7;:5;:7::i;:::-;:23;;;8971:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;9292:1:::1;9272:22;;:8;:22;;;;9264:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9376:8;9347:38;;9368:6;;;;;;;;;;;9347:38;;;;;;;;;;;;9399:8;9390:6;;:17;;;;;;;;;;;;;;;;;;9189:223:::0;:::o;1967:148::-;2052:4;2085:25;2070:40;;;:11;:40;;;;2063:47;;1967:148;;;:::o;5804:118::-;5869:4;5915:1;5887:30;;:7;:16;5895:7;5887:16;;;;;;;;;;;;;;;;;;;;;:30;;;;5880:37;;5804:118;;;:::o;1608:89::-;1661:7;1682:10;1675:17;;1608:89;:::o;7661:159::-;7757:2;7730:15;:24;7746:7;7730:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;7807:7;7803:2;7769:46;;7778:23;7793:7;7778:14;:23::i;:::-;7769:46;;;;;;;;;;;;7661:159;;:::o;18745:388::-;18807:13;18829:12;18844:4;:14;;;18859:7;18844:23;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18829:38;;18872:22;18915:1;18905:7;:11;18901:177;;;18992:7;19001:18;:7;:16;:18::i;:::-;18975:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;18965:56;;;;;;18960:62;;18927:97;;18901:177;;;19065:7;19048:24;;18901:177;19091:37;19113:14;19091:21;:37::i;:::-;19084:44;;;;18745:388;;;:::o;6255:101::-;6325:26;6335:2;6339:7;6325:26;;;;;;;;;;;;:9;:26::i;:::-;6255:101;;:::o;5925:327::-;6018:4;6037:16;6045:7;6037;:16::i;:::-;6029:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6107:13;6123:23;6138:7;6123:14;:23::i;:::-;6107:39;;6170:5;6159:16;;:7;:16;;;:51;;;;6203:7;6179:31;;:20;6191:7;6179:11;:20::i;:::-;:31;;;6159:51;:87;;;;6214:32;6231:5;6238:7;6214:16;:32::i;:::-;6159:87;6151:96;;;5925:327;;;;:::o;7225:433::-;7344:4;7317:31;;:23;7332:7;7317:14;:23::i;:::-;:31;;;7309:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;7421:1;7407:16;;:2;:16;;;;7399:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;7469:39;7490:4;7496:2;7500:7;7469:20;:39::i;:::-;7513:29;7530:1;7534:7;7513:8;:29::i;:::-;7566:1;7547:9;:15;7557:4;7547:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;7589:1;7572:9;:13;7582:2;7572:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;7614:2;7595:7;:16;7603:7;7595:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;7645:7;7641:2;7626:27;;7635:4;7626:27;;;;;;;;;;;;7225:433;;;:::o;5544:257::-;5652:28;5662:4;5668:2;5672:7;5652:9;:28::i;:::-;5693:48;5716:4;5722:2;5726:7;5735:5;5693:22;:48::i;:::-;5685:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;5544:257;;;;:::o;25857:162::-;25939:7;26010:4;25991:5;25998:6;25980:25;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25970:36;;;;;;25962:45;;:52;;;;:::i;:::-;25955:59;;25857:162;;;;;:::o;25382:357::-;25489:13;25511:23;25543:7;25511:40;;25558:19;25590:7;25580:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25558:40;;25610:6;25605:102;25622:7;25620:1;:9;25605:102;;;25653:10;25674:1;25664:7;:11;;;;:::i;:::-;25653:23;;;;;;;;:::i;:::-;;;;;;;;;;25641:6;25648:1;25641:9;;;;;;;;:::i;:::-;;;;;:35;;;;;;;;;;;25696:3;;;;;;;25605:102;;;;25727:6;25713:21;;;;25382:357;;;;;:::o;20956:4301::-;21167:12;21188:16;21207:29;21230:5;21207:22;:29::i;:::-;21188:48;;21243:39;;;;;;;;;;;;;;;;;;:3;:19;;:39;;;;:::i;:::-;21287:50;21313:22;:11;:20;:22::i;:::-;21287:3;:19;;:50;;;;:::i;:::-;21342:207;;;;;;;;;;;;;;;;;;:3;:19;;:207;;;;:::i;:::-;21572:1;21560:8;:13;:30;;;;21589:1;21577:8;:13;21560:30;:47;;;;21606:1;21594:8;:13;21560:47;:64;;;;21623:1;21611:8;:13;21560:64;21556:250;;;21635:38;;;;;;;;;;;;;;;;;;:3;:19;;:38;;;;:::i;:::-;21679:50;21705:22;:11;:20;:22::i;:::-;21679:3;:19;;:50;;;;:::i;:::-;21735:65;;;;;;;;;;;;;;;;;;:3;:19;;:65;;;;:::i;:::-;21556:250;21812:55;;;;;;;;;;;;;;;;;;:3;:19;;:55;;;;:::i;:::-;21872:50;21898:22;:11;:20;:22::i;:::-;21872:3;:19;;:50;;;;:::i;:::-;21927:51;;;;;;;;;;;;;;;;;;:3;:19;;:51;;;;:::i;:::-;21983:54;22009:26;:15;:24;:26::i;:::-;21983:3;:19;;:54;;;;:::i;:::-;22042:58;;;;;;;;;;;;;;;;;;:3;:19;;:58;;;;:::i;:::-;22105:43;22131:15;22105:3;:19;;:43;;;;:::i;:::-;22153:58;;;;;;;;;;;;;;;;;;:3;:19;;:58;;;;:::i;:::-;22216:41;22242:13;22216:3;:19;;:41;;;;:::i;:::-;22262:57;;;;;;;;;;;;;;;;;;:3;:19;;:57;;;;:::i;:::-;22324:50;22350:22;:11;:20;:22::i;:::-;22324:3;:19;;:50;;;;:::i;:::-;22379:34;;;;;;;;;;;;;;;;;;:3;:19;;:34;;;;:::i;:::-;22418:54;22444:16;22461:8;22444:26;;;;;;;;:::i;:::-;;;;;;;;;22418:54;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:3;:19;;:54;;;;:::i;:::-;22477:38;;;;;;;;;;;;;;;;;;:3;:19;;:38;;;;:::i;:::-;22520:35;22546:7;22520:3;:19;;:35;;;;:::i;:::-;22560:96;;;;;;;;;;;;;;;;;;:3;:19;;:96;;;;:::i;:::-;22661:50;22687:22;:11;:20;:22::i;:::-;22661:3;:19;;:50;;;;:::i;:::-;22716:28;;;;;;;;;;;;;;;;;;:3;:19;;:28;;;;:::i;:::-;22751:10;22766:5;22774:1;22766:9;;22780:5;22794:7;22813:5;22819:1;22813:7;;22808:2392;22840:9;;22828;;:21;;;;:::i;:::-;22822:1;:28;22808:2392;;;22874:9;;22866:1;:18;;;;:::i;:::-;22862:22;;22902:9;;22894:1;:18;;;;:::i;:::-;22890:22;;22920:46;;;;;;;;;;;;;;;;;;:3;:19;;:46;;;;:::i;:::-;22972:50;22998:22;:11;:20;:22::i;:::-;22972:3;:19;;:50;;;;:::i;:::-;23028:36;;;;;;;;;;;;;;;;;;:3;:19;;:36;;;;:::i;:::-;23080:35;23085:13;23109:1;23105;:5;;;;:::i;:::-;23113:1;23080:4;:35::i;:::-;23072:43;;23134:1;23125:5;:10;23121:1790;;;23148:33;;;;;;;;;;;;;;;;;;:3;:19;;:33;;;;:::i;:::-;23188:53;23214:25;23223:4;;23219:1;:8;;;;:::i;:::-;23214:23;:25::i;:::-;23188:3;:19;;:53;;;;:::i;:::-;23248:24;;;;;;;;;;;;;;;;;;:3;:19;;:24;;;;:::i;:::-;23279:53;23305:25;23314:4;;23310:1;:8;;;;:::i;:::-;23305:23;:25::i;:::-;23279:3;:19;;:53;;;;:::i;:::-;23339:24;;;;;;;;;;;;;;;;;;:3;:19;;:24;;;;:::i;:::-;23121:1790;;;23393:1;23384:5;:10;23380:1531;;;23407:34;;;;;;;;;;;;;;;;;;:3;:19;;:34;;;;:::i;:::-;23485:4;;23481:1;:8;;;;:::i;:::-;23471:4;;23467:1;:8;;;;:::i;:::-;23459:4;;:17;;;;:::i;:::-;23458:32;;;;:::i;:::-;23451:40;;23508:1;23502:3;:7;23498:80;;;23524:24;;;;;;;;;;;;;;;;;;:3;:19;;:24;;;;:::i;:::-;23568:2;23562:3;:8;;;;:::i;:::-;23556:14;;23498:80;23584:48;23610:20;23615:3;23610:18;:20::i;:::-;23584:3;:19;;:48;;;;:::i;:::-;23639:25;;;;;;;;;;;;;;;;;;:3;:19;;:25;;;;:::i;:::-;23708:4;;23704:1;:8;;;;:::i;:::-;23695:4;;23687;;23683:1;:8;;;;:::i;:::-;23682:17;;;;:::i;:::-;23681:32;;;;:::i;:::-;23674:40;;23731:1;23725:3;:7;23721:80;;;23747:24;;;;;;;;;;;;;;;;;;:3;:19;;:24;;;;:::i;:::-;23791:2;23785:3;:8;;;;:::i;:::-;23779:14;;23721:80;23807:48;23833:20;23838:3;23833:18;:20::i;:::-;23807:3;:19;;:48;;;;:::i;:::-;23862:24;;;;;;;;;;;;;;;;;;:3;:19;;:24;;;;:::i;:::-;23380:1531;;;23916:1;23907:5;:10;23903:1008;;;23930:35;;;;;;;;;;;;;;;;;;:3;:19;;:35;;;;:::i;:::-;23995:4;;23987;;23983:1;:8;;;;:::i;:::-;23982:17;;;;:::i;:::-;23975:25;;24017:1;24011:3;:7;24007:80;;;24033:24;;;;;;;;;;;;;;;;;;:3;:19;;:24;;;;:::i;:::-;24077:2;24071:3;:8;;;;:::i;:::-;24065:14;;24007:80;24093:48;24119:20;24124:3;24119:18;:20::i;:::-;24093:3;:19;;:48;;;;:::i;:::-;24148:25;;;;;;;;;;;;;;;;;;:3;:19;;:25;;;;:::i;:::-;24203:4;;24195;;24191:1;:8;;;;:::i;:::-;24190:17;;;;:::i;:::-;24183:25;;24225:1;24219:3;:7;24215:80;;;24241:24;;;;;;;;;;;;;;;;;;:3;:19;;:24;;;;:::i;:::-;24285:2;24279:3;:8;;;;:::i;:::-;24273:14;;24215:80;24301:48;24327:20;24332:3;24327:18;:20::i;:::-;24301:3;:19;;:48;;;;:::i;:::-;24356:24;;;;;;;;;;;;;;;;;;:3;:19;;:24;;;;:::i;:::-;23903:1008;;;24410:1;24401:5;:10;24397:514;;;24424:35;;;;;;;;;;;;;;;;;;:3;:19;;:35;;;;:::i;:::-;24503:4;;24499:1;:8;;;;:::i;:::-;24490:4;;24482;;24478:1;:8;;;;:::i;:::-;24477:17;;;;:::i;:::-;24476:32;;;;:::i;:::-;24469:40;;24526:1;24520:3;:7;24516:80;;;24542:24;;;;;;;;;;;;;;;;;;:3;:19;;:24;;;;:::i;:::-;24586:2;24580:3;:8;;;;:::i;:::-;24574:14;;24516:80;24602:48;24628:20;24633:3;24628:18;:20::i;:::-;24602:3;:19;;:48;;;;:::i;:::-;24657:25;;;;;;;;;;;;;;;;;;:3;:19;;:25;;;;:::i;:::-;24726:4;;24722:1;:8;;;;:::i;:::-;24713:4;;24705;;24701:1;:8;;;;:::i;:::-;24700:17;;;;:::i;:::-;24699:32;;;;:::i;:::-;24692:40;;24749:1;24743:3;:7;24739:80;;;24765:24;;;;;;;;;;;;;;;;;;:3;:19;;:24;;;;:::i;:::-;24809:2;24803:3;:8;;;;:::i;:::-;24797:14;;24739:80;24825:48;24851:20;24856:3;24851:18;:20::i;:::-;24825:3;:19;;:48;;;;:::i;:::-;24880:24;;;;;;;;;;;;;;;;;;:3;:19;;:24;;;;:::i;:::-;24397:514;23903:1008;23380:1531;23121:1790;24916:24;;;;;;;;;;;;;;;;;;:3;:19;;:24;;;;:::i;:::-;24964:1;24952:8;:13;:30;;;;24981:1;24969:8;:13;24952:30;:47;;;;24998:1;24986:8;:13;24952:47;:64;;;;25015:1;25003:8;:13;24952:64;24948:189;;;25070:1;25033:33;25038:13;25060:1;25058;:3;;;;:::i;:::-;25064:1;25033:4;:33::i;:::-;:38;25029:102;;;25086:37;;;;;;;;;;;;;;;;;;:3;:19;;:37;;;;:::i;:::-;25029:102;24948:189;25144:25;;;;;;;;;;;;;;;;;;:3;:19;;:25;;;;:::i;:::-;25189:3;;;;;;;22808:2392;;;;25206:29;;;;;;;;;;;;;;;;;;:3;:19;;:29;;;;:::i;:::-;25249:3;25242:10;;;;;;;20956:4301;;;;;;;;;:::o;9861:404::-;9917:13;9950:1;9941:5;:10;9937:26;;;9953:10;;;;;;;;;;;;;;;;;;;;;9937:26;9968:12;9983:5;9968:20;;9993:14;10012:54;10027:1;10019:4;:9;10012:54;;10036:8;;;;;:::i;:::-;;;;10058:2;10050:10;;;;;:::i;:::-;;;10012:54;;;10070:19;10102:6;10092:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10070:39;;10114:121;10130:1;10121:5;:10;10114:121;;10149:1;10139:11;;;;;:::i;:::-;;;10207:2;10199:5;:10;;;;:::i;:::-;10186:2;:24;;;;:::i;:::-;10173:39;;10156:6;10163;10156:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;10227:2;10218:11;;;;;:::i;:::-;;;10114:121;;;10253:6;10239:21;;;;;9861:404;;;;:::o;10934:1162::-;10992:13;11012:11;11026:4;:11;11012:25;;11053:1;11046:3;:8;11042:23;;;11056:9;;;;;;;;;;;;;;;;;11042:23;11070:18;11108:1;11103;11097:3;:7;;;;:::i;:::-;11096:13;;;;:::i;:::-;11091:1;:19;;;;:::i;:::-;11070:40;;11115:19;11160:2;11147:10;:15;;;;:::i;:::-;11137:26;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11115:48;;11168:18;11189:5;;;;;;;;;;;;;;;;;11168:26;;11241:1;11234:5;11230:13;11277:2;11269:6;11265:15;11307:1;11287:586;11321:3;11318:1;11315:10;11287:586;;;11353:1;11350;11346:9;11341:14;;11399:8;11394:1;11388:4;11384:12;11378:19;11374:34;11465:4;11457:5;11453:2;11449:14;11445:25;11435:8;11431:40;11425:47;11492:3;11489:1;11485:11;11478:18;;11571:4;11562;11554:5;11550:2;11546:14;11542:25;11532:8;11528:40;11522:47;11518:58;11513:3;11509:68;11502:75;;11597:3;11594:1;11590:11;11583:18;;11675:4;11666;11658:5;11655:1;11651:13;11647:24;11637:8;11633:39;11627:46;11623:57;11618:3;11614:67;11607:74;;11701:3;11698:1;11694:11;11687:18;;11771:4;11762;11755:5;11751:16;11741:8;11737:31;11731:38;11727:49;11722:3;11718:59;11711:66;;11799:3;11794;11790:13;11783:20;;11827:3;11816:9;11809:22;11865:1;11854:9;11850:17;11837:30;;11334:539;;11287:586;;;11291:23;11894:1;11889:3;11885:11;11906:1;11901:63;;;;11974:1;11969:61;;;;11878:152;;11901:63;11950:6;11945:3;11941:16;11937:1;11926:9;11922:17;11915:43;11901:63;;11969:61;12018:4;12013:3;12009:14;12005:1;11994:9;11990:17;11983:41;11878:152;;12050:10;12042:6;12035:26;11208:858;;12084:6;12070:21;;;;;;10934:1162;;;;:::o;10268:379::-;10325:13;10345:14;10372:2;10362:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10345:30;;10385:6;10380:242;10401:2;10397:1;:6;10380:242;;;10416:8;10472:1;10467:2;:6;;;;:::i;:::-;10464:1;:10;;;;:::i;:::-;10460:1;:15;;;;:::i;:::-;10453:1;10440:16;;:36;;;;:::i;:::-;10427:51;;10416:62;;10484:9;10514:2;10509:1;10503:8;;:13;;;;:::i;:::-;10496:21;;10484:33;;10523:9;10564:2;10558:9;;10553:2;:14;;;;:::i;:::-;10548:1;10542:8;;:25;;;;:::i;:::-;10535:33;;10523:45;;10583:8;10588:2;10583:4;:8::i;:::-;10574:1;10578;10576;:3;;;;:::i;:::-;10574:6;;;;;;;;:::i;:::-;;;;;:17;;;;;;;;;;;10608:8;10613:2;10608:4;:8::i;:::-;10597:1;10603;10601;10599;:3;;;;:::i;:::-;:5;;;;:::i;:::-;10597:8;;;;;;;;:::i;:::-;;;;;:19;;;;;;;;;;;10410:212;;;10405:3;;;;;:::i;:::-;;;;10380:242;;;;10640:1;10626:16;;;10268:379;;;:::o;6359:235::-;6449:18;6455:2;6459:7;6449:5;:18::i;:::-;6480:54;6511:1;6515:2;6519:7;6528:5;6480:22;:54::i;:::-;6472:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;6359:235;;;:::o;8474:93::-;;;;:::o;7823:648::-;7935:4;7952:15;:2;:13;;;:15::i;:::-;7948:519;;;7995:2;7979:36;;;8016:12;:10;:12::i;:::-;8030:4;8036:7;8045:5;7979:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;7975:458;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8209:1;8192:6;:13;:18;8188:239;;;8220:60;;;;;;;;;;:::i;:::-;;;;;;;;8188:239;8404:6;8398:13;8389:6;8385:2;8381:15;8374:38;7975:458;8100:45;;;8090:55;;;:6;:55;;;;8083:62;;;;;7948:519;8457:4;8450:11;;7823:648;;;;;;;:::o;12129:419::-;12188:19;12252:4;12246:11;12295:4;12285:8;12281:19;12340:4;12329:9;12325:20;12364:11;12358:4;12351:25;12262:120;;12422:4;12412:8;12408:19;12451:6;12440:9;12433:25;12387:77;12494:4;12483:9;12479:20;12469:30;;12519:1;12511:6;12504:17;12223:303;12129:419;;;:::o;12551:449::-;12670:4;12664:11;12709:4;12703;12699:15;12691:23;;12745:6;12739:4;12735:17;12803:4;12794:6;12788:13;12784:24;12776:6;12772:37;12680:264;12825:7;12819:4;12816:17;12680:264;;;12932:4;12926:11;12918:6;12911:27;12859:4;12853;12849:15;12841:23;;12892:4;12884:6;12880:17;12870:27;;12680:264;;;12684:131;;12983:6;12974;12968:13;12964:26;12956:6;12949:42;12644:352;12551:449;;:::o;10650:156::-;10697:8;10727:2;10722:1;10716:8;;:13;;;10712:89;;;10756:4;10751:1;10745:8;;:15;;;;:::i;:::-;10738:23;;10731:30;;;;10712:89;10796:4;10791:1;10785:8;;:15;;;;:::i;:::-;10778:23;;10771:30;;10650:156;;;;:::o;6597:337::-;6685:1;6671:16;;:2;:16;;;;6663:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;6738:16;6746:7;6738;:16::i;:::-;6737:17;6729:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;6792:45;6821:1;6825:2;6829:7;6792:20;:45::i;:::-;6859:1;6842:9;:13;6852:2;6842:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;6884:2;6865:7;:16;6873:7;6865:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;6921:7;6917:2;6896:33;;6913:1;6896:33;;;;;;;;;;;;6597:337;;:::o;13371:204::-;13431:4;13442:12;13541:7;13529:20;13521:28;;13569:1;13562:4;:8;13555:15;;;13371:204;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334: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:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:329::-;5974:6;6023:2;6011:9;6002:7;5998:23;5994:32;5991:119;;;6029:79;;:::i;:::-;5991:119;6149:1;6174:53;6219:7;6210:6;6199:9;6195:22;6174:53;:::i;:::-;6164:63;;6120:117;5915:329;;;;:::o;6250:116::-;6320:21;6335:5;6320:21;:::i;:::-;6313:5;6310:32;6300:60;;6356:1;6353;6346:12;6300:60;6250:116;:::o;6372:133::-;6415:5;6453:6;6440:20;6431:29;;6469:30;6493:5;6469:30;:::i;:::-;6372:133;;;;:::o;6511:468::-;6576:6;6584;6633:2;6621:9;6612:7;6608:23;6604:32;6601:119;;;6639:79;;:::i;:::-;6601:119;6759:1;6784:53;6829:7;6820:6;6809:9;6805:22;6784:53;:::i;:::-;6774:63;;6730:117;6886:2;6912:50;6954:7;6945:6;6934:9;6930:22;6912:50;:::i;:::-;6902:60;;6857:115;6511:468;;;;;:::o;6985:117::-;7094:1;7091;7084:12;7108:117;7217:1;7214;7207:12;7231:180;7279:77;7276:1;7269:88;7376:4;7373:1;7366:15;7400:4;7397:1;7390:15;7417:281;7500:27;7522:4;7500:27;:::i;:::-;7492:6;7488:40;7630:6;7618:10;7615:22;7594:18;7582:10;7579:34;7576:62;7573:88;;;7641:18;;:::i;:::-;7573:88;7681:10;7677:2;7670:22;7460:238;7417:281;;:::o;7704:129::-;7738:6;7765:20;;:::i;:::-;7755:30;;7794:33;7822:4;7814:6;7794:33;:::i;:::-;7704:129;;;:::o;7839:307::-;7900:4;7990:18;7982:6;7979:30;7976:56;;;8012:18;;:::i;:::-;7976:56;8050:29;8072:6;8050:29;:::i;:::-;8042:37;;8134:4;8128;8124:15;8116:23;;7839:307;;;:::o;8152:154::-;8236:6;8231:3;8226;8213:30;8298:1;8289:6;8284:3;8280:16;8273:27;8152:154;;;:::o;8312:410::-;8389:5;8414:65;8430:48;8471:6;8430:48;:::i;:::-;8414:65;:::i;:::-;8405:74;;8502:6;8495:5;8488:21;8540:4;8533:5;8529:16;8578:3;8569:6;8564:3;8560:16;8557:25;8554:112;;;8585:79;;:::i;:::-;8554:112;8675:41;8709:6;8704:3;8699;8675:41;:::i;:::-;8395:327;8312:410;;;;;:::o;8741:338::-;8796:5;8845:3;8838:4;8830:6;8826:17;8822:27;8812:122;;8853:79;;:::i;:::-;8812:122;8970:6;8957:20;8995:78;9069:3;9061:6;9054:4;9046:6;9042:17;8995:78;:::i;:::-;8986:87;;8802:277;8741:338;;;;:::o;9085:943::-;9180:6;9188;9196;9204;9253:3;9241:9;9232:7;9228:23;9224:33;9221:120;;;9260:79;;:::i;:::-;9221:120;9380:1;9405:53;9450:7;9441:6;9430:9;9426:22;9405:53;:::i;:::-;9395:63;;9351:117;9507:2;9533:53;9578:7;9569:6;9558:9;9554:22;9533:53;:::i;:::-;9523:63;;9478:118;9635:2;9661:53;9706:7;9697:6;9686:9;9682:22;9661:53;:::i;:::-;9651:63;;9606:118;9791:2;9780:9;9776:18;9763:32;9822:18;9814:6;9811:30;9808:117;;;9844:79;;:::i;:::-;9808:117;9949:62;10003:7;9994:6;9983:9;9979:22;9949:62;:::i;:::-;9939:72;;9734:287;9085:943;;;;;;;:::o;10034:474::-;10102:6;10110;10159:2;10147:9;10138:7;10134:23;10130:32;10127:119;;;10165:79;;:::i;:::-;10127:119;10285:1;10310:53;10355:7;10346:6;10335:9;10331:22;10310:53;:::i;:::-;10300:63;;10256:117;10412:2;10438:53;10483:7;10474:6;10463:9;10459:22;10438:53;:::i;:::-;10428:63;;10383:118;10034:474;;;;;:::o;10514:180::-;10562:77;10559:1;10552:88;10659:4;10656:1;10649:15;10683:4;10680:1;10673:15;10700:320;10744:6;10781:1;10775:4;10771:12;10761:22;;10828:1;10822:4;10818:12;10849:18;10839:81;;10905:4;10897:6;10893:17;10883:27;;10839:81;10967:2;10959:6;10956:14;10936:18;10933:38;10930:84;;;10986:18;;:::i;:::-;10930:84;10751:269;10700:320;;;:::o;11026:231::-;11166:34;11162:1;11154:6;11150:14;11143:58;11235:14;11230:2;11222:6;11218:15;11211:39;11026:231;:::o;11263:366::-;11405:3;11426:67;11490:2;11485:3;11426:67;:::i;:::-;11419:74;;11502:93;11591:3;11502:93;:::i;:::-;11620:2;11615:3;11611:12;11604:19;;11263:366;;;:::o;11635:419::-;11801:4;11839:2;11828:9;11824:18;11816:26;;11888:9;11882:4;11878:20;11874:1;11863:9;11859:17;11852:47;11916:131;12042:4;11916:131;:::i;:::-;11908:139;;11635:419;;;:::o;12060:220::-;12200:34;12196:1;12188:6;12184:14;12177:58;12269:3;12264:2;12256:6;12252:15;12245:28;12060:220;:::o;12286:366::-;12428:3;12449:67;12513:2;12508:3;12449:67;:::i;:::-;12442:74;;12525:93;12614:3;12525:93;:::i;:::-;12643:2;12638:3;12634:12;12627:19;;12286:366;;;:::o;12658:419::-;12824:4;12862:2;12851:9;12847:18;12839:26;;12911:9;12905:4;12901:20;12897:1;12886:9;12882:17;12875:47;12939:131;13065:4;12939:131;:::i;:::-;12931:139;;12658:419;;;:::o;13083:243::-;13223:34;13219:1;13211:6;13207:14;13200:58;13292:26;13287:2;13279:6;13275:15;13268:51;13083:243;:::o;13332:366::-;13474:3;13495:67;13559:2;13554:3;13495:67;:::i;:::-;13488:74;;13571:93;13660:3;13571:93;:::i;:::-;13689:2;13684:3;13680:12;13673:19;;13332:366;;;:::o;13704:419::-;13870:4;13908:2;13897:9;13893:18;13885:26;;13957:9;13951:4;13947:20;13943:1;13932:9;13928:17;13921:47;13985:131;14111:4;13985:131;:::i;:::-;13977:139;;13704:419;;;:::o;14129:181::-;14269:33;14265:1;14257:6;14253:14;14246:57;14129:181;:::o;14316:366::-;14458:3;14479:67;14543:2;14538:3;14479:67;:::i;:::-;14472:74;;14555:93;14644:3;14555:93;:::i;:::-;14673:2;14668:3;14664:12;14657:19;;14316:366;;;:::o;14688:419::-;14854:4;14892:2;14881:9;14877:18;14869:26;;14941:9;14935:4;14931:20;14927:1;14916:9;14912:17;14905:47;14969:131;15095:4;14969:131;:::i;:::-;14961:139;;14688:419;;;:::o;15113:235::-;15253:34;15249:1;15241:6;15237:14;15230:58;15322:18;15317:2;15309:6;15305:15;15298:43;15113:235;:::o;15354:366::-;15496:3;15517:67;15581:2;15576:3;15517:67;:::i;:::-;15510:74;;15593:93;15682:3;15593:93;:::i;:::-;15711:2;15706:3;15702:12;15695:19;;15354:366;;;:::o;15726:419::-;15892:4;15930:2;15919:9;15915:18;15907:26;;15979:9;15973:4;15969:20;15965:1;15954:9;15950:17;15943:47;16007:131;16133:4;16007:131;:::i;:::-;15999:139;;15726:419;;;:::o;16151:232::-;16291:34;16287:1;16279:6;16275:14;16268:58;16360:15;16355:2;16347:6;16343:15;16336:40;16151:232;:::o;16389:366::-;16531:3;16552:67;16616:2;16611:3;16552:67;:::i;:::-;16545:74;;16628:93;16717:3;16628:93;:::i;:::-;16746:2;16741:3;16737:12;16730:19;;16389:366;;;:::o;16761:419::-;16927:4;16965:2;16954:9;16950:18;16942:26;;17014:9;17008:4;17004:20;17000:1;16989:9;16985:17;16978:47;17042:131;17168:4;17042:131;:::i;:::-;17034:139;;16761:419;;;:::o;17186:230::-;17326:34;17322:1;17314:6;17310:14;17303:58;17395:13;17390:2;17382:6;17378:15;17371:38;17186:230;:::o;17422:366::-;17564:3;17585:67;17649:2;17644:3;17585:67;:::i;:::-;17578:74;;17661:93;17750:3;17661:93;:::i;:::-;17779:2;17774:3;17770:12;17763:19;;17422:366;;;:::o;17794:419::-;17960:4;17998:2;17987:9;17983:18;17975:26;;18047:9;18041:4;18037:20;18033:1;18022:9;18018:17;18011:47;18075:131;18201:4;18075:131;:::i;:::-;18067:139;;17794:419;;;:::o;18219:180::-;18267:77;18264:1;18257:88;18364:4;18361:1;18354:15;18388:4;18385:1;18378:15;18405:305;18445:3;18464:20;18482:1;18464:20;:::i;:::-;18459:25;;18498:20;18516:1;18498:20;:::i;:::-;18493:25;;18652:1;18584:66;18580:74;18577:1;18574:81;18571:107;;;18658:18;;:::i;:::-;18571:107;18702:1;18699;18695:9;18688:16;;18405:305;;;;:::o;18716:236::-;18856:34;18852:1;18844:6;18840:14;18833:58;18925:19;18920:2;18912:6;18908:15;18901:44;18716:236;:::o;18958:366::-;19100:3;19121:67;19185:2;19180:3;19121:67;:::i;:::-;19114:74;;19197:93;19286:3;19197:93;:::i;:::-;19315:2;19310:3;19306:12;19299:19;;18958:366;;;:::o;19330:419::-;19496:4;19534:2;19523:9;19519:18;19511:26;;19583:9;19577:4;19573:20;19569:1;19558:9;19554:17;19547:47;19611:131;19737:4;19611:131;:::i;:::-;19603:139;;19330:419;;;:::o;19755:182::-;19895:34;19891:1;19883:6;19879:14;19872:58;19755:182;:::o;19943:366::-;20085:3;20106:67;20170:2;20165:3;20106:67;:::i;:::-;20099:74;;20182:93;20271:3;20182:93;:::i;:::-;20300:2;20295:3;20291:12;20284:19;;19943:366;;;:::o;20315:419::-;20481:4;20519:2;20508:9;20504:18;20496:26;;20568:9;20562:4;20558:20;20554:1;20543:9;20539:17;20532:47;20596:131;20722:4;20596:131;:::i;:::-;20588:139;;20315:419;;;:::o;20740:147::-;20841:11;20878:3;20863:18;;20740:147;;;;:::o;20893:114::-;;:::o;21013:398::-;21172:3;21193:83;21274:1;21269:3;21193:83;:::i;:::-;21186:90;;21285:93;21374:3;21285:93;:::i;:::-;21403:1;21398:3;21394:11;21387:18;;21013:398;;;:::o;21417:379::-;21601:3;21623:147;21766:3;21623:147;:::i;:::-;21616:154;;21787:3;21780:10;;21417:379;;;:::o;21802:228::-;21942:34;21938:1;21930:6;21926:14;21919:58;22011:11;22006:2;21998:6;21994:15;21987:36;21802:228;:::o;22036:366::-;22178:3;22199:67;22263:2;22258:3;22199:67;:::i;:::-;22192:74;;22275:93;22364:3;22275:93;:::i;:::-;22393:2;22388:3;22384:12;22377:19;;22036:366;;;:::o;22408:419::-;22574:4;22612:2;22601:9;22597:18;22589:26;;22661:9;22655:4;22651:20;22647:1;22636:9;22632:17;22625:47;22689:131;22815:4;22689:131;:::i;:::-;22681:139;;22408:419;;;:::o;22833:229::-;22973:34;22969:1;22961:6;22957:14;22950:58;23042:12;23037:2;23029:6;23025:15;23018:37;22833:229;:::o;23068:366::-;23210:3;23231:67;23295:2;23290:3;23231:67;:::i;:::-;23224:74;;23307:93;23396:3;23307:93;:::i;:::-;23425:2;23420:3;23416:12;23409:19;;23068:366;;;:::o;23440:419::-;23606:4;23644:2;23633:9;23629:18;23621:26;;23693:9;23687:4;23683:20;23679:1;23668:9;23664:17;23657:47;23721:131;23847:4;23721:131;:::i;:::-;23713:139;;23440:419;;;:::o;23865:175::-;24005:27;24001:1;23993:6;23989:14;23982:51;23865:175;:::o;24046:366::-;24188:3;24209:67;24273:2;24268:3;24209:67;:::i;:::-;24202:74;;24285:93;24374:3;24285:93;:::i;:::-;24403:2;24398:3;24394:12;24387:19;;24046:366;;;:::o;24418:419::-;24584:4;24622:2;24611:9;24607:18;24599:26;;24671:9;24665:4;24661:20;24657:1;24646:9;24642:17;24635:47;24699:131;24825:4;24699:131;:::i;:::-;24691:139;;24418:419;;;:::o;24843:172::-;24983:24;24979:1;24971:6;24967:14;24960:48;24843:172;:::o;25021:366::-;25163:3;25184:67;25248:2;25243:3;25184:67;:::i;:::-;25177:74;;25260:93;25349:3;25260:93;:::i;:::-;25378:2;25373:3;25369:12;25362:19;;25021:366;;;:::o;25393:419::-;25559:4;25597:2;25586:9;25582:18;25574:26;;25646:9;25640:4;25636:20;25632:1;25621:9;25617:17;25610:47;25674:131;25800:4;25674:131;:::i;:::-;25666:139;;25393:419;;;:::o;25818:180::-;25866:77;25863:1;25856:88;25963:4;25960:1;25953:15;25987:4;25984:1;25977:15;26004:148;26106:11;26143:3;26128:18;;26004:148;;;;:::o;26158:265::-;26298:66;26294:1;26286:6;26282:14;26275:90;26399:16;26394:2;26386:6;26382:15;26375:41;26158:265;:::o;26429:402::-;26589:3;26610:85;26692:2;26687:3;26610:85;:::i;:::-;26603:92;;26704:93;26793:3;26704:93;:::i;:::-;26822:2;26817:3;26813:12;26806:19;;26429:402;;;:::o;26837:98::-;26888:6;26922:5;26916:12;26906:22;;26837:98;;;:::o;26941:373::-;27045:3;27073:38;27105:5;27073:38;:::i;:::-;27127:88;27208:6;27203:3;27127:88;:::i;:::-;27120:95;;27224:52;27269:6;27264:3;27257:4;27250:5;27246:16;27224:52;:::i;:::-;27301:6;27296:3;27292:16;27285:23;;27049:265;26941:373;;;;:::o;27320:256::-;27460:66;27456:1;27448:6;27444:14;27437:90;27561:7;27556:2;27548:6;27544:15;27537:32;27320:256;:::o;27582:402::-;27742:3;27763:85;27845:2;27840:3;27763:85;:::i;:::-;27756:92;;27857:93;27946:3;27857:93;:::i;:::-;27975:2;27970:3;27966:12;27959:19;;27582:402;;;:::o;27990:315::-;28130:66;28126:1;28118:6;28114:14;28107:90;28231:66;28226:2;28218:6;28214:15;28207:91;27990:315;:::o;28311:402::-;28471:3;28492:85;28574:2;28569:3;28492:85;:::i;:::-;28485:92;;28586:93;28675:3;28586:93;:::i;:::-;28704:2;28699:3;28695:12;28688:19;;28311:402;;;:::o;28719:144::-;28771:4;28794:3;28786:11;;28817:3;28814:1;28807:14;28851:4;28848:1;28838:18;28830:26;;28719:144;;;:::o;28891:849::-;28996:3;29033:5;29027:12;29062:36;29088:9;29062:36;:::i;:::-;29114:88;29195:6;29190:3;29114:88;:::i;:::-;29107:95;;29233:1;29222:9;29218:17;29249:1;29244:137;;;;29395:1;29390:344;;;;29211:523;;29244:137;29328:4;29324:9;29313;29309:25;29304:3;29297:38;29364:6;29359:3;29355:16;29348:23;;29244:137;;29390:344;29457:41;29492:5;29457:41;:::i;:::-;29520:1;29534:154;29548:6;29545:1;29542:13;29534:154;;;29622:7;29616:14;29612:1;29607:3;29603:11;29596:35;29672:1;29663:7;29659:15;29648:26;;29570:4;29567:1;29563:12;29558:17;;29534:154;;;29717:6;29712:3;29708:16;29701:23;;29397:337;;29211:523;;29000:740;;28891:849;;;;:::o;29746:315::-;29886:66;29882:1;29874:6;29870:14;29863:90;29987:66;29982:2;29974:6;29970:15;29963:91;29746:315;:::o;30067:402::-;30227:3;30248:85;30330:2;30325:3;30248:85;:::i;:::-;30241:92;;30342:93;30431:3;30342:93;:::i;:::-;30460:2;30455:3;30451:12;30444:19;;30067:402;;;:::o;30475:377::-;30581:3;30609:39;30642:5;30609:39;:::i;:::-;30664:89;30746:6;30741:3;30664:89;:::i;:::-;30657:96;;30762:52;30807:6;30802:3;30795:4;30788:5;30784:16;30762:52;:::i;:::-;30839:6;30834:3;30830:16;30823:23;;30585:267;30475:377;;;;:::o;30858:315::-;30998:66;30994:1;30986:6;30982:14;30975:90;31099:66;31094:2;31086:6;31082:15;31075:91;30858:315;:::o;31179:402::-;31339:3;31360:85;31442:2;31437:3;31360:85;:::i;:::-;31353:92;;31454:93;31543:3;31454:93;:::i;:::-;31572:2;31567:3;31563:12;31556:19;;31179:402;;;:::o;31587:315::-;31727:66;31723:1;31715:6;31711:14;31704:90;31828:66;31823:2;31815:6;31811:15;31804:91;31587:315;:::o;31908:402::-;32068:3;32089:85;32171:2;32166:3;32089:85;:::i;:::-;32082:92;;32183:93;32272:3;32183:93;:::i;:::-;32301:2;32296:3;32292:12;32285:19;;31908:402;;;:::o;32316:315::-;32456:66;32452:1;32444:6;32440:14;32433:90;32557:66;32552:2;32544:6;32540:15;32533:91;32316:315;:::o;32637:402::-;32797:3;32818:85;32900:2;32895:3;32818:85;:::i;:::-;32811:92;;32912:93;33001:3;32912:93;:::i;:::-;33030:2;33025:3;33021:12;33014:19;;32637:402;;;:::o;33045:315::-;33185:66;33181:1;33173:6;33169:14;33162:90;33286:66;33281:2;33273:6;33269:15;33262:91;33045:315;:::o;33366:402::-;33526:3;33547:85;33629:2;33624:3;33547:85;:::i;:::-;33540:92;;33641:93;33730:3;33641:93;:::i;:::-;33759:2;33754:3;33750:12;33743:19;;33366:402;;;:::o;33774:214::-;33914:66;33910:1;33902:6;33898:14;33891:90;33774:214;:::o;33994:400::-;34154:3;34175:84;34257:1;34252:3;34175:84;:::i;:::-;34168:91;;34268:93;34357:3;34268:93;:::i;:::-;34386:1;34381:3;34377:11;34370:18;;33994:400;;;:::o;34400:3775::-;35770:3;35792:148;35936:3;35792:148;:::i;:::-;35785:155;;35957:93;36046:3;36037:6;35957:93;:::i;:::-;35950:100;;36067:148;36211:3;36067:148;:::i;:::-;36060:155;;36232:93;36321:3;36312:6;36232:93;:::i;:::-;36225:100;;36342:148;36486:3;36342:148;:::i;:::-;36335:155;;36507:94;36597:3;36588:6;36507:94;:::i;:::-;36500:101;;36618:148;36762:3;36618:148;:::i;:::-;36611:155;;36783:95;36874:3;36865:6;36783:95;:::i;:::-;36776:102;;36895:148;37039:3;36895:148;:::i;:::-;36888:155;;37060:95;37151:3;37142:6;37060:95;:::i;:::-;37053:102;;37172:148;37316:3;37172:148;:::i;:::-;37165:155;;37337:95;37428:3;37419:6;37337:95;:::i;:::-;37330:102;;37449:148;37593:3;37449:148;:::i;:::-;37442:155;;37614:93;37703:3;37694:6;37614:93;:::i;:::-;37607:100;;37724:148;37868:3;37724:148;:::i;:::-;37717:155;;37889:95;37980:3;37971:6;37889:95;:::i;:::-;37882:102;;38001:148;38145:3;38001:148;:::i;:::-;37994:155;;38166:3;38159:10;;34400:3775;;;;;;;;;;;:::o;38181:225::-;38321:34;38317:1;38309:6;38305:14;38298:58;38390:8;38385:2;38377:6;38373:15;38366:33;38181:225;:::o;38412:366::-;38554:3;38575:67;38639:2;38634:3;38575:67;:::i;:::-;38568:74;;38651:93;38740:3;38651:93;:::i;:::-;38769:2;38764:3;38760:12;38753:19;;38412:366;;;:::o;38784:419::-;38950:4;38988:2;38977:9;38973:18;38965:26;;39037:9;39031:4;39027:20;39023:1;39012:9;39008:17;39001:47;39065:131;39191:4;39065:131;:::i;:::-;39057:139;;38784:419;;;:::o;39209:143::-;39266:5;39297:6;39291:13;39282:22;;39313:33;39340:5;39313:33;:::i;:::-;39209:143;;;;:::o;39358:351::-;39428:6;39477:2;39465:9;39456:7;39452:23;39448:32;39445:119;;;39483:79;;:::i;:::-;39445:119;39603:1;39628:64;39684:7;39675:6;39664:9;39660:22;39628:64;:::i;:::-;39618:74;;39574:128;39358:351;;;;:::o;39715:94::-;39748:8;39796:5;39792:2;39788:14;39767:35;;39715:94;;;:::o;39815:::-;39854:7;39883:20;39897:5;39883:20;:::i;:::-;39872:31;;39815:94;;;:::o;39915:100::-;39954:7;39983:26;40003:5;39983:26;:::i;:::-;39972:37;;39915:100;;;:::o;40021:157::-;40126:45;40146:24;40164:5;40146:24;:::i;:::-;40126:45;:::i;:::-;40121:3;40114:58;40021:157;;:::o;40184:416::-;40344:3;40359:75;40430:3;40421:6;40359:75;:::i;:::-;40459:2;40454:3;40450:12;40443:19;;40479:95;40570:3;40561:6;40479:95;:::i;:::-;40472:102;;40591:3;40584:10;;40184:416;;;;;:::o;40606:231::-;40746:34;40742:1;40734:6;40730:14;40723:58;40815:14;40810:2;40802:6;40798:15;40791:39;40606:231;:::o;40843:366::-;40985:3;41006:67;41070:2;41065:3;41006:67;:::i;:::-;40999:74;;41082:93;41171:3;41082:93;:::i;:::-;41200:2;41195:3;41191:12;41184:19;;40843:366;;;:::o;41215:419::-;41381:4;41419:2;41408:9;41404:18;41396:26;;41468:9;41462:4;41458:20;41454:1;41443:9;41439:17;41432:47;41496:131;41622:4;41496:131;:::i;:::-;41488:139;;41215:419;;;:::o;41640:228::-;41780:34;41776:1;41768:6;41764:14;41757:58;41849:11;41844:2;41836:6;41832:15;41825:36;41640:228;:::o;41874:366::-;42016:3;42037:67;42101:2;42096:3;42037:67;:::i;:::-;42030:74;;42113:93;42202:3;42113:93;:::i;:::-;42231:2;42226:3;42222:12;42215:19;;41874:366;;;:::o;42246:419::-;42412:4;42450:2;42439:9;42435:18;42427:26;;42499:9;42493:4;42489:20;42485:1;42474:9;42470:17;42463:47;42527:131;42653:4;42527:131;:::i;:::-;42519:139;;42246:419;;;:::o;42671:223::-;42811:34;42807:1;42799:6;42795:14;42788:58;42880:6;42875:2;42867:6;42863:15;42856:31;42671:223;:::o;42900:366::-;43042:3;43063:67;43127:2;43122:3;43063:67;:::i;:::-;43056:74;;43139:93;43228:3;43139:93;:::i;:::-;43257:2;43252:3;43248:12;43241:19;;42900:366;;;:::o;43272:419::-;43438:4;43476:2;43465:9;43461:18;43453:26;;43525:9;43519:4;43515:20;43511:1;43500:9;43496:17;43489:47;43553:131;43679:4;43553:131;:::i;:::-;43545:139;;43272:419;;;:::o;43697:191::-;43737:4;43757:20;43775:1;43757:20;:::i;:::-;43752:25;;43791:20;43809:1;43791:20;:::i;:::-;43786:25;;43830:1;43827;43824:8;43821:34;;;43835:18;;:::i;:::-;43821:34;43880:1;43877;43873:9;43865:17;;43697:191;;;;:::o;43894:237::-;44034:34;44030:1;44022:6;44018:14;44011:58;44103:20;44098:2;44090:6;44086:15;44079:45;43894:237;:::o;44137:366::-;44279:3;44300:67;44364:2;44359:3;44300:67;:::i;:::-;44293:74;;44376:93;44465:3;44376:93;:::i;:::-;44494:2;44489:3;44485:12;44478:19;;44137:366;;;:::o;44509:419::-;44675:4;44713:2;44702:9;44698:18;44690:26;;44762:9;44756:4;44752:20;44748:1;44737:9;44733:17;44726:47;44790:131;44916:4;44790:131;:::i;:::-;44782:139;;44509:419;;;:::o;44934:423::-;45075:4;45113:2;45102:9;45098:18;45090:26;;45162:9;45156:4;45152:20;45148:1;45137:9;45133:17;45126:47;45190:78;45263:4;45254:6;45190:78;:::i;:::-;45182:86;;45278:72;45346:2;45335:9;45331:18;45322:6;45278:72;:::i;:::-;44934:423;;;;;:::o;45363:180::-;45411:77;45408:1;45401:88;45508:4;45505:1;45498:15;45532:4;45529:1;45522:15;45549:176;45581:1;45598:20;45616:1;45598:20;:::i;:::-;45593:25;;45632:20;45650:1;45632:20;:::i;:::-;45627:25;;45671:1;45661:35;;45676:18;;:::i;:::-;45661:35;45717:1;45714;45710:9;45705:14;;45549:176;;;;:::o;45731:348::-;45771:7;45794:20;45812:1;45794:20;:::i;:::-;45789:25;;45828:20;45846:1;45828:20;:::i;:::-;45823:25;;46016:1;45948:66;45944:74;45941:1;45938:81;45933:1;45926:9;45919:17;45915:105;45912:131;;;46023:18;;:::i;:::-;45912:131;46071:1;46068;46064:9;46053:20;;45731:348;;;;:::o;46085:76::-;46121:7;46150:5;46139:16;;46085:76;;;:::o;46167:174::-;46198:1;46215:19;46232:1;46215:19;:::i;:::-;46210:24;;46248:19;46265:1;46248:19;:::i;:::-;46243:24;;46286:1;46276:35;;46291:18;;:::i;:::-;46276:35;46333:1;46330;46325:10;46320:15;;46167:174;;;;:::o;46347:385::-;46386:1;46403:19;46420:1;46403:19;:::i;:::-;46398:24;;46436:19;46453:1;46436:19;:::i;:::-;46431:24;;46474:1;46464:35;;46479:18;;:::i;:::-;46464:35;46665:1;46662;46658:9;46655:1;46652:16;46571:66;46568:1;46565:73;46548:130;46545:156;;;46681:18;;:::i;:::-;46545:156;46724:1;46721;46716:10;46711:15;;46347:385;;;;:::o;46738:525::-;46777:3;46796:19;46813:1;46796:19;:::i;:::-;46791:24;;46829:19;46846:1;46829:19;:::i;:::-;46824:24;;47017:1;46949:66;46945:74;46942:1;46938:82;46933:1;46930;46926:9;46919:17;46915:106;46912:132;;;47024:18;;:::i;:::-;46912:132;47204:1;47136:66;47132:74;47129:1;47125:82;47121:1;47118;47114:9;47110:98;47107:124;;;47211:18;;:::i;:::-;47107:124;47255:1;47252;47248:9;47241:16;;46738:525;;;;:::o;47269:991::-;47308:7;47331:19;47348:1;47331:19;:::i;:::-;47326:24;;47364:19;47381:1;47364:19;:::i;:::-;47359:24;;47565:1;47497:66;47493:74;47490:1;47487:81;47482:1;47479;47475:9;47471:1;47468;47464:9;47460:25;47456:113;47453:139;;;47572:18;;:::i;:::-;47453:139;47776:1;47708:66;47703:75;47700:1;47696:83;47691:1;47688;47684:9;47680:1;47677;47673:9;47669:25;47665:115;47662:141;;;47783:18;;:::i;:::-;47662:141;47987:1;47919:66;47914:75;47911:1;47907:83;47902:1;47899;47895:9;47891:1;47888;47884:9;47880:25;47876:115;47873:141;;;47994:18;;:::i;:::-;47873:141;48197:1;48129:66;48124:75;48121:1;48117:83;48112:1;48109;48105:9;48101:1;48098;48094:9;48090:25;48086:115;48083:141;;;48204:18;;:::i;:::-;48083:141;48252:1;48249;48245:9;48234:20;;47269:991;;;;:::o;48266:527::-;48305:4;48325:19;48342:1;48325:19;:::i;:::-;48320:24;;48358:19;48375:1;48358:19;:::i;:::-;48353:24;;48547:1;48479:66;48475:74;48472:1;48468:82;48463:1;48460;48456:9;48449:17;48445:106;48442:132;;;48554:18;;:::i;:::-;48442:132;48733:1;48665:66;48661:74;48658:1;48654:82;48650:1;48647;48643:9;48639:98;48636:124;;;48740:18;;:::i;:::-;48636:124;48785:1;48782;48778:9;48770:17;;48266:527;;;;:::o;48799:233::-;48838:3;48861:24;48879:5;48861:24;:::i;:::-;48852:33;;48907:66;48900:5;48897:77;48894:103;;;48977:18;;:::i;:::-;48894:103;49024:1;49017:5;49013:13;49006:20;;48799:233;;;:::o;49038:185::-;49078:1;49095:20;49113:1;49095:20;:::i;:::-;49090:25;;49129:20;49147:1;49129:20;:::i;:::-;49124:25;;49168:1;49158:35;;49173:18;;:::i;:::-;49158:35;49215:1;49212;49208:9;49203:14;;49038:185;;;;:::o;49229:102::-;49271:8;49318:5;49315:1;49311:13;49290:34;;49229:102;;;:::o;49337:848::-;49398:5;49405:4;49429:6;49420:15;;49453:5;49444:14;;49467:712;49488:1;49478:8;49475:15;49467:712;;;49583:4;49578:3;49574:14;49568:4;49565:24;49562:50;;;49592:18;;:::i;:::-;49562:50;49642:1;49632:8;49628:16;49625:451;;;50057:4;50050:5;50046:16;50037:25;;49625:451;50107:4;50101;50097:15;50089:23;;50137:32;50160:8;50137:32;:::i;:::-;50125:44;;49467:712;;;49337:848;;;;;;;:::o;50191:1073::-;50245:5;50436:8;50426:40;;50457:1;50448:10;;50459:5;;50426:40;50485:4;50475:36;;50502:1;50493:10;;50504:5;;50475:36;50571:4;50619:1;50614:27;;;;50655:1;50650:191;;;;50564:277;;50614:27;50632:1;50623:10;;50634:5;;;50650:191;50695:3;50685:8;50682:17;50679:43;;;50702:18;;:::i;:::-;50679:43;50751:8;50748:1;50744:16;50735:25;;50786:3;50779:5;50776:14;50773:40;;;50793:18;;:::i;:::-;50773:40;50826:5;;;50564:277;;50950:2;50940:8;50937:16;50931:3;50925:4;50922:13;50918:36;50900:2;50890:8;50887:16;50882:2;50876:4;50873:12;50869:35;50853:111;50850:246;;;51006:8;51000:4;50996:19;50987:28;;51041:3;51034:5;51031:14;51028:40;;;51048:18;;:::i;:::-;51028:40;51081:5;;50850:246;51121:42;51159:3;51149:8;51143:4;51140:1;51121:42;:::i;:::-;51106:57;;;;51195:4;51190:3;51186:14;51179:5;51176:25;51173:51;;;51204:18;;:::i;:::-;51173:51;51253:4;51246:5;51242:16;51233:25;;50191:1073;;;;;;:::o;51270:285::-;51330:5;51354:23;51372:4;51354:23;:::i;:::-;51346:31;;51398:27;51416:8;51398:27;:::i;:::-;51386:39;;51444:104;51481:66;51471:8;51465:4;51444:104;:::i;:::-;51435:113;;51270:285;;;;:::o;51561:86::-;51596:7;51636:4;51629:5;51625:16;51614:27;;51561:86;;;:::o;51653:179::-;51691:1;51708:18;51724:1;51708:18;:::i;:::-;51703:23;;51740:18;51756:1;51740:18;:::i;:::-;51735:23;;51777:1;51767:35;;51782:18;;:::i;:::-;51767:35;51824:1;51821;51817:9;51812:14;;51653:179;;;;:::o;51838:280::-;51876:7;51899:18;51915:1;51899:18;:::i;:::-;51894:23;;51931:18;51947:1;51931:18;:::i;:::-;51926:23;;52055:1;52049:4;52045:12;52042:1;52039:19;52034:1;52027:9;52020:17;52016:43;52013:69;;;52062:18;;:::i;:::-;52013:69;52110:1;52107;52103:9;52092:20;;51838:280;;;;:::o;52124:185::-;52162:4;52182:18;52198:1;52182:18;:::i;:::-;52177:23;;52214:18;52230:1;52214:18;:::i;:::-;52209:23;;52251:1;52248;52245:8;52242:34;;;52256:18;;:::i;:::-;52242:34;52301:1;52298;52294:9;52286:17;;52124:185;;;;:::o;52315:168::-;52398:11;52432:6;52427:3;52420:19;52472:4;52467:3;52463:14;52448:29;;52315:168;;;;:::o;52489:360::-;52575:3;52603:38;52635:5;52603:38;:::i;:::-;52657:70;52720:6;52715:3;52657:70;:::i;:::-;52650:77;;52736:52;52781:6;52776:3;52769:4;52762:5;52758:16;52736:52;:::i;:::-;52813:29;52835:6;52813:29;:::i;:::-;52808:3;52804:39;52797:46;;52579:270;52489:360;;;;:::o;52855:640::-;53050:4;53088:3;53077:9;53073:19;53065:27;;53102:71;53170:1;53159:9;53155:17;53146:6;53102:71;:::i;:::-;53183:72;53251:2;53240:9;53236:18;53227:6;53183:72;:::i;:::-;53265;53333:2;53322:9;53318:18;53309:6;53265:72;:::i;:::-;53384:9;53378:4;53374:20;53369:2;53358:9;53354:18;53347:48;53412:76;53483:4;53474:6;53412:76;:::i;:::-;53404:84;;52855:640;;;;;;;:::o;53501:141::-;53557:5;53588:6;53582:13;53573:22;;53604:32;53630:5;53604:32;:::i;:::-;53501:141;;;;:::o;53648:349::-;53717:6;53766:2;53754:9;53745:7;53741:23;53737:32;53734:119;;;53772:79;;:::i;:::-;53734:119;53892:1;53917:63;53972:7;53963:6;53952:9;53948:22;53917:63;:::i;:::-;53907:73;;53863:127;53648:349;;;;:::o;54003:237::-;54041:3;54060:18;54076:1;54060:18;:::i;:::-;54055:23;;54092:18;54108:1;54092:18;:::i;:::-;54087:23;;54182:1;54176:4;54172:12;54169:1;54166:19;54163:45;;;54188:18;;:::i;:::-;54163:45;54232:1;54229;54225:9;54218:16;;54003:237;;;;:::o;54246:182::-;54386:34;54382:1;54374:6;54370:14;54363:58;54246:182;:::o;54434:366::-;54576:3;54597:67;54661:2;54656:3;54597:67;:::i;:::-;54590:74;;54673:93;54762:3;54673:93;:::i;:::-;54791:2;54786:3;54782:12;54775:19;;54434:366;;;:::o;54806:419::-;54972:4;55010:2;54999:9;54995:18;54987:26;;55059:9;55053:4;55049:20;55045:1;55034:9;55030:17;55023:47;55087:131;55213:4;55087:131;:::i;:::-;55079:139;;54806:419;;;:::o;55231:178::-;55371:30;55367:1;55359:6;55355:14;55348:54;55231:178;:::o;55415:366::-;55557:3;55578:67;55642:2;55637:3;55578:67;:::i;:::-;55571:74;;55654:93;55743:3;55654:93;:::i;:::-;55772:2;55767:3;55763:12;55756:19;;55415:366;;;:::o;55787:419::-;55953:4;55991:2;55980:9;55976:18;55968:26;;56040:9;56034:4;56030:20;56026:1;56015:9;56011:17;56004:47;56068:131;56194:4;56068:131;:::i;:::-;56060:139;;55787:419;;;:::o
Swarm Source
ipfs://85f24880de8a5ceda9d9ca21ce748c831575e46293d80eafad526728d61fccb9
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.