Contract 0x26BFF571A8F76001dd86309c29Bd41b9c6fc313f

Txn Hash Method
Block
From
To
Value [Txn Fee]
0xe83d0ba9460f6e84733dedf620d49296565fe87e86dc4a89c67d03c80e2b2293Set Game98677402022-01-21 15:21:32156 days 5 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0008046775 27.5
0x08f614f8e4981b16f7dc1dbbbbc00f94dcab52099f7db286de4054ff4b3a57c5Set Trait Count ...98201572022-01-20 12:52:13157 days 7 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.005658330
0xbbcf8c30b6dbfc176973593d1fed31f36d52e5403d209d31662f65f6a093c406Upload Bodies98201522022-01-20 12:52:06157 days 7 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0238495830
0x1a18e813b228b5e179274c97d6bf55985b2d4a3f00045a887a97e2ed954b26040xd93ae3d998201432022-01-20 12:51:48157 days 7 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0172269330
0x5849c3d7374ecf176a2fcd62e07cfcd39ba7b1947fc0261198edeffd961dfdd80xd93ae3d998201242022-01-20 12:51:09157 days 7 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0275237130
0x0761a055e9ada0fad87f44b28f7cb2e3ede848a86399046caab7761cbd492d570xd93ae3d998201152022-01-20 12:50:48157 days 7 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0288864330
0x952a3e379a65c0bcd1eea1bf592d216bf13511adc062f5c988407723aa9554ce0xd93ae3d998200972022-01-20 12:50:13157 days 7 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0042767430
0x9988bea8c1a81abe588f48bef9a19294438e912e12cec2f938ab07861ef25c010xd93ae3d998200782022-01-20 12:49:35157 days 7 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0041862330
0x8a8ce55d4b0a9c00897b3dbbb5aa24fa49b8904f458a4b7f17ade86c3f0ce0b00xd93ae3d998200622022-01-20 12:49:03157 days 7 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0042612630
0xd300382a074778927575a62d593392d24c1720310cadbc80b18fcabc618143000xd93ae3d998200302022-01-20 12:47:59157 days 7 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0039417930
0xf2da5781bb72c10d0b3b52d72ca7d3c3c7be622372acfa0bf2dc1d239ce55c6b0xd93ae3d998198742022-01-20 12:42:37157 days 7 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0261638730
0x045b87c47affae4ad3ec48f6cce5c572d010b006e774ce29b6078b32de84a1660xd93ae3d998198602022-01-20 12:42:06157 days 8 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0254763630
0xa18cfcff8a19f11fdf3a5027dec9a7db78cf95cab72902d0d0134781d66d55890xd93ae3d998198502022-01-20 12:41:44157 days 8 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0261483930
0xe44a3d20cffafcb2845006402e284094d8ff6b60b85c084c753c5b00efc9ab310xd93ae3d998198402022-01-20 12:41:20157 days 8 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0234409230
0x1bcc8a439bf75f710f887bc9654ad5f1fe81c2bc9a439088e112dc31b36be1240xd93ae3d998198222022-01-20 12:40:45157 days 8 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0206301630
0x1505fa5027efa86689348e4bf1a4c5f0a11ea25efc6520086a7b12bb456c40d00xd93ae3d998198132022-01-20 12:40:26157 days 8 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0315953430
0xc3dc1c7b58011550561c73f54e2d729eefd540457c024c23be10c7ab3ab5bb420xd93ae3d998197782022-01-20 12:39:16157 days 8 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0261541530
0xd702ae7aed56d330343d890a79a61b7e66fae2bd3464d6c1b681dd5b544001c60xd93ae3d998197622022-01-20 12:38:44157 days 8 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0248018430
0x56e6f096158b783e3332914f36a5797c17b5a5335bb5e46e5d5b0230a584a2450xd93ae3d998197452022-01-20 12:38:10157 days 8 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0275247930
0xe60640cd70e88f3e714b75e3aa6d7c0124413758c43b31a55d583d82af4aa77d0xd93ae3d998197352022-01-20 12:37:50157 days 8 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0261617130
0x47eb9602d1e2e27a2100580600a81d76e327facf331eb231f0350ff793f770000xd93ae3d998197212022-01-20 12:37:19157 days 8 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0268452330
0xe3a121f9239da99bb19b0fd35a2a29da2514f8fb4ab2302e300db7a8fc559be60xd93ae3d998197122022-01-20 12:36:58157 days 8 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0288058230
0x073bca86ccfe37500c8322eb72a8017282e2b1e07c8c2c00366c5f33a94f0d940xd93ae3d998197032022-01-20 12:36:40157 days 8 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.041136330
0x9c84843e0acd6e2f210d36009d872e5c887af8d61a984726f369017de062611c0xd93ae3d998196832022-01-20 12:35:59157 days 8 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0438617730
0xcaf4d26d630a3b93ec82b76a45db75c73b17d30b913d0b0da9d17001125a312c0xd93ae3d998196702022-01-20 12:35:34157 days 8 hrs ago0xaab86d52fd256bbd45751fa1a4571067de0a24e0 IN  0x26bff571a8f76001dd86309c29bd41b9c6fc313f0 AVAX0.0431750130
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Traits

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 6: Traits.sol
// SPDX-License-Identifier: MIT LICENSE

pragma solidity ^0.8.0;

import "./Ownable.sol";
import "./ITraits.sol";
import "./IHunter.sol";
import "./Libraries.sol";

contract Traits is Ownable, ITraits {
    using Strings for uint256;

    uint256 private alphaTypeIndex = 7;

    // struct to store each trait's data for metadata and rendering
    struct Trait {
        string name;
        string png;
    }

    string hunterBody;
    string adventurerBody;

    // mapping from trait type (index) to its name
    string[8] _traitTypes = [
        // for adventurers:
        "Jacket",
        "Hair",
        "Backpack",
        //for hunters:
        "Arm",
        "Clothes",
        "Mask",
        "Weapon"
    ];
    // storage of each traits name and base64 PNG data
    mapping(uint8 => mapping(uint8 => Trait)) public traitData;
    mapping(uint8 => uint8) public traitCountForType;
    // mapping from alphaIndex to its score
    string[4] _alphas = ["8", "7", "6", "5"];

    IHunter public hunter;

    function selectTrait(uint16 seed, uint8 traitType)
        external
        view
        override
        returns (uint8)
    {
        if (traitType == alphaTypeIndex) {
            uint256 m = seed % 100;
            if (m > 95) {
                return 0;
            } else if (m > 80) {
                return 1;
            } else if (m > 50) {
                return 2;
            } else {
                return 3;
            }
        }

        uint8 modOf = traitCountForType[traitType];

        return uint8(seed % modOf);
    }

    /***ADMIN */

    function setGame(address _hunter) external onlyOwner {
        hunter = IHunter(_hunter);
    }

    function uploadBodies(string calldata _hunter, string calldata _adventurer)
        external
        onlyOwner
    {
        hunterBody = _hunter;
        adventurerBody = _adventurer;
    }

    /**
     * administrative to upload the names and images associated with each trait
     * @param traitType the trait type to upload the traits for (see traitTypes for a mapping)
     * @param traits the names and base64 encoded PNGs for each trait
     */

    function uploadTraits(
        uint8 traitType,
        uint8[] calldata traitIds,
        Trait[] calldata traits
    ) external onlyOwner {
        require(traitIds.length == traits.length, "Mismatched inputs");

        for (uint256 i = 0; i < traits.length; i++) {
            traitData[traitType][traitIds[i]] = Trait(
                traits[i].name,
                traits[i].png
            );
        }
    }

    function setTraitCountForType(uint8[] memory _tType, uint8[] memory _len)
        public
        onlyOwner
    {
        for (uint256 i = 0; i < _tType.length; i++) {
            traitCountForType[_tType[i]] = _len[i];
        }
    }

    /***RENDER */

    /**
     * generates an <image> element using base64 encoded PNGs
     * @param trait the trait storing the PNG data
     * @return the <image> element
     */
    function drawTrait(Trait memory trait)
        internal
        pure
        returns (string memory)
    {
        return
            string(
                abi.encodePacked(
                    '<image x="4" y="4" width="32" height="32" image-rendering="pixelated" preserveAspectRatio="xMidYMid" xlink:href="data:image/png;base64,',
                    trait.png,
                    '"/>'
                )
            );
    }

    function draw(string memory png) internal pure returns (string memory) {
        return
            string(
                abi.encodePacked(
                    '<image x="4" y="4" width="32" height="32" image-rendering="pixelated" preserveAspectRatio="xMidYMid" xlink:href="data:image/png;base64,',
                    png,
                    '"/>'
                )
            );
    }

    /**
     * generates an entire SVG by composing multiple <image> elements of PNGs
     * @param tokenId the ID of the token to generate an SVG for
     * @return a valid SVG of the Adventurer / Hunter
     */

    function drawSVG(uint256 tokenId) public view returns (string memory) {
        IHunter.AvtHtr memory s = hunter.getTokenTraits(tokenId);

        string memory svgString = "";
        if (s.isAdventurer) {
            svgString = string(
                abi.encodePacked(
                    drawTrait(traitData[0][s.jacket]),
                    drawTrait(traitData[2][s.backpack]),
                    draw(adventurerBody),
                    drawTrait(traitData[1][s.hair])
                )
            );
        } else {
            svgString = string(
                abi.encodePacked(
                    draw(hunterBody),
                    drawTrait(traitData[4][s.clothes]),
                    drawTrait(traitData[5][s.mask]),
                    drawTrait(traitData[6][s.weapon]),
                    drawTrait(traitData[3][s.arm])
                )
            );
        }

        return
            string(
                abi.encodePacked(
                    '<svg id="hunter" width="100%" height="100%" version="1.1" viewBox="0 0 40 40" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">',
                    svgString,
                    "</svg>"
                )
            );
    }

    /**
     * generates an attribute for the attributes array in the ERC721 metadata standard
     * @param traitType the trait type to reference as the metadata key
     * @param value the token's trait associated with the key
     * @return a JSON dictionary for the single attribute
     */
    function attributeForTypeAndValue(
        string memory traitType,
        string memory value
    ) internal pure returns (string memory) {
        return
            string(
                abi.encodePacked(
                    '{"trait_type":"',
                    traitType,
                    '","value":"',
                    value,
                    '"}'
                )
            );
    }

    /**
     * generates an array composed of all the individual traits and values
     * @param tokenId the ID of the token to compose the metadata for
     * @return a JSON array of all of the attributes for given token ID
     */
    function compileAttributes(uint256 tokenId)
        public
        view
        returns (string memory)
    {
        IHunter.AvtHtr memory s = hunter.getTokenTraits(tokenId);
        string memory traits;
        if (s.isAdventurer) {
            traits = string(
                abi.encodePacked(
                    attributeForTypeAndValue(
                        _traitTypes[0],
                        traitData[0][s.jacket % traitCountForType[0]].name
                    ),
                    ",",
                    attributeForTypeAndValue(
                        _traitTypes[1],
                        traitData[1][s.hair % traitCountForType[1]].name
                    ),
                    ",",
                    attributeForTypeAndValue(
                        _traitTypes[2],
                        traitData[2][s.backpack % traitCountForType[2]].name
                    ),
                    ","
                )
            );
        } else {
            traits = string(
                abi.encodePacked(
                    attributeForTypeAndValue(
                        _traitTypes[4],
                        traitData[4][s.clothes % traitCountForType[4]].name
                    ),
                    ",",
                    attributeForTypeAndValue(
                        _traitTypes[5],
                        traitData[5][s.mask % traitCountForType[5]].name
                    ),
                    ",",
                    attributeForTypeAndValue(
                        _traitTypes[6],
                        traitData[6][s.weapon % traitCountForType[6]].name
                    ),
                    ",",
                    attributeForTypeAndValue(
                        _traitTypes[3],
                        traitData[3][s.arm % traitCountForType[3]].name
                    ),
                    ",",
                    attributeForTypeAndValue(
                        "Alpha Score",
                        _alphas[s.alphaIndex]
                    ),
                    ","
                )
            );
        }
        return
            string(
                abi.encodePacked(
                    "[",
                    traits,
                    '{"trait_type":"Generation","value":',
                    tokenId <= hunter.getPaidTokens() ? '"Gen 0"' : '"Gen 1"',
                    '},{"trait_type":"Type","value":',
                    s.isAdventurer ? '"Adventurer"' : '"Hunter"',
                    "}]"
                )
            );
    }

    /**
     * generates a base64 encoded metadata response without referencing off-chain content
     * @param tokenId the ID of the token to generate the metadata for
     * @return a base64 encoded JSON dictionary of the token's metadata and SVG
     */
    function tokenURI(uint256 tokenId)
        public
        view
        override
        returns (string memory)
    {
        IHunter.AvtHtr memory s = hunter.getTokenTraits(tokenId);

        string memory metadata = string(
            abi.encodePacked(
                '{"name": "',
                s.isAdventurer ? "Adventurer #" : "Hunter #",
                tokenId.toString(),
                '", "description": "Thousands of Adventurers and Hunters compete on a forest in the metaverse. A tempting prize of $GEM awaits, with deadly high stakes. All the metadata and images are generated and stored 100% on-chain. No IPFS. NO API. Just the Avalanche blockchain.", "image": "data:image/svg+xml;base64,',
                base64(bytes(drawSVG(tokenId))),
                '", "attributes":',
                compileAttributes(tokenId),
                "}"
            )
        );

        return
            string(
                abi.encodePacked(
                    "data:application/json;base64,",
                    base64(bytes(metadata))
                )
            );
    }

    /***BASE 64 - Written by Brech Devos */

    string internal constant TABLE =
        "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";

    function base64(bytes memory data) internal pure returns (string memory) {
        if (data.length == 0) return "";

        // load the table into memory
        string memory table = TABLE;

        // multiply by 4/3 rounded up
        uint256 encodedLen = 4 * ((data.length + 2) / 3);

        // add some extra buffer at the end required for the writing
        string memory result = new string(encodedLen + 32);

        assembly {
            // set the actual output length
            mstore(result, encodedLen)

            // prepare the lookup table
            let tablePtr := add(table, 1)

            // input ptr
            let dataPtr := data
            let endPtr := add(dataPtr, mload(data))

            // result ptr, jump over length
            let resultPtr := add(result, 32)

            // run over the input, 3 bytes at a time
            for {

            } lt(dataPtr, endPtr) {

            } {
                dataPtr := add(dataPtr, 3)

                // read 3 bytes
                let input := mload(dataPtr)

                // write 4 characters
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(18, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(12, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(shr(6, input), 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
                mstore(
                    resultPtr,
                    shl(248, mload(add(tablePtr, and(input, 0x3F))))
                )
                resultPtr := add(resultPtr, 1)
            }

            // padding with '='
            switch mod(mload(data), 3)
            case 1 {
                mstore(sub(resultPtr, 2), shl(240, 0x3d3d))
            }
            case 2 {
                mstore(sub(resultPtr, 1), shl(248, 0x3d))
            }
        }

        return result;
    }
}

File 2 of 6: Context.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

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

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

File 3 of 6: IHunter.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface IHunter {
    // struct to store each token's traits
    struct AvtHtr {
        bool isAdventurer;
        uint8 jacket;
        uint8 hair;
        uint8 backpack;
        uint8 arm;
        uint8 clothes;
        uint8 mask;
        uint8 weapon;
        uint8 alphaIndex;
    }

    function getPaidTokens() external view returns (uint256);

    function getTokenTraits(uint256 tokenId)
        external
        view
        returns (AvtHtr memory);
}

File 4 of 6: ITraits.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

interface ITraits {
    function tokenURI(uint256 tokenId) external view returns (string memory);

    function selectTrait(uint16 seed, uint8 traitType)
        external
        view
        returns (uint8);
}

File 5 of 6: Libraries.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
 
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

 
/**
 * @dev String operations.
 */
library Strings {
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";

    /**
     * @dev Converts a `uint256` to its ASCII `string` decimal representation.
     */
    function toString(uint256 value) internal pure returns (string memory) {
        // Inspired by OraclizeAPI's implementation - MIT licence
        // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol

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

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
     */
    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    /**
     * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
     */
    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = _HEX_SYMBOLS[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

File 6 of 6: Ownable.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "./Context.sol";

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

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

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

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        _setOwner(address(0));
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        _setOwner(newOwner);
    }

    function _setOwner(address newOwner) private {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"compileAttributes","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"drawSVG","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hunter","outputs":[{"internalType":"contract IHunter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"seed","type":"uint16"},{"internalType":"uint8","name":"traitType","type":"uint8"}],"name":"selectTrait","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_hunter","type":"address"}],"name":"setGame","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8[]","name":"_tType","type":"uint8[]"},{"internalType":"uint8[]","name":"_len","type":"uint8[]"}],"name":"setTraitCountForType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"}],"name":"traitCountForType","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"","type":"uint8"},{"internalType":"uint8","name":"","type":"uint8"}],"name":"traitData","outputs":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"png","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hunter","type":"string"},{"internalType":"string","name":"_adventurer","type":"string"}],"name":"uploadBodies","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"traitType","type":"uint8"},{"internalType":"uint8[]","name":"traitIds","type":"uint8[]"},{"components":[{"internalType":"string","name":"name","type":"string"},{"internalType":"string","name":"png","type":"string"}],"internalType":"struct Traits.Trait[]","name":"traits","type":"tuple[]"}],"name":"uploadTraits","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405260076001556040518060e001604052806040518060400160405280600681526020017f4a61636b6574000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f486169720000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600881526020017f4261636b7061636b00000000000000000000000000000000000000000000000081525081526020016040518060400160405280600381526020017f41726d000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600781526020017f436c6f746865730000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600481526020017f4d61736b0000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600681526020017f576561706f6e00000000000000000000000000000000000000000000000000008152508152506004906007620001c1929190620003ca565b5060405180608001604052806040518060400160405280600181526020017f380000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f370000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f360000000000000000000000000000000000000000000000000000000000000081525081526020016040518060400160405280600181526020017f3500000000000000000000000000000000000000000000000000000000000000815250815250600e906004620002c992919062000424565b50348015620002d757600080fd5b50620002f8620002ec620002fe60201b60201c565b6200030660201b60201c565b62000601565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b826008810192821562000411579160200282015b8281111562000410578251829080519060200190620003ff9291906200047e565b5091602001919060010190620003de565b5b5090506200042091906200050f565b5090565b82600481019282156200046b579160200282015b828111156200046a578251829080519060200190620004599291906200047e565b509160200191906001019062000438565b5b5090506200047a91906200050f565b5090565b8280546200048c906200059c565b90600052602060002090601f016020900481019282620004b05760008555620004fc565b82601f10620004cb57805160ff1916838001178555620004fc565b82800160010185558215620004fc579182015b82811115620004fb578251825591602001919060010190620004de565b5b5090506200050b919062000537565b5090565b5b8082111562000533576000818162000529919062000556565b5060010162000510565b5090565b5b808211156200055257600081600090555060010162000538565b5090565b50805462000564906200059c565b6000825580601f1062000578575062000599565b601f01602090049060005260206000209081019062000598919062000537565b5b50565b60006002820490506001821680620005b557607f821691505b60208210811415620005cc57620005cb620005d2565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61476080620006116000396000f3fe608060405234801561001057600080fd5b50600436106100e95760003560e01c80639bf2ee351161008c578063c87b56dd11610066578063c87b56dd14610249578063d93ae3d914610279578063ee7bd58b14610295578063f2fde38b146102c5576100e9565b80639bf2ee35146101cc578063a6b09692146101fd578063b7a5ad541461022d576100e9565b8063715018a6116100c8578063715018a6146101585780637abecb8614610162578063819912a2146101925780638da5cb5b146101ae576100e9565b8062ecbfd1146100ee5780631602f7b01461010a57806368dba5e514610128575b600080fd5b610108600480360381019061010391906130f2565b6102e1565b005b6101126103e7565b60405161011f9190613a19565b60405180910390f35b610142600480360381019061013d9190613259565b61040d565b60405161014f9190613a34565b60405180910390f35b6101606112c5565b005b61017c60048036038101906101779190613259565b61134d565b6040516101899190613a34565b60405180910390f35b6101ac60048036038101906101a791906130c5565b611f99565b005b6101b6612059565b6040516101c391906139fe565b60405180910390f35b6101e660048036038101906101e19190613375565b612082565b6040516101f4929190613a56565b60405180910390f35b61021760048036038101906102129190613219565b6121c3565b6040516102249190613b08565b60405180910390f35b6102476004803603810190610242919061316a565b61226e565b005b610263600480360381019061025e9190613259565b612314565b6040516102709190613a34565b60405180910390f35b610293600480360381019061028e91906132e0565b6124bb565b005b6102af60048036038101906102aa91906132b3565b61273d565b6040516102bc9190613b08565b60405180910390f35b6102df60048036038101906102da91906130c5565b61275d565b005b6102e9612855565b73ffffffffffffffffffffffffffffffffffffffff16610307612059565b73ffffffffffffffffffffffffffffffffffffffff161461035d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161035490613acd565b60405180910390fd5b60005b82518110156103e25781818151811061037c5761037b613fd3565b5b6020026020010151600d600085848151811061039b5761039a613fd3565b5b602002602001015160ff1660ff16815260200190815260200160002060006101000a81548160ff021916908360ff16021790555080806103da90613e6a565b915050610360565b505050565b601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60606000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394e56847846040518263ffffffff1660e01b815260040161046c9190613aed565b6101206040518083038186803b15801561048557600080fd5b505afa158015610499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104bd91906131eb565b905060608160000151156109ad5761065d60046000600881106104e3576104e2613fd3565b5b0180546104ef90613e07565b80601f016020809104026020016040519081016040528092919081815260200182805461051b90613e07565b80156105685780601f1061053d57610100808354040283529160200191610568565b820191906000526020600020905b81548152906001019060200180831161054b57829003601f168201915b5050505050600c60008060ff1681526020019081526020016000206000600d60008060ff16815260200190815260200160002060009054906101000a900460ff1686602001516105b89190613f15565b60ff1660ff16815260200190815260200160002060000180546105da90613e07565b80601f016020809104026020016040519081016040528092919081815260200182805461060690613e07565b80156106535780601f1061062857610100808354040283529160200191610653565b820191906000526020600020905b81548152906001019060200180831161063657829003601f168201915b505050505061285d565b6107f1600460016008811061067557610674613fd3565b5b01805461068190613e07565b80601f01602080910402602001604051908101604052809291908181526020018280546106ad90613e07565b80156106fa5780601f106106cf576101008083540402835291602001916106fa565b820191906000526020600020905b8154815290600101906020018083116106dd57829003601f168201915b5050505050600c6000600160ff1681526020019081526020016000206000600d6000600160ff16815260200190815260200160002060009054906101000a900460ff16876040015161074c9190613f15565b60ff1660ff168152602001908152602001600020600001805461076e90613e07565b80601f016020809104026020016040519081016040528092919081815260200182805461079a90613e07565b80156107e75780601f106107bc576101008083540402835291602001916107e7565b820191906000526020600020905b8154815290600101906020018083116107ca57829003601f168201915b505050505061285d565b610985600460026008811061080957610808613fd3565b5b01805461081590613e07565b80601f016020809104026020016040519081016040528092919081815260200182805461084190613e07565b801561088e5780601f106108635761010080835404028352916020019161088e565b820191906000526020600020905b81548152906001019060200180831161087157829003601f168201915b5050505050600c6000600260ff1681526020019081526020016000206000600d6000600260ff16815260200190815260200160002060009054906101000a900460ff1688606001516108e09190613f15565b60ff1660ff168152602001908152602001600020600001805461090290613e07565b80601f016020809104026020016040519081016040528092919081815260200182805461092e90613e07565b801561097b5780601f106109505761010080835404028352916020019161097b565b820191906000526020600020905b81548152906001019060200180831161095e57829003601f168201915b505050505061285d565b604051602001610997939291906137a2565b6040516020818303038152906040529050611106565b610b40600480600881106109c4576109c3613fd3565b5b0180546109d090613e07565b80601f01602080910402602001604051908101604052809291908181526020018280546109fc90613e07565b8015610a495780601f10610a1e57610100808354040283529160200191610a49565b820191906000526020600020905b815481529060010190602001808311610a2c57829003601f168201915b5050505050600c6000600460ff1681526020019081526020016000206000600d6000600460ff16815260200190815260200160002060009054906101000a900460ff168660a00151610a9b9190613f15565b60ff1660ff1681526020019081526020016000206000018054610abd90613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae990613e07565b8015610b365780601f10610b0b57610100808354040283529160200191610b36565b820191906000526020600020905b815481529060010190602001808311610b1957829003601f168201915b505050505061285d565b610cd46004600560088110610b5857610b57613fd3565b5b018054610b6490613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054610b9090613e07565b8015610bdd5780601f10610bb257610100808354040283529160200191610bdd565b820191906000526020600020905b815481529060010190602001808311610bc057829003601f168201915b5050505050600c6000600560ff1681526020019081526020016000206000600d6000600560ff16815260200190815260200160002060009054906101000a900460ff168760c00151610c2f9190613f15565b60ff1660ff1681526020019081526020016000206000018054610c5190613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054610c7d90613e07565b8015610cca5780601f10610c9f57610100808354040283529160200191610cca565b820191906000526020600020905b815481529060010190602001808311610cad57829003601f168201915b505050505061285d565b610e686004600660088110610cec57610ceb613fd3565b5b018054610cf890613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054610d2490613e07565b8015610d715780601f10610d4657610100808354040283529160200191610d71565b820191906000526020600020905b815481529060010190602001808311610d5457829003601f168201915b5050505050600c6000600660ff1681526020019081526020016000206000600d6000600660ff16815260200190815260200160002060009054906101000a900460ff168860e00151610dc39190613f15565b60ff1660ff1681526020019081526020016000206000018054610de590613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054610e1190613e07565b8015610e5e5780601f10610e3357610100808354040283529160200191610e5e565b820191906000526020600020905b815481529060010190602001808311610e4157829003601f168201915b505050505061285d565b610ffc6004600360088110610e8057610e7f613fd3565b5b018054610e8c90613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb890613e07565b8015610f055780601f10610eda57610100808354040283529160200191610f05565b820191906000526020600020905b815481529060010190602001808311610ee857829003601f168201915b5050505050600c6000600360ff1681526020019081526020016000206000600d6000600360ff16815260200190815260200160002060009054906101000a900460ff168960800151610f579190613f15565b60ff1660ff1681526020019081526020016000206000018054610f7990613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054610fa590613e07565b8015610ff25780601f10610fc757610100808354040283529160200191610ff2565b820191906000526020600020905b815481529060010190602001808311610fd557829003601f168201915b505050505061285d565b6110e06040518060400160405280600b81526020017f416c7068612053636f7265000000000000000000000000000000000000000000815250600e88610100015160ff166004811061105157611050613fd3565b5b01805461105d90613e07565b80601f016020809104026020016040519081016040528092919081815260200182805461108990613e07565b80156110d65780601f106110ab576101008083540402835291602001916110d6565b820191906000526020600020905b8154815290600101906020018083116110b957829003601f168201915b505050505061285d565b6040516020016110f49594939291906137f4565b60405160208183030381529060405290505b80601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16634018b1f86040518163ffffffff1660e01b815260040160206040518083038186803b15801561116f57600080fd5b505afa158015611183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a79190613286565b8511156111e9576040518060400160405280600781526020017f2247656e20312200000000000000000000000000000000000000000000000000815250611220565b6040518060400160405280600781526020017f2247656e203022000000000000000000000000000000000000000000000000008152505b8360000151611264576040518060400160405280600881526020017f2248756e7465722200000000000000000000000000000000000000000000000081525061129b565b6040518060400160405280600c81526020017f22416476656e74757265722200000000000000000000000000000000000000008152505b6040516020016112ad93929190613915565b60405160208183030381529060405292505050919050565b6112cd612855565b73ffffffffffffffffffffffffffffffffffffffff166112eb612059565b73ffffffffffffffffffffffffffffffffffffffff1614611341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161133890613acd565b60405180910390fd5b61134b6000612889565b565b60606000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394e56847846040518263ffffffff1660e01b81526004016113ac9190613aed565b6101206040518083038186803b1580156113c557600080fd5b505afa1580156113d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fd91906131eb565b9050600060405180602001604052806000815250905081600001511561191357611585600c60008060ff1681526020019081526020016000206000846020015160ff1660ff16815260200190815260200160002060405180604001604052908160008201805461146c90613e07565b80601f016020809104026020016040519081016040528092919081815260200182805461149890613e07565b80156114e55780601f106114ba576101008083540402835291602001916114e5565b820191906000526020600020905b8154815290600101906020018083116114c857829003601f168201915b505050505081526020016001820180546114fe90613e07565b80601f016020809104026020016040519081016040528092919081815260200182805461152a90613e07565b80156115775780601f1061154c57610100808354040283529160200191611577565b820191906000526020600020905b81548152906001019060200180831161155a57829003601f168201915b50505050508152505061294d565b6116ee600c6000600260ff1681526020019081526020016000206000856060015160ff1660ff1681526020019081526020016000206040518060400160405290816000820180546115d590613e07565b80601f016020809104026020016040519081016040528092919081815260200182805461160190613e07565b801561164e5780601f106116235761010080835404028352916020019161164e565b820191906000526020600020905b81548152906001019060200180831161163157829003601f168201915b5050505050815260200160018201805461166790613e07565b80601f016020809104026020016040519081016040528092919081815260200182805461169390613e07565b80156116e05780601f106116b5576101008083540402835291602001916116e0565b820191906000526020600020905b8154815290600101906020018083116116c357829003601f168201915b50505050508152505061294d565b611781600380546116fe90613e07565b80601f016020809104026020016040519081016040528092919081815260200182805461172a90613e07565b80156117775780601f1061174c57610100808354040283529160200191611777565b820191906000526020600020905b81548152906001019060200180831161175a57829003601f168201915b505050505061297a565b6118ea600c6000600160ff1681526020019081526020016000206000876040015160ff1660ff1681526020019081526020016000206040518060400160405290816000820180546117d190613e07565b80601f01602080910402602001604051908101604052809291908181526020018280546117fd90613e07565b801561184a5780601f1061181f5761010080835404028352916020019161184a565b820191906000526020600020905b81548152906001019060200180831161182d57829003601f168201915b5050505050815260200160018201805461186390613e07565b80601f016020809104026020016040519081016040528092919081815260200182805461188f90613e07565b80156118dc5780601f106118b1576101008083540402835291602001916118dc565b820191906000526020600020905b8154815290600101906020018083116118bf57829003601f168201915b50505050508152505061294d565b6040516020016118fd9493929190613719565b6040516020818303038152906040529050611f70565b6119a66002805461192390613e07565b80601f016020809104026020016040519081016040528092919081815260200182805461194f90613e07565b801561199c5780601f106119715761010080835404028352916020019161199c565b820191906000526020600020905b81548152906001019060200180831161197f57829003601f168201915b505050505061297a565b611b0f600c6000600460ff16815260200190815260200160002060008560a0015160ff1660ff1681526020019081526020016000206040518060400160405290816000820180546119f690613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054611a2290613e07565b8015611a6f5780601f10611a4457610100808354040283529160200191611a6f565b820191906000526020600020905b815481529060010190602001808311611a5257829003601f168201915b50505050508152602001600182018054611a8890613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054611ab490613e07565b8015611b015780601f10611ad657610100808354040283529160200191611b01565b820191906000526020600020905b815481529060010190602001808311611ae457829003601f168201915b50505050508152505061294d565b611c78600c6000600560ff16815260200190815260200160002060008660c0015160ff1660ff168152602001908152602001600020604051806040016040529081600082018054611b5f90613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054611b8b90613e07565b8015611bd85780601f10611bad57610100808354040283529160200191611bd8565b820191906000526020600020905b815481529060010190602001808311611bbb57829003601f168201915b50505050508152602001600182018054611bf190613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054611c1d90613e07565b8015611c6a5780601f10611c3f57610100808354040283529160200191611c6a565b820191906000526020600020905b815481529060010190602001808311611c4d57829003601f168201915b50505050508152505061294d565b611de1600c6000600660ff16815260200190815260200160002060008760e0015160ff1660ff168152602001908152602001600020604051806040016040529081600082018054611cc890613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054611cf490613e07565b8015611d415780601f10611d1657610100808354040283529160200191611d41565b820191906000526020600020905b815481529060010190602001808311611d2457829003601f168201915b50505050508152602001600182018054611d5a90613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054611d8690613e07565b8015611dd35780601f10611da857610100808354040283529160200191611dd3565b820191906000526020600020905b815481529060010190602001808311611db657829003601f168201915b50505050508152505061294d565b611f4a600c6000600360ff1681526020019081526020016000206000886080015160ff1660ff168152602001908152602001600020604051806040016040529081600082018054611e3190613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054611e5d90613e07565b8015611eaa5780601f10611e7f57610100808354040283529160200191611eaa565b820191906000526020600020905b815481529060010190602001808311611e8d57829003601f168201915b50505050508152602001600182018054611ec390613e07565b80601f0160208091040260200160405190810160405280929190818152602001828054611eef90613e07565b8015611f3c5780601f10611f1157610100808354040283529160200191611f3c565b820191906000526020600020905b815481529060010190602001808311611f1f57829003601f168201915b50505050508152505061294d565b604051602001611f5e959493929190613757565b60405160208183030381529060405290505b80604051602001611f8191906138e8565b60405160208183030381529060405292505050919050565b611fa1612855565b73ffffffffffffffffffffffffffffffffffffffff16611fbf612059565b73ffffffffffffffffffffffffffffffffffffffff1614612015576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161200c90613acd565b60405180910390fd5b80601260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600c602052816000526040600020602052806000526040600020600091509150508060000180546120b290613e07565b80601f01602080910402602001604051908101604052809291908181526020018280546120de90613e07565b801561212b5780601f106121005761010080835404028352916020019161212b565b820191906000526020600020905b81548152906001019060200180831161210e57829003601f168201915b50505050509080600101805461214090613e07565b80601f016020809104026020016040519081016040528092919081815260200182805461216c90613e07565b80156121b95780601f1061218e576101008083540402835291602001916121b9565b820191906000526020600020905b81548152906001019060200180831161219c57829003601f168201915b5050505050905082565b60006001548260ff16141561222a5760006064846121e19190613eb3565b61ffff169050605f8111156121fa576000915050612268565b605081111561220d576001915050612268565b6032811115612220576002915050612268565b6003915050612268565b6000600d60008460ff1660ff16815260200190815260200160002060009054906101000a900460ff1690508060ff16846122649190613eb3565b9150505b92915050565b612276612855565b73ffffffffffffffffffffffffffffffffffffffff16612294612059565b73ffffffffffffffffffffffffffffffffffffffff16146122ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122e190613acd565b60405180910390fd5b8383600291906122fb929190612c89565b5081816003919061230d929190612c89565b5050505050565b60606000601260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166394e56847846040518263ffffffff1660e01b81526004016123739190613aed565b6101206040518083038186803b15801561238c57600080fd5b505afa1580156123a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123c491906131eb565b90506000816000015161240c576040518060400160405280600881526020017f48756e7465722023000000000000000000000000000000000000000000000000815250612443565b6040518060400160405280600c81526020017f416476656e7475726572202300000000000000000000000000000000000000008152505b61244c856129a3565b61245d6124588761134d565b612b04565b6124668761040d565b6040516020016124799493929190613972565b604051602081830303815290604052905061249381612b04565b6040516020016124a391906139dc565b60405160208183030381529060405292505050919050565b6124c3612855565b73ffffffffffffffffffffffffffffffffffffffff166124e1612059565b73ffffffffffffffffffffffffffffffffffffffff1614612537576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161252e90613acd565b60405180910390fd5b81819050848490501461257f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257690613aad565b60405180910390fd5b60005b828290508110156127355760405180604001604052808484848181106125ab576125aa613fd3565b5b90506020028101906125bd9190613b86565b80600001906125cc9190613b23565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815260200184848481811061262757612626613fd3565b5b90506020028101906126399190613b86565b80602001906126489190613b23565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050815250600c60008860ff1660ff16815260200190815260200160002060008787858181106126bc576126bb613fd3565b5b90506020020160208101906126d191906132b3565b60ff1660ff1681526020019081526020016000206000820151816000019080519060200190612701929190612d0f565b50602082015181600101908051906020019061271e929190612d0f565b50905050808061272d90613e6a565b915050612582565b505050505050565b600d6020528060005260406000206000915054906101000a900460ff1681565b612765612855565b73ffffffffffffffffffffffffffffffffffffffff16612783612059565b73ffffffffffffffffffffffffffffffffffffffff16146127d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d090613acd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612849576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284090613a8d565b60405180910390fd5b61285281612889565b50565b600033905090565b606082826040516020016128729291906138a3565b604051602081830303815290604052905092915050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b606081602001516040516020016129649190613876565b6040516020818303038152906040529050919050565b60608160405160200161298d9190613876565b6040516020818303038152906040529050919050565b606060008214156129eb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612aff565b600082905060005b60008214612a1d578080612a0690613e6a565b915050600a82612a169190613c7c565b91506129f3565b60008167ffffffffffffffff811115612a3957612a38614002565b5b6040519080825280601f01601f191660200182016040528015612a6b5781602001600182028036833780820191505090505b5090505b60008514612af857600182612a849190613d07565b9150600a85612a939190613ee4565b6030612a9f9190613c26565b60f81b818381518110612ab557612ab4613fd3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612af19190613c7c565b9450612a6f565b8093505050505b919050565b6060600082511415612b2757604051806020016040528060008152509050612c84565b60006040518060600160405280604081526020016146eb6040913990506000600360028551612b569190613c26565b612b609190613c7c565b6004612b6c9190613cad565b90506000602082612b7d9190613c26565b67ffffffffffffffff811115612b9657612b95614002565b5b6040519080825280601f01601f191660200182016040528015612bc85781602001600182028036833780820191505090505b509050818152600183018586518101602084015b81831015612c43576003830192508251603f8160121c1685015160f81b8252600182019150603f81600c1c1685015160f81b8252600182019150603f8160061c1685015160f81b8252600182019150603f811685015160f81b825260018201915050612bdc565b600389510660018114612c5d5760028114612c6d57612c78565b613d3d60f01b6002830352612c78565b603d60f81b60018303525b50505050508093505050505b919050565b828054612c9590613e07565b90600052602060002090601f016020900481019282612cb75760008555612cfe565b82601f10612cd057803560ff1916838001178555612cfe565b82800160010185558215612cfe579182015b82811115612cfd578235825591602001919060010190612ce2565b5b509050612d0b9190612d95565b5090565b828054612d1b90613e07565b90600052602060002090601f016020900481019282612d3d5760008555612d84565b82601f10612d5657805160ff1916838001178555612d84565b82800160010185558215612d84579182015b82811115612d83578251825591602001919060010190612d68565b5b509050612d919190612d95565b5090565b5b80821115612dae576000816000905550600101612d96565b5090565b6000612dc5612dc084613bd3565b613bae565b90508083825260208201905082856020860282011115612de857612de761404a565b5b60005b85811015612e185781612dfe888261309b565b845260208401935060208301925050600181019050612deb565b5050509392505050565b600081359050612e3181614677565b92915050565b60008083601f840112612e4d57612e4c614036565b5b8235905067ffffffffffffffff811115612e6a57612e69614031565b5b602083019150836020820283011115612e8657612e8561404a565b5b9250929050565b60008083601f840112612ea357612ea2614036565b5b8235905067ffffffffffffffff811115612ec057612ebf614031565b5b602083019150836020820283011115612edc57612edb61404a565b5b9250929050565b600082601f830112612ef857612ef7614036565b5b8135612f08848260208601612db2565b91505092915050565b600081519050612f208161468e565b92915050565b60008083601f840112612f3c57612f3b614036565b5b8235905067ffffffffffffffff811115612f5957612f58614031565b5b602083019150836001820283011115612f7557612f7461404a565b5b9250929050565b60006101208284031215612f9357612f92614040565b5b612f9e610120613bae565b90506000612fae84828501612f11565b6000830152506020612fc2848285016130b0565b6020830152506040612fd6848285016130b0565b6040830152506060612fea848285016130b0565b6060830152506080612ffe848285016130b0565b60808301525060a0613012848285016130b0565b60a08301525060c0613026848285016130b0565b60c08301525060e061303a848285016130b0565b60e08301525061010061304f848285016130b0565b6101008301525092915050565b60008135905061306b816146a5565b92915050565b600081359050613080816146bc565b92915050565b600081519050613095816146bc565b92915050565b6000813590506130aa816146d3565b92915050565b6000815190506130bf816146d3565b92915050565b6000602082840312156130db576130da614059565b5b60006130e984828501612e22565b91505092915050565b6000806040838503121561310957613108614059565b5b600083013567ffffffffffffffff81111561312757613126614054565b5b61313385828601612ee3565b925050602083013567ffffffffffffffff81111561315457613153614054565b5b61316085828601612ee3565b9150509250929050565b6000806000806040858703121561318457613183614059565b5b600085013567ffffffffffffffff8111156131a2576131a1614054565b5b6131ae87828801612f26565b9450945050602085013567ffffffffffffffff8111156131d1576131d0614054565b5b6131dd87828801612f26565b925092505092959194509250565b6000610120828403121561320257613201614059565b5b600061321084828501612f7c565b91505092915050565b600080604083850312156132305761322f614059565b5b600061323e8582860161305c565b925050602061324f8582860161309b565b9150509250929050565b60006020828403121561326f5761326e614059565b5b600061327d84828501613071565b91505092915050565b60006020828403121561329c5761329b614059565b5b60006132aa84828501613086565b91505092915050565b6000602082840312156132c9576132c8614059565b5b60006132d78482850161309b565b91505092915050565b6000806000806000606086880312156132fc576132fb614059565b5b600061330a8882890161309b565b955050602086013567ffffffffffffffff81111561332b5761332a614054565b5b61333788828901612e8d565b9450945050604086013567ffffffffffffffff81111561335a57613359614054565b5b61336688828901612e37565b92509250509295509295909350565b6000806040838503121561338c5761338b614059565b5b600061339a8582860161309b565b92505060206133ab8582860161309b565b9150509250929050565b6133be81613d3b565b82525050565b6133cd81613d9e565b82525050565b60006133de82613bff565b6133e88185613c0a565b93506133f8818560208601613dd4565b6134018161405e565b840191505092915050565b600061341782613bff565b6134218185613c1b565b9350613431818560208601613dd4565b80840191505092915050565b600061344b61013283613c1b565b91506134568261406f565b61013282019050919050565b600061346f608783613c1b565b915061347a826141f0565b608782019050919050565b6000613492602683613c0a565b915061349d826142b1565b604082019050919050565b60006134b5600183613c1b565b91506134c082614300565b600182019050919050565b60006134d8600f83613c1b565b91506134e382614329565b600f82019050919050565b60006134fb600283613c1b565b915061350682614352565b600282019050919050565b600061351e601183613c0a565b91506135298261437b565b602082019050919050565b6000613541600283613c1b565b915061354c826143a4565b600282019050919050565b6000613564601083613c1b565b915061356f826143cd565b601082019050919050565b6000613587600183613c1b565b9150613592826143f6565b600182019050919050565b60006135aa601f83613c1b565b91506135b58261441f565b601f82019050919050565b60006135cd602083613c0a565b91506135d882614448565b602082019050919050565b60006135f0609c83613c1b565b91506135fb82614471565b609c82019050919050565b6000613613600183613c1b565b915061361e82614532565b600182019050919050565b6000613636600a83613c1b565b91506136418261455b565b600a82019050919050565b6000613659600b83613c1b565b915061366482614584565b600b82019050919050565b600061367c600383613c1b565b9150613687826145ad565b600382019050919050565b600061369f601d83613c1b565b91506136aa826145d6565b601d82019050919050565b60006136c2602383613c1b565b91506136cd826145ff565b602382019050919050565b60006136e5600683613c1b565b91506136f08261464e565b600682019050919050565b61370481613d87565b82525050565b61371381613d91565b82525050565b6000613725828761340c565b9150613731828661340c565b915061373d828561340c565b9150613749828461340c565b915081905095945050505050565b6000613763828861340c565b915061376f828761340c565b915061377b828661340c565b9150613787828561340c565b9150613793828461340c565b91508190509695505050505050565b60006137ae828661340c565b91506137b9826134a8565b91506137c5828561340c565b91506137d0826134a8565b91506137dc828461340c565b91506137e7826134a8565b9150819050949350505050565b6000613800828861340c565b915061380b826134a8565b9150613817828761340c565b9150613822826134a8565b915061382e828661340c565b9150613839826134a8565b9150613845828561340c565b9150613850826134a8565b915061385c828461340c565b9150613867826134a8565b91508190509695505050505050565b600061388182613462565b915061388d828461340c565b91506138988261366f565b915081905092915050565b60006138ae826134cb565b91506138ba828561340c565b91506138c58261364c565b91506138d1828461340c565b91506138dc82613534565b91508190509392505050565b60006138f3826135e3565b91506138ff828461340c565b915061390a826136d8565b915081905092915050565b600061392082613606565b915061392c828661340c565b9150613937826136b5565b9150613943828561340c565b915061394e8261359d565b915061395a828461340c565b9150613965826134ee565b9150819050949350505050565b600061397d82613629565b9150613989828761340c565b9150613995828661340c565b91506139a08261343d565b91506139ac828561340c565b91506139b782613557565b91506139c3828461340c565b91506139ce8261357a565b915081905095945050505050565b60006139e782613692565b91506139f3828461340c565b915081905092915050565b6000602082019050613a1360008301846133b5565b92915050565b6000602082019050613a2e60008301846133c4565b92915050565b60006020820190508181036000830152613a4e81846133d3565b905092915050565b60006040820190508181036000830152613a7081856133d3565b90508181036020830152613a8481846133d3565b90509392505050565b60006020820190508181036000830152613aa681613485565b9050919050565b60006020820190508181036000830152613ac681613511565b9050919050565b60006020820190508181036000830152613ae6816135c0565b9050919050565b6000602082019050613b0260008301846136fb565b92915050565b6000602082019050613b1d600083018461370a565b92915050565b60008083356001602003843603038112613b4057613b3f614045565b5b80840192508235915067ffffffffffffffff821115613b6257613b6161403b565b5b602083019250600182023603831315613b7e57613b7d61404f565b5b509250929050565b600082356001604003833603038112613ba257613ba1614045565b5b80830191505092915050565b6000613bb8613bc9565b9050613bc48282613e39565b919050565b6000604051905090565b600067ffffffffffffffff821115613bee57613bed614002565b5b602082029050602081019050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b6000613c3182613d87565b9150613c3c83613d87565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c7157613c70613f46565b5b828201905092915050565b6000613c8782613d87565b9150613c9283613d87565b925082613ca257613ca1613f75565b5b828204905092915050565b6000613cb882613d87565b9150613cc383613d87565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613cfc57613cfb613f46565b5b828202905092915050565b6000613d1282613d87565b9150613d1d83613d87565b925082821015613d3057613d2f613f46565b5b828203905092915050565b6000613d4682613d67565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000613da982613db0565b9050919050565b6000613dbb82613dc2565b9050919050565b6000613dcd82613d67565b9050919050565b60005b83811015613df2578082015181840152602081019050613dd7565b83811115613e01576000848401525b50505050565b60006002820490506001821680613e1f57607f821691505b60208210811415613e3357613e32613fa4565b5b50919050565b613e428261405e565b810181811067ffffffffffffffff82111715613e6157613e60614002565b5b80604052505050565b6000613e7582613d87565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613ea857613ea7613f46565b5b600182019050919050565b6000613ebe82613d59565b9150613ec983613d59565b925082613ed957613ed8613f75565b5b828206905092915050565b6000613eef82613d87565b9150613efa83613d87565b925082613f0a57613f09613f75565b5b828206905092915050565b6000613f2082613d91565b9150613f2b83613d91565b925082613f3b57613f3a613f75565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f222c20226465736372697074696f6e223a202254686f7573616e6473206f662060008201527f416476656e74757265727320616e642048756e7465727320636f6d706574652060208201527f6f6e206120666f7265737420696e20746865206d65746176657273652e20412060408201527f74656d7074696e67207072697a65206f66202447454d206177616974732c207760608201527f69746820646561646c792068696768207374616b65732e20416c6c207468652060808201527f6d6574616461746120616e6420696d61676573206172652067656e657261746560a08201527f6420616e642073746f7265642031303025206f6e2d636861696e2e204e6f204960c08201527f5046532e204e4f204150492e204a75737420746865204176616c616e6368652060e08201527f626c6f636b636861696e2e222c2022696d616765223a2022646174613a696d616101008201527f67652f7376672b786d6c3b6261736536342c000000000000000000000000000061012082015250565b7f3c696d61676520783d22342220793d2234222077696474683d2233322220686560008201527f696768743d2233322220696d6167652d72656e646572696e673d22706978656c60208201527f6174656422207072657365727665417370656374526174696f3d22784d69645960408201527f4d69642220786c696e6b3a687265663d22646174613a696d6167652f706e673b60608201527f6261736536342c00000000000000000000000000000000000000000000000000608082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f2c00000000000000000000000000000000000000000000000000000000000000600082015250565b7f7b2274726169745f74797065223a220000000000000000000000000000000000600082015250565b7f7d5d000000000000000000000000000000000000000000000000000000000000600082015250565b7f4d69736d61746368656420696e70757473000000000000000000000000000000600082015250565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b7f222c202261747472696275746573223a00000000000000000000000000000000600082015250565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b7f7d2c7b2274726169745f74797065223a2254797065222c2276616c7565223a00600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f3c7376672069643d2268756e746572222077696474683d22313030252220686560008201527f696768743d2231303025222076657273696f6e3d22312e31222076696577426f60208201527f783d223020302034302034302220786d6c6e733d22687474703a2f2f7777772e60408201527f77332e6f72672f323030302f7376672220786d6c6e733a786c696e6b3d22687460608201527f74703a2f2f7777772e77332e6f72672f313939392f786c696e6b223e00000000608082015250565b7f5b00000000000000000000000000000000000000000000000000000000000000600082015250565b7f7b226e616d65223a202200000000000000000000000000000000000000000000600082015250565b7f222c2276616c7565223a22000000000000000000000000000000000000000000600082015250565b7f222f3e0000000000000000000000000000000000000000000000000000000000600082015250565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b7f7b2274726169745f74797065223a2247656e65726174696f6e222c2276616c7560008201527f65223a0000000000000000000000000000000000000000000000000000000000602082015250565b7f3c2f7376673e0000000000000000000000000000000000000000000000000000600082015250565b61468081613d3b565b811461468b57600080fd5b50565b61469781613d4d565b81146146a257600080fd5b50565b6146ae81613d59565b81146146b957600080fd5b50565b6146c581613d87565b81146146d057600080fd5b50565b6146dc81613d91565b81146146e757600080fd5b5056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220f5ac7b252272cc11fc980af1311608dceafd09ebdea4aac1524dad178c6be5b864736f6c63430008070033

Deployed ByteCode Sourcemap

174:12681:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2668:241;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1031:21;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6432:2605;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1671:94:4;;;:::i;:::-;;4185:1272:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1654:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1020:87:4;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;817:58:5;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1061:565;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1759:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9307:1117;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2231:429;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;882:48;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1920:229:4;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2668:241:5;1251:12:4;:10;:12::i;:::-;1240:23;;:7;:5;:7::i;:::-;:23;;;1232:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2798:9:5::1;2793:109;2817:6;:13;2813:1;:17;2793:109;;;2883:4;2888:1;2883:7;;;;;;;;:::i;:::-;;;;;;;;2852:17;:28;2870:6;2877:1;2870:9;;;;;;;;:::i;:::-;;;;;;;;2852:28;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;2832:3;;;;;:::i;:::-;;;;2793:109;;;;2668:241:::0;;:::o;1031:21::-;;;;;;;;;;;;;:::o;6432:2605::-;6524:13;6555:23;6581:6;;;;;;;;;;;:21;;;6603:7;6581:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6555:56;;6622:20;6657:1;:14;;;6653:1926;;;6761:165;6812:11;6824:1;6812:14;;;;;;;:::i;:::-;;;6761:165;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6853:9;:12;6863:1;6853:12;;;;;;;;;;;;;:45;6877:17;:20;6895:1;6877:20;;;;;;;;;;;;;;;;;;;;;;;6866:1;:8;;;:31;;;;:::i;:::-;6853:45;;;;;;;;;;;;;;;:50;;6761:165;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;:165::i;:::-;6975:163;7026:11;7038:1;7026:14;;;;;;;:::i;:::-;;;6975:163;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7067:9;:12;7077:1;7067:12;;;;;;;;;;;;;:43;7089:17;:20;7107:1;7089:20;;;;;;;;;;;;;;;;;;;;;;;7080:1;:6;;;:29;;;;:::i;:::-;7067:43;;;;;;;;;;;;;;;:48;;6975:163;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;:163::i;:::-;7187:167;7238:11;7250:1;7238:14;;;;;;;:::i;:::-;;;7187:167;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7279:9;:12;7289:1;7279:12;;;;;;;;;;;;;:47;7305:17;:20;7323:1;7305:20;;;;;;;;;;;;;;;;;;;;;;;7292:1;:10;;;:33;;;;:::i;:::-;7279:47;;;;;;;;;;;;;;;:52;;7187:167;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;:167::i;:::-;6722:677;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;6688:726;;6653:1926;;;7520:166;7571:11;7583:1;7571:14;;;;;;;:::i;:::-;;;7520:166;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7612:9;:12;7622:1;7612:12;;;;;;;;;;;;;:46;7637:17;:20;7655:1;7637:20;;;;;;;;;;;;;;;;;;;;;;;7625:1;:9;;;:32;;;;:::i;:::-;7612:46;;;;;;;;;;;;;;;:51;;7520:166;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;:166::i;:::-;7735:163;7786:11;7798:1;7786:14;;;;;;;:::i;:::-;;;7735:163;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7827:9;:12;7837:1;7827:12;;;;;;;;;;;;;:43;7849:17;:20;7867:1;7849:20;;;;;;;;;;;;;;;;;;;;;;;7840:1;:6;;;:29;;;;:::i;:::-;7827:43;;;;;;;;;;;;;;;:48;;7735:163;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;:163::i;:::-;7947:165;7998:11;8010:1;7998:14;;;;;;;:::i;:::-;;;7947:165;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8039:9;:12;8049:1;8039:12;;;;;;;;;;;;;:45;8063:17;:20;8081:1;8063:20;;;;;;;;;;;;;;;;;;;;;;;8052:1;:8;;;:31;;;;:::i;:::-;8039:45;;;;;;;;;;;;;;;:50;;7947:165;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;:165::i;:::-;8161:162;8212:11;8224:1;8212:14;;;;;;;:::i;:::-;;;8161:162;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8253:9;:12;8263:1;8253:12;;;;;;;;;;;;;:42;8274:17;:20;8292:1;8274:20;;;;;;;;;;;;;;;;;;;;;;;8266:1;:5;;;:28;;;;:::i;:::-;8253:42;;;;;;;;;;;;;;;:47;;8161:162;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;:162::i;:::-;8372:135;;;;;;;;;;;;;;;;;;8463:7;8471:1;:12;;;8463:21;;;;;;;;;:::i;:::-;;;8372:135;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:24;:135::i;:::-;7481:1071;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;7447:1120;;6653:1926;8699:6;8799;;;;;;;;;;;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8788:7;:33;;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8924:1;:14;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8634:380;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;8589:440;;;;6432:2605;;;:::o;1671:94:4:-;1251:12;:10;:12::i;:::-;1240:23;;:7;:5;:7::i;:::-;:23;;;1232:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1736:21:::1;1754:1;1736:9;:21::i;:::-;1671:94::o:0;4185:1272:5:-;4240:13;4266:23;4292:6;;;;;;;;;;;:21;;;4314:7;4292:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4266:56;;4335:23;:28;;;;;;;;;;;;;;4378:1;:14;;;4374:724;;;4485:33;4495:9;:12;4505:1;4495:12;;;;;;;;;;;;;:22;4508:1;:8;;;4495:22;;;;;;;;;;;;;;;4485:33;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:33::i;:::-;4541:35;4551:9;:12;4561:1;4551:12;;;;;;;;;;;;;:24;4564:1;:10;;;4551:24;;;;;;;;;;;;;;;4541:35;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:35::i;:::-;4599:20;4604:14;4599:20;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:4;:20::i;:::-;4642:31;4652:9;:12;4662:1;4652:12;;;;;;;;;;;;;:20;4665:1;:6;;;4652:20;;;;;;;;;;;;;;;4642:31;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:31::i;:::-;4446:246;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4409:298;;4374:724;;;4816:16;4821:10;4816:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:4;:16::i;:::-;4855:34;4865:9;:12;4875:1;4865:12;;;;;;;;;;;;;:23;4878:1;:9;;;4865:23;;;;;;;;;;;;;;;4855:34;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:34::i;:::-;4912:31;4922:9;:12;4932:1;4922:12;;;;;;;;;;;;;:20;4935:1;:6;;;4922:20;;;;;;;;;;;;;;;4912:31;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:31::i;:::-;4966:33;4976:9;:12;4986:1;4976:12;;;;;;;;;;;;;:22;4989:1;:8;;;4976:22;;;;;;;;;;;;;;;4966:33;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:33::i;:::-;5022:30;5032:9;:12;5042:1;5032:12;;;;;;;;;;;;;:19;5045:1;:5;;;5032:19;;;;;;;;;;;;;;;5022:30;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:9;:30::i;:::-;4777:294;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4740:346;;4374:724;5375:9;5155:279;;;;;;;;:::i;:::-;;;;;;;;;;;;;5110:339;;;;4185:1272;;;:::o;1654:97::-;1251:12:4;:10;:12::i;:::-;1240:23;;:7;:5;:7::i;:::-;:23;;;1232:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1735:7:5::1;1718:6;;:25;;;;;;;;;;;;;;;;;;1654:97:::0;:::o;1020:87:4:-;1066:7;1093:6;;;;;;;;;;;1086:13;;1020:87;:::o;817:58:5:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;1061:565::-;1180:5;1220:14;;1207:9;:27;;;1203:322;;;1251:9;1270:3;1263:4;:10;;;;:::i;:::-;1251:22;;;;1296:2;1292:1;:6;1288:226;;;1326:1;1319:8;;;;;1288:226;1357:2;1353:1;:6;1349:165;;;1387:1;1380:8;;;;;1349:165;1418:2;1414:1;:6;1410:104;;;1448:1;1441:8;;;;;1410:104;1497:1;1490:8;;;;;1203:322;1537:11;1551:17;:28;1569:9;1551:28;;;;;;;;;;;;;;;;;;;;;;;;;1537:42;;1612:5;1605:12;;:4;:12;;;;:::i;:::-;1592:26;;;1061:565;;;;;:::o;1759:196::-;1251:12:4;:10;:12::i;:::-;1240:23;;:7;:5;:7::i;:::-;:23;;;1232:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1901:7:5::1;;1888:10;:20;;;;;;;:::i;:::-;;1936:11;;1919:14;:28;;;;;;;:::i;:::-;;1759:196:::0;;;;:::o;9307:1117::-;9408:13;9439:23;9465:6;;;;;;;;;;;:21;;;9487:7;9465:30;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9439:56;;9508:22;9620:1;:14;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9683:18;:7;:16;:18::i;:::-;10047:31;10060:16;10068:7;10060;:16::i;:::-;10047:6;:31::i;:::-;10134:26;10152:7;10134:17;:26::i;:::-;9554:643;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;9508:700;;10359:23;10372:8;10359:6;:23::i;:::-;10266:135;;;;;;;;:::i;:::-;;;;;;;;;;;;;10221:195;;;;9307:1117;;;:::o;2231:429::-;1251:12:4;:10;:12::i;:::-;1240:23;;:7;:5;:7::i;:::-;:23;;;1232:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2413:6:5::1;;:13;;2394:8;;:15;;:32;2386:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;2466:9;2461:192;2485:6;;:13;;2481:1;:17;2461:192;;;2556:85;;;;;;;;2580:6;;2587:1;2580:9;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:14;;;;;;;;:::i;:::-;2556:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2613:6;;2620:1;2613:9;;;;;;;:::i;:::-;;;;;;;;;;;;;:::i;:::-;:13;;;;;;;;:::i;:::-;2556:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;2520:9:::1;:20;2530:9;2520:20;;;;;;;;;;;;;;;:33;2541:8;;2550:1;2541:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;2520:33;;;;;;;;;;;;;;;:121;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;2500:3;;;;;:::i;:::-;;;;2461:192;;;;2231:429:::0;;;;;:::o;882:48::-;;;;;;;;;;;;;;;;;;;;;;:::o;1920:229:4:-;1251:12;:10;:12::i;:::-;1240:23;;:7;:5;:7::i;:::-;:23;;;1232:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2043:1:::1;2023:22;;:8;:22;;;;2001:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;2122:19;2132:8;2122:9;:19::i;:::-;1920:229:::0;:::o;600:98:0:-;653:7;680:10;673:17;;600:98;:::o;5766:420:5:-;5894:13;6044:9;6112:5;5965:198;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5920:258;;5766:420;;;;:::o;2157:173:4:-;2213:16;2232:6;;;;;;;;;;;2213:25;;2258:8;2249:6;;:17;;;;;;;;;;;;;;;;;;2313:8;2282:40;;2303:8;2282:40;;;;;;;;;;;;2202:128;2157:173;:::o;3107:443:5:-;3196:13;3471:5;:9;;;3272:255;;;;;;;;:::i;:::-;;;;;;;;;;;;;3227:315;;3107:443;;;:::o;3558:399::-;3614:13;3884:3;3685:249;;;;;;;;:::i;:::-;;;;;;;;;;;;;3640:309;;3558:399;;;:::o;8771:723:3:-;8827:13;9057:1;9048:5;:10;9044:53;;;9075:10;;;;;;;;;;;;;;;;;;;;;9044:53;9107:12;9122:5;9107:20;;9138:14;9163:78;9178:1;9170:4;:9;9163:78;;9196:8;;;;;:::i;:::-;;;;9227:2;9219:10;;;;;:::i;:::-;;;9163:78;;;9251:19;9283:6;9273:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9251:39;;9301:154;9317:1;9308:5;:10;9301:154;;9345:1;9335:11;;;;;:::i;:::-;;;9412:2;9404:5;:10;;;;:::i;:::-;9391:2;:24;;;;:::i;:::-;9378:39;;9361:6;9368;9361:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;9441:2;9432:11;;;;;:::i;:::-;;;9301:154;;;9479:6;9465:21;;;;;8771:723;;;;:::o;10596:2256:5:-;10654:13;10699:1;10684:4;:11;:16;10680:31;;;10702:9;;;;;;;;;;;;;;;;10680:31;10763:19;10785:5;;;;;;;;;;;;;;;;;10763:27;;10842:18;10888:1;10883;10869:4;:11;:15;;;;:::i;:::-;10868:21;;;;:::i;:::-;10863:1;:27;;;;:::i;:::-;10842:48;;10973:20;11020:2;11007:10;:15;;;;:::i;:::-;10996:27;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10973:50;;11120:10;11112:6;11105:26;11215:1;11208:5;11204:13;11274:4;11325;11319:11;11310:7;11306:25;11421:2;11413:6;11409:15;11494:1045;11529:6;11520:7;11517:19;11494:1045;;;11599:1;11590:7;11586:15;11575:26;;11673:7;11667:14;11850:4;11842:5;11838:2;11834:14;11830:25;11820:8;11816:40;11810:47;11805:3;11801:57;11769:9;11740:137;11923:1;11912:9;11908:17;11895:30;;12053:4;12045:5;12041:2;12037:14;12033:25;12023:8;12019:40;12013:47;12008:3;12004:57;11972:9;11943:137;12126:1;12115:9;12111:17;12098:30;;12255:4;12247:5;12244:1;12240:13;12236:24;12226:8;12222:39;12216:46;12211:3;12207:56;12175:9;12146:136;12328:1;12317:9;12313:17;12300:30;;12449:4;12442:5;12438:16;12428:8;12424:31;12418:38;12413:3;12409:48;12377:9;12348:128;12522:1;12511:9;12507:17;12494:30;;11556:983;11494:1045;;;12612:1;12605:4;12599:11;12595:19;12633:1;12628:84;;;;12731:1;12726:82;;;;12588:220;;12628:84;12689:6;12684:3;12680:16;12676:1;12665:9;12661:17;12654:43;12628:84;;12726:82;12787:4;12782:3;12778:14;12774:1;12763:9;12759:17;12752:41;12588:220;;11045:1774;;;;12838:6;12831:13;;;;;10596:2256;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;22:716:6:-;116:5;141:79;157:62;212:6;157:62;:::i;:::-;141:79;:::i;:::-;132:88;;240:5;269:6;262:5;255:21;303:4;296:5;292:16;285:23;;329:6;379:3;371:4;363:6;359:17;354:3;350:27;347:36;344:143;;;398:79;;:::i;:::-;344:143;511:1;496:236;521:6;518:1;515:13;496:236;;;589:3;618:35;649:3;637:10;618:35;:::i;:::-;613:3;606:48;683:4;678:3;674:14;667:21;;717:4;712:3;708:14;701:21;;556:176;543:1;540;536:9;531:14;;496:236;;;500:14;122:616;;22:716;;;;;:::o;744:139::-;790:5;828:6;815:20;806:29;;844:33;871:5;844:33;:::i;:::-;744:139;;;;:::o;918:592::-;1015:8;1025:6;1075:3;1068:4;1060:6;1056:17;1052:27;1042:122;;1083:79;;:::i;:::-;1042:122;1196:6;1183:20;1173:30;;1226:18;1218:6;1215:30;1212:117;;;1248:79;;:::i;:::-;1212:117;1362:4;1354:6;1350:17;1338:29;;1416:3;1408:4;1400:6;1396:17;1386:8;1382:32;1379:41;1376:128;;;1423:79;;:::i;:::-;1376:128;918:592;;;;;:::o;1531:566::-;1602:8;1612:6;1662:3;1655:4;1647:6;1643:17;1639:27;1629:122;;1670:79;;:::i;:::-;1629:122;1783:6;1770:20;1760:30;;1813:18;1805:6;1802:30;1799:117;;;1835:79;;:::i;:::-;1799:117;1949:4;1941:6;1937:17;1925:29;;2003:3;1995:4;1987:6;1983:17;1973:8;1969:32;1966:41;1963:128;;;2010:79;;:::i;:::-;1963:128;1531:566;;;;;:::o;2118:366::-;2187:5;2236:3;2229:4;2221:6;2217:17;2213:27;2203:122;;2244:79;;:::i;:::-;2203:122;2361:6;2348:20;2386:92;2474:3;2466:6;2459:4;2451:6;2447:17;2386:92;:::i;:::-;2377:101;;2193:291;2118:366;;;;:::o;2490:137::-;2544:5;2575:6;2569:13;2560:22;;2591:30;2615:5;2591:30;:::i;:::-;2490:137;;;;:::o;2647:553::-;2705:8;2715:6;2765:3;2758:4;2750:6;2746:17;2742:27;2732:122;;2773:79;;:::i;:::-;2732:122;2886:6;2873:20;2863:30;;2916:18;2908:6;2905:30;2902:117;;;2938:79;;:::i;:::-;2902:117;3052:4;3044:6;3040:17;3028:29;;3106:3;3098:4;3090:6;3086:17;3076:8;3072:32;3069:41;3066:128;;;3113:79;;:::i;:::-;3066:128;2647:553;;;;;:::o;3235:1824::-;3317:5;3361:6;3349:9;3344:3;3340:19;3336:32;3333:119;;;3371:79;;:::i;:::-;3333:119;3470:23;3486:6;3470:23;:::i;:::-;3461:32;;3560:1;3600:57;3653:3;3644:6;3633:9;3629:22;3600:57;:::i;:::-;3593:4;3586:5;3582:16;3575:83;3503:166;3730:2;3771:58;3825:3;3816:6;3805:9;3801:22;3771:58;:::i;:::-;3764:4;3757:5;3753:16;3746:84;3679:162;3900:2;3941:58;3995:3;3986:6;3975:9;3971:22;3941:58;:::i;:::-;3934:4;3927:5;3923:16;3916:84;3851:160;4074:2;4115:58;4169:3;4160:6;4149:9;4145:22;4115:58;:::i;:::-;4108:4;4101:5;4097:16;4090:84;4021:164;4243:3;4285:58;4339:3;4330:6;4319:9;4315:22;4285:58;:::i;:::-;4278:4;4271:5;4267:16;4260:84;4195:160;4417:3;4459:58;4513:3;4504:6;4493:9;4489:22;4459:58;:::i;:::-;4452:4;4445:5;4441:16;4434:84;4365:164;4588:3;4630:58;4684:3;4675:6;4664:9;4660:22;4630:58;:::i;:::-;4623:4;4616:5;4612:16;4605:84;4539:161;4761:3;4803:58;4857:3;4848:6;4837:9;4833:22;4803:58;:::i;:::-;4796:4;4789:5;4785:16;4778:84;4710:163;4938:3;4982:58;5036:3;5027:6;5016:9;5012:22;4982:58;:::i;:::-;4973:6;4966:5;4962:18;4955:86;4883:169;3235:1824;;;;:::o;5065:137::-;5110:5;5148:6;5135:20;5126:29;;5164:32;5190:5;5164:32;:::i;:::-;5065:137;;;;:::o;5208:139::-;5254:5;5292:6;5279:20;5270:29;;5308:33;5335:5;5308:33;:::i;:::-;5208:139;;;;:::o;5353:143::-;5410:5;5441:6;5435:13;5426:22;;5457:33;5484:5;5457:33;:::i;:::-;5353:143;;;;:::o;5502:135::-;5546:5;5584:6;5571:20;5562:29;;5600:31;5625:5;5600:31;:::i;:::-;5502:135;;;;:::o;5643:139::-;5698:5;5729:6;5723:13;5714:22;;5745:31;5770:5;5745:31;:::i;:::-;5643:139;;;;:::o;5788:329::-;5847:6;5896:2;5884:9;5875:7;5871:23;5867:32;5864:119;;;5902:79;;:::i;:::-;5864:119;6022:1;6047:53;6092:7;6083:6;6072:9;6068:22;6047:53;:::i;:::-;6037:63;;5993:117;5788:329;;;;:::o;6123:886::-;6237:6;6245;6294:2;6282:9;6273:7;6269:23;6265:32;6262:119;;;6300:79;;:::i;:::-;6262:119;6448:1;6437:9;6433:17;6420:31;6478:18;6470:6;6467:30;6464:117;;;6500:79;;:::i;:::-;6464:117;6605:76;6673:7;6664:6;6653:9;6649:22;6605:76;:::i;:::-;6595:86;;6391:300;6758:2;6747:9;6743:18;6730:32;6789:18;6781:6;6778:30;6775:117;;;6811:79;;:::i;:::-;6775:117;6916:76;6984:7;6975:6;6964:9;6960:22;6916:76;:::i;:::-;6906:86;;6701:301;6123:886;;;;;:::o;7015:874::-;7107:6;7115;7123;7131;7180:2;7168:9;7159:7;7155:23;7151:32;7148:119;;;7186:79;;:::i;:::-;7148:119;7334:1;7323:9;7319:17;7306:31;7364:18;7356:6;7353:30;7350:117;;;7386:79;;:::i;:::-;7350:117;7499:65;7556:7;7547:6;7536:9;7532:22;7499:65;:::i;:::-;7481:83;;;;7277:297;7641:2;7630:9;7626:18;7613:32;7672:18;7664:6;7661:30;7658:117;;;7694:79;;:::i;:::-;7658:117;7807:65;7864:7;7855:6;7844:9;7840:22;7807:65;:::i;:::-;7789:83;;;;7584:298;7015:874;;;;;;;:::o;7895:396::-;7987:6;8036:3;8024:9;8015:7;8011:23;8007:33;8004:120;;;8043:79;;:::i;:::-;8004:120;8163:1;8188:86;8266:7;8257:6;8246:9;8242:22;8188:86;:::i;:::-;8178:96;;8134:150;7895:396;;;;:::o;8297:468::-;8362:6;8370;8419:2;8407:9;8398:7;8394:23;8390:32;8387:119;;;8425:79;;:::i;:::-;8387:119;8545:1;8570:52;8614:7;8605:6;8594:9;8590:22;8570:52;:::i;:::-;8560:62;;8516:116;8671:2;8697:51;8740:7;8731:6;8720:9;8716:22;8697:51;:::i;:::-;8687:61;;8642:116;8297:468;;;;;:::o;8771:329::-;8830:6;8879:2;8867:9;8858:7;8854:23;8850:32;8847:119;;;8885:79;;:::i;:::-;8847:119;9005:1;9030:53;9075:7;9066:6;9055:9;9051:22;9030:53;:::i;:::-;9020:63;;8976:117;8771:329;;;;:::o;9106:351::-;9176:6;9225:2;9213:9;9204:7;9200:23;9196:32;9193:119;;;9231:79;;:::i;:::-;9193:119;9351:1;9376:64;9432:7;9423:6;9412:9;9408:22;9376:64;:::i;:::-;9366:74;;9322:128;9106:351;;;;:::o;9463:325::-;9520:6;9569:2;9557:9;9548:7;9544:23;9540:32;9537:119;;;9575:79;;:::i;:::-;9537:119;9695:1;9720:51;9763:7;9754:6;9743:9;9739:22;9720:51;:::i;:::-;9710:61;;9666:115;9463:325;;;;:::o;9794:1119::-;9945:6;9953;9961;9969;9977;10026:2;10014:9;10005:7;10001:23;9997:32;9994:119;;;10032:79;;:::i;:::-;9994:119;10152:1;10177:51;10220:7;10211:6;10200:9;10196:22;10177:51;:::i;:::-;10167:61;;10123:115;10305:2;10294:9;10290:18;10277:32;10336:18;10328:6;10325:30;10322:117;;;10358:79;;:::i;:::-;10322:117;10471:78;10541:7;10532:6;10521:9;10517:22;10471:78;:::i;:::-;10453:96;;;;10248:311;10626:2;10615:9;10611:18;10598:32;10657:18;10649:6;10646:30;10643:117;;;10679:79;;:::i;:::-;10643:117;10792:104;10888:7;10879:6;10868:9;10864:22;10792:104;:::i;:::-;10774:122;;;;10569:337;9794:1119;;;;;;;;:::o;10919:466::-;10983:6;10991;11040:2;11028:9;11019:7;11015:23;11011:32;11008:119;;;11046:79;;:::i;:::-;11008:119;11166:1;11191:51;11234:7;11225:6;11214:9;11210:22;11191:51;:::i;:::-;11181:61;;11137:115;11291:2;11317:51;11360:7;11351:6;11340:9;11336:22;11317:51;:::i;:::-;11307:61;;11262:116;10919:466;;;;;:::o;11391:118::-;11478:24;11496:5;11478:24;:::i;:::-;11473:3;11466:37;11391:118;;:::o;11515:159::-;11616:51;11661:5;11616:51;:::i;:::-;11611:3;11604:64;11515:159;;:::o;11680:364::-;11768:3;11796:39;11829:5;11796:39;:::i;:::-;11851:71;11915:6;11910:3;11851:71;:::i;:::-;11844:78;;11931:52;11976:6;11971:3;11964:4;11957:5;11953:16;11931:52;:::i;:::-;12008:29;12030:6;12008:29;:::i;:::-;12003:3;11999:39;11992:46;;11772:272;11680:364;;;;:::o;12050:377::-;12156:3;12184:39;12217:5;12184:39;:::i;:::-;12239:89;12321:6;12316:3;12239:89;:::i;:::-;12232:96;;12337:52;12382:6;12377:3;12370:4;12363:5;12359:16;12337:52;:::i;:::-;12414:6;12409:3;12405:16;12398:23;;12160:267;12050:377;;;;:::o;12433:404::-;12593:3;12614:86;12696:3;12691;12614:86;:::i;:::-;12607:93;;12709;12798:3;12709:93;:::i;:::-;12827:3;12822;12818:13;12811:20;;12433:404;;;:::o;12843:::-;13003:3;13024:86;13106:3;13101;13024:86;:::i;:::-;13017:93;;13119;13208:3;13119:93;:::i;:::-;13237:3;13232;13228:13;13221:20;;12843:404;;;:::o;13253:366::-;13395:3;13416:67;13480:2;13475:3;13416:67;:::i;:::-;13409:74;;13492:93;13581:3;13492:93;:::i;:::-;13610:2;13605:3;13601:12;13594:19;;13253:366;;;:::o;13625:400::-;13785:3;13806:84;13888:1;13883:3;13806:84;:::i;:::-;13799:91;;13899:93;13988:3;13899:93;:::i;:::-;14017:1;14012:3;14008:11;14001:18;;13625:400;;;:::o;14031:402::-;14191:3;14212:85;14294:2;14289:3;14212:85;:::i;:::-;14205:92;;14306:93;14395:3;14306:93;:::i;:::-;14424:2;14419:3;14415:12;14408:19;;14031:402;;;:::o;14439:400::-;14599:3;14620:84;14702:1;14697:3;14620:84;:::i;:::-;14613:91;;14713:93;14802:3;14713:93;:::i;:::-;14831:1;14826:3;14822:11;14815:18;;14439:400;;;:::o;14845:366::-;14987:3;15008:67;15072:2;15067:3;15008:67;:::i;:::-;15001:74;;15084:93;15173:3;15084:93;:::i;:::-;15202:2;15197:3;15193:12;15186:19;;14845:366;;;:::o;15217:400::-;15377:3;15398:84;15480:1;15475:3;15398:84;:::i;:::-;15391:91;;15491:93;15580:3;15491:93;:::i;:::-;15609:1;15604:3;15600:11;15593:18;;15217:400;;;:::o;15623:402::-;15783:3;15804:85;15886:2;15881:3;15804:85;:::i;:::-;15797:92;;15898:93;15987:3;15898:93;:::i;:::-;16016:2;16011:3;16007:12;16000:19;;15623:402;;;:::o;16031:400::-;16191:3;16212:84;16294:1;16289:3;16212:84;:::i;:::-;16205:91;;16305:93;16394:3;16305:93;:::i;:::-;16423:1;16418:3;16414:11;16407:18;;16031:400;;;:::o;16437:402::-;16597:3;16618:85;16700:2;16695:3;16618:85;:::i;:::-;16611:92;;16712:93;16801:3;16712:93;:::i;:::-;16830:2;16825:3;16821:12;16814:19;;16437:402;;;:::o;16845:366::-;16987:3;17008:67;17072:2;17067:3;17008:67;:::i;:::-;17001:74;;17084:93;17173:3;17084:93;:::i;:::-;17202:2;17197:3;17193:12;17186:19;;16845:366;;;:::o;17217:404::-;17377:3;17398:86;17480:3;17475;17398:86;:::i;:::-;17391:93;;17493;17582:3;17493:93;:::i;:::-;17611:3;17606;17602:13;17595:20;;17217:404;;;:::o;17627:400::-;17787:3;17808:84;17890:1;17885:3;17808:84;:::i;:::-;17801:91;;17901:93;17990:3;17901:93;:::i;:::-;18019:1;18014:3;18010:11;18003:18;;17627:400;;;:::o;18033:402::-;18193:3;18214:85;18296:2;18291:3;18214:85;:::i;:::-;18207:92;;18308:93;18397:3;18308:93;:::i;:::-;18426:2;18421:3;18417:12;18410:19;;18033:402;;;:::o;18441:::-;18601:3;18622:85;18704:2;18699:3;18622:85;:::i;:::-;18615:92;;18716:93;18805:3;18716:93;:::i;:::-;18834:2;18829:3;18825:12;18818:19;;18441:402;;;:::o;18849:400::-;19009:3;19030:84;19112:1;19107:3;19030:84;:::i;:::-;19023:91;;19123:93;19212:3;19123:93;:::i;:::-;19241:1;19236:3;19232:11;19225:18;;18849:400;;;:::o;19255:402::-;19415:3;19436:85;19518:2;19513:3;19436:85;:::i;:::-;19429:92;;19530:93;19619:3;19530:93;:::i;:::-;19648:2;19643:3;19639:12;19632:19;;19255:402;;;:::o;19663:::-;19823:3;19844:85;19926:2;19921:3;19844:85;:::i;:::-;19837:92;;19938:93;20027:3;19938:93;:::i;:::-;20056:2;20051:3;20047:12;20040:19;;19663:402;;;:::o;20071:400::-;20231:3;20252:84;20334:1;20329:3;20252:84;:::i;:::-;20245:91;;20345:93;20434:3;20345:93;:::i;:::-;20463:1;20458:3;20454:11;20447:18;;20071:400;;;:::o;20477:118::-;20564:24;20582:5;20564:24;:::i;:::-;20559:3;20552:37;20477:118;;:::o;20601:112::-;20684:22;20700:5;20684:22;:::i;:::-;20679:3;20672:35;20601:112;;:::o;20719:755::-;20995:3;21017:95;21108:3;21099:6;21017:95;:::i;:::-;21010:102;;21129:95;21220:3;21211:6;21129:95;:::i;:::-;21122:102;;21241:95;21332:3;21323:6;21241:95;:::i;:::-;21234:102;;21353:95;21444:3;21435:6;21353:95;:::i;:::-;21346:102;;21465:3;21458:10;;20719:755;;;;;;;:::o;21480:915::-;21804:3;21826:95;21917:3;21908:6;21826:95;:::i;:::-;21819:102;;21938:95;22029:3;22020:6;21938:95;:::i;:::-;21931:102;;22050:95;22141:3;22132:6;22050:95;:::i;:::-;22043:102;;22162:95;22253:3;22244:6;22162:95;:::i;:::-;22155:102;;22274:95;22365:3;22356:6;22274:95;:::i;:::-;22267:102;;22386:3;22379:10;;21480:915;;;;;;;;:::o;22401:1393::-;22932:3;22954:95;23045:3;23036:6;22954:95;:::i;:::-;22947:102;;23066:148;23210:3;23066:148;:::i;:::-;23059:155;;23231:95;23322:3;23313:6;23231:95;:::i;:::-;23224:102;;23343:148;23487:3;23343:148;:::i;:::-;23336:155;;23508:95;23599:3;23590:6;23508:95;:::i;:::-;23501:102;;23620:148;23764:3;23620:148;:::i;:::-;23613:155;;23785:3;23778:10;;22401:1393;;;;;;:::o;23800:2245::-;24629:3;24651:95;24742:3;24733:6;24651:95;:::i;:::-;24644:102;;24763:148;24907:3;24763:148;:::i;:::-;24756:155;;24928:95;25019:3;25010:6;24928:95;:::i;:::-;24921:102;;25040:148;25184:3;25040:148;:::i;:::-;25033:155;;25205:95;25296:3;25287:6;25205:95;:::i;:::-;25198:102;;25317:148;25461:3;25317:148;:::i;:::-;25310:155;;25482:95;25573:3;25564:6;25482:95;:::i;:::-;25475:102;;25594:148;25738:3;25594:148;:::i;:::-;25587:155;;25759:95;25850:3;25841:6;25759:95;:::i;:::-;25752:102;;25871:148;26015:3;25871:148;:::i;:::-;25864:155;;26036:3;26029:10;;23800:2245;;;;;;;;:::o;26051:807::-;26385:3;26407:148;26551:3;26407:148;:::i;:::-;26400:155;;26572:95;26663:3;26654:6;26572:95;:::i;:::-;26565:102;;26684:148;26828:3;26684:148;:::i;:::-;26677:155;;26849:3;26842:10;;26051:807;;;;:::o;26864:1233::-;27347:3;27369:148;27513:3;27369:148;:::i;:::-;27362:155;;27534:95;27625:3;27616:6;27534:95;:::i;:::-;27527:102;;27646:148;27790:3;27646:148;:::i;:::-;27639:155;;27811:95;27902:3;27893:6;27811:95;:::i;:::-;27804:102;;27923:148;28067:3;27923:148;:::i;:::-;27916:155;;28088:3;28081:10;;26864:1233;;;;;:::o;28103:807::-;28437:3;28459:148;28603:3;28459:148;:::i;:::-;28452:155;;28624:95;28715:3;28706:6;28624:95;:::i;:::-;28617:102;;28736:148;28880:3;28736:148;:::i;:::-;28729:155;;28901:3;28894:10;;28103:807;;;;:::o;28916:1659::-;29548:3;29570:148;29714:3;29570:148;:::i;:::-;29563:155;;29735:95;29826:3;29817:6;29735:95;:::i;:::-;29728:102;;29847:148;29991:3;29847:148;:::i;:::-;29840:155;;30012:95;30103:3;30094:6;30012:95;:::i;:::-;30005:102;;30124:148;30268:3;30124:148;:::i;:::-;30117:155;;30289:95;30380:3;30371:6;30289:95;:::i;:::-;30282:102;;30401:148;30545:3;30401:148;:::i;:::-;30394:155;;30566:3;30559:10;;28916:1659;;;;;;:::o;30581:1819::-;31261:3;31283:148;31427:3;31283:148;:::i;:::-;31276:155;;31448:95;31539:3;31530:6;31448:95;:::i;:::-;31441:102;;31560:95;31651:3;31642:6;31560:95;:::i;:::-;31553:102;;31672:148;31816:3;31672:148;:::i;:::-;31665:155;;31837:95;31928:3;31919:6;31837:95;:::i;:::-;31830:102;;31949:148;32093:3;31949:148;:::i;:::-;31942:155;;32114:95;32205:3;32196:6;32114:95;:::i;:::-;32107:102;;32226:148;32370:3;32226:148;:::i;:::-;32219:155;;32391:3;32384:10;;30581:1819;;;;;;;:::o;32406:541::-;32639:3;32661:148;32805:3;32661:148;:::i;:::-;32654:155;;32826:95;32917:3;32908:6;32826:95;:::i;:::-;32819:102;;32938:3;32931:10;;32406:541;;;;:::o;32953:222::-;33046:4;33084:2;33073:9;33069:18;33061:26;;33097:71;33165:1;33154:9;33150:17;33141:6;33097:71;:::i;:::-;32953:222;;;;:::o;33181:250::-;33288:4;33326:2;33315:9;33311:18;33303:26;;33339:85;33421:1;33410:9;33406:17;33397:6;33339:85;:::i;:::-;33181:250;;;;:::o;33437:313::-;33550:4;33588:2;33577:9;33573:18;33565:26;;33637:9;33631:4;33627:20;33623:1;33612:9;33608:17;33601:47;33665:78;33738:4;33729:6;33665:78;:::i;:::-;33657:86;;33437:313;;;;:::o;33756:514::-;33917:4;33955:2;33944:9;33940:18;33932:26;;34004:9;33998:4;33994:20;33990:1;33979:9;33975:17;33968:47;34032:78;34105:4;34096:6;34032:78;:::i;:::-;34024:86;;34157:9;34151:4;34147:20;34142:2;34131:9;34127:18;34120:48;34185:78;34258:4;34249:6;34185:78;:::i;:::-;34177:86;;33756:514;;;;;:::o;34276:419::-;34442:4;34480:2;34469:9;34465:18;34457:26;;34529:9;34523:4;34519:20;34515:1;34504:9;34500:17;34493:47;34557:131;34683:4;34557:131;:::i;:::-;34549:139;;34276:419;;;:::o;34701:::-;34867:4;34905:2;34894:9;34890:18;34882:26;;34954:9;34948:4;34944:20;34940:1;34929:9;34925:17;34918:47;34982:131;35108:4;34982:131;:::i;:::-;34974:139;;34701:419;;;:::o;35126:::-;35292:4;35330:2;35319:9;35315:18;35307:26;;35379:9;35373:4;35369:20;35365:1;35354:9;35350:17;35343:47;35407:131;35533:4;35407:131;:::i;:::-;35399:139;;35126:419;;;:::o;35551:222::-;35644:4;35682:2;35671:9;35667:18;35659:26;;35695:71;35763:1;35752:9;35748:17;35739:6;35695:71;:::i;:::-;35551:222;;;;:::o;35779:214::-;35868:4;35906:2;35895:9;35891:18;35883:26;;35919:67;35983:1;35972:9;35968:17;35959:6;35919:67;:::i;:::-;35779:214;;;;:::o;35999:725::-;36077:4;36083:6;36139:11;36126:25;36239:1;36233:4;36229:12;36218:8;36202:14;36198:29;36194:48;36174:18;36170:73;36160:168;;36247:79;;:::i;:::-;36160:168;36359:18;36349:8;36345:33;36337:41;;36411:4;36398:18;36388:28;;36439:18;36431:6;36428:30;36425:117;;;36461:79;;:::i;:::-;36425:117;36569:2;36563:4;36559:13;36551:21;;36626:4;36618:6;36614:17;36598:14;36594:38;36588:4;36584:49;36581:136;;;36636:79;;:::i;:::-;36581:136;36090:634;35999:725;;;;;:::o;36730:390::-;36820:4;36874:11;36861:25;36974:1;36968:4;36964:12;36953:8;36937:14;36933:29;36929:48;36909:18;36905:73;36895:168;;36982:79;;:::i;:::-;36895:168;37094:18;37084:8;37080:33;37072:41;;36825:295;36730:390;;;;:::o;37126:129::-;37160:6;37187:20;;:::i;:::-;37177:30;;37216:33;37244:4;37236:6;37216:33;:::i;:::-;37126:129;;;:::o;37261:75::-;37294:6;37327:2;37321:9;37311:19;;37261:75;:::o;37342:309::-;37417:4;37507:18;37499:6;37496:30;37493:56;;;37529:18;;:::i;:::-;37493:56;37579:4;37571:6;37567:17;37559:25;;37639:4;37633;37629:15;37621:23;;37342:309;;;:::o;37657:99::-;37709:6;37743:5;37737:12;37727:22;;37657:99;;;:::o;37762:169::-;37846:11;37880:6;37875:3;37868:19;37920:4;37915:3;37911:14;37896:29;;37762:169;;;;:::o;37937:148::-;38039:11;38076:3;38061:18;;37937:148;;;;:::o;38091:305::-;38131:3;38150:20;38168:1;38150:20;:::i;:::-;38145:25;;38184:20;38202:1;38184:20;:::i;:::-;38179:25;;38338:1;38270:66;38266:74;38263:1;38260:81;38257:107;;;38344:18;;:::i;:::-;38257:107;38388:1;38385;38381:9;38374:16;;38091:305;;;;:::o;38402:185::-;38442:1;38459:20;38477:1;38459:20;:::i;:::-;38454:25;;38493:20;38511:1;38493:20;:::i;:::-;38488:25;;38532:1;38522:35;;38537:18;;:::i;:::-;38522:35;38579:1;38576;38572:9;38567:14;;38402:185;;;;:::o;38593:348::-;38633:7;38656:20;38674:1;38656:20;:::i;:::-;38651:25;;38690:20;38708:1;38690:20;:::i;:::-;38685:25;;38878:1;38810:66;38806:74;38803:1;38800:81;38795:1;38788:9;38781:17;38777:105;38774:131;;;38885:18;;:::i;:::-;38774:131;38933:1;38930;38926:9;38915:20;;38593:348;;;;:::o;38947:191::-;38987:4;39007:20;39025:1;39007:20;:::i;:::-;39002:25;;39041:20;39059:1;39041:20;:::i;:::-;39036:25;;39080:1;39077;39074:8;39071:34;;;39085:18;;:::i;:::-;39071:34;39130:1;39127;39123:9;39115:17;;38947:191;;;;:::o;39144:96::-;39181:7;39210:24;39228:5;39210:24;:::i;:::-;39199:35;;39144:96;;;:::o;39246:90::-;39280:7;39323:5;39316:13;39309:21;39298:32;;39246:90;;;:::o;39342:89::-;39378:7;39418:6;39411:5;39407:18;39396:29;;39342:89;;;:::o;39437:126::-;39474:7;39514:42;39507:5;39503:54;39492:65;;39437:126;;;:::o;39569:77::-;39606:7;39635:5;39624:16;;39569:77;;;:::o;39652:86::-;39687:7;39727:4;39720:5;39716:16;39705:27;;39652:86;;;:::o;39744:140::-;39808:9;39841:37;39872:5;39841:37;:::i;:::-;39828:50;;39744:140;;;:::o;39890:126::-;39940:9;39973:37;40004:5;39973:37;:::i;:::-;39960:50;;39890:126;;;:::o;40022:113::-;40072:9;40105:24;40123:5;40105:24;:::i;:::-;40092:37;;40022:113;;;:::o;40141:307::-;40209:1;40219:113;40233:6;40230:1;40227:13;40219:113;;;40318:1;40313:3;40309:11;40303:18;40299:1;40294:3;40290:11;40283:39;40255:2;40252:1;40248:10;40243:15;;40219:113;;;40350:6;40347:1;40344:13;40341:101;;;40430:1;40421:6;40416:3;40412:16;40405:27;40341:101;40190:258;40141:307;;;:::o;40454:320::-;40498:6;40535:1;40529:4;40525:12;40515:22;;40582:1;40576:4;40572:12;40603:18;40593:81;;40659:4;40651:6;40647:17;40637:27;;40593:81;40721:2;40713:6;40710:14;40690:18;40687:38;40684:84;;;40740:18;;:::i;:::-;40684:84;40505:269;40454:320;;;:::o;40780:281::-;40863:27;40885:4;40863:27;:::i;:::-;40855:6;40851:40;40993:6;40981:10;40978:22;40957:18;40945:10;40942:34;40939:62;40936:88;;;41004:18;;:::i;:::-;40936:88;41044:10;41040:2;41033:22;40823:238;40780:281;;:::o;41067:233::-;41106:3;41129:24;41147:5;41129:24;:::i;:::-;41120:33;;41175:66;41168:5;41165:77;41162:103;;;41245:18;;:::i;:::-;41162:103;41292:1;41285:5;41281:13;41274:20;;41067:233;;;:::o;41306:173::-;41337:1;41354:19;41371:1;41354:19;:::i;:::-;41349:24;;41387:19;41404:1;41387:19;:::i;:::-;41382:24;;41425:1;41415:35;;41430:18;;:::i;:::-;41415:35;41471:1;41468;41464:9;41459:14;;41306:173;;;;:::o;41485:176::-;41517:1;41534:20;41552:1;41534:20;:::i;:::-;41529:25;;41568:20;41586:1;41568:20;:::i;:::-;41563:25;;41607:1;41597:35;;41612:18;;:::i;:::-;41597:35;41653:1;41650;41646:9;41641:14;;41485:176;;;;:::o;41667:170::-;41697:1;41714:18;41730:1;41714:18;:::i;:::-;41709:23;;41746:18;41762:1;41746:18;:::i;:::-;41741:23;;41783:1;41773:35;;41788:18;;:::i;:::-;41773:35;41829:1;41826;41822:9;41817:14;;41667:170;;;;:::o;41843:180::-;41891:77;41888:1;41881:88;41988:4;41985:1;41978:15;42012:4;42009:1;42002:15;42029:180;42077:77;42074:1;42067:88;42174:4;42171:1;42164:15;42198:4;42195:1;42188:15;42215:180;42263:77;42260:1;42253:88;42360:4;42357:1;42350:15;42384:4;42381:1;42374:15;42401:180;42449:77;42446:1;42439:88;42546:4;42543:1;42536:15;42570:4;42567:1;42560:15;42587:180;42635:77;42632:1;42625:88;42732:4;42729:1;42722:15;42756:4;42753:1;42746:15;42773:117;42882:1;42879;42872:12;42896:117;43005:1;43002;42995:12;43019:117;43128:1;43125;43118:12;43142:117;43251:1;43248;43241:12;43265:117;43374:1;43371;43364:12;43511:117;43620:1;43617;43610:12;43634:117;43743:1;43740;43733:12;43757:117;43866:1;43863;43856:12;43880:117;43989:1;43986;43979:12;44003:102;44044:6;44095:2;44091:7;44086:2;44079:5;44075:14;44071:28;44061:38;;44003:102;;;:::o;44111:859::-;44251:66;44247:1;44239:6;44235:14;44228:90;44352:34;44347:2;44339:6;44335:15;44328:59;44421:34;44416:2;44408:6;44404:15;44397:59;44490:34;44485:2;44477:6;44473:15;44466:59;44560:34;44554:3;44546:6;44542:16;44535:60;44630:34;44624:3;44616:6;44612:16;44605:60;44700:34;44694:3;44686:6;44682:16;44675:60;44770:34;44764:3;44756:6;44752:16;44745:60;44840:66;44834:3;44826:6;44822:16;44815:92;44942:20;44936:3;44928:6;44924:16;44917:46;44111:859;:::o;44976:562::-;45116:66;45112:1;45104:6;45100:14;45093:90;45217:66;45212:2;45204:6;45200:15;45193:91;45318:66;45313:2;45305:6;45301:15;45294:91;45419:66;45414:2;45406:6;45402:15;45395:91;45521:9;45515:3;45507:6;45503:16;45496:35;44976:562;:::o;45544:225::-;45684:34;45680:1;45672:6;45668:14;45661:58;45753:8;45748:2;45740:6;45736:15;45729:33;45544:225;:::o;45775:151::-;45915:3;45911:1;45903:6;45899:14;45892:27;45775:151;:::o;45932:214::-;46072:66;46068:1;46060:6;46056:14;46049:90;45932:214;:::o;46152:144::-;46288:4;46284:1;46276:6;46272:14;46265:28;46152:144;:::o;46298:159::-;46434:19;46430:1;46422:6;46418:14;46411:43;46298:159;:::o;46459:206::-;46595:66;46591:1;46583:6;46579:14;46572:90;46459:206;:::o;46667:::-;46803:66;46799:1;46791:6;46787:14;46780:90;46667:206;:::o;46875:139::-;47007:3;47003:1;46995:6;46991:14;46984:27;46875:139;:::o;47016:202::-;47148:66;47144:1;47136:6;47132:14;47125:90;47016:202;:::o;47220:170::-;47352:34;47348:1;47340:6;47336:14;47329:58;47220:170;:::o;47392:575::-;47524:66;47520:1;47512:6;47508:14;47501:90;47617:66;47612:2;47604:6;47600:15;47593:91;47710:66;47705:2;47697:6;47693:15;47686:91;47803:66;47798:2;47790:6;47786:15;47779:91;47897:66;47891:3;47883:6;47879:16;47872:92;47392:575;:::o;47969:139::-;48101:3;48097:1;48089:6;48085:14;48078:27;47969:139;:::o;48110:202::-;48242:66;48238:1;48230:6;48226:14;48219:90;48110:202;:::o;48314:::-;48446:66;48442:1;48434:6;48430:14;48423:90;48314:202;:::o;48518:::-;48650:66;48646:1;48638:6;48634:14;48627:90;48518:202;:::o;48722:167::-;48854:31;48850:1;48842:6;48838:14;48831:55;48722:167;:::o;48891:295::-;49023:66;49019:1;49011:6;49007:14;49000:90;49116:66;49111:2;49103:6;49099:15;49092:91;48891:295;:::o;49188:144::-;49320:8;49316:1;49308:6;49304:14;49297:32;49188:144;:::o;49334:110::-;49399:24;49417:5;49399:24;:::i;:::-;49392:5;49389:35;49379:63;;49438:1;49435;49428:12;49379:63;49334:110;:::o;49446:104::-;49508:21;49523:5;49508:21;:::i;:::-;49501:5;49498:32;49488:60;;49544:1;49541;49534:12;49488:60;49446:104;:::o;49552:108::-;49616:23;49633:5;49616:23;:::i;:::-;49609:5;49606:34;49596:62;;49654:1;49651;49644:12;49596:62;49552:108;:::o;49662:110::-;49727:24;49745:5;49727:24;:::i;:::-;49720:5;49717:35;49707:63;;49766:1;49763;49756:12;49707:63;49662:110;:::o;49774:106::-;49837:22;49853:5;49837:22;:::i;:::-;49830:5;49827:33;49817:61;;49874:1;49871;49864:12;49817:61;49774:106;:::o

Swarm Source

ipfs://f5ac7b252272cc11fc980af1311608dceafd09ebdea4aac1524dad178c6be5b8
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.