Ape Curtis Testnet

Contract

0xE6BD2c00F543bf00c076d14DAcaD4215886F81c3

Overview

APE Balance

Ape Curtis LogoApe Curtis LogoApe Curtis Logo0 APE

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Store Traits128178752024-11-21 23:12:46103 days ago1732230766IN
0xE6BD2c00...5886F81c3
0 APE0.00000340.01
Store Pixel Data128178742024-11-21 23:12:45103 days ago1732230765IN
0xE6BD2c00...5886F81c3
0 APE0.000018330.01
Store Traits128178722024-11-21 23:12:43103 days ago1732230763IN
0xE6BD2c00...5886F81c3
0 APE0.00000340.01
Store Pixel Data128178712024-11-21 23:12:42103 days ago1732230762IN
0xE6BD2c00...5886F81c3
0 APE0.000018330.01
Store Traits128178682024-11-21 23:12:41103 days ago1732230761IN
0xE6BD2c00...5886F81c3
0 APE0.00000340.01
Store Pixel Data128178672024-11-21 23:12:39103 days ago1732230759IN
0xE6BD2c00...5886F81c3
0 APE0.000018330.01
Store Traits128178632024-11-21 23:12:37103 days ago1732230757IN
0xE6BD2c00...5886F81c3
0 APE0.00000340.01
Store Pixel Data128178622024-11-21 23:12:36103 days ago1732230756IN
0xE6BD2c00...5886F81c3
0 APE0.000018330.01
Store Traits128178602024-11-21 23:12:35103 days ago1732230755IN
0xE6BD2c00...5886F81c3
0 APE0.00000340.01
Store Pixel Data128178582024-11-21 23:12:34103 days ago1732230754IN
0xE6BD2c00...5886F81c3
0 APE0.000018330.01
Store Traits128178562024-11-21 23:12:33103 days ago1732230753IN
0xE6BD2c00...5886F81c3
0 APE0.00000340.01
Store Pixel Data128178502024-11-21 23:12:31103 days ago1732230751IN
0xE6BD2c00...5886F81c3
0 APE0.000018330.01
Store Traits128178492024-11-21 23:12:30103 days ago1732230750IN
0xE6BD2c00...5886F81c3
0 APE0.00000340.01
Store Pixel Data128178482024-11-21 23:12:29103 days ago1732230749IN
0xE6BD2c00...5886F81c3
0 APE0.000018340.01
Store Traits128178462024-11-21 23:12:28103 days ago1732230748IN
0xE6BD2c00...5886F81c3
0 APE0.00000340.01
Store Pixel Data128178452024-11-21 23:12:27103 days ago1732230747IN
0xE6BD2c00...5886F81c3
0 APE0.000018340.01
Store Traits128178432024-11-21 23:12:25103 days ago1732230745IN
0xE6BD2c00...5886F81c3
0 APE0.00000340.01
Store Pixel Data128178402024-11-21 23:12:24103 days ago1732230744IN
0xE6BD2c00...5886F81c3
0 APE0.000018310.01
Store Traits128178372024-11-21 23:12:23103 days ago1732230743IN
0xE6BD2c00...5886F81c3
0 APE0.00000340.01
Store Pixel Data128178362024-11-21 23:12:21103 days ago1732230741IN
0xE6BD2c00...5886F81c3
0 APE0.000018330.01
Store Traits128178342024-11-21 23:12:19103 days ago1732230739IN
0xE6BD2c00...5886F81c3
0 APE0.00000340.01
Store Pixel Data128178332024-11-21 23:12:18103 days ago1732230738IN
0xE6BD2c00...5886F81c3
0 APE0.000018330.01

Parent Transaction Hash Block From To
View All Internal Transactions

Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
GobsDataSource

Compiler Version
v0.8.26+commit.8a97fa7a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license
/**
 *Submitted for verification at curtis.apescan.io on 2024-11-21
*/

/**
 *Submitted for verification at curtis.apescan.io on 2024-11-21
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/**
 * @title GobsDataSource
 * @notice Stores RGBA pixel data and generates SVGs for on-chain Goblin images.
 */
contract GobsDataSource {
    address payable internal deployer;
    bool private contractSealed = false;
    string internal constant SVG_HEADER = 'data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" version="1.2" viewBox="0 0 29 29"><rect width="100%" height="100%" fill="#0047B1"/>';
    string internal constant SVG_FOOTER = '</svg>';
    bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";


    struct Trait {
        string traitType;
        string value;
    }

    struct GobData {
        bytes pixelData; // Row-major RGBA data (29x29 pixels, 3364 bytes)
        Trait[] traits;  // Array of traits for the token
    }

    

    mapping(uint256 => GobData) private gobData; // Stores data for each Goblin

    modifier onlyDeployer() {
        require(msg.sender == deployer, "Only deployer.");
        _;
    }

    modifier unsealed() {
        require(!contractSealed, "Contract is sealed.");
        _;
    }

    constructor() {
        deployer = payable(msg.sender);
    }

    /**
     * @notice Seal the contract to prevent further modifications.
     */
    function sealContract() external onlyDeployer unsealed {
        contractSealed = true;
    }

    /**
     * @notice Store RGBA pixel data for a Goblin.
     * @param tokenId The ID of the Goblin (0 <= tokenId < 2222).
     * @param pixelData The RGBA data (row-major order, 29x29 pixels, 3364 bytes).
     */
    function storePixelData(uint256 tokenId, bytes memory pixelData) external onlyDeployer unsealed {
        require(tokenId < 2222, "Invalid tokenId");
        require(pixelData.length == 29 * 29 * 3, "Invalid pixel data length");
        gobData[tokenId].pixelData = pixelData;
    }

   function storeTraits(uint256 tokenId, Trait[] memory traits) external onlyDeployer {
        delete gobData[tokenId].traits; // Clear existing traits
        for (uint256 i = 0; i < traits.length; i++) {
            gobData[tokenId].traits.push(traits[i]);
        }
    }


    // Retrieve traits for a token
    function getTraits(uint256 tokenId) external view returns (string memory) {
        require(gobData[tokenId].traits.length > 0, "Traits not set");

        string memory jsonTraits = "[";

        for (uint256 i = 0; i < gobData[tokenId].traits.length; i++) {
            jsonTraits = string.concat(
                jsonTraits,
                '{"trait_type": "', gobData[tokenId].traits[i].traitType,
                '", "value": "', gobData[tokenId].traits[i].value, '"}'
            );

            if (i < gobData[tokenId].traits.length - 1) {
                jsonTraits = string.concat(jsonTraits, ",");
            }
        }

        jsonTraits = string.concat(jsonTraits, "]");
        return jsonTraits;
    }
    /**
     * @notice Retrieve RGB pixel data for a Goblin.
     * @param tokenId The ID of the Goblin.
     * @return The RGB pixel data.
     */
    function getGobData(uint256 tokenId) external view returns (bytes memory) {
        require(tokenId < 2222, "Invalid tokenId");
        require(gobData[tokenId].pixelData.length == 29 * 29 * 3, "Pixel data not set");
        return gobData[tokenId].pixelData;
    }

    /**
     * @notice Generate the SVG for a Goblin from its pixel data.
     * @param tokenId The ID of the Goblin.
     */
   function getGobSVG(uint256 tokenId) external view returns (string memory svg) {
    require(tokenId < 2222, "Invalid tokenId");
    bytes memory pixels = gobData[tokenId].pixelData;

    svg = "";
    require(pixels.length > 0, "Pixel data not set");

    // Pre-allocate space for the SVG (estimate size to reduce reallocations)
    // string memory svg = string(abi.encodePacked(SVG_HEADER));
    bytes memory buffer = new bytes(7);

    for (uint y = 0; y < 29; y++) {
        for (uint x = 0; x < 29; x++) {
            uint p = (y * 29 + x) * 3;
            if(pixels[p] == 0x00 && pixels[p + 1] == 0x47 && pixels[p + 2] == 0xb1){
                continue;
            }
            // Convert RGB values to hex
            buffer[0] = "#";
            for (uint i = 0; i < 3; i++) {
                uint8 value = uint8(pixels[p + i]);
                buffer[1 + i * 2] = _HEX_SYMBOLS[value >> 4];
                buffer[2 + i * 2] = _HEX_SYMBOLS[value & 0xf];
            }
            // Append the rect element
            svg = string.concat(svg, 
                '<rect x="', toString(x),
                '" y="', toString(y),
                '" width="1" height="1" fill="', string(buffer), '"/>');            
        }
    }

    svg = string.concat(SVG_HEADER,svg,SVG_FOOTER);
}


/// @dev Returns the base 10 decimal representation of `value`.
    function toString(uint256 value) internal pure returns (string memory str) {
        /// @solidity memory-safe-assembly
        assembly {
            // The maximum value of a uint256 contains 78 digits (1 byte per digit), but
            // we allocate 0xa0 bytes to keep the free memory pointer 32-byte word aligned.
            // We will need 1 word for the trailing zeros padding, 1 word for the length,
            // and 3 words for a maximum of 78 digits.
            str := add(mload(0x40), 0x80)
            // Update the free memory pointer to allocate.
            mstore(0x40, add(str, 0x20))
            // Zeroize the slot after the string.
            mstore(str, 0)

            // Cache the end of the memory to calculate the length later.
            let end := str

            let w := not(0) // Tsk.
            // We write the string from rightmost digit to leftmost digit.
            // The following is essentially a do-while loop that also handles the zero case.
            for { let temp := value } 1 {} {
                str := add(str, w) // `sub(str, 1)`.
                // Write the character to the pointer.
                // The ASCII index of the '0' character is 48.
                mstore8(str, add(48, mod(temp, 10)))
                // Keep dividing `temp` until zero.
                temp := div(temp, 10)
                if iszero(temp) { break }
            }

            let length := sub(end, str)
            // Move the pointer 32 bytes leftwards to make room for the length.
            str := sub(str, 0x20)
            // Store the length.
            mstore(str, length)
        }
    }
}

Contract ABI

API
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getGobData","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getGobSVG","outputs":[{"internalType":"string","name":"svg","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTraits","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sealContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"pixelData","type":"bytes"}],"name":"storePixelData","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"components":[{"internalType":"string","name":"traitType","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct GobsDataSource.Trait[]","name":"traits","type":"tuple[]"}],"name":"storeTraits","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60806040525f8060146101000a81548160ff0219169083151502179055503480156027575f80fd5b50335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611f6c806100745f395ff3fe608060405234801561000f575f80fd5b5060043610610060575f3560e01c80633efabdf41461006457806368bd580e14610094578063997c51d21461009e578063b44606f9146100ba578063dcd83a18146100ea578063e1dc076114610106575b5f80fd5b61007e60048036038101906100799190610ec8565b610136565b60405161008b9190610f63565b60405180910390f35b61009c6106aa565b005b6100b860048036038101906100b3919061121e565b6107a2565b005b6100d460048036038101906100cf9190610ec8565b6108ec565b6040516100e191906112ca565b60405180910390f35b61010460048036038101906100ff9190611388565b610a36565b005b610120600480360381019061011b9190610ec8565b610bc0565b60405161012d9190610f63565b60405180910390f35b60606108ae821061017c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101739061142c565b60405180910390fd5b5f60015f8481526020019081526020015f205f01805461019b90611477565b80601f01602080910402602001604051908101604052809291908181526020018280546101c790611477565b80156102125780601f106101e957610100808354040283529160200191610212565b820191905f5260205f20905b8154815290600101906020018083116101f557829003601f168201915b5050505050905060405180602001604052805f81525091505f81511161026d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610264906114f1565b60405180910390fd5b5f600767ffffffffffffffff81111561028957610288610f87565b5b6040519080825280601f01601f1916602001820160405280156102bb5781602001600182028036833780820191505090505b5090505f5b601d81101561062f575f5b601d811015610621575f600382601d856102e5919061153c565b6102ef919061157d565b6102f9919061153c565b90505f60f81b858281518110610312576103116115b0565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614801561039a5750604760f81b8560018361035a919061157d565b8151811061036b5761036a6115b0565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80156103f4575060b160f81b856002836103b4919061157d565b815181106103c5576103c46115b0565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b156103ff5750610614565b7f2300000000000000000000000000000000000000000000000000000000000000845f81518110610433576104326115b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b60038110156105d9575f86828461047a919061157d565b8151811061048b5761048a6115b0565b5b602001015160f81c60f81b60f81c90507f303132333435363738396162636465660000000000000000000000000000000060048260ff16901c60ff16601081106104d8576104d76115b0565b5b1a60f81b866002846104ea919061153c565b60016104f6919061157d565b81518110610507576105066115b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f3031323334353637383961626364656600000000000000000000000000000000600f821660ff166010811061056e5761056d6115b0565b5b1a60f81b86600284610580919061153c565b600261058c919061157d565b8151811061059d5761059c6115b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350508080600101915050610463565b50856105e483610d88565b6105ed85610d88565b8660405160200161060194939291906116af565b6040516020818303038152906040529550505b80806001019150506102cb565b5080806001019150506102c0565b506040518060c0016040528060938152602001611ea460939139836040518060400160405280600681526020017f3c2f7376673e000000000000000000000000000000000000000000000000000081525060405160200161069293929190611728565b60405160208183030381529060405292505050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e906117a2565b60405180910390fd5b5f60149054906101000a900460ff1615610786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077d9061180a565b60405180910390fd5b60015f60146101000a81548160ff021916908315150217905550565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461082f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610826906117a2565b60405180910390fd5b60015f8381526020019081526020015f206001015f61084e9190610dd7565b5f5b81518110156108e75760015f8481526020019081526020015f206001018282815181106108805761087f6115b0565b5b6020026020010151908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816108c191906119c5565b5060208201518160010190816108d791906119c5565b5050508080600101915050610850565b505050565b60606108ae8210610932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109299061142c565b60405180910390fd5b6109db60015f8481526020019081526020015f205f01805461095390611477565b905014610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c906114f1565b60405180910390fd5b60015f8381526020019081526020015f205f0180546109b390611477565b80601f01602080910402602001604051908101604052809291908181526020018280546109df90611477565b8015610a2a5780601f10610a0157610100808354040283529160200191610a2a565b820191905f5260205f20905b815481529060010190602001808311610a0d57829003601f168201915b50505050509050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aba906117a2565b60405180910390fd5b5f60149054906101000a900460ff1615610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b099061180a565b60405180910390fd5b6108ae8210610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d9061142c565b60405180910390fd5b6109db815114610b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9290611ade565b60405180910390fd5b8060015f8481526020019081526020015f205f019081610bbb9190611b54565b505050565b60605f60015f8481526020019081526020015f206001018054905011610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1290611c6d565b60405180910390fd5b5f6040518060400160405280600181526020017f5b0000000000000000000000000000000000000000000000000000000000000081525090505f5b60015f8581526020019081526020015f2060010180549050811015610d5c578160015f8681526020019081526020015f206001018281548110610c9c57610c9b6115b0565b5b905f5260205f2090600202015f0160015f8781526020019081526020015f206001018381548110610cd057610ccf6115b0565b5b905f5260205f209060020201600101604051602001610cf193929190611d7d565b60405160208183030381529060405291506001805f8681526020019081526020015f2060010180549050610d259190611dda565b811015610d4f5781604051602001610d3d9190611e33565b60405160208183030381529060405291505b8080600101915050610c56565b5080604051602001610d6e9190611e7e565b604051602081830303815290604052905080915050919050565b60606080604051019050602081016040525f8152805f19835b600115610dc2578184019350600a81066030018453600a8104905080610da1575b50828203602084039350808452505050919050565b5080545f8255600202905f5260205f2090810190610df59190610df8565b50565b5b80821115610e28575f8082015f610e109190610e2c565b600182015f610e1f9190610e2c565b50600201610df9565b5090565b508054610e3890611477565b5f825580601f10610e495750610e66565b601f0160209004905f5260205f2090810190610e659190610e69565b5b50565b5b80821115610e80575f815f905550600101610e6a565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610ea781610e95565b8114610eb1575f80fd5b50565b5f81359050610ec281610e9e565b92915050565b5f60208284031215610edd57610edc610e8d565b5b5f610eea84828501610eb4565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610f3582610ef3565b610f3f8185610efd565b9350610f4f818560208601610f0d565b610f5881610f1b565b840191505092915050565b5f6020820190508181035f830152610f7b8184610f2b565b905092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610fbd82610f1b565b810181811067ffffffffffffffff82111715610fdc57610fdb610f87565b5b80604052505050565b5f610fee610e84565b9050610ffa8282610fb4565b919050565b5f67ffffffffffffffff82111561101957611018610f87565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561105457611053610f87565b5b61105d82610f1b565b9050602081019050919050565b828183375f83830152505050565b5f61108a6110858461103a565b610fe5565b9050828152602081018484840111156110a6576110a5611036565b5b6110b184828561106a565b509392505050565b5f82601f8301126110cd576110cc610f83565b5b81356110dd848260208601611078565b91505092915050565b5f604082840312156110fb576110fa61102e565b5b6111056040610fe5565b90505f82013567ffffffffffffffff81111561112457611123611032565b5b611130848285016110b9565b5f83015250602082013567ffffffffffffffff81111561115357611152611032565b5b61115f848285016110b9565b60208301525092915050565b5f61117d61117884610fff565b610fe5565b905080838252602082019050602084028301858111156111a05761119f61102a565b5b835b818110156111e757803567ffffffffffffffff8111156111c5576111c4610f83565b5b8086016111d289826110e6565b855260208501945050506020810190506111a2565b5050509392505050565b5f82601f83011261120557611204610f83565b5b813561121584826020860161116b565b91505092915050565b5f806040838503121561123457611233610e8d565b5b5f61124185828601610eb4565b925050602083013567ffffffffffffffff81111561126257611261610e91565b5b61126e858286016111f1565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f61129c82611278565b6112a68185611282565b93506112b6818560208601610f0d565b6112bf81610f1b565b840191505092915050565b5f6020820190508181035f8301526112e28184611292565b905092915050565b5f67ffffffffffffffff82111561130457611303610f87565b5b61130d82610f1b565b9050602081019050919050565b5f61132c611327846112ea565b610fe5565b90508281526020810184848401111561134857611347611036565b5b61135384828561106a565b509392505050565b5f82601f83011261136f5761136e610f83565b5b813561137f84826020860161131a565b91505092915050565b5f806040838503121561139e5761139d610e8d565b5b5f6113ab85828601610eb4565b925050602083013567ffffffffffffffff8111156113cc576113cb610e91565b5b6113d88582860161135b565b9150509250929050565b7f496e76616c696420746f6b656e496400000000000000000000000000000000005f82015250565b5f611416600f83610efd565b9150611421826113e2565b602082019050919050565b5f6020820190508181035f8301526114438161140a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061148e57607f821691505b6020821081036114a1576114a061144a565b5b50919050565b7f506978656c2064617461206e6f742073657400000000000000000000000000005f82015250565b5f6114db601283610efd565b91506114e6826114a7565b602082019050919050565b5f6020820190508181035f830152611508816114cf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61154682610e95565b915061155183610e95565b925082820261155f81610e95565b915082820484148315176115765761157561150f565b5b5092915050565b5f61158782610e95565b915061159283610e95565b92508282019050808211156115aa576115a961150f565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81905092915050565b5f6115f182610ef3565b6115fb81856115dd565b935061160b818560208601610f0d565b80840191505092915050565b7f3c7265637420783d220000000000000000000000000000000000000000000000815250565b7f2220793d22000000000000000000000000000000000000000000000000000000815250565b7f222077696474683d223122206865696768743d2231222066696c6c3d22000000815250565b7f222f3e0000000000000000000000000000000000000000000000000000000000815250565b5f6116ba82876115e7565b91506116c582611617565b6009820191506116d582866115e7565b91506116e08261163d565b6005820191506116f082856115e7565b91506116fb82611663565b601d8201915061170b82846115e7565b915061171682611689565b60038201915081905095945050505050565b5f61173382866115e7565b915061173f82856115e7565b915061174b82846115e7565b9150819050949350505050565b7f4f6e6c79206465706c6f7965722e0000000000000000000000000000000000005f82015250565b5f61178c600e83610efd565b915061179782611758565b602082019050919050565b5f6020820190508181035f8301526117b981611780565b9050919050565b7f436f6e7472616374206973207365616c65642e000000000000000000000000005f82015250565b5f6117f4601383610efd565b91506117ff826117c0565b602082019050919050565b5f6020820190508181035f830152611821816117e8565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026118847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611849565b61188e8683611849565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6118c96118c46118bf84610e95565b6118a6565b610e95565b9050919050565b5f819050919050565b6118e2836118af565b6118f66118ee826118d0565b848454611855565b825550505050565b5f90565b61190a6118fe565b6119158184846118d9565b505050565b5b818110156119385761192d5f82611902565b60018101905061191b565b5050565b601f82111561197d5761194e81611828565b6119578461183a565b81016020851015611966578190505b61197a6119728561183a565b83018261191a565b50505b505050565b5f82821c905092915050565b5f61199d5f1984600802611982565b1980831691505092915050565b5f6119b5838361198e565b9150826002028217905092915050565b6119ce82610ef3565b67ffffffffffffffff8111156119e7576119e6610f87565b5b6119f18254611477565b6119fc82828561193c565b5f60209050601f831160018114611a2d575f8415611a1b578287015190505b611a2585826119aa565b865550611a8c565b601f198416611a3b86611828565b5f5b82811015611a6257848901518255600182019150602085019450602081019050611a3d565b86831015611a7f5784890151611a7b601f89168261198e565b8355505b6001600288020188555050505b505050505050565b7f496e76616c696420706978656c2064617461206c656e677468000000000000005f82015250565b5f611ac8601983610efd565b9150611ad382611a94565b602082019050919050565b5f6020820190508181035f830152611af581611abc565b9050919050565b5f819050815f5260205f209050919050565b601f821115611b4f57611b2081611afc565b611b298461183a565b81016020851015611b38578190505b611b4c611b448561183a565b83018261191a565b50505b505050565b611b5d82611278565b67ffffffffffffffff811115611b7657611b75610f87565b5b611b808254611477565b611b8b828285611b0e565b5f60209050601f831160018114611bbc575f8415611baa578287015190505b611bb485826119aa565b865550611c1b565b601f198416611bca86611afc565b5f5b82811015611bf157848901518255600182019150602085019450602081019050611bcc565b86831015611c0e5784890151611c0a601f89168261198e565b8355505b6001600288020188555050505b505050505050565b7f547261697473206e6f74207365740000000000000000000000000000000000005f82015250565b5f611c57600e83610efd565b9150611c6282611c23565b602082019050919050565b5f6020820190508181035f830152611c8481611c4b565b9050919050565b7f7b2274726169745f74797065223a202200000000000000000000000000000000815250565b5f8154611cbd81611477565b611cc781866115dd565b9450600182165f8114611ce15760018114611cf657611d28565b60ff1983168652811515820286019350611d28565b611cff85611828565b5f5b83811015611d2057815481890152600182019150602081019050611d01565b838801955050505b50505092915050565b7f222c202276616c7565223a202200000000000000000000000000000000000000815250565b7f227d000000000000000000000000000000000000000000000000000000000000815250565b5f611d8882866115e7565b9150611d9382611c8b565b601082019150611da38285611cb1565b9150611dae82611d31565b600d82019150611dbe8284611cb1565b9150611dc982611d57565b600282019150819050949350505050565b5f611de482610e95565b9150611def83610e95565b9250828203905081811115611e0757611e0661150f565b5b92915050565b7f2c00000000000000000000000000000000000000000000000000000000000000815250565b5f611e3e82846115e7565b9150611e4982611e0d565b60018201915081905092915050565b7f5d00000000000000000000000000000000000000000000000000000000000000815250565b5f611e8982846115e7565b9150611e9482611e58565b6001820191508190509291505056fe646174613a696d6167652f7376672b786d6c3b757466382c3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222076657273696f6e3d22312e32222076696577426f783d22302030203239203239223e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d2223303034374231222f3ea264697066735822122024a5d90ec4ef6e7ff5fbe2b4054a99dc4be51f6a4a6bcb3cec7d863cf344146564736f6c634300081a0033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80633efabdf41461006457806368bd580e14610094578063997c51d21461009e578063b44606f9146100ba578063dcd83a18146100ea578063e1dc076114610106575b5f80fd5b61007e60048036038101906100799190610ec8565b610136565b60405161008b9190610f63565b60405180910390f35b61009c6106aa565b005b6100b860048036038101906100b3919061121e565b6107a2565b005b6100d460048036038101906100cf9190610ec8565b6108ec565b6040516100e191906112ca565b60405180910390f35b61010460048036038101906100ff9190611388565b610a36565b005b610120600480360381019061011b9190610ec8565b610bc0565b60405161012d9190610f63565b60405180910390f35b60606108ae821061017c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101739061142c565b60405180910390fd5b5f60015f8481526020019081526020015f205f01805461019b90611477565b80601f01602080910402602001604051908101604052809291908181526020018280546101c790611477565b80156102125780601f106101e957610100808354040283529160200191610212565b820191905f5260205f20905b8154815290600101906020018083116101f557829003601f168201915b5050505050905060405180602001604052805f81525091505f81511161026d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610264906114f1565b60405180910390fd5b5f600767ffffffffffffffff81111561028957610288610f87565b5b6040519080825280601f01601f1916602001820160405280156102bb5781602001600182028036833780820191505090505b5090505f5b601d81101561062f575f5b601d811015610621575f600382601d856102e5919061153c565b6102ef919061157d565b6102f9919061153c565b90505f60f81b858281518110610312576103116115b0565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614801561039a5750604760f81b8560018361035a919061157d565b8151811061036b5761036a6115b0565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80156103f4575060b160f81b856002836103b4919061157d565b815181106103c5576103c46115b0565b5b602001015160f81c60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b156103ff5750610614565b7f2300000000000000000000000000000000000000000000000000000000000000845f81518110610433576104326115b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053505f5b60038110156105d9575f86828461047a919061157d565b8151811061048b5761048a6115b0565b5b602001015160f81c60f81b60f81c90507f303132333435363738396162636465660000000000000000000000000000000060048260ff16901c60ff16601081106104d8576104d76115b0565b5b1a60f81b866002846104ea919061153c565b60016104f6919061157d565b81518110610507576105066115b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a9053507f3031323334353637383961626364656600000000000000000000000000000000600f821660ff166010811061056e5761056d6115b0565b5b1a60f81b86600284610580919061153c565b600261058c919061157d565b8151811061059d5761059c6115b0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350508080600101915050610463565b50856105e483610d88565b6105ed85610d88565b8660405160200161060194939291906116af565b6040516020818303038152906040529550505b80806001019150506102cb565b5080806001019150506102c0565b506040518060c0016040528060938152602001611ea460939139836040518060400160405280600681526020017f3c2f7376673e000000000000000000000000000000000000000000000000000081525060405160200161069293929190611728565b60405160208183030381529060405292505050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610737576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161072e906117a2565b60405180910390fd5b5f60149054906101000a900460ff1615610786576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077d9061180a565b60405180910390fd5b60015f60146101000a81548160ff021916908315150217905550565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461082f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610826906117a2565b60405180910390fd5b60015f8381526020019081526020015f206001015f61084e9190610dd7565b5f5b81518110156108e75760015f8481526020019081526020015f206001018282815181106108805761087f6115b0565b5b6020026020010151908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816108c191906119c5565b5060208201518160010190816108d791906119c5565b5050508080600101915050610850565b505050565b60606108ae8210610932576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109299061142c565b60405180910390fd5b6109db60015f8481526020019081526020015f205f01805461095390611477565b905014610995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098c906114f1565b60405180910390fd5b60015f8381526020019081526020015f205f0180546109b390611477565b80601f01602080910402602001604051908101604052809291908181526020018280546109df90611477565b8015610a2a5780601f10610a0157610100808354040283529160200191610a2a565b820191905f5260205f20905b815481529060010190602001808311610a0d57829003601f168201915b50505050509050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ac3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aba906117a2565b60405180910390fd5b5f60149054906101000a900460ff1615610b12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b099061180a565b60405180910390fd5b6108ae8210610b56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4d9061142c565b60405180910390fd5b6109db815114610b9b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9290611ade565b60405180910390fd5b8060015f8481526020019081526020015f205f019081610bbb9190611b54565b505050565b60605f60015f8481526020019081526020015f206001018054905011610c1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c1290611c6d565b60405180910390fd5b5f6040518060400160405280600181526020017f5b0000000000000000000000000000000000000000000000000000000000000081525090505f5b60015f8581526020019081526020015f2060010180549050811015610d5c578160015f8681526020019081526020015f206001018281548110610c9c57610c9b6115b0565b5b905f5260205f2090600202015f0160015f8781526020019081526020015f206001018381548110610cd057610ccf6115b0565b5b905f5260205f209060020201600101604051602001610cf193929190611d7d565b60405160208183030381529060405291506001805f8681526020019081526020015f2060010180549050610d259190611dda565b811015610d4f5781604051602001610d3d9190611e33565b60405160208183030381529060405291505b8080600101915050610c56565b5080604051602001610d6e9190611e7e565b604051602081830303815290604052905080915050919050565b60606080604051019050602081016040525f8152805f19835b600115610dc2578184019350600a81066030018453600a8104905080610da1575b50828203602084039350808452505050919050565b5080545f8255600202905f5260205f2090810190610df59190610df8565b50565b5b80821115610e28575f8082015f610e109190610e2c565b600182015f610e1f9190610e2c565b50600201610df9565b5090565b508054610e3890611477565b5f825580601f10610e495750610e66565b601f0160209004905f5260205f2090810190610e659190610e69565b5b50565b5b80821115610e80575f815f905550600101610e6a565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610ea781610e95565b8114610eb1575f80fd5b50565b5f81359050610ec281610e9e565b92915050565b5f60208284031215610edd57610edc610e8d565b5b5f610eea84828501610eb4565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610f3582610ef3565b610f3f8185610efd565b9350610f4f818560208601610f0d565b610f5881610f1b565b840191505092915050565b5f6020820190508181035f830152610f7b8184610f2b565b905092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610fbd82610f1b565b810181811067ffffffffffffffff82111715610fdc57610fdb610f87565b5b80604052505050565b5f610fee610e84565b9050610ffa8282610fb4565b919050565b5f67ffffffffffffffff82111561101957611018610f87565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561105457611053610f87565b5b61105d82610f1b565b9050602081019050919050565b828183375f83830152505050565b5f61108a6110858461103a565b610fe5565b9050828152602081018484840111156110a6576110a5611036565b5b6110b184828561106a565b509392505050565b5f82601f8301126110cd576110cc610f83565b5b81356110dd848260208601611078565b91505092915050565b5f604082840312156110fb576110fa61102e565b5b6111056040610fe5565b90505f82013567ffffffffffffffff81111561112457611123611032565b5b611130848285016110b9565b5f83015250602082013567ffffffffffffffff81111561115357611152611032565b5b61115f848285016110b9565b60208301525092915050565b5f61117d61117884610fff565b610fe5565b905080838252602082019050602084028301858111156111a05761119f61102a565b5b835b818110156111e757803567ffffffffffffffff8111156111c5576111c4610f83565b5b8086016111d289826110e6565b855260208501945050506020810190506111a2565b5050509392505050565b5f82601f83011261120557611204610f83565b5b813561121584826020860161116b565b91505092915050565b5f806040838503121561123457611233610e8d565b5b5f61124185828601610eb4565b925050602083013567ffffffffffffffff81111561126257611261610e91565b5b61126e858286016111f1565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f61129c82611278565b6112a68185611282565b93506112b6818560208601610f0d565b6112bf81610f1b565b840191505092915050565b5f6020820190508181035f8301526112e28184611292565b905092915050565b5f67ffffffffffffffff82111561130457611303610f87565b5b61130d82610f1b565b9050602081019050919050565b5f61132c611327846112ea565b610fe5565b90508281526020810184848401111561134857611347611036565b5b61135384828561106a565b509392505050565b5f82601f83011261136f5761136e610f83565b5b813561137f84826020860161131a565b91505092915050565b5f806040838503121561139e5761139d610e8d565b5b5f6113ab85828601610eb4565b925050602083013567ffffffffffffffff8111156113cc576113cb610e91565b5b6113d88582860161135b565b9150509250929050565b7f496e76616c696420746f6b656e496400000000000000000000000000000000005f82015250565b5f611416600f83610efd565b9150611421826113e2565b602082019050919050565b5f6020820190508181035f8301526114438161140a565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061148e57607f821691505b6020821081036114a1576114a061144a565b5b50919050565b7f506978656c2064617461206e6f742073657400000000000000000000000000005f82015250565b5f6114db601283610efd565b91506114e6826114a7565b602082019050919050565b5f6020820190508181035f830152611508816114cf565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61154682610e95565b915061155183610e95565b925082820261155f81610e95565b915082820484148315176115765761157561150f565b5b5092915050565b5f61158782610e95565b915061159283610e95565b92508282019050808211156115aa576115a961150f565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81905092915050565b5f6115f182610ef3565b6115fb81856115dd565b935061160b818560208601610f0d565b80840191505092915050565b7f3c7265637420783d220000000000000000000000000000000000000000000000815250565b7f2220793d22000000000000000000000000000000000000000000000000000000815250565b7f222077696474683d223122206865696768743d2231222066696c6c3d22000000815250565b7f222f3e0000000000000000000000000000000000000000000000000000000000815250565b5f6116ba82876115e7565b91506116c582611617565b6009820191506116d582866115e7565b91506116e08261163d565b6005820191506116f082856115e7565b91506116fb82611663565b601d8201915061170b82846115e7565b915061171682611689565b60038201915081905095945050505050565b5f61173382866115e7565b915061173f82856115e7565b915061174b82846115e7565b9150819050949350505050565b7f4f6e6c79206465706c6f7965722e0000000000000000000000000000000000005f82015250565b5f61178c600e83610efd565b915061179782611758565b602082019050919050565b5f6020820190508181035f8301526117b981611780565b9050919050565b7f436f6e7472616374206973207365616c65642e000000000000000000000000005f82015250565b5f6117f4601383610efd565b91506117ff826117c0565b602082019050919050565b5f6020820190508181035f830152611821816117e8565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026118847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611849565b61188e8683611849565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6118c96118c46118bf84610e95565b6118a6565b610e95565b9050919050565b5f819050919050565b6118e2836118af565b6118f66118ee826118d0565b848454611855565b825550505050565b5f90565b61190a6118fe565b6119158184846118d9565b505050565b5b818110156119385761192d5f82611902565b60018101905061191b565b5050565b601f82111561197d5761194e81611828565b6119578461183a565b81016020851015611966578190505b61197a6119728561183a565b83018261191a565b50505b505050565b5f82821c905092915050565b5f61199d5f1984600802611982565b1980831691505092915050565b5f6119b5838361198e565b9150826002028217905092915050565b6119ce82610ef3565b67ffffffffffffffff8111156119e7576119e6610f87565b5b6119f18254611477565b6119fc82828561193c565b5f60209050601f831160018114611a2d575f8415611a1b578287015190505b611a2585826119aa565b865550611a8c565b601f198416611a3b86611828565b5f5b82811015611a6257848901518255600182019150602085019450602081019050611a3d565b86831015611a7f5784890151611a7b601f89168261198e565b8355505b6001600288020188555050505b505050505050565b7f496e76616c696420706978656c2064617461206c656e677468000000000000005f82015250565b5f611ac8601983610efd565b9150611ad382611a94565b602082019050919050565b5f6020820190508181035f830152611af581611abc565b9050919050565b5f819050815f5260205f209050919050565b601f821115611b4f57611b2081611afc565b611b298461183a565b81016020851015611b38578190505b611b4c611b448561183a565b83018261191a565b50505b505050565b611b5d82611278565b67ffffffffffffffff811115611b7657611b75610f87565b5b611b808254611477565b611b8b828285611b0e565b5f60209050601f831160018114611bbc575f8415611baa578287015190505b611bb485826119aa565b865550611c1b565b601f198416611bca86611afc565b5f5b82811015611bf157848901518255600182019150602085019450602081019050611bcc565b86831015611c0e5784890151611c0a601f89168261198e565b8355505b6001600288020188555050505b505050505050565b7f547261697473206e6f74207365740000000000000000000000000000000000005f82015250565b5f611c57600e83610efd565b9150611c6282611c23565b602082019050919050565b5f6020820190508181035f830152611c8481611c4b565b9050919050565b7f7b2274726169745f74797065223a202200000000000000000000000000000000815250565b5f8154611cbd81611477565b611cc781866115dd565b9450600182165f8114611ce15760018114611cf657611d28565b60ff1983168652811515820286019350611d28565b611cff85611828565b5f5b83811015611d2057815481890152600182019150602081019050611d01565b838801955050505b50505092915050565b7f222c202276616c7565223a202200000000000000000000000000000000000000815250565b7f227d000000000000000000000000000000000000000000000000000000000000815250565b5f611d8882866115e7565b9150611d9382611c8b565b601082019150611da38285611cb1565b9150611dae82611d31565b600d82019150611dbe8284611cb1565b9150611dc982611d57565b600282019150819050949350505050565b5f611de482610e95565b9150611def83610e95565b9250828203905081811115611e0757611e0661150f565b5b92915050565b7f2c00000000000000000000000000000000000000000000000000000000000000815250565b5f611e3e82846115e7565b9150611e4982611e0d565b60018201915081905092915050565b7f5d00000000000000000000000000000000000000000000000000000000000000815250565b5f611e8982846115e7565b9150611e9482611e58565b6001820191508190509291505056fe646174613a696d6167652f7376672b786d6c3b757466382c3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222076657273696f6e3d22312e32222076696577426f783d22302030203239203239223e3c726563742077696474683d223130302522206865696768743d2231303025222066696c6c3d2223303034374231222f3ea264697066735822122024a5d90ec4ef6e7ff5fbe2b4054a99dc4be51f6a4a6bcb3cec7d863cf344146564736f6c634300081a0033

Deployed Bytecode Sourcemap

254:6462:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3637:1325;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1394:95;;;:::i;:::-;;2011:277;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3231:269;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1718:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2334:738;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3637:1325;3696:17;3740:4;3730:7;:14;3722:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;3771:19;3793:7;:16;3801:7;3793:16;;;;;;;;;;;:26;;3771:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3828:8;;;;;;;;;;;;;;3867:1;3851:6;:13;:17;3843:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;4045:19;4077:1;4067:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4045:34;;4093:6;4088:816;4109:2;4105:1;:6;4088:816;;;4134:6;4129:768;4150:2;4146:1;:6;4129:768;;;4174:6;4198:1;4193;4188:2;4184:1;:6;;;;:::i;:::-;:10;;;;:::i;:::-;4183:16;;;;:::i;:::-;4174:25;;4230:4;4217:17;;:6;4224:1;4217:9;;;;;;;;:::i;:::-;;;;;;;;;;:17;;;;:42;;;;;4255:4;4238:21;;:6;4249:1;4245;:5;;;;:::i;:::-;4238:13;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;4217:42;:67;;;;;4280:4;4263:21;;:6;4274:1;4270;:5;;;;:::i;:::-;4263:13;;;;;;;;:::i;:::-;;;;;;;;;;:21;;;;4217:67;4214:114;;;4304:8;;;4214:114;4384:15;:6;4391:1;4384:9;;;;;;;;:::i;:::-;;;;;:15;;;;;;;;;;;4419:6;4414:225;4435:1;4431;:5;4414:225;;;4462:11;4482:6;4493:1;4489;:5;;;;:::i;:::-;4482:13;;;;;;;;:::i;:::-;;;;;;;;;;4476:20;;4462:34;;4535:12;4557:1;4548:5;:10;;;;4535:24;;;;;;;;;:::i;:::-;;;;;4515:6;4530:1;4526;:5;;;;:::i;:::-;4522:1;:9;;;;:::i;:::-;4515:17;;;;;;;;:::i;:::-;;;;;:44;;;;;;;;;;;4598:12;4619:3;4611:5;:11;4598:25;;;;;;;;;:::i;:::-;;;;;4578:6;4593:1;4589;:5;;;;:::i;:::-;4585:1;:9;;;;:::i;:::-;4578:17;;;;;;;;:::i;:::-;;;;;:45;;;;;;;;;;;4443:196;4438:3;;;;;;;4414:225;;;;4713:3;4749:11;4758:1;4749:8;:11::i;:::-;4788;4797:1;4788:8;:11::i;:::-;4858:6;4699:174;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4693:180;;4159:738;4129:768;4154:3;;;;;;;4129:768;;;;4113:3;;;;;;;4088:816;;;;4932:10;;;;;;;;;;;;;;;;;4943:3;4947:10;;;;;;;;;;;;;;;;;4918:40;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4912:46;;3715:1247;;3637:1325;;;:::o;1394:95::-;1076:8;;;;;;;;;;1062:22;;:10;:22;;;1054:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1171:14:::1;;;;;;;;;;;1170:15;1162:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1477:4:::2;1460:14;;:21;;;;;;;;;;;;;;;;;;1394:95::o:0;2011:277::-;1076:8;;;;;;;;;;1062:22;;:10;:22;;;1054:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;2112:7:::1;:16;2120:7;2112:16;;;;;;;;;;;:23;;;2105:30;;;;:::i;:::-;2176:9;2171:110;2195:6;:13;2191:1;:17;2171:110;;;2230:7;:16;2238:7;2230:16;;;;;;;;;;;:23;;2259:6;2266:1;2259:9;;;;;;;;:::i;:::-;;;;;;;;2230:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;2210:3;;;;;;;2171:110;;;;2011:277:::0;;:::o;3231:269::-;3291:12;3334:4;3324:7;:14;3316:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;3414:11;3377:7;:16;3385:7;3377:16;;;;;;;;;;;:26;;:33;;;;;:::i;:::-;;;:48;3369:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;3466:7;:16;3474:7;3466:16;;;;;;;;;;;:26;;3459:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3231:269;;;:::o;1718:286::-;1076:8;;;;;;;;;;1062:22;;:10;:22;;;1054:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1171:14:::1;;;;;;;;;;;1170:15;1162:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1843:4:::2;1833:7;:14;1825:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;1906:11;1886:9;:16;:31;1878:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;1987:9;1958:7;:16;1966:7;1958:16;;;;;;;;;;;:26;;:38;;;;;;:::i;:::-;;1718:286:::0;;:::o;2334:738::-;2393:13;2460:1;2427:7;:16;2435:7;2427:16;;;;;;;;;;;:23;;:30;;;;:34;2419:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;2493:24;:30;;;;;;;;;;;;;;;;;;;2541:9;2536:445;2560:7;:16;2568:7;2560:16;;;;;;;;;;;:23;;:30;;;;2556:1;:34;2536:445;;;2657:10;2706:7;:16;2714:7;2706:16;;;;;;;;;;;:23;;2730:1;2706:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:36;;2778:7;:16;2786:7;2778:16;;;;;;;;;;;:23;;2802:1;2778:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:32;;2625:206;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;2612:219;;2889:1;2856:7;:16;2864:7;2856:16;;;;;;;;;;;:23;;:30;;;;:34;;;;:::i;:::-;2852:1;:38;2848:122;;;2938:10;2924:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;2911:43;;2848:122;2592:3;;;;;;;2536:445;;;;3020:10;3006:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;2993:43;;3054:10;3047:17;;;2334:738;;;:::o;5037:1676::-;5093:17;5545:4;5538;5532:11;5528:22;5521:29;;5646:4;5641:3;5637:14;5631:4;5624:28;5729:1;5724:3;5717:14;5833:3;5865:1;5861:6;6077:5;6059:410;6085:1;6059:410;;;6125:1;6120:3;6116:11;6109:18;;6314:2;6308:4;6304:13;6300:2;6296:22;6291:3;6283:36;6408:2;6402:4;6398:13;6390:21;;6439:4;6059:410;6429:25;6059:410;6063:21;6508:3;6503;6499:13;6623:4;6618:3;6614:14;6607:21;;6688:6;6683:3;6676:19;5176:1530;;;5037:1676;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:77;371:7;400:5;389:16;;334:77;;;:::o;417:122::-;490:24;508:5;490:24;:::i;:::-;483:5;480:35;470:63;;529:1;526;519:12;470:63;417:122;:::o;545:139::-;591:5;629:6;616:20;607:29;;645:33;672:5;645:33;:::i;:::-;545:139;;;;:::o;690:329::-;749:6;798:2;786:9;777:7;773:23;769:32;766:119;;;804:79;;:::i;:::-;766:119;924:1;949:53;994:7;985:6;974:9;970:22;949:53;:::i;:::-;939:63;;895:117;690:329;;;;:::o;1025:99::-;1077:6;1111:5;1105:12;1095:22;;1025:99;;;:::o;1130:169::-;1214:11;1248:6;1243:3;1236:19;1288:4;1283:3;1279:14;1264:29;;1130:169;;;;:::o;1305:139::-;1394:6;1389:3;1384;1378:23;1435:1;1426:6;1421:3;1417:16;1410:27;1305:139;;;:::o;1450:102::-;1491:6;1542:2;1538:7;1533:2;1526:5;1522:14;1518:28;1508:38;;1450:102;;;:::o;1558:377::-;1646:3;1674:39;1707:5;1674:39;:::i;:::-;1729:71;1793:6;1788:3;1729:71;:::i;:::-;1722:78;;1809:65;1867:6;1862:3;1855:4;1848:5;1844:16;1809:65;:::i;:::-;1899:29;1921:6;1899:29;:::i;:::-;1894:3;1890:39;1883:46;;1650:285;1558:377;;;;:::o;1941:313::-;2054:4;2092:2;2081:9;2077:18;2069:26;;2141:9;2135:4;2131:20;2127:1;2116:9;2112:17;2105:47;2169:78;2242:4;2233:6;2169:78;:::i;:::-;2161:86;;1941:313;;;;:::o;2260:117::-;2369:1;2366;2359:12;2383:180;2431:77;2428:1;2421:88;2528:4;2525:1;2518:15;2552:4;2549:1;2542:15;2569:281;2652:27;2674:4;2652:27;:::i;:::-;2644:6;2640:40;2782:6;2770:10;2767:22;2746:18;2734:10;2731:34;2728:62;2725:88;;;2793:18;;:::i;:::-;2725:88;2833:10;2829:2;2822:22;2612:238;2569:281;;:::o;2856:129::-;2890:6;2917:20;;:::i;:::-;2907:30;;2946:33;2974:4;2966:6;2946:33;:::i;:::-;2856:129;;;:::o;2991:332::-;3089:4;3179:18;3171:6;3168:30;3165:56;;;3201:18;;:::i;:::-;3165:56;3251:4;3243:6;3239:17;3231:25;;3311:4;3305;3301:15;3293:23;;2991:332;;;:::o;3329:117::-;3438:1;3435;3428:12;3452:117;3561:1;3558;3551:12;3575:117;3684:1;3681;3674:12;3698:117;3807:1;3804;3797:12;3821:308;3883:4;3973:18;3965:6;3962:30;3959:56;;;3995:18;;:::i;:::-;3959:56;4033:29;4055:6;4033:29;:::i;:::-;4025:37;;4117:4;4111;4107:15;4099:23;;3821:308;;;:::o;4135:148::-;4233:6;4228:3;4223;4210:30;4274:1;4265:6;4260:3;4256:16;4249:27;4135:148;;;:::o;4289:425::-;4367:5;4392:66;4408:49;4450:6;4408:49;:::i;:::-;4392:66;:::i;:::-;4383:75;;4481:6;4474:5;4467:21;4519:4;4512:5;4508:16;4557:3;4548:6;4543:3;4539:16;4536:25;4533:112;;;4564:79;;:::i;:::-;4533:112;4654:54;4701:6;4696:3;4691;4654:54;:::i;:::-;4373:341;4289:425;;;;;:::o;4734:340::-;4790:5;4839:3;4832:4;4824:6;4820:17;4816:27;4806:122;;4847:79;;:::i;:::-;4806:122;4964:6;4951:20;4989:79;5064:3;5056:6;5049:4;5041:6;5037:17;4989:79;:::i;:::-;4980:88;;4796:278;4734:340;;;;:::o;5115:916::-;5185:5;5229:4;5217:9;5212:3;5208:19;5204:30;5201:117;;;5237:79;;:::i;:::-;5201:117;5336:21;5352:4;5336:21;:::i;:::-;5327:30;;5449:1;5438:9;5434:17;5421:31;5479:18;5471:6;5468:30;5465:117;;;5501:79;;:::i;:::-;5465:117;5621:59;5676:3;5667:6;5656:9;5652:22;5621:59;:::i;:::-;5614:4;5607:5;5603:16;5596:85;5367:325;5780:2;5769:9;5765:18;5752:32;5811:18;5803:6;5800:30;5797:117;;;5833:79;;:::i;:::-;5797:117;5953:59;6008:3;5999:6;5988:9;5984:22;5953:59;:::i;:::-;5946:4;5939:5;5935:16;5928:85;5702:322;5115:916;;;;:::o;6074:978::-;6191:5;6216:102;6232:85;6310:6;6232:85;:::i;:::-;6216:102;:::i;:::-;6207:111;;6338:5;6367:6;6360:5;6353:21;6401:4;6394:5;6390:16;6383:23;;6454:4;6446:6;6442:17;6434:6;6430:30;6483:3;6475:6;6472:15;6469:122;;;6502:79;;:::i;:::-;6469:122;6617:6;6600:446;6634:6;6629:3;6626:15;6600:446;;;6723:3;6710:17;6759:18;6746:11;6743:35;6740:122;;;6781:79;;:::i;:::-;6740:122;6905:11;6897:6;6893:24;6943:58;6997:3;6985:10;6943:58;:::i;:::-;6938:3;6931:71;7031:4;7026:3;7022:14;7015:21;;6676:370;;6660:4;6655:3;6651:14;6644:21;;6600:446;;;6604:21;6197:855;;6074:978;;;;;:::o;7095:412::-;7187:5;7236:3;7229:4;7221:6;7217:17;7213:27;7203:122;;7244:79;;:::i;:::-;7203:122;7361:6;7348:20;7386:115;7497:3;7489:6;7482:4;7474:6;7470:17;7386:115;:::i;:::-;7377:124;;7193:314;7095:412;;;;:::o;7513:726::-;7627:6;7635;7684:2;7672:9;7663:7;7659:23;7655:32;7652:119;;;7690:79;;:::i;:::-;7652:119;7810:1;7835:53;7880:7;7871:6;7860:9;7856:22;7835:53;:::i;:::-;7825:63;;7781:117;7965:2;7954:9;7950:18;7937:32;7996:18;7988:6;7985:30;7982:117;;;8018:79;;:::i;:::-;7982:117;8123:99;8214:7;8205:6;8194:9;8190:22;8123:99;:::i;:::-;8113:109;;7908:324;7513:726;;;;;:::o;8245:98::-;8296:6;8330:5;8324:12;8314:22;;8245:98;;;:::o;8349:168::-;8432:11;8466:6;8461:3;8454:19;8506:4;8501:3;8497:14;8482:29;;8349:168;;;;:::o;8523:373::-;8609:3;8637:38;8669:5;8637:38;:::i;:::-;8691:70;8754:6;8749:3;8691:70;:::i;:::-;8684:77;;8770:65;8828:6;8823:3;8816:4;8809:5;8805:16;8770:65;:::i;:::-;8860:29;8882:6;8860:29;:::i;:::-;8855:3;8851:39;8844:46;;8613:283;8523:373;;;;:::o;8902:309::-;9013:4;9051:2;9040:9;9036:18;9028:26;;9100:9;9094:4;9090:20;9086:1;9075:9;9071:17;9064:47;9128:76;9199:4;9190:6;9128:76;:::i;:::-;9120:84;;8902:309;;;;:::o;9217:307::-;9278:4;9368:18;9360:6;9357:30;9354:56;;;9390:18;;:::i;:::-;9354:56;9428:29;9450:6;9428:29;:::i;:::-;9420:37;;9512:4;9506;9502:15;9494:23;;9217:307;;;:::o;9530:423::-;9607:5;9632:65;9648:48;9689:6;9648:48;:::i;:::-;9632:65;:::i;:::-;9623:74;;9720:6;9713:5;9706:21;9758:4;9751:5;9747:16;9796:3;9787:6;9782:3;9778:16;9775:25;9772:112;;;9803:79;;:::i;:::-;9772:112;9893:54;9940:6;9935:3;9930;9893:54;:::i;:::-;9613:340;9530:423;;;;;:::o;9972:338::-;10027:5;10076:3;10069:4;10061:6;10057:17;10053:27;10043:122;;10084:79;;:::i;:::-;10043:122;10201:6;10188:20;10226:78;10300:3;10292:6;10285:4;10277:6;10273:17;10226:78;:::i;:::-;10217:87;;10033:277;9972:338;;;;:::o;10316:652::-;10393:6;10401;10450:2;10438:9;10429:7;10425:23;10421:32;10418:119;;;10456:79;;:::i;:::-;10418:119;10576:1;10601:53;10646:7;10637:6;10626:9;10622:22;10601:53;:::i;:::-;10591:63;;10547:117;10731:2;10720:9;10716:18;10703:32;10762:18;10754:6;10751:30;10748:117;;;10784:79;;:::i;:::-;10748:117;10889:62;10943:7;10934:6;10923:9;10919:22;10889:62;:::i;:::-;10879:72;;10674:287;10316:652;;;;;:::o;10974:165::-;11114:17;11110:1;11102:6;11098:14;11091:41;10974:165;:::o;11145:366::-;11287:3;11308:67;11372:2;11367:3;11308:67;:::i;:::-;11301:74;;11384:93;11473:3;11384:93;:::i;:::-;11502:2;11497:3;11493:12;11486:19;;11145:366;;;:::o;11517:419::-;11683:4;11721:2;11710:9;11706:18;11698:26;;11770:9;11764:4;11760:20;11756:1;11745:9;11741:17;11734:47;11798:131;11924:4;11798:131;:::i;:::-;11790:139;;11517:419;;;:::o;11942:180::-;11990:77;11987:1;11980:88;12087:4;12084:1;12077:15;12111:4;12108:1;12101:15;12128:320;12172:6;12209:1;12203:4;12199:12;12189:22;;12256:1;12250:4;12246:12;12277:18;12267:81;;12333:4;12325:6;12321:17;12311:27;;12267:81;12395:2;12387:6;12384:14;12364:18;12361:38;12358:84;;12414:18;;:::i;:::-;12358:84;12179:269;12128:320;;;:::o;12454:168::-;12594:20;12590:1;12582:6;12578:14;12571:44;12454:168;:::o;12628:366::-;12770:3;12791:67;12855:2;12850:3;12791:67;:::i;:::-;12784:74;;12867:93;12956:3;12867:93;:::i;:::-;12985:2;12980:3;12976:12;12969:19;;12628:366;;;:::o;13000:419::-;13166:4;13204:2;13193:9;13189:18;13181:26;;13253:9;13247:4;13243:20;13239:1;13228:9;13224:17;13217:47;13281:131;13407:4;13281:131;:::i;:::-;13273:139;;13000:419;;;:::o;13425:180::-;13473:77;13470:1;13463:88;13570:4;13567:1;13560:15;13594:4;13591:1;13584:15;13611:410;13651:7;13674:20;13692:1;13674:20;:::i;:::-;13669:25;;13708:20;13726:1;13708:20;:::i;:::-;13703:25;;13763:1;13760;13756:9;13785:30;13803:11;13785:30;:::i;:::-;13774:41;;13964:1;13955:7;13951:15;13948:1;13945:22;13925:1;13918:9;13898:83;13875:139;;13994:18;;:::i;:::-;13875:139;13659:362;13611:410;;;;:::o;14027:191::-;14067:3;14086:20;14104:1;14086:20;:::i;:::-;14081:25;;14120:20;14138:1;14120:20;:::i;:::-;14115:25;;14163:1;14160;14156:9;14149:16;;14184:3;14181:1;14178:10;14175:36;;;14191:18;;:::i;:::-;14175:36;14027:191;;;;:::o;14224:180::-;14272:77;14269:1;14262:88;14369:4;14366:1;14359:15;14393:4;14390:1;14383:15;14410:148;14512:11;14549:3;14534:18;;14410:148;;;;:::o;14564:390::-;14670:3;14698:39;14731:5;14698:39;:::i;:::-;14753:89;14835:6;14830:3;14753:89;:::i;:::-;14746:96;;14851:65;14909:6;14904:3;14897:4;14890:5;14886:16;14851:65;:::i;:::-;14941:6;14936:3;14932:16;14925:23;;14674:280;14564:390;;;;:::o;14960:241::-;15128:66;15123:3;15116:79;14960:241;:::o;15207:::-;15375:66;15370:3;15363:79;15207:241;:::o;15454:242::-;15623:66;15618:3;15611:79;15454:242;:::o;15702:241::-;15870:66;15865:3;15858:79;15702:241;:::o;15949:1814::-;16586:3;16608:95;16699:3;16690:6;16608:95;:::i;:::-;16601:102;;16713:137;16846:3;16713:137;:::i;:::-;16875:1;16870:3;16866:11;16859:18;;16894:95;16985:3;16976:6;16894:95;:::i;:::-;16887:102;;16999:137;17132:3;16999:137;:::i;:::-;17161:1;17156:3;17152:11;17145:18;;17180:95;17271:3;17262:6;17180:95;:::i;:::-;17173:102;;17285:138;17419:3;17285:138;:::i;:::-;17448:2;17443:3;17439:12;17432:19;;17468:95;17559:3;17550:6;17468:95;:::i;:::-;17461:102;;17573:137;17706:3;17573:137;:::i;:::-;17735:1;17730:3;17726:11;17719:18;;17754:3;17747:10;;15949:1814;;;;;;;:::o;17769:595::-;17997:3;18019:95;18110:3;18101:6;18019:95;:::i;:::-;18012:102;;18131:95;18222:3;18213:6;18131:95;:::i;:::-;18124:102;;18243:95;18334:3;18325:6;18243:95;:::i;:::-;18236:102;;18355:3;18348:10;;17769:595;;;;;;:::o;18370:164::-;18510:16;18506:1;18498:6;18494:14;18487:40;18370:164;:::o;18540:366::-;18682:3;18703:67;18767:2;18762:3;18703:67;:::i;:::-;18696:74;;18779:93;18868:3;18779:93;:::i;:::-;18897:2;18892:3;18888:12;18881:19;;18540:366;;;:::o;18912:419::-;19078:4;19116:2;19105:9;19101:18;19093:26;;19165:9;19159:4;19155:20;19151:1;19140:9;19136:17;19129:47;19193:131;19319:4;19193:131;:::i;:::-;19185:139;;18912:419;;;:::o;19337:169::-;19477:21;19473:1;19465:6;19461:14;19454:45;19337:169;:::o;19512:366::-;19654:3;19675:67;19739:2;19734:3;19675:67;:::i;:::-;19668:74;;19751:93;19840:3;19751:93;:::i;:::-;19869:2;19864:3;19860:12;19853:19;;19512:366;;;:::o;19884:419::-;20050:4;20088:2;20077:9;20073:18;20065:26;;20137:9;20131:4;20127:20;20123:1;20112:9;20108:17;20101:47;20165:131;20291:4;20165:131;:::i;:::-;20157:139;;19884:419;;;:::o;20309:141::-;20358:4;20381:3;20373:11;;20404:3;20401:1;20394:14;20438:4;20435:1;20425:18;20417:26;;20309:141;;;:::o;20456:93::-;20493:6;20540:2;20535;20528:5;20524:14;20520:23;20510:33;;20456:93;;;:::o;20555:107::-;20599:8;20649:5;20643:4;20639:16;20618:37;;20555:107;;;;:::o;20668:393::-;20737:6;20787:1;20775:10;20771:18;20810:97;20840:66;20829:9;20810:97;:::i;:::-;20928:39;20958:8;20947:9;20928:39;:::i;:::-;20916:51;;21000:4;20996:9;20989:5;20985:21;20976:30;;21049:4;21039:8;21035:19;21028:5;21025:30;21015:40;;20744:317;;20668:393;;;;;:::o;21067:60::-;21095:3;21116:5;21109:12;;21067:60;;;:::o;21133:142::-;21183:9;21216:53;21234:34;21243:24;21261:5;21243:24;:::i;:::-;21234:34;:::i;:::-;21216:53;:::i;:::-;21203:66;;21133:142;;;:::o;21281:75::-;21324:3;21345:5;21338:12;;21281:75;;;:::o;21362:269::-;21472:39;21503:7;21472:39;:::i;:::-;21533:91;21582:41;21606:16;21582:41;:::i;:::-;21574:6;21567:4;21561:11;21533:91;:::i;:::-;21527:4;21520:105;21438:193;21362:269;;;:::o;21637:73::-;21682:3;21637:73;:::o;21716:189::-;21793:32;;:::i;:::-;21834:65;21892:6;21884;21878:4;21834:65;:::i;:::-;21769:136;21716:189;;:::o;21911:186::-;21971:120;21988:3;21981:5;21978:14;21971:120;;;22042:39;22079:1;22072:5;22042:39;:::i;:::-;22015:1;22008:5;22004:13;21995:22;;21971:120;;;21911:186;;:::o;22103:543::-;22204:2;22199:3;22196:11;22193:446;;;22238:38;22270:5;22238:38;:::i;:::-;22322:29;22340:10;22322:29;:::i;:::-;22312:8;22308:44;22505:2;22493:10;22490:18;22487:49;;;22526:8;22511:23;;22487:49;22549:80;22605:22;22623:3;22605:22;:::i;:::-;22595:8;22591:37;22578:11;22549:80;:::i;:::-;22208:431;;22193:446;22103:543;;;:::o;22652:117::-;22706:8;22756:5;22750:4;22746:16;22725:37;;22652:117;;;;:::o;22775:169::-;22819:6;22852:51;22900:1;22896:6;22888:5;22885:1;22881:13;22852:51;:::i;:::-;22848:56;22933:4;22927;22923:15;22913:25;;22826:118;22775:169;;;;:::o;22949:295::-;23025:4;23171:29;23196:3;23190:4;23171:29;:::i;:::-;23163:37;;23233:3;23230:1;23226:11;23220:4;23217:21;23209:29;;22949:295;;;;:::o;23249:1395::-;23366:37;23399:3;23366:37;:::i;:::-;23468:18;23460:6;23457:30;23454:56;;;23490:18;;:::i;:::-;23454:56;23534:38;23566:4;23560:11;23534:38;:::i;:::-;23619:67;23679:6;23671;23665:4;23619:67;:::i;:::-;23713:1;23737:4;23724:17;;23769:2;23761:6;23758:14;23786:1;23781:618;;;;24443:1;24460:6;24457:77;;;24509:9;24504:3;24500:19;24494:26;24485:35;;24457:77;24560:67;24620:6;24613:5;24560:67;:::i;:::-;24554:4;24547:81;24416:222;23751:887;;23781:618;23833:4;23829:9;23821:6;23817:22;23867:37;23899:4;23867:37;:::i;:::-;23926:1;23940:208;23954:7;23951:1;23948:14;23940:208;;;24033:9;24028:3;24024:19;24018:26;24010:6;24003:42;24084:1;24076:6;24072:14;24062:24;;24131:2;24120:9;24116:18;24103:31;;23977:4;23974:1;23970:12;23965:17;;23940:208;;;24176:6;24167:7;24164:19;24161:179;;;24234:9;24229:3;24225:19;24219:26;24277:48;24319:4;24311:6;24307:17;24296:9;24277:48;:::i;:::-;24269:6;24262:64;24184:156;24161:179;24386:1;24382;24374:6;24370:14;24366:22;24360:4;24353:36;23788:611;;;23751:887;;23341:1303;;;23249:1395;;:::o;24650:175::-;24790:27;24786:1;24778:6;24774:14;24767:51;24650:175;:::o;24831:366::-;24973:3;24994:67;25058:2;25053:3;24994:67;:::i;:::-;24987:74;;25070:93;25159:3;25070:93;:::i;:::-;25188:2;25183:3;25179:12;25172:19;;24831:366;;;:::o;25203:419::-;25369:4;25407:2;25396:9;25392:18;25384:26;;25456:9;25450:4;25446:20;25442:1;25431:9;25427:17;25420:47;25484:131;25610:4;25484:131;:::i;:::-;25476:139;;25203:419;;;:::o;25628:140::-;25676:4;25699:3;25691:11;;25722:3;25719:1;25712:14;25756:4;25753:1;25743:18;25735:26;;25628:140;;;:::o;25774:541::-;25874:2;25869:3;25866:11;25863:445;;;25908:37;25939:5;25908:37;:::i;:::-;25991:29;26009:10;25991:29;:::i;:::-;25981:8;25977:44;26174:2;26162:10;26159:18;26156:49;;;26195:8;26180:23;;26156:49;26218:80;26274:22;26292:3;26274:22;:::i;:::-;26264:8;26260:37;26247:11;26218:80;:::i;:::-;25878:430;;25863:445;25774:541;;;:::o;26321:1390::-;26436:36;26468:3;26436:36;:::i;:::-;26537:18;26529:6;26526:30;26523:56;;;26559:18;;:::i;:::-;26523:56;26603:38;26635:4;26629:11;26603:38;:::i;:::-;26688:66;26747:6;26739;26733:4;26688:66;:::i;:::-;26781:1;26805:4;26792:17;;26837:2;26829:6;26826:14;26854:1;26849:617;;;;27510:1;27527:6;27524:77;;;27576:9;27571:3;27567:19;27561:26;27552:35;;27524:77;27627:67;27687:6;27680:5;27627:67;:::i;:::-;27621:4;27614:81;27483:222;26819:886;;26849:617;26901:4;26897:9;26889:6;26885:22;26935:36;26966:4;26935:36;:::i;:::-;26993:1;27007:208;27021:7;27018:1;27015:14;27007:208;;;27100:9;27095:3;27091:19;27085:26;27077:6;27070:42;27151:1;27143:6;27139:14;27129:24;;27198:2;27187:9;27183:18;27170:31;;27044:4;27041:1;27037:12;27032:17;;27007:208;;;27243:6;27234:7;27231:19;27228:179;;;27301:9;27296:3;27292:19;27286:26;27344:48;27386:4;27378:6;27374:17;27363:9;27344:48;:::i;:::-;27336:6;27329:64;27251:156;27228:179;27453:1;27449;27441:6;27437:14;27433:22;27427:4;27420:36;26856:610;;;26819:886;;26411:1300;;;26321:1390;;:::o;27717:164::-;27857:16;27853:1;27845:6;27841:14;27834:40;27717:164;:::o;27887:366::-;28029:3;28050:67;28114:2;28109:3;28050:67;:::i;:::-;28043:74;;28126:93;28215:3;28126:93;:::i;:::-;28244:2;28239:3;28235:12;28228:19;;27887:366;;;:::o;28259:419::-;28425:4;28463:2;28452:9;28448:18;28440:26;;28512:9;28506:4;28502:20;28498:1;28487:9;28483:17;28476:47;28540:131;28666:4;28540:131;:::i;:::-;28532:139;;28259:419;;;:::o;28684:242::-;28853:66;28848:3;28841:79;28684:242;:::o;28956:874::-;29059:3;29096:5;29090:12;29125:36;29151:9;29125:36;:::i;:::-;29177:89;29259:6;29254:3;29177:89;:::i;:::-;29170:96;;29297:1;29286:9;29282:17;29313:1;29308:166;;;;29488:1;29483:341;;;;29275:549;;29308:166;29392:4;29388:9;29377;29373:25;29368:3;29361:38;29454:6;29447:14;29440:22;29432:6;29428:35;29423:3;29419:45;29412:52;;29308:166;;29483:341;29550:38;29582:5;29550:38;:::i;:::-;29610:1;29624:154;29638:6;29635:1;29632:13;29624:154;;;29712:7;29706:14;29702:1;29697:3;29693:11;29686:35;29762:1;29753:7;29749:15;29738:26;;29660:4;29657:1;29653:12;29648:17;;29624:154;;;29807:6;29802:3;29798:16;29791:23;;29490:334;;29275:549;;29063:767;;28956:874;;;;:::o;29836:242::-;30005:66;30000:3;29993:79;29836:242;:::o;30084:241::-;30252:66;30247:3;30240:79;30084:241;:::o;30331:1381::-;30825:3;30847:95;30938:3;30929:6;30847:95;:::i;:::-;30840:102;;30952:138;31086:3;30952:138;:::i;:::-;31115:2;31110:3;31106:12;31099:19;;31135:92;31223:3;31214:6;31135:92;:::i;:::-;31128:99;;31237:138;31371:3;31237:138;:::i;:::-;31400:2;31395:3;31391:12;31384:19;;31420:92;31508:3;31499:6;31420:92;:::i;:::-;31413:99;;31522:137;31655:3;31522:137;:::i;:::-;31684:1;31679:3;31675:11;31668:18;;31703:3;31696:10;;30331:1381;;;;;;:::o;31718:194::-;31758:4;31778:20;31796:1;31778:20;:::i;:::-;31773:25;;31812:20;31830:1;31812:20;:::i;:::-;31807:25;;31856:1;31853;31849:9;31841:17;;31880:1;31874:4;31871:11;31868:37;;;31885:18;;:::i;:::-;31868:37;31718:194;;;;:::o;31918:178::-;32086:3;32081;32074:16;31918:178;:::o;32102:539::-;32324:3;32346:95;32437:3;32428:6;32346:95;:::i;:::-;32339:102;;32451:137;32584:3;32451:137;:::i;:::-;32613:1;32608:3;32604:11;32597:18;;32632:3;32625:10;;32102:539;;;;:::o;32647:178::-;32815:3;32810;32803:16;32647:178;:::o;32831:539::-;33053:3;33075:95;33166:3;33157:6;33075:95;:::i;:::-;33068:102;;33180:137;33313:3;33180:137;:::i;:::-;33342:1;33337:3;33333:11;33326:18;;33361:3;33354:10;;32831:539;;;;:::o

Swarm Source

ipfs://24a5d90ec4ef6e7ff5fbe2b4054a99dc4be51f6a4a6bcb3cec7d863cf3441465

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.