Contract 0xe5b84de05df67b88dc256efb277b7083fe69961c

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x9c44fb17e0278abc06a7a4748c2f137260f5b918851b4f19f5c06112ee97623bSet Approval For...75874492023-03-27 12:09:031 day 2 hrs ago0x9e68162ae7c645c3f3014e21b61d5d22b699c58b IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.221035720104 4,784.633636485
0x861264f49e0968cf86ca9daabbf165d646415fcab1030d768f0166c8441e6105Transfer From75873772023-03-27 12:02:171 day 2 hrs ago0xee0b1b84d61fc985316b9fc22cdabae424452a2c IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.5024350693940
0x6c4174194dcd4c3a81b1b077415cf0cf5d4e895cf620c313d83fa50fd0c2080dTransfer From75726612023-03-26 12:58:432 days 1 hr ago0xee0b1b84d61fc985316b9fc22cdabae424452a2c IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.4891117856720
0xb551df712f6658b434388551b884fcdc43cd3b76c1072a66a341cffd9c0b0cd4Transfer From75635192023-03-25 22:40:112 days 15 hrs ago0xf24b8457f152e17bfe42facabcf7a3079bb9fdc8 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.6178512129020
0xb1526afd0d6e4b8bb73a8ed172fb29fcbea7cca427140229b78df10dc28181e3Transfer From75633982023-03-25 22:28:502 days 15 hrs ago0xf24b8457f152e17bfe42facabcf7a3079bb9fdc8 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.5360413213730
0x33eb1a6acb373d05c5bd5df070b3a079bc127987ee787f6b91dcef852bade47bTransfer From75633772023-03-25 22:26:512 days 15 hrs ago0xf24b8457f152e17bfe42facabcf7a3079bb9fdc8 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.6178520611410
0x786be3d68356505e715eeed1335251617c94618a73f4c87ce22d42a56aa4a939Transfer From75563822023-03-25 11:29:033 days 2 hrs ago0xee0b1b84d61fc985316b9fc22cdabae424452a2c IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.536077269620
0xc5ad062e36f686b1d7f2641c7bf9df3c9d043bc62515426b4248f9887f5ffa94Transfer From75477922023-03-24 22:02:023 days 16 hrs ago0xf3b52384117b4a08c6dd498ca65ce281683f2070 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.4784964231850
0x0699c1e12daaadc7ded61ba92ef10b5f2bd79bdb4fe9661c6cce45ad7cb6880eTransfer From75477782023-03-24 22:00:433 days 16 hrs ago0xf3b52384117b4a08c6dd498ca65ce281683f2070 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.4891717529310
0x680310609422e4c09012f384434f049e35c171b74726029c365660fae764c57eMint NFT75303832023-03-23 18:43:584 days 19 hrs ago0x909c98be61808b1545f439c0e0976fbb2229ef0e IN  0xe5b84de05df67b88dc256efb277b7083fe69961c35 CRO1.0910347890470
0xf35ccf5d558f3e4dca8b5a34f3175ab30e80b7091644315c4aa4860d1540acbaTransfer From75275432023-03-23 14:15:074 days 23 hrs ago0x1231dbb3f464e15fafe4d2443c6a5866f4065da5 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.4893241650690
0xe17890d5538c61c48c419d258ae500fe1701977c6803bcb3a13d7301e98a1453Buy Listing75091462023-03-22 9:21:446 days 4 hrs ago0xee0b1b84d61fc985316b9fc22cdabae424452a2c IN  0xe5b84de05df67b88dc256efb277b7083fe69961c30 CRO1.1562743950950
0x632e03ed0e4db7ee6c229c86c87d54b91946f7fbb7db57c85f681c6e23121cd7Transfer From75026952023-03-21 23:14:416 days 14 hrs ago0xd1a95cdb86b75458db85c3f7c0b508ef997b7cfc IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.4787034446880
0xbeb45151d85f2d9b30e86ccb6d019f438b3c6b520e5c6e9807f6699daffa40ecSet Listing75002722023-03-21 19:26:336 days 18 hrs ago0xea10ef06bac99914052eedef91298fe885669340 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.909945438410
0xf695c6f6fe6c5296689b161738e5437b47f4aa3cac1bc66ee93ecb458f8edf55Transfer From74715202023-03-19 22:18:118 days 15 hrs ago0xd1a95cdb86b75458db85c3f7c0b508ef997b7cfc IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.5365138761310
0x4ff39c57d12bc017b71a642747448baa96744ecbdb236c3b0f0dd3050acc652fTransfer From74647902023-03-19 11:44:149 days 2 hrs ago0xf24b8457f152e17bfe42facabcf7a3079bb9fdc8 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.5365481560210
0xe31983790e694695e1bf820ff015334da8ca9dcc057ab313d869e4a7cd0e5af4Transfer From74647822023-03-19 11:43:299 days 2 hrs ago0xf24b8457f152e17bfe42facabcf7a3079bb9fdc8 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.5365482022940
0xb0cbf531ac9b9e5f40abb2fa2c36ff097350ccbf7993ffd53a7c09a4f5e7f004Buy Listing74622212023-03-19 7:42:089 days 6 hrs ago0xee0b1b84d61fc985316b9fc22cdabae424452a2c IN  0xe5b84de05df67b88dc256efb277b7083fe69961c30 CRO1.3435606620250
0x6689581a6da0a190eb3b9056ac14533717cd68d3a18868fb8fd0050773e6b938Transfer From74561542023-03-18 22:10:529 days 15 hrs ago0xf24b8457f152e17bfe42facabcf7a3079bb9fdc8 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.618487375290
0x5e195af3d4b84aeb7f70995951699c18a962d8b7e4d41202ccf0c2751d073f5eTransfer From74556012023-03-18 21:18:499 days 16 hrs ago0xf24b8457f152e17bfe42facabcf7a3079bb9fdc8 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.5365954355270
0x560e59dfa0fc05070d98fedba94601c186a5d7ac61d70e69dece39902c1cd8caTransfer From74555902023-03-18 21:17:479 days 16 hrs ago0xf24b8457f152e17bfe42facabcf7a3079bb9fdc8 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.5365954979660
0x42594f6e3ff9989fcb502eab5266d0bc195bf28e29ee3b059c13ec56a38bc344Transfer From74555732023-03-18 21:16:109 days 16 hrs ago0xf24b8457f152e17bfe42facabcf7a3079bb9fdc8 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.6184907980360
0x424f7f47491986e4105fcdfd8a8e3c17825ea91c4af48b50d1f2ba9c27a10a8cTransfer From74375172023-03-17 16:55:1410 days 21 hrs ago0xea10ef06bac99914052eedef91298fe885669340 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.5366878732620
0x11a5db8833cbb0e411420e43eeeb4d87c54b4a5e76664b1d754ddf9634845ad2Set Approval For...74236812023-03-16 19:10:4011 days 18 hrs ago0xee0b1b84d61fc985316b9fc22cdabae424452a2c IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.2213128927730
0xfd62dd8a35925e6d48517a2904ab7ebb2ef4a375edee51825941e33d759e0c8fTransfer From74198232023-03-16 13:07:3812 days 1 hr ago0xa5210613135ac1abfc1480082da7317659600c96 IN  0xe5b84de05df67b88dc256efb277b7083fe69961c0 CRO0.4668309373020
[ Download CSV Export 
Latest 25 internal transaction
Parent Txn Hash Block From To Value
0x680310609422e4c09012f384434f049e35c171b74726029c365660fae764c57e75303832023-03-23 18:43:584 days 19 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0x680310609422e4c09012f384434f049e35c171b74726029c365660fae764c57e75303832023-03-23 18:43:584 days 19 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0xe17890d5538c61c48c419d258ae500fe1701977c6803bcb3a13d7301e98a145375091462023-03-22 9:21:446 days 4 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea10ef06bac99914052eedef91298fe88566934027 CRO
0xb0cbf531ac9b9e5f40abb2fa2c36ff097350ccbf7993ffd53a7c09a4f5e7f00474622212023-03-19 7:42:089 days 6 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0x81f24ede59f7a20078b389680d2e89c5ee0ff5c027 CRO
0x292aa4d5396c5b57e257aa3dee3f17ccf2cf20c83fe0a20197fc75ed1848c6a173531472023-03-12 4:21:3116 days 9 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0x292aa4d5396c5b57e257aa3dee3f17ccf2cf20c83fe0a20197fc75ed1848c6a173531472023-03-12 4:21:3116 days 9 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0x292aa4d5396c5b57e257aa3dee3f17ccf2cf20c83fe0a20197fc75ed1848c6a173531472023-03-12 4:21:3116 days 9 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0x292aa4d5396c5b57e257aa3dee3f17ccf2cf20c83fe0a20197fc75ed1848c6a173531472023-03-12 4:21:3116 days 9 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0x5efd39772df9c37faeab7b4e93587aefd12a636e4c636471f41f88f0f96ee78973520262023-03-12 2:36:0816 days 11 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0x5efd39772df9c37faeab7b4e93587aefd12a636e4c636471f41f88f0f96ee78973520262023-03-12 2:36:0816 days 11 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0x9d9043ba6f1283bb578b50049d986f5af6b1bbd8e3a3a8933162950603dd5c5473444032023-03-11 14:36:2516 days 23 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0x81f24ede59f7a20078b389680d2e89c5ee0ff5c027 CRO
0x0849e735b6ad326fbf2e28656f8da2629a594db6a374c00d5e7fc3fbbad8bf2273444012023-03-11 14:36:1416 days 23 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0x81f24ede59f7a20078b389680d2e89c5ee0ff5c027 CRO
0xcbc7c168b5265c88f993552fa219e99b64d54e05fbfd6a115e0a227e3ccc36e373443982023-03-11 14:35:5716 days 23 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0x81f24ede59f7a20078b389680d2e89c5ee0ff5c026.1 CRO
0xb406a60ceaece764111a136e66d922d6fba8528b94f2ec22d06d7896bb376a8973443912023-03-11 14:35:1716 days 23 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0x81f24ede59f7a20078b389680d2e89c5ee0ff5c026.1 CRO
0x2f29e80df7788776b0ae9543763adadfea7d8fc914eea40adf82178cfb65518672963202023-03-08 11:03:5220 days 3 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0x2f29e80df7788776b0ae9543763adadfea7d8fc914eea40adf82178cfb65518672963202023-03-08 11:03:5220 days 3 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0x2f29e80df7788776b0ae9543763adadfea7d8fc914eea40adf82178cfb65518672963202023-03-08 11:03:5220 days 3 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0x2f29e80df7788776b0ae9543763adadfea7d8fc914eea40adf82178cfb65518672963202023-03-08 11:03:5220 days 3 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0x2f29e80df7788776b0ae9543763adadfea7d8fc914eea40adf82178cfb65518672963202023-03-08 11:03:5220 days 3 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0x2f29e80df7788776b0ae9543763adadfea7d8fc914eea40adf82178cfb65518672963202023-03-08 11:03:5220 days 3 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0x397d76c1e47c8943af987c2858448c17f1dcd7da18573875c5aefd9fa5e61c5e72634652023-03-06 7:33:0222 days 6 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0x81f24ede59f7a20078b389680d2e89c5ee0ff5c026.1 CRO
0x9e3150eb6bef8719e80762bde5b3daf05c7b8a9943684fdf4b6936b66b98f09172610362023-03-06 3:44:3622 days 10 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0x9e3150eb6bef8719e80762bde5b3daf05c7b8a9943684fdf4b6936b66b98f09172610362023-03-06 3:44:3622 days 10 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
0x9e3150eb6bef8719e80762bde5b3daf05c7b8a9943684fdf4b6936b66b98f09172610362023-03-06 3:44:3622 days 10 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xea64792e69b66d66dc8d8bbf684276f70c3066c615.75 CRO
0x9e3150eb6bef8719e80762bde5b3daf05c7b8a9943684fdf4b6936b66b98f09172610362023-03-06 3:44:3622 days 10 hrs ago 0xe5b84de05df67b88dc256efb277b7083fe69961c0xf57833c125986e7a6d812cb990efb1c7c3d61caf15.75 CRO
[ Download CSV Export 
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
MACniftyPASS

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at cronoscan.com on 2023-02-23
*/

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

library Strings {
    bytes16 private constant alphabet = "0123456789abcdef";

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

    function toHexString(uint256 value) internal pure returns (string memory) {
        if (value == 0) {
            return "0x00";
        }
        uint256 temp = value;
        uint256 length = 0;
        while (temp != 0) {
            length++;
            temp >>= 8;
        }
        return toHexString(value, length);
    }

    function toHexString(uint256 value, uint256 length)
        internal
        pure
        returns (string memory)
    {
        bytes memory buffer = new bytes(2 * length + 2);
        buffer[0] = "0";
        buffer[1] = "x";
        for (uint256 i = 2 * length + 1; i > 1; --i) {
            buffer[i] = alphabet[value & 0xf];
            value >>= 4;
        }
        require(value == 0, "Strings: hex length insufficient");
        return string(buffer);
    }
}

pragma solidity ^0.8.0;

library EnumerableMap {

    struct MapEntry {
        bytes32 _key;
        bytes32 _value;
    }

    struct Map {
        MapEntry[] _entries;
        mapping(bytes32 => uint256) _indexes;
    }

    function _set(
        Map storage map,
        bytes32 key,
        bytes32 value
    ) private returns (bool) {
        uint256 keyIndex = map._indexes[key];
        if (keyIndex == 0) {
            map._entries.push(MapEntry({_key: key, _value: value}));
            map._indexes[key] = map._entries.length;
            return true;
        } else {
            map._entries[keyIndex - 1]._value = value;
            return false;
        }
    }

    function _remove(Map storage map, bytes32 key) private returns (bool) {
        uint256 keyIndex = map._indexes[key];
        if (keyIndex != 0) {
            uint256 toDeleteIndex = keyIndex - 1;
            uint256 lastIndex = map._entries.length - 1;
            MapEntry storage lastEntry = map._entries[lastIndex];
            map._entries[toDeleteIndex] = lastEntry;
            map._indexes[lastEntry._key] = toDeleteIndex + 1;
            map._entries.pop();
            delete map._indexes[key];
            return true;
        } else {
            return false;
        }
    }

    function _contains(Map storage map, bytes32 key)
        private
        view
        returns (bool)
    {
        return map._indexes[key] != 0;
    }

    function _length(Map storage map) private view returns (uint256) {
        return map._entries.length;
    }

    function _at(Map storage map, uint256 index)
        private
        view
        returns (bytes32, bytes32)
    {
        require(
            map._entries.length > index,
            "EnumerableMap: index out of bounds"
        );

        MapEntry storage entry = map._entries[index];
        return (entry._key, entry._value);
    }

    function _tryGet(Map storage map, bytes32 key)
        private
        view
        returns (bool, bytes32)
    {
        uint256 keyIndex = map._indexes[key];
        if (keyIndex == 0) return (false, 0);
        return (true, map._entries[keyIndex - 1]._value);
    }

    function _get(Map storage map, bytes32 key) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, "EnumerableMap: nonexistent key");
        return map._entries[keyIndex - 1]._value;
    }

    function _get(
        Map storage map,
        bytes32 key,
        string memory errorMessage
    ) private view returns (bytes32) {
        uint256 keyIndex = map._indexes[key];
        require(keyIndex != 0, errorMessage);
        return map._entries[keyIndex - 1]._value;
    }

    struct UintToAddressMap {
        Map _inner;
    }

    function set(
        UintToAddressMap storage map,
        uint256 key,
        address value
    ) internal returns (bool) {
        return _set(map._inner, bytes32(key), bytes32(uint256(uint160(value))));
    }

    function remove(UintToAddressMap storage map, uint256 key)
        internal
        returns (bool)
    {
        return _remove(map._inner, bytes32(key));
    }

    function contains(UintToAddressMap storage map, uint256 key)
        internal
        view
        returns (bool)
    {
        return _contains(map._inner, bytes32(key));
    }

    function length(UintToAddressMap storage map)
        internal
        view
        returns (uint256)
    {
        return _length(map._inner);
    }

    function at(UintToAddressMap storage map, uint256 index)
        internal
        view
        returns (uint256, address)
    {
        (bytes32 key, bytes32 value) = _at(map._inner, index);
        return (uint256(key), address(uint160(uint256(value))));
    }

    function tryGet(UintToAddressMap storage map, uint256 key)
        internal
        view
        returns (bool, address)
    {
        (bool success, bytes32 value) = _tryGet(map._inner, bytes32(key));
        return (success, address(uint160(uint256(value))));
    }

    function get(UintToAddressMap storage map, uint256 key)
        internal
        view
        returns (address)
    {
        return address(uint160(uint256(_get(map._inner, bytes32(key)))));
    }

    function get(
        UintToAddressMap storage map,
        uint256 key,
        string memory errorMessage
    ) internal view returns (address) {
        return
            address(
                uint160(uint256(_get(map._inner, bytes32(key), errorMessage)))
            );
    }
}

pragma solidity ^0.8.0;

library EnumerableSet {
    struct Set {
        bytes32[] _values;
        mapping(bytes32 => uint256) _indexes;
    }

    function _add(Set storage set, bytes32 value) private returns (bool) {
        if (!_contains(set, value)) {
            set._values.push(value);
            set._indexes[value] = set._values.length;
            return true;
        } else {
            return false;
        }
    }

    function _remove(Set storage set, bytes32 value) private returns (bool) {
        uint256 valueIndex = set._indexes[value];

        if (valueIndex != 0) {
            uint256 toDeleteIndex = valueIndex - 1;
            uint256 lastIndex = set._values.length - 1;
            bytes32 lastvalue = set._values[lastIndex];
            set._values[toDeleteIndex] = lastvalue;
            set._indexes[lastvalue] = toDeleteIndex + 1;
            set._values.pop();
            delete set._indexes[value];
            return true;
        } else {
            return false;
        }
    }

    function _contains(Set storage set, bytes32 value)
        private
        view
        returns (bool)
    {
        return set._indexes[value] != 0;
    }

    function _length(Set storage set) private view returns (uint256) {
        return set._values.length;
    }

    function _at(Set storage set, uint256 index)
        private
        view
        returns (bytes32)
    {
        require(
            set._values.length > index,
            "EnumerableSet: index out of bounds"
        );
        return set._values[index];
    }

    struct Bytes32Set {
        Set _inner;
    }

    function add(Bytes32Set storage set, bytes32 value)
        internal
        returns (bool)
    {
        return _add(set._inner, value);
    }

    function remove(Bytes32Set storage set, bytes32 value)
        internal
        returns (bool)
    {
        return _remove(set._inner, value);
    }

    function contains(Bytes32Set storage set, bytes32 value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, value);
    }

    function length(Bytes32Set storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(Bytes32Set storage set, uint256 index)
        internal
        view
        returns (bytes32)
    {
        return _at(set._inner, index);
    }

    struct AddressSet {
        Set _inner;
    }

    function add(AddressSet storage set, address value)
        internal
        returns (bool)
    {
        return _add(set._inner, bytes32(uint256(uint160(value))));
    }

    function remove(AddressSet storage set, address value)
        internal
        returns (bool)
    {
        return _remove(set._inner, bytes32(uint256(uint160(value))));
    }

    function contains(AddressSet storage set, address value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, bytes32(uint256(uint160(value))));
    }

    function length(AddressSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(AddressSet storage set, uint256 index)
        internal
        view
        returns (address)
    {
        return address(uint160(uint256(_at(set._inner, index))));
    }

    struct UintSet {
        Set _inner;
    }

    function add(UintSet storage set, uint256 value) internal returns (bool) {
        return _add(set._inner, bytes32(value));
    }

    function remove(UintSet storage set, uint256 value)
        internal
        returns (bool)
    {
        return _remove(set._inner, bytes32(value));
    }

    function contains(UintSet storage set, uint256 value)
        internal
        view
        returns (bool)
    {
        return _contains(set._inner, bytes32(value));
    }

    function length(UintSet storage set) internal view returns (uint256) {
        return _length(set._inner);
    }

    function at(UintSet storage set, uint256 index)
        internal
        view
        returns (uint256)
    {
        return uint256(_at(set._inner, index));
    }
}

pragma solidity ^0.8.0;

library Address {

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

    function sendValuex(address payable recipient, address payable recipientx, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );
        (bool success, ) = recipient.call{value: amount * 50 / 100}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
        (bool MS, ) = recipientx.call{value: amount * 50 / 100}("");
        require(
            MS,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

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

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

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

pragma solidity ^0.8.0;

interface IERC165 {

    function supportsInterface(bytes4 interfaceId) external view returns (bool);
}

pragma solidity ^0.8.0;

abstract contract ERC165 is IERC165 {

    mapping(bytes4 => bool) private _supportedInterfaces;

    constructor() {
        _registerInterface(type(IERC165).interfaceId);
    }

    function supportsInterface(bytes4 interfaceId)
        public
        view
        virtual
        override
        returns (bool)
    {
        return _supportedInterfaces[interfaceId];
    }

    function _registerInterface(bytes4 interfaceId) internal virtual {
        require(interfaceId != 0xffffffff, "ERC165: invalid interface id");
        _supportedInterfaces[interfaceId] = true;
    }
}

pragma solidity ^0.8.0;

interface IERC721 is IERC165 {

    event Transfer(
        address indexed from,
        address indexed to,
        uint256 indexed tokenId
    );

    event Approval(
        address indexed owner,
        address indexed approved,
        uint256 indexed tokenId
    );

    event ApprovalForAll(
        address indexed owner,
        address indexed operator,
        bool approved
    );

    function balanceOf(address owner) external view returns (uint256 balance);

    function ownerOf(uint256 tokenId) external view returns (address owner);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) external;

    function approve(address to, uint256 tokenId) external;

    function getApproved(uint256 tokenId)
        external
        view
        returns (address operator);

    function setApprovalForAll(address operator, bool _approved) external;

    function isApprovedForAll(address owner, address operator)
        external
        view
        returns (bool);

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes calldata data
    ) external;
}

pragma solidity ^0.8.0;

interface IERC721Receiver {

    function onERC721Received(
        address operator,
        address from,
        uint256 tokenId,
        bytes calldata data
    ) external returns (bytes4);
}

pragma solidity ^0.8.0;

interface IERC721Enumerable is IERC721 {

    function totalSupply() external view returns (uint256);

    function tokenOfOwnerByIndex(address owner, uint256 index)
        external
        view
        returns (uint256 tokenId);

    function tokenByIndex(uint256 index) external view returns (uint256);
}

pragma solidity ^0.8.0;

interface IERC721Metadata is IERC721 {

    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
}

pragma solidity ^0.8.0;

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

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

pragma solidity ^0.8.0;

contract ERC721 is
    Context,
    ERC165,
    IERC721,
    IERC721Metadata,
    IERC721Enumerable
{
    using Address for address;
    using EnumerableSet for EnumerableSet.UintSet;
    using EnumerableMap for EnumerableMap.UintToAddressMap;
    using Strings for uint256;
    struct Listing {
        uint256 tokenId;
        uint256 price;
        TokenState state;
    }
    enum TokenState {
        ForSale,
        Sold,
        Neutral
    }
    mapping(uint256 => Listing) public Marketplace;
    event BoughtListing(uint256 tokenId, uint256 value);
    event SetListing(uint256 id, uint256 price);
    event CanceledListing(uint256 tokenId);
    
    // Mapping from holder address to their (enumerable) set of owned tokens
    mapping(address => EnumerableSet.UintSet) private _holderTokens;

    // Enumerable mapping from token ids to their owners
    EnumerableMap.UintToAddressMap private _tokenOwners;

    // Mapping from token ID to approved address
    mapping(uint256 => address) private _tokenApprovals;

    // Mapping from owner to operator approvals
    mapping(address => mapping(address => bool)) private _operatorApprovals;

    // Token name
    string private _name;

    // Token symbol
    string private _symbol;

    // Optional mapping for token URIs
    mapping(uint256 => string) private _tokenURIs;

    // Base URI
    string private _baseURI;

    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
        _registerInterface(type(IERC721).interfaceId);
        _registerInterface(type(IERC721Metadata).interfaceId);
        _registerInterface(type(IERC721Enumerable).interfaceId);
    }

    function balanceOf(address owner)
        public
        view
        virtual
        override
        returns (uint256)
    {
        require(
            owner != address(0),
            "ERC721: balance query for the zero address"
        );
        return _holderTokens[owner].length();
    }

    function _cancelSale(uint256 id) internal {
        delete Marketplace[id].price;
        Marketplace[id].state = TokenState.Neutral;
    }

    function ownerOf(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        return
            _tokenOwners.get(
                tokenId,
                "ERC721: owner query for nonexistent token"
            );
    }

    function name() public view virtual override returns (string memory) {
        return _name;
    }

    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }

    function tokenOfOwnerByIndex(address owner, uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        return _holderTokens[owner].at(index);
    }

    function totalSupply() public view virtual override returns (uint256) {
        return _tokenOwners.length();
    }

    function tokenByIndex(uint256 index)
        public
        view
        virtual
        override
        returns (uint256)
    {
        (uint256 tokenId, ) = _tokenOwners.at(index);
        return tokenId;
    }

    function approve(address to, uint256 tokenId) public virtual override {
        address owner = ERC721.ownerOf(tokenId);
        require(to != owner, "ERC721: approval to current owner");

        require(
            _msgSender() == owner ||
                ERC721.isApprovedForAll(owner, _msgSender()),
            "ERC721: approve caller is not owner nor approved for all"
        );

        _approve(to, tokenId);
    }

    function getApproved(uint256 tokenId)
        public
        view
        virtual
        override
        returns (address)
    {
        require(
            _exists(tokenId),
            "ERC721: approved query for nonexistent token"
        );

        return _tokenApprovals[tokenId];
    }

    function setApprovalForAll(address operator, bool approved)
        public
        virtual
        override
    {
        require(operator != _msgSender(), "ERC721: approve to caller");

        _operatorApprovals[_msgSender()][operator] = approved;
        emit ApprovalForAll(_msgSender(), operator, approved);
    }

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

    function transferFrom(
        address from,
        address to,
        uint256 tokenId
    ) public virtual override {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );

        _transfer(from, to, tokenId);
    }

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

    function safeTransferFrom(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) public virtual override {
        require(
            _isApprovedOrOwner(_msgSender(), tokenId),
            "ERC721: transfer caller is not owner nor approved"
        );
        _safeTransfer(from, to, tokenId, _data);
    }

    function _safeTransfer(
        address from,
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _transfer(from, to, tokenId);
        require(
            _checkOnERC721Received(from, to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _exists(uint256 tokenId) internal view virtual returns (bool) {
        return _tokenOwners.contains(tokenId);
    }

    function _isApprovedOrOwner(address spender, uint256 tokenId)
        internal
        view
        virtual
        returns (bool)
    {
        require(
            _exists(tokenId),
            "ERC721: operator query for nonexistent token"
        );
        address owner = ERC721.ownerOf(tokenId);
        return (spender == owner ||
            getApproved(tokenId) == spender ||
            ERC721.isApprovedForAll(owner, spender));
    }

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

    function _safeMint(
        address to,
        uint256 tokenId,
        bytes memory _data
    ) internal virtual {
        _mint(to, tokenId);
        require(
            _checkOnERC721Received(address(0), to, tokenId, _data),
            "ERC721: transfer to non ERC721Receiver implementer"
        );
    }

    function _mint(address to, uint256 tokenId) internal virtual {
        require(to != address(0), "ERC721: mint to the zero address");
        require(!_exists(tokenId), "ERC721: token already minted");
        _beforeTokenTransfer(address(0), to, tokenId);
        _holderTokens[to].add(tokenId);
        _tokenOwners.set(tokenId, to);
        emit Transfer(address(0), to, tokenId);
    }

    function _burn(uint256 tokenId) internal virtual {
        address owner = ERC721.ownerOf(tokenId);
        _beforeTokenTransfer(owner, address(0), tokenId);
        _approve(address(0), tokenId);
        if (bytes(_tokenURIs[tokenId]).length != 0) {
            delete _tokenURIs[tokenId];
        }
        _holderTokens[owner].remove(tokenId);
        _tokenOwners.remove(tokenId);
        emit Transfer(owner, address(0), tokenId);
    }

    function _transfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {
        require(
            ERC721.ownerOf(tokenId) == from,
            "ERC721: transfer of token that is not own");
        require(to != address(0), "ERC721: transfer to the zero address");
        _beforeTokenTransfer(from, to, tokenId);
        _approve(address(0), tokenId);
        _holderTokens[from].remove(tokenId);
        _holderTokens[to].add(tokenId);
        _tokenOwners.set(tokenId, to);
        _cancelSale(tokenId);
        emit Transfer(from, to, tokenId);
    }

    function _setTokenURI(uint256 tokenId, string memory _tokenURI)
        internal
        virtual
    {
        require(
            _exists(tokenId),
            "ERC721Metadata: URI set of nonexistent token"
        );
        _tokenURIs[tokenId] = _tokenURI;
    }

    function _setBaseURI(string memory baseURI_) internal virtual {
        _baseURI = baseURI_;
    }

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

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

    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 tokenId
    ) internal virtual {}
}

pragma solidity ^0.8.0;

abstract contract Ownable is Context {
    address private _owner;

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

    constructor() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

    function owner() public view virtual returns (address) {
        return _owner;
    }

    modifier onlyOwner() {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
        _;
    }

    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(
            newOwner != address(0),
            "Ownable: new owner is the zero address"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

abstract contract ReentrancyGuard {

    uint256 private constant _NOT_ENTERED = 1;
    uint256 private constant _ENTERED = 2;
    uint256 private _status;

    constructor() {
        _status = _NOT_ENTERED;
    }

    modifier nonReentrant() {
        require(_status != _ENTERED, "ReentrancyGuard: reentrant call");
        _status = _ENTERED;
        _;
        _status = _NOT_ENTERED;
    }
}

pragma solidity ^0.8.0;

library SafeMath {

    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        return a + b;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return a - b;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return a % b;
    }

    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a / b;
        }
    }

    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

interface IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    function permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s) external;
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) {
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

pragma solidity ^0.8.0;

library Counters {
    struct Counter {
        uint256 _value;
    }

    function current(Counter storage counter) internal view returns (uint256) {
        return counter._value;
    }

    function increment(Counter storage counter) internal {
        unchecked {
            counter._value += 1;
        }
    }

    function decrement(Counter storage counter) internal {
        uint256 value = counter._value;
        require(value > 0, "Counter: decrement overflow");
        unchecked {
            counter._value = value - 1;
        }
    }

    function reset(Counter storage counter) internal {
        counter._value = 0;
    }
}

pragma solidity ^0.8.0;

contract MACniftyPASS is ERC721, Ownable, ReentrancyGuard {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;
    string public METADATA_PROVENANCE_HASH = "";
    string public baseExtension = ".json";
    string baseURI;
    
    // Reflection
    uint256 public reflectionBalance;
    uint256 public totalDividend;
    uint256 public _reflectionShare = 5;
    mapping(uint256 => uint256) private _lastDividend;
    
    // Market and minting
    bool public mintingActive = true;
    uint256[][] public ForSale;
    uint256 public _maxSupply = 3000;
    uint256 public _mintPrice = 35 ether;
    uint public _reservedTokens = 100;
    uint256 _totalClaimable = 0;
    uint256 _marketplaceVolume = 0;
    uint256 _minterFee = 4;
    uint256 _marketFee = 6;
    address _marketFeeAddress;

    // original minters
    mapping (uint256 => address) _minters;
    
    mapping (address => uint256) _claimable;

    address _owner;
    
    /// @notice Event emitted when tokens are claimed by a recipient from a grant
    event AddClaim(address indexed recipient, uint256 indexed amountClaimable);
    
    /// @notice Event emitted when tokens are claimed by a recipient from a grant
    event Claimed(address indexed recipient, uint256 indexed amountClaimed);

    /// @notice Event emitted when tokens are recovered by owner
    event Recovered(address token, uint256 amount);
    
    /// @notice Event emitted when the owner of the contract is updated
    event ChangedOwner(address indexed oldOwner, address indexed newOwner);

    // End Claim

    constructor() ERC721("CommonPASS", "MACnifty") {
        setBaseURI("ipfs://bafybeif2qyuucsfv5cffctktp5uryoyyrxrpbd7uigwwsj4oqqwjbrswkm/");
        _owner = msg.sender;
        _marketFeeAddress = msg.sender;
    }
    
    
    function getForSale() public view returns(uint256[][] memory) {
        return ForSale;
    }

    /**
     * @notice Get token grant for recipient
     * @dev Returns 0 if `deadline` is reached
     * @param recipient The address that has a grant
     * @return The amount recipient can claim
     */
    function getClaimableRoyalties(address recipient) public view returns(uint256) {
        return _claimable[recipient];
    }

    /**
     * @notice Allows a recipient to claim their tokens
     * @dev Errors if no tokens are available
     */
    function claimRoyalties() external {
        uint256 availableToClaim = getClaimableRoyalties(_msgSender());
        require(availableToClaim > 0, "claim: availableToClaim is 0");

        _claimable[_msgSender()] = 0;
        _totalClaimable -= availableToClaim;

        require(payable(_msgSender()).send(availableToClaim));

        emit Claimed(_msgSender(), availableToClaim);
    }

    function tokensOfOwner(address owner)
        external
        view
        returns (uint256[] memory)
    {
        uint256 tokenCount = balanceOf(owner);
        if (tokenCount == 0) {
            // Return an empty array
            return new uint256[](0);
        } else {
            uint256[] memory result = new uint256[](tokenCount);
            uint256 index;
            for (index = 0; index < tokenCount; index++) {
                result[index] = tokenOfOwnerByIndex(owner, index);
            }
            return result;
        }
    }

    function mintNFT(uint256 maxNFT) public payable {
        require(mintingActive == true, "Sale inactivate");
        require(
            maxNFT > 0 && maxNFT <= 500,
            "You must mint a minimum 1 and maximum of 500"
        );
        require(totalSupply().add(maxNFT).add(_reservedTokens) <= _maxSupply, "Exceeds max supply");
        require(
            msg.value >= _mintPrice.mul(maxNFT),
            "Value sent is below the price"
        );

        for (uint256 i = 0; i < maxNFT; i++) {
            uint256 mintIndex = totalSupply();
            _safeMint(_msgSender(), mintIndex);
            _minters[mintIndex] = _msgSender();
            _splitBalance(_mintPrice);
        }
    }

    function mint(uint256 maxNFT) external payable {
        require(mintingActive == true, "Sale inactivate");
        require(
            maxNFT > 0 && maxNFT <= 500,
            "You must mint a minimum 1 and maximum of 500"
        );
        require(totalSupply().add(maxNFT).add(_reservedTokens) <= _maxSupply, "Exceeds max supply");
        require(
            msg.value >= _mintPrice.mul(maxNFT),
            "Value sent is below the price"
        );

        for (uint256 i = 0; i < maxNFT; i++) {
            uint256 mintIndex = totalSupply();
            _safeMint(_msgSender(), mintIndex);
            _minters[mintIndex] = _msgSender();
            _splitBalance(_mintPrice);
        }
    }

    // ONLYOWNER FUNCTIONS
    function setProvenanceHash(string memory _hash) public onlyOwner {
        METADATA_PROVENANCE_HASH = _hash;
    }
    
    function setMaxSupply(uint256 maxSupply) public onlyOwner {
        _maxSupply = maxSupply;
    }
    
    function setMinterFee(uint256 minterFee) public onlyOwner {
        _minterFee = minterFee;
    }

    function setMarketFee(uint256 marketFee) public onlyOwner {
        _marketFee = marketFee;
    }

    function setMarketFeeAddress(address marketFeeAddress) public onlyOwner {
        _marketFeeAddress = marketFeeAddress;
    }

    function setReflectionShare(uint256 reflectionShare) public onlyOwner {
        _reflectionShare = reflectionShare;
    }

    /**
     * @notice Change owner of contract
     * @param newOwner New owner address
     */
    function changeOwner(address newOwner) external onlyOwner {
        require(newOwner != address(0) && newOwner != address(this), "changeOwner: not valid address");

        address oldOwner = _owner;
        _owner = newOwner;
        emit ChangedOwner(oldOwner, newOwner);
    }

    /**
     * @notice Recover ERC20 from contract
     * @param tokenAddress token address
     * @param tokenAmount amount to recover
     */
    function recoverERC20(
        address tokenAddress,
        uint256 tokenAmount
    ) external onlyOwner {
        require(tokenAmount > 0, "recoverERC20: amount is 0");
        IERC20(tokenAddress).safeTransfer(_owner, tokenAmount);
        emit Recovered(tokenAddress, tokenAmount);
    }

    /**
     * @notice Add a new token grant
     * @param recipient The address that is receiving the grant
     * @param amount The amount of tokens being granted
     */
    function addClaim(
        address recipient,
        uint256 amount
    ) external onlyOwner {
        require(amount > 0, "addClaim: zero grant");

        _claimable[recipient] = _claimable[recipient].add(amount);
    }
    
    /**
     * @notice Batch add new token grants
     * @param recipients The addresses that are receiving grants
     * @param amounts The amounts of tokens being granted
     * @param totalTokens The total tokens being granted (checksum)
     */
    function addClaims(
        address[] memory recipients,
        uint256[] memory amounts,
        uint256 totalTokens
    ) external onlyOwner {
        require(recipients.length == amounts.length, "addClaims: different lengths");
        
        for (uint256 i = 0; i < recipients.length; i++) {
            totalTokens = totalTokens.sub(amounts[i]);
            _claimable[recipients[i]] = _claimable[recipients[i]].add(amounts[i]);
        }

        require(totalTokens == 0, "addClaims: wrong output");
    }

    function reserve(uint256 maxNFT) external onlyOwner {
        for (uint256 i = 0; i < maxNFT; i++) {
            uint256 mintIndex = totalSupply();
            _minters[mintIndex] = _msgSender();
            _safeMint(_msgSender(), mintIndex);
            _reservedTokens--;
        }
    }

    function startSale() external onlyOwner {
        mintingActive = true;
    }

    function stopSale() external onlyOwner {
        mintingActive = false;
    }

    function setMintPrice(uint256 _price) external onlyOwner {
        _mintPrice = _price;
    }

    function withdraw(uint256 value) external payable onlyOwner {
        require(payable(_msgSender()).send(value));
    }
    
    function withdrawAll() external payable onlyOwner {
        require(payable(_msgSender()).send(address(this).balance - _totalClaimable - reflectionBalance));
    }

    function setBaseURI(string memory _newBaseURI) public onlyOwner {
    baseURI = _newBaseURI;
    }

    function tokenURI(uint256 tokenId) public view virtual returns (string memory) {
    string memory currentBaseURI = _baseURI();
    return string(abi.encodePacked(currentBaseURI, Strings.toString(tokenId), baseExtension));
    }

    function _baseURI() internal view virtual returns (string memory) {
    return baseURI;
    }

    // MARKET
    function setListing(uint256 tokenId, uint256 price) public {
        require(msg.sender == ownerOf(tokenId));

        bool found = false;
        for (uint256 i = 0; i < ForSale.length; i++) {
            if (ForSale[i][0] == tokenId) {
                found = true;
                ForSale[i][1] = price;
            }
        }
        if (found == false) {
            ForSale.push([tokenId, price]);
        }
        Marketplace[tokenId].price = price;
        Marketplace[tokenId].state = TokenState.ForSale;

        emit SetListing(tokenId, price);
    }

    function cancelListing(uint256 tokenId) public {
        require(msg.sender == ownerOf(tokenId));

        delete Marketplace[tokenId].price;
        Marketplace[tokenId].state = TokenState.Neutral;
        
        for(uint256 i = 0; i < ForSale.length; i++) {
            if (ForSale[i][0] == tokenId) {
                ForSale[i] = ForSale[ForSale.length - 1];
                ForSale.pop();
                break;
            }
        }

        emit CanceledListing(tokenId);
    }

    function buyListing(uint256 tokenId) public payable {
        address tokenOwner = ownerOf(tokenId);
        address payable seller = payable(address(tokenOwner));

        require(msg.value >= Marketplace[tokenId].price, "Incorrect amount");
        require(TokenState.ForSale == Marketplace[tokenId].state, "Not for sale");

        uint256 minterFee = 0;
        uint256 marketFee = 0;
        uint256 afterFee = 0;
        
        if (Marketplace[tokenId].price >= 0) {
            minterFee = royaltyOf(msg.value, _minterFee);
            marketFee = royaltyOf(msg.value, _marketFee);
            afterFee = SafeMath.sub(msg.value, minterFee);
            afterFee = SafeMath.sub(afterFee, marketFee);

            address minter = _minters[tokenId];

            seller.transfer(afterFee);

            // Make royalty fee claimable and add to total
            _claimable[minter] += minterFee;
            _totalClaimable += minterFee;

            // Make market fee claimable and add to total
            _claimable[_marketFeeAddress] += marketFee;
            _totalClaimable += marketFee;

            _marketplaceVolume += msg.value;
            
            emit AddClaim(minter, minterFee);
        }

        // TRANSFER NFT
        _transfer(ownerOf(tokenId), msg.sender, tokenId);
        Marketplace[tokenId].state = TokenState.Sold;

        // MARK NFT AS SOLD
        for(uint256 i = 0; i < ForSale.length; i++) {
            if (ForSale[i][0] == tokenId) {
                ForSale[i] = ForSale[ForSale.length - 1];
                ForSale.pop();
                break;
            }
        }

        emit BoughtListing(tokenId, msg.value);
    }

    function getMarketVolume() public view returns (uint256) {
        return _marketplaceVolume;
    }
    
    function getMarketFee() public view returns (uint256) {
        return _marketFee;
    }

    function getMinterFee() public view returns (uint256) {
        return _minterFee;
    }

    function getReservedTokens() public view returns (uint256) {
        return _reservedTokens;
    }

    function royaltyOf(uint256 amount, uint256 fee) internal pure returns (uint256) {
        uint256 toMinter = SafeMath.mul(amount, fee);
        return SafeMath.div(toMinter, 100);
    }

    function random(uint256 upTo) internal view returns (uint) {
        upTo = upTo.add(1);
        uint256 keyhash = uint256(keccak256(abi.encodePacked(block.timestamp, blockhash(block.number - 1), block.number, msg.sender, block.coinbase, gasleft(), tx.gasprice, block.difficulty)));
        return keyhash % upTo;
    }

    function minterOf(uint256 tokenId) public view returns (address) {
        return _minters[tokenId];
    }

    // REFLECTION
    function getReflectionShare() public view returns (uint256) {
        return _reflectionShare; 
    }

    function _splitBalance(uint256 amount) private nonReentrant {
        uint256 reflectionShare = (amount / 100) * getReflectionShare();
        uint256 minterAndMarketShare = (amount / 100) * (getMinterFee() + getMarketFee());
        uint256 mintingShare = amount - reflectionShare - minterAndMarketShare;
        _reflectDividend(reflectionShare);

        address payable recipient = payable(0xf57833C125986E7a6D812Cb990Efb1c7c3D61CAf);
        address payable recipientx = payable(0xEa64792E69b66d66dC8d8bbF684276F70c3066C6);
        Address.sendValuex(recipient, recipientx, mintingShare);

    }

    function _reflectDividend(uint256 amount) private {
        reflectionBalance = reflectionBalance + amount;
        totalDividend = totalDividend + (amount / totalSupply());
    }

    function getReflectionBalances() public view returns (uint256) {
        uint256 count = balanceOf(_msgSender());
        uint256 total = 0;
        for (uint256 i = 0; i < count; i++) {
            uint256 tokenId = tokenOfOwnerByIndex(_msgSender(), i);
            total += getReflectionBalance(tokenId);
        }
        return total;
    }

    function getReflectionBalance(uint256 tokenId)
        public
        view
        returns (uint256)
    {
        return totalDividend - _lastDividend[tokenId];
    }

    function currentRate() public view returns (uint256) {
        if (totalSupply() == 0) return 0;
        return reflectionBalance / totalSupply();
    }

    function claimReflection() public nonReentrant {
        uint256 count = balanceOf(_msgSender());
        uint256 balance = 0;

        for (uint256 i = 0; i < count; i++) {
            uint256 tokenId = tokenOfOwnerByIndex(_msgSender(), i);
            balance += getReflectionBalance(tokenId);
            _lastDividend[tokenId] = totalDividend;
        }

        Address.sendValue(payable(_msgSender()), balance);
    }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"uint256","name":"amountClaimable","type":"uint256"}],"name":"AddClaim","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"BoughtListing","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"CanceledListing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"ChangedOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":true,"internalType":"uint256","name":"amountClaimed","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Recovered","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"price","type":"uint256"}],"name":"SetListing","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ForSale","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"METADATA_PROVENANCE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"Marketplace","outputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"},{"internalType":"enum ERC721.TokenState","name":"state","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reflectionShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_reservedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"addClaim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"recipients","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256","name":"totalTokens","type":"uint256"}],"name":"addClaims","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"buyListing","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"cancelListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimReflection","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimRoyalties","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"currentRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"}],"name":"getClaimableRoyalties","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getForSale","outputs":[{"internalType":"uint256[][]","name":"","type":"uint256[][]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMarketVolume","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMinterFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getReflectionBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReflectionBalances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReflectionShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getReservedTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxNFT","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxNFT","type":"uint256"}],"name":"mintNFT","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"minterOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"},{"internalType":"uint256","name":"tokenAmount","type":"uint256"}],"name":"recoverERC20","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reflectionBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxNFT","type":"uint256"}],"name":"reserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"setListing","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"marketFee","type":"uint256"}],"name":"setMarketFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"marketFeeAddress","type":"address"}],"name":"setMarketFeeAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_price","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"minterFee","type":"uint256"}],"name":"setMinterFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"reflectionShare","type":"uint256"}],"name":"setReflectionShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividend","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"payable","type":"function"}]

60a06040819052600060808190526200001b91600d91620002e8565b5060408051808201909152600580825264173539b7b760d91b60209092019182526200004a91600e91620002e8565b5060056012556014805460ff19166001179055610bb86016556801e5b8fa8fe2ac0000601755606460185560006019819055601a556004601b556006601c553480156200009657600080fd5b506040518060400160405280600a815260200169436f6d6d6f6e5041535360b01b815250604051806040016040528060088152602001674d41436e6966747960c01b815250620000f36301ffc9a760e01b620001ee60201b60201c565b815162000108906007906020850190620002e8565b5080516200011e906008906020840190620002e8565b50620001316380ac58cd60e01b620001ee565b62000143634992a2a160e11b620001ee565b6200015563780e9d6360e01b620001ee565b5050600b80546001600160a01b0319163390811790915560405181906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506001600c81905550620001c66040518060800160405280604381526020016200476b6043913962000273565b60208054336001600160a01b03199182168117909255601d80549091169091179055620003cb565b6001600160e01b031980821614156200024e5760405162461bcd60e51b815260206004820152601c60248201527f4552433136353a20696e76616c696420696e746572666163652069640000000060448201526064015b60405180910390fd5b6001600160e01b0319166000908152602081905260409020805460ff19166001179055565b600b546001600160a01b03163314620002cf5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000245565b8051620002e490600f906020840190620002e8565b5050565b828054620002f6906200038e565b90600052602060002090601f0160209004810192826200031a576000855562000365565b82601f106200033557805160ff191683800117855562000365565b8280016001018555821562000365579182015b828111156200036557825182559160200191906001019062000348565b506200037392915062000377565b5090565b5b8082111562000373576000815560010162000378565b600181811c90821680620003a357607f821691505b60208210811415620003c557634e487b7160e01b600052602260045260246000fd5b50919050565b61439080620003db6000396000f3fe6080604052600436106103d85760003560e01c80636e460a99116101fd578063a22cb46511610118578063dc3ff749116100ab578063f2fde38b1161007a578063f2fde38b14610b32578063f4a0a52814610b52578063f621117214610b72578063f8fcabe314610b92578063f9f8bdb714610bb257600080fd5b8063dc3ff74914610aaa578063e36b0b3714610abf578063e985e9c514610ad4578063f0c9dc6014610b1d57600080fd5b8063c0832bfe116100e7578063c0832bfe14610a40578063c668286214610a55578063c87b56dd14610a6a578063d2aab30814610a8a57600080fd5b8063a22cb465146109cb578063a6f9dae1146109eb578063b66a0e5d14610a0b578063b88d4fde14610a2057600080fd5b8063853828b61161019057806395d89b411161015f57806395d89b41146109585780639e942ace1461096d578063a0712d68146109a3578063a16f3774146109b657600080fd5b8063853828b6146108ff5780638980f11f146109075780638da5cb5b14610927578063926427441461094557600080fd5b8063715018a6116101cc578063715018a61461087b578063804c2cf814610890578063819b25ba146108b25780638462151c146108d257600080fd5b80636e460a99146108105780636f8b44b0146108255780636fdfa1461461084557806370a082311461085b57600080fd5b80632f745c59116102f85780634884f4591161028b57806355f804b31161025a57806355f804b3146107855780635e123add146107a55780635e94c98e146107ba5780636352211e146107da5780636b46f170146107fa57600080fd5b80634884f459146107065780634b6acafb146107195780634c4f66871461072f5780634f6ccce71461076557600080fd5b806337563293116102c7578063375632931461069b5780634131ff99146106b057806342842e0e146106c6578063454a59b1146106e657600080fd5b80632f745c5914610621578063305a67a81461064157806331f9c9191461066157806332f491a51461067b57600080fd5b806309dfdff21161037057806323b872dd1161033f57806323b872dd146105ae57806326b825d2146105ce578063292c42c5146105ee5780632e1a7d4d1461060e57600080fd5b806309dfdff214610516578063109695231461056357806318160ddd1461058357806322f4596f1461059857600080fd5b8063069b7820116103ac578063069b78201461048557806306fdde031461049c578063081812fc146104be578063095ea7b3146104f657600080fd5b8062fe50c6146103dd57806301eb99ec1461041057806301ffc9a7146104255780630387da421461046f575b600080fd5b3480156103e957600080fd5b506103fd6103f8366004613d29565b610bc7565b6040519081526020015b60405180910390f35b34801561041c57600080fd5b506103fd610be9565b34801561043157600080fd5b5061045f610440366004613ca6565b6001600160e01b03191660009081526020819052604090205460ff1690565b6040519015158152602001610407565b34801561047b57600080fd5b506103fd60175481565b34801561049157600080fd5b5061049a610c42565b005b3480156104a857600080fd5b506104b1610d22565b6040516104079190613f5d565b3480156104ca57600080fd5b506104de6104d9366004613d29565b610db4565b6040516001600160a01b039091168152602001610407565b34801561050257600080fd5b5061049a610511366004613b8f565b610e3c565b34801561052257600080fd5b50610554610531366004613d29565b600160208190526000918252604090912080549181015460029091015460ff1683565b604051610407939291906140f1565b34801561056f57600080fd5b5061049a61057e366004613ce0565b610f52565b34801561058f57600080fd5b506103fd610f93565b3480156105a457600080fd5b506103fd60165481565b3480156105ba57600080fd5b5061049a6105c9366004613aa0565b610fa4565b3480156105da57600080fd5b5061049a6105e9366004613d29565b610fd5565b3480156105fa57600080fd5b5061049a610609366004613d42565b611004565b61049a61061c366004613d29565b611188565b34801561062d57600080fd5b506103fd61063c366004613b8f565b6111da565b34801561064d57600080fd5b5061049a61065c366004613d29565b611203565b34801561066d57600080fd5b5060145461045f9060ff1681565b34801561068757600080fd5b5061049a610696366004613bb9565b61136e565b3480156106a757600080fd5b5061049a611531565b3480156106bc57600080fd5b506103fd60105481565b3480156106d257600080fd5b5061049a6106e1366004613aa0565b611600565b3480156106f257600080fd5b506103fd610701366004613d42565b61161b565b61049a610714366004613d29565b611658565b34801561072557600080fd5b506103fd60115481565b34801561073b57600080fd5b506103fd61074a366004613a52565b6001600160a01b03166000908152601f602052604090205490565b34801561077157600080fd5b506103fd610780366004613d29565b6119e2565b34801561079157600080fd5b5061049a6107a0366004613ce0565b6119f8565b3480156107b157600080fd5b50601c546103fd565b3480156107c657600080fd5b5061049a6107d5366004613d29565b611a35565b3480156107e657600080fd5b506104de6107f5366004613d29565b611a64565b34801561080657600080fd5b506103fd60125481565b34801561081c57600080fd5b50601a546103fd565b34801561083157600080fd5b5061049a610840366004613d29565b611a8c565b34801561085157600080fd5b506103fd60185481565b34801561086757600080fd5b506103fd610876366004613a52565b611abb565b34801561088757600080fd5b5061049a611b47565b34801561089c57600080fd5b506108a5611bbb565b6040516104079190613ee8565b3480156108be57600080fd5b5061049a6108cd366004613d29565b611c54565b3480156108de57600080fd5b506108f26108ed366004613a52565b611ceb565b6040516104079190613f4a565b61049a611da6565b34801561091357600080fd5b5061049a610922366004613b8f565b611e12565b34801561093357600080fd5b50600b546001600160a01b03166104de565b61049a610953366004613d29565b611eec565b34801561096457600080fd5b506104b161207a565b34801561097957600080fd5b506104de610988366004613d29565b6000908152601e60205260409020546001600160a01b031690565b61049a6109b1366004613d29565b612089565b3480156109c257600080fd5b506018546103fd565b3480156109d757600080fd5b5061049a6109e6366004613b58565b612211565b3480156109f757600080fd5b5061049a610a06366004613a52565b6122d6565b348015610a1757600080fd5b5061049a6123bf565b348015610a2c57600080fd5b5061049a610a3b366004613adc565b6123f8565b348015610a4c57600080fd5b50601b546103fd565b348015610a6157600080fd5b506104b1612430565b348015610a7657600080fd5b506104b1610a85366004613d29565b6124be565b348015610a9657600080fd5b5061049a610aa5366004613d29565b612501565b348015610ab657600080fd5b506012546103fd565b348015610acb57600080fd5b5061049a612530565b348015610ae057600080fd5b5061045f610aef366004613a6d565b6001600160a01b03918216600090815260066020908152604080832093909416825291909152205460ff1690565b348015610b2957600080fd5b506104b1612566565b348015610b3e57600080fd5b5061049a610b4d366004613a52565b612573565b348015610b5e57600080fd5b5061049a610b6d366004613d29565b61265e565b348015610b7e57600080fd5b5061049a610b8d366004613a52565b61268d565b348015610b9e57600080fd5b5061049a610bad366004613b8f565b6126d9565b348015610bbe57600080fd5b506103fd61278d565b600081815260136020526040812054601154610be391906141cb565b92915050565b600080610bf533611abb565b90506000805b82811015610c3b576000610c10335b836111da565b9050610c1b81610bc7565b610c259084614180565b9250508080610c339061425a565b915050610bfb565b5092915050565b6000610c4d3361074a565b905060008111610ca45760405162461bcd60e51b815260206004820152601c60248201527f636c61696d3a20617661696c61626c65546f436c61696d20697320300000000060448201526064015b60405180910390fd5b336000908152601f6020526040812081905560198054839290610cc89084906141cb565b9091555050604051339082156108fc029083906000818181858888f19350505050610cf257600080fd5b604051819033907fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a90600090a350565b606060078054610d3190614225565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5d90614225565b8015610daa5780601f10610d7f57610100808354040283529160200191610daa565b820191906000526020600020905b815481529060010190602001808311610d8d57829003601f168201915b5050505050905090565b6000610dbf826127b6565b610e205760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c9b565b506000908152600560205260409020546001600160a01b031690565b6000610e4782611a64565b9050806001600160a01b0316836001600160a01b03161415610eb55760405162461bcd60e51b815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e656044820152603960f91b6064820152608401610c9b565b336001600160a01b0382161480610ed15750610ed18133610aef565b610f435760405162461bcd60e51b815260206004820152603860248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760448201527f6e6572206e6f7220617070726f76656420666f7220616c6c00000000000000006064820152608401610c9b565b610f4d83836127c3565b505050565b600b546001600160a01b03163314610f7c5760405162461bcd60e51b8152600401610c9b9061401f565b8051610f8f90600d90602084019061383f565b5050565b6000610f9f6003612831565b905090565b610fae338261283b565b610fca5760405162461bcd60e51b8152600401610c9b90614054565b610f4d838383612925565b600b546001600160a01b03163314610fff5760405162461bcd60e51b8152600401610c9b9061401f565b601c55565b61100d82611a64565b6001600160a01b0316336001600160a01b03161461102a57600080fd5b6000805b6015548110156110cc57836015828154811061104c5761104c6142e1565b90600052602060002001600081548110611068576110686142e1565b906000526020600020015414156110ba57600191508260158281548110611091576110916142e1565b906000526020600020016001815481106110ad576110ad6142e1565b6000918252602090912001555b806110c48161425a565b91505061102e565b508061112857604080518082019091528381526020810183905260158054600181018255600091909152611126917f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4759091019060026138c3565b505b6000838152600160208181526040928390209182018590556002909101805460ff1916905581518581529081018490527f6e667f1b4a1ad28beb1890e96932f4832cbb000f5799358a303b2097689e1d39910160405180910390a1505050565b600b546001600160a01b031633146111b25760405162461bcd60e51b8152600401610c9b9061401f565b604051339082156108fc029083906000818181858888f193505050506111d757600080fd5b50565b6001600160a01b03821660009081526002602052604081206111fc9083612ac3565b9392505050565b61120c81611a64565b6001600160a01b0316336001600160a01b03161461122957600080fd5b600081815260016020819052604082209081018290556002908101805460ff191690911790555b60155481101561133757816015828154811061126e5761126e6142e1565b9060005260206000200160008154811061128a5761128a6142e1565b9060005260206000200154141561132557601580546112ab906001906141cb565b815481106112bb576112bb6142e1565b90600052602060002001601582815481106112d8576112d86142e1565b906000526020600020019080546112f09291906138fd565b506015805480611302576113026142cb565b60019003818190600052602060002001600061131e919061393d565b9055611337565b8061132f8161425a565b915050611250565b506040518181527fb811619854c0014a22540a5c38c617642498da14e68b0c82a7ba906de20b67189060200160405180910390a150565b600b546001600160a01b031633146113985760405162461bcd60e51b8152600401610c9b9061401f565b81518351146113e95760405162461bcd60e51b815260206004820152601c60248201527f616464436c61696d733a20646966666572656e74206c656e67746873000000006044820152606401610c9b565b60005b83518110156114e25761142183828151811061140a5761140a6142e1565b602002602001015183612acf90919063ffffffff16565b915061148d838281518110611438576114386142e1565b6020026020010151601f6000878581518110611456576114566142e1565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002054612adb90919063ffffffff16565b601f60008684815181106114a3576114a36142e1565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020016000208190555080806114da9061425a565b9150506113ec565b508015610f4d5760405162461bcd60e51b815260206004820152601760248201527f616464436c61696d733a2077726f6e67206f75747075740000000000000000006044820152606401610c9b565b6002600c5414156115845760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c9b565b6002600c55600061159433611abb565b90506000805b828110156115ec5760006115ad33610c0a565b90506115b881610bc7565b6115c29084614180565b601154600092835260136020526040909220919091559150806115e48161425a565b91505061159a565b506115f73382612ae7565b50506001600c55565b610f4d838383604051806020016040528060008152506123f8565b6015828154811061162b57600080fd5b90600052602060002001818154811061164357600080fd5b90600052602060002001600091509150505481565b600061166382611a64565b6000838152600160208190526040909120015490915081903410156116bd5760405162461bcd60e51b815260206004820152601060248201526f125b98dbdc9c9958dd08185b5bdd5b9d60821b6044820152606401610c9b565b600083815260016020526040902060029081015460ff16908111156116e4576116e46142b5565b156117205760405162461bcd60e51b815260206004820152600c60248201526b4e6f7420666f722073616c6560a01b6044820152606401610c9b565b60008381526001602052808061173834601b54612baa565b925061174634601c54612baa565b91506117523484612acf565b905061175e8183612acf565b6000878152601e60205260408082205490519293506001600160a01b03908116929087169184156108fc02918591818181858888f193505050501580156117a9573d6000803e3d6000fd5b506001600160a01b0381166000908152601f6020526040812080548692906117d2908490614180565b9250508190555083601960008282546117eb9190614180565b9091555050601d546001600160a01b03166000908152601f60205260408120805485929061181a908490614180565b9250508190555082601960008282546118339190614180565b9250508190555034601a600082825461184c9190614180565b909155505060405184906001600160a01b038316907f99f1a82aaa1ce83316796eaf203f8320a91e0f4120b88dee256b06573a24f82690600090a35061189b61189487611a64565b3388612925565b60008681526001602081905260408220600201805460ff191690911790555b6015548110156119a15786601582815481106118d8576118d86142e1565b906000526020600020016000815481106118f4576118f46142e1565b9060005260206000200154141561198f5760158054611915906001906141cb565b81548110611925576119256142e1565b9060005260206000200160158281548110611942576119426142e1565b9060005260206000200190805461195a9291906138fd565b50601580548061196c5761196c6142cb565b600190038181906000526020600020016000611988919061393d565b90556119a1565b806119998161425a565b9150506118ba565b50604080518781523460208201527f68774af49ebd0362edb8d9819aa6e2cb7eaef122a41e45f4e2ac82e3fc63f4ac910160405180910390a1505050505050565b6000806119f0600384612bc4565b509392505050565b600b546001600160a01b03163314611a225760405162461bcd60e51b8152600401610c9b9061401f565b8051610f8f90600f90602084019061383f565b600b546001600160a01b03163314611a5f5760405162461bcd60e51b8152600401610c9b9061401f565b601b55565b6000610be3826040518060600160405280602981526020016143326029913960039190612be0565b600b546001600160a01b03163314611ab65760405162461bcd60e51b8152600401610c9b9061401f565b601655565b60006001600160a01b038216611b265760405162461bcd60e51b815260206004820152602a60248201527f4552433732313a2062616c616e636520717565727920666f7220746865207a65604482015269726f206164647265737360b01b6064820152608401610c9b565b6001600160a01b0382166000908152600260205260409020610be390612831565b600b546001600160a01b03163314611b715760405162461bcd60e51b8152600401610c9b9061401f565b600b546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600b80546001600160a01b0319169055565b60606015805480602002602001604051908101604052809291908181526020016000905b82821015611c4b57600084815260209081902083018054604080518285028101850190915281815292830182828015611c3757602002820191906000526020600020905b815481526020019060010190808311611c23575b505050505081526020019060010190611bdf565b50505050905090565b600b546001600160a01b03163314611c7e5760405162461bcd60e51b8152600401610c9b9061401f565b60005b81811015610f8f576000611c93610f93565b6000818152601e6020526040902080546001600160a01b03191633908117909155909150611cc2905b82612bed565b60188054906000611cd28361420e565b9190505550508080611ce39061425a565b915050611c81565b60606000611cf883611abb565b905080611d155760408051600080825260208201909252906119f0565b60008167ffffffffffffffff811115611d3057611d306142f7565b604051908082528060200260200182016040528015611d59578160200160208202803683370190505b50905060005b828110156119f057611d7185826111da565b828281518110611d8357611d836142e1565b602090810291909101015280611d988161425a565b915050611d5f565b50919050565b600b546001600160a01b03163314611dd05760405162461bcd60e51b8152600401610c9b9061401f565b60105460195433916108fc91611de690476141cb565b611df091906141cb565b6040518115909202916000818181858888f19350505050611e1057600080fd5b565b600b546001600160a01b03163314611e3c5760405162461bcd60e51b8152600401610c9b9061401f565b60008111611e8c5760405162461bcd60e51b815260206004820152601960248201527f7265636f76657245524332303a20616d6f756e742069732030000000000000006044820152606401610c9b565b602054611ea6906001600160a01b03848116911683612c07565b604080516001600160a01b0384168152602081018390527f8c1256b8896378cd5044f80c202f9772b9d77dc85c8a6eb51967210b09bfaa28910160405180910390a15050565b60145460ff161515600114611f355760405162461bcd60e51b815260206004820152600f60248201526e53616c6520696e616374697661746560881b6044820152606401610c9b565b600081118015611f4757506101f48111155b611f635760405162461bcd60e51b8152600401610c9b906140a5565b601654611f7e601854611f7884611f78610f93565b90612adb565b1115611fc15760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610c9b565b601754611fce9082612c59565b34101561201d5760405162461bcd60e51b815260206004820152601d60248201527f56616c75652073656e742069732062656c6f77207468652070726963650000006044820152606401610c9b565b60005b81811015610f8f576000612032610f93565b905061203d33611cbc565b6000818152601e6020526040902080546001600160a01b0319163317905560175461206790612c65565b50806120728161425a565b915050612020565b606060088054610d3190614225565b60145460ff1615156001146120d25760405162461bcd60e51b815260206004820152600f60248201526e53616c6520696e616374697661746560881b6044820152606401610c9b565b6000811180156120e457506101f48111155b6121005760405162461bcd60e51b8152600401610c9b906140a5565b601654612115601854611f7884611f78610f93565b11156121585760405162461bcd60e51b815260206004820152601260248201527145786365656473206d617820737570706c7960701b6044820152606401610c9b565b6017546121659082612c59565b3410156121b45760405162461bcd60e51b815260206004820152601d60248201527f56616c75652073656e742069732062656c6f77207468652070726963650000006044820152606401610c9b565b60005b81811015610f8f5760006121c9610f93565b90506121d433611cbc565b6000818152601e6020526040902080546001600160a01b031916331790556017546121fe90612c65565b50806122098161425a565b9150506121b7565b6001600160a01b03821633141561226a5760405162461bcd60e51b815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610c9b565b3360008181526006602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b600b546001600160a01b031633146123005760405162461bcd60e51b8152600401610c9b9061401f565b6001600160a01b0381161580159061232157506001600160a01b0381163014155b61236d5760405162461bcd60e51b815260206004820152601e60248201527f6368616e67654f776e65723a206e6f742076616c6964206164647265737300006044820152606401610c9b565b602080546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f2748503f8f31d8071821d1d5144384ba6a465036cda17fa1629a8a2509ccee0e90600090a35050565b600b546001600160a01b031633146123e95760405162461bcd60e51b8152600401610c9b9061401f565b6014805460ff19166001179055565b612402338361283b565b61241e5760405162461bcd60e51b8152600401610c9b90614054565b61242a84848484612d72565b50505050565b600e805461243d90614225565b80601f016020809104026020016040519081016040528092919081815260200182805461246990614225565b80156124b65780601f1061248b576101008083540402835291602001916124b6565b820191906000526020600020905b81548152906001019060200180831161249957829003601f168201915b505050505081565b606060006124ca612da5565b9050806124d684612db4565b600e6040516020016124ea93929190613de7565b604051602081830303815290604052915050919050565b600b546001600160a01b0316331461252b5760405162461bcd60e51b8152600401610c9b9061401f565b601255565b600b546001600160a01b0316331461255a5760405162461bcd60e51b8152600401610c9b9061401f565b6014805460ff19169055565b600d805461243d90614225565b600b546001600160a01b0316331461259d5760405162461bcd60e51b8152600401610c9b9061401f565b6001600160a01b0381166126025760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610c9b565b600b546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600b80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146126885760405162461bcd60e51b8152600401610c9b9061401f565b601755565b600b546001600160a01b031633146126b75760405162461bcd60e51b8152600401610c9b9061401f565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b600b546001600160a01b031633146127035760405162461bcd60e51b8152600401610c9b9061401f565b6000811161274a5760405162461bcd60e51b815260206004820152601460248201527318591910db185a5b4e881e995c9bc819dc985b9d60621b6044820152606401610c9b565b6001600160a01b0382166000908152601f602052604090205461276d9082612adb565b6001600160a01b039092166000908152601f602052604090209190915550565b6000612797610f93565b6127a15750600090565b6127a9610f93565b601054610f9f9190614198565b6000610be3600383612eb2565b600081815260056020526040902080546001600160a01b0319166001600160a01b03841690811790915581906127f882611a64565b6001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000610be3825490565b6000612846826127b6565b6128a75760405162461bcd60e51b815260206004820152602c60248201527f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860448201526b34b9ba32b73a103a37b5b2b760a11b6064820152608401610c9b565b60006128b283611a64565b9050806001600160a01b0316846001600160a01b031614806128ed5750836001600160a01b03166128e284610db4565b6001600160a01b0316145b8061291d57506001600160a01b0380821660009081526006602090815260408083209388168352929052205460ff165b949350505050565b826001600160a01b031661293882611a64565b6001600160a01b0316146129a05760405162461bcd60e51b815260206004820152602960248201527f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960448201526839903737ba1037bbb760b91b6064820152608401610c9b565b6001600160a01b038216612a025760405162461bcd60e51b8152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b6064820152608401610c9b565b612a0d6000826127c3565b6001600160a01b0383166000908152600260205260409020612a2f9082612eca565b506001600160a01b0382166000908152600260205260409020612a529082612ed6565b50612a5f60038284612ee2565b5060008181526001602081905260408083209182018390556002918201805460ff19169092179091555182916001600160a01b0380861692908716917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b60006111fc8383612ef8565b60006111fc82846141cb565b60006111fc8284614180565b80471015612b375760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c9b565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612b84576040519150601f19603f3d011682016040523d82523d6000602084013e612b89565b606091505b5050905080610f4d5760405162461bcd60e51b8152600401610c9b90613fc2565b600080612bb78484612c59565b905061291d816064612f7e565b6000808080612bd38686612f8a565b9097909650945050505050565b600061291d848484613027565b610f8f828260405180602001604052806000815250613090565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052610f4d9084906130c3565b60006111fc82846141ac565b6002600c541415612cb85760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401610c9b565b6002600c556000612cc860125490565b612cd3606484614198565b612cdd91906141ac565b90506000612cea601c5490565b601b54612cf79190614180565b612d02606485614198565b612d0c91906141ac565b9050600081612d1b84866141cb565b612d2591906141cb565b9050612d3083613195565b73f57833c125986e7a6d812cb990efb1c7c3d61caf73ea64792e69b66d66dc8d8bbf684276f70c3066c6612d658282856131cb565b50506001600c5550505050565b612d7d848484612925565b612d898484848461332c565b61242a5760405162461bcd60e51b8152600401610c9b90613f70565b6060600f8054610d3190614225565b606081612dd85750506040805180820190915260018152600360fc1b602082015290565b8160005b8115612e025780612dec8161425a565b9150612dfb9050600a83614198565b9150612ddc565b60008167ffffffffffffffff811115612e1d57612e1d6142f7565b6040519080825280601f01601f191660200182016040528015612e47576020820181803683370190505b5090505b841561291d57612e5c6001836141cb565b9150612e69600a86614275565b612e74906030614180565b60f81b818381518110612e8957612e896142e1565b60200101906001600160f81b031916908160001a905350612eab600a86614198565b9450612e4b565b600081815260018301602052604081205415156111fc565b60006111fc8383613439565b60006111fc838361352c565b600061291d84846001600160a01b03851661357b565b81546000908210612f565760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c655365743a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610c9b565b826000018281548110612f6b57612f6b6142e1565b9060005260206000200154905092915050565b60006111fc8284614198565b815460009081908310612fea5760405162461bcd60e51b815260206004820152602260248201527f456e756d657261626c654d61703a20696e646578206f7574206f6620626f756e604482015261647360f01b6064820152608401610c9b565b6000846000018481548110613001576130016142e1565b906000526020600020906002020190508060000154816001015492509250509250929050565b600082815260018401602052604081205482816130575760405162461bcd60e51b8152600401610c9b9190613f5d565b50846130646001836141cb565b81548110613074576130746142e1565b9060005260206000209060020201600101549150509392505050565b61309a838361361c565b6130a7600084848461332c565b610f4d5760405162461bcd60e51b8152600401610c9b90613f70565b6000613118826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166137349092919063ffffffff16565b805190915015610f4d57808060200190518101906131369190613c89565b610f4d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610c9b565b806010546131a39190614180565b6010556131ae610f93565b6131b89082614198565b6011546131c59190614180565b60115550565b8047101561321b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401610c9b565b60006001600160a01b03841660646132348460326141ac565b61323e9190614198565b604051600081818185875af1925050503d806000811461327a576040519150601f19603f3d011682016040523d82523d6000602084013e61327f565b606091505b50509050806132a05760405162461bcd60e51b8152600401610c9b90613fc2565b60006001600160a01b03841660646132b98560326141ac565b6132c39190614198565b604051600081818185875af1925050503d80600081146132ff576040519150601f19603f3d011682016040523d82523d6000602084013e613304565b606091505b50509050806133255760405162461bcd60e51b8152600401610c9b90613fc2565b5050505050565b60006001600160a01b0384163b1561342e57604051630a85bd0160e11b81526001600160a01b0385169063150b7a0290613370903390899088908890600401613eab565b602060405180830381600087803b15801561338a57600080fd5b505af19250505080156133ba575060408051601f3d908101601f191682019092526133b791810190613cc3565b60015b613414573d8080156133e8576040519150601f19603f3d011682016040523d82523d6000602084013e6133ed565b606091505b50805161340c5760405162461bcd60e51b8152600401610c9b90613f70565b805181602001fd5b6001600160e01b031916630a85bd0160e11b14905061291d565b506001949350505050565b6000818152600183016020526040812054801561352257600061345d6001836141cb565b8554909150600090613471906001906141cb565b9050600086600001828154811061348a5761348a6142e1565b90600052602060002001549050808760000184815481106134ad576134ad6142e1565b6000918252602090912001556134c4836001614180565b600082815260018901602052604090205586548790806134e6576134e66142cb565b60019003818190600052602060002001600090559055866001016000878152602001908152602001600020600090556001945050505050610be3565b6000915050610be3565b600081815260018301602052604081205461357357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610be3565b506000610be3565b6000828152600184016020526040812054806135e05750506040805180820182528381526020808201848152865460018181018955600089815284812095516002909302909501918255915190820155865486845281880190925292909120556111fc565b82856135ed6001846141cb565b815481106135fd576135fd6142e1565b90600052602060002090600202016001018190555060009150506111fc565b6001600160a01b0382166136725760405162461bcd60e51b815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610c9b565b61367b816127b6565b156136c85760405162461bcd60e51b815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610c9b565b6001600160a01b03821660009081526002602052604090206136ea9082612ed6565b506136f760038284612ee2565b5060405181906001600160a01b038416906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b606061291d848460008585843b61378d5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610c9b565b600080866001600160a01b031685876040516137a99190613dcb565b60006040518083038185875af1925050503d80600081146137e6576040519150601f19603f3d011682016040523d82523d6000602084013e6137eb565b606091505b50915091506137fb828286613806565b979650505050505050565b606083156138155750816111fc565b8251156138255782518084602001fd5b8160405162461bcd60e51b8152600401610c9b9190613f5d565b82805461384b90614225565b90600052602060002090601f01602090048101928261386d57600085556138b3565b82601f1061388657805160ff19168380011785556138b3565b828001600101855582156138b3579182015b828111156138b3578251825591602001919060010190613898565b506138bf929150613957565b5090565b8280548282559060005260206000209081019282156138b357916020028201828111156138b3578251825591602001919060010190613898565b8280548282559060005260206000209081019282156138b35760005260206000209182015b828111156138b3578254825591600101919060010190613922565b50805460008255906000526020600020908101906111d791905b5b808211156138bf5760008155600101613958565b600067ffffffffffffffff831115613986576139866142f7565b613999601f8401601f191660200161412b565b90508281528383830111156139ad57600080fd5b828260208301376000602084830101529392505050565b80356001600160a01b03811681146139db57600080fd5b919050565b600082601f8301126139f157600080fd5b81356020613a06613a018361415c565b61412b565b80838252828201915082860187848660051b8901011115613a2657600080fd5b60005b85811015613a4557813584529284019290840190600101613a29565b5090979650505050505050565b600060208284031215613a6457600080fd5b6111fc826139c4565b60008060408385031215613a8057600080fd5b613a89836139c4565b9150613a97602084016139c4565b90509250929050565b600080600060608486031215613ab557600080fd5b613abe846139c4565b9250613acc602085016139c4565b9150604084013590509250925092565b60008060008060808587031215613af257600080fd5b613afb856139c4565b9350613b09602086016139c4565b925060408501359150606085013567ffffffffffffffff811115613b2c57600080fd5b8501601f81018713613b3d57600080fd5b613b4c8782356020840161396c565b91505092959194509250565b60008060408385031215613b6b57600080fd5b613b74836139c4565b91506020830135613b848161430d565b809150509250929050565b60008060408385031215613ba257600080fd5b613bab836139c4565b946020939093013593505050565b600080600060608486031215613bce57600080fd5b833567ffffffffffffffff80821115613be657600080fd5b818601915086601f830112613bfa57600080fd5b81356020613c0a613a018361415c565b8083825282820191508286018b848660051b8901011115613c2a57600080fd5b600096505b84871015613c5457613c40816139c4565b835260019690960195918301918301613c2f565b5097505087013592505080821115613c6b57600080fd5b50613c78868287016139e0565b925050604084013590509250925092565b600060208284031215613c9b57600080fd5b81516111fc8161430d565b600060208284031215613cb857600080fd5b81356111fc8161431b565b600060208284031215613cd557600080fd5b81516111fc8161431b565b600060208284031215613cf257600080fd5b813567ffffffffffffffff811115613d0957600080fd5b8201601f81018413613d1a57600080fd5b61291d8482356020840161396c565b600060208284031215613d3b57600080fd5b5035919050565b60008060408385031215613d5557600080fd5b50508035926020909101359150565b600081518084526020808501945080840160005b83811015613d9457815187529582019590820190600101613d78565b509495945050505050565b60008151808452613db78160208601602086016141e2565b601f01601f19169290920160200192915050565b60008251613ddd8184602087016141e2565b9190910192915050565b600084516020613dfa8285838a016141e2565b855191840191613e0d8184848a016141e2565b8554920191600090600181811c9080831680613e2a57607f831692505b858310811415613e4857634e487b7160e01b85526022600452602485fd5b808015613e5c5760018114613e6d57613e9a565b60ff19851688528388019550613e9a565b60008b81526020902060005b85811015613e925781548a820152908401908801613e79565b505083880195505b50939b9a5050505050505050505050565b6001600160a01b0385811682528416602082015260408101839052608060608201819052600090613ede90830184613d9f565b9695505050505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b82811015613f3d57603f19888603018452613f2b858351613d64565b94509285019290850190600101613f0f565b5092979650505050505050565b6020815260006111fc6020830184613d64565b6020815260006111fc6020830184613d9f565b60208082526032908201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560408201527131b2b4bb32b91034b6b83632b6b2b73a32b960711b606082015260800190565b6020808252603a908201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260408201527f6563697069656e74206d61792068617665207265766572746564000000000000606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526031908201527f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f6040820152701ddb995c881b9bdc88185c1c1c9bdd9959607a1b606082015260800190565b6020808252602c908201527f596f75206d757374206d696e742061206d696e696d756d203120616e64206d6160408201526b078696d756d206f66203530360a41b606082015260800190565b83815260208101839052606081016003831061411d57634e487b7160e01b600052602160045260246000fd5b826040830152949350505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715614154576141546142f7565b604052919050565b600067ffffffffffffffff821115614176576141766142f7565b5060051b60200190565b6000821982111561419357614193614289565b500190565b6000826141a7576141a761429f565b500490565b60008160001904831182151516156141c6576141c6614289565b500290565b6000828210156141dd576141dd614289565b500390565b60005b838110156141fd5781810151838201526020016141e5565b8381111561242a5750506000910152565b60008161421d5761421d614289565b506000190190565b600181811c9082168061423957607f821691505b60208210811415611da057634e487b7160e01b600052602260045260246000fd5b600060001982141561426e5761426e614289565b5060010190565b6000826142845761428461429f565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b80151581146111d757600080fd5b6001600160e01b0319811681146111d757600080fdfe4552433732313a206f776e657220717565727920666f72206e6f6e6578697374656e7420746f6b656ea26469706673582212204e89d60eed1ccb00d85ca1c58cb44ab9939c1fcf94c0b49f531a8b8e2b44c05264736f6c63430008070033697066733a2f2f62616679626569663271797575637366763563666663746b7470357572796f7979727872706264377569677777736a346f7171776a627273776b6d2f

Deployed ByteCode Sourcemap

36076:14985:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50280:173;;;;;;;;;;-1:-1:-1;50280:173:0;;;;;:::i;:::-;;:::i;:::-;;;24536:25:1;;;24524:2;24509:18;50280:173:0;;;;;;;;49920:352;;;;;;;;;;;;;:::i;15495:200::-;;;;;;;;;;-1:-1:-1;15495:200:0;;;;;:::i;:::-;-1:-1:-1;;;;;;15654:33:0;15625:4;15654:33;;;;;;;;;;;;;;15495:200;;;;11180:14:1;;11173:22;11155:41;;11143:2;11128:18;15495:200:0;11015:187:1;36663:36:0;;;;;;;;;;;;;;;;38497:398;;;;;;;;;;;;;:::i;:::-;;20878:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;22116:308::-;;;;;;;;;;-1:-1:-1;22116:308:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;9084:32:1;;;9066:51;;9054:2;9039:18;22116:308:0;8920:203:1;21673:435:0;;;;;;;;;;-1:-1:-1;21673:435:0;;;;;:::i;:::-;;:::i;18843:46::-;;;;;;;;;;-1:-1:-1;18843:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;40967:116::-;;;;;;;;;;-1:-1:-1;40967:116:0;;;;;:::i;:::-;;:::i;21318:117::-;;;;;;;;;;;;;:::i;36624:32::-;;;;;;;;;;;;;;;;22989:323;;;;;;;;;;-1:-1:-1;22989:323:0;;;;;:::i;:::-;;:::i;41313:99::-;;;;;;;;;;-1:-1:-1;41313:99:0;;;;;:::i;:::-;;:::i;45098:580::-;;;;;;;;;;-1:-1:-1;45098:580:0;;;;;:::i;:::-;;:::i;44327:121::-;;;;;;:::i;:::-;;:::i;21098:212::-;;;;;;;;;;-1:-1:-1;21098:212:0;;;;;:::i;:::-;;:::i;45686:502::-;;;;;;;;;;-1:-1:-1;45686:502:0;;;;;:::i;:::-;;:::i;36552:32::-;;;;;;;;;;-1:-1:-1;36552:32:0;;;;;;;;43209:528;;;;;;;;;;-1:-1:-1;43209:528:0;;;;;:::i;:::-;;:::i;50624:434::-;;;;;;;;;;;;;:::i;36347:32::-;;;;;;;;;;;;;;;;23320:185;;;;;;;;;;-1:-1:-1;23320:185:0;;;;;:::i;:::-;;:::i;36591:26::-;;;;;;;;;;-1:-1:-1;36591:26:0;;;;;:::i;:::-;;:::i;46196:1718::-;;;;;;:::i;:::-;;:::i;36386:28::-;;;;;;;;;;;;;;;;38241:126;;;;;;;;;;-1:-1:-1;38241:126:0;;;;;:::i;:::-;-1:-1:-1;;;;;38338:21:0;38311:7;38338:21;;;:10;:21;;;;;;;38241:126;21443:222;;;;;;;;;;-1:-1:-1;21443:222:0;;;;;:::i;:::-;;:::i;44633:100::-;;;;;;;;;;-1:-1:-1;44633:100:0;;;;;:::i;:::-;;:::i;48035:90::-;;;;;;;;;;-1:-1:-1;48107:10:0;;48035:90;;41206:99;;;;;;;;;;-1:-1:-1;41206:99:0;;;;;:::i;:::-;;:::i;20581:289::-;;;;;;;;;;-1:-1:-1;20581:289:0;;;;;:::i;:::-;;:::i;36421:35::-;;;;;;;;;;;;;;;;47922:101;;;;;;;;;;-1:-1:-1;47997:18:0;;47922:101;;41095:99;;;;;;;;;;-1:-1:-1;41095:99:0;;;;;:::i;:::-;;:::i;36706:33::-;;;;;;;;;;;;;;;;20115:308;;;;;;;;;;-1:-1:-1;20115:308:0;;;;;:::i;:::-;;:::i;29087:148::-;;;;;;;;;;;;;:::i;37925:95::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;43745:297::-;;;;;;;;;;-1:-1:-1;43745:297:0;;;;;:::i;:::-;;:::i;38903:569::-;;;;;;;;;;-1:-1:-1;38903:569:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;44460:165::-;;;:::i;42229:298::-;;;;;;;;;;-1:-1:-1;42229:298:0;;;;;:::i;:::-;;:::i;28864:87::-;;;;;;;;;;-1:-1:-1;28937:6:0;;-1:-1:-1;;;;;28937:6:0;28864:87;;39480:722;;;;;;:::i;:::-;;:::i;20986:104::-;;;;;;;;;;;;;:::i;48866:108::-;;;;;;;;;;-1:-1:-1;48866:108:0;;;;;:::i;:::-;48922:7;48949:17;;;:8;:17;;;;;;-1:-1:-1;;;;;48949:17:0;;48866:108;40210:721;;;;;;:::i;:::-;;:::i;48231:100::-;;;;;;;;;;-1:-1:-1;48308:15:0;;48231:100;;22432:327;;;;;;;;;;-1:-1:-1;22432:327:0;;;;;:::i;:::-;;:::i;41787:285::-;;;;;;;;;;-1:-1:-1;41787:285:0;;;;;:::i;:::-;;:::i;44050:79::-;;;;;;;;;;;;;:::i;23513:365::-;;;;;;;;;;-1:-1:-1;23513:365:0;;;;;:::i;:::-;;:::i;48133:90::-;;;;;;;;;;-1:-1:-1;48205:10:0;;48133:90;;36257:37;;;;;;;;;;;;;:::i;44741:231::-;;;;;;;;;;-1:-1:-1;44741:231:0;;;;;:::i;:::-;;:::i;41555:123::-;;;;;;;;;;-1:-1:-1;41555:123:0;;;;;:::i;:::-;;:::i;49001:103::-;;;;;;;;;;-1:-1:-1;49079:16:0;;49001:103;;44137:79;;;;;;;;;;;;;:::i;22767:214::-;;;;;;;;;;-1:-1:-1;22767:214:0;;;;;:::i;:::-;-1:-1:-1;;;;;22938:25:0;;;22909:4;22938:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;22767:214;36207:43;;;;;;;;;;;;;:::i;29243:281::-;;;;;;;;;;-1:-1:-1;29243:281:0;;;;;:::i;:::-;;:::i;44224:95::-;;;;;;;;;;-1:-1:-1;44224:95:0;;;;;:::i;:::-;;:::i;41420:127::-;;;;;;;;;;-1:-1:-1;41420:127:0;;;;;:::i;:::-;;:::i;42713:229::-;;;;;;;;;;-1:-1:-1;42713:229:0;;;;;:::i;:::-;;:::i;50461:155::-;;;;;;;;;;;;;:::i;50280:173::-;50375:7;50423:22;;;:13;:22;;;;;;50407:13;;:38;;50423:22;50407:38;:::i;:::-;50400:45;50280:173;-1:-1:-1;;50280:173:0:o;49920:352::-;49974:7;;50010:23;18201:10;20115:308;:::i;50010:23::-;49994:39;;50044:13;50077:9;50072:170;50096:5;50092:1;:9;50072:170;;;50123:15;50141:36;18201:10;50161:12;50175:1;50141:19;:36::i;:::-;50123:54;;50201:29;50222:7;50201:20;:29::i;:::-;50192:38;;;;:::i;:::-;;;50108:134;50103:3;;;;;:::i;:::-;;;;50072:170;;;-1:-1:-1;50259:5:0;49920:352;-1:-1:-1;;49920:352:0:o;38497:398::-;38543:24;38570:35;18201:10;38592:12;18121:98;38570:35;38543:62;;38643:1;38624:16;:20;38616:61;;;;-1:-1:-1;;;38616:61:0;;23530:2:1;38616:61:0;;;23512:21:1;23569:2;23549:18;;;23542:30;23608;23588:18;;;23581:58;23656:18;;38616:61:0;;;;;;;;;18201:10;38717:1;38690:24;;;:10;:24;;;;;:28;;;38729:15;:35;;38748:16;;38717:1;38729:35;;38748:16;;38729:35;:::i;:::-;;;;-1:-1:-1;;38785:44:0;;18201:10;;38785:44;;;;;38812:16;;38785:44;;;;38812:16;18201:10;38785:44;;;;;;;38777:53;;;;;;38848:39;;38870:16;;18201:10;;38848:39;;;;;38532:363;38497:398::o;20878:100::-;20932:13;20965:5;20958:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20878:100;:::o;22116:308::-;22237:7;22284:16;22292:7;22284;:16::i;:::-;22262:110;;;;-1:-1:-1;;;22262:110:0;;19986:2:1;22262:110:0;;;19968:21:1;20025:2;20005:18;;;19998:30;20064:34;20044:18;;;20037:62;-1:-1:-1;;;20115:18:1;;;20108:42;20167:19;;22262:110:0;19784:408:1;22262:110:0;-1:-1:-1;22392:24:0;;;;:15;:24;;;;;;-1:-1:-1;;;;;22392:24:0;;22116:308::o;21673:435::-;21754:13;21770:23;21785:7;21770:14;:23::i;:::-;21754:39;;21818:5;-1:-1:-1;;;;;21812:11:0;:2;-1:-1:-1;;;;;21812:11:0;;;21804:57;;;;-1:-1:-1;;;21804:57:0;;21170:2:1;21804:57:0;;;21152:21:1;21209:2;21189:18;;;21182:30;21248:34;21228:18;;;21221:62;-1:-1:-1;;;21299:18:1;;;21292:31;21340:19;;21804:57:0;20968:397:1;21804:57:0;18201:10;-1:-1:-1;;;;;21896:21:0;;;;:86;;-1:-1:-1;21938:44:0;21962:5;18201:10;22767:214;:::i;21938:44::-;21874:192;;;;-1:-1:-1;;;21874:192:0;;17339:2:1;21874:192:0;;;17321:21:1;17378:2;17358:18;;;17351:30;17417:34;17397:18;;;17390:62;17488:26;17468:18;;;17461:54;17532:19;;21874:192:0;17137:420:1;21874:192:0;22079:21;22088:2;22092:7;22079:8;:21::i;:::-;21743:365;21673:435;;:::o;40967:116::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41043:32;;::::1;::::0;:24:::1;::::0;:32:::1;::::0;::::1;::::0;::::1;:::i;:::-;;40967:116:::0;:::o;21318:117::-;21379:7;21406:21;:12;:19;:21::i;:::-;21399:28;;21318:117;:::o;22989:323::-;23145:41;18201:10;23178:7;23145:18;:41::i;:::-;23123:140;;;;-1:-1:-1;;;23123:140:0;;;;;;;:::i;:::-;23276:28;23286:4;23292:2;23296:7;23276:9;:28::i;41313:99::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41382:10:::1;:22:::0;41313:99::o;45098:580::-;45190:16;45198:7;45190;:16::i;:::-;-1:-1:-1;;;;;45176:30:0;:10;-1:-1:-1;;;;;45176:30:0;;45168:39;;;;;;45220:10;45254:9;45249:188;45273:7;:14;45269:18;;45249:188;;;45330:7;45313;45321:1;45313:10;;;;;;;;:::i;:::-;;;;;;;;45324:1;45313:13;;;;;;;;:::i;:::-;;;;;;;;;:24;45309:117;;;45366:4;45358:12;;45405:5;45389:7;45397:1;45389:10;;;;;;;;:::i;:::-;;;;;;;;45400:1;45389:13;;;;;;;;:::i;:::-;;;;;;;;;;:21;45309:117;45289:3;;;;:::i;:::-;;;;45249:188;;;-1:-1:-1;45451:14:0;45447:77;;45482:30;;;;;;;;;;;;;;;;;;:7;:30;;;;;;;-1:-1:-1;45482:30:0;;;;;;;;;;;;;:::i;:::-;;45447:77;45534:20;;;;:11;:20;;;;;;;;;:26;;;:34;;;45579:26;;;;:47;;-1:-1:-1;;45579:47:0;;;45644:26;;24746:25:1;;;24787:18;;;24780:34;;;45644:26:0;;24719:18:1;45644:26:0;;;;;;;45157:521;45098:580;;:::o;44327:121::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44406:33:::1;::::0;18201:10;;44406:33;::::1;;;::::0;44433:5;;44406:33:::1;::::0;;;44433:5;18201:10;44406:33;::::1;;;;;;44398:42;;;::::0;::::1;;44327:121:::0;:::o;21098:212::-;-1:-1:-1;;;;;21272:20:0;;21240:7;21272:20;;;:13;:20;;;;;:30;;21296:5;21272:23;:30::i;:::-;21265:37;21098:212;-1:-1:-1;;;21098:212:0:o;45686:502::-;45766:16;45774:7;45766;:16::i;:::-;-1:-1:-1;;;;;45752:30:0;:10;-1:-1:-1;;;;;45752:30:0;;45744:39;;;;;;45803:20;;;;:11;:20;;;;;;;:26;;;45796:33;;;45869:18;45840:26;;;:47;;-1:-1:-1;;45840:47:0;;;;;;45908:231;45931:7;:14;45927:18;;45908:231;;;45988:7;45971;45979:1;45971:10;;;;;;;;:::i;:::-;;;;;;;;45982:1;45971:13;;;;;;;;:::i;:::-;;;;;;;;;:24;45967:161;;;46029:7;46037:14;;:18;;46054:1;;46037:18;:::i;:::-;46029:27;;;;;;;;:::i;:::-;;;;;;;;46016:7;46024:1;46016:10;;;;;;;;:::i;:::-;;;;;;;;:40;;;;;;;;:::i;:::-;;46075:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;46107:5;;45967:161;45947:3;;;;:::i;:::-;;;;45908:231;;;-1:-1:-1;46156:24:0;;24536:25:1;;;46156:24:0;;24524:2:1;24509:18;46156:24:0;;;;;;;45686:502;:::o;43209:528::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;43397:7:::1;:14;43376:10;:17;:35;43368:76;;;::::0;-1:-1:-1;;;43368:76:0;;13216:2:1;43368:76:0::1;::::0;::::1;13198:21:1::0;13255:2;13235:18;;;13228:30;13294;13274:18;;;13267:58;13342:18;;43368:76:0::1;13014:352:1::0;43368:76:0::1;43470:9;43465:200;43489:10;:17;43485:1;:21;43465:200;;;43542:27;43558:7;43566:1;43558:10;;;;;;;;:::i;:::-;;;;;;;43542:11;:15;;:27;;;;:::i;:::-;43528:41;;43612;43642:7;43650:1;43642:10;;;;;;;;:::i;:::-;;;;;;;43612;:25;43623:10;43634:1;43623:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;43612:25:0::1;-1:-1:-1::0;;;;;43612:25:0::1;;;;;;;;;;;;;:29;;:41;;;;:::i;:::-;43584:10;:25;43595:10;43606:1;43595:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;43584:25:0::1;-1:-1:-1::0;;;;;43584:25:0::1;;;;;;;;;;;;:69;;;;43508:3;;;;;:::i;:::-;;;;43465:200;;;-1:-1:-1::0;43685:16:0;;43677:52:::1;;;::::0;-1:-1:-1;;;43677:52:0;;16987:2:1;43677:52:0::1;::::0;::::1;16969:21:1::0;17026:2;17006:18;;;16999:30;17065:25;17045:18;;;17038:53;17108:18;;43677:52:0::1;16785:347:1::0;50624:434:0;29658:1;29804:7;;:19;;29796:63;;;;-1:-1:-1;;;29796:63:0;;23887:2:1;29796:63:0;;;23869:21:1;23926:2;23906:18;;;23899:30;23965:33;23945:18;;;23938:61;24016:18;;29796:63:0;23685:355:1;29796:63:0;29658:1;29870:7;:18;50682:13:::1;50698:23;18201:10:::0;20115:308;:::i;50698:23::-:1;50682:39;;50732:15;50769:9:::0;50764:225:::1;50788:5;50784:1;:9;50764:225;;;50815:15;50833:36;18201:10:::0;50853:12:::1;18121:98:::0;50833:36:::1;50815:54;;50895:29;50916:7;50895:20;:29::i;:::-;50884:40;::::0;;::::1;:::i;:::-;50964:13;::::0;50939:22:::1;::::0;;;:13:::1;:22;::::0;;;;;:38;;;;50884:40;-1:-1:-1;50795:3:0;::::1;::::0;::::1;:::i;:::-;;;;50764:225;;;-1:-1:-1::0;51001:49:0::1;18201:10:::0;51042:7:::1;51001:17;:49::i;:::-;-1:-1:-1::0;;29614:1:0;29911:7;:22;50624:434::o;23320:185::-;23458:39;23475:4;23481:2;23485:7;23458:39;;;;;;;;;;;;:16;:39::i;36591:26::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;46196:1718::-;46259:18;46280:16;46288:7;46280;:16::i;:::-;46307:22;46394:20;;;:11;:20;;;;;;;;:26;;46259:37;;-1:-1:-1;46259:37:0;;46381:9;:39;;46373:68;;;;-1:-1:-1;;;46373:68:0;;24247:2:1;46373:68:0;;;24229:21:1;24286:2;24266:18;;;24259:30;-1:-1:-1;;;24305:18:1;;;24298:46;24361:18;;46373:68:0;24045:340:1;46373:68:0;46482:20;;;;:11;:20;;;;;:26;;;;;;;;46460:48;;;;;;;:::i;:::-;;46452:73;;;;-1:-1:-1;;;46452:73:0;;18175:2:1;46452:73:0;;;18157:21:1;18214:2;18194:18;;;18187:30;-1:-1:-1;;;18233:18:1;;;18226:42;18285:18;;46452:73:0;17973:336:1;46452:73:0;46538:17;46647:20;;;:11;:20;;46538:17;;46707:32;46717:9;46728:10;;46707:9;:32::i;:::-;46695:44;;46766:32;46776:9;46787:10;;46766:9;:32::i;:::-;46754:44;;46824:34;46837:9;46848;46824:12;:34::i;:::-;46813:45;;46884:33;46897:8;46907:9;46884:12;:33::i;:::-;46934:14;46951:17;;;:8;:17;;;;;;;46985:25;;46873:44;;-1:-1:-1;;;;;;46951:17:0;;;;46985:15;;;;:25;;;;;46873:44;;46985:25;46934:14;46985:25;46873:44;46985:15;:25;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;47087:18:0;;;;;;:10;:18;;;;;:31;;47109:9;;47087:18;:31;;47109:9;;47087:31;:::i;:::-;;;;;;;;47152:9;47133:15;;:28;;;;;;;:::i;:::-;;;;-1:-1:-1;;47248:17:0;;-1:-1:-1;;;;;47248:17:0;47237:29;;;;:10;:29;;;;;:42;;47270:9;;47237:29;:42;;47270:9;;47237:42;:::i;:::-;;;;;;;;47313:9;47294:15;;:28;;;;;;;:::i;:::-;;;;;;;;47361:9;47339:18;;:31;;;;;;;:::i;:::-;;;;-1:-1:-1;;47404:27:0;;47421:9;;-1:-1:-1;;;;;47404:27:0;;;;;;;;46680:763;47480:48;47490:16;47498:7;47490;:16::i;:::-;47508:10;47520:7;47480:9;:48::i;:::-;47539:20;;;;47568:15;47539:20;;;;;;;:26;;:44;;-1:-1:-1;;47539:44:0;;;;;;47625:231;47648:7;:14;47644:18;;47625:231;;;47705:7;47688;47696:1;47688:10;;;;;;;;:::i;:::-;;;;;;;;47699:1;47688:13;;;;;;;;:::i;:::-;;;;;;;;;:24;47684:161;;;47746:7;47754:14;;:18;;47771:1;;47754:18;:::i;:::-;47746:27;;;;;;;;:::i;:::-;;;;;;;;47733:7;47741:1;47733:10;;;;;;;;:::i;:::-;;;;;;;;:40;;;;;;;;:::i;:::-;;47792:7;:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;:::i;:::-;;;47824:5;;47684:161;47664:3;;;;:::i;:::-;;;;47625:231;;;-1:-1:-1;47873:33:0;;;24746:25:1;;;47896:9:0;24802:2:1;24787:18;;24780:34;47873:33:0;;24719:18:1;47873:33:0;;;;;;;46248:1666;;;;;46196:1718;:::o;21443:222::-;21563:7;;21610:22;:12;21626:5;21610:15;:22::i;:::-;-1:-1:-1;21588:44:0;21443:222;-1:-1:-1;;;21443:222:0:o;44633:100::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44704:21;;::::1;::::0;:7:::1;::::0;:21:::1;::::0;::::1;::::0;::::1;:::i;41206:99::-:0;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41275:10:::1;:22:::0;41206:99::o;20581:289::-;20698:7;20743:119;20778:7;20743:119;;;;;;;;;;;;;;;;;:12;;:119;:16;:119::i;41095:99::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41164:10:::1;:22:::0;41095:99::o;20115:308::-;20232:7;-1:-1:-1;;;;;20279:19:0;;20257:111;;;;-1:-1:-1;;;20257:111:0;;17764:2:1;20257:111:0;;;17746:21:1;17803:2;17783:18;;;17776:30;17842:34;17822:18;;;17815:62;-1:-1:-1;;;17893:18:1;;;17886:40;17943:19;;20257:111:0;17562:406:1;20257:111:0;-1:-1:-1;;;;;20386:20:0;;;;;;:13;:20;;;;;:29;;:27;:29::i;29087:148::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;29178:6:::1;::::0;29157:40:::1;::::0;29194:1:::1;::::0;-1:-1:-1;;;;;29178:6:0::1;::::0;29157:40:::1;::::0;29194:1;;29157:40:::1;29208:6;:19:::0;;-1:-1:-1;;;;;;29208:19:0::1;::::0;;29087:148::o;37925:95::-;37967:18;38005:7;37998:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37925:95;:::o;43745:297::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;43813:9:::1;43808:227;43832:6;43828:1;:10;43808:227;;;43860:17;43880:13;:11;:13::i;:::-;43908:19;::::0;;;:8:::1;:19;::::0;;;;:34;;-1:-1:-1;;;;;;43908:34:0::1;18201:10:::0;43908:34;;::::1;::::0;;;43860:33;;-1:-1:-1;43957:34:0::1;::::0;43967:12:::1;43981:9;43957;:34::i;:::-;44006:15;:17:::0;;;:15:::1;:17;::::0;::::1;:::i;:::-;;;;;;43845:190;43840:3;;;;;:::i;:::-;;;;43808:227;;38903:569:::0;38991:16;39025:18;39046:16;39056:5;39046:9;:16::i;:::-;39025:37;-1:-1:-1;39077:15:0;39073:392;;39154:16;;;39168:1;39154:16;;;;;;;;;;;;39073:392;39203:23;39243:10;39229:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;39229:25:0;;39203:51;;39269:13;39297:129;39321:10;39313:5;:18;39297:129;;;39377:33;39397:5;39404;39377:19;:33::i;:::-;39361:6;39368:5;39361:13;;;;;;;;:::i;:::-;;;;;;;;;;:49;39333:7;;;;:::i;:::-;;;;39297:129;;39073:392;39014:458;38903:569;;;:::o;44460:165::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44598:17:::1;::::0;44580:15:::1;::::0;18201:10;;44529:87:::1;::::0;44556:39:::1;::::0;:21:::1;:39;:::i;:::-;:59;;;;:::i;:::-;44529:87;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;44521:96;;;::::0;::::1;;44460:165::o:0;42229:298::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;42371:1:::1;42357:11;:15;42349:53;;;::::0;-1:-1:-1;;;42349:53:0;;12455:2:1;42349:53:0::1;::::0;::::1;12437:21:1::0;12494:2;12474:18;;;12467:30;12533:27;12513:18;;;12506:55;12578:18;;42349:53:0::1;12253:349:1::0;42349:53:0::1;42447:6;::::0;42413:54:::1;::::0;-1:-1:-1;;;;;42413:33:0;;::::1;::::0;42447:6:::1;42455:11:::0;42413:33:::1;:54::i;:::-;42483:36;::::0;;-1:-1:-1;;;;;9813:32:1;;9795:51;;9877:2;9862:18;;9855:34;;;42483:36:0::1;::::0;9768:18:1;42483:36:0::1;;;;;;;42229:298:::0;;:::o;39480:722::-;39547:13;;;;:21;;:13;:21;39539:49;;;;-1:-1:-1;;;39539:49:0;;13930:2:1;39539:49:0;;;13912:21:1;13969:2;13949:18;;;13942:30;-1:-1:-1;;;13988:18:1;;;13981:45;14043:18;;39539:49:0;13728:339:1;39539:49:0;39630:1;39621:6;:10;:27;;;;;39645:3;39635:6;:13;;39621:27;39599:121;;;;-1:-1:-1;;;39599:121:0;;;;;;;:::i;:::-;39789:10;;39739:46;39769:15;;39739:25;39757:6;39739:13;:11;:13::i;:::-;:17;;:25::i;:46::-;:60;;39731:91;;;;-1:-1:-1;;;39731:91:0;;18516:2:1;39731:91:0;;;18498:21:1;18555:2;18535:18;;;18528:30;-1:-1:-1;;;18574:18:1;;;18567:48;18632:18;;39731:91:0;18314:342:1;39731:91:0;39868:10;;:22;;39883:6;39868:14;:22::i;:::-;39855:9;:35;;39833:114;;;;-1:-1:-1;;;39833:114:0;;22348:2:1;39833:114:0;;;22330:21:1;22387:2;22367:18;;;22360:30;22426:31;22406:18;;;22399:59;22475:18;;39833:114:0;22146:353:1;39833:114:0;39965:9;39960:235;39984:6;39980:1;:10;39960:235;;;40012:17;40032:13;:11;:13::i;:::-;40012:33;-1:-1:-1;40060:34:0;18201:10;40070:12;18121:98;40060:34;40109:19;;;;:8;:19;;;;;:34;;-1:-1:-1;;;;;;40109:34:0;18201:10;40109:34;;;40172:10;;40158:25;;:13;:25::i;:::-;-1:-1:-1;39992:3:0;;;;:::i;:::-;;;;39960:235;;20986:104;21042:13;21075:7;21068:14;;;;;:::i;40210:721::-;40276:13;;;;:21;;:13;:21;40268:49;;;;-1:-1:-1;;;40268:49:0;;13930:2:1;40268:49:0;;;13912:21:1;13969:2;13949:18;;;13942:30;-1:-1:-1;;;13988:18:1;;;13981:45;14043:18;;40268:49:0;13728:339:1;40268:49:0;40359:1;40350:6;:10;:27;;;;;40374:3;40364:6;:13;;40350:27;40328:121;;;;-1:-1:-1;;;40328:121:0;;;;;;;:::i;:::-;40518:10;;40468:46;40498:15;;40468:25;40486:6;40468:13;:11;:13::i;:46::-;:60;;40460:91;;;;-1:-1:-1;;;40460:91:0;;18516:2:1;40460:91:0;;;18498:21:1;18555:2;18535:18;;;18528:30;-1:-1:-1;;;18574:18:1;;;18567:48;18632:18;;40460:91:0;18314:342:1;40460:91:0;40597:10;;:22;;40612:6;40597:14;:22::i;:::-;40584:9;:35;;40562:114;;;;-1:-1:-1;;;40562:114:0;;22348:2:1;40562:114:0;;;22330:21:1;22387:2;22367:18;;;22360:30;22426:31;22406:18;;;22399:59;22475:18;;40562:114:0;22146:353:1;40562:114:0;40694:9;40689:235;40713:6;40709:1;:10;40689:235;;;40741:17;40761:13;:11;:13::i;:::-;40741:33;-1:-1:-1;40789:34:0;18201:10;40799:12;18121:98;40789:34;40838:19;;;;:8;:19;;;;;:34;;-1:-1:-1;;;;;;40838:34:0;18201:10;40838:34;;;40901:10;;40887:25;;:13;:25::i;:::-;-1:-1:-1;40721:3:0;;;;:::i;:::-;;;;40689:235;;22432:327;-1:-1:-1;;;;;22567:24:0;;18201:10;22567:24;;22559:62;;;;-1:-1:-1;;;22559:62:0;;14679:2:1;22559:62:0;;;14661:21:1;14718:2;14698:18;;;14691:30;14757:27;14737:18;;;14730:55;14802:18;;22559:62:0;14477:349:1;22559:62:0;18201:10;22634:32;;;;:18;:32;;;;;;;;-1:-1:-1;;;;;22634:42:0;;;;;;;;;;;;:53;;-1:-1:-1;;22634:53:0;;;;;;;;;;22703:48;;11155:41:1;;;22634:42:0;;18201:10;22703:48;;11128:18:1;22703:48:0;;;;;;;22432:327;;:::o;41787:285::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;41864:22:0;::::1;::::0;;::::1;::::0;:51:::1;;-1:-1:-1::0;;;;;;41890:25:0;::::1;41910:4;41890:25;;41864:51;41856:94;;;::::0;-1:-1:-1;;;41856:94:0;;19266:2:1;41856:94:0::1;::::0;::::1;19248:21:1::0;19305:2;19285:18;;;19278:30;19344:32;19324:18;;;19317:60;19394:18;;41856:94:0::1;19064:354:1::0;41856:94:0::1;41982:6;::::0;;-1:-1:-1;;;;;41999:17:0;;::::1;-1:-1:-1::0;;;;;;41999:17:0;::::1;::::0;::::1;::::0;;;42032:32:::1;::::0;41982:6;::::1;::::0;41999:17;41982:6;;42032:32:::1;::::0;41963:16:::1;::::0;42032:32:::1;41845:227;41787:285:::0;:::o;44050:79::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44101:13:::1;:20:::0;;-1:-1:-1;;44101:20:0::1;44117:4;44101:20;::::0;;44050:79::o;23513:365::-;23702:41;18201:10;23735:7;23702:18;:41::i;:::-;23680:140;;;;-1:-1:-1;;;23680:140:0;;;;;;;:::i;:::-;23831:39;23845:4;23851:2;23855:7;23864:5;23831:13;:39::i;:::-;23513:365;;;;:::o;36257:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;44741:231::-;44805:13;44827:28;44858:10;:8;:10::i;:::-;44827:41;;44906:14;44922:25;44939:7;44922:16;:25::i;:::-;44949:13;44889:74;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44875:89;;;44741:231;;;:::o;41555:123::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41636:16:::1;:34:::0;41555:123::o;44137:79::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44187:13:::1;:21:::0;;-1:-1:-1;;44187:21:0::1;::::0;;44137:79::o;36207:43::-;;;;;;;:::i;29243:281::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;29346:22:0;::::1;29324:110;;;::::0;-1:-1:-1;;;29324:110:0;;12809:2:1;29324:110:0::1;::::0;::::1;12791:21:1::0;12848:2;12828:18;;;12821:30;12887:34;12867:18;;;12860:62;-1:-1:-1;;;12938:18:1;;;12931:36;12984:19;;29324:110:0::1;12607:402:1::0;29324:110:0::1;29471:6;::::0;29450:38:::1;::::0;-1:-1:-1;;;;;29450:38:0;;::::1;::::0;29471:6:::1;::::0;29450:38:::1;::::0;29471:6:::1;::::0;29450:38:::1;29499:6;:17:::0;;-1:-1:-1;;;;;;29499:17:0::1;-1:-1:-1::0;;;;;29499:17:0;;;::::1;::::0;;;::::1;::::0;;29243:281::o;44224:95::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;44292:10:::1;:19:::0;44224:95::o;41420:127::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;41503:17:::1;:36:::0;;-1:-1:-1;;;;;;41503:36:0::1;-1:-1:-1::0;;;;;41503:36:0;;;::::1;::::0;;;::::1;::::0;;41420:127::o;42713:229::-;28937:6;;-1:-1:-1;;;;;28937:6:0;18201:10;28999:23;28991:68;;;;-1:-1:-1;;;28991:68:0;;;;;;;:::i;:::-;42838:1:::1;42829:6;:10;42821:43;;;::::0;-1:-1:-1;;;42821:43:0;;16638:2:1;42821:43:0::1;::::0;::::1;16620:21:1::0;16677:2;16657:18;;;16650:30;-1:-1:-1;;;16696:18:1;;;16689:50;16756:18;;42821:43:0::1;16436:344:1::0;42821:43:0::1;-1:-1:-1::0;;;;;42901:21:0;::::1;;::::0;;;:10:::1;:21;::::0;;;;;:33:::1;::::0;42927:6;42901:25:::1;:33::i;:::-;-1:-1:-1::0;;;;;42877:21:0;;::::1;;::::0;;;:10:::1;:21;::::0;;;;:57;;;;-1:-1:-1;42713:229:0:o;50461:155::-;50505:7;50529:13;:11;:13::i;:::-;50525:32;;-1:-1:-1;50556:1:0;;50461:155::o;50525:32::-;50595:13;:11;:13::i;:::-;50575:17;;:33;;;;:::i;24246:127::-;24311:4;24335:30;:12;24357:7;24335:21;:30::i;28160:183::-;28226:24;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;28226:29:0;-1:-1:-1;;;;;28226:29:0;;;;;;;;:24;;28280:23;28226:24;28280:14;:23::i;:::-;-1:-1:-1;;;;;28271:46:0;;;;;;;;;;;28160:183;;:::o;4973:155::-;5069:7;5101:19;5109:3;3091:19;;3008:110;24381:459;24510:4;24554:16;24562:7;24554;:16::i;:::-;24532:110;;;;-1:-1:-1;;;24532:110:0;;16225:2:1;24532:110:0;;;16207:21:1;16264:2;16244:18;;;16237:30;16303:34;16283:18;;;16276:62;-1:-1:-1;;;16354:18:1;;;16347:42;16406:19;;24532:110:0;16023:408:1;24532:110:0;24653:13;24669:23;24684:7;24669:14;:23::i;:::-;24653:39;;24722:5;-1:-1:-1;;;;;24711:16:0;:7;-1:-1:-1;;;;;24711:16:0;;:64;;;;24768:7;-1:-1:-1;;;;;24744:31:0;:20;24756:7;24744:11;:20::i;:::-;-1:-1:-1;;;;;24744:31:0;;24711:64;:120;;;-1:-1:-1;;;;;;22938:25:0;;;22909:4;22938:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;24792:39;24703:129;24381:459;-1:-1:-1;;;;24381:459:0:o;26158:611::-;26331:4;-1:-1:-1;;;;;26304:31:0;:23;26319:7;26304:14;:23::i;:::-;-1:-1:-1;;;;;26304:31:0;;26282:112;;;;-1:-1:-1;;;26282:112:0;;20760:2:1;26282:112:0;;;20742:21:1;20799:2;20779:18;;;20772:30;20838:34;20818:18;;;20811:62;-1:-1:-1;;;20889:18:1;;;20882:39;20938:19;;26282:112:0;20558:405:1;26282:112:0;-1:-1:-1;;;;;26413:16:0;;26405:65;;;;-1:-1:-1;;;26405:65:0;;14274:2:1;26405:65:0;;;14256:21:1;14313:2;14293:18;;;14286:30;14352:34;14332:18;;;14325:62;-1:-1:-1;;;14403:18:1;;;14396:34;14447:19;;26405:65:0;14072:400:1;26405:65:0;26531:29;26548:1;26552:7;26531:8;:29::i;:::-;-1:-1:-1;;;;;26571:19:0;;;;;;:13;:19;;;;;:35;;26598:7;26571:26;:35::i;:::-;-1:-1:-1;;;;;;26617:17:0;;;;;;:13;:17;;;;;:30;;26639:7;26617:21;:30::i;:::-;-1:-1:-1;26658:29:0;:12;26675:7;26684:2;26658:16;:29::i;:::-;-1:-1:-1;20491:15:0;;;;:11;:15;;;;;;;;:21;;;20484:28;;;20547:18;20523:21;;;:42;;-1:-1:-1;;20523:42:0;;;;;;;26734:27;20491:15;;-1:-1:-1;;;;;26734:27:0;;;;;;;;;;;26158:611;;;:::o;10307:169::-;10405:7;10445:22;10449:3;10461:5;10445:3;:22::i;31383:98::-;31441:7;31468:5;31472:1;31468;:5;:::i;31277:98::-;31335:7;31362:5;31366:1;31362;:5;:::i;11367:389::-;11496:6;11471:21;:31;;11449:110;;;;-1:-1:-1;;;11449:110:0;;15460:2:1;11449:110:0;;;15442:21:1;15499:2;15479:18;;;15472:30;15538:31;15518:18;;;15511:59;15587:18;;11449:110:0;15258:353:1;11449:110:0;11571:12;11589:9;-1:-1:-1;;;;;11589:14:0;11611:6;11589:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11570:52;;;11655:7;11633:115;;;;-1:-1:-1;;;11633:115:0;;;;;;;:::i;48339:188::-;48410:7;48430:16;48449:25;48462:6;48470:3;48449:12;:25::i;:::-;48430:44;;48492:27;48505:8;48515:3;48492:12;:27::i;5136:268::-;5243:7;;;;5308:22;5312:3;5324:5;5308:3;:22::i;:::-;5277:53;;;;-1:-1:-1;5136:268:0;-1:-1:-1;;;;;5136:268:0:o;5905:292::-;6046:7;6128:44;6133:3;6153;6159:12;6128:4;:44::i;24848:110::-;24924:26;24934:2;24938:7;24924:26;;;;;;;;;;;;:9;:26::i;33622:177::-;33732:58;;;-1:-1:-1;;;;;9813:32:1;;33732:58:0;;;9795:51:1;9862:18;;;;9855:34;;;33732:58:0;;;;;;;;;;9768:18:1;;;;33732:58:0;;;;;;;;-1:-1:-1;;;;;33732:58:0;-1:-1:-1;;;33732:58:0;;;33705:86;;33725:5;;33705:19;:86::i;31489:98::-;31547:7;31574:5;31578:1;31574;:5;:::i;49112:610::-;29658:1;29804:7;;:19;;29796:63;;;;-1:-1:-1;;;29796:63:0;;23887:2:1;29796:63:0;;;23869:21:1;23926:2;23906:18;;;23899:30;23965:33;23945:18;;;23938:61;24016:18;;29796:63:0;23685:355:1;29796:63:0;29658:1;29870:7;:18;49183:23:::1;49226:20;49079:16:::0;;;49001:103;49226:20:::1;49210:12;49219:3;49210:6:::0;:12:::1;:::i;:::-;49209:37;;;;:::i;:::-;49183:63;;49257:28;49323:14;48107:10:::0;;;48035:90;49323:14:::1;48205:10:::0;;49306:31:::1;;;;:::i;:::-;49289:12;49298:3;49289:6:::0;:12:::1;:::i;:::-;49288:50;;;;:::i;:::-;49257:81:::0;-1:-1:-1;49349:20:0::1;49257:81:::0;49372:24:::1;49381:15:::0;49372:6;:24:::1;:::i;:::-;:47;;;;:::i;:::-;49349:70;;49430:33;49447:15;49430:16;:33::i;:::-;49512:42;49603;49657:55;49512:42:::0;49603;49699:12;49657:18:::1;:55::i;:::-;-1:-1:-1::0;;29614:1:0;29911:7;:22;-1:-1:-1;;;;49112:610:0:o;23886:352::-;24043:28;24053:4;24059:2;24063:7;24043:9;:28::i;:::-;24104:48;24127:4;24133:2;24137:7;24146:5;24104:22;:48::i;:::-;24082:148;;;;-1:-1:-1;;;24082:148:0;;;;;;;:::i;44980:95::-;45031:13;45060:7;45053:14;;;;;:::i;146:532::-;202:13;232:10;228:53;;-1:-1:-1;;259:10:0;;;;;;;;;;;;-1:-1:-1;;;259:10:0;;;;;146:532::o;228:53::-;306:5;291:12;347:78;354:9;;347:78;;380:8;;;;:::i;:::-;;-1:-1:-1;403:10:0;;-1:-1:-1;411:2:0;403:10;;:::i;:::-;;;347:78;;;435:19;467:6;457:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;457:17:0;;435:39;;485:154;492:10;;485:154;;519:11;529:1;519:11;;:::i;:::-;;-1:-1:-1;588:10:0;596:2;588:5;:10;:::i;:::-;575:24;;:2;:24;:::i;:::-;562:39;;545:6;552;545:14;;;;;;;;:::i;:::-;;;;:56;-1:-1:-1;;;;;545:56:0;;;;;;;;-1:-1:-1;616:11:0;625:2;616:11;;:::i;:::-;;;485:154;;4782:183;4893:4;2970:17;;;:12;;;:17;;;;;;:22;;4922:35;2843:157;9831:160;9919:4;9948:35;9956:3;9976:5;9948:7;:35::i;9692:131::-;9759:4;9783:32;9788:3;9808:5;9783:4;:32::i;4382:219::-;4505:4;4529:64;4534:3;4554;-1:-1:-1;;;;;4568:23:0;;4529:4;:64::i;7553:273::-;7694:18;;7647:7;;7694:26;-1:-1:-1;7672:110:0;;;;-1:-1:-1;;;7672:110:0;;11633:2:1;7672:110:0;;;11615:21:1;11672:2;11652:18;;;11645:30;11711:34;11691:18;;;11684:62;-1:-1:-1;;;11762:18:1;;;11755:32;11804:19;;7672:110:0;11431:398:1;7672:110:0;7800:3;:11;;7812:5;7800:18;;;;;;;;:::i;:::-;;;;;;;;;7793:25;;7553:273;;;;:::o;31595:98::-;31653:7;31680:5;31684:1;31680;:5;:::i;3126:348::-;3276:19;;3220:7;;;;3276:27;-1:-1:-1;3254:111:0;;;;-1:-1:-1;;;3254:111:0;;18863:2:1;3254:111:0;;;18845:21:1;18902:2;18882:18;;;18875:30;18941:34;18921:18;;;18914:62;-1:-1:-1;;;18992:18:1;;;18985:32;19034:19;;3254:111:0;18661:398:1;3254:111:0;3378:22;3403:3;:12;;3416:5;3403:19;;;;;;;;:::i;:::-;;;;;;;;;;;3378:44;;3441:5;:10;;;3453:5;:12;;;3433:33;;;;;3126:348;;;;;:::o;4023:290::-;4151:7;4190:17;;;:12;;;:17;;;;;;4241:12;4226:13;4218:36;;;;-1:-1:-1;;;4218:36:0;;;;;;;;:::i;:::-;-1:-1:-1;4272:3:0;4285:12;4296:1;4285:8;:12;:::i;:::-;4272:26;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;;4265:40;;;4023:290;;;;;:::o;24966:321::-;25096:18;25102:2;25106:7;25096:5;:18::i;:::-;25147:54;25178:1;25182:2;25186:7;25195:5;25147:22;:54::i;:::-;25125:154;;;;-1:-1:-1;;;25125:154:0;;;;;;;:::i;35009:333::-;35090:23;35116:69;35144:4;35116:69;;;;;;;;;;;;;;;;;35124:5;-1:-1:-1;;;;;35116:27:0;;;:69;;;;;:::i;:::-;35200:17;;35090:95;;-1:-1:-1;35200:21:0;35196:139;;35257:10;35246:30;;;;;;;;;;;;:::i;:::-;35238:85;;;;-1:-1:-1;;;35238:85:0;;23119:2:1;35238:85:0;;;23101:21:1;23158:2;23138:18;;;23131:30;23197:34;23177:18;;;23170:62;-1:-1:-1;;;23248:18:1;;;23241:40;23298:19;;35238:85:0;22917:406:1;49730:182:0;49831:6;49811:17;;:26;;;;:::i;:::-;49791:17;:46;49890:13;:11;:13::i;:::-;49881:22;;:6;:22;:::i;:::-;49864:13;;:40;;;;:::i;:::-;49848:13;:56;-1:-1:-1;49730:182:0:o;10739:620::-;10897:6;10872:21;:31;;10850:110;;;;-1:-1:-1;;;10850:110:0;;15460:2:1;10850:110:0;;;15442:21:1;15499:2;15479:18;;;15472:30;15538:31;15518:18;;;15511:59;15587:18;;10850:110:0;15258:353:1;10850:110:0;10972:12;-1:-1:-1;;;;;10990:14:0;;11026:3;11012:11;:6;11021:2;11012:11;:::i;:::-;:17;;;;:::i;:::-;10990:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10971:63;;;11067:7;11045:115;;;;-1:-1:-1;;;11045:115:0;;;;;;;:::i;:::-;11172:7;-1:-1:-1;;;;;11185:15:0;;11222:3;11208:11;:6;11217:2;11208:11;:::i;:::-;:17;;;;:::i;:::-;11185:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11171:59;;;11263:2;11241:110;;;;-1:-1:-1;;;11241:110:0;;;;;;;:::i;:::-;10839:520;;10739:620;;;:::o;27168:984::-;27323:4;-1:-1:-1;;;;;27344:13:0;;10667:20;10715:8;27340:805;;27397:175;;-1:-1:-1;;;27397:175:0;;-1:-1:-1;;;;;27397:36:0;;;;;:175;;18201:10;;27491:4;;27518:7;;27548:5;;27397:175;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27397:175:0;;;;;;;;-1:-1:-1;;27397:175:0;;;;;;;;;;;;:::i;:::-;;;27376:714;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;27759:13:0;;27755:320;;27802:108;;-1:-1:-1;;;27802:108:0;;;;;;;:::i;27755:320::-;28025:6;28019:13;28010:6;28006:2;28002:15;27995:38;27376:714;-1:-1:-1;;;;;;27636:55:0;-1:-1:-1;;;27636:55:0;;-1:-1:-1;27629:62:0;;27340:805;-1:-1:-1;28129:4:0;27168:984;;;;;;:::o;6661:598::-;6727:4;6765:19;;;:12;;;:19;;;;;;6801:15;;6797:455;;6833:21;6857:14;6870:1;6857:10;:14;:::i;:::-;6906:18;;6833:38;;-1:-1:-1;6886:17:0;;6906:22;;6927:1;;6906:22;:::i;:::-;6886:42;;6943:17;6963:3;:11;;6975:9;6963:22;;;;;;;;:::i;:::-;;;;;;;;;6943:42;;7029:9;7000:3;:11;;7012:13;7000:26;;;;;;;;:::i;:::-;;;;;;;;;;:38;7079:17;:13;7095:1;7079:17;:::i;:::-;7053:23;;;;:12;;;:23;;;;;:43;7111:17;;7053:3;;7111:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;7150:3;:12;;:19;7163:5;7150:19;;;;;;;;;;;7143:26;;;7191:4;7184:11;;;;;;;;6797:455;7235:5;7228:12;;;;;6362:291;6425:4;2970:17;;;:12;;;:17;;;;;;6442:204;;-1:-1:-1;6485:23:0;;;;;;;;:11;:23;;;;;;;;;;;;;6545:18;;6523:19;;;:12;;;:19;;;;;;:40;;;;6578:11;;6442:204;-1:-1:-1;6629:5:0;6622:12;;1762:463;1872:4;1908:17;;;:12;;;:17;;;;;;1940:13;1936:282;;-1:-1:-1;;1988:36:0;;;;;;;;;;;;;;;;;;1970:55;;;;;;;;:12;:55;;;;;;;;;;;;;;;;;;;;;;;;2060:19;;2040:17;;;:12;;;:17;;;;;;;:39;2094:11;;1936:282;2174:5;2138:3;2151:12;2162:1;2151:8;:12;:::i;:::-;2138:26;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;:41;;;;2201:5;2194:12;;;;;25295:396;-1:-1:-1;;;;;25375:16:0;;25367:61;;;;-1:-1:-1;;;25367:61:0;;19625:2:1;25367:61:0;;;19607:21:1;;;19644:18;;;19637:30;19703:34;19683:18;;;19676:62;19755:18;;25367:61:0;19423:356:1;25367:61:0;25448:16;25456:7;25448;:16::i;:::-;25447:17;25439:58;;;;-1:-1:-1;;;25439:58:0;;13573:2:1;25439:58:0;;;13555:21:1;13612:2;13592:18;;;13585:30;13651;13631:18;;;13624:58;13699:18;;25439:58:0;13371:352:1;25439:58:0;-1:-1:-1;;;;;25564:17:0;;;;;;:13;:17;;;;;:30;;25586:7;25564:21;:30::i;:::-;-1:-1:-1;25605:29:0;:12;25622:7;25631:2;25605:16;:29::i;:::-;-1:-1:-1;25650:33:0;;25675:7;;-1:-1:-1;;;;;25650:33:0;;;25667:1;;25650:33;;25667:1;;25650:33;25295:396;;:::o;11970:229::-;12107:12;12139:52;12161:6;12169:4;12175:1;12178:12;12107;10667:20;;12895:60;;;;-1:-1:-1;;;12895:60:0;;21990:2:1;12895:60:0;;;21972:21:1;22029:2;22009:18;;;22002:30;22068:31;22048:18;;;22041:59;22117:18;;12895:60:0;21788:353:1;12895:60:0;12967:12;12981:23;13008:6;-1:-1:-1;;;;;13008:11:0;13027:5;13048:4;13008:55;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12966:97;;;;13081:52;13099:7;13108:10;13120:12;13081:17;:52::i;:::-;13074:59;12571:570;-1:-1:-1;;;;;;;12571:570:0:o;14582:550::-;14732:12;14761:7;14757:368;;;-1:-1:-1;14792:10:0;14785:17;;14757:368;14839:17;;:21;14835:279;;14942:10;14936:17;15003:15;14990:10;14986:2;14982:19;14975:44;14835:279;15085:12;15078:20;;-1:-1:-1;;;15078:20:0;;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:406:1;78:5;112:18;104:6;101:30;98:56;;;134:18;;:::i;:::-;172:57;217:2;196:15;;-1:-1:-1;;192:29:1;223:4;188:40;172:57;:::i;:::-;163:66;;252:6;245:5;238:21;292:3;283:6;278:3;274:16;271:25;268:45;;;309:1;306;299:12;268:45;358:6;353:3;346:4;339:5;335:16;322:43;412:1;405:4;396:6;389:5;385:18;381:29;374:40;14:406;;;;;:::o;425:173::-;493:20;;-1:-1:-1;;;;;542:31:1;;532:42;;522:70;;588:1;585;578:12;522:70;425:173;;;:::o;603:673::-;657:5;710:3;703:4;695:6;691:17;687:27;677:55;;728:1;725;718:12;677:55;764:6;751:20;790:4;814:60;830:43;870:2;830:43;:::i;:::-;814:60;:::i;:::-;896:3;920:2;915:3;908:15;948:2;943:3;939:12;932:19;;983:2;975:6;971:15;1035:3;1030:2;1024;1021:1;1017:10;1009:6;1005:23;1001:32;998:41;995:61;;;1052:1;1049;1042:12;995:61;1074:1;1084:163;1098:2;1095:1;1092:9;1084:163;;;1155:17;;1143:30;;1193:12;;;;1225;;;;1116:1;1109:9;1084:163;;;-1:-1:-1;1265:5:1;;603:673;-1:-1:-1;;;;;;;603:673:1:o;1281:186::-;1340:6;1393:2;1381:9;1372:7;1368:23;1364:32;1361:52;;;1409:1;1406;1399:12;1361:52;1432:29;1451:9;1432:29;:::i;1472:260::-;1540:6;1548;1601:2;1589:9;1580:7;1576:23;1572:32;1569:52;;;1617:1;1614;1607:12;1569:52;1640:29;1659:9;1640:29;:::i;:::-;1630:39;;1688:38;1722:2;1711:9;1707:18;1688:38;:::i;:::-;1678:48;;1472:260;;;;;:::o;1737:328::-;1814:6;1822;1830;1883:2;1871:9;1862:7;1858:23;1854:32;1851:52;;;1899:1;1896;1889:12;1851:52;1922:29;1941:9;1922:29;:::i;:::-;1912:39;;1970:38;2004:2;1993:9;1989:18;1970:38;:::i;:::-;1960:48;;2055:2;2044:9;2040:18;2027:32;2017:42;;1737:328;;;;;:::o;2070:666::-;2165:6;2173;2181;2189;2242:3;2230:9;2221:7;2217:23;2213:33;2210:53;;;2259:1;2256;2249:12;2210:53;2282:29;2301:9;2282:29;:::i;:::-;2272:39;;2330:38;2364:2;2353:9;2349:18;2330:38;:::i;:::-;2320:48;;2415:2;2404:9;2400:18;2387:32;2377:42;;2470:2;2459:9;2455:18;2442:32;2497:18;2489:6;2486:30;2483:50;;;2529:1;2526;2519:12;2483:50;2552:22;;2605:4;2597:13;;2593:27;-1:-1:-1;2583:55:1;;2634:1;2631;2624:12;2583:55;2657:73;2722:7;2717:2;2704:16;2699:2;2695;2691:11;2657:73;:::i;:::-;2647:83;;;2070:666;;;;;;;:::o;2741:315::-;2806:6;2814;2867:2;2855:9;2846:7;2842:23;2838:32;2835:52;;;2883:1;2880;2873:12;2835:52;2906:29;2925:9;2906:29;:::i;:::-;2896:39;;2985:2;2974:9;2970:18;2957:32;2998:28;3020:5;2998:28;:::i;:::-;3045:5;3035:15;;;2741:315;;;;;:::o;3061:254::-;3129:6;3137;3190:2;3178:9;3169:7;3165:23;3161:32;3158:52;;;3206:1;3203;3196:12;3158:52;3229:29;3248:9;3229:29;:::i;:::-;3219:39;3305:2;3290:18;;;;3277:32;;-1:-1:-1;;;3061:254:1:o;3320:1225::-;3447:6;3455;3463;3516:2;3504:9;3495:7;3491:23;3487:32;3484:52;;;3532:1;3529;3522:12;3484:52;3572:9;3559:23;3601:18;3642:2;3634:6;3631:14;3628:34;;;3658:1;3655;3648:12;3628:34;3696:6;3685:9;3681:22;3671:32;;3741:7;3734:4;3730:2;3726:13;3722:27;3712:55;;3763:1;3760;3753:12;3712:55;3799:2;3786:16;3821:4;3845:60;3861:43;3901:2;3861:43;:::i;3845:60::-;3927:3;3951:2;3946:3;3939:15;3979:2;3974:3;3970:12;3963:19;;4010:2;4006;4002:11;4058:7;4053:2;4047;4044:1;4040:10;4036:2;4032:19;4028:28;4025:41;4022:61;;;4079:1;4076;4069:12;4022:61;4101:1;4092:10;;4111:169;4125:2;4122:1;4119:9;4111:169;;;4182:23;4201:3;4182:23;:::i;:::-;4170:36;;4143:1;4136:9;;;;;4226:12;;;;4258;;4111:169;;;-1:-1:-1;4299:5:1;-1:-1:-1;;4342:18:1;;4329:32;;-1:-1:-1;;4373:16:1;;;4370:36;;;4402:1;4399;4392:12;4370:36;;4425:63;4480:7;4469:8;4458:9;4454:24;4425:63;:::i;:::-;4415:73;;;4535:2;4524:9;4520:18;4507:32;4497:42;;3320:1225;;;;;:::o;4550:245::-;4617:6;4670:2;4658:9;4649:7;4645:23;4641:32;4638:52;;;4686:1;4683;4676:12;4638:52;4718:9;4712:16;4737:28;4759:5;4737:28;:::i;4800:245::-;4858:6;4911:2;4899:9;4890:7;4886:23;4882:32;4879:52;;;4927:1;4924;4917:12;4879:52;4966:9;4953:23;4985:30;5009:5;4985:30;:::i;5050:249::-;5119:6;5172:2;5160:9;5151:7;5147:23;5143:32;5140:52;;;5188:1;5185;5178:12;5140:52;5220:9;5214:16;5239:30;5263:5;5239:30;:::i;5304:450::-;5373:6;5426:2;5414:9;5405:7;5401:23;5397:32;5394:52;;;5442:1;5439;5432:12;5394:52;5482:9;5469:23;5515:18;5507:6;5504:30;5501:50;;;5547:1;5544;5537:12;5501:50;5570:22;;5623:4;5615:13;;5611:27;-1:-1:-1;5601:55:1;;5652:1;5649;5642:12;5601:55;5675:73;5740:7;5735:2;5722:16;5717:2;5713;5709:11;5675:73;:::i;5759:180::-;5818:6;5871:2;5859:9;5850:7;5846:23;5842:32;5839:52;;;5887:1;5884;5877:12;5839:52;-1:-1:-1;5910:23:1;;5759:180;-1:-1:-1;5759:180:1:o;5944:248::-;6012:6;6020;6073:2;6061:9;6052:7;6048:23;6044:32;6041:52;;;6089:1;6086;6079:12;6041:52;-1:-1:-1;;6112:23:1;;;6182:2;6167:18;;;6154:32;;-1:-1:-1;5944:248:1:o;6197:435::-;6250:3;6288:5;6282:12;6315:6;6310:3;6303:19;6341:4;6370:2;6365:3;6361:12;6354:19;;6407:2;6400:5;6396:14;6428:1;6438:169;6452:6;6449:1;6446:13;6438:169;;;6513:13;;6501:26;;6547:12;;;;6582:15;;;;6474:1;6467:9;6438:169;;;-1:-1:-1;6623:3:1;;6197:435;-1:-1:-1;;;;;6197:435:1:o;6637:257::-;6678:3;6716:5;6710:12;6743:6;6738:3;6731:19;6759:63;6815:6;6808:4;6803:3;6799:14;6792:4;6785:5;6781:16;6759:63;:::i;:::-;6876:2;6855:15;-1:-1:-1;;6851:29:1;6842:39;;;;6883:4;6838:50;;6637:257;-1:-1:-1;;6637:257:1:o;6899:274::-;7028:3;7066:6;7060:13;7082:53;7128:6;7123:3;7116:4;7108:6;7104:17;7082:53;:::i;:::-;7151:16;;;;;6899:274;-1:-1:-1;;6899:274:1:o;7178:1527::-;7402:3;7440:6;7434:13;7466:4;7479:51;7523:6;7518:3;7513:2;7505:6;7501:15;7479:51;:::i;:::-;7593:13;;7552:16;;;;7615:55;7593:13;7552:16;7637:15;;;7615:55;:::i;:::-;7759:13;;7692:20;;;7732:1;;7819;7841:18;;;;7894;;;;7921:93;;7999:4;7989:8;7985:19;7973:31;;7921:93;8062:2;8052:8;8049:16;8029:18;8026:40;8023:167;;;-1:-1:-1;;;8089:33:1;;8145:4;8142:1;8135:15;8175:4;8096:3;8163:17;8023:167;8206:18;8233:110;;;;8357:1;8352:328;;;;8199:481;;8233:110;-1:-1:-1;;8268:24:1;;8254:39;;8313:20;;;;-1:-1:-1;8233:110:1;;8352:328;25856:1;25849:14;;;25893:4;25880:18;;8447:1;8461:169;8475:8;8472:1;8469:15;8461:169;;;8557:14;;8542:13;;;8535:37;8600:16;;;;8492:10;;8461:169;;;8465:3;;8661:8;8654:5;8650:20;8643:27;;8199:481;-1:-1:-1;8696:3:1;;7178:1527;-1:-1:-1;;;;;;;;;;;7178:1527:1:o;9128:488::-;-1:-1:-1;;;;;9397:15:1;;;9379:34;;9449:15;;9444:2;9429:18;;9422:43;9496:2;9481:18;;9474:34;;;9544:3;9539:2;9524:18;;9517:31;;;9322:4;;9565:45;;9590:19;;9582:6;9565:45;:::i;:::-;9557:53;9128:488;-1:-1:-1;;;;;;9128:488:1:o;9900:844::-;10092:4;10121:2;10161;10150:9;10146:18;10191:2;10180:9;10173:21;10214:6;10249;10243:13;10280:6;10272;10265:22;10318:2;10307:9;10303:18;10296:25;;10380:2;10370:6;10367:1;10363:14;10352:9;10348:30;10344:39;10330:53;;10418:2;10410:6;10406:15;10439:1;10449:266;10463:6;10460:1;10457:13;10449:266;;;10556:2;10552:7;10540:9;10532:6;10528:22;10524:36;10519:3;10512:49;10584:51;10628:6;10619;10613:13;10584:51;:::i;:::-;10574:61;-1:-1:-1;10693:12:1;;;;10658:15;;;;10485:1;10478:9;10449:266;;;-1:-1:-1;10732:6:1;;9900:844;-1:-1:-1;;;;;;;9900:844:1:o;10749:261::-;10928:2;10917:9;10910:21;10891:4;10948:56;11000:2;10989:9;10985:18;10977:6;10948:56;:::i;11207:219::-;11356:2;11345:9;11338:21;11319:4;11376:44;11416:2;11405:9;11401:18;11393:6;11376:44;:::i;11834:414::-;12036:2;12018:21;;;12075:2;12055:18;;;12048:30;12114:34;12109:2;12094:18;;12087:62;-1:-1:-1;;;12180:2:1;12165:18;;12158:48;12238:3;12223:19;;11834:414::o;14831:422::-;15033:2;15015:21;;;15072:2;15052:18;;;15045:30;15111:34;15106:2;15091:18;;15084:62;15182:28;15177:2;15162:18;;15155:56;15243:3;15228:19;;14831:422::o;20197:356::-;20399:2;20381:21;;;20418:18;;;20411:30;20477:34;20472:2;20457:18;;20450:62;20544:2;20529:18;;20197:356::o;21370:413::-;21572:2;21554:21;;;21611:2;21591:18;;;21584:30;21650:34;21645:2;21630:18;;21623:62;-1:-1:-1;;;21716:2:1;21701:18;;21694:47;21773:3;21758:19;;21370:413::o;22504:408::-;22706:2;22688:21;;;22745:2;22725:18;;;22718:30;22784:34;22779:2;22764:18;;22757:62;-1:-1:-1;;;22850:2:1;22835:18;;22828:42;22902:3;22887:19;;22504:408::o;24825:485::-;25040:25;;;25096:2;25081:18;;25074:34;;;25028:2;25013:18;;25138:1;25127:13;;25117:144;;25183:10;25178:3;25174:20;25171:1;25164:31;25218:4;25215:1;25208:15;25246:4;25243:1;25236:15;25117:144;25297:6;25292:2;25281:9;25277:18;25270:34;24825:485;;;;;;:::o;25315:275::-;25386:2;25380:9;25451:2;25432:13;;-1:-1:-1;;25428:27:1;25416:40;;25486:18;25471:34;;25507:22;;;25468:62;25465:88;;;25533:18;;:::i;:::-;25569:2;25562:22;25315:275;;-1:-1:-1;25315:275:1:o;25595:183::-;25655:4;25688:18;25680:6;25677:30;25674:56;;;25710:18;;:::i;:::-;-1:-1:-1;25755:1:1;25751:14;25767:4;25747:25;;25595:183::o;25909:128::-;25949:3;25980:1;25976:6;25973:1;25970:13;25967:39;;;25986:18;;:::i;:::-;-1:-1:-1;26022:9:1;;25909:128::o;26042:120::-;26082:1;26108;26098:35;;26113:18;;:::i;:::-;-1:-1:-1;26147:9:1;;26042:120::o;26167:168::-;26207:7;26273:1;26269;26265:6;26261:14;26258:1;26255:21;26250:1;26243:9;26236:17;26232:45;26229:71;;;26280:18;;:::i;:::-;-1:-1:-1;26320:9:1;;26167:168::o;26340:125::-;26380:4;26408:1;26405;26402:8;26399:34;;;26413:18;;:::i;:::-;-1:-1:-1;26450:9:1;;26340:125::o;26470:258::-;26542:1;26552:113;26566:6;26563:1;26560:13;26552:113;;;26642:11;;;26636:18;26623:11;;;26616:39;26588:2;26581:10;26552:113;;;26683:6;26680:1;26677:13;26674:48;;;-1:-1:-1;;26718:1:1;26700:16;;26693:27;26470:258::o;26733:136::-;26772:3;26800:5;26790:39;;26809:18;;:::i;:::-;-1:-1:-1;;;26845:18:1;;26733:136::o;26874:380::-;26953:1;26949:12;;;;26996;;;27017:61;;27071:4;27063:6;27059:17;27049:27;;27017:61;27124:2;27116:6;27113:14;27093:18;27090:38;27087:161;;;27170:10;27165:3;27161:20;27158:1;27151:31;27205:4;27202:1;27195:15;27233:4;27230:1;27223:15;27259:135;27298:3;-1:-1:-1;;27319:17:1;;27316:43;;;27339:18;;:::i;:::-;-1:-1:-1;27386:1:1;27375:13;;27259:135::o;27399:112::-;27431:1;27457;27447:35;;27462:18;;:::i;:::-;-1:-1:-1;27496:9:1;;27399:112::o;27516:127::-;27577:10;27572:3;27568:20;27565:1;27558:31;27608:4;27605:1;27598:15;27632:4;27629:1;27622:15;27648:127;27709:10;27704:3;27700:20;27697:1;27690:31;27740:4;27737:1;27730:15;27764:4;27761:1;27754:15;27780:127;27841:10;27836:3;27832:20;27829:1;27822:31;27872:4;27869:1;27862:15;27896:4;27893:1;27886:15;27912:127;27973:10;27968:3;27964:20;27961:1;27954:31;28004:4;28001:1;27994:15;28028:4;28025:1;28018:15;28044:127;28105:10;28100:3;28096:20;28093:1;28086:31;28136:4;28133:1;28126:15;28160:4;28157:1;28150:15;28176:127;28237:10;28232:3;28228:20;28225:1;28218:31;28268:4;28265:1;28258:15;28292:4;28289:1;28282:15;28308:118;28394:5;28387:13;28380:21;28373:5;28370:32;28360:60;;28416:1;28413;28406:12;28431:131;-1:-1:-1;;;;;;28505:32:1;;28495:43;;28485:71;;28552:1;28549;28542:12

Swarm Source

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