Ape Curtis Testnet

Contract

0xF907909385B6a2765F7c8BBFFBa0E7B0Ee04E55A

Overview

APE Balance

Ape Curtis LogoApe Curtis LogoApe Curtis Logo0 APE

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Store Traits128065402024-11-21 20:22:2924 days ago1732220549IN
0xF9079093...0Ee04E55A
0 APE0.000000980.01
Store Pixel Data128065382024-11-21 20:22:2824 days ago1732220548IN
0xF9079093...0Ee04E55A
0 APE0.000002410.01
Store Traits128065102024-11-21 20:21:5524 days ago1732220515IN
0xF9079093...0Ee04E55A
0 APE0.000000980.01
Store Pixel Data128065052024-11-21 20:21:5324 days ago1732220513IN
0xF9079093...0Ee04E55A
0 APE0.000002410.01
Store Traits128064842024-11-21 20:21:3424 days ago1732220494IN
0xF9079093...0Ee04E55A
0 APE0.000000980.01
Store Pixel Data128064812024-11-21 20:21:3224 days ago1732220492IN
0xF9079093...0Ee04E55A
0 APE0.000002410.01
Store Traits128018392024-11-21 18:28:2624 days ago1732213706IN
0xF9079093...0Ee04E55A
0 APE0.00000340.01
Store Pixel Data128018382024-11-21 18:28:2424 days ago1732213704IN
0xF9079093...0Ee04E55A
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
*/

// 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">';
    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 (Trait[] memory) {
        require(gobData[tokenId].traits.length > 0, "Traits not set");
        return gobData[tokenId].traits;
    }
    /**
     * @notice Retrieve RGBA pixel data for a Goblin.
     * @param tokenId The ID of the Goblin.
     * @return The RGBA pixel data.
     */
    function getGobData(uint256 tokenId) external view returns (bytes memory) {
        require(tokenId < 2222, "Invalid tokenId");
        require(gobData[tokenId].pixelData.length > 0, "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;
        require(pixels.length > 0, "Pixel data not set");

        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;
                for (uint i = 0; i < 3; i++) {
                    uint8 value = uint8(pixels[p + i]);
                    buffer[i * 2 + 1] = _HEX_SYMBOLS[value & 0xf];
                    value >>= 3;
                    buffer[i * 2] = _HEX_SYMBOLS[value & 0xf];
                }
                svg = string(abi.encodePacked(svg,
                    '<rect x="', toString(x), '" y="', toString(y),
                    '" width="1" height="1" shape-rendering="crispEdges" fill="#', string(buffer), '"/>'));
            }
        }

        svg = string(abi.encodePacked(svg, SVG_FOOTER));
    }

    /**
     * @notice Convert a slice of bytes to a uint32.
     * @param data The byte array.
     * @param index The starting index.
     * @return The uint32 representation of the RGBA value.
     */
    function toUint32(bytes memory data, uint256 index) internal pure returns (uint32) {
        return uint32(
            uint8(data[index]) << 24 |
            uint8(data[index + 1]) << 16 |
            uint8(data[index + 2]) << 8 |
            uint8(data[index + 3])
        );
    }


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

Contract ABI

[{"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":[{"components":[{"internalType":"string","name":"traitType","type":"string"},{"internalType":"string","name":"value","type":"string"}],"internalType":"struct GobsDataSource.Trait[]","name":"","type":"tuple[]"}],"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"}]

60806040525f8060146101000a81548160ff0219169083151502179055503480156027575f80fd5b50335f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550612007806100745f395ff3fe608060405234801561000f575f80fd5b5060043610610060575f3560e01c80633efabdf41461006457806368bd580e14610094578063997c51d21461009e578063b44606f9146100ba578063dcd83a18146100ea578063e1dc076114610106575b5f80fd5b61007e60048036038101906100799190610e92565b610136565b60405161008b9190610f2d565b60405180910390f35b61009c61054c565b005b6100b860048036038101906100b391906111e8565b610644565b005b6100d460048036038101906100cf9190610e92565b61078e565b6040516100e19190611294565b60405180910390f35b61010460048036038101906100ff9190611352565b6108d6565b005b610120600480360381019061011b9190610e92565b610a60565b60405161012d91906114f0565b60405180910390f35b60606108ae821061017c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101739061155a565b60405180910390fd5b5f60015f8481526020019081526020015f205f01805461019b906115a5565b80601f01602080910402602001604051908101604052809291908181526020018280546101c7906115a5565b80156102125780601f106101e957610100808354040283529160200191610212565b820191905f5260205f20905b8154815290600101906020018083116101f557829003601f168201915b505050505090505f81511161025c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102539061161f565b60405180910390fd5b6040518060a0016040528060628152602001611f70606291396040516020016102859190611677565b60405160208183030381529060405291505f600767ffffffffffffffff8111156102b2576102b1610f51565b5b6040519080825280601f01601f1916602001820160405280156102e45781602001600182028036833780820191505090505b5090505f5b601d8110156104eb575f5b601d8110156104dd575f600382601d8561030e91906116ba565b61031891906116fb565b61032291906116ba565b90505f5b6003811015610496575f86828461033d91906116fb565b8151811061034e5761034d61172e565b5b602001015160f81c60f81b60f81c90507f3031323334353637383961626364656600000000000000000000000000000000600f821660ff16601081106103975761039661172e565b5b1a60f81b8660016002856103ab91906116ba565b6103b591906116fb565b815181106103c6576103c561172e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060038160ff16901c90507f3031323334353637383961626364656600000000000000000000000000000000600f821660ff16601081106104375761043661172e565b5b1a60f81b8660028461044991906116ba565b8151811061045a5761045961172e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350508080600101915050610326565b50856104a183610c48565b6104aa85610c48565b866040516020016104be94939291906118a9565b60405160208183030381529060405295505080806001019150506102f4565b5080806001019150506102e9565b50826040518060400160405280600681526020017f3c2f7376673e0000000000000000000000000000000000000000000000000000815250604051602001610534929190611912565b60405160208183030381529060405292505050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d09061197f565b60405180910390fd5b5f60149054906101000a900460ff1615610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f906119e7565b60405180910390fd5b60015f60146101000a81548160ff021916908315150217905550565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c89061197f565b60405180910390fd5b60015f8381526020019081526020015f206001015f6106f09190610da1565b5f5b81518110156107895760015f8481526020019081526020015f206001018282815181106107225761072161172e565b5b6020026020010151908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816107639190611ba2565b5060208201518160010190816107799190611ba2565b50505080806001019150506106f2565b505050565b60606108ae82106107d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cb9061155a565b60405180910390fd5b5f60015f8481526020019081526020015f205f0180546107f3906115a5565b905011610835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082c9061161f565b60405180910390fd5b60015f8381526020019081526020015f205f018054610853906115a5565b80601f016020809104026020016040519081016040528092919081815260200182805461087f906115a5565b80156108ca5780601f106108a1576101008083540402835291602001916108ca565b820191905f5260205f20905b8154815290600101906020018083116108ad57829003601f168201915b50505050509050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a9061197f565b60405180910390fd5b5f60149054906101000a900460ff16156109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a9906119e7565b60405180910390fd5b6108ae82106109f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ed9061155a565b60405180910390fd5b6109db815114610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3290611cbb565b60405180910390fd5b8060015f8481526020019081526020015f205f019081610a5b9190611d31565b505050565b60605f60015f8481526020019081526020015f206001018054905011610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab290611e4a565b60405180910390fd5b60015f8381526020019081526020015f20600101805480602002602001604051908101604052809291908181526020015f905b82821015610c3d578382905f5260205f2090600202016040518060400160405290815f82018054610b1e906115a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4a906115a5565b8015610b955780601f10610b6c57610100808354040283529160200191610b95565b820191905f5260205f20905b815481529060010190602001808311610b7857829003601f168201915b50505050508152602001600182018054610bae906115a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610bda906115a5565b8015610c255780601f10610bfc57610100808354040283529160200191610c25565b820191905f5260205f20905b815481529060010190602001808311610c0857829003601f168201915b50505050508152505081526020019060010190610aee565b505050509050919050565b60605f8203610c8e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610d9c565b5f8290505f5b5f8214610cbd578080610ca690611e68565b915050600a82610cb69190611edc565b9150610c94565b5f8167ffffffffffffffff811115610cd857610cd7610f51565b5b6040519080825280601f01601f191660200182016040528015610d0a5781602001600182028036833780820191505090505b5090505b5f8514610d9557600182610d229190611f0c565b9150600a85610d319190611f3f565b6030610d3d91906116fb565b60f81b818381518110610d5357610d5261172e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85610d8e9190611edc565b9450610d0e565b8093505050505b919050565b5080545f8255600202905f5260205f2090810190610dbf9190610dc2565b50565b5b80821115610df2575f8082015f610dda9190610df6565b600182015f610de99190610df6565b50600201610dc3565b5090565b508054610e02906115a5565b5f825580601f10610e135750610e30565b601f0160209004905f5260205f2090810190610e2f9190610e33565b5b50565b5b80821115610e4a575f815f905550600101610e34565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610e7181610e5f565b8114610e7b575f80fd5b50565b5f81359050610e8c81610e68565b92915050565b5f60208284031215610ea757610ea6610e57565b5b5f610eb484828501610e7e565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610eff82610ebd565b610f098185610ec7565b9350610f19818560208601610ed7565b610f2281610ee5565b840191505092915050565b5f6020820190508181035f830152610f458184610ef5565b905092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610f8782610ee5565b810181811067ffffffffffffffff82111715610fa657610fa5610f51565b5b80604052505050565b5f610fb8610e4e565b9050610fc48282610f7e565b919050565b5f67ffffffffffffffff821115610fe357610fe2610f51565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561101e5761101d610f51565b5b61102782610ee5565b9050602081019050919050565b828183375f83830152505050565b5f61105461104f84611004565b610faf565b9050828152602081018484840111156110705761106f611000565b5b61107b848285611034565b509392505050565b5f82601f83011261109757611096610f4d565b5b81356110a7848260208601611042565b91505092915050565b5f604082840312156110c5576110c4610ff8565b5b6110cf6040610faf565b90505f82013567ffffffffffffffff8111156110ee576110ed610ffc565b5b6110fa84828501611083565b5f83015250602082013567ffffffffffffffff81111561111d5761111c610ffc565b5b61112984828501611083565b60208301525092915050565b5f61114761114284610fc9565b610faf565b9050808382526020820190506020840283018581111561116a57611169610ff4565b5b835b818110156111b157803567ffffffffffffffff81111561118f5761118e610f4d565b5b80860161119c89826110b0565b8552602085019450505060208101905061116c565b5050509392505050565b5f82601f8301126111cf576111ce610f4d565b5b81356111df848260208601611135565b91505092915050565b5f80604083850312156111fe576111fd610e57565b5b5f61120b85828601610e7e565b925050602083013567ffffffffffffffff81111561122c5761122b610e5b565b5b611238858286016111bb565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f61126682611242565b611270818561124c565b9350611280818560208601610ed7565b61128981610ee5565b840191505092915050565b5f6020820190508181035f8301526112ac818461125c565b905092915050565b5f67ffffffffffffffff8211156112ce576112cd610f51565b5b6112d782610ee5565b9050602081019050919050565b5f6112f66112f1846112b4565b610faf565b90508281526020810184848401111561131257611311611000565b5b61131d848285611034565b509392505050565b5f82601f83011261133957611338610f4d565b5b81356113498482602086016112e4565b91505092915050565b5f806040838503121561136857611367610e57565b5b5f61137585828601610e7e565b925050602083013567ffffffffffffffff81111561139657611395610e5b565b5b6113a285828601611325565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6113ef82610ebd565b6113f981856113d5565b9350611409818560208601610ed7565b61141281610ee5565b840191505092915050565b5f604083015f8301518482035f86015261143782826113e5565b9150506020830151848203602086015261145182826113e5565b9150508091505092915050565b5f611469838361141d565b905092915050565b5f602082019050919050565b5f611487826113ac565b61149181856113b6565b9350836020820285016114a3856113c6565b805f5b858110156114de57848403895281516114bf858261145e565b94506114ca83611471565b925060208a019950506001810190506114a6565b50829750879550505050505092915050565b5f6020820190508181035f830152611508818461147d565b905092915050565b7f496e76616c696420746f6b656e496400000000000000000000000000000000005f82015250565b5f611544600f83610ec7565b915061154f82611510565b602082019050919050565b5f6020820190508181035f83015261157181611538565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806115bc57607f821691505b6020821081036115cf576115ce611578565b5b50919050565b7f506978656c2064617461206e6f742073657400000000000000000000000000005f82015250565b5f611609601283610ec7565b9150611614826115d5565b602082019050919050565b5f6020820190508181035f830152611636816115fd565b9050919050565b5f81905092915050565b5f61165182610ebd565b61165b818561163d565b935061166b818560208601610ed7565b80840191505092915050565b5f6116828284611647565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6116c482610e5f565b91506116cf83610e5f565b92508282026116dd81610e5f565b915082820484148315176116f4576116f361168d565b5b5092915050565b5f61170582610e5f565b915061171083610e5f565b92508282019050808211156117285761172761168d565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f3c7265637420783d2200000000000000000000000000000000000000000000005f82015250565b5f61178f60098361163d565b915061179a8261175b565b600982019050919050565b7f2220793d220000000000000000000000000000000000000000000000000000005f82015250565b5f6117d960058361163d565b91506117e4826117a5565b600582019050919050565b7f222077696474683d223122206865696768743d2231222073686170652d72656e5f8201527f646572696e673d2263726973704564676573222066696c6c3d22230000000000602082015250565b5f611849603b8361163d565b9150611854826117ef565b603b82019050919050565b7f222f3e00000000000000000000000000000000000000000000000000000000005f82015250565b5f61189360038361163d565b915061189e8261185f565b600382019050919050565b5f6118b48287611647565b91506118bf82611783565b91506118cb8286611647565b91506118d6826117cd565b91506118e28285611647565b91506118ed8261183d565b91506118f98284611647565b915061190482611887565b915081905095945050505050565b5f61191d8285611647565b91506119298284611647565b91508190509392505050565b7f4f6e6c79206465706c6f7965722e0000000000000000000000000000000000005f82015250565b5f611969600e83610ec7565b915061197482611935565b602082019050919050565b5f6020820190508181035f8301526119968161195d565b9050919050565b7f436f6e7472616374206973207365616c65642e000000000000000000000000005f82015250565b5f6119d1601383610ec7565b91506119dc8261199d565b602082019050919050565b5f6020820190508181035f8301526119fe816119c5565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611a617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611a26565b611a6b8683611a26565b95508019841693508086168417925050509392505050565b5f819050919050565b5f611aa6611aa1611a9c84610e5f565b611a83565b610e5f565b9050919050565b5f819050919050565b611abf83611a8c565b611ad3611acb82611aad565b848454611a32565b825550505050565b5f90565b611ae7611adb565b611af2818484611ab6565b505050565b5b81811015611b1557611b0a5f82611adf565b600181019050611af8565b5050565b601f821115611b5a57611b2b81611a05565b611b3484611a17565b81016020851015611b43578190505b611b57611b4f85611a17565b830182611af7565b50505b505050565b5f82821c905092915050565b5f611b7a5f1984600802611b5f565b1980831691505092915050565b5f611b928383611b6b565b9150826002028217905092915050565b611bab82610ebd565b67ffffffffffffffff811115611bc457611bc3610f51565b5b611bce82546115a5565b611bd9828285611b19565b5f60209050601f831160018114611c0a575f8415611bf8578287015190505b611c028582611b87565b865550611c69565b601f198416611c1886611a05565b5f5b82811015611c3f57848901518255600182019150602085019450602081019050611c1a565b86831015611c5c5784890151611c58601f891682611b6b565b8355505b6001600288020188555050505b505050505050565b7f496e76616c696420706978656c2064617461206c656e677468000000000000005f82015250565b5f611ca5601983610ec7565b9150611cb082611c71565b602082019050919050565b5f6020820190508181035f830152611cd281611c99565b9050919050565b5f819050815f5260205f209050919050565b601f821115611d2c57611cfd81611cd9565b611d0684611a17565b81016020851015611d15578190505b611d29611d2185611a17565b830182611af7565b50505b505050565b611d3a82611242565b67ffffffffffffffff811115611d5357611d52610f51565b5b611d5d82546115a5565b611d68828285611ceb565b5f60209050601f831160018114611d99575f8415611d87578287015190505b611d918582611b87565b865550611df8565b601f198416611da786611cd9565b5f5b82811015611dce57848901518255600182019150602085019450602081019050611da9565b86831015611deb5784890151611de7601f891682611b6b565b8355505b6001600288020188555050505b505050505050565b7f547261697473206e6f74207365740000000000000000000000000000000000005f82015250565b5f611e34600e83610ec7565b9150611e3f82611e00565b602082019050919050565b5f6020820190508181035f830152611e6181611e28565b9050919050565b5f611e7282610e5f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ea457611ea361168d565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611ee682610e5f565b9150611ef183610e5f565b925082611f0157611f00611eaf565b5b828204905092915050565b5f611f1682610e5f565b9150611f2183610e5f565b9250828203905081811115611f3957611f3861168d565b5b92915050565b5f611f4982610e5f565b9150611f5483610e5f565b925082611f6457611f63611eaf565b5b82820690509291505056fe646174613a696d6167652f7376672b786d6c3b757466382c3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222076657273696f6e3d22312e32222076696577426f783d22302030203239203239223ea2646970667358221220667c685f8b7b549c48a640be06c0619bf1a8943eae7d07bb4f95424e7913db2b64736f6c634300081a0033

Deployed Bytecode

0x608060405234801561000f575f80fd5b5060043610610060575f3560e01c80633efabdf41461006457806368bd580e14610094578063997c51d21461009e578063b44606f9146100ba578063dcd83a18146100ea578063e1dc076114610106575b5f80fd5b61007e60048036038101906100799190610e92565b610136565b60405161008b9190610f2d565b60405180910390f35b61009c61054c565b005b6100b860048036038101906100b391906111e8565b610644565b005b6100d460048036038101906100cf9190610e92565b61078e565b6040516100e19190611294565b60405180910390f35b61010460048036038101906100ff9190611352565b6108d6565b005b610120600480360381019061011b9190610e92565b610a60565b60405161012d91906114f0565b60405180910390f35b60606108ae821061017c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016101739061155a565b60405180910390fd5b5f60015f8481526020019081526020015f205f01805461019b906115a5565b80601f01602080910402602001604051908101604052809291908181526020018280546101c7906115a5565b80156102125780601f106101e957610100808354040283529160200191610212565b820191905f5260205f20905b8154815290600101906020018083116101f557829003601f168201915b505050505090505f81511161025c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102539061161f565b60405180910390fd5b6040518060a0016040528060628152602001611f70606291396040516020016102859190611677565b60405160208183030381529060405291505f600767ffffffffffffffff8111156102b2576102b1610f51565b5b6040519080825280601f01601f1916602001820160405280156102e45781602001600182028036833780820191505090505b5090505f5b601d8110156104eb575f5b601d8110156104dd575f600382601d8561030e91906116ba565b61031891906116fb565b61032291906116ba565b90505f5b6003811015610496575f86828461033d91906116fb565b8151811061034e5761034d61172e565b5b602001015160f81c60f81b60f81c90507f3031323334353637383961626364656600000000000000000000000000000000600f821660ff16601081106103975761039661172e565b5b1a60f81b8660016002856103ab91906116ba565b6103b591906116fb565b815181106103c6576103c561172e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a90535060038160ff16901c90507f3031323334353637383961626364656600000000000000000000000000000000600f821660ff16601081106104375761043661172e565b5b1a60f81b8660028461044991906116ba565b8151811061045a5761045961172e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350508080600101915050610326565b50856104a183610c48565b6104aa85610c48565b866040516020016104be94939291906118a9565b60405160208183030381529060405295505080806001019150506102f4565b5080806001019150506102e9565b50826040518060400160405280600681526020017f3c2f7376673e0000000000000000000000000000000000000000000000000000815250604051602001610534929190611912565b60405160208183030381529060405292505050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105d09061197f565b60405180910390fd5b5f60149054906101000a900460ff1615610628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061f906119e7565b60405180910390fd5b60015f60146101000a81548160ff021916908315150217905550565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146106d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c89061197f565b60405180910390fd5b60015f8381526020019081526020015f206001015f6106f09190610da1565b5f5b81518110156107895760015f8481526020019081526020015f206001018282815181106107225761072161172e565b5b6020026020010151908060018154018082558091505060019003905f5260205f2090600202015f909190919091505f820151815f0190816107639190611ba2565b5060208201518160010190816107799190611ba2565b50505080806001019150506106f2565b505050565b60606108ae82106107d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107cb9061155a565b60405180910390fd5b5f60015f8481526020019081526020015f205f0180546107f3906115a5565b905011610835576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082c9061161f565b60405180910390fd5b60015f8381526020019081526020015f205f018054610853906115a5565b80601f016020809104026020016040519081016040528092919081815260200182805461087f906115a5565b80156108ca5780601f106108a1576101008083540402835291602001916108ca565b820191905f5260205f20905b8154815290600101906020018083116108ad57829003601f168201915b50505050509050919050565b5f8054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610963576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095a9061197f565b60405180910390fd5b5f60149054906101000a900460ff16156109b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a9906119e7565b60405180910390fd5b6108ae82106109f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109ed9061155a565b60405180910390fd5b6109db815114610a3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3290611cbb565b60405180910390fd5b8060015f8481526020019081526020015f205f019081610a5b9190611d31565b505050565b60605f60015f8481526020019081526020015f206001018054905011610abb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab290611e4a565b60405180910390fd5b60015f8381526020019081526020015f20600101805480602002602001604051908101604052809291908181526020015f905b82821015610c3d578382905f5260205f2090600202016040518060400160405290815f82018054610b1e906115a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4a906115a5565b8015610b955780601f10610b6c57610100808354040283529160200191610b95565b820191905f5260205f20905b815481529060010190602001808311610b7857829003601f168201915b50505050508152602001600182018054610bae906115a5565b80601f0160208091040260200160405190810160405280929190818152602001828054610bda906115a5565b8015610c255780601f10610bfc57610100808354040283529160200191610c25565b820191905f5260205f20905b815481529060010190602001808311610c0857829003601f168201915b50505050508152505081526020019060010190610aee565b505050509050919050565b60605f8203610c8e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050610d9c565b5f8290505f5b5f8214610cbd578080610ca690611e68565b915050600a82610cb69190611edc565b9150610c94565b5f8167ffffffffffffffff811115610cd857610cd7610f51565b5b6040519080825280601f01601f191660200182016040528015610d0a5781602001600182028036833780820191505090505b5090505b5f8514610d9557600182610d229190611f0c565b9150600a85610d319190611f3f565b6030610d3d91906116fb565b60f81b818381518110610d5357610d5261172e565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690815f1a905350600a85610d8e9190611edc565b9450610d0e565b8093505050505b919050565b5080545f8255600202905f5260205f2090810190610dbf9190610dc2565b50565b5b80821115610df2575f8082015f610dda9190610df6565b600182015f610de99190610df6565b50600201610dc3565b5090565b508054610e02906115a5565b5f825580601f10610e135750610e30565b601f0160209004905f5260205f2090810190610e2f9190610e33565b5b50565b5b80821115610e4a575f815f905550600101610e34565b5090565b5f604051905090565b5f80fd5b5f80fd5b5f819050919050565b610e7181610e5f565b8114610e7b575f80fd5b50565b5f81359050610e8c81610e68565b92915050565b5f60208284031215610ea757610ea6610e57565b5b5f610eb484828501610e7e565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f610eff82610ebd565b610f098185610ec7565b9350610f19818560208601610ed7565b610f2281610ee5565b840191505092915050565b5f6020820190508181035f830152610f458184610ef5565b905092915050565b5f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b610f8782610ee5565b810181811067ffffffffffffffff82111715610fa657610fa5610f51565b5b80604052505050565b5f610fb8610e4e565b9050610fc48282610f7e565b919050565b5f67ffffffffffffffff821115610fe357610fe2610f51565b5b602082029050602081019050919050565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f67ffffffffffffffff82111561101e5761101d610f51565b5b61102782610ee5565b9050602081019050919050565b828183375f83830152505050565b5f61105461104f84611004565b610faf565b9050828152602081018484840111156110705761106f611000565b5b61107b848285611034565b509392505050565b5f82601f83011261109757611096610f4d565b5b81356110a7848260208601611042565b91505092915050565b5f604082840312156110c5576110c4610ff8565b5b6110cf6040610faf565b90505f82013567ffffffffffffffff8111156110ee576110ed610ffc565b5b6110fa84828501611083565b5f83015250602082013567ffffffffffffffff81111561111d5761111c610ffc565b5b61112984828501611083565b60208301525092915050565b5f61114761114284610fc9565b610faf565b9050808382526020820190506020840283018581111561116a57611169610ff4565b5b835b818110156111b157803567ffffffffffffffff81111561118f5761118e610f4d565b5b80860161119c89826110b0565b8552602085019450505060208101905061116c565b5050509392505050565b5f82601f8301126111cf576111ce610f4d565b5b81356111df848260208601611135565b91505092915050565b5f80604083850312156111fe576111fd610e57565b5b5f61120b85828601610e7e565b925050602083013567ffffffffffffffff81111561122c5761122b610e5b565b5b611238858286016111bb565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f61126682611242565b611270818561124c565b9350611280818560208601610ed7565b61128981610ee5565b840191505092915050565b5f6020820190508181035f8301526112ac818461125c565b905092915050565b5f67ffffffffffffffff8211156112ce576112cd610f51565b5b6112d782610ee5565b9050602081019050919050565b5f6112f66112f1846112b4565b610faf565b90508281526020810184848401111561131257611311611000565b5b61131d848285611034565b509392505050565b5f82601f83011261133957611338610f4d565b5b81356113498482602086016112e4565b91505092915050565b5f806040838503121561136857611367610e57565b5b5f61137585828601610e7e565b925050602083013567ffffffffffffffff81111561139657611395610e5b565b5b6113a285828601611325565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f82825260208201905092915050565b5f6113ef82610ebd565b6113f981856113d5565b9350611409818560208601610ed7565b61141281610ee5565b840191505092915050565b5f604083015f8301518482035f86015261143782826113e5565b9150506020830151848203602086015261145182826113e5565b9150508091505092915050565b5f611469838361141d565b905092915050565b5f602082019050919050565b5f611487826113ac565b61149181856113b6565b9350836020820285016114a3856113c6565b805f5b858110156114de57848403895281516114bf858261145e565b94506114ca83611471565b925060208a019950506001810190506114a6565b50829750879550505050505092915050565b5f6020820190508181035f830152611508818461147d565b905092915050565b7f496e76616c696420746f6b656e496400000000000000000000000000000000005f82015250565b5f611544600f83610ec7565b915061154f82611510565b602082019050919050565b5f6020820190508181035f83015261157181611538565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806115bc57607f821691505b6020821081036115cf576115ce611578565b5b50919050565b7f506978656c2064617461206e6f742073657400000000000000000000000000005f82015250565b5f611609601283610ec7565b9150611614826115d5565b602082019050919050565b5f6020820190508181035f830152611636816115fd565b9050919050565b5f81905092915050565b5f61165182610ebd565b61165b818561163d565b935061166b818560208601610ed7565b80840191505092915050565b5f6116828284611647565b915081905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6116c482610e5f565b91506116cf83610e5f565b92508282026116dd81610e5f565b915082820484148315176116f4576116f361168d565b5b5092915050565b5f61170582610e5f565b915061171083610e5f565b92508282019050808211156117285761172761168d565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f3c7265637420783d2200000000000000000000000000000000000000000000005f82015250565b5f61178f60098361163d565b915061179a8261175b565b600982019050919050565b7f2220793d220000000000000000000000000000000000000000000000000000005f82015250565b5f6117d960058361163d565b91506117e4826117a5565b600582019050919050565b7f222077696474683d223122206865696768743d2231222073686170652d72656e5f8201527f646572696e673d2263726973704564676573222066696c6c3d22230000000000602082015250565b5f611849603b8361163d565b9150611854826117ef565b603b82019050919050565b7f222f3e00000000000000000000000000000000000000000000000000000000005f82015250565b5f61189360038361163d565b915061189e8261185f565b600382019050919050565b5f6118b48287611647565b91506118bf82611783565b91506118cb8286611647565b91506118d6826117cd565b91506118e28285611647565b91506118ed8261183d565b91506118f98284611647565b915061190482611887565b915081905095945050505050565b5f61191d8285611647565b91506119298284611647565b91508190509392505050565b7f4f6e6c79206465706c6f7965722e0000000000000000000000000000000000005f82015250565b5f611969600e83610ec7565b915061197482611935565b602082019050919050565b5f6020820190508181035f8301526119968161195d565b9050919050565b7f436f6e7472616374206973207365616c65642e000000000000000000000000005f82015250565b5f6119d1601383610ec7565b91506119dc8261199d565b602082019050919050565b5f6020820190508181035f8301526119fe816119c5565b9050919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302611a617fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82611a26565b611a6b8683611a26565b95508019841693508086168417925050509392505050565b5f819050919050565b5f611aa6611aa1611a9c84610e5f565b611a83565b610e5f565b9050919050565b5f819050919050565b611abf83611a8c565b611ad3611acb82611aad565b848454611a32565b825550505050565b5f90565b611ae7611adb565b611af2818484611ab6565b505050565b5b81811015611b1557611b0a5f82611adf565b600181019050611af8565b5050565b601f821115611b5a57611b2b81611a05565b611b3484611a17565b81016020851015611b43578190505b611b57611b4f85611a17565b830182611af7565b50505b505050565b5f82821c905092915050565b5f611b7a5f1984600802611b5f565b1980831691505092915050565b5f611b928383611b6b565b9150826002028217905092915050565b611bab82610ebd565b67ffffffffffffffff811115611bc457611bc3610f51565b5b611bce82546115a5565b611bd9828285611b19565b5f60209050601f831160018114611c0a575f8415611bf8578287015190505b611c028582611b87565b865550611c69565b601f198416611c1886611a05565b5f5b82811015611c3f57848901518255600182019150602085019450602081019050611c1a565b86831015611c5c5784890151611c58601f891682611b6b565b8355505b6001600288020188555050505b505050505050565b7f496e76616c696420706978656c2064617461206c656e677468000000000000005f82015250565b5f611ca5601983610ec7565b9150611cb082611c71565b602082019050919050565b5f6020820190508181035f830152611cd281611c99565b9050919050565b5f819050815f5260205f209050919050565b601f821115611d2c57611cfd81611cd9565b611d0684611a17565b81016020851015611d15578190505b611d29611d2185611a17565b830182611af7565b50505b505050565b611d3a82611242565b67ffffffffffffffff811115611d5357611d52610f51565b5b611d5d82546115a5565b611d68828285611ceb565b5f60209050601f831160018114611d99575f8415611d87578287015190505b611d918582611b87565b865550611df8565b601f198416611da786611cd9565b5f5b82811015611dce57848901518255600182019150602085019450602081019050611da9565b86831015611deb5784890151611de7601f891682611b6b565b8355505b6001600288020188555050505b505050505050565b7f547261697473206e6f74207365740000000000000000000000000000000000005f82015250565b5f611e34600e83610ec7565b9150611e3f82611e00565b602082019050919050565b5f6020820190508181035f830152611e6181611e28565b9050919050565b5f611e7282610e5f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203611ea457611ea361168d565b5b600182019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f611ee682610e5f565b9150611ef183610e5f565b925082611f0157611f00611eaf565b5b828204905092915050565b5f611f1682610e5f565b9150611f2183610e5f565b9250828203905081811115611f3957611f3861168d565b5b92915050565b5f611f4982610e5f565b9150611f5483610e5f565b925082611f6457611f63611eaf565b5b82820690509291505056fe646174613a696d6167652f7376672b786d6c3b757466382c3c73766720786d6c6e733d22687474703a2f2f7777772e77332e6f72672f323030302f737667222076657273696f6e3d22312e32222076696577426f783d22302030203239203239223ea2646970667358221220667c685f8b7b549c48a640be06c0619bf1a8943eae7d07bb4f95424e7913db2b64736f6c634300081a0033

Deployed Bytecode Sourcemap

178:5121:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2962:1093;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1269:95;;;:::i;:::-;;1886:277;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2566:258;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1593:286;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2209:196;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2962:1093;3021:17;3069:4;3059:7;:14;3051:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;3104:19;3126:7;:16;3134:7;3126:16;;;;;;;;;;;:26;;3104:48;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3187:1;3171:6;:13;:17;3163:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;3254:10;;;;;;;;;;;;;;;;;3237:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;3224:42;;3277:19;3309:1;3299:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3277:34;;3327:6;3322:666;3343:2;3339:1;:6;3322:666;;;3372:6;3367:610;3388:2;3384:1;:6;3367:610;;;3416:6;3440:1;3435;3430:2;3426:1;:6;;;;:::i;:::-;:10;;;;:::i;:::-;3425:16;;;;:::i;:::-;3416:25;;3465:6;3460:272;3481:1;3477;:5;3460:272;;;3512:11;3532:6;3543:1;3539;:5;;;;:::i;:::-;3532:13;;;;;;;;:::i;:::-;;;;;;;;;;3526:20;;3512:34;;3589:12;3610:3;3602:5;:11;3589:25;;;;;;;;;:::i;:::-;;;;;3569:6;3584:1;3580;3576;:5;;;;:::i;:::-;:9;;;;:::i;:::-;3569:17;;;;;;;;:::i;:::-;;;;;:45;;;;;;;;;;;3647:1;3637:11;;;;;;;3687:12;3708:3;3700:5;:11;3687:25;;;;;;;;;:::i;:::-;;;;;3671:6;3682:1;3678;:5;;;;:::i;:::-;3671:13;;;;;;;;:::i;:::-;;;;;:41;;;;;;;;;;;3489:243;3484:3;;;;;;;3460:272;;;;3780:3;3819:11;3828:1;3819:8;:11::i;:::-;3841;3850:1;3841:8;:11::i;:::-;3945:6;3763:197;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;3750:211;;3397:580;3392:3;;;;;;;3367:610;;;;3347:3;;;;;;;3322:666;;;;4030:3;4035:10;;;;;;;;;;;;;;;;;4013:33;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4000:47;;3040:1015;;2962:1093;;;:::o;1269:95::-;951:8;;;;;;;;;;937:22;;:10;:22;;;929:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1046:14:::1;;;;;;;;;;;1045:15;1037:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1352:4:::2;1335:14;;:21;;;;;;;;;;;;;;;;;;1269:95::o:0;1886:277::-;951:8;;;;;;;;;;937:22;;:10;:22;;;929:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1987:7:::1;:16;1995:7;1987:16;;;;;;;;;;;:23;;;1980:30;;;;:::i;:::-;2051:9;2046:110;2070:6;:13;2066:1;:17;2046:110;;;2105:7;:16;2113:7;2105:16;;;;;;;;;;;:23;;2134:6;2141:1;2134:9;;;;;;;;:::i;:::-;;;;;;;;2105:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;2085:3;;;;;;;2046:110;;;;1886:277:::0;;:::o;2566:258::-;2626:12;2669:4;2659:7;:14;2651:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;2748:1;2712:7;:16;2720:7;2712:16;;;;;;;;;;;:26;;:33;;;;;:::i;:::-;;;:37;2704:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2790:7;:16;2798:7;2790:16;;;;;;;;;;;:26;;2783:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2566:258;;;:::o;1593:286::-;951:8;;;;;;;;;;937:22;;:10;:22;;;929:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;1046:14:::1;;;;;;;;;;;1045:15;1037:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;1718:4:::2;1708:7;:14;1700:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;1781:11;1761:9;:16;:31;1753:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;1862:9;1833:7;:16;1841:7;1833:16;;;;;;;;;;;:26;;:38;;;;;;:::i;:::-;;1593:286:::0;;:::o;2209:196::-;2268:14;2336:1;2303:7;:16;2311:7;2303:16;;;;;;;;;;;:23;;:30;;;;:34;2295:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;2374:7;:16;2382:7;2374:16;;;;;;;;;;;:23;;2367:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2209:196;;;:::o;4573:723::-;4629:13;4859:1;4850:5;:10;4846:53;;4877:10;;;;;;;;;;;;;;;;;;;;;4846:53;4909:12;4924:5;4909:20;;4940:14;4965:78;4980:1;4972:4;:9;4965:78;;4998:8;;;;;:::i;:::-;;;;5029:2;5021:10;;;;;:::i;:::-;;;4965:78;;;5053:19;5085:6;5075:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5053:39;;5103:154;5119:1;5110:5;:10;5103:154;;5147:1;5137:11;;;;;:::i;:::-;;;5214:2;5206:5;:10;;;;:::i;:::-;5193:2;:24;;;;:::i;:::-;5180:39;;5163:6;5170;5163:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;5243:2;5234:11;;;;;:::i;:::-;;;5103:154;;;5281:6;5267:21;;;;;4573:723;;;;:::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:135::-;11062:6;11096:5;11090:12;11080:22;;10974:135;;;:::o;11115:205::-;11235:11;11269:6;11264:3;11257:19;11309:4;11304:3;11300:14;11285:29;;11115:205;;;;:::o;11326:153::-;11414:4;11437:3;11429:11;;11467:4;11462:3;11458:14;11450:22;;11326:153;;;:::o;11485:159::-;11559:11;11593:6;11588:3;11581:19;11633:4;11628:3;11624:14;11609:29;;11485:159;;;;:::o;11650:357::-;11728:3;11756:39;11789:5;11756:39;:::i;:::-;11811:61;11865:6;11860:3;11811:61;:::i;:::-;11804:68;;11881:65;11939:6;11934:3;11927:4;11920:5;11916:16;11881:65;:::i;:::-;11971:29;11993:6;11971:29;:::i;:::-;11966:3;11962:39;11955:46;;11732:275;11650:357;;;;:::o;12079:665::-;12180:3;12216:4;12211:3;12207:14;12308:4;12301:5;12297:16;12291:23;12361:3;12355:4;12351:14;12344:4;12339:3;12335:14;12328:38;12387:73;12455:4;12441:12;12387:73;:::i;:::-;12379:81;;12231:240;12554:4;12547:5;12543:16;12537:23;12607:3;12601:4;12597:14;12590:4;12585:3;12581:14;12574:38;12633:73;12701:4;12687:12;12633:73;:::i;:::-;12625:81;;12481:236;12734:4;12727:11;;12185:559;12079:665;;;;:::o;12750:240::-;12861:10;12896:88;12980:3;12972:6;12896:88;:::i;:::-;12882:102;;12750:240;;;;:::o;12996:134::-;13087:4;13119;13114:3;13110:14;13102:22;;12996:134;;;:::o;13206:1079::-;13367:3;13396:75;13465:5;13396:75;:::i;:::-;13487:107;13587:6;13582:3;13487:107;:::i;:::-;13480:114;;13620:3;13665:4;13657:6;13653:17;13648:3;13644:27;13695:77;13766:5;13695:77;:::i;:::-;13795:7;13826:1;13811:429;13836:6;13833:1;13830:13;13811:429;;;13907:9;13901:4;13897:20;13892:3;13885:33;13958:6;13952:13;13986:106;14087:4;14072:13;13986:106;:::i;:::-;13978:114;;14115:81;14189:6;14115:81;:::i;:::-;14105:91;;14225:4;14220:3;14216:14;14209:21;;13871:369;13858:1;13855;13851:9;13846:14;;13811:429;;;13815:14;14256:4;14249:11;;14276:3;14269:10;;13372:913;;;;;13206:1079;;;;:::o;14291:457::-;14476:4;14514:2;14503:9;14499:18;14491:26;;14563:9;14557:4;14553:20;14549:1;14538:9;14534:17;14527:47;14591:150;14736:4;14727:6;14591:150;:::i;:::-;14583:158;;14291:457;;;;:::o;14754:165::-;14894:17;14890:1;14882:6;14878:14;14871:41;14754:165;:::o;14925:366::-;15067:3;15088:67;15152:2;15147:3;15088:67;:::i;:::-;15081:74;;15164:93;15253:3;15164:93;:::i;:::-;15282:2;15277:3;15273:12;15266:19;;14925:366;;;:::o;15297:419::-;15463:4;15501:2;15490:9;15486:18;15478:26;;15550:9;15544:4;15540:20;15536:1;15525:9;15521:17;15514:47;15578:131;15704:4;15578:131;:::i;:::-;15570:139;;15297:419;;;:::o;15722:180::-;15770:77;15767:1;15760:88;15867:4;15864:1;15857:15;15891:4;15888:1;15881:15;15908:320;15952:6;15989:1;15983:4;15979:12;15969:22;;16036:1;16030:4;16026:12;16057:18;16047:81;;16113:4;16105:6;16101:17;16091:27;;16047:81;16175:2;16167:6;16164:14;16144:18;16141:38;16138:84;;16194:18;;:::i;:::-;16138:84;15959:269;15908:320;;;:::o;16234:168::-;16374:20;16370:1;16362:6;16358:14;16351:44;16234:168;:::o;16408:366::-;16550:3;16571:67;16635:2;16630:3;16571:67;:::i;:::-;16564:74;;16647:93;16736:3;16647:93;:::i;:::-;16765:2;16760:3;16756:12;16749:19;;16408:366;;;:::o;16780:419::-;16946:4;16984:2;16973:9;16969:18;16961:26;;17033:9;17027:4;17023:20;17019:1;17008:9;17004:17;16997:47;17061:131;17187:4;17061:131;:::i;:::-;17053:139;;16780:419;;;:::o;17205:148::-;17307:11;17344:3;17329:18;;17205:148;;;;:::o;17359:390::-;17465:3;17493:39;17526:5;17493:39;:::i;:::-;17548:89;17630:6;17625:3;17548:89;:::i;:::-;17541:96;;17646:65;17704:6;17699:3;17692:4;17685:5;17681:16;17646:65;:::i;:::-;17736:6;17731:3;17727:16;17720:23;;17469:280;17359:390;;;;:::o;17755:275::-;17887:3;17909:95;18000:3;17991:6;17909:95;:::i;:::-;17902:102;;18021:3;18014:10;;17755:275;;;;:::o;18036:180::-;18084:77;18081:1;18074:88;18181:4;18178:1;18171:15;18205:4;18202:1;18195:15;18222:410;18262:7;18285:20;18303:1;18285:20;:::i;:::-;18280:25;;18319:20;18337:1;18319:20;:::i;:::-;18314:25;;18374:1;18371;18367:9;18396:30;18414:11;18396:30;:::i;:::-;18385:41;;18575:1;18566:7;18562:15;18559:1;18556:22;18536:1;18529:9;18509:83;18486:139;;18605:18;;:::i;:::-;18486:139;18270:362;18222:410;;;;:::o;18638:191::-;18678:3;18697:20;18715:1;18697:20;:::i;:::-;18692:25;;18731:20;18749:1;18731:20;:::i;:::-;18726:25;;18774:1;18771;18767:9;18760:16;;18795:3;18792:1;18789:10;18786:36;;;18802:18;;:::i;:::-;18786:36;18638:191;;;;:::o;18835:180::-;18883:77;18880:1;18873:88;18980:4;18977:1;18970:15;19004:4;19001:1;18994:15;19021:214;19161:66;19157:1;19149:6;19145:14;19138:90;19021:214;:::o;19241:400::-;19401:3;19422:84;19504:1;19499:3;19422:84;:::i;:::-;19415:91;;19515:93;19604:3;19515:93;:::i;:::-;19633:1;19628:3;19624:11;19617:18;;19241:400;;;:::o;19647:214::-;19787:66;19783:1;19775:6;19771:14;19764:90;19647:214;:::o;19867:400::-;20027:3;20048:84;20130:1;20125:3;20048:84;:::i;:::-;20041:91;;20141:93;20230:3;20141:93;:::i;:::-;20259:1;20254:3;20250:11;20243:18;;19867:400;;;:::o;20273:315::-;20413:66;20409:1;20401:6;20397:14;20390:90;20514:66;20509:2;20501:6;20497:15;20490:91;20273:315;:::o;20594:402::-;20754:3;20775:85;20857:2;20852:3;20775:85;:::i;:::-;20768:92;;20869:93;20958:3;20869:93;:::i;:::-;20987:2;20982:3;20978:12;20971:19;;20594:402;;;:::o;21002:214::-;21142:66;21138:1;21130:6;21126:14;21119:90;21002:214;:::o;21222:400::-;21382:3;21403:84;21485:1;21480:3;21403:84;:::i;:::-;21396:91;;21496:93;21585:3;21496:93;:::i;:::-;21614:1;21609:3;21605:11;21598:18;;21222:400;;;:::o;21628:1819::-;22308:3;22330:95;22421:3;22412:6;22330:95;:::i;:::-;22323:102;;22442:148;22586:3;22442:148;:::i;:::-;22435:155;;22607:95;22698:3;22689:6;22607:95;:::i;:::-;22600:102;;22719:148;22863:3;22719:148;:::i;:::-;22712:155;;22884:95;22975:3;22966:6;22884:95;:::i;:::-;22877:102;;22996:148;23140:3;22996:148;:::i;:::-;22989:155;;23161:95;23252:3;23243:6;23161:95;:::i;:::-;23154:102;;23273:148;23417:3;23273:148;:::i;:::-;23266:155;;23438:3;23431:10;;21628:1819;;;;;;;:::o;23453:435::-;23633:3;23655:95;23746:3;23737:6;23655:95;:::i;:::-;23648:102;;23767:95;23858:3;23849:6;23767:95;:::i;:::-;23760:102;;23879:3;23872:10;;23453:435;;;;;:::o;23894:164::-;24034:16;24030:1;24022:6;24018:14;24011:40;23894:164;:::o;24064:366::-;24206:3;24227:67;24291:2;24286:3;24227:67;:::i;:::-;24220:74;;24303:93;24392:3;24303:93;:::i;:::-;24421:2;24416:3;24412:12;24405:19;;24064:366;;;:::o;24436:419::-;24602:4;24640:2;24629:9;24625:18;24617:26;;24689:9;24683:4;24679:20;24675:1;24664:9;24660:17;24653:47;24717:131;24843:4;24717:131;:::i;:::-;24709:139;;24436:419;;;:::o;24861:169::-;25001:21;24997:1;24989:6;24985:14;24978:45;24861:169;:::o;25036:366::-;25178:3;25199:67;25263:2;25258:3;25199:67;:::i;:::-;25192:74;;25275:93;25364:3;25275:93;:::i;:::-;25393:2;25388:3;25384:12;25377:19;;25036:366;;;:::o;25408:419::-;25574:4;25612:2;25601:9;25597:18;25589:26;;25661:9;25655:4;25651:20;25647:1;25636:9;25632:17;25625:47;25689:131;25815:4;25689:131;:::i;:::-;25681:139;;25408:419;;;:::o;25833:141::-;25882:4;25905:3;25897:11;;25928:3;25925:1;25918:14;25962:4;25959:1;25949:18;25941:26;;25833:141;;;:::o;25980:93::-;26017:6;26064:2;26059;26052:5;26048:14;26044:23;26034:33;;25980:93;;;:::o;26079:107::-;26123:8;26173:5;26167:4;26163:16;26142:37;;26079:107;;;;:::o;26192:393::-;26261:6;26311:1;26299:10;26295:18;26334:97;26364:66;26353:9;26334:97;:::i;:::-;26452:39;26482:8;26471:9;26452:39;:::i;:::-;26440:51;;26524:4;26520:9;26513:5;26509:21;26500:30;;26573:4;26563:8;26559:19;26552:5;26549:30;26539:40;;26268:317;;26192:393;;;;;:::o;26591:60::-;26619:3;26640:5;26633:12;;26591:60;;;:::o;26657:142::-;26707:9;26740:53;26758:34;26767:24;26785:5;26767:24;:::i;:::-;26758:34;:::i;:::-;26740:53;:::i;:::-;26727:66;;26657:142;;;:::o;26805:75::-;26848:3;26869:5;26862:12;;26805:75;;;:::o;26886:269::-;26996:39;27027:7;26996:39;:::i;:::-;27057:91;27106:41;27130:16;27106:41;:::i;:::-;27098:6;27091:4;27085:11;27057:91;:::i;:::-;27051:4;27044:105;26962:193;26886:269;;;:::o;27161:73::-;27206:3;27161:73;:::o;27240:189::-;27317:32;;:::i;:::-;27358:65;27416:6;27408;27402:4;27358:65;:::i;:::-;27293:136;27240:189;;:::o;27435:186::-;27495:120;27512:3;27505:5;27502:14;27495:120;;;27566:39;27603:1;27596:5;27566:39;:::i;:::-;27539:1;27532:5;27528:13;27519:22;;27495:120;;;27435:186;;:::o;27627:543::-;27728:2;27723:3;27720:11;27717:446;;;27762:38;27794:5;27762:38;:::i;:::-;27846:29;27864:10;27846:29;:::i;:::-;27836:8;27832:44;28029:2;28017:10;28014:18;28011:49;;;28050:8;28035:23;;28011:49;28073:80;28129:22;28147:3;28129:22;:::i;:::-;28119:8;28115:37;28102:11;28073:80;:::i;:::-;27732:431;;27717:446;27627:543;;;:::o;28176:117::-;28230:8;28280:5;28274:4;28270:16;28249:37;;28176:117;;;;:::o;28299:169::-;28343:6;28376:51;28424:1;28420:6;28412:5;28409:1;28405:13;28376:51;:::i;:::-;28372:56;28457:4;28451;28447:15;28437:25;;28350:118;28299:169;;;;:::o;28473:295::-;28549:4;28695:29;28720:3;28714:4;28695:29;:::i;:::-;28687:37;;28757:3;28754:1;28750:11;28744:4;28741:21;28733:29;;28473:295;;;;:::o;28773:1395::-;28890:37;28923:3;28890:37;:::i;:::-;28992:18;28984:6;28981:30;28978:56;;;29014:18;;:::i;:::-;28978:56;29058:38;29090:4;29084:11;29058:38;:::i;:::-;29143:67;29203:6;29195;29189:4;29143:67;:::i;:::-;29237:1;29261:4;29248:17;;29293:2;29285:6;29282:14;29310:1;29305:618;;;;29967:1;29984:6;29981:77;;;30033:9;30028:3;30024:19;30018:26;30009:35;;29981:77;30084:67;30144:6;30137:5;30084:67;:::i;:::-;30078:4;30071:81;29940:222;29275:887;;29305:618;29357:4;29353:9;29345:6;29341:22;29391:37;29423:4;29391:37;:::i;:::-;29450:1;29464:208;29478:7;29475:1;29472:14;29464:208;;;29557:9;29552:3;29548:19;29542:26;29534:6;29527:42;29608:1;29600:6;29596:14;29586:24;;29655:2;29644:9;29640:18;29627:31;;29501:4;29498:1;29494:12;29489:17;;29464:208;;;29700:6;29691:7;29688:19;29685:179;;;29758:9;29753:3;29749:19;29743:26;29801:48;29843:4;29835:6;29831:17;29820:9;29801:48;:::i;:::-;29793:6;29786:64;29708:156;29685:179;29910:1;29906;29898:6;29894:14;29890:22;29884:4;29877:36;29312:611;;;29275:887;;28865:1303;;;28773:1395;;:::o;30174:175::-;30314:27;30310:1;30302:6;30298:14;30291:51;30174:175;:::o;30355:366::-;30497:3;30518:67;30582:2;30577:3;30518:67;:::i;:::-;30511:74;;30594:93;30683:3;30594:93;:::i;:::-;30712:2;30707:3;30703:12;30696:19;;30355:366;;;:::o;30727:419::-;30893:4;30931:2;30920:9;30916:18;30908:26;;30980:9;30974:4;30970:20;30966:1;30955:9;30951:17;30944:47;31008:131;31134:4;31008:131;:::i;:::-;31000:139;;30727:419;;;:::o;31152:140::-;31200:4;31223:3;31215:11;;31246:3;31243:1;31236:14;31280:4;31277:1;31267:18;31259:26;;31152:140;;;:::o;31298:541::-;31398:2;31393:3;31390:11;31387:445;;;31432:37;31463:5;31432:37;:::i;:::-;31515:29;31533:10;31515:29;:::i;:::-;31505:8;31501:44;31698:2;31686:10;31683:18;31680:49;;;31719:8;31704:23;;31680:49;31742:80;31798:22;31816:3;31798:22;:::i;:::-;31788:8;31784:37;31771:11;31742:80;:::i;:::-;31402:430;;31387:445;31298:541;;;:::o;31845:1390::-;31960:36;31992:3;31960:36;:::i;:::-;32061:18;32053:6;32050:30;32047:56;;;32083:18;;:::i;:::-;32047:56;32127:38;32159:4;32153:11;32127:38;:::i;:::-;32212:66;32271:6;32263;32257:4;32212:66;:::i;:::-;32305:1;32329:4;32316:17;;32361:2;32353:6;32350:14;32378:1;32373:617;;;;33034:1;33051:6;33048:77;;;33100:9;33095:3;33091:19;33085:26;33076:35;;33048:77;33151:67;33211:6;33204:5;33151:67;:::i;:::-;33145:4;33138:81;33007:222;32343:886;;32373:617;32425:4;32421:9;32413:6;32409:22;32459:36;32490:4;32459:36;:::i;:::-;32517:1;32531:208;32545:7;32542:1;32539:14;32531:208;;;32624:9;32619:3;32615:19;32609:26;32601:6;32594:42;32675:1;32667:6;32663:14;32653:24;;32722:2;32711:9;32707:18;32694:31;;32568:4;32565:1;32561:12;32556:17;;32531:208;;;32767:6;32758:7;32755:19;32752:179;;;32825:9;32820:3;32816:19;32810:26;32868:48;32910:4;32902:6;32898:17;32887:9;32868:48;:::i;:::-;32860:6;32853:64;32775:156;32752:179;32977:1;32973;32965:6;32961:14;32957:22;32951:4;32944:36;32380:610;;;32343:886;;31935:1300;;;31845:1390;;:::o;33241:164::-;33381:16;33377:1;33369:6;33365:14;33358:40;33241:164;:::o;33411:366::-;33553:3;33574:67;33638:2;33633:3;33574:67;:::i;:::-;33567:74;;33650:93;33739:3;33650:93;:::i;:::-;33768:2;33763:3;33759:12;33752:19;;33411:366;;;:::o;33783:419::-;33949:4;33987:2;33976:9;33972:18;33964:26;;34036:9;34030:4;34026:20;34022:1;34011:9;34007:17;34000:47;34064:131;34190:4;34064:131;:::i;:::-;34056:139;;33783:419;;;:::o;34208:233::-;34247:3;34270:24;34288:5;34270:24;:::i;:::-;34261:33;;34316:66;34309:5;34306:77;34303:103;;34386:18;;:::i;:::-;34303:103;34433:1;34426:5;34422:13;34415:20;;34208:233;;;:::o;34447:180::-;34495:77;34492:1;34485:88;34592:4;34589:1;34582:15;34616:4;34613:1;34606:15;34633:185;34673:1;34690:20;34708:1;34690:20;:::i;:::-;34685:25;;34724:20;34742:1;34724:20;:::i;:::-;34719:25;;34763:1;34753:35;;34768:18;;:::i;:::-;34753:35;34810:1;34807;34803:9;34798:14;;34633:185;;;;:::o;34824:194::-;34864:4;34884:20;34902:1;34884:20;:::i;:::-;34879:25;;34918:20;34936:1;34918:20;:::i;:::-;34913:25;;34962:1;34959;34955:9;34947:17;;34986:1;34980:4;34977:11;34974:37;;;34991:18;;:::i;:::-;34974:37;34824:194;;;;:::o;35024:176::-;35056:1;35073:20;35091:1;35073:20;:::i;:::-;35068:25;;35107:20;35125:1;35107:20;:::i;:::-;35102:25;;35146:1;35136:35;;35151:18;;:::i;:::-;35136:35;35192:1;35189;35185:9;35180:14;;35024:176;;;;:::o

Swarm Source

ipfs://667c685f8b7b549c48a640be06c0619bf1a8943eae7d07bb4f95424e7913db2b

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.