{
  "contractName": "strings",
  "abi": [],
  "metadata": "{\"compiler\":{\"version\":\"0.7.4+commit.3f05b770\"},\"language\":\"Solidity\",\"output\":{\"abi\":[],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"/home/dh206382/dev/eth-vue/contracts/lib/arachnid/solidity-stringutils/strings.sol\":\"strings\"},\"evmVersion\":\"byzantium\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/home/dh206382/dev/eth-vue/contracts/lib/arachnid/solidity-stringutils/strings.sol\":{\"keccak256\":\"0x9aab3a5454f9f26f5e9e97956c70a8b2a4be846ce8a5e460bfafe2ccbc929b6e\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://10df44748106d09a6ecab7c184357d8c31b947decce5c789acdaf7baaa59aa41\",\"dweb:/ipfs/QmPd8xbrbp5PiXiWR2MJJXWKgbyTgxeishoRdhyvXaUjSJ\"]}},\"version\":1}",
  "bytecode": "0x60566023600b82828239805160001a607314601657fe5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c885c7b21e17d335a86a1b9ec62b84aa23adbf213607fe240d5e0edaec2f35e764736f6c63430007040033",
  "deployedBytecode": "0x73000000000000000000000000000000000000000030146080604052600080fdfea2646970667358221220c885c7b21e17d335a86a1b9ec62b84aa23adbf213607fe240d5e0edaec2f35e764736f6c63430007040033",
  "immutableReferences": {},
  "generatedSources": [],
  "deployedGeneratedSources": [],
  "sourceMap": "2046:23406:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "2046:23406:4:-:0;;;;;;;;",
  "source": "/*\n * @title String & slice utility library for Solidity contracts.\n * @author Nick Johnson <arachnid@notdot.net>\n *\n * @dev Functionality in this library is largely implemented using an\n *      abstraction called a 'slice'. A slice represents a part of a string -\n *      anything from the entire string to a single character, or even no\n *      characters at all (a 0-length slice). Since a slice only has to specify\n *      an offset and a length, copying and manipulating slices is a lot less\n *      expensive than copying and manipulating the strings they reference.\n *\n *      To further reduce gas costs, most functions on slice that need to return\n *      a slice modify the original one instead of allocating a new one; for\n *      instance, `s.split(\".\")` will return the text up to the first '.',\n *      modifying s to only contain the remainder of the string after the '.'.\n *      In situations where you do not want to modify the original slice, you\n *      can make a copy first with `.copy()`, for example:\n *      `s.copy().split(\".\")`. Try and avoid using this idiom in loops; since\n *      Solidity has no memory management, it will result in allocating many\n *      short-lived slices that are later discarded.\n *\n *      Functions that return two slices come in two versions: a non-allocating\n *      version that takes the second slice as an argument, modifying it in\n *      place, and an allocating version that allocates and returns the second\n *      slice; see `nextRune` for example.\n *\n *      Functions that have to copy string data will return strings rather than\n *      slices; these can be cast back to slices for further processing if\n *      required.\n *\n *      For convenience, some functions are provided with non-modifying\n *      variants that create a new slice and return both; for instance,\n *      `s.splitNew('.')` leaves s unmodified, and returns two values\n *      corresponding to the left and right parts of the string.\n */\n\n// SPDX-License-Identifier: GPL-3.0\npragma solidity >=0.7.0 <0.8.0;\n\nlibrary strings {\n    struct slice {\n        uint _len;\n        uint _ptr;\n    }\n\n    function memcpy(uint dest, uint src, uint wordlen) private pure {\n        // Copy word-length chunks while possible\n        for(; wordlen >= 32; wordlen -= 32) {\n            assembly {\n                mstore(dest, mload(src))\n            }\n            dest += 32;\n            src += 32;\n        }\n\n        // Copy remaining bytes\n        uint mask = 256 ** (32 - wordlen) - 1;\n        assembly {\n            let srcpart := and(mload(src), not(mask))\n            let destpart := and(mload(dest), mask)\n            mstore(dest, or(destpart, srcpart))\n        }\n    }\n\n    /*\n     * @dev Returns a slice containing the entire string.\n     * @param self The string to make a slice from.\n     * @return A newly allocated slice containing the entire string.\n     */\n    function toSlice(string memory self) internal pure returns (slice memory) {\n        uint ptr;\n        assembly {\n            ptr := add(self, 0x20)\n        }\n        return slice(bytes(self).length, ptr);\n    }\n\n    /*\n     * @dev Returns the length of a null-terminated bytes32 string.\n     * @param self The value to find the length of.\n     * @return The length of the string, from 0 to 32.\n     */\n    function len(bytes32 self) internal pure returns (uint) {\n        uint ret;\n        if (self == 0)\n            return 0;\n        if (uint(self) & 0xffffffffffffffffffffffffffffffff == 0) {\n            ret += 16;\n            self = bytes32(uint(self) / 0x100000000000000000000000000000000);\n        }\n        if (uint(self) & 0xffffffffffffffff == 0) {\n            ret += 8;\n            self = bytes32(uint(self) / 0x10000000000000000);\n        }\n        if (uint(self) & 0xffffffff == 0) {\n            ret += 4;\n            self = bytes32(uint(self) / 0x100000000);\n        }\n        if (uint(self) & 0xffff == 0) {\n            ret += 2;\n            self = bytes32(uint(self) / 0x10000);\n        }\n        if (uint(self) & 0xff == 0) {\n            ret += 1;\n        }\n        return 32 - ret;\n    }\n\n    /*\n     * @dev Returns a slice containing the entire bytes32, interpreted as a\n     *      null-terminated utf-8 string.\n     * @param self The bytes32 value to convert to a slice.\n     * @return A new slice containing the value of the input argument up to the\n     *         first null.\n     */\n    function toSliceB32(bytes32 self) internal pure returns (slice memory ret) {\n        // Allocate space for `self` in memory, copy it there, and point ret at it\n        assembly {\n            let ptr := mload(0x40)\n            mstore(0x40, add(ptr, 0x20))\n            mstore(ptr, self)\n            mstore(add(ret, 0x20), ptr)\n        }\n        ret._len = len(self);\n    }\n\n    /*\n     * @dev Returns a new slice containing the same data as the current slice.\n     * @param self The slice to copy.\n     * @return A new slice containing the same data as `self`.\n     */\n    function copy(slice memory self) internal pure returns (slice memory) {\n        return slice(self._len, self._ptr);\n    }\n\n    /*\n     * @dev Copies a slice to a new string.\n     * @param self The slice to copy.\n     * @return A newly allocated string containing the slice's text.\n     */\n    function toString(slice memory self) internal pure returns (string memory) {\n        string memory ret = new string(self._len);\n        uint retptr;\n        assembly { retptr := add(ret, 32) }\n\n        memcpy(retptr, self._ptr, self._len);\n        return ret;\n    }\n\n    /*\n     * @dev Returns the length in runes of the slice. Note that this operation\n     *      takes time proportional to the length of the slice; avoid using it\n     *      in loops, and call `slice.empty()` if you only need to know whether\n     *      the slice is empty or not.\n     * @param self The slice to operate on.\n     * @return The length of the slice in runes.\n     */\n    function len(slice memory self) internal pure returns (uint l) {\n        // Starting at ptr-31 means the LSB will be the byte we care about\n        uint ptr = self._ptr - 31;\n        uint end = ptr + self._len;\n        for (l = 0; ptr < end; l++) {\n            uint8 b;\n            assembly { b := and(mload(ptr), 0xFF) }\n            if (b < 0x80) {\n                ptr += 1;\n            } else if(b < 0xE0) {\n                ptr += 2;\n            } else if(b < 0xF0) {\n                ptr += 3;\n            } else if(b < 0xF8) {\n                ptr += 4;\n            } else if(b < 0xFC) {\n                ptr += 5;\n            } else {\n                ptr += 6;\n            }\n        }\n    }\n\n    /*\n     * @dev Returns true if the slice is empty (has a length of 0).\n     * @param self The slice to operate on.\n     * @return True if the slice is empty, False otherwise.\n     */\n    function empty(slice memory self) internal pure returns (bool) {\n        return self._len == 0;\n    }\n\n    /*\n     * @dev Returns a positive number if `other` comes lexicographically after\n     *      `self`, a negative number if it comes before, or zero if the\n     *      contents of the two slices are equal. Comparison is done per-rune,\n     *      on unicode codepoints.\n     * @param self The first slice to compare.\n     * @param other The second slice to compare.\n     * @return The result of the comparison.\n     */\n    function compare(slice memory self, slice memory other) internal pure returns (int) {\n        uint shortest = self._len;\n        if (other._len < self._len)\n            shortest = other._len;\n\n        uint selfptr = self._ptr;\n        uint otherptr = other._ptr;\n        for (uint idx = 0; idx < shortest; idx += 32) {\n            uint a;\n            uint b;\n            assembly {\n                a := mload(selfptr)\n                b := mload(otherptr)\n            }\n            if (a != b) {\n                // Mask out irrelevant bytes and check again\n                uint256 mask = uint256(-1); // 0xffff...\n                if(shortest < 32) {\n                  mask = ~(2 ** (8 * (32 - shortest + idx)) - 1);\n                }\n                uint256 diff = (a & mask) - (b & mask);\n                if (diff != 0)\n                    return int(diff);\n            }\n            selfptr += 32;\n            otherptr += 32;\n        }\n        return int(self._len) - int(other._len);\n    }\n\n    /*\n     * @dev Returns true if the two slices contain the same text.\n     * @param self The first slice to compare.\n     * @param self The second slice to compare.\n     * @return True if the slices are equal, false otherwise.\n     */\n    function equals(slice memory self, slice memory other) internal pure returns (bool) {\n        return compare(self, other) == 0;\n    }\n\n    /*\n     * @dev Extracts the first rune in the slice into `rune`, advancing the\n     *      slice to point to the next rune and returning `self`.\n     * @param self The slice to operate on.\n     * @param rune The slice that will contain the first rune.\n     * @return `rune`.\n     */\n    function nextRune(slice memory self, slice memory rune) internal pure returns (slice memory) {\n        rune._ptr = self._ptr;\n\n        if (self._len == 0) {\n            rune._len = 0;\n            return rune;\n        }\n\n        uint l;\n        uint b;\n        // Load the first byte of the rune into the LSBs of b\n        assembly { b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF) }\n        if (b < 0x80) {\n            l = 1;\n        } else if(b < 0xE0) {\n            l = 2;\n        } else if(b < 0xF0) {\n            l = 3;\n        } else {\n            l = 4;\n        }\n\n        // Check for truncated codepoints\n        if (l > self._len) {\n            rune._len = self._len;\n            self._ptr += self._len;\n            self._len = 0;\n            return rune;\n        }\n\n        self._ptr += l;\n        self._len -= l;\n        rune._len = l;\n        return rune;\n    }\n\n    /*\n     * @dev Returns the first rune in the slice, advancing the slice to point\n     *      to the next rune.\n     * @param self The slice to operate on.\n     * @return A slice containing only the first rune from `self`.\n     */\n    function nextRune(slice memory self) internal pure returns (slice memory ret) {\n        nextRune(self, ret);\n    }\n\n    /*\n     * @dev Returns the number of the first codepoint in the slice.\n     * @param self The slice to operate on.\n     * @return The number of the first codepoint in the slice.\n     */\n    function ord(slice memory self) internal pure returns (uint ret) {\n        if (self._len == 0) {\n            return 0;\n        }\n\n        uint word;\n        uint length;\n        uint divisor = 2 ** 248;\n\n        // Load the rune into the MSBs of b\n        assembly { word:= mload(mload(add(self, 32))) }\n        uint b = word / divisor;\n        if (b < 0x80) {\n            ret = b;\n            length = 1;\n        } else if(b < 0xE0) {\n            ret = b & 0x1F;\n            length = 2;\n        } else if(b < 0xF0) {\n            ret = b & 0x0F;\n            length = 3;\n        } else {\n            ret = b & 0x07;\n            length = 4;\n        }\n\n        // Check for truncated codepoints\n        if (length > self._len) {\n            return 0;\n        }\n\n        for (uint i = 1; i < length; i++) {\n            divisor = divisor / 256;\n            b = (word / divisor) & 0xFF;\n            if (b & 0xC0 != 0x80) {\n                // Invalid UTF-8 sequence\n                return 0;\n            }\n            ret = (ret * 64) | (b & 0x3F);\n        }\n\n        return ret;\n    }\n\n    /*\n     * @dev Returns the keccak-256 hash of the slice.\n     * @param self The slice to hash.\n     * @return The hash of the slice.\n     */\n    function keccak(slice memory self) internal pure returns (bytes32 ret) {\n        assembly {\n            ret := keccak256(mload(add(self, 32)), mload(self))\n        }\n    }\n\n    /*\n     * @dev Returns true if `self` starts with `needle`.\n     * @param self The slice to operate on.\n     * @param needle The slice to search for.\n     * @return True if the slice starts with the provided text, false otherwise.\n     */\n    function startsWith(slice memory self, slice memory needle) internal pure returns (bool) {\n        if (self._len < needle._len) {\n            return false;\n        }\n\n        if (self._ptr == needle._ptr) {\n            return true;\n        }\n\n        bool equal;\n        assembly {\n            let length := mload(needle)\n            let selfptr := mload(add(self, 0x20))\n            let needleptr := mload(add(needle, 0x20))\n            equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n        }\n        return equal;\n    }\n\n    /*\n     * @dev If `self` starts with `needle`, `needle` is removed from the\n     *      beginning of `self`. Otherwise, `self` is unmodified.\n     * @param self The slice to operate on.\n     * @param needle The slice to search for.\n     * @return `self`\n     */\n    function beyond(slice memory self, slice memory needle) internal pure returns (slice memory) {\n        if (self._len < needle._len) {\n            return self;\n        }\n\n        bool equal = true;\n        if (self._ptr != needle._ptr) {\n            assembly {\n                let length := mload(needle)\n                let selfptr := mload(add(self, 0x20))\n                let needleptr := mload(add(needle, 0x20))\n                equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n            }\n        }\n\n        if (equal) {\n            self._len -= needle._len;\n            self._ptr += needle._len;\n        }\n\n        return self;\n    }\n\n    /*\n     * @dev Returns true if the slice ends with `needle`.\n     * @param self The slice to operate on.\n     * @param needle The slice to search for.\n     * @return True if the slice starts with the provided text, false otherwise.\n     */\n    function endsWith(slice memory self, slice memory needle) internal pure returns (bool) {\n        if (self._len < needle._len) {\n            return false;\n        }\n\n        uint selfptr = self._ptr + self._len - needle._len;\n\n        if (selfptr == needle._ptr) {\n            return true;\n        }\n\n        bool equal;\n        assembly {\n            let length := mload(needle)\n            let needleptr := mload(add(needle, 0x20))\n            equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n        }\n\n        return equal;\n    }\n\n    /*\n     * @dev If `self` ends with `needle`, `needle` is removed from the\n     *      end of `self`. Otherwise, `self` is unmodified.\n     * @param self The slice to operate on.\n     * @param needle The slice to search for.\n     * @return `self`\n     */\n    function until(slice memory self, slice memory needle) internal pure returns (slice memory) {\n        if (self._len < needle._len) {\n            return self;\n        }\n\n        uint selfptr = self._ptr + self._len - needle._len;\n        bool equal = true;\n        if (selfptr != needle._ptr) {\n            assembly {\n                let length := mload(needle)\n                let needleptr := mload(add(needle, 0x20))\n                equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))\n            }\n        }\n\n        if (equal) {\n            self._len -= needle._len;\n        }\n\n        return self;\n    }\n\n    // Returns the memory address of the first byte of the first occurrence of\n    // `needle` in `self`, or the first byte after `self` if not found.\n    function findPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private pure returns (uint) {\n        uint ptr = selfptr;\n        uint idx;\n\n        if (needlelen <= selflen) {\n            if (needlelen <= 32) {\n                bytes32 mask = bytes32(~(2 ** (8 * (32 - needlelen)) - 1));\n\n                bytes32 needledata;\n                assembly { needledata := and(mload(needleptr), mask) }\n\n                uint end = selfptr + selflen - needlelen;\n                bytes32 ptrdata;\n                assembly { ptrdata := and(mload(ptr), mask) }\n\n                while (ptrdata != needledata) {\n                    if (ptr >= end)\n                        return selfptr + selflen;\n                    ptr++;\n                    assembly { ptrdata := and(mload(ptr), mask) }\n                }\n                return ptr;\n            } else {\n                // For long needles, use hashing\n                bytes32 hash;\n                assembly { hash := keccak256(needleptr, needlelen) }\n\n                for (idx = 0; idx <= selflen - needlelen; idx++) {\n                    bytes32 testHash;\n                    assembly { testHash := keccak256(ptr, needlelen) }\n                    if (hash == testHash)\n                        return ptr;\n                    ptr += 1;\n                }\n            }\n        }\n        return selfptr + selflen;\n    }\n\n    // Returns the memory address of the first byte after the last occurrence of\n    // `needle` in `self`, or the address of `self` if not found.\n    function rfindPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private pure returns (uint) {\n        uint ptr;\n\n        if (needlelen <= selflen) {\n            if (needlelen <= 32) {\n                bytes32 mask = bytes32(~(2 ** (8 * (32 - needlelen)) - 1));\n\n                bytes32 needledata;\n                assembly { needledata := and(mload(needleptr), mask) }\n\n                ptr = selfptr + selflen - needlelen;\n                bytes32 ptrdata;\n                assembly { ptrdata := and(mload(ptr), mask) }\n\n                while (ptrdata != needledata) {\n                    if (ptr <= selfptr)\n                        return selfptr;\n                    ptr--;\n                    assembly { ptrdata := and(mload(ptr), mask) }\n                }\n                return ptr + needlelen;\n            } else {\n                // For long needles, use hashing\n                bytes32 hash;\n                assembly { hash := keccak256(needleptr, needlelen) }\n                ptr = selfptr + (selflen - needlelen);\n                while (ptr >= selfptr) {\n                    bytes32 testHash;\n                    assembly { testHash := keccak256(ptr, needlelen) }\n                    if (hash == testHash)\n                        return ptr + needlelen;\n                    ptr -= 1;\n                }\n            }\n        }\n        return selfptr;\n    }\n\n    /*\n     * @dev Modifies `self` to contain everything from the first occurrence of\n     *      `needle` to the end of the slice. `self` is set to the empty slice\n     *      if `needle` is not found.\n     * @param self The slice to search and modify.\n     * @param needle The text to search for.\n     * @return `self`.\n     */\n    function find(slice memory self, slice memory needle) internal pure returns (slice memory) {\n        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr);\n        self._len -= ptr - self._ptr;\n        self._ptr = ptr;\n        return self;\n    }\n\n    /*\n     * @dev Modifies `self` to contain the part of the string from the start of\n     *      `self` to the end of the first occurrence of `needle`. If `needle`\n     *      is not found, `self` is set to the empty slice.\n     * @param self The slice to search and modify.\n     * @param needle The text to search for.\n     * @return `self`.\n     */\n    function rfind(slice memory self, slice memory needle) internal pure returns (slice memory) {\n        uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr);\n        self._len = ptr - self._ptr;\n        return self;\n    }\n\n    /*\n     * @dev Splits the slice, setting `self` to everything after the first\n     *      occurrence of `needle`, and `token` to everything before it. If\n     *      `needle` does not occur in `self`, `self` is set to the empty slice,\n     *      and `token` is set to the entirety of `self`.\n     * @param self The slice to split.\n     * @param needle The text to search for in `self`.\n     * @param token An output parameter to which the first token is written.\n     * @return `token`.\n     */\n    function split(slice memory self, slice memory needle, slice memory token) internal pure returns (slice memory) {\n        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr);\n        token._ptr = self._ptr;\n        token._len = ptr - self._ptr;\n        if (ptr == self._ptr + self._len) {\n            // Not found\n            self._len = 0;\n        } else {\n            self._len -= token._len + needle._len;\n            self._ptr = ptr + needle._len;\n        }\n        return token;\n    }\n\n    /*\n     * @dev Splits the slice, setting `self` to everything after the first\n     *      occurrence of `needle`, and returning everything before it. If\n     *      `needle` does not occur in `self`, `self` is set to the empty slice,\n     *      and the entirety of `self` is returned.\n     * @param self The slice to split.\n     * @param needle The text to search for in `self`.\n     * @return The part of `self` up to the first occurrence of `delim`.\n     */\n    function split(slice memory self, slice memory needle) internal pure returns (slice memory token) {\n        split(self, needle, token);\n    }\n\n    /*\n     * @dev Splits the slice, setting `self` to everything before the last\n     *      occurrence of `needle`, and `token` to everything after it. If\n     *      `needle` does not occur in `self`, `self` is set to the empty slice,\n     *      and `token` is set to the entirety of `self`.\n     * @param self The slice to split.\n     * @param needle The text to search for in `self`.\n     * @param token An output parameter to which the first token is written.\n     * @return `token`.\n     */\n    function rsplit(slice memory self, slice memory needle, slice memory token) internal pure returns (slice memory) {\n        uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr);\n        token._ptr = ptr;\n        token._len = self._len - (ptr - self._ptr);\n        if (ptr == self._ptr) {\n            // Not found\n            self._len = 0;\n        } else {\n            self._len -= token._len + needle._len;\n        }\n        return token;\n    }\n\n    /*\n     * @dev Splits the slice, setting `self` to everything before the last\n     *      occurrence of `needle`, and returning everything after it. If\n     *      `needle` does not occur in `self`, `self` is set to the empty slice,\n     *      and the entirety of `self` is returned.\n     * @param self The slice to split.\n     * @param needle The text to search for in `self`.\n     * @return The part of `self` after the last occurrence of `delim`.\n     */\n    function rsplit(slice memory self, slice memory needle) internal pure returns (slice memory token) {\n        rsplit(self, needle, token);\n    }\n\n    /*\n     * @dev Counts the number of nonoverlapping occurrences of `needle` in `self`.\n     * @param self The slice to search.\n     * @param needle The text to search for in `self`.\n     * @return The number of occurrences of `needle` found in `self`.\n     */\n    function count(slice memory self, slice memory needle) internal pure returns (uint cnt) {\n        uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr) + needle._len;\n        while (ptr <= self._ptr + self._len) {\n            cnt++;\n            ptr = findPtr(self._len - (ptr - self._ptr), ptr, needle._len, needle._ptr) + needle._len;\n        }\n    }\n\n    /*\n     * @dev Returns True if `self` contains `needle`.\n     * @param self The slice to search.\n     * @param needle The text to search for in `self`.\n     * @return True if `needle` is found in `self`, false otherwise.\n     */\n    function contains(slice memory self, slice memory needle) internal pure returns (bool) {\n        return rfindPtr(self._len, self._ptr, needle._len, needle._ptr) != self._ptr;\n    }\n\n    /*\n     * @dev Returns a newly allocated string containing the concatenation of\n     *      `self` and `other`.\n     * @param self The first slice to concatenate.\n     * @param other The second slice to concatenate.\n     * @return The concatenation of the two strings.\n     */\n    function concat(slice memory self, slice memory other) internal pure returns (string memory) {\n        string memory ret = new string(self._len + other._len);\n        uint retptr;\n        assembly { retptr := add(ret, 32) }\n        memcpy(retptr, self._ptr, self._len);\n        memcpy(retptr + self._len, other._ptr, other._len);\n        return ret;\n    }\n\n    /*\n     * @dev Joins an array of slices, using `self` as a delimiter, returning a\n     *      newly allocated string.\n     * @param self The delimiter to use.\n     * @param parts A list of slices to join.\n     * @return A newly allocated string containing all the slices in `parts`,\n     *         joined with `self`.\n     */\n    function join(slice memory self, slice[] memory parts) internal pure returns (string memory) {\n        if (parts.length == 0)\n            return \"\";\n\n        uint length = self._len * (parts.length - 1);\n        for(uint i = 0; i < parts.length; i++)\n            length += parts[i]._len;\n\n        string memory ret = new string(length);\n        uint retptr;\n        assembly { retptr := add(ret, 32) }\n\n        for(uint i = 0; i < parts.length; i++) {\n            memcpy(retptr, parts[i]._ptr, parts[i]._len);\n            retptr += parts[i]._len;\n            if (i < parts.length - 1) {\n                memcpy(retptr, self._ptr, self._len);\n                retptr += self._len;\n            }\n        }\n\n        return ret;\n    }\n}\n",
  "sourcePath": "/home/dh206382/dev/eth-vue/contracts/lib/arachnid/solidity-stringutils/strings.sol",
  "ast": {
    "absolutePath": "/home/dh206382/dev/eth-vue/contracts/lib/arachnid/solidity-stringutils/strings.sol",
    "exportedSymbols": {
      "strings": [
        2845
      ]
    },
    "id": 2846,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1122,
        "literals": [
          "solidity",
          ">=",
          "0.7",
          ".0",
          "<",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "2013:31:4"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "fullyImplemented": true,
        "id": 2845,
        "linearizedBaseContracts": [
          2845
        ],
        "name": "strings",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "strings.slice",
            "id": 1127,
            "members": [
              {
                "constant": false,
                "id": 1124,
                "mutability": "mutable",
                "name": "_len",
                "nodeType": "VariableDeclaration",
                "scope": 1127,
                "src": "2091:9:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1123,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2091:4:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1126,
                "mutability": "mutable",
                "name": "_ptr",
                "nodeType": "VariableDeclaration",
                "scope": 1127,
                "src": "2110:9:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1125,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2110:4:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "slice",
            "nodeType": "StructDefinition",
            "scope": 2845,
            "src": "2068:58:4",
            "visibility": "public"
          },
          {
            "body": {
              "id": 1166,
              "nodeType": "Block",
              "src": "2196:500:4",
              "statements": [
                {
                  "body": {
                    "id": 1152,
                    "nodeType": "Block",
                    "src": "2292:136:4",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "2315:56:4",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dest",
                                    "nodeType": "YulIdentifier",
                                    "src": "2340:4:4"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "2352:3:4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "2346:5:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2346:10:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2333:6:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2333:24:4"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2333:24:4"
                            }
                          ]
                        },
                        "evmVersion": "byzantium",
                        "externalReferences": [
                          {
                            "declaration": 1129,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2340:4:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1131,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2352:3:4",
                            "valueSize": 1
                          }
                        ],
                        "id": 1143,
                        "nodeType": "InlineAssembly",
                        "src": "2306:65:4"
                      },
                      {
                        "expression": {
                          "id": 1146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1144,
                            "name": "dest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1129,
                            "src": "2384:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 1145,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2392:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2384:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1147,
                        "nodeType": "ExpressionStatement",
                        "src": "2384:10:4"
                      },
                      {
                        "expression": {
                          "id": 1150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1148,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1131,
                            "src": "2408:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 1149,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2415:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2408:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1151,
                        "nodeType": "ExpressionStatement",
                        "src": "2408:9:4"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1136,
                      "name": "wordlen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1133,
                      "src": "2262:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "hexValue": "3332",
                      "id": 1137,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2273:2:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "2262:13:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1153,
                  "loopExpression": {
                    "expression": {
                      "id": 1141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 1139,
                        "name": "wordlen",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1133,
                        "src": "2277:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "-=",
                      "rightHandSide": {
                        "hexValue": "3332",
                        "id": 1140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2288:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "2277:13:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1142,
                    "nodeType": "ExpressionStatement",
                    "src": "2277:13:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "2256:172:4"
                },
                {
                  "assignments": [
                    1155
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1155,
                      "mutability": "mutable",
                      "name": "mask",
                      "nodeType": "VariableDeclaration",
                      "scope": 1166,
                      "src": "2470:9:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1154,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2470:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1164,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1161,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "323536",
                        "id": 1156,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2482:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_256_by_1",
                          "typeString": "int_const 256"
                        },
                        "value": "256"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "**",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1159,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "3332",
                              "id": 1157,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2490:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 1158,
                              "name": "wordlen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1133,
                              "src": "2495:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2490:12:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 1160,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2489:14:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2482:21:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 1162,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2506:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "2482:25:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2470:37:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2526:164:4",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "2540:41:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "src",
                                  "nodeType": "YulIdentifier",
                                  "src": "2565:3:4"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "2559:5:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2559:10:4"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "mask",
                                  "nodeType": "YulIdentifier",
                                  "src": "2575:4:4"
                                }
                              ],
                              "functionName": {
                                "name": "not",
                                "nodeType": "YulIdentifier",
                                "src": "2571:3:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2571:9:4"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "2555:3:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2555:26:4"
                        },
                        "variables": [
                          {
                            "name": "srcpart",
                            "nodeType": "YulTypedName",
                            "src": "2544:7:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "2594:38:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dest",
                                  "nodeType": "YulIdentifier",
                                  "src": "2620:4:4"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "2614:5:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2614:11:4"
                            },
                            {
                              "name": "mask",
                              "nodeType": "YulIdentifier",
                              "src": "2627:4:4"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "2610:3:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2610:22:4"
                        },
                        "variables": [
                          {
                            "name": "destpart",
                            "nodeType": "YulTypedName",
                            "src": "2598:8:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dest",
                              "nodeType": "YulIdentifier",
                              "src": "2652:4:4"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "destpart",
                                  "nodeType": "YulIdentifier",
                                  "src": "2661:8:4"
                                },
                                {
                                  "name": "srcpart",
                                  "nodeType": "YulIdentifier",
                                  "src": "2671:7:4"
                                }
                              ],
                              "functionName": {
                                "name": "or",
                                "nodeType": "YulIdentifier",
                                "src": "2658:2:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2658:21:4"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "2645:6:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2645:35:4"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2645:35:4"
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1129,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2620:4:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1129,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2652:4:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1155,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2575:4:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1155,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2627:4:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1131,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2565:3:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1165,
                  "nodeType": "InlineAssembly",
                  "src": "2517:173:4"
                }
              ]
            },
            "id": 1167,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "memcpy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1129,
                  "mutability": "mutable",
                  "name": "dest",
                  "nodeType": "VariableDeclaration",
                  "scope": 1167,
                  "src": "2148:9:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1128,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2148:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1131,
                  "mutability": "mutable",
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 1167,
                  "src": "2159:8:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1130,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2159:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1133,
                  "mutability": "mutable",
                  "name": "wordlen",
                  "nodeType": "VariableDeclaration",
                  "scope": 1167,
                  "src": "2169:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1132,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2169:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2147:35:4"
            },
            "returnParameters": {
              "id": 1135,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2196:0:4"
            },
            "scope": 2845,
            "src": "2132:564:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1187,
              "nodeType": "Block",
              "src": "2970:136:4",
              "statements": [
                {
                  "assignments": [
                    1175
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1175,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1187,
                      "src": "2980:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1174,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2980:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1176,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2980:8:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "3007:46:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "3021:22:4",
                        "value": {
                          "arguments": [
                            {
                              "name": "self",
                              "nodeType": "YulIdentifier",
                              "src": "3032:4:4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3038:4:4",
                              "type": "",
                              "value": "0x20"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3028:3:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3028:15:4"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nodeType": "YulIdentifier",
                            "src": "3021:3:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1175,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3021:3:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1169,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3032:4:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1177,
                  "nodeType": "InlineAssembly",
                  "src": "2998:55:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1181,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1169,
                              "src": "3081:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1180,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3075:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 1179,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3075:5:4",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3075:11:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1183,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "3075:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1184,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1175,
                        "src": "3095:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1178,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1127,
                      "src": "3069:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_slice_$1127_storage_ptr_$",
                        "typeString": "type(struct strings.slice storage pointer)"
                      }
                    },
                    "id": 1185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3069:30:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1173,
                  "id": 1186,
                  "nodeType": "Return",
                  "src": "3062:37:4"
                }
              ]
            },
            "id": 1188,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toSlice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1169,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1188,
                  "src": "2913:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1168,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2913:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2912:20:4"
            },
            "returnParameters": {
              "id": 1173,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1172,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1188,
                  "src": "2956:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1171,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "2956:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2955:14:4"
            },
            "scope": 2845,
            "src": "2896:210:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1326,
              "nodeType": "Block",
              "src": "3358:742:4",
              "statements": [
                {
                  "assignments": [
                    1196
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1196,
                      "mutability": "mutable",
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 1326,
                      "src": "3368:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1195,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3368:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1197,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3368:8:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1200,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1198,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1190,
                      "src": "3390:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1199,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3398:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3390:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1203,
                  "nodeType": "IfStatement",
                  "src": "3386:35:4",
                  "trueBody": {
                    "expression": {
                      "hexValue": "30",
                      "id": 1201,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3420:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 1194,
                    "id": 1202,
                    "nodeType": "Return",
                    "src": "3413:8:4"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1209,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 1206,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3440:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 1205,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3435:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 1204,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "3435:4:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3435:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "hexValue": "30786666666666666666666666666666666666666666666666666666666666666666",
                        "id": 1208,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3448:34:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_340282366920938463463374607431768211455_by_1",
                          "typeString": "int_const 3402...(31 digits omitted)...1455"
                        },
                        "value": "0xffffffffffffffffffffffffffffffff"
                      },
                      "src": "3435:47:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1210,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3486:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3435:52:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1229,
                  "nodeType": "IfStatement",
                  "src": "3431:170:4",
                  "trueBody": {
                    "id": 1228,
                    "nodeType": "Block",
                    "src": "3489:112:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1214,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1212,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1196,
                            "src": "3503:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3136",
                            "id": 1213,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3510:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_16_by_1",
                              "typeString": "int_const 16"
                            },
                            "value": "16"
                          },
                          "src": "3503:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1215,
                        "nodeType": "ExpressionStatement",
                        "src": "3503:9:4"
                      },
                      {
                        "expression": {
                          "id": 1226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1216,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3526:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1224,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 1221,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1190,
                                      "src": "3546:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1220,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3541:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 1219,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3541:4:4",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1222,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3541:10:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "3078313030303030303030303030303030303030303030303030303030303030303030",
                                  "id": 1223,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3554:35:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  },
                                  "value": "0x100000000000000000000000000000000"
                                },
                                "src": "3541:48:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1218,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3533:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 1217,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "3533:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1225,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3533:57:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3526:64:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1227,
                        "nodeType": "ExpressionStatement",
                        "src": "3526:64:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1237,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1235,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 1232,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3619:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 1231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3614:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 1230,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "3614:4:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1233,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3614:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "hexValue": "307866666666666666666666666666666666",
                        "id": 1234,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3627:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_18446744073709551615_by_1",
                          "typeString": "int_const 18446744073709551615"
                        },
                        "value": "0xffffffffffffffff"
                      },
                      "src": "3614:31:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1236,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3649:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3614:36:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1255,
                  "nodeType": "IfStatement",
                  "src": "3610:137:4",
                  "trueBody": {
                    "id": 1254,
                    "nodeType": "Block",
                    "src": "3652:95:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1238,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1196,
                            "src": "3666:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "38",
                            "id": 1239,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3673:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_8_by_1",
                              "typeString": "int_const 8"
                            },
                            "value": "8"
                          },
                          "src": "3666:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1241,
                        "nodeType": "ExpressionStatement",
                        "src": "3666:8:4"
                      },
                      {
                        "expression": {
                          "id": 1252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1242,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3688:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1250,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 1247,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1190,
                                      "src": "3708:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1246,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3703:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 1245,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3703:4:4",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1248,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3703:10:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "30783130303030303030303030303030303030",
                                  "id": 1249,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3716:19:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                    "typeString": "int_const 18446744073709551616"
                                  },
                                  "value": "0x10000000000000000"
                                },
                                "src": "3703:32:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1244,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3695:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 1243,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "3695:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1251,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3695:41:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3688:48:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1253,
                        "nodeType": "ExpressionStatement",
                        "src": "3688:48:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1261,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 1258,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3765:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 1257,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3760:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 1256,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "3760:4:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3760:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "hexValue": "30786666666666666666",
                        "id": 1260,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3773:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4294967295_by_1",
                          "typeString": "int_const 4294967295"
                        },
                        "value": "0xffffffff"
                      },
                      "src": "3760:23:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1262,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3787:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3760:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1281,
                  "nodeType": "IfStatement",
                  "src": "3756:121:4",
                  "trueBody": {
                    "id": 1280,
                    "nodeType": "Block",
                    "src": "3790:87:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1264,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1196,
                            "src": "3804:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "34",
                            "id": 1265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3811:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "src": "3804:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1267,
                        "nodeType": "ExpressionStatement",
                        "src": "3804:8:4"
                      },
                      {
                        "expression": {
                          "id": 1278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1268,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3826:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1276,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 1273,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1190,
                                      "src": "3846:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1272,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3841:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 1271,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3841:4:4",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1274,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3841:10:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "3078313030303030303030",
                                  "id": 1275,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3854:11:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4294967296_by_1",
                                    "typeString": "int_const 4294967296"
                                  },
                                  "value": "0x100000000"
                                },
                                "src": "3841:24:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1270,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3833:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 1269,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "3833:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1277,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3833:33:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3826:40:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1279,
                        "nodeType": "ExpressionStatement",
                        "src": "3826:40:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1287,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 1284,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3895:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 1283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3890:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 1282,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "3890:4:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1285,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3890:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "hexValue": "307866666666",
                        "id": 1286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3903:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_65535_by_1",
                          "typeString": "int_const 65535"
                        },
                        "value": "0xffff"
                      },
                      "src": "3890:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1288,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3913:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3890:24:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1307,
                  "nodeType": "IfStatement",
                  "src": "3886:113:4",
                  "trueBody": {
                    "id": 1306,
                    "nodeType": "Block",
                    "src": "3916:83:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1290,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1196,
                            "src": "3930:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "32",
                            "id": 1291,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3937:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "3930:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1293,
                        "nodeType": "ExpressionStatement",
                        "src": "3930:8:4"
                      },
                      {
                        "expression": {
                          "id": 1304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1294,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3952:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1302,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 1299,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1190,
                                      "src": "3972:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1298,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3967:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 1297,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3967:4:4",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1300,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3967:10:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "30783130303030",
                                  "id": 1301,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3980:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_65536_by_1",
                                    "typeString": "int_const 65536"
                                  },
                                  "value": "0x10000"
                                },
                                "src": "3967:20:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1296,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3959:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 1295,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "3959:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1303,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3959:29:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3952:36:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1305,
                        "nodeType": "ExpressionStatement",
                        "src": "3952:36:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1313,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 1310,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "4017:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 1309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4012:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 1308,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "4012:4:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1311,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4012:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "hexValue": "30786666",
                        "id": 1312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4025:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_255_by_1",
                          "typeString": "int_const 255"
                        },
                        "value": "0xff"
                      },
                      "src": "4012:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1314,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4033:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4012:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1321,
                  "nodeType": "IfStatement",
                  "src": "4008:61:4",
                  "trueBody": {
                    "id": 1320,
                    "nodeType": "Block",
                    "src": "4036:33:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1318,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1316,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1196,
                            "src": "4050:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "31",
                            "id": 1317,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4057:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "4050:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1319,
                        "nodeType": "ExpressionStatement",
                        "src": "4050:8:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "3332",
                      "id": 1322,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4085:2:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 1323,
                      "name": "ret",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1196,
                      "src": "4090:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4085:8:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1194,
                  "id": 1325,
                  "nodeType": "Return",
                  "src": "4078:15:4"
                }
              ]
            },
            "id": 1327,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "len",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1191,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1190,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1327,
                  "src": "3315:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1189,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3315:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3314:14:4"
            },
            "returnParameters": {
              "id": 1194,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1193,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1327,
                  "src": "3352:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1192,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3352:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3351:6:4"
            },
            "scope": 2845,
            "src": "3302:798:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1343,
              "nodeType": "Block",
              "src": "4481:295:4",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "4583:157:4",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "4597:22:4",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4614:4:4",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "4608:5:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4608:11:4"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "4601:3:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4639:4:4",
                              "type": "",
                              "value": "0x40"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "4649:3:4"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4654:4:4",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4645:3:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4645:14:4"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4632:6:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4632:28:4"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4632:28:4"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "4680:3:4"
                            },
                            {
                              "name": "self",
                              "nodeType": "YulIdentifier",
                              "src": "4685:4:4"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4673:6:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4673:17:4"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4673:17:4"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "4714:3:4"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4719:4:4",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4710:3:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4710:14:4"
                            },
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "4726:3:4"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4703:6:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4703:27:4"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4703:27:4"
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1332,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4714:3:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1329,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4685:4:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1334,
                  "nodeType": "InlineAssembly",
                  "src": "4574:166:4"
                },
                {
                  "expression": {
                    "id": 1341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 1335,
                        "name": "ret",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1332,
                        "src": "4749:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1337,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "4749:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 1339,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1329,
                          "src": "4764:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 1338,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          1327,
                          1477
                        ],
                        "referencedDeclaration": 1327,
                        "src": "4760:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$",
                          "typeString": "function (bytes32) pure returns (uint256)"
                        }
                      },
                      "id": 1340,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4760:9:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4749:20:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1342,
                  "nodeType": "ExpressionStatement",
                  "src": "4749:20:4"
                }
              ]
            },
            "id": 1344,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toSliceB32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1329,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1344,
                  "src": "4426:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1328,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4426:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4425:14:4"
            },
            "returnParameters": {
              "id": 1333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1332,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1344,
                  "src": "4463:16:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1331,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "4463:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4462:18:4"
            },
            "scope": 2845,
            "src": "4406:370:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1358,
              "nodeType": "Block",
              "src": "5047:51:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1352,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1346,
                          "src": "5070:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1353,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "5070:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 1354,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1346,
                          "src": "5081:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1355,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "5081:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1351,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1127,
                      "src": "5064:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_slice_$1127_storage_ptr_$",
                        "typeString": "type(struct strings.slice storage pointer)"
                      }
                    },
                    "id": 1356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5064:27:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1350,
                  "id": 1357,
                  "nodeType": "Return",
                  "src": "5057:34:4"
                }
              ]
            },
            "id": 1359,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "copy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1346,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1359,
                  "src": "4991:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1345,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "4991:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4990:19:4"
            },
            "returnParameters": {
              "id": 1350,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1349,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1359,
                  "src": "5033:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1348,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "5033:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5032:14:4"
            },
            "scope": 2845,
            "src": "4977:121:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1388,
              "nodeType": "Block",
              "src": "5345:190:4",
              "statements": [
                {
                  "assignments": [
                    1367
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1367,
                      "mutability": "mutable",
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 1388,
                      "src": "5355:17:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 1366,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5355:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1373,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1370,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1361,
                          "src": "5386:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1371,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "5386:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1369,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "5375:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 1368,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5379:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 1372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5375:21:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5355:41:4"
                },
                {
                  "assignments": [
                    1375
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1375,
                      "mutability": "mutable",
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1388,
                      "src": "5406:11:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1374,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5406:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1376,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5406:11:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "5436:26:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "5438:22:4",
                        "value": {
                          "arguments": [
                            {
                              "name": "ret",
                              "nodeType": "YulIdentifier",
                              "src": "5452:3:4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5457:2:4",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "5448:3:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5448:12:4"
                        },
                        "variableNames": [
                          {
                            "name": "retptr",
                            "nodeType": "YulIdentifier",
                            "src": "5438:6:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1367,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5452:3:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1375,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5438:6:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1377,
                  "nodeType": "InlineAssembly",
                  "src": "5427:35:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1379,
                        "name": "retptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1375,
                        "src": "5479:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 1380,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1361,
                          "src": "5487:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1381,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "5487:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 1382,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1361,
                          "src": "5498:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1383,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "5498:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1378,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1167,
                      "src": "5472:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 1384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5472:36:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1385,
                  "nodeType": "ExpressionStatement",
                  "src": "5472:36:4"
                },
                {
                  "expression": {
                    "id": 1386,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1367,
                    "src": "5525:3:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1365,
                  "id": 1387,
                  "nodeType": "Return",
                  "src": "5518:10:4"
                }
              ]
            },
            "id": 1389,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toString",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1362,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1361,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1389,
                  "src": "5288:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1360,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "5288:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5287:19:4"
            },
            "returnParameters": {
              "id": 1365,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1364,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1389,
                  "src": "5330:13:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1363,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5330:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5329:15:4"
            },
            "scope": 2845,
            "src": "5270:265:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1476,
              "nodeType": "Block",
              "src": "5989:629:4",
              "statements": [
                {
                  "assignments": [
                    1397
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1397,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1476,
                      "src": "6074:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1396,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6074:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1402,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1398,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1391,
                        "src": "6085:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1399,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "6085:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "hexValue": "3331",
                      "id": 1400,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6097:2:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_31_by_1",
                        "typeString": "int_const 31"
                      },
                      "value": "31"
                    },
                    "src": "6085:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6074:25:4"
                },
                {
                  "assignments": [
                    1404
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1404,
                      "mutability": "mutable",
                      "name": "end",
                      "nodeType": "VariableDeclaration",
                      "scope": 1476,
                      "src": "6109:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1403,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6109:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1409,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1405,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1397,
                      "src": "6120:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "expression": {
                        "id": 1406,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1391,
                        "src": "6126:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1407,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "6126:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6120:15:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6109:26:4"
                },
                {
                  "body": {
                    "id": 1474,
                    "nodeType": "Block",
                    "src": "6173:439:4",
                    "statements": [
                      {
                        "assignments": [
                          1421
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1421,
                            "mutability": "mutable",
                            "name": "b",
                            "nodeType": "VariableDeclaration",
                            "scope": 1474,
                            "src": "6187:7:4",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 1420,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "6187:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1422,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6187:7:4"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6217:30:4",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6219:26:4",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6234:3:4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "6228:5:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6228:10:4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6240:4:4",
                                    "type": "",
                                    "value": "0xFF"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "6224:3:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6224:21:4"
                              },
                              "variableNames": [
                                {
                                  "name": "b",
                                  "nodeType": "YulIdentifier",
                                  "src": "6219:1:4"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "byzantium",
                        "externalReferences": [
                          {
                            "declaration": 1421,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6219:1:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1397,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6234:3:4",
                            "valueSize": 1
                          }
                        ],
                        "id": 1423,
                        "nodeType": "InlineAssembly",
                        "src": "6208:39:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 1426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1424,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1421,
                            "src": "6264:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "hexValue": "30783830",
                            "id": 1425,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6268:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "0x80"
                          },
                          "src": "6264:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 1434,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1432,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1421,
                              "src": "6324:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "hexValue": "30784530",
                              "id": 1433,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6328:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_224_by_1",
                                "typeString": "int_const 224"
                              },
                              "value": "0xE0"
                            },
                            "src": "6324:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "id": 1442,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1440,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1421,
                                "src": "6384:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "hexValue": "30784630",
                                "id": 1441,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6388:4:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_240_by_1",
                                  "typeString": "int_const 240"
                                },
                                "value": "0xF0"
                              },
                              "src": "6384:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 1450,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1448,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1421,
                                  "src": "6444:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "30784638",
                                  "id": 1449,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6448:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_248_by_1",
                                    "typeString": "int_const 248"
                                  },
                                  "value": "0xF8"
                                },
                                "src": "6444:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 1458,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 1456,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1421,
                                    "src": "6504:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "hexValue": "30784643",
                                    "id": 1457,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6508:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_252_by_1",
                                      "typeString": "int_const 252"
                                    },
                                    "value": "0xFC"
                                  },
                                  "src": "6504:8:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseBody": {
                                  "id": 1468,
                                  "nodeType": "Block",
                                  "src": "6561:41:4",
                                  "statements": [
                                    {
                                      "expression": {
                                        "id": 1466,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "id": 1464,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1397,
                                          "src": "6579:3:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "hexValue": "36",
                                          "id": 1465,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6586:1:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_6_by_1",
                                            "typeString": "int_const 6"
                                          },
                                          "value": "6"
                                        },
                                        "src": "6579:8:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1467,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6579:8:4"
                                    }
                                  ]
                                },
                                "id": 1469,
                                "nodeType": "IfStatement",
                                "src": "6501:101:4",
                                "trueBody": {
                                  "id": 1463,
                                  "nodeType": "Block",
                                  "src": "6514:41:4",
                                  "statements": [
                                    {
                                      "expression": {
                                        "id": 1461,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "id": 1459,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1397,
                                          "src": "6532:3:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "hexValue": "35",
                                          "id": 1460,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6539:1:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_5_by_1",
                                            "typeString": "int_const 5"
                                          },
                                          "value": "5"
                                        },
                                        "src": "6532:8:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1462,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6532:8:4"
                                    }
                                  ]
                                }
                              },
                              "id": 1470,
                              "nodeType": "IfStatement",
                              "src": "6441:161:4",
                              "trueBody": {
                                "id": 1455,
                                "nodeType": "Block",
                                "src": "6454:41:4",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 1453,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 1451,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1397,
                                        "src": "6472:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "hexValue": "34",
                                        "id": 1452,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6479:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_4_by_1",
                                          "typeString": "int_const 4"
                                        },
                                        "value": "4"
                                      },
                                      "src": "6472:8:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1454,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6472:8:4"
                                  }
                                ]
                              }
                            },
                            "id": 1471,
                            "nodeType": "IfStatement",
                            "src": "6381:221:4",
                            "trueBody": {
                              "id": 1447,
                              "nodeType": "Block",
                              "src": "6394:41:4",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 1445,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 1443,
                                      "name": "ptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1397,
                                      "src": "6412:3:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "33",
                                      "id": 1444,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6419:1:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "src": "6412:8:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1446,
                                  "nodeType": "ExpressionStatement",
                                  "src": "6412:8:4"
                                }
                              ]
                            }
                          },
                          "id": 1472,
                          "nodeType": "IfStatement",
                          "src": "6321:281:4",
                          "trueBody": {
                            "id": 1439,
                            "nodeType": "Block",
                            "src": "6334:41:4",
                            "statements": [
                              {
                                "expression": {
                                  "id": 1437,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 1435,
                                    "name": "ptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1397,
                                    "src": "6352:3:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "+=",
                                  "rightHandSide": {
                                    "hexValue": "32",
                                    "id": 1436,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6359:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "src": "6352:8:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1438,
                                "nodeType": "ExpressionStatement",
                                "src": "6352:8:4"
                              }
                            ]
                          }
                        },
                        "id": 1473,
                        "nodeType": "IfStatement",
                        "src": "6260:342:4",
                        "trueBody": {
                          "id": 1431,
                          "nodeType": "Block",
                          "src": "6274:41:4",
                          "statements": [
                            {
                              "expression": {
                                "id": 1429,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 1427,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1397,
                                  "src": "6292:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "hexValue": "31",
                                  "id": 1428,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6299:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "6292:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1430,
                              "nodeType": "ExpressionStatement",
                              "src": "6292:8:4"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1414,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1397,
                      "src": "6157:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 1415,
                      "name": "end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1404,
                      "src": "6163:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6157:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1475,
                  "initializationExpression": {
                    "expression": {
                      "id": 1412,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 1410,
                        "name": "l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1394,
                        "src": "6150:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "hexValue": "30",
                        "id": 1411,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6154:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6150:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1413,
                    "nodeType": "ExpressionStatement",
                    "src": "6150:5:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 1418,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6168:3:4",
                      "subExpression": {
                        "id": 1417,
                        "name": "l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1394,
                        "src": "6168:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1419,
                    "nodeType": "ExpressionStatement",
                    "src": "6168:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "6145:467:4"
                }
              ]
            },
            "id": 1477,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "len",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1392,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1391,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1477,
                  "src": "5939:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1390,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "5939:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5938:19:4"
            },
            "returnParameters": {
              "id": 1395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1394,
                  "mutability": "mutable",
                  "name": "l",
                  "nodeType": "VariableDeclaration",
                  "scope": 1477,
                  "src": "5981:6:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1393,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5981:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5980:8:4"
            },
            "scope": 2845,
            "src": "5926:692:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1489,
              "nodeType": "Block",
              "src": "6874:38:4",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1484,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1479,
                        "src": "6891:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1485,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "6891:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6904:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6891:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1483,
                  "id": 1488,
                  "nodeType": "Return",
                  "src": "6884:21:4"
                }
              ]
            },
            "id": 1490,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "empty",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1480,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1479,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1490,
                  "src": "6826:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1478,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "6826:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6825:19:4"
            },
            "returnParameters": {
              "id": 1483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1482,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1490,
                  "src": "6868:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1481,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6868:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6867:6:4"
            },
            "scope": 2845,
            "src": "6811:101:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1622,
              "nodeType": "Block",
              "src": "7424:907:4",
              "statements": [
                {
                  "assignments": [
                    1500
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1500,
                      "mutability": "mutable",
                      "name": "shortest",
                      "nodeType": "VariableDeclaration",
                      "scope": 1622,
                      "src": "7434:13:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1499,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7434:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1503,
                  "initialValue": {
                    "expression": {
                      "id": 1501,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1492,
                      "src": "7450:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "id": 1502,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_len",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1124,
                    "src": "7450:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7434:25:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1504,
                        "name": "other",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1494,
                        "src": "7473:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1505,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "7473:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 1506,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1492,
                        "src": "7486:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1507,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "7486:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7473:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1514,
                  "nodeType": "IfStatement",
                  "src": "7469:61:4",
                  "trueBody": {
                    "expression": {
                      "id": 1512,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 1509,
                        "name": "shortest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1500,
                        "src": "7509:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "expression": {
                          "id": 1510,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1494,
                          "src": "7520:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1511,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "7520:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "7509:21:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1513,
                    "nodeType": "ExpressionStatement",
                    "src": "7509:21:4"
                  }
                },
                {
                  "assignments": [
                    1516
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1516,
                      "mutability": "mutable",
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1622,
                      "src": "7541:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1515,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7541:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1519,
                  "initialValue": {
                    "expression": {
                      "id": 1517,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1492,
                      "src": "7556:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "id": 1518,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_ptr",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1126,
                    "src": "7556:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7541:24:4"
                },
                {
                  "assignments": [
                    1521
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1521,
                      "mutability": "mutable",
                      "name": "otherptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1622,
                      "src": "7575:13:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1520,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7575:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1524,
                  "initialValue": {
                    "expression": {
                      "id": 1522,
                      "name": "other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1494,
                      "src": "7591:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "id": 1523,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_ptr",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1126,
                    "src": "7591:10:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7575:26:4"
                },
                {
                  "body": {
                    "id": 1608,
                    "nodeType": "Block",
                    "src": "7657:619:4",
                    "statements": [
                      {
                        "assignments": [
                          1537
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1537,
                            "mutability": "mutable",
                            "name": "a",
                            "nodeType": "VariableDeclaration",
                            "scope": 1608,
                            "src": "7671:6:4",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1536,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "7671:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1538,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7671:6:4"
                      },
                      {
                        "assignments": [
                          1540
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1540,
                            "mutability": "mutable",
                            "name": "b",
                            "nodeType": "VariableDeclaration",
                            "scope": 1608,
                            "src": "7691:6:4",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1539,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "7691:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1541,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7691:6:4"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "7720:88:4",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7738:19:4",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "selfptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "7749:7:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7743:5:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7743:14:4"
                              },
                              "variableNames": [
                                {
                                  "name": "a",
                                  "nodeType": "YulIdentifier",
                                  "src": "7738:1:4"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7774:20:4",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "otherptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "7785:8:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7779:5:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7779:15:4"
                              },
                              "variableNames": [
                                {
                                  "name": "b",
                                  "nodeType": "YulIdentifier",
                                  "src": "7774:1:4"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "byzantium",
                        "externalReferences": [
                          {
                            "declaration": 1537,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7738:1:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1540,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7774:1:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1521,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7785:8:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1516,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7749:7:4",
                            "valueSize": 1
                          }
                        ],
                        "id": 1542,
                        "nodeType": "InlineAssembly",
                        "src": "7711:97:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1545,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1543,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1537,
                            "src": "7825:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 1544,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1540,
                            "src": "7830:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7825:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1599,
                        "nodeType": "IfStatement",
                        "src": "7821:390:4",
                        "trueBody": {
                          "id": 1598,
                          "nodeType": "Block",
                          "src": "7833:378:4",
                          "statements": [
                            {
                              "assignments": [
                                1547
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1547,
                                  "mutability": "mutable",
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1598,
                                  "src": "7912:12:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1546,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7912:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1553,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 1551,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "7935:2:4",
                                    "subExpression": {
                                      "hexValue": "31",
                                      "id": 1550,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7936:1:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_minus_1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_minus_1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  ],
                                  "id": 1549,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7927:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 1548,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7927:7:4",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1552,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7927:11:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7912:26:4"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1556,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1554,
                                  "name": "shortest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1500,
                                  "src": "7972:8:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "3332",
                                  "id": 1555,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7983:2:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "7972:13:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1576,
                              "nodeType": "IfStatement",
                              "src": "7969:103:4",
                              "trueBody": {
                                "id": 1575,
                                "nodeType": "Block",
                                "src": "7987:85:4",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 1573,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 1557,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1547,
                                        "src": "8007:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 1572,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "~",
                                        "prefix": true,
                                        "src": "8014:39:4",
                                        "subExpression": {
                                          "components": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 1570,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 1568,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "hexValue": "32",
                                                  "id": 1558,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "8016:1:4",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_2_by_1",
                                                    "typeString": "int_const 2"
                                                  },
                                                  "value": "2"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "**",
                                                "rightExpression": {
                                                  "components": [
                                                    {
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "id": 1566,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "leftExpression": {
                                                        "hexValue": "38",
                                                        "id": 1559,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "8022:1:4",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_8_by_1",
                                                          "typeString": "int_const 8"
                                                        },
                                                        "value": "8"
                                                      },
                                                      "nodeType": "BinaryOperation",
                                                      "operator": "*",
                                                      "rightExpression": {
                                                        "components": [
                                                          {
                                                            "commonType": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            },
                                                            "id": 1564,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                              "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              },
                                                              "id": 1562,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "leftExpression": {
                                                                "hexValue": "3332",
                                                                "id": 1560,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "8027:2:4",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_rational_32_by_1",
                                                                  "typeString": "int_const 32"
                                                                },
                                                                "value": "32"
                                                              },
                                                              "nodeType": "BinaryOperation",
                                                              "operator": "-",
                                                              "rightExpression": {
                                                                "id": 1561,
                                                                "name": "shortest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1500,
                                                                "src": "8032:8:4",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_uint256",
                                                                  "typeString": "uint256"
                                                                }
                                                              },
                                                              "src": "8027:13:4",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "+",
                                                            "rightExpression": {
                                                              "id": 1563,
                                                              "name": "idx",
                                                              "nodeType": "Identifier",
                                                              "overloadedDeclarations": [],
                                                              "referencedDeclaration": 1526,
                                                              "src": "8043:3:4",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "src": "8027:19:4",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          }
                                                        ],
                                                        "id": 1565,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "8026:21:4",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "src": "8022:25:4",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    }
                                                  ],
                                                  "id": 1567,
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "TupleExpression",
                                                  "src": "8021:27:4",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "src": "8016:32:4",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "-",
                                              "rightExpression": {
                                                "hexValue": "31",
                                                "id": 1569,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8051:1:4",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_1_by_1",
                                                  "typeString": "int_const 1"
                                                },
                                                "value": "1"
                                              },
                                              "src": "8016:36:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 1571,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "8015:38:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8007:46:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1574,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8007:46:4"
                                  }
                                ]
                              }
                            },
                            {
                              "assignments": [
                                1578
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1578,
                                  "mutability": "mutable",
                                  "name": "diff",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1598,
                                  "src": "8089:12:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1577,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8089:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1588,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1587,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1581,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 1579,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1537,
                                        "src": "8105:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&",
                                      "rightExpression": {
                                        "id": 1580,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1547,
                                        "src": "8109:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8105:8:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1582,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8104:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1585,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 1583,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1540,
                                        "src": "8118:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&",
                                      "rightExpression": {
                                        "id": 1584,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1547,
                                        "src": "8122:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8118:8:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1586,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8117:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "8104:23:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "8089:38:4"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1591,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1589,
                                  "name": "diff",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1578,
                                  "src": "8149:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 1590,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8157:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "8149:9:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1597,
                              "nodeType": "IfStatement",
                              "src": "8145:51:4",
                              "trueBody": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1594,
                                      "name": "diff",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1578,
                                      "src": "8191:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1593,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "8187:3:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": {
                                      "id": 1592,
                                      "name": "int",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "8187:3:4",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1595,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8187:9:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "functionReturnParameters": 1498,
                                "id": 1596,
                                "nodeType": "Return",
                                "src": "8180:16:4"
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1600,
                            "name": "selfptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1516,
                            "src": "8224:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 1601,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8235:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "8224:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1603,
                        "nodeType": "ExpressionStatement",
                        "src": "8224:13:4"
                      },
                      {
                        "expression": {
                          "id": 1606,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1604,
                            "name": "otherptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1521,
                            "src": "8251:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 1605,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8263:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "8251:14:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1607,
                        "nodeType": "ExpressionStatement",
                        "src": "8251:14:4"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1529,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1526,
                      "src": "7630:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 1530,
                      "name": "shortest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1500,
                      "src": "7636:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7630:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1609,
                  "initializationExpression": {
                    "assignments": [
                      1526
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1526,
                        "mutability": "mutable",
                        "name": "idx",
                        "nodeType": "VariableDeclaration",
                        "scope": 1609,
                        "src": "7616:8:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1525,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "7616:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 1528,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 1527,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7627:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "7616:12:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 1534,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 1532,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1526,
                        "src": "7646:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "hexValue": "3332",
                        "id": 1533,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7653:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "7646:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1535,
                    "nodeType": "ExpressionStatement",
                    "src": "7646:9:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "7611:665:4"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 1620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 1612,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1492,
                            "src": "8296:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 1613,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "8296:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1611,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8292:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 1610,
                          "name": "int",
                          "nodeType": "ElementaryTypeName",
                          "src": "8292:3:4",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1614,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8292:14:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 1617,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1494,
                            "src": "8313:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 1618,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "8313:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1616,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8309:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 1615,
                          "name": "int",
                          "nodeType": "ElementaryTypeName",
                          "src": "8309:3:4",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1619,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8309:15:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "8292:32:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 1498,
                  "id": 1621,
                  "nodeType": "Return",
                  "src": "8285:39:4"
                }
              ]
            },
            "id": 1623,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "compare",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1495,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1492,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1623,
                  "src": "7357:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1491,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "7357:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1494,
                  "mutability": "mutable",
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 1623,
                  "src": "7376:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1493,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "7376:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7356:39:4"
            },
            "returnParameters": {
              "id": 1498,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1497,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1623,
                  "src": "7419:3:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 1496,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "7419:3:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7418:5:4"
            },
            "scope": 2845,
            "src": "7340:991:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1639,
              "nodeType": "Block",
              "src": "8659:49:4",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 1637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 1633,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1625,
                          "src": "8684:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        {
                          "id": 1634,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1627,
                          "src": "8690:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        ],
                        "id": 1632,
                        "name": "compare",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1623,
                        "src": "8676:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1127_memory_ptr_$_t_struct$_slice_$1127_memory_ptr_$returns$_t_int256_$",
                          "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (int256)"
                        }
                      },
                      "id": 1635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8676:20:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8700:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8676:25:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1631,
                  "id": 1638,
                  "nodeType": "Return",
                  "src": "8669:32:4"
                }
              ]
            },
            "id": 1640,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1628,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1625,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1640,
                  "src": "8591:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1624,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "8591:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1627,
                  "mutability": "mutable",
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 1640,
                  "src": "8610:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1626,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "8610:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8590:39:4"
            },
            "returnParameters": {
              "id": 1631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1630,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1640,
                  "src": "8653:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1629,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8653:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8652:6:4"
            },
            "scope": 2845,
            "src": "8575:133:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1757,
              "nodeType": "Block",
              "src": "9094:785:4",
              "statements": [
                {
                  "expression": {
                    "id": 1654,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 1649,
                        "name": "rune",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1644,
                        "src": "9104:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1651,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "9104:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 1652,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1642,
                        "src": "9116:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1653,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "9116:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9104:21:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1655,
                  "nodeType": "ExpressionStatement",
                  "src": "9104:21:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1659,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1656,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1642,
                        "src": "9140:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1657,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "9140:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1658,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9153:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9140:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1669,
                  "nodeType": "IfStatement",
                  "src": "9136:83:4",
                  "trueBody": {
                    "id": 1668,
                    "nodeType": "Block",
                    "src": "9156:63:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1660,
                              "name": "rune",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1644,
                              "src": "9170:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1662,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "9170:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 1663,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9182:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9170:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1665,
                        "nodeType": "ExpressionStatement",
                        "src": "9170:13:4"
                      },
                      {
                        "expression": {
                          "id": 1666,
                          "name": "rune",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1644,
                          "src": "9204:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 1648,
                        "id": 1667,
                        "nodeType": "Return",
                        "src": "9197:11:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1671
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1671,
                      "mutability": "mutable",
                      "name": "l",
                      "nodeType": "VariableDeclaration",
                      "scope": 1757,
                      "src": "9229:6:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1670,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9229:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1672,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9229:6:4"
                },
                {
                  "assignments": [
                    1674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1674,
                      "mutability": "mutable",
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 1757,
                      "src": "9245:6:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1673,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9245:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1675,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9245:6:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "9332:56:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "9334:52:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "self",
                                              "nodeType": "YulIdentifier",
                                              "src": "9363:4:4"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "9369:2:4",
                                              "type": "",
                                              "value": "32"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "9359:3:4"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "9359:13:4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "9353:5:4"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9353:20:4"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "9375:2:4",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "sub",
                                    "nodeType": "YulIdentifier",
                                    "src": "9349:3:4"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "9349:29:4"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "9343:5:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9343:36:4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9381:4:4",
                              "type": "",
                              "value": "0xFF"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "9339:3:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9339:47:4"
                        },
                        "variableNames": [
                          {
                            "name": "b",
                            "nodeType": "YulIdentifier",
                            "src": "9334:1:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1674,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9334:1:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1642,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9363:4:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1676,
                  "nodeType": "InlineAssembly",
                  "src": "9323:65:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1677,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1674,
                      "src": "9401:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "hexValue": "30783830",
                      "id": 1678,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9405:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "0x80"
                    },
                    "src": "9401:8:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1687,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 1685,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1674,
                        "src": "9450:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "hexValue": "30784530",
                        "id": 1686,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9454:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_224_by_1",
                          "typeString": "int_const 224"
                        },
                        "value": "0xE0"
                      },
                      "src": "9450:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1693,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1674,
                          "src": "9499:1:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "hexValue": "30784630",
                          "id": 1694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9503:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_240_by_1",
                            "typeString": "int_const 240"
                          },
                          "value": "0xF0"
                        },
                        "src": "9499:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 1705,
                        "nodeType": "Block",
                        "src": "9545:30:4",
                        "statements": [
                          {
                            "expression": {
                              "id": 1703,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 1701,
                                "name": "l",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1671,
                                "src": "9559:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "hexValue": "34",
                                "id": 1702,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9563:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "9559:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1704,
                            "nodeType": "ExpressionStatement",
                            "src": "9559:5:4"
                          }
                        ]
                      },
                      "id": 1706,
                      "nodeType": "IfStatement",
                      "src": "9496:79:4",
                      "trueBody": {
                        "id": 1700,
                        "nodeType": "Block",
                        "src": "9509:30:4",
                        "statements": [
                          {
                            "expression": {
                              "id": 1698,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 1696,
                                "name": "l",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1671,
                                "src": "9523:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "hexValue": "33",
                                "id": 1697,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9527:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "9523:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1699,
                            "nodeType": "ExpressionStatement",
                            "src": "9523:5:4"
                          }
                        ]
                      }
                    },
                    "id": 1707,
                    "nodeType": "IfStatement",
                    "src": "9447:128:4",
                    "trueBody": {
                      "id": 1692,
                      "nodeType": "Block",
                      "src": "9460:30:4",
                      "statements": [
                        {
                          "expression": {
                            "id": 1690,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1688,
                              "name": "l",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1671,
                              "src": "9474:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "hexValue": "32",
                              "id": 1689,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9478:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "9474:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1691,
                          "nodeType": "ExpressionStatement",
                          "src": "9474:5:4"
                        }
                      ]
                    }
                  },
                  "id": 1708,
                  "nodeType": "IfStatement",
                  "src": "9397:178:4",
                  "trueBody": {
                    "id": 1684,
                    "nodeType": "Block",
                    "src": "9411:30:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1680,
                            "name": "l",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1671,
                            "src": "9425:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "31",
                            "id": 1681,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9429:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "9425:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1683,
                        "nodeType": "ExpressionStatement",
                        "src": "9425:5:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1709,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1671,
                      "src": "9631:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "expression": {
                        "id": 1710,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1642,
                        "src": "9635:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1711,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "9635:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9631:13:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1736,
                  "nodeType": "IfStatement",
                  "src": "9627:153:4",
                  "trueBody": {
                    "id": 1735,
                    "nodeType": "Block",
                    "src": "9646:134:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1718,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1713,
                              "name": "rune",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1644,
                              "src": "9660:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1715,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "9660:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 1716,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1642,
                              "src": "9672:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1717,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "9672:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9660:21:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1719,
                        "nodeType": "ExpressionStatement",
                        "src": "9660:21:4"
                      },
                      {
                        "expression": {
                          "id": 1725,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1720,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1642,
                              "src": "9695:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1722,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1126,
                            "src": "9695:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "expression": {
                              "id": 1723,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1642,
                              "src": "9708:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1724,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "9708:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9695:22:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1726,
                        "nodeType": "ExpressionStatement",
                        "src": "9695:22:4"
                      },
                      {
                        "expression": {
                          "id": 1731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1727,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1642,
                              "src": "9731:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1729,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "9731:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 1730,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9743:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9731:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1732,
                        "nodeType": "ExpressionStatement",
                        "src": "9731:13:4"
                      },
                      {
                        "expression": {
                          "id": 1733,
                          "name": "rune",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1644,
                          "src": "9765:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 1648,
                        "id": 1734,
                        "nodeType": "Return",
                        "src": "9758:11:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 1741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 1737,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1642,
                        "src": "9790:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1739,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "9790:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 1740,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1671,
                      "src": "9803:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9790:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1742,
                  "nodeType": "ExpressionStatement",
                  "src": "9790:14:4"
                },
                {
                  "expression": {
                    "id": 1747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 1743,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1642,
                        "src": "9814:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1745,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "9814:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "id": 1746,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1671,
                      "src": "9827:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9814:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1748,
                  "nodeType": "ExpressionStatement",
                  "src": "9814:14:4"
                },
                {
                  "expression": {
                    "id": 1753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 1749,
                        "name": "rune",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1644,
                        "src": "9838:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1751,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "9838:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1752,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1671,
                      "src": "9850:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9838:13:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1754,
                  "nodeType": "ExpressionStatement",
                  "src": "9838:13:4"
                },
                {
                  "expression": {
                    "id": 1755,
                    "name": "rune",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1644,
                    "src": "9868:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1648,
                  "id": 1756,
                  "nodeType": "Return",
                  "src": "9861:11:4"
                }
              ]
            },
            "id": 1758,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "nextRune",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1645,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1642,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1758,
                  "src": "9019:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1641,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "9019:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1644,
                  "mutability": "mutable",
                  "name": "rune",
                  "nodeType": "VariableDeclaration",
                  "scope": 1758,
                  "src": "9038:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1643,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "9038:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9018:38:4"
            },
            "returnParameters": {
              "id": 1648,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1647,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1758,
                  "src": "9080:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1646,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "9080:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9079:14:4"
            },
            "scope": 2845,
            "src": "9001:878:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1770,
              "nodeType": "Block",
              "src": "10197:36:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1766,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1760,
                        "src": "10216:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "id": 1767,
                        "name": "ret",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1763,
                        "src": "10222:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      ],
                      "id": 1765,
                      "name": "nextRune",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1758,
                        1771
                      ],
                      "referencedDeclaration": 1758,
                      "src": "10207:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1127_memory_ptr_$_t_struct$_slice_$1127_memory_ptr_$returns$_t_struct$_slice_$1127_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (struct strings.slice memory)"
                      }
                    },
                    "id": 1768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10207:19:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 1769,
                  "nodeType": "ExpressionStatement",
                  "src": "10207:19:4"
                }
              ]
            },
            "id": 1771,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "nextRune",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1761,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1760,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1771,
                  "src": "10137:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1759,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "10137:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10136:19:4"
            },
            "returnParameters": {
              "id": 1764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1763,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1771,
                  "src": "10179:16:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1762,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "10179:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10178:18:4"
            },
            "scope": 2845,
            "src": "10119:114:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1917,
              "nodeType": "Block",
              "src": "10494:1013:4",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1778,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1773,
                        "src": "10508:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1779,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "10508:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1780,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10521:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10508:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1785,
                  "nodeType": "IfStatement",
                  "src": "10504:53:4",
                  "trueBody": {
                    "id": 1784,
                    "nodeType": "Block",
                    "src": "10524:33:4",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 1782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10545:1:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1777,
                        "id": 1783,
                        "nodeType": "Return",
                        "src": "10538:8:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1787
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1787,
                      "mutability": "mutable",
                      "name": "word",
                      "nodeType": "VariableDeclaration",
                      "scope": 1917,
                      "src": "10567:9:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1786,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10567:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1788,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10567:9:4"
                },
                {
                  "assignments": [
                    1790
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1790,
                      "mutability": "mutable",
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 1917,
                      "src": "10586:11:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1789,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10586:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1791,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10586:11:4"
                },
                {
                  "assignments": [
                    1793
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1793,
                      "mutability": "mutable",
                      "name": "divisor",
                      "nodeType": "VariableDeclaration",
                      "scope": 1917,
                      "src": "10607:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1792,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10607:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1797,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    },
                    "id": 1796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "32",
                      "id": 1794,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10622:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "hexValue": "323438",
                      "id": 1795,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10627:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_248_by_1",
                        "typeString": "int_const 248"
                      },
                      "value": "248"
                    },
                    "src": "10622:8:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10607:23:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "10694:38:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "10696:34:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "self",
                                      "nodeType": "YulIdentifier",
                                      "src": "10719:4:4"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "10725:2:4",
                                      "type": "",
                                      "value": "32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "10715:3:4"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "10715:13:4"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "10709:5:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "10709:20:4"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "10703:5:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10703:27:4"
                        },
                        "variableNames": [
                          {
                            "name": "word",
                            "nodeType": "YulIdentifier",
                            "src": "10696:4:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1773,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10719:4:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1787,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10696:4:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1798,
                  "nodeType": "InlineAssembly",
                  "src": "10685:47:4"
                },
                {
                  "assignments": [
                    1800
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1800,
                      "mutability": "mutable",
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 1917,
                      "src": "10741:6:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1799,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10741:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1804,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1801,
                      "name": "word",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1787,
                      "src": "10750:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "id": 1802,
                      "name": "divisor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1793,
                      "src": "10757:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10750:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10741:23:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1807,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1805,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1800,
                      "src": "10778:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "hexValue": "30783830",
                      "id": 1806,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10782:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "0x80"
                    },
                    "src": "10778:8:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1819,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 1817,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1800,
                        "src": "10853:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "hexValue": "30784530",
                        "id": 1818,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10857:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_224_by_1",
                          "typeString": "int_const 224"
                        },
                        "value": "0xE0"
                      },
                      "src": "10853:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1833,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1831,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1800,
                          "src": "10935:1:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "hexValue": "30784630",
                          "id": 1832,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10939:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_240_by_1",
                            "typeString": "int_const 240"
                          },
                          "value": "0xF0"
                        },
                        "src": "10935:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 1855,
                        "nodeType": "Block",
                        "src": "11014:63:4",
                        "statements": [
                          {
                            "expression": {
                              "id": 1849,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 1845,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1776,
                                "src": "11028:3:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1848,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1846,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1800,
                                  "src": "11034:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "hexValue": "30783037",
                                  "id": 1847,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11038:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_7_by_1",
                                    "typeString": "int_const 7"
                                  },
                                  "value": "0x07"
                                },
                                "src": "11034:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11028:14:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1850,
                            "nodeType": "ExpressionStatement",
                            "src": "11028:14:4"
                          },
                          {
                            "expression": {
                              "id": 1853,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 1851,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1790,
                                "src": "11056:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "hexValue": "34",
                                "id": 1852,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11065:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "11056:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1854,
                            "nodeType": "ExpressionStatement",
                            "src": "11056:10:4"
                          }
                        ]
                      },
                      "id": 1856,
                      "nodeType": "IfStatement",
                      "src": "10932:145:4",
                      "trueBody": {
                        "id": 1844,
                        "nodeType": "Block",
                        "src": "10945:63:4",
                        "statements": [
                          {
                            "expression": {
                              "id": 1838,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 1834,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1776,
                                "src": "10959:3:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1835,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1800,
                                  "src": "10965:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "hexValue": "30783046",
                                  "id": 1836,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10969:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_15_by_1",
                                    "typeString": "int_const 15"
                                  },
                                  "value": "0x0F"
                                },
                                "src": "10965:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10959:14:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1839,
                            "nodeType": "ExpressionStatement",
                            "src": "10959:14:4"
                          },
                          {
                            "expression": {
                              "id": 1842,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 1840,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1790,
                                "src": "10987:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "hexValue": "33",
                                "id": 1841,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10996:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "10987:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1843,
                            "nodeType": "ExpressionStatement",
                            "src": "10987:10:4"
                          }
                        ]
                      }
                    },
                    "id": 1857,
                    "nodeType": "IfStatement",
                    "src": "10850:227:4",
                    "trueBody": {
                      "id": 1830,
                      "nodeType": "Block",
                      "src": "10863:63:4",
                      "statements": [
                        {
                          "expression": {
                            "id": 1824,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1820,
                              "name": "ret",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1776,
                              "src": "10877:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1823,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1821,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1800,
                                "src": "10883:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "hexValue": "30783146",
                                "id": 1822,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10887:4:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x1F"
                              },
                              "src": "10883:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10877:14:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1825,
                          "nodeType": "ExpressionStatement",
                          "src": "10877:14:4"
                        },
                        {
                          "expression": {
                            "id": 1828,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1826,
                              "name": "length",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1790,
                              "src": "10905:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "hexValue": "32",
                              "id": 1827,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10914:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "10905:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1829,
                          "nodeType": "ExpressionStatement",
                          "src": "10905:10:4"
                        }
                      ]
                    }
                  },
                  "id": 1858,
                  "nodeType": "IfStatement",
                  "src": "10774:303:4",
                  "trueBody": {
                    "id": 1816,
                    "nodeType": "Block",
                    "src": "10788:56:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1810,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1808,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1776,
                            "src": "10802:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1809,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1800,
                            "src": "10808:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10802:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1811,
                        "nodeType": "ExpressionStatement",
                        "src": "10802:7:4"
                      },
                      {
                        "expression": {
                          "id": 1814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1812,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1790,
                            "src": "10823:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "31",
                            "id": 1813,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10832:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "10823:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1815,
                        "nodeType": "ExpressionStatement",
                        "src": "10823:10:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1859,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1790,
                      "src": "11133:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "expression": {
                        "id": 1860,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1773,
                        "src": "11142:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1861,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "11142:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11133:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1866,
                  "nodeType": "IfStatement",
                  "src": "11129:57:4",
                  "trueBody": {
                    "id": 1865,
                    "nodeType": "Block",
                    "src": "11153:33:4",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 1863,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11174:1:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1777,
                        "id": 1864,
                        "nodeType": "Return",
                        "src": "11167:8:4"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 1913,
                    "nodeType": "Block",
                    "src": "11230:250:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1881,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1877,
                            "name": "divisor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1793,
                            "src": "11244:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1880,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1878,
                              "name": "divisor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1793,
                              "src": "11254:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "hexValue": "323536",
                              "id": 1879,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11264:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_256_by_1",
                                "typeString": "int_const 256"
                              },
                              "value": "256"
                            },
                            "src": "11254:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11244:23:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1882,
                        "nodeType": "ExpressionStatement",
                        "src": "11244:23:4"
                      },
                      {
                        "expression": {
                          "id": 1890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1883,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1800,
                            "src": "11281:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1889,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1886,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 1884,
                                    "name": "word",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1787,
                                    "src": "11286:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "id": 1885,
                                    "name": "divisor",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1793,
                                    "src": "11293:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "11286:14:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 1887,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11285:16:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30784646",
                              "id": 1888,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11304:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_255_by_1",
                                "typeString": "int_const 255"
                              },
                              "value": "0xFF"
                            },
                            "src": "11285:23:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11281:27:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1891,
                        "nodeType": "ExpressionStatement",
                        "src": "11281:27:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1894,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1892,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1800,
                              "src": "11326:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30784330",
                              "id": 1893,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11330:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_192_by_1",
                                "typeString": "int_const 192"
                              },
                              "value": "0xC0"
                            },
                            "src": "11326:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30783830",
                            "id": 1895,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11338:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "0x80"
                          },
                          "src": "11326:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1900,
                        "nodeType": "IfStatement",
                        "src": "11322:105:4",
                        "trueBody": {
                          "id": 1899,
                          "nodeType": "Block",
                          "src": "11344:83:4",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "30",
                                "id": 1897,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11411:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 1777,
                              "id": 1898,
                              "nodeType": "Return",
                              "src": "11404:8:4"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1901,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1776,
                            "src": "11440:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1910,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1904,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 1902,
                                    "name": "ret",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1776,
                                    "src": "11447:3:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "hexValue": "3634",
                                    "id": 1903,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11453:2:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    "value": "64"
                                  },
                                  "src": "11447:8:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 1905,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11446:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "|",
                            "rightExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1908,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 1906,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1800,
                                    "src": "11460:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "hexValue": "30783346",
                                    "id": 1907,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11464:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_63_by_1",
                                      "typeString": "int_const 63"
                                    },
                                    "value": "0x3F"
                                  },
                                  "src": "11460:8:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 1909,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11459:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "11446:23:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11440:29:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1912,
                        "nodeType": "ExpressionStatement",
                        "src": "11440:29:4"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1873,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1871,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1868,
                      "src": "11213:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 1872,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1790,
                      "src": "11217:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11213:10:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1914,
                  "initializationExpression": {
                    "assignments": [
                      1868
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1868,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1914,
                        "src": "11201:6:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1867,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "11201:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 1870,
                    "initialValue": {
                      "hexValue": "31",
                      "id": 1869,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11210:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "11201:10:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 1875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "11225:3:4",
                      "subExpression": {
                        "id": 1874,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1868,
                        "src": "11225:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1876,
                    "nodeType": "ExpressionStatement",
                    "src": "11225:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "11196:284:4"
                },
                {
                  "expression": {
                    "id": 1915,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1776,
                    "src": "11497:3:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1777,
                  "id": 1916,
                  "nodeType": "Return",
                  "src": "11490:10:4"
                }
              ]
            },
            "id": 1918,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ord",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1774,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1773,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "10442:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1772,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "10442:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10441:19:4"
            },
            "returnParameters": {
              "id": 1777,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1776,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "10484:8:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1775,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10484:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10483:10:4"
            },
            "scope": 2845,
            "src": "10429:1078:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1926,
              "nodeType": "Block",
              "src": "11729:100:4",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "11748:75:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "11762:51:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "self",
                                      "nodeType": "YulIdentifier",
                                      "src": "11789:4:4"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "11795:2:4",
                                      "type": "",
                                      "value": "32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "11785:3:4"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "11785:13:4"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "11779:5:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11779:20:4"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "self",
                                  "nodeType": "YulIdentifier",
                                  "src": "11807:4:4"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "11801:5:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11801:11:4"
                            }
                          ],
                          "functionName": {
                            "name": "keccak256",
                            "nodeType": "YulIdentifier",
                            "src": "11769:9:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11769:44:4"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nodeType": "YulIdentifier",
                            "src": "11762:3:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1923,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11762:3:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1920,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11789:4:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1920,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11807:4:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1925,
                  "nodeType": "InlineAssembly",
                  "src": "11739:84:4"
                }
              ]
            },
            "id": 1927,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "keccak",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1921,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1920,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1927,
                  "src": "11674:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1919,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "11674:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11673:19:4"
            },
            "returnParameters": {
              "id": 1924,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1923,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1927,
                  "src": "11716:11:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1922,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11716:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11715:13:4"
            },
            "scope": 2845,
            "src": "11658:171:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1960,
              "nodeType": "Block",
              "src": "12167:456:4",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1940,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1936,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1929,
                        "src": "12181:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1937,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "12181:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 1938,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1931,
                        "src": "12193:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1939,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "12193:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12181:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1944,
                  "nodeType": "IfStatement",
                  "src": "12177:66:4",
                  "trueBody": {
                    "id": 1943,
                    "nodeType": "Block",
                    "src": "12206:37:4",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 1941,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12227:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 1935,
                        "id": 1942,
                        "nodeType": "Return",
                        "src": "12220:12:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1945,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1929,
                        "src": "12257:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1946,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "12257:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 1947,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1931,
                        "src": "12270:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1948,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "12270:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12257:24:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1953,
                  "nodeType": "IfStatement",
                  "src": "12253:66:4",
                  "trueBody": {
                    "id": 1952,
                    "nodeType": "Block",
                    "src": "12283:36:4",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 1950,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12304:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1935,
                        "id": 1951,
                        "nodeType": "Return",
                        "src": "12297:11:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1955
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1955,
                      "mutability": "mutable",
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 1960,
                      "src": "12329:10:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1954,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "12329:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1956,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12329:10:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "12358:237:4",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "12372:27:4",
                        "value": {
                          "arguments": [
                            {
                              "name": "needle",
                              "nodeType": "YulIdentifier",
                              "src": "12392:6:4"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "12386:5:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12386:13:4"
                        },
                        "variables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "12376:6:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "12412:37:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "self",
                                  "nodeType": "YulIdentifier",
                                  "src": "12437:4:4"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "12443:4:4",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "12433:3:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "12433:15:4"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "12427:5:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12427:22:4"
                        },
                        "variables": [
                          {
                            "name": "selfptr",
                            "nodeType": "YulTypedName",
                            "src": "12416:7:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "12462:41:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "needle",
                                  "nodeType": "YulIdentifier",
                                  "src": "12489:6:4"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "12497:4:4",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "12485:3:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "12485:17:4"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "12479:5:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12479:24:4"
                        },
                        "variables": [
                          {
                            "name": "needleptr",
                            "nodeType": "YulTypedName",
                            "src": "12466:9:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "12516:69:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "selfptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "12538:7:4"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "12547:6:4"
                                }
                              ],
                              "functionName": {
                                "name": "keccak256",
                                "nodeType": "YulIdentifier",
                                "src": "12528:9:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "12528:26:4"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "needleptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "12566:9:4"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "12577:6:4"
                                }
                              ],
                              "functionName": {
                                "name": "keccak256",
                                "nodeType": "YulIdentifier",
                                "src": "12556:9:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "12556:28:4"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "12525:2:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12525:60:4"
                        },
                        "variableNames": [
                          {
                            "name": "equal",
                            "nodeType": "YulIdentifier",
                            "src": "12516:5:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1955,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12516:5:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1931,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12392:6:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1931,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12489:6:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1929,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12437:4:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1957,
                  "nodeType": "InlineAssembly",
                  "src": "12349:246:4"
                },
                {
                  "expression": {
                    "id": 1958,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1955,
                    "src": "12611:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1935,
                  "id": 1959,
                  "nodeType": "Return",
                  "src": "12604:12:4"
                }
              ]
            },
            "id": 1961,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "startsWith",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1932,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1929,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1961,
                  "src": "12098:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1928,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "12098:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1931,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 1961,
                  "src": "12117:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1930,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "12117:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12097:40:4"
            },
            "returnParameters": {
              "id": 1935,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1934,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1961,
                  "src": "12161:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1933,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12161:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12160:6:4"
            },
            "scope": 2845,
            "src": "12078:545:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2010,
              "nodeType": "Block",
              "src": "12988:568:4",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1970,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1963,
                        "src": "13002:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1971,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "13002:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 1972,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1965,
                        "src": "13014:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1973,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "13014:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13002:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1978,
                  "nodeType": "IfStatement",
                  "src": "12998:65:4",
                  "trueBody": {
                    "id": 1977,
                    "nodeType": "Block",
                    "src": "13027:36:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1975,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1963,
                          "src": "13048:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 1969,
                        "id": 1976,
                        "nodeType": "Return",
                        "src": "13041:11:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1980
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1980,
                      "mutability": "mutable",
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 2010,
                      "src": "13073:10:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1979,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13073:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1982,
                  "initialValue": {
                    "hexValue": "74727565",
                    "id": 1981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "13086:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13073:17:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1987,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1983,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1963,
                        "src": "13104:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1984,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "13104:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 1985,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1965,
                        "src": "13117:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1986,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "13117:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13104:24:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1990,
                  "nodeType": "IfStatement",
                  "src": "13100:320:4",
                  "trueBody": {
                    "id": 1989,
                    "nodeType": "Block",
                    "src": "13130:290:4",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "13153:257:4",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13171:27:4",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "needle",
                                    "nodeType": "YulIdentifier",
                                    "src": "13191:6:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "13185:5:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13185:13:4"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "13175:6:4",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13215:37:4",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "self",
                                        "nodeType": "YulIdentifier",
                                        "src": "13240:4:4"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13246:4:4",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13236:3:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13236:15:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "13230:5:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13230:22:4"
                              },
                              "variables": [
                                {
                                  "name": "selfptr",
                                  "nodeType": "YulTypedName",
                                  "src": "13219:7:4",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13269:41:4",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "needle",
                                        "nodeType": "YulIdentifier",
                                        "src": "13296:6:4"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13304:4:4",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13292:3:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13292:17:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "13286:5:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13286:24:4"
                              },
                              "variables": [
                                {
                                  "name": "needleptr",
                                  "nodeType": "YulTypedName",
                                  "src": "13273:9:4",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13327:69:4",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "selfptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "13349:7:4"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "13358:6:4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nodeType": "YulIdentifier",
                                      "src": "13339:9:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13339:26:4"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "needleptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "13377:9:4"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "13388:6:4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nodeType": "YulIdentifier",
                                      "src": "13367:9:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13367:28:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "13336:2:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13336:60:4"
                              },
                              "variableNames": [
                                {
                                  "name": "equal",
                                  "nodeType": "YulIdentifier",
                                  "src": "13327:5:4"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "byzantium",
                        "externalReferences": [
                          {
                            "declaration": 1980,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13327:5:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1965,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13191:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1965,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13296:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1963,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13240:4:4",
                            "valueSize": 1
                          }
                        ],
                        "id": 1988,
                        "nodeType": "InlineAssembly",
                        "src": "13144:266:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "id": 1991,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1980,
                    "src": "13434:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2007,
                  "nodeType": "IfStatement",
                  "src": "13430:98:4",
                  "trueBody": {
                    "id": 2006,
                    "nodeType": "Block",
                    "src": "13441:87:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1992,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1963,
                              "src": "13455:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1994,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "13455:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "expression": {
                              "id": 1995,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1965,
                              "src": "13468:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1996,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "13468:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13455:24:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1998,
                        "nodeType": "ExpressionStatement",
                        "src": "13455:24:4"
                      },
                      {
                        "expression": {
                          "id": 2004,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1999,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1963,
                              "src": "13493:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2001,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1126,
                            "src": "13493:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "expression": {
                              "id": 2002,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1965,
                              "src": "13506:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2003,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "13506:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13493:24:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2005,
                        "nodeType": "ExpressionStatement",
                        "src": "13493:24:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 2008,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1963,
                    "src": "13545:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1969,
                  "id": 2009,
                  "nodeType": "Return",
                  "src": "13538:11:4"
                }
              ]
            },
            "id": 2011,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "beyond",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1966,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1963,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2011,
                  "src": "12911:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1962,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "12911:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1965,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2011,
                  "src": "12930:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1964,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "12930:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12910:40:4"
            },
            "returnParameters": {
              "id": 1969,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1968,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2011,
                  "src": "12974:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1967,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "12974:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12973:14:4"
            },
            "scope": 2845,
            "src": "12895:661:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2054,
              "nodeType": "Block",
              "src": "13893:466:4",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2024,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2020,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2013,
                        "src": "13907:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2021,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "13907:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 2022,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2015,
                        "src": "13919:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2023,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "13919:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13907:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2028,
                  "nodeType": "IfStatement",
                  "src": "13903:66:4",
                  "trueBody": {
                    "id": 2027,
                    "nodeType": "Block",
                    "src": "13932:37:4",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 2025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13953:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 2019,
                        "id": 2026,
                        "nodeType": "Return",
                        "src": "13946:12:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2030
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2030,
                      "mutability": "mutable",
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2054,
                      "src": "13979:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2029,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13979:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2039,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2035,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2031,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2013,
                          "src": "13994:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2032,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "13994:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 2033,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2013,
                          "src": "14006:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2034,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "14006:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "13994:21:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "expression": {
                        "id": 2036,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2015,
                        "src": "14018:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2037,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "14018:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13994:35:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13979:50:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2040,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2030,
                      "src": "14044:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 2041,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2015,
                        "src": "14055:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2042,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "14055:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14044:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2047,
                  "nodeType": "IfStatement",
                  "src": "14040:64:4",
                  "trueBody": {
                    "id": 2046,
                    "nodeType": "Block",
                    "src": "14068:36:4",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 2044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14089:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 2019,
                        "id": 2045,
                        "nodeType": "Return",
                        "src": "14082:11:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2049
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2049,
                      "mutability": "mutable",
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 2054,
                      "src": "14114:10:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 2048,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "14114:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2050,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14114:10:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "14143:187:4",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "14157:27:4",
                        "value": {
                          "arguments": [
                            {
                              "name": "needle",
                              "nodeType": "YulIdentifier",
                              "src": "14177:6:4"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "14171:5:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14171:13:4"
                        },
                        "variables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "14161:6:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "14197:41:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "needle",
                                  "nodeType": "YulIdentifier",
                                  "src": "14224:6:4"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "14232:4:4",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "14220:3:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "14220:17:4"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "14214:5:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14214:24:4"
                        },
                        "variables": [
                          {
                            "name": "needleptr",
                            "nodeType": "YulTypedName",
                            "src": "14201:9:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "14251:69:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "selfptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "14273:7:4"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "14282:6:4"
                                }
                              ],
                              "functionName": {
                                "name": "keccak256",
                                "nodeType": "YulIdentifier",
                                "src": "14263:9:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "14263:26:4"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "needleptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "14301:9:4"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "14312:6:4"
                                }
                              ],
                              "functionName": {
                                "name": "keccak256",
                                "nodeType": "YulIdentifier",
                                "src": "14291:9:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "14291:28:4"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "14260:2:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14260:60:4"
                        },
                        "variableNames": [
                          {
                            "name": "equal",
                            "nodeType": "YulIdentifier",
                            "src": "14251:5:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 2049,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14251:5:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2015,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14177:6:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2015,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14224:6:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2030,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14273:7:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 2051,
                  "nodeType": "InlineAssembly",
                  "src": "14134:196:4"
                },
                {
                  "expression": {
                    "id": 2052,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2049,
                    "src": "14347:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2019,
                  "id": 2053,
                  "nodeType": "Return",
                  "src": "14340:12:4"
                }
              ]
            },
            "id": 2055,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "endsWith",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2016,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2013,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2055,
                  "src": "13824:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2012,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "13824:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2015,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2055,
                  "src": "13843:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2014,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "13843:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13823:40:4"
            },
            "returnParameters": {
              "id": 2019,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2018,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2055,
                  "src": "13887:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2017,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13887:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13886:6:4"
            },
            "scope": 2845,
            "src": "13806:553:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2107,
              "nodeType": "Block",
              "src": "14715:534:4",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2064,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2057,
                        "src": "14729:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2065,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "14729:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 2066,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2059,
                        "src": "14741:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2067,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "14741:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14729:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2072,
                  "nodeType": "IfStatement",
                  "src": "14725:65:4",
                  "trueBody": {
                    "id": 2071,
                    "nodeType": "Block",
                    "src": "14754:36:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2069,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2057,
                          "src": "14775:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 2063,
                        "id": 2070,
                        "nodeType": "Return",
                        "src": "14768:11:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2074
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2074,
                      "mutability": "mutable",
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2107,
                      "src": "14800:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2073,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "14800:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2083,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2079,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2075,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2057,
                          "src": "14815:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2076,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "14815:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 2077,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2057,
                          "src": "14827:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2078,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "14827:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "14815:21:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "expression": {
                        "id": 2080,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2059,
                        "src": "14839:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2081,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "14839:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14815:35:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14800:50:4"
                },
                {
                  "assignments": [
                    2085
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2085,
                      "mutability": "mutable",
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 2107,
                      "src": "14860:10:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 2084,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "14860:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2087,
                  "initialValue": {
                    "hexValue": "74727565",
                    "id": 2086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "14873:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14860:17:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2088,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2074,
                      "src": "14891:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 2089,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2059,
                        "src": "14902:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2090,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "14902:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14891:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2094,
                  "nodeType": "IfStatement",
                  "src": "14887:264:4",
                  "trueBody": {
                    "id": 2093,
                    "nodeType": "Block",
                    "src": "14915:236:4",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "14938:203:4",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14956:27:4",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "needle",
                                    "nodeType": "YulIdentifier",
                                    "src": "14976:6:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "14970:5:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14970:13:4"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "14960:6:4",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15000:41:4",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "needle",
                                        "nodeType": "YulIdentifier",
                                        "src": "15027:6:4"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15035:4:4",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15023:3:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15023:17:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "15017:5:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15017:24:4"
                              },
                              "variables": [
                                {
                                  "name": "needleptr",
                                  "nodeType": "YulTypedName",
                                  "src": "15004:9:4",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15058:69:4",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "selfptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "15080:7:4"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "15089:6:4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nodeType": "YulIdentifier",
                                      "src": "15070:9:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15070:26:4"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "needleptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "15108:9:4"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "15119:6:4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nodeType": "YulIdentifier",
                                      "src": "15098:9:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15098:28:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "15067:2:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15067:60:4"
                              },
                              "variableNames": [
                                {
                                  "name": "equal",
                                  "nodeType": "YulIdentifier",
                                  "src": "15058:5:4"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "byzantium",
                        "externalReferences": [
                          {
                            "declaration": 2085,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15058:5:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2059,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "14976:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2059,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15027:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2074,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15080:7:4",
                            "valueSize": 1
                          }
                        ],
                        "id": 2092,
                        "nodeType": "InlineAssembly",
                        "src": "14929:212:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "id": 2095,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2085,
                    "src": "15165:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2104,
                  "nodeType": "IfStatement",
                  "src": "15161:60:4",
                  "trueBody": {
                    "id": 2103,
                    "nodeType": "Block",
                    "src": "15172:49:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2096,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2057,
                              "src": "15186:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2098,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "15186:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "expression": {
                              "id": 2099,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2059,
                              "src": "15199:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2100,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "15199:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15186:24:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2102,
                        "nodeType": "ExpressionStatement",
                        "src": "15186:24:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 2105,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2057,
                    "src": "15238:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2063,
                  "id": 2106,
                  "nodeType": "Return",
                  "src": "15231:11:4"
                }
              ]
            },
            "id": 2108,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "until",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2060,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2057,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2108,
                  "src": "14638:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2056,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "14638:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2059,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2108,
                  "src": "14657:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2058,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "14657:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14637:40:4"
            },
            "returnParameters": {
              "id": 2063,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2062,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2108,
                  "src": "14701:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2061,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "14701:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14700:14:4"
            },
            "scope": 2845,
            "src": "14623:626:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2229,
              "nodeType": "Block",
              "src": "15511:1267:4",
              "statements": [
                {
                  "assignments": [
                    2122
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2122,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2229,
                      "src": "15521:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2121,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "15521:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2124,
                  "initialValue": {
                    "id": 2123,
                    "name": "selfptr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2112,
                    "src": "15532:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15521:18:4"
                },
                {
                  "assignments": [
                    2126
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2126,
                      "mutability": "mutable",
                      "name": "idx",
                      "nodeType": "VariableDeclaration",
                      "scope": 2229,
                      "src": "15549:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2125,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "15549:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2127,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15549:8:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2130,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2128,
                      "name": "needlelen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2114,
                      "src": "15572:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "id": 2129,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2110,
                      "src": "15585:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15572:20:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2224,
                  "nodeType": "IfStatement",
                  "src": "15568:1170:4",
                  "trueBody": {
                    "id": 2223,
                    "nodeType": "Block",
                    "src": "15594:1144:4",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2131,
                            "name": "needlelen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2114,
                            "src": "15612:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 2132,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15625:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "15612:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2221,
                          "nodeType": "Block",
                          "src": "16262:466:4",
                          "statements": [
                            {
                              "assignments": [
                                2190
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2190,
                                  "mutability": "mutable",
                                  "name": "hash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2221,
                                  "src": "16329:12:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2189,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16329:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2191,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "16329:12:4"
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "16368:43:4",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "16370:39:4",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "needleptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "16388:9:4"
                                        },
                                        {
                                          "name": "needlelen",
                                          "nodeType": "YulIdentifier",
                                          "src": "16399:9:4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "keccak256",
                                        "nodeType": "YulIdentifier",
                                        "src": "16378:9:4"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16378:31:4"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "hash",
                                        "nodeType": "YulIdentifier",
                                        "src": "16370:4:4"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "byzantium",
                              "externalReferences": [
                                {
                                  "declaration": 2190,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "16370:4:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2114,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "16399:9:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2116,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "16388:9:4",
                                  "valueSize": 1
                                }
                              ],
                              "id": 2192,
                              "nodeType": "InlineAssembly",
                              "src": "16359:52:4"
                            },
                            {
                              "body": {
                                "id": 2219,
                                "nodeType": "Block",
                                "src": "16478:236:4",
                                "statements": [
                                  {
                                    "assignments": [
                                      2206
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 2206,
                                        "mutability": "mutable",
                                        "name": "testHash",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 2219,
                                        "src": "16500:16:4",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 2205,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "16500:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 2207,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "16500:16:4"
                                  },
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "16547:41:4",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "16549:37:4",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "ptr",
                                                "nodeType": "YulIdentifier",
                                                "src": "16571:3:4"
                                              },
                                              {
                                                "name": "needlelen",
                                                "nodeType": "YulIdentifier",
                                                "src": "16576:9:4"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "keccak256",
                                              "nodeType": "YulIdentifier",
                                              "src": "16561:9:4"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "16561:25:4"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "testHash",
                                              "nodeType": "YulIdentifier",
                                              "src": "16549:8:4"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "evmVersion": "byzantium",
                                    "externalReferences": [
                                      {
                                        "declaration": 2114,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16576:9:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2122,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16571:3:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2206,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16549:8:4",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 2208,
                                    "nodeType": "InlineAssembly",
                                    "src": "16538:50:4"
                                  },
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "id": 2211,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2209,
                                        "name": "hash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2190,
                                        "src": "16613:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "id": 2210,
                                        "name": "testHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2206,
                                        "src": "16621:8:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "16613:16:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 2214,
                                    "nodeType": "IfStatement",
                                    "src": "16609:56:4",
                                    "trueBody": {
                                      "expression": {
                                        "id": 2212,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2122,
                                        "src": "16662:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 2120,
                                      "id": 2213,
                                      "nodeType": "Return",
                                      "src": "16655:10:4"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 2217,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 2215,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2122,
                                        "src": "16687:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "hexValue": "31",
                                        "id": 2216,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "16694:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "16687:8:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2218,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16687:8:4"
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2201,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2197,
                                  "name": "idx",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2126,
                                  "src": "16443:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2200,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2198,
                                    "name": "selflen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2110,
                                    "src": "16450:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 2199,
                                    "name": "needlelen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2114,
                                    "src": "16460:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "16450:19:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16443:26:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2220,
                              "initializationExpression": {
                                "expression": {
                                  "id": 2195,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 2193,
                                    "name": "idx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2126,
                                    "src": "16434:3:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "hexValue": "30",
                                    "id": 2194,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16440:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "16434:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2196,
                                "nodeType": "ExpressionStatement",
                                "src": "16434:7:4"
                              },
                              "loopExpression": {
                                "expression": {
                                  "id": 2203,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "++",
                                  "prefix": false,
                                  "src": "16471:5:4",
                                  "subExpression": {
                                    "id": 2202,
                                    "name": "idx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2126,
                                    "src": "16471:3:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2204,
                                "nodeType": "ExpressionStatement",
                                "src": "16471:5:4"
                              },
                              "nodeType": "ForStatement",
                              "src": "16429:285:4"
                            }
                          ]
                        },
                        "id": 2222,
                        "nodeType": "IfStatement",
                        "src": "15608:1120:4",
                        "trueBody": {
                          "id": 2188,
                          "nodeType": "Block",
                          "src": "15629:627:4",
                          "statements": [
                            {
                              "assignments": [
                                2135
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2135,
                                  "mutability": "mutable",
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2188,
                                  "src": "15647:12:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2134,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15647:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2152,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 2150,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "~",
                                    "prefix": true,
                                    "src": "15670:34:4",
                                    "subExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 2148,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 2146,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "hexValue": "32",
                                              "id": 2138,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "15672:1:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_2_by_1",
                                                "typeString": "int_const 2"
                                              },
                                              "value": "2"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "**",
                                            "rightExpression": {
                                              "components": [
                                                {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 2144,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "hexValue": "38",
                                                    "id": 2139,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "15678:1:4",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_8_by_1",
                                                      "typeString": "int_const 8"
                                                    },
                                                    "value": "8"
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "*",
                                                  "rightExpression": {
                                                    "components": [
                                                      {
                                                        "commonType": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        "id": 2142,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                          "hexValue": "3332",
                                                          "id": 2140,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "15683:2:4",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_32_by_1",
                                                            "typeString": "int_const 32"
                                                          },
                                                          "value": "32"
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "-",
                                                        "rightExpression": {
                                                          "id": 2141,
                                                          "name": "needlelen",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 2114,
                                                          "src": "15688:9:4",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "src": "15683:14:4",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "id": 2143,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "15682:16:4",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "15678:20:4",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 2145,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "15677:22:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "15672:27:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "hexValue": "31",
                                            "id": 2147,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "15702:1:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "15672:31:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 2149,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "15671:33:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2137,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15662:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": {
                                    "id": 2136,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15662:7:4",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2151,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15662:43:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15647:58:4"
                            },
                            {
                              "assignments": [
                                2154
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2154,
                                  "mutability": "mutable",
                                  "name": "needledata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2188,
                                  "src": "15724:18:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2153,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15724:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2155,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15724:18:4"
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "15769:45:4",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "15771:41:4",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "needleptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "15795:9:4"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "15789:5:4"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "15789:16:4"
                                        },
                                        {
                                          "name": "mask",
                                          "nodeType": "YulIdentifier",
                                          "src": "15807:4:4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "15785:3:4"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15785:27:4"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "needledata",
                                        "nodeType": "YulIdentifier",
                                        "src": "15771:10:4"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "byzantium",
                              "externalReferences": [
                                {
                                  "declaration": 2135,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "15807:4:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2154,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "15771:10:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2116,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "15795:9:4",
                                  "valueSize": 1
                                }
                              ],
                              "id": 2156,
                              "nodeType": "InlineAssembly",
                              "src": "15760:54:4"
                            },
                            {
                              "assignments": [
                                2158
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2158,
                                  "mutability": "mutable",
                                  "name": "end",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2188,
                                  "src": "15832:8:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 2157,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15832:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2164,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2163,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2161,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2159,
                                    "name": "selfptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2112,
                                    "src": "15843:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "id": 2160,
                                    "name": "selflen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2110,
                                    "src": "15853:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "15843:17:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 2162,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2114,
                                  "src": "15863:9:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15843:29:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15832:40:4"
                            },
                            {
                              "assignments": [
                                2166
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2166,
                                  "mutability": "mutable",
                                  "name": "ptrdata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2188,
                                  "src": "15890:15:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2165,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15890:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2167,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15890:15:4"
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "15932:36:4",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "15934:32:4",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "15955:3:4"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "15949:5:4"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "15949:10:4"
                                        },
                                        {
                                          "name": "mask",
                                          "nodeType": "YulIdentifier",
                                          "src": "15961:4:4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "15945:3:4"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15945:21:4"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "ptrdata",
                                        "nodeType": "YulIdentifier",
                                        "src": "15934:7:4"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "byzantium",
                              "externalReferences": [
                                {
                                  "declaration": 2135,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "15961:4:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2122,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "15955:3:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2166,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "15934:7:4",
                                  "valueSize": 1
                                }
                              ],
                              "id": 2168,
                              "nodeType": "InlineAssembly",
                              "src": "15923:45:4"
                            },
                            {
                              "body": {
                                "id": 2184,
                                "nodeType": "Block",
                                "src": "16016:198:4",
                                "statements": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2174,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2172,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2122,
                                        "src": "16042:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "id": 2173,
                                        "name": "end",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2158,
                                        "src": "16049:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "16042:10:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 2179,
                                    "nodeType": "IfStatement",
                                    "src": "16038:64:4",
                                    "trueBody": {
                                      "expression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2177,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2175,
                                          "name": "selfptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2112,
                                          "src": "16085:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 2176,
                                          "name": "selflen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2110,
                                          "src": "16095:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "16085:17:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 2120,
                                      "id": 2178,
                                      "nodeType": "Return",
                                      "src": "16078:24:4"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 2181,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "16124:5:4",
                                      "subExpression": {
                                        "id": 2180,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2122,
                                        "src": "16124:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2182,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16124:5:4"
                                  },
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "16160:36:4",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "16162:32:4",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "ptr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "16183:3:4"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "16177:5:4"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "16177:10:4"
                                              },
                                              {
                                                "name": "mask",
                                                "nodeType": "YulIdentifier",
                                                "src": "16189:4:4"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "16173:3:4"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "16173:21:4"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "ptrdata",
                                              "nodeType": "YulIdentifier",
                                              "src": "16162:7:4"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "evmVersion": "byzantium",
                                    "externalReferences": [
                                      {
                                        "declaration": 2135,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16189:4:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2122,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16183:3:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2166,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16162:7:4",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 2183,
                                    "nodeType": "InlineAssembly",
                                    "src": "16151:45:4"
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 2171,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2169,
                                  "name": "ptrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2166,
                                  "src": "15993:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "id": 2170,
                                  "name": "needledata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2154,
                                  "src": "16004:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "15993:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2185,
                              "nodeType": "WhileStatement",
                              "src": "15986:228:4"
                            },
                            {
                              "expression": {
                                "id": 2186,
                                "name": "ptr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2122,
                                "src": "16238:3:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 2120,
                              "id": 2187,
                              "nodeType": "Return",
                              "src": "16231:10:4"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2225,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2112,
                      "src": "16754:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 2226,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2110,
                      "src": "16764:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16754:17:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2120,
                  "id": 2228,
                  "nodeType": "Return",
                  "src": "16747:24:4"
                }
              ]
            },
            "id": 2230,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "findPtr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2117,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2110,
                  "mutability": "mutable",
                  "name": "selflen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2230,
                  "src": "15423:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2109,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15423:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2112,
                  "mutability": "mutable",
                  "name": "selfptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2230,
                  "src": "15437:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2111,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15437:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2114,
                  "mutability": "mutable",
                  "name": "needlelen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2230,
                  "src": "15451:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2113,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15451:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2116,
                  "mutability": "mutable",
                  "name": "needleptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2230,
                  "src": "15467:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2115,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15467:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15422:60:4"
            },
            "returnParameters": {
              "id": 2120,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2119,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2230,
                  "src": "15505:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2118,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15505:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15504:6:4"
            },
            "scope": 2845,
            "src": "15406:1372:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2347,
              "nodeType": "Block",
              "src": "17037:1270:4",
              "statements": [
                {
                  "assignments": [
                    2244
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2244,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2347,
                      "src": "17047:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2243,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "17047:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2245,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17047:8:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2246,
                      "name": "needlelen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2236,
                      "src": "17070:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "id": 2247,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2232,
                      "src": "17083:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17070:20:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2344,
                  "nodeType": "IfStatement",
                  "src": "17066:1211:4",
                  "trueBody": {
                    "id": 2343,
                    "nodeType": "Block",
                    "src": "17092:1185:4",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2251,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2249,
                            "name": "needlelen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2236,
                            "src": "17110:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 2250,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17123:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "17110:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2341,
                          "nodeType": "Block",
                          "src": "17761:506:4",
                          "statements": [
                            {
                              "assignments": [
                                2308
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2308,
                                  "mutability": "mutable",
                                  "name": "hash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2341,
                                  "src": "17828:12:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2307,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17828:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2309,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17828:12:4"
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "17867:43:4",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "17869:39:4",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "needleptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "17887:9:4"
                                        },
                                        {
                                          "name": "needlelen",
                                          "nodeType": "YulIdentifier",
                                          "src": "17898:9:4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "keccak256",
                                        "nodeType": "YulIdentifier",
                                        "src": "17877:9:4"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17877:31:4"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "hash",
                                        "nodeType": "YulIdentifier",
                                        "src": "17869:4:4"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "byzantium",
                              "externalReferences": [
                                {
                                  "declaration": 2308,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17869:4:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2236,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17898:9:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2238,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17887:9:4",
                                  "valueSize": 1
                                }
                              ],
                              "id": 2310,
                              "nodeType": "InlineAssembly",
                              "src": "17858:52:4"
                            },
                            {
                              "expression": {
                                "id": 2318,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2311,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2244,
                                  "src": "17927:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2317,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2312,
                                    "name": "selfptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2234,
                                    "src": "17933:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2315,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2313,
                                          "name": "selflen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2232,
                                          "src": "17944:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "id": 2314,
                                          "name": "needlelen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2236,
                                          "src": "17954:9:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "17944:19:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 2316,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "17943:21:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "17933:31:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17927:37:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2319,
                              "nodeType": "ExpressionStatement",
                              "src": "17927:37:4"
                            },
                            {
                              "body": {
                                "id": 2339,
                                "nodeType": "Block",
                                "src": "18005:248:4",
                                "statements": [
                                  {
                                    "assignments": [
                                      2324
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 2324,
                                        "mutability": "mutable",
                                        "name": "testHash",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 2339,
                                        "src": "18027:16:4",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 2323,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "18027:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 2325,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "18027:16:4"
                                  },
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "18074:41:4",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "18076:37:4",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "ptr",
                                                "nodeType": "YulIdentifier",
                                                "src": "18098:3:4"
                                              },
                                              {
                                                "name": "needlelen",
                                                "nodeType": "YulIdentifier",
                                                "src": "18103:9:4"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "keccak256",
                                              "nodeType": "YulIdentifier",
                                              "src": "18088:9:4"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "18088:25:4"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "testHash",
                                              "nodeType": "YulIdentifier",
                                              "src": "18076:8:4"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "evmVersion": "byzantium",
                                    "externalReferences": [
                                      {
                                        "declaration": 2236,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "18103:9:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2244,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "18098:3:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2324,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "18076:8:4",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 2326,
                                    "nodeType": "InlineAssembly",
                                    "src": "18065:50:4"
                                  },
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "id": 2329,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2327,
                                        "name": "hash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2308,
                                        "src": "18140:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "id": 2328,
                                        "name": "testHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2324,
                                        "src": "18148:8:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "18140:16:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 2334,
                                    "nodeType": "IfStatement",
                                    "src": "18136:68:4",
                                    "trueBody": {
                                      "expression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2332,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2330,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2244,
                                          "src": "18189:3:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 2331,
                                          "name": "needlelen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2236,
                                          "src": "18195:9:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "18189:15:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 2242,
                                      "id": 2333,
                                      "nodeType": "Return",
                                      "src": "18182:22:4"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 2337,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 2335,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2244,
                                        "src": "18226:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "-=",
                                      "rightHandSide": {
                                        "hexValue": "31",
                                        "id": 2336,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "18233:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "18226:8:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2338,
                                    "nodeType": "ExpressionStatement",
                                    "src": "18226:8:4"
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2322,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2320,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2244,
                                  "src": "17989:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "id": 2321,
                                  "name": "selfptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2234,
                                  "src": "17996:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17989:14:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2340,
                              "nodeType": "WhileStatement",
                              "src": "17982:271:4"
                            }
                          ]
                        },
                        "id": 2342,
                        "nodeType": "IfStatement",
                        "src": "17106:1161:4",
                        "trueBody": {
                          "id": 2306,
                          "nodeType": "Block",
                          "src": "17127:628:4",
                          "statements": [
                            {
                              "assignments": [
                                2253
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2253,
                                  "mutability": "mutable",
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2306,
                                  "src": "17145:12:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2252,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17145:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2270,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 2268,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "~",
                                    "prefix": true,
                                    "src": "17168:34:4",
                                    "subExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 2266,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 2264,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "hexValue": "32",
                                              "id": 2256,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "17170:1:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_2_by_1",
                                                "typeString": "int_const 2"
                                              },
                                              "value": "2"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "**",
                                            "rightExpression": {
                                              "components": [
                                                {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 2262,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "hexValue": "38",
                                                    "id": 2257,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "17176:1:4",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_8_by_1",
                                                      "typeString": "int_const 8"
                                                    },
                                                    "value": "8"
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "*",
                                                  "rightExpression": {
                                                    "components": [
                                                      {
                                                        "commonType": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        "id": 2260,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                          "hexValue": "3332",
                                                          "id": 2258,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "17181:2:4",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_32_by_1",
                                                            "typeString": "int_const 32"
                                                          },
                                                          "value": "32"
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "-",
                                                        "rightExpression": {
                                                          "id": 2259,
                                                          "name": "needlelen",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 2236,
                                                          "src": "17186:9:4",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "src": "17181:14:4",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "id": 2261,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "17180:16:4",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "17176:20:4",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 2263,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "17175:22:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "17170:27:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "hexValue": "31",
                                            "id": 2265,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "17200:1:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "17170:31:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 2267,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "17169:33:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2255,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "17160:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": {
                                    "id": 2254,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17160:7:4",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2269,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17160:43:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17145:58:4"
                            },
                            {
                              "assignments": [
                                2272
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2272,
                                  "mutability": "mutable",
                                  "name": "needledata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2306,
                                  "src": "17222:18:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2271,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17222:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2273,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17222:18:4"
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "17267:45:4",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "17269:41:4",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "needleptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "17293:9:4"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "17287:5:4"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "17287:16:4"
                                        },
                                        {
                                          "name": "mask",
                                          "nodeType": "YulIdentifier",
                                          "src": "17305:4:4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "17283:3:4"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17283:27:4"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "needledata",
                                        "nodeType": "YulIdentifier",
                                        "src": "17269:10:4"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "byzantium",
                              "externalReferences": [
                                {
                                  "declaration": 2253,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17305:4:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2272,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17269:10:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2238,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17293:9:4",
                                  "valueSize": 1
                                }
                              ],
                              "id": 2274,
                              "nodeType": "InlineAssembly",
                              "src": "17258:54:4"
                            },
                            {
                              "expression": {
                                "id": 2281,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2275,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2244,
                                  "src": "17330:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2280,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2278,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2276,
                                      "name": "selfptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2234,
                                      "src": "17336:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 2277,
                                      "name": "selflen",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2232,
                                      "src": "17346:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "17336:17:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 2279,
                                    "name": "needlelen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2236,
                                    "src": "17356:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "17336:29:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17330:35:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2282,
                              "nodeType": "ExpressionStatement",
                              "src": "17330:35:4"
                            },
                            {
                              "assignments": [
                                2284
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2284,
                                  "mutability": "mutable",
                                  "name": "ptrdata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2306,
                                  "src": "17383:15:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2283,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17383:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2285,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17383:15:4"
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "17425:36:4",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "17427:32:4",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "17448:3:4"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "17442:5:4"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "17442:10:4"
                                        },
                                        {
                                          "name": "mask",
                                          "nodeType": "YulIdentifier",
                                          "src": "17454:4:4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "17438:3:4"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17438:21:4"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "ptrdata",
                                        "nodeType": "YulIdentifier",
                                        "src": "17427:7:4"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "byzantium",
                              "externalReferences": [
                                {
                                  "declaration": 2253,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17454:4:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2244,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17448:3:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2284,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17427:7:4",
                                  "valueSize": 1
                                }
                              ],
                              "id": 2286,
                              "nodeType": "InlineAssembly",
                              "src": "17416:45:4"
                            },
                            {
                              "body": {
                                "id": 2300,
                                "nodeType": "Block",
                                "src": "17509:192:4",
                                "statements": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2292,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2290,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2244,
                                        "src": "17535:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "id": 2291,
                                        "name": "selfptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2234,
                                        "src": "17542:7:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "17535:14:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 2295,
                                    "nodeType": "IfStatement",
                                    "src": "17531:58:4",
                                    "trueBody": {
                                      "expression": {
                                        "id": 2293,
                                        "name": "selfptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2234,
                                        "src": "17582:7:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 2242,
                                      "id": 2294,
                                      "nodeType": "Return",
                                      "src": "17575:14:4"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 2297,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "--",
                                      "prefix": false,
                                      "src": "17611:5:4",
                                      "subExpression": {
                                        "id": 2296,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2244,
                                        "src": "17611:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2298,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17611:5:4"
                                  },
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "17647:36:4",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "17649:32:4",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "ptr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "17670:3:4"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "17664:5:4"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "17664:10:4"
                                              },
                                              {
                                                "name": "mask",
                                                "nodeType": "YulIdentifier",
                                                "src": "17676:4:4"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "17660:3:4"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "17660:21:4"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "ptrdata",
                                              "nodeType": "YulIdentifier",
                                              "src": "17649:7:4"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "evmVersion": "byzantium",
                                    "externalReferences": [
                                      {
                                        "declaration": 2253,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "17676:4:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2244,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "17670:3:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2284,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "17649:7:4",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 2299,
                                    "nodeType": "InlineAssembly",
                                    "src": "17638:45:4"
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 2289,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2287,
                                  "name": "ptrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2284,
                                  "src": "17486:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "id": 2288,
                                  "name": "needledata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2272,
                                  "src": "17497:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "17486:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2301,
                              "nodeType": "WhileStatement",
                              "src": "17479:222:4"
                            },
                            {
                              "expression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2304,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2302,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2244,
                                  "src": "17725:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 2303,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2236,
                                  "src": "17731:9:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17725:15:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 2242,
                              "id": 2305,
                              "nodeType": "Return",
                              "src": "17718:22:4"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 2345,
                    "name": "selfptr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2234,
                    "src": "18293:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2242,
                  "id": 2346,
                  "nodeType": "Return",
                  "src": "18286:14:4"
                }
              ]
            },
            "id": 2348,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rfindPtr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2232,
                  "mutability": "mutable",
                  "name": "selflen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "16949:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2231,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16949:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2234,
                  "mutability": "mutable",
                  "name": "selfptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "16963:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2233,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16963:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2236,
                  "mutability": "mutable",
                  "name": "needlelen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "16977:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2235,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16977:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2238,
                  "mutability": "mutable",
                  "name": "needleptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "16993:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2237,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16993:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16948:60:4"
            },
            "returnParameters": {
              "id": 2242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2241,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "17031:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2240,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "17031:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17030:6:4"
            },
            "scope": 2845,
            "src": "16931:1376:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2387,
              "nodeType": "Block",
              "src": "18734:167:4",
              "statements": [
                {
                  "assignments": [
                    2358
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2358,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2387,
                      "src": "18744:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2357,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "18744:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2369,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 2360,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2350,
                          "src": "18763:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2361,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "18763:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2362,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2350,
                          "src": "18774:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2363,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "18774:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2364,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2352,
                          "src": "18785:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2365,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "18785:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2366,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2352,
                          "src": "18798:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2367,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "18798:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2359,
                      "name": "findPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2230,
                      "src": "18755:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18755:55:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18744:66:4"
                },
                {
                  "expression": {
                    "id": 2377,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2370,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2350,
                        "src": "18820:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2372,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "18820:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2376,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 2373,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2358,
                        "src": "18833:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "expression": {
                          "id": 2374,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2350,
                          "src": "18839:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2375,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "18839:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "18833:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18820:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2378,
                  "nodeType": "ExpressionStatement",
                  "src": "18820:28:4"
                },
                {
                  "expression": {
                    "id": 2383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2379,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2350,
                        "src": "18858:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2381,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "18858:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 2382,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2358,
                      "src": "18870:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18858:15:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2384,
                  "nodeType": "ExpressionStatement",
                  "src": "18858:15:4"
                },
                {
                  "expression": {
                    "id": 2385,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2350,
                    "src": "18890:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2356,
                  "id": 2386,
                  "nodeType": "Return",
                  "src": "18883:11:4"
                }
              ]
            },
            "id": 2388,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "find",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2353,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2350,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2388,
                  "src": "18657:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2349,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "18657:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2352,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2388,
                  "src": "18676:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2351,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "18676:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18656:40:4"
            },
            "returnParameters": {
              "id": 2356,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2355,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2388,
                  "src": "18720:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2354,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "18720:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18719:14:4"
            },
            "scope": 2845,
            "src": "18643:258:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2421,
              "nodeType": "Block",
              "src": "19352:142:4",
              "statements": [
                {
                  "assignments": [
                    2398
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2398,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2421,
                      "src": "19362:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2397,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "19362:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2409,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 2400,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2390,
                          "src": "19382:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2401,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "19382:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2402,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2390,
                          "src": "19393:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2403,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "19393:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2404,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2392,
                          "src": "19404:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2405,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "19404:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2406,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2392,
                          "src": "19417:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2407,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "19417:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2399,
                      "name": "rfindPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2348,
                      "src": "19373:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19373:56:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19362:67:4"
                },
                {
                  "expression": {
                    "id": 2417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2410,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2390,
                        "src": "19439:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2412,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "19439:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2416,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 2413,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2398,
                        "src": "19451:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "expression": {
                          "id": 2414,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2390,
                          "src": "19457:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2415,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "19457:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "19451:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19439:27:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2418,
                  "nodeType": "ExpressionStatement",
                  "src": "19439:27:4"
                },
                {
                  "expression": {
                    "id": 2419,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2390,
                    "src": "19483:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2396,
                  "id": 2420,
                  "nodeType": "Return",
                  "src": "19476:11:4"
                }
              ]
            },
            "id": 2422,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rfind",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2393,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2390,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2422,
                  "src": "19275:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2389,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "19275:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2392,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2422,
                  "src": "19294:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2391,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "19294:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19274:40:4"
            },
            "returnParameters": {
              "id": 2396,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2395,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2422,
                  "src": "19338:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2394,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "19338:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19337:14:4"
            },
            "scope": 2845,
            "src": "19260:234:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2499,
              "nodeType": "Block",
              "src": "20112:392:4",
              "statements": [
                {
                  "assignments": [
                    2434
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2434,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2499,
                      "src": "20122:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2433,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "20122:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2445,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 2436,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2424,
                          "src": "20141:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2437,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "20141:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2438,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2424,
                          "src": "20152:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2439,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "20152:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2440,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2426,
                          "src": "20163:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2441,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "20163:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2442,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2426,
                          "src": "20176:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2443,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "20176:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2435,
                      "name": "findPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2230,
                      "src": "20133:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20133:55:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20122:66:4"
                },
                {
                  "expression": {
                    "id": 2451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2446,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2428,
                        "src": "20198:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2448,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "20198:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 2449,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2424,
                        "src": "20211:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2450,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "20211:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20198:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2452,
                  "nodeType": "ExpressionStatement",
                  "src": "20198:22:4"
                },
                {
                  "expression": {
                    "id": 2460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2453,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2428,
                        "src": "20230:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2455,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "20230:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 2456,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2434,
                        "src": "20243:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "expression": {
                          "id": 2457,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2424,
                          "src": "20249:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2458,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "20249:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20243:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20230:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2461,
                  "nodeType": "ExpressionStatement",
                  "src": "20230:28:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2462,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2434,
                      "src": "20272:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2467,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2463,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2424,
                          "src": "20279:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2464,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "20279:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 2465,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2424,
                          "src": "20291:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2466,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "20291:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20279:21:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20272:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2495,
                    "nodeType": "Block",
                    "src": "20371:105:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2476,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2424,
                              "src": "20385:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2478,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "20385:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2483,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 2479,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2428,
                                "src": "20398:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2480,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1124,
                              "src": "20398:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 2481,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2426,
                                "src": "20411:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2482,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1124,
                              "src": "20411:11:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "20398:24:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "20385:37:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2485,
                        "nodeType": "ExpressionStatement",
                        "src": "20385:37:4"
                      },
                      {
                        "expression": {
                          "id": 2493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2486,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2424,
                              "src": "20436:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2488,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1126,
                            "src": "20436:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2492,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2489,
                              "name": "ptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2434,
                              "src": "20448:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 2490,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2426,
                                "src": "20454:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2491,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1124,
                              "src": "20454:11:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "20448:17:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "20436:29:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2494,
                        "nodeType": "ExpressionStatement",
                        "src": "20436:29:4"
                      }
                    ]
                  },
                  "id": 2496,
                  "nodeType": "IfStatement",
                  "src": "20268:208:4",
                  "trueBody": {
                    "id": 2475,
                    "nodeType": "Block",
                    "src": "20302:63:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2473,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2469,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2424,
                              "src": "20341:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2471,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "20341:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 2472,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20353:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "20341:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2474,
                        "nodeType": "ExpressionStatement",
                        "src": "20341:13:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 2497,
                    "name": "token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2428,
                    "src": "20492:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2432,
                  "id": 2498,
                  "nodeType": "Return",
                  "src": "20485:12:4"
                }
              ]
            },
            "id": 2500,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "split",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2429,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2424,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2500,
                  "src": "20015:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2423,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "20015:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2426,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2500,
                  "src": "20034:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2425,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "20034:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2428,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2500,
                  "src": "20055:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2427,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "20055:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20014:60:4"
            },
            "returnParameters": {
              "id": 2432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2431,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2500,
                  "src": "20098:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2430,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "20098:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20097:14:4"
            },
            "scope": 2845,
            "src": "20000:504:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2515,
              "nodeType": "Block",
              "src": "21073:43:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2510,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2502,
                        "src": "21089:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "id": 2511,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2504,
                        "src": "21095:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "id": 2512,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2507,
                        "src": "21103:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      ],
                      "id": 2509,
                      "name": "split",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2500,
                        2516
                      ],
                      "referencedDeclaration": 2500,
                      "src": "21083:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1127_memory_ptr_$_t_struct$_slice_$1127_memory_ptr_$_t_struct$_slice_$1127_memory_ptr_$returns$_t_struct$_slice_$1127_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory,struct strings.slice memory) pure returns (struct strings.slice memory)"
                      }
                    },
                    "id": 2513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21083:26:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 2514,
                  "nodeType": "ExpressionStatement",
                  "src": "21083:26:4"
                }
              ]
            },
            "id": 2516,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "split",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2505,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2502,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2516,
                  "src": "20990:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2501,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "20990:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2504,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2516,
                  "src": "21009:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2503,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "21009:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20989:40:4"
            },
            "returnParameters": {
              "id": 2508,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2507,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2516,
                  "src": "21053:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2506,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "21053:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21052:20:4"
            },
            "scope": 2845,
            "src": "20975:141:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2584,
              "nodeType": "Block",
              "src": "21734:346:4",
              "statements": [
                {
                  "assignments": [
                    2528
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2528,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2584,
                      "src": "21744:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2527,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "21744:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2539,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 2530,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2518,
                          "src": "21764:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2531,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "21764:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2532,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2518,
                          "src": "21775:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2533,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "21775:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2534,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2520,
                          "src": "21786:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2535,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "21786:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2536,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2520,
                          "src": "21799:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2537,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "21799:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2529,
                      "name": "rfindPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2348,
                      "src": "21755:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21755:56:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21744:67:4"
                },
                {
                  "expression": {
                    "id": 2544,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2540,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2522,
                        "src": "21821:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2542,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "21821:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 2543,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2528,
                      "src": "21834:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21821:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2545,
                  "nodeType": "ExpressionStatement",
                  "src": "21821:16:4"
                },
                {
                  "expression": {
                    "id": 2557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2546,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2522,
                        "src": "21847:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2548,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "21847:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2556,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2549,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2518,
                          "src": "21860:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2550,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "21860:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2554,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2551,
                              "name": "ptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2528,
                              "src": "21873:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "expression": {
                                "id": 2552,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2518,
                                "src": "21879:4:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2553,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_ptr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1126,
                              "src": "21879:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "21873:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 2555,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "21872:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "21860:29:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21847:42:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2558,
                  "nodeType": "ExpressionStatement",
                  "src": "21847:42:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2562,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2559,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2528,
                      "src": "21903:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 2560,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2518,
                        "src": "21910:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2561,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "21910:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21903:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2580,
                    "nodeType": "Block",
                    "src": "21990:62:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2578,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2570,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2518,
                              "src": "22004:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2572,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "22004:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 2573,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2522,
                                "src": "22017:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2574,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1124,
                              "src": "22017:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 2575,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2520,
                                "src": "22030:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2576,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1124,
                              "src": "22030:11:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "22017:24:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "22004:37:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2579,
                        "nodeType": "ExpressionStatement",
                        "src": "22004:37:4"
                      }
                    ]
                  },
                  "id": 2581,
                  "nodeType": "IfStatement",
                  "src": "21899:153:4",
                  "trueBody": {
                    "id": 2569,
                    "nodeType": "Block",
                    "src": "21921:63:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2567,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2563,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2518,
                              "src": "21960:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2565,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "21960:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 2566,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21972:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "21960:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2568,
                        "nodeType": "ExpressionStatement",
                        "src": "21960:13:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 2582,
                    "name": "token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2522,
                    "src": "22068:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2526,
                  "id": 2583,
                  "nodeType": "Return",
                  "src": "22061:12:4"
                }
              ]
            },
            "id": 2585,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rsplit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2518,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2585,
                  "src": "21637:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2517,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "21637:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2520,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2585,
                  "src": "21656:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2519,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "21656:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2522,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2585,
                  "src": "21677:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2521,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "21677:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21636:60:4"
            },
            "returnParameters": {
              "id": 2526,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2525,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2585,
                  "src": "21720:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2524,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "21720:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21719:14:4"
            },
            "scope": 2845,
            "src": "21621:459:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2600,
              "nodeType": "Block",
              "src": "22648:44:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2595,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2587,
                        "src": "22665:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "id": 2596,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2589,
                        "src": "22671:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "id": 2597,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2592,
                        "src": "22679:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      ],
                      "id": 2594,
                      "name": "rsplit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2585,
                        2601
                      ],
                      "referencedDeclaration": 2585,
                      "src": "22658:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1127_memory_ptr_$_t_struct$_slice_$1127_memory_ptr_$_t_struct$_slice_$1127_memory_ptr_$returns$_t_struct$_slice_$1127_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory,struct strings.slice memory) pure returns (struct strings.slice memory)"
                      }
                    },
                    "id": 2598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22658:27:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 2599,
                  "nodeType": "ExpressionStatement",
                  "src": "22658:27:4"
                }
              ]
            },
            "id": 2601,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rsplit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2590,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2587,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2601,
                  "src": "22565:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2586,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "22565:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2589,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2601,
                  "src": "22584:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2588,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "22584:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22564:40:4"
            },
            "returnParameters": {
              "id": 2593,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2592,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2601,
                  "src": "22628:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2591,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "22628:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22627:20:4"
            },
            "scope": 2845,
            "src": "22549:143:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2659,
              "nodeType": "Block",
              "src": "23049:276:4",
              "statements": [
                {
                  "assignments": [
                    2611
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2611,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2659,
                      "src": "23059:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2610,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "23059:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2625,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2624,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 2613,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2603,
                            "src": "23078:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2614,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "23078:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 2615,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2603,
                            "src": "23089:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2616,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1126,
                          "src": "23089:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 2617,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2605,
                            "src": "23100:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2618,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "23100:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 2619,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2605,
                            "src": "23113:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2620,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1126,
                          "src": "23113:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2612,
                        "name": "findPtr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2230,
                        "src": "23070:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 2621,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23070:55:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "expression": {
                        "id": 2622,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2605,
                        "src": "23128:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2623,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "23128:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23070:69:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23059:80:4"
                },
                {
                  "body": {
                    "id": 2657,
                    "nodeType": "Block",
                    "src": "23186:133:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2634,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "23200:5:4",
                          "subExpression": {
                            "id": 2633,
                            "name": "cnt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2608,
                            "src": "23200:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2635,
                        "nodeType": "ExpressionStatement",
                        "src": "23200:5:4"
                      },
                      {
                        "expression": {
                          "id": 2655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2636,
                            "name": "ptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2611,
                            "src": "23219:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2654,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2645,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 2638,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2603,
                                      "src": "23233:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    },
                                    "id": 2639,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_len",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1124,
                                    "src": "23233:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2643,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2640,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2611,
                                          "src": "23246:3:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 2641,
                                            "name": "self",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2603,
                                            "src": "23252:4:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                              "typeString": "struct strings.slice memory"
                                            }
                                          },
                                          "id": 2642,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "_ptr",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 1126,
                                          "src": "23252:9:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "23246:15:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 2644,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "23245:17:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "23233:29:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 2646,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2611,
                                  "src": "23264:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 2647,
                                    "name": "needle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2605,
                                    "src": "23269:6:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                      "typeString": "struct strings.slice memory"
                                    }
                                  },
                                  "id": 2648,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_len",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1124,
                                  "src": "23269:11:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 2649,
                                    "name": "needle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2605,
                                    "src": "23282:6:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                      "typeString": "struct strings.slice memory"
                                    }
                                  },
                                  "id": 2650,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_ptr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1126,
                                  "src": "23282:11:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2637,
                                "name": "findPtr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2230,
                                "src": "23225:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 2651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23225:69:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 2652,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2605,
                                "src": "23297:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2653,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1124,
                              "src": "23297:11:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "23225:83:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23219:89:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2656,
                        "nodeType": "ExpressionStatement",
                        "src": "23219:89:4"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2632,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2626,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2611,
                      "src": "23156:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2631,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2627,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2603,
                          "src": "23163:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2628,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "23163:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 2629,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2603,
                          "src": "23175:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2630,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "23175:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "23163:21:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23156:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2658,
                  "nodeType": "WhileStatement",
                  "src": "23149:170:4"
                }
              ]
            },
            "id": 2660,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "count",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2606,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2603,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2660,
                  "src": "22976:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2602,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "22976:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2605,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2660,
                  "src": "22995:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2604,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "22995:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22975:40:4"
            },
            "returnParameters": {
              "id": 2609,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2608,
                  "mutability": "mutable",
                  "name": "cnt",
                  "nodeType": "VariableDeclaration",
                  "scope": 2660,
                  "src": "23039:8:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2607,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "23039:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23038:10:4"
            },
            "scope": 2845,
            "src": "22961:364:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2683,
              "nodeType": "Block",
              "src": "23651:93:4",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2681,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 2670,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2662,
                            "src": "23677:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2671,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "23677:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 2672,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2662,
                            "src": "23688:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2673,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1126,
                          "src": "23688:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 2674,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2664,
                            "src": "23699:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2675,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "23699:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 2676,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2664,
                            "src": "23712:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2677,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1126,
                          "src": "23712:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2669,
                        "name": "rfindPtr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2348,
                        "src": "23668:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 2678,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23668:56:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 2679,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2662,
                        "src": "23728:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2680,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "23728:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23668:69:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2668,
                  "id": 2682,
                  "nodeType": "Return",
                  "src": "23661:76:4"
                }
              ]
            },
            "id": 2684,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "contains",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2665,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2662,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2684,
                  "src": "23582:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2661,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "23582:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2664,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2684,
                  "src": "23601:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2663,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "23601:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23581:40:4"
            },
            "returnParameters": {
              "id": 2668,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2667,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2684,
                  "src": "23645:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2666,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23645:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23644:6:4"
            },
            "scope": 2845,
            "src": "23564:180:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2729,
              "nodeType": "Block",
              "src": "24124:262:4",
              "statements": [
                {
                  "assignments": [
                    2694
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2694,
                      "mutability": "mutable",
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 2729,
                      "src": "24134:17:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2693,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "24134:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2703,
                  "initialValue": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2701,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 2697,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2686,
                            "src": "24165:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2698,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "24165:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "expression": {
                            "id": 2699,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2688,
                            "src": "24177:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2700,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "24177:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "24165:22:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2696,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "24154:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 2695,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "24158:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 2702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24154:34:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24134:54:4"
                },
                {
                  "assignments": [
                    2705
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2705,
                      "mutability": "mutable",
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2729,
                      "src": "24198:11:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2704,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "24198:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2706,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24198:11:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "24228:26:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "24230:22:4",
                        "value": {
                          "arguments": [
                            {
                              "name": "ret",
                              "nodeType": "YulIdentifier",
                              "src": "24244:3:4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "24249:2:4",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "24240:3:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "24240:12:4"
                        },
                        "variableNames": [
                          {
                            "name": "retptr",
                            "nodeType": "YulIdentifier",
                            "src": "24230:6:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 2694,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "24244:3:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2705,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "24230:6:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 2707,
                  "nodeType": "InlineAssembly",
                  "src": "24219:35:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2709,
                        "name": "retptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2705,
                        "src": "24270:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2710,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2686,
                          "src": "24278:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2711,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "24278:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2712,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2686,
                          "src": "24289:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2713,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "24289:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2708,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1167,
                      "src": "24263:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 2714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24263:36:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2715,
                  "nodeType": "ExpressionStatement",
                  "src": "24263:36:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2720,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 2717,
                          "name": "retptr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2705,
                          "src": "24316:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "expression": {
                            "id": 2718,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2686,
                            "src": "24325:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2719,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "24325:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "24316:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2721,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2688,
                          "src": "24336:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2722,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "24336:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2723,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2688,
                          "src": "24348:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2724,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "24348:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2716,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1167,
                      "src": "24309:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 2725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24309:50:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2726,
                  "nodeType": "ExpressionStatement",
                  "src": "24309:50:4"
                },
                {
                  "expression": {
                    "id": 2727,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2694,
                    "src": "24376:3:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 2692,
                  "id": 2728,
                  "nodeType": "Return",
                  "src": "24369:10:4"
                }
              ]
            },
            "id": 2730,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "concat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2689,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2686,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2730,
                  "src": "24047:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2685,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "24047:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2688,
                  "mutability": "mutable",
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 2730,
                  "src": "24066:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2687,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "24066:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24046:39:4"
            },
            "returnParameters": {
              "id": 2692,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2691,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2730,
                  "src": "24109:13:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2690,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "24109:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24108:15:4"
            },
            "scope": 2845,
            "src": "24031:355:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2843,
              "nodeType": "Block",
              "src": "24815:635:4",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2740,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2735,
                        "src": "24829:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 2741,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "24829:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 2742,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24845:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "24829:17:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2746,
                  "nodeType": "IfStatement",
                  "src": "24825:44:4",
                  "trueBody": {
                    "expression": {
                      "hexValue": "",
                      "id": 2744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24867:2:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                        "typeString": "literal_string \"\""
                      },
                      "value": ""
                    },
                    "functionReturnParameters": 2739,
                    "id": 2745,
                    "nodeType": "Return",
                    "src": "24860:9:4"
                  }
                },
                {
                  "assignments": [
                    2748
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2748,
                      "mutability": "mutable",
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2843,
                      "src": "24880:11:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2747,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "24880:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2757,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2749,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2732,
                        "src": "24894:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2750,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "24894:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 2751,
                              "name": "parts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2735,
                              "src": "24907:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct strings.slice memory[] memory"
                              }
                            },
                            "id": 2752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "24907:12:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 2753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24922:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "24907:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2755,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "24906:18:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24894:30:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24880:44:4"
                },
                {
                  "body": {
                    "expression": {
                      "id": 2774,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 2769,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2748,
                        "src": "24985:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "expression": {
                          "baseExpression": {
                            "id": 2770,
                            "name": "parts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2735,
                            "src": "24995:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                              "typeString": "struct strings.slice memory[] memory"
                            }
                          },
                          "id": 2772,
                          "indexExpression": {
                            "id": 2771,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2759,
                            "src": "25001:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "24995:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2773,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "24995:13:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "24985:23:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2775,
                    "nodeType": "ExpressionStatement",
                    "src": "24985:23:4"
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2762,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2759,
                      "src": "24950:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 2763,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2735,
                        "src": "24954:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 2764,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "24954:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24950:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2776,
                  "initializationExpression": {
                    "assignments": [
                      2759
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2759,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 2776,
                        "src": "24938:6:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2758,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "24938:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 2761,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 2760,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24947:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "24938:10:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 2767,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "24968:3:4",
                      "subExpression": {
                        "id": 2766,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2759,
                        "src": "24968:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2768,
                    "nodeType": "ExpressionStatement",
                    "src": "24968:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "24934:74:4"
                },
                {
                  "assignments": [
                    2778
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2778,
                      "mutability": "mutable",
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 2843,
                      "src": "25019:17:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2777,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "25019:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2783,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 2781,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2748,
                        "src": "25050:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2780,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "25039:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 2779,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "25043:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 2782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25039:18:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25019:38:4"
                },
                {
                  "assignments": [
                    2785
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2785,
                      "mutability": "mutable",
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2843,
                      "src": "25067:11:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2784,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "25067:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2786,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25067:11:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "25097:26:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "25099:22:4",
                        "value": {
                          "arguments": [
                            {
                              "name": "ret",
                              "nodeType": "YulIdentifier",
                              "src": "25113:3:4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "25118:2:4",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "25109:3:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "25109:12:4"
                        },
                        "variableNames": [
                          {
                            "name": "retptr",
                            "nodeType": "YulIdentifier",
                            "src": "25099:6:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 2778,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "25113:3:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2785,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "25099:6:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 2787,
                  "nodeType": "InlineAssembly",
                  "src": "25088:35:4"
                },
                {
                  "body": {
                    "id": 2839,
                    "nodeType": "Block",
                    "src": "25172:251:4",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2800,
                              "name": "retptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2785,
                              "src": "25193:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 2801,
                                  "name": "parts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2735,
                                  "src": "25201:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct strings.slice memory[] memory"
                                  }
                                },
                                "id": 2803,
                                "indexExpression": {
                                  "id": 2802,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2789,
                                  "src": "25207:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "25201:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2804,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_ptr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1126,
                              "src": "25201:13:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 2805,
                                  "name": "parts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2735,
                                  "src": "25216:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct strings.slice memory[] memory"
                                  }
                                },
                                "id": 2807,
                                "indexExpression": {
                                  "id": 2806,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2789,
                                  "src": "25222:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "25216:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2808,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1124,
                              "src": "25216:13:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2799,
                            "name": "memcpy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1167,
                            "src": "25186:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256,uint256) pure"
                            }
                          },
                          "id": 2809,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25186:44:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2810,
                        "nodeType": "ExpressionStatement",
                        "src": "25186:44:4"
                      },
                      {
                        "expression": {
                          "id": 2816,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2811,
                            "name": "retptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2785,
                            "src": "25244:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 2812,
                                "name": "parts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2735,
                                "src": "25254:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "struct strings.slice memory[] memory"
                                }
                              },
                              "id": 2814,
                              "indexExpression": {
                                "id": 2813,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2789,
                                "src": "25260:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "25254:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2815,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "25254:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25244:23:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2817,
                        "nodeType": "ExpressionStatement",
                        "src": "25244:23:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2823,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2818,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2789,
                            "src": "25285:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2822,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 2819,
                                "name": "parts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2735,
                                "src": "25289:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "struct strings.slice memory[] memory"
                                }
                              },
                              "id": 2820,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "25289:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 2821,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25304:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "25289:16:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25285:20:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2838,
                        "nodeType": "IfStatement",
                        "src": "25281:132:4",
                        "trueBody": {
                          "id": 2837,
                          "nodeType": "Block",
                          "src": "25307:106:4",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2825,
                                    "name": "retptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2785,
                                    "src": "25332:6:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 2826,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2732,
                                      "src": "25340:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    },
                                    "id": 2827,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_ptr",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1126,
                                    "src": "25340:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 2828,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2732,
                                      "src": "25351:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    },
                                    "id": 2829,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_len",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1124,
                                    "src": "25351:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2824,
                                  "name": "memcpy",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1167,
                                  "src": "25325:6:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256,uint256,uint256) pure"
                                  }
                                },
                                "id": 2830,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25325:36:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2831,
                              "nodeType": "ExpressionStatement",
                              "src": "25325:36:4"
                            },
                            {
                              "expression": {
                                "id": 2835,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2832,
                                  "name": "retptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2785,
                                  "src": "25379:6:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "expression": {
                                    "id": 2833,
                                    "name": "self",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2732,
                                    "src": "25389:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                      "typeString": "struct strings.slice memory"
                                    }
                                  },
                                  "id": 2834,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_len",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1124,
                                  "src": "25389:9:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25379:19:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2836,
                              "nodeType": "ExpressionStatement",
                              "src": "25379:19:4"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2795,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2792,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2789,
                      "src": "25149:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 2793,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2735,
                        "src": "25153:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 2794,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "25153:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25149:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2840,
                  "initializationExpression": {
                    "assignments": [
                      2789
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2789,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 2840,
                        "src": "25137:6:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2788,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "25137:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 2791,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 2790,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25146:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "25137:10:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 2797,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "25167:3:4",
                      "subExpression": {
                        "id": 2796,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2789,
                        "src": "25167:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2798,
                    "nodeType": "ExpressionStatement",
                    "src": "25167:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "25133:290:4"
                },
                {
                  "expression": {
                    "id": 2841,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2778,
                    "src": "25440:3:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 2739,
                  "id": 2842,
                  "nodeType": "Return",
                  "src": "25433:10:4"
                }
              ]
            },
            "id": 2844,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "join",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2736,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2732,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2844,
                  "src": "24736:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2731,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "24736:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2735,
                  "mutability": "mutable",
                  "name": "parts",
                  "nodeType": "VariableDeclaration",
                  "scope": 2844,
                  "src": "24755:20:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct strings.slice[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2733,
                      "name": "slice",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 1127,
                      "src": "24755:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                        "typeString": "struct strings.slice"
                      }
                    },
                    "id": 2734,
                    "nodeType": "ArrayTypeName",
                    "src": "24755:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_slice_$1127_storage_$dyn_storage_ptr",
                      "typeString": "struct strings.slice[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24735:41:4"
            },
            "returnParameters": {
              "id": 2739,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2738,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2844,
                  "src": "24800:13:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2737,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "24800:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24799:15:4"
            },
            "scope": 2845,
            "src": "24722:728:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 2846,
        "src": "2046:23406:4"
      }
    ],
    "src": "2013:23440:4"
  },
  "legacyAST": {
    "absolutePath": "/home/dh206382/dev/eth-vue/contracts/lib/arachnid/solidity-stringutils/strings.sol",
    "exportedSymbols": {
      "strings": [
        2845
      ]
    },
    "id": 2846,
    "license": "GPL-3.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 1122,
        "literals": [
          "solidity",
          ">=",
          "0.7",
          ".0",
          "<",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "2013:31:4"
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "library",
        "fullyImplemented": true,
        "id": 2845,
        "linearizedBaseContracts": [
          2845
        ],
        "name": "strings",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "canonicalName": "strings.slice",
            "id": 1127,
            "members": [
              {
                "constant": false,
                "id": 1124,
                "mutability": "mutable",
                "name": "_len",
                "nodeType": "VariableDeclaration",
                "scope": 1127,
                "src": "2091:9:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1123,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2091:4:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 1126,
                "mutability": "mutable",
                "name": "_ptr",
                "nodeType": "VariableDeclaration",
                "scope": 1127,
                "src": "2110:9:4",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 1125,
                  "name": "uint",
                  "nodeType": "ElementaryTypeName",
                  "src": "2110:4:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "visibility": "internal"
              }
            ],
            "name": "slice",
            "nodeType": "StructDefinition",
            "scope": 2845,
            "src": "2068:58:4",
            "visibility": "public"
          },
          {
            "body": {
              "id": 1166,
              "nodeType": "Block",
              "src": "2196:500:4",
              "statements": [
                {
                  "body": {
                    "id": 1152,
                    "nodeType": "Block",
                    "src": "2292:136:4",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "2315:56:4",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "name": "dest",
                                    "nodeType": "YulIdentifier",
                                    "src": "2340:4:4"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "src",
                                        "nodeType": "YulIdentifier",
                                        "src": "2352:3:4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "2346:5:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "2346:10:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mstore",
                                  "nodeType": "YulIdentifier",
                                  "src": "2333:6:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "2333:24:4"
                              },
                              "nodeType": "YulExpressionStatement",
                              "src": "2333:24:4"
                            }
                          ]
                        },
                        "evmVersion": "byzantium",
                        "externalReferences": [
                          {
                            "declaration": 1129,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2340:4:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1131,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "2352:3:4",
                            "valueSize": 1
                          }
                        ],
                        "id": 1143,
                        "nodeType": "InlineAssembly",
                        "src": "2306:65:4"
                      },
                      {
                        "expression": {
                          "id": 1146,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1144,
                            "name": "dest",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1129,
                            "src": "2384:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 1145,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2392:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2384:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1147,
                        "nodeType": "ExpressionStatement",
                        "src": "2384:10:4"
                      },
                      {
                        "expression": {
                          "id": 1150,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1148,
                            "name": "src",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1131,
                            "src": "2408:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 1149,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2415:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "2408:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1151,
                        "nodeType": "ExpressionStatement",
                        "src": "2408:9:4"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1138,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1136,
                      "name": "wordlen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1133,
                      "src": "2262:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">=",
                    "rightExpression": {
                      "hexValue": "3332",
                      "id": 1137,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2273:2:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "src": "2262:13:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1153,
                  "loopExpression": {
                    "expression": {
                      "id": 1141,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 1139,
                        "name": "wordlen",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1133,
                        "src": "2277:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "-=",
                      "rightHandSide": {
                        "hexValue": "3332",
                        "id": 1140,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2288:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "2277:13:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1142,
                    "nodeType": "ExpressionStatement",
                    "src": "2277:13:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "2256:172:4"
                },
                {
                  "assignments": [
                    1155
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1155,
                      "mutability": "mutable",
                      "name": "mask",
                      "nodeType": "VariableDeclaration",
                      "scope": 1166,
                      "src": "2470:9:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1154,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2470:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1164,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1161,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "hexValue": "323536",
                        "id": 1156,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "2482:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_256_by_1",
                          "typeString": "int_const 256"
                        },
                        "value": "256"
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "**",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1159,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "hexValue": "3332",
                              "id": 1157,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "2490:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_32_by_1",
                                "typeString": "int_const 32"
                              },
                              "value": "32"
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "id": 1158,
                              "name": "wordlen",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1133,
                              "src": "2495:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "2490:12:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 1160,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "2489:14:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "2482:21:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "hexValue": "31",
                      "id": 1162,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2506:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "src": "2482:25:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2470:37:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "2526:164:4",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "2540:41:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "src",
                                  "nodeType": "YulIdentifier",
                                  "src": "2565:3:4"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "2559:5:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2559:10:4"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "mask",
                                  "nodeType": "YulIdentifier",
                                  "src": "2575:4:4"
                                }
                              ],
                              "functionName": {
                                "name": "not",
                                "nodeType": "YulIdentifier",
                                "src": "2571:3:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2571:9:4"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "2555:3:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2555:26:4"
                        },
                        "variables": [
                          {
                            "name": "srcpart",
                            "nodeType": "YulTypedName",
                            "src": "2544:7:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "2594:38:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "dest",
                                  "nodeType": "YulIdentifier",
                                  "src": "2620:4:4"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "2614:5:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2614:11:4"
                            },
                            {
                              "name": "mask",
                              "nodeType": "YulIdentifier",
                              "src": "2627:4:4"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "2610:3:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2610:22:4"
                        },
                        "variables": [
                          {
                            "name": "destpart",
                            "nodeType": "YulTypedName",
                            "src": "2598:8:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "dest",
                              "nodeType": "YulIdentifier",
                              "src": "2652:4:4"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "destpart",
                                  "nodeType": "YulIdentifier",
                                  "src": "2661:8:4"
                                },
                                {
                                  "name": "srcpart",
                                  "nodeType": "YulIdentifier",
                                  "src": "2671:7:4"
                                }
                              ],
                              "functionName": {
                                "name": "or",
                                "nodeType": "YulIdentifier",
                                "src": "2658:2:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "2658:21:4"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "2645:6:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "2645:35:4"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "2645:35:4"
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1129,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2620:4:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1129,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2652:4:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1155,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2575:4:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1155,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2627:4:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1131,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "2565:3:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1165,
                  "nodeType": "InlineAssembly",
                  "src": "2517:173:4"
                }
              ]
            },
            "id": 1167,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "memcpy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1134,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1129,
                  "mutability": "mutable",
                  "name": "dest",
                  "nodeType": "VariableDeclaration",
                  "scope": 1167,
                  "src": "2148:9:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1128,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2148:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1131,
                  "mutability": "mutable",
                  "name": "src",
                  "nodeType": "VariableDeclaration",
                  "scope": 1167,
                  "src": "2159:8:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1130,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2159:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1133,
                  "mutability": "mutable",
                  "name": "wordlen",
                  "nodeType": "VariableDeclaration",
                  "scope": 1167,
                  "src": "2169:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1132,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "2169:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2147:35:4"
            },
            "returnParameters": {
              "id": 1135,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2196:0:4"
            },
            "scope": 2845,
            "src": "2132:564:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1187,
              "nodeType": "Block",
              "src": "2970:136:4",
              "statements": [
                {
                  "assignments": [
                    1175
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1175,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1187,
                      "src": "2980:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1174,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "2980:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1176,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2980:8:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "3007:46:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "3021:22:4",
                        "value": {
                          "arguments": [
                            {
                              "name": "self",
                              "nodeType": "YulIdentifier",
                              "src": "3032:4:4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "3038:4:4",
                              "type": "",
                              "value": "0x20"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "3028:3:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "3028:15:4"
                        },
                        "variableNames": [
                          {
                            "name": "ptr",
                            "nodeType": "YulIdentifier",
                            "src": "3021:3:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1175,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3021:3:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1169,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "3032:4:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1177,
                  "nodeType": "InlineAssembly",
                  "src": "2998:55:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1181,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1169,
                              "src": "3081:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_string_memory_ptr",
                                "typeString": "string memory"
                              }
                            ],
                            "id": 1180,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "3075:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_bytes_storage_ptr_$",
                              "typeString": "type(bytes storage pointer)"
                            },
                            "typeName": {
                              "id": 1179,
                              "name": "bytes",
                              "nodeType": "ElementaryTypeName",
                              "src": "3075:5:4",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1182,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3075:11:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes_memory_ptr",
                            "typeString": "bytes memory"
                          }
                        },
                        "id": 1183,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "length",
                        "nodeType": "MemberAccess",
                        "src": "3075:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1184,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1175,
                        "src": "3095:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1178,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1127,
                      "src": "3069:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_slice_$1127_storage_ptr_$",
                        "typeString": "type(struct strings.slice storage pointer)"
                      }
                    },
                    "id": 1185,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3069:30:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1173,
                  "id": 1186,
                  "nodeType": "Return",
                  "src": "3062:37:4"
                }
              ]
            },
            "id": 1188,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toSlice",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1170,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1169,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1188,
                  "src": "2913:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1168,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2913:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2912:20:4"
            },
            "returnParameters": {
              "id": 1173,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1172,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1188,
                  "src": "2956:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1171,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "2956:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2955:14:4"
            },
            "scope": 2845,
            "src": "2896:210:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1326,
              "nodeType": "Block",
              "src": "3358:742:4",
              "statements": [
                {
                  "assignments": [
                    1196
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1196,
                      "mutability": "mutable",
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 1326,
                      "src": "3368:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1195,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "3368:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1197,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3368:8:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    },
                    "id": 1200,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1198,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1190,
                      "src": "3390:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1199,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3398:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3390:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1203,
                  "nodeType": "IfStatement",
                  "src": "3386:35:4",
                  "trueBody": {
                    "expression": {
                      "hexValue": "30",
                      "id": 1201,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3420:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 1194,
                    "id": 1202,
                    "nodeType": "Return",
                    "src": "3413:8:4"
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1211,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1209,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 1206,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3440:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 1205,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3435:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 1204,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "3435:4:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1207,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3435:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "hexValue": "30786666666666666666666666666666666666666666666666666666666666666666",
                        "id": 1208,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3448:34:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_340282366920938463463374607431768211455_by_1",
                          "typeString": "int_const 3402...(31 digits omitted)...1455"
                        },
                        "value": "0xffffffffffffffffffffffffffffffff"
                      },
                      "src": "3435:47:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1210,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3486:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3435:52:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1229,
                  "nodeType": "IfStatement",
                  "src": "3431:170:4",
                  "trueBody": {
                    "id": 1228,
                    "nodeType": "Block",
                    "src": "3489:112:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1214,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1212,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1196,
                            "src": "3503:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3136",
                            "id": 1213,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3510:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_16_by_1",
                              "typeString": "int_const 16"
                            },
                            "value": "16"
                          },
                          "src": "3503:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1215,
                        "nodeType": "ExpressionStatement",
                        "src": "3503:9:4"
                      },
                      {
                        "expression": {
                          "id": 1226,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1216,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3526:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1224,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 1221,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1190,
                                      "src": "3546:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1220,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3541:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 1219,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3541:4:4",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1222,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3541:10:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "3078313030303030303030303030303030303030303030303030303030303030303030",
                                  "id": 1223,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3554:35:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_340282366920938463463374607431768211456_by_1",
                                    "typeString": "int_const 3402...(31 digits omitted)...1456"
                                  },
                                  "value": "0x100000000000000000000000000000000"
                                },
                                "src": "3541:48:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1218,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3533:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 1217,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "3533:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1225,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3533:57:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3526:64:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1227,
                        "nodeType": "ExpressionStatement",
                        "src": "3526:64:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1237,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1235,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 1232,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3619:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 1231,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3614:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 1230,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "3614:4:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1233,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3614:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "hexValue": "307866666666666666666666666666666666",
                        "id": 1234,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3627:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_18446744073709551615_by_1",
                          "typeString": "int_const 18446744073709551615"
                        },
                        "value": "0xffffffffffffffff"
                      },
                      "src": "3614:31:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1236,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3649:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3614:36:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1255,
                  "nodeType": "IfStatement",
                  "src": "3610:137:4",
                  "trueBody": {
                    "id": 1254,
                    "nodeType": "Block",
                    "src": "3652:95:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1238,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1196,
                            "src": "3666:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "38",
                            "id": 1239,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3673:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_8_by_1",
                              "typeString": "int_const 8"
                            },
                            "value": "8"
                          },
                          "src": "3666:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1241,
                        "nodeType": "ExpressionStatement",
                        "src": "3666:8:4"
                      },
                      {
                        "expression": {
                          "id": 1252,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1242,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3688:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1250,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 1247,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1190,
                                      "src": "3708:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1246,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3703:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 1245,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3703:4:4",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1248,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3703:10:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "30783130303030303030303030303030303030",
                                  "id": 1249,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3716:19:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_18446744073709551616_by_1",
                                    "typeString": "int_const 18446744073709551616"
                                  },
                                  "value": "0x10000000000000000"
                                },
                                "src": "3703:32:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1244,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3695:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 1243,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "3695:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1251,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3695:41:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3688:48:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1253,
                        "nodeType": "ExpressionStatement",
                        "src": "3688:48:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1263,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1261,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 1258,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3765:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 1257,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3760:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 1256,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "3760:4:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3760:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "hexValue": "30786666666666666666",
                        "id": 1260,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3773:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_4294967295_by_1",
                          "typeString": "int_const 4294967295"
                        },
                        "value": "0xffffffff"
                      },
                      "src": "3760:23:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1262,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3787:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3760:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1281,
                  "nodeType": "IfStatement",
                  "src": "3756:121:4",
                  "trueBody": {
                    "id": 1280,
                    "nodeType": "Block",
                    "src": "3790:87:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1266,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1264,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1196,
                            "src": "3804:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "34",
                            "id": 1265,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3811:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_4_by_1",
                              "typeString": "int_const 4"
                            },
                            "value": "4"
                          },
                          "src": "3804:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1267,
                        "nodeType": "ExpressionStatement",
                        "src": "3804:8:4"
                      },
                      {
                        "expression": {
                          "id": 1278,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1268,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3826:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1276,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 1273,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1190,
                                      "src": "3846:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1272,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3841:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 1271,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3841:4:4",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1274,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3841:10:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "3078313030303030303030",
                                  "id": 1275,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3854:11:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_4294967296_by_1",
                                    "typeString": "int_const 4294967296"
                                  },
                                  "value": "0x100000000"
                                },
                                "src": "3841:24:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1270,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3833:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 1269,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "3833:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1277,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3833:33:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3826:40:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1279,
                        "nodeType": "ExpressionStatement",
                        "src": "3826:40:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1289,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1287,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 1284,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3895:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 1283,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "3890:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 1282,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "3890:4:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1285,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3890:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "hexValue": "307866666666",
                        "id": 1286,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "3903:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_65535_by_1",
                          "typeString": "int_const 65535"
                        },
                        "value": "0xffff"
                      },
                      "src": "3890:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1288,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "3913:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "3890:24:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1307,
                  "nodeType": "IfStatement",
                  "src": "3886:113:4",
                  "trueBody": {
                    "id": 1306,
                    "nodeType": "Block",
                    "src": "3916:83:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1292,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1290,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1196,
                            "src": "3930:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "32",
                            "id": 1291,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "3937:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_2_by_1",
                              "typeString": "int_const 2"
                            },
                            "value": "2"
                          },
                          "src": "3930:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1293,
                        "nodeType": "ExpressionStatement",
                        "src": "3930:8:4"
                      },
                      {
                        "expression": {
                          "id": 1304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1294,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "3952:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "arguments": [
                              {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1302,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "arguments": [
                                    {
                                      "id": 1299,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1190,
                                      "src": "3972:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      }
                                    ],
                                    "id": 1298,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3967:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_uint256_$",
                                      "typeString": "type(uint256)"
                                    },
                                    "typeName": {
                                      "id": 1297,
                                      "name": "uint",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3967:4:4",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1300,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3967:10:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "/",
                                "rightExpression": {
                                  "hexValue": "30783130303030",
                                  "id": 1301,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "3980:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_65536_by_1",
                                    "typeString": "int_const 65536"
                                  },
                                  "value": "0x10000"
                                },
                                "src": "3967:20:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 1296,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "lValueRequested": false,
                              "nodeType": "ElementaryTypeNameExpression",
                              "src": "3959:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_bytes32_$",
                                "typeString": "type(bytes32)"
                              },
                              "typeName": {
                                "id": 1295,
                                "name": "bytes32",
                                "nodeType": "ElementaryTypeName",
                                "src": "3959:7:4",
                                "typeDescriptions": {}
                              }
                            },
                            "id": 1303,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "typeConversion",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "3959:29:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "3952:36:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 1305,
                        "nodeType": "ExpressionStatement",
                        "src": "3952:36:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1315,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1313,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "arguments": [
                          {
                            "id": 1310,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1190,
                            "src": "4017:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          ],
                          "id": 1309,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "4012:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_uint256_$",
                            "typeString": "type(uint256)"
                          },
                          "typeName": {
                            "id": 1308,
                            "name": "uint",
                            "nodeType": "ElementaryTypeName",
                            "src": "4012:4:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1311,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4012:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "&",
                      "rightExpression": {
                        "hexValue": "30786666",
                        "id": 1312,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4025:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_255_by_1",
                          "typeString": "int_const 255"
                        },
                        "value": "0xff"
                      },
                      "src": "4012:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1314,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4033:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "4012:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1321,
                  "nodeType": "IfStatement",
                  "src": "4008:61:4",
                  "trueBody": {
                    "id": 1320,
                    "nodeType": "Block",
                    "src": "4036:33:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1318,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1316,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1196,
                            "src": "4050:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "31",
                            "id": 1317,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "4057:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "4050:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1319,
                        "nodeType": "ExpressionStatement",
                        "src": "4050:8:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1324,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "3332",
                      "id": 1322,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4085:2:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_32_by_1",
                        "typeString": "int_const 32"
                      },
                      "value": "32"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "id": 1323,
                      "name": "ret",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1196,
                      "src": "4090:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4085:8:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1194,
                  "id": 1325,
                  "nodeType": "Return",
                  "src": "4078:15:4"
                }
              ]
            },
            "id": 1327,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "len",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1191,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1190,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1327,
                  "src": "3315:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1189,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3315:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3314:14:4"
            },
            "returnParameters": {
              "id": 1194,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1193,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1327,
                  "src": "3352:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1192,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "3352:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3351:6:4"
            },
            "scope": 2845,
            "src": "3302:798:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1343,
              "nodeType": "Block",
              "src": "4481:295:4",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "4583:157:4",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "4597:22:4",
                        "value": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4614:4:4",
                              "type": "",
                              "value": "0x40"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "4608:5:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4608:11:4"
                        },
                        "variables": [
                          {
                            "name": "ptr",
                            "nodeType": "YulTypedName",
                            "src": "4601:3:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "4639:4:4",
                              "type": "",
                              "value": "0x40"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "ptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "4649:3:4"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4654:4:4",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4645:3:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4645:14:4"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4632:6:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4632:28:4"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4632:28:4"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "4680:3:4"
                            },
                            {
                              "name": "self",
                              "nodeType": "YulIdentifier",
                              "src": "4685:4:4"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4673:6:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4673:17:4"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4673:17:4"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "ret",
                                  "nodeType": "YulIdentifier",
                                  "src": "4714:3:4"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "4719:4:4",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "4710:3:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "4710:14:4"
                            },
                            {
                              "name": "ptr",
                              "nodeType": "YulIdentifier",
                              "src": "4726:3:4"
                            }
                          ],
                          "functionName": {
                            "name": "mstore",
                            "nodeType": "YulIdentifier",
                            "src": "4703:6:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "4703:27:4"
                        },
                        "nodeType": "YulExpressionStatement",
                        "src": "4703:27:4"
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1332,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4714:3:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1329,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "4685:4:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1334,
                  "nodeType": "InlineAssembly",
                  "src": "4574:166:4"
                },
                {
                  "expression": {
                    "id": 1341,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 1335,
                        "name": "ret",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1332,
                        "src": "4749:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1337,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "4749:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "arguments": [
                        {
                          "id": 1339,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1329,
                          "src": "4764:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 1338,
                        "name": "len",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [
                          1327,
                          1477
                        ],
                        "referencedDeclaration": 1327,
                        "src": "4760:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_uint256_$",
                          "typeString": "function (bytes32) pure returns (uint256)"
                        }
                      },
                      "id": 1340,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "4760:9:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "4749:20:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1342,
                  "nodeType": "ExpressionStatement",
                  "src": "4749:20:4"
                }
              ]
            },
            "id": 1344,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toSliceB32",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1330,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1329,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1344,
                  "src": "4426:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1328,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "4426:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4425:14:4"
            },
            "returnParameters": {
              "id": 1333,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1332,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1344,
                  "src": "4463:16:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1331,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "4463:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4462:18:4"
            },
            "scope": 2845,
            "src": "4406:370:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1358,
              "nodeType": "Block",
              "src": "5047:51:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1352,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1346,
                          "src": "5070:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1353,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "5070:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 1354,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1346,
                          "src": "5081:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1355,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "5081:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1351,
                      "name": "slice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1127,
                      "src": "5064:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_struct$_slice_$1127_storage_ptr_$",
                        "typeString": "type(struct strings.slice storage pointer)"
                      }
                    },
                    "id": 1356,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "structConstructorCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5064:27:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1350,
                  "id": 1357,
                  "nodeType": "Return",
                  "src": "5057:34:4"
                }
              ]
            },
            "id": 1359,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "copy",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1346,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1359,
                  "src": "4991:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1345,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "4991:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4990:19:4"
            },
            "returnParameters": {
              "id": 1350,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1349,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1359,
                  "src": "5033:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1348,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "5033:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5032:14:4"
            },
            "scope": 2845,
            "src": "4977:121:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1388,
              "nodeType": "Block",
              "src": "5345:190:4",
              "statements": [
                {
                  "assignments": [
                    1367
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1367,
                      "mutability": "mutable",
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 1388,
                      "src": "5355:17:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 1366,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5355:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1373,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 1370,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1361,
                          "src": "5386:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1371,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "5386:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1369,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "5375:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 1368,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "5379:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 1372,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5375:21:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5355:41:4"
                },
                {
                  "assignments": [
                    1375
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1375,
                      "mutability": "mutable",
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1388,
                      "src": "5406:11:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1374,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "5406:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1376,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5406:11:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "5436:26:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "5438:22:4",
                        "value": {
                          "arguments": [
                            {
                              "name": "ret",
                              "nodeType": "YulIdentifier",
                              "src": "5452:3:4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "5457:2:4",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "5448:3:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "5448:12:4"
                        },
                        "variableNames": [
                          {
                            "name": "retptr",
                            "nodeType": "YulIdentifier",
                            "src": "5438:6:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1367,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5452:3:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1375,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "5438:6:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1377,
                  "nodeType": "InlineAssembly",
                  "src": "5427:35:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1379,
                        "name": "retptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1375,
                        "src": "5479:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 1380,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1361,
                          "src": "5487:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1381,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "5487:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 1382,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1361,
                          "src": "5498:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1383,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "5498:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1378,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1167,
                      "src": "5472:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 1384,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5472:36:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1385,
                  "nodeType": "ExpressionStatement",
                  "src": "5472:36:4"
                },
                {
                  "expression": {
                    "id": 1386,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1367,
                    "src": "5525:3:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 1365,
                  "id": 1387,
                  "nodeType": "Return",
                  "src": "5518:10:4"
                }
              ]
            },
            "id": 1389,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "toString",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1362,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1361,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1389,
                  "src": "5288:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1360,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "5288:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5287:19:4"
            },
            "returnParameters": {
              "id": 1365,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1364,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1389,
                  "src": "5330:13:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 1363,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "5330:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5329:15:4"
            },
            "scope": 2845,
            "src": "5270:265:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1476,
              "nodeType": "Block",
              "src": "5989:629:4",
              "statements": [
                {
                  "assignments": [
                    1397
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1397,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1476,
                      "src": "6074:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1396,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6074:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1402,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1401,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1398,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1391,
                        "src": "6085:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1399,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "6085:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "hexValue": "3331",
                      "id": 1400,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6097:2:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_31_by_1",
                        "typeString": "int_const 31"
                      },
                      "value": "31"
                    },
                    "src": "6085:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6074:25:4"
                },
                {
                  "assignments": [
                    1404
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1404,
                      "mutability": "mutable",
                      "name": "end",
                      "nodeType": "VariableDeclaration",
                      "scope": 1476,
                      "src": "6109:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1403,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "6109:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1409,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1405,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1397,
                      "src": "6120:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "expression": {
                        "id": 1406,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1391,
                        "src": "6126:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1407,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "6126:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6120:15:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6109:26:4"
                },
                {
                  "body": {
                    "id": 1474,
                    "nodeType": "Block",
                    "src": "6173:439:4",
                    "statements": [
                      {
                        "assignments": [
                          1421
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1421,
                            "mutability": "mutable",
                            "name": "b",
                            "nodeType": "VariableDeclaration",
                            "scope": 1474,
                            "src": "6187:7:4",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "typeName": {
                              "id": 1420,
                              "name": "uint8",
                              "nodeType": "ElementaryTypeName",
                              "src": "6187:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1422,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "6187:7:4"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "6217:30:4",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "6219:26:4",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "ptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "6234:3:4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "mload",
                                      "nodeType": "YulIdentifier",
                                      "src": "6228:5:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "6228:10:4"
                                  },
                                  {
                                    "kind": "number",
                                    "nodeType": "YulLiteral",
                                    "src": "6240:4:4",
                                    "type": "",
                                    "value": "0xFF"
                                  }
                                ],
                                "functionName": {
                                  "name": "and",
                                  "nodeType": "YulIdentifier",
                                  "src": "6224:3:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "6224:21:4"
                              },
                              "variableNames": [
                                {
                                  "name": "b",
                                  "nodeType": "YulIdentifier",
                                  "src": "6219:1:4"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "byzantium",
                        "externalReferences": [
                          {
                            "declaration": 1421,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6219:1:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1397,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "6234:3:4",
                            "valueSize": 1
                          }
                        ],
                        "id": 1423,
                        "nodeType": "InlineAssembly",
                        "src": "6208:39:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          },
                          "id": 1426,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1424,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1421,
                            "src": "6264:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "hexValue": "30783830",
                            "id": 1425,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6268:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "0x80"
                          },
                          "src": "6264:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "condition": {
                            "commonType": {
                              "typeIdentifier": "t_uint8",
                              "typeString": "uint8"
                            },
                            "id": 1434,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1432,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1421,
                              "src": "6324:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "<",
                            "rightExpression": {
                              "hexValue": "30784530",
                              "id": 1433,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "6328:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_224_by_1",
                                "typeString": "int_const 224"
                              },
                              "value": "0xE0"
                            },
                            "src": "6324:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "falseBody": {
                            "condition": {
                              "commonType": {
                                "typeIdentifier": "t_uint8",
                                "typeString": "uint8"
                              },
                              "id": 1442,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1440,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1421,
                                "src": "6384:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<",
                              "rightExpression": {
                                "hexValue": "30784630",
                                "id": 1441,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "6388:4:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_240_by_1",
                                  "typeString": "int_const 240"
                                },
                                "value": "0xF0"
                              },
                              "src": "6384:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "falseBody": {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                },
                                "id": 1450,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1448,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1421,
                                  "src": "6444:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "30784638",
                                  "id": 1449,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6448:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_248_by_1",
                                    "typeString": "int_const 248"
                                  },
                                  "value": "0xF8"
                                },
                                "src": "6444:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "condition": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint8",
                                    "typeString": "uint8"
                                  },
                                  "id": 1458,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 1456,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1421,
                                    "src": "6504:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint8",
                                      "typeString": "uint8"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "<",
                                  "rightExpression": {
                                    "hexValue": "30784643",
                                    "id": 1457,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6508:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_252_by_1",
                                      "typeString": "int_const 252"
                                    },
                                    "value": "0xFC"
                                  },
                                  "src": "6504:8:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "falseBody": {
                                  "id": 1468,
                                  "nodeType": "Block",
                                  "src": "6561:41:4",
                                  "statements": [
                                    {
                                      "expression": {
                                        "id": 1466,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "id": 1464,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1397,
                                          "src": "6579:3:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "hexValue": "36",
                                          "id": 1465,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6586:1:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_6_by_1",
                                            "typeString": "int_const 6"
                                          },
                                          "value": "6"
                                        },
                                        "src": "6579:8:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1467,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6579:8:4"
                                    }
                                  ]
                                },
                                "id": 1469,
                                "nodeType": "IfStatement",
                                "src": "6501:101:4",
                                "trueBody": {
                                  "id": 1463,
                                  "nodeType": "Block",
                                  "src": "6514:41:4",
                                  "statements": [
                                    {
                                      "expression": {
                                        "id": 1461,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftHandSide": {
                                          "id": 1459,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1397,
                                          "src": "6532:3:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "Assignment",
                                        "operator": "+=",
                                        "rightHandSide": {
                                          "hexValue": "35",
                                          "id": 1460,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "kind": "number",
                                          "lValueRequested": false,
                                          "nodeType": "Literal",
                                          "src": "6539:1:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_rational_5_by_1",
                                            "typeString": "int_const 5"
                                          },
                                          "value": "5"
                                        },
                                        "src": "6532:8:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "id": 1462,
                                      "nodeType": "ExpressionStatement",
                                      "src": "6532:8:4"
                                    }
                                  ]
                                }
                              },
                              "id": 1470,
                              "nodeType": "IfStatement",
                              "src": "6441:161:4",
                              "trueBody": {
                                "id": 1455,
                                "nodeType": "Block",
                                "src": "6454:41:4",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 1453,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 1451,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1397,
                                        "src": "6472:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "hexValue": "34",
                                        "id": 1452,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "6479:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_4_by_1",
                                          "typeString": "int_const 4"
                                        },
                                        "value": "4"
                                      },
                                      "src": "6472:8:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1454,
                                    "nodeType": "ExpressionStatement",
                                    "src": "6472:8:4"
                                  }
                                ]
                              }
                            },
                            "id": 1471,
                            "nodeType": "IfStatement",
                            "src": "6381:221:4",
                            "trueBody": {
                              "id": 1447,
                              "nodeType": "Block",
                              "src": "6394:41:4",
                              "statements": [
                                {
                                  "expression": {
                                    "id": 1445,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftHandSide": {
                                      "id": 1443,
                                      "name": "ptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1397,
                                      "src": "6412:3:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "Assignment",
                                    "operator": "+=",
                                    "rightHandSide": {
                                      "hexValue": "33",
                                      "id": 1444,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "6419:1:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_3_by_1",
                                        "typeString": "int_const 3"
                                      },
                                      "value": "3"
                                    },
                                    "src": "6412:8:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1446,
                                  "nodeType": "ExpressionStatement",
                                  "src": "6412:8:4"
                                }
                              ]
                            }
                          },
                          "id": 1472,
                          "nodeType": "IfStatement",
                          "src": "6321:281:4",
                          "trueBody": {
                            "id": 1439,
                            "nodeType": "Block",
                            "src": "6334:41:4",
                            "statements": [
                              {
                                "expression": {
                                  "id": 1437,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 1435,
                                    "name": "ptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1397,
                                    "src": "6352:3:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "+=",
                                  "rightHandSide": {
                                    "hexValue": "32",
                                    "id": 1436,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "6359:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_2_by_1",
                                      "typeString": "int_const 2"
                                    },
                                    "value": "2"
                                  },
                                  "src": "6352:8:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 1438,
                                "nodeType": "ExpressionStatement",
                                "src": "6352:8:4"
                              }
                            ]
                          }
                        },
                        "id": 1473,
                        "nodeType": "IfStatement",
                        "src": "6260:342:4",
                        "trueBody": {
                          "id": 1431,
                          "nodeType": "Block",
                          "src": "6274:41:4",
                          "statements": [
                            {
                              "expression": {
                                "id": 1429,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 1427,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1397,
                                  "src": "6292:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "hexValue": "31",
                                  "id": 1428,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "6299:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_1_by_1",
                                    "typeString": "int_const 1"
                                  },
                                  "value": "1"
                                },
                                "src": "6292:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1430,
                              "nodeType": "ExpressionStatement",
                              "src": "6292:8:4"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1416,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1414,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1397,
                      "src": "6157:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 1415,
                      "name": "end",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1404,
                      "src": "6163:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "6157:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1475,
                  "initializationExpression": {
                    "expression": {
                      "id": 1412,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 1410,
                        "name": "l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1394,
                        "src": "6150:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "hexValue": "30",
                        "id": 1411,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6154:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      },
                      "src": "6150:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1413,
                    "nodeType": "ExpressionStatement",
                    "src": "6150:5:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 1418,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "6168:3:4",
                      "subExpression": {
                        "id": 1417,
                        "name": "l",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1394,
                        "src": "6168:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1419,
                    "nodeType": "ExpressionStatement",
                    "src": "6168:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "6145:467:4"
                }
              ]
            },
            "id": 1477,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "len",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1392,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1391,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1477,
                  "src": "5939:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1390,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "5939:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5938:19:4"
            },
            "returnParameters": {
              "id": 1395,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1394,
                  "mutability": "mutable",
                  "name": "l",
                  "nodeType": "VariableDeclaration",
                  "scope": 1477,
                  "src": "5981:6:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1393,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "5981:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5980:8:4"
            },
            "scope": 2845,
            "src": "5926:692:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1489,
              "nodeType": "Block",
              "src": "6874:38:4",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1487,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1484,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1479,
                        "src": "6891:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1485,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "6891:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1486,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6904:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6891:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1483,
                  "id": 1488,
                  "nodeType": "Return",
                  "src": "6884:21:4"
                }
              ]
            },
            "id": 1490,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "empty",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1480,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1479,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1490,
                  "src": "6826:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1478,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "6826:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6825:19:4"
            },
            "returnParameters": {
              "id": 1483,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1482,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1490,
                  "src": "6868:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1481,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6868:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6867:6:4"
            },
            "scope": 2845,
            "src": "6811:101:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1622,
              "nodeType": "Block",
              "src": "7424:907:4",
              "statements": [
                {
                  "assignments": [
                    1500
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1500,
                      "mutability": "mutable",
                      "name": "shortest",
                      "nodeType": "VariableDeclaration",
                      "scope": 1622,
                      "src": "7434:13:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1499,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7434:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1503,
                  "initialValue": {
                    "expression": {
                      "id": 1501,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1492,
                      "src": "7450:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "id": 1502,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_len",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1124,
                    "src": "7450:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7434:25:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1508,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1504,
                        "name": "other",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1494,
                        "src": "7473:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1505,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "7473:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 1506,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1492,
                        "src": "7486:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1507,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "7486:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7473:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1514,
                  "nodeType": "IfStatement",
                  "src": "7469:61:4",
                  "trueBody": {
                    "expression": {
                      "id": 1512,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 1509,
                        "name": "shortest",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1500,
                        "src": "7509:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "=",
                      "rightHandSide": {
                        "expression": {
                          "id": 1510,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1494,
                          "src": "7520:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 1511,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "7520:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "7509:21:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1513,
                    "nodeType": "ExpressionStatement",
                    "src": "7509:21:4"
                  }
                },
                {
                  "assignments": [
                    1516
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1516,
                      "mutability": "mutable",
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1622,
                      "src": "7541:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1515,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7541:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1519,
                  "initialValue": {
                    "expression": {
                      "id": 1517,
                      "name": "self",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1492,
                      "src": "7556:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "id": 1518,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_ptr",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1126,
                    "src": "7556:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7541:24:4"
                },
                {
                  "assignments": [
                    1521
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1521,
                      "mutability": "mutable",
                      "name": "otherptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 1622,
                      "src": "7575:13:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1520,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "7575:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1524,
                  "initialValue": {
                    "expression": {
                      "id": 1522,
                      "name": "other",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1494,
                      "src": "7591:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                        "typeString": "struct strings.slice memory"
                      }
                    },
                    "id": 1523,
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "_ptr",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": 1126,
                    "src": "7591:10:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7575:26:4"
                },
                {
                  "body": {
                    "id": 1608,
                    "nodeType": "Block",
                    "src": "7657:619:4",
                    "statements": [
                      {
                        "assignments": [
                          1537
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1537,
                            "mutability": "mutable",
                            "name": "a",
                            "nodeType": "VariableDeclaration",
                            "scope": 1608,
                            "src": "7671:6:4",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1536,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "7671:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1538,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7671:6:4"
                      },
                      {
                        "assignments": [
                          1540
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1540,
                            "mutability": "mutable",
                            "name": "b",
                            "nodeType": "VariableDeclaration",
                            "scope": 1608,
                            "src": "7691:6:4",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1539,
                              "name": "uint",
                              "nodeType": "ElementaryTypeName",
                              "src": "7691:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "visibility": "internal"
                          }
                        ],
                        "id": 1541,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "7691:6:4"
                      },
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "7720:88:4",
                          "statements": [
                            {
                              "nodeType": "YulAssignment",
                              "src": "7738:19:4",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "selfptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "7749:7:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7743:5:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7743:14:4"
                              },
                              "variableNames": [
                                {
                                  "name": "a",
                                  "nodeType": "YulIdentifier",
                                  "src": "7738:1:4"
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "7774:20:4",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "otherptr",
                                    "nodeType": "YulIdentifier",
                                    "src": "7785:8:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "7779:5:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "7779:15:4"
                              },
                              "variableNames": [
                                {
                                  "name": "b",
                                  "nodeType": "YulIdentifier",
                                  "src": "7774:1:4"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "byzantium",
                        "externalReferences": [
                          {
                            "declaration": 1537,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7738:1:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1540,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7774:1:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1521,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7785:8:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1516,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "7749:7:4",
                            "valueSize": 1
                          }
                        ],
                        "id": 1542,
                        "nodeType": "InlineAssembly",
                        "src": "7711:97:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1545,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1543,
                            "name": "a",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1537,
                            "src": "7825:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "id": 1544,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1540,
                            "src": "7830:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "7825:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1599,
                        "nodeType": "IfStatement",
                        "src": "7821:390:4",
                        "trueBody": {
                          "id": 1598,
                          "nodeType": "Block",
                          "src": "7833:378:4",
                          "statements": [
                            {
                              "assignments": [
                                1547
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1547,
                                  "mutability": "mutable",
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1598,
                                  "src": "7912:12:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1546,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7912:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1553,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 1551,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "-",
                                    "prefix": true,
                                    "src": "7935:2:4",
                                    "subExpression": {
                                      "hexValue": "31",
                                      "id": 1550,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": true,
                                      "kind": "number",
                                      "lValueRequested": false,
                                      "nodeType": "Literal",
                                      "src": "7936:1:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_rational_1_by_1",
                                        "typeString": "int_const 1"
                                      },
                                      "value": "1"
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_minus_1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_rational_minus_1_by_1",
                                      "typeString": "int_const -1"
                                    }
                                  ],
                                  "id": 1549,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "7927:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_uint256_$",
                                    "typeString": "type(uint256)"
                                  },
                                  "typeName": {
                                    "id": 1548,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "7927:7:4",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 1552,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "7927:11:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "7912:26:4"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1556,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1554,
                                  "name": "shortest",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1500,
                                  "src": "7972:8:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "hexValue": "3332",
                                  "id": 1555,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "7983:2:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_32_by_1",
                                    "typeString": "int_const 32"
                                  },
                                  "value": "32"
                                },
                                "src": "7972:13:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1576,
                              "nodeType": "IfStatement",
                              "src": "7969:103:4",
                              "trueBody": {
                                "id": 1575,
                                "nodeType": "Block",
                                "src": "7987:85:4",
                                "statements": [
                                  {
                                    "expression": {
                                      "id": 1573,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 1557,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1547,
                                        "src": "8007:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "id": 1572,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "nodeType": "UnaryOperation",
                                        "operator": "~",
                                        "prefix": true,
                                        "src": "8014:39:4",
                                        "subExpression": {
                                          "components": [
                                            {
                                              "commonType": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              },
                                              "id": 1570,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "leftExpression": {
                                                "commonType": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                },
                                                "id": 1568,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "leftExpression": {
                                                  "hexValue": "32",
                                                  "id": 1558,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": true,
                                                  "kind": "number",
                                                  "lValueRequested": false,
                                                  "nodeType": "Literal",
                                                  "src": "8016:1:4",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_rational_2_by_1",
                                                    "typeString": "int_const 2"
                                                  },
                                                  "value": "2"
                                                },
                                                "nodeType": "BinaryOperation",
                                                "operator": "**",
                                                "rightExpression": {
                                                  "components": [
                                                    {
                                                      "commonType": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      },
                                                      "id": 1566,
                                                      "isConstant": false,
                                                      "isLValue": false,
                                                      "isPure": false,
                                                      "lValueRequested": false,
                                                      "leftExpression": {
                                                        "hexValue": "38",
                                                        "id": 1559,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": true,
                                                        "kind": "number",
                                                        "lValueRequested": false,
                                                        "nodeType": "Literal",
                                                        "src": "8022:1:4",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_rational_8_by_1",
                                                          "typeString": "int_const 8"
                                                        },
                                                        "value": "8"
                                                      },
                                                      "nodeType": "BinaryOperation",
                                                      "operator": "*",
                                                      "rightExpression": {
                                                        "components": [
                                                          {
                                                            "commonType": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            },
                                                            "id": 1564,
                                                            "isConstant": false,
                                                            "isLValue": false,
                                                            "isPure": false,
                                                            "lValueRequested": false,
                                                            "leftExpression": {
                                                              "commonType": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              },
                                                              "id": 1562,
                                                              "isConstant": false,
                                                              "isLValue": false,
                                                              "isPure": false,
                                                              "lValueRequested": false,
                                                              "leftExpression": {
                                                                "hexValue": "3332",
                                                                "id": 1560,
                                                                "isConstant": false,
                                                                "isLValue": false,
                                                                "isPure": true,
                                                                "kind": "number",
                                                                "lValueRequested": false,
                                                                "nodeType": "Literal",
                                                                "src": "8027:2:4",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_rational_32_by_1",
                                                                  "typeString": "int_const 32"
                                                                },
                                                                "value": "32"
                                                              },
                                                              "nodeType": "BinaryOperation",
                                                              "operator": "-",
                                                              "rightExpression": {
                                                                "id": 1561,
                                                                "name": "shortest",
                                                                "nodeType": "Identifier",
                                                                "overloadedDeclarations": [],
                                                                "referencedDeclaration": 1500,
                                                                "src": "8032:8:4",
                                                                "typeDescriptions": {
                                                                  "typeIdentifier": "t_uint256",
                                                                  "typeString": "uint256"
                                                                }
                                                              },
                                                              "src": "8027:13:4",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "nodeType": "BinaryOperation",
                                                            "operator": "+",
                                                            "rightExpression": {
                                                              "id": 1563,
                                                              "name": "idx",
                                                              "nodeType": "Identifier",
                                                              "overloadedDeclarations": [],
                                                              "referencedDeclaration": 1526,
                                                              "src": "8043:3:4",
                                                              "typeDescriptions": {
                                                                "typeIdentifier": "t_uint256",
                                                                "typeString": "uint256"
                                                              }
                                                            },
                                                            "src": "8027:19:4",
                                                            "typeDescriptions": {
                                                              "typeIdentifier": "t_uint256",
                                                              "typeString": "uint256"
                                                            }
                                                          }
                                                        ],
                                                        "id": 1565,
                                                        "isConstant": false,
                                                        "isInlineArray": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "nodeType": "TupleExpression",
                                                        "src": "8026:21:4",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      },
                                                      "src": "8022:25:4",
                                                      "typeDescriptions": {
                                                        "typeIdentifier": "t_uint256",
                                                        "typeString": "uint256"
                                                      }
                                                    }
                                                  ],
                                                  "id": 1567,
                                                  "isConstant": false,
                                                  "isInlineArray": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "nodeType": "TupleExpression",
                                                  "src": "8021:27:4",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                },
                                                "src": "8016:32:4",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint256",
                                                  "typeString": "uint256"
                                                }
                                              },
                                              "nodeType": "BinaryOperation",
                                              "operator": "-",
                                              "rightExpression": {
                                                "hexValue": "31",
                                                "id": 1569,
                                                "isConstant": false,
                                                "isLValue": false,
                                                "isPure": true,
                                                "kind": "number",
                                                "lValueRequested": false,
                                                "nodeType": "Literal",
                                                "src": "8051:1:4",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_rational_1_by_1",
                                                  "typeString": "int_const 1"
                                                },
                                                "value": "1"
                                              },
                                              "src": "8016:36:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            }
                                          ],
                                          "id": 1571,
                                          "isConstant": false,
                                          "isInlineArray": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "nodeType": "TupleExpression",
                                          "src": "8015:38:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8007:46:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1574,
                                    "nodeType": "ExpressionStatement",
                                    "src": "8007:46:4"
                                  }
                                ]
                              }
                            },
                            {
                              "assignments": [
                                1578
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1578,
                                  "mutability": "mutable",
                                  "name": "diff",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 1598,
                                  "src": "8089:12:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 1577,
                                    "name": "uint256",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "8089:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 1588,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1587,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1581,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 1579,
                                        "name": "a",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1537,
                                        "src": "8105:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&",
                                      "rightExpression": {
                                        "id": 1580,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1547,
                                        "src": "8109:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8105:8:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1582,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8104:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "components": [
                                    {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 1585,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 1583,
                                        "name": "b",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1540,
                                        "src": "8118:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "&",
                                      "rightExpression": {
                                        "id": 1584,
                                        "name": "mask",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1547,
                                        "src": "8122:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "8118:8:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "id": 1586,
                                  "isConstant": false,
                                  "isInlineArray": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "TupleExpression",
                                  "src": "8117:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "8104:23:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "8089:38:4"
                            },
                            {
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1591,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1589,
                                  "name": "diff",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1578,
                                  "src": "8149:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "hexValue": "30",
                                  "id": 1590,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "8157:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_0_by_1",
                                    "typeString": "int_const 0"
                                  },
                                  "value": "0"
                                },
                                "src": "8149:9:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 1597,
                              "nodeType": "IfStatement",
                              "src": "8145:51:4",
                              "trueBody": {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 1594,
                                      "name": "diff",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1578,
                                      "src": "8191:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "id": 1593,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "8187:3:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_int256_$",
                                      "typeString": "type(int256)"
                                    },
                                    "typeName": {
                                      "id": 1592,
                                      "name": "int",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "8187:3:4",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 1595,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "8187:9:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_int256",
                                    "typeString": "int256"
                                  }
                                },
                                "functionReturnParameters": 1498,
                                "id": 1596,
                                "nodeType": "Return",
                                "src": "8180:16:4"
                              }
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1602,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1600,
                            "name": "selfptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1516,
                            "src": "8224:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 1601,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8235:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "8224:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1603,
                        "nodeType": "ExpressionStatement",
                        "src": "8224:13:4"
                      },
                      {
                        "expression": {
                          "id": 1606,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1604,
                            "name": "otherptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1521,
                            "src": "8251:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "hexValue": "3332",
                            "id": 1605,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "8263:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "8251:14:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1607,
                        "nodeType": "ExpressionStatement",
                        "src": "8251:14:4"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1531,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1529,
                      "name": "idx",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1526,
                      "src": "7630:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 1530,
                      "name": "shortest",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1500,
                      "src": "7636:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "7630:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1609,
                  "initializationExpression": {
                    "assignments": [
                      1526
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1526,
                        "mutability": "mutable",
                        "name": "idx",
                        "nodeType": "VariableDeclaration",
                        "scope": 1609,
                        "src": "7616:8:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1525,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "7616:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 1528,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 1527,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7627:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "7616:12:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 1534,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 1532,
                        "name": "idx",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1526,
                        "src": "7646:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "hexValue": "3332",
                        "id": 1533,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7653:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_32_by_1",
                          "typeString": "int_const 32"
                        },
                        "value": "32"
                      },
                      "src": "7646:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1535,
                    "nodeType": "ExpressionStatement",
                    "src": "7646:9:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "7611:665:4"
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 1620,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 1612,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1492,
                            "src": "8296:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 1613,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "8296:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1611,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8292:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 1610,
                          "name": "int",
                          "nodeType": "ElementaryTypeName",
                          "src": "8292:3:4",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1614,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8292:14:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 1617,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1494,
                            "src": "8313:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 1618,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "8313:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1616,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "8309:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_int256_$",
                          "typeString": "type(int256)"
                        },
                        "typeName": {
                          "id": 1615,
                          "name": "int",
                          "nodeType": "ElementaryTypeName",
                          "src": "8309:3:4",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1619,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8309:15:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "8292:32:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 1498,
                  "id": 1621,
                  "nodeType": "Return",
                  "src": "8285:39:4"
                }
              ]
            },
            "id": 1623,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "compare",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1495,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1492,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1623,
                  "src": "7357:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1491,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "7357:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1494,
                  "mutability": "mutable",
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 1623,
                  "src": "7376:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1493,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "7376:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7356:39:4"
            },
            "returnParameters": {
              "id": 1498,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1497,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1623,
                  "src": "7419:3:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 1496,
                    "name": "int",
                    "nodeType": "ElementaryTypeName",
                    "src": "7419:3:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7418:5:4"
            },
            "scope": 2845,
            "src": "7340:991:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1639,
              "nodeType": "Block",
              "src": "8659:49:4",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    },
                    "id": 1637,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 1633,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1625,
                          "src": "8684:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        {
                          "id": 1634,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1627,
                          "src": "8690:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        ],
                        "id": 1632,
                        "name": "compare",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1623,
                        "src": "8676:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1127_memory_ptr_$_t_struct$_slice_$1127_memory_ptr_$returns$_t_int256_$",
                          "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (int256)"
                        }
                      },
                      "id": 1635,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8676:20:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1636,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8700:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "8676:25:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1631,
                  "id": 1638,
                  "nodeType": "Return",
                  "src": "8669:32:4"
                }
              ]
            },
            "id": 1640,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "equals",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1628,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1625,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1640,
                  "src": "8591:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1624,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "8591:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1627,
                  "mutability": "mutable",
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 1640,
                  "src": "8610:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1626,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "8610:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8590:39:4"
            },
            "returnParameters": {
              "id": 1631,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1630,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1640,
                  "src": "8653:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1629,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8653:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8652:6:4"
            },
            "scope": 2845,
            "src": "8575:133:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1757,
              "nodeType": "Block",
              "src": "9094:785:4",
              "statements": [
                {
                  "expression": {
                    "id": 1654,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 1649,
                        "name": "rune",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1644,
                        "src": "9104:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1651,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "9104:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 1652,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1642,
                        "src": "9116:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1653,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "9116:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9104:21:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1655,
                  "nodeType": "ExpressionStatement",
                  "src": "9104:21:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1659,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1656,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1642,
                        "src": "9140:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1657,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "9140:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1658,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9153:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "9140:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1669,
                  "nodeType": "IfStatement",
                  "src": "9136:83:4",
                  "trueBody": {
                    "id": 1668,
                    "nodeType": "Block",
                    "src": "9156:63:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1664,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1660,
                              "name": "rune",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1644,
                              "src": "9170:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1662,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "9170:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 1663,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9182:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9170:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1665,
                        "nodeType": "ExpressionStatement",
                        "src": "9170:13:4"
                      },
                      {
                        "expression": {
                          "id": 1666,
                          "name": "rune",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1644,
                          "src": "9204:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 1648,
                        "id": 1667,
                        "nodeType": "Return",
                        "src": "9197:11:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1671
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1671,
                      "mutability": "mutable",
                      "name": "l",
                      "nodeType": "VariableDeclaration",
                      "scope": 1757,
                      "src": "9229:6:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1670,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9229:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1672,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9229:6:4"
                },
                {
                  "assignments": [
                    1674
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1674,
                      "mutability": "mutable",
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 1757,
                      "src": "9245:6:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1673,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "9245:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1675,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9245:6:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "9332:56:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "9334:52:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "self",
                                              "nodeType": "YulIdentifier",
                                              "src": "9363:4:4"
                                            },
                                            {
                                              "kind": "number",
                                              "nodeType": "YulLiteral",
                                              "src": "9369:2:4",
                                              "type": "",
                                              "value": "32"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "add",
                                            "nodeType": "YulIdentifier",
                                            "src": "9359:3:4"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "9359:13:4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "mload",
                                        "nodeType": "YulIdentifier",
                                        "src": "9353:5:4"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "9353:20:4"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "9375:2:4",
                                      "type": "",
                                      "value": "31"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "sub",
                                    "nodeType": "YulIdentifier",
                                    "src": "9349:3:4"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "9349:29:4"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "9343:5:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "9343:36:4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "9381:4:4",
                              "type": "",
                              "value": "0xFF"
                            }
                          ],
                          "functionName": {
                            "name": "and",
                            "nodeType": "YulIdentifier",
                            "src": "9339:3:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "9339:47:4"
                        },
                        "variableNames": [
                          {
                            "name": "b",
                            "nodeType": "YulIdentifier",
                            "src": "9334:1:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1674,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9334:1:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1642,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "9363:4:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1676,
                  "nodeType": "InlineAssembly",
                  "src": "9323:65:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1677,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1674,
                      "src": "9401:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "hexValue": "30783830",
                      "id": 1678,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9405:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "0x80"
                    },
                    "src": "9401:8:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1687,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 1685,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1674,
                        "src": "9450:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "hexValue": "30784530",
                        "id": 1686,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9454:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_224_by_1",
                          "typeString": "int_const 224"
                        },
                        "value": "0xE0"
                      },
                      "src": "9450:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1693,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1674,
                          "src": "9499:1:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "hexValue": "30784630",
                          "id": 1694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9503:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_240_by_1",
                            "typeString": "int_const 240"
                          },
                          "value": "0xF0"
                        },
                        "src": "9499:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 1705,
                        "nodeType": "Block",
                        "src": "9545:30:4",
                        "statements": [
                          {
                            "expression": {
                              "id": 1703,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 1701,
                                "name": "l",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1671,
                                "src": "9559:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "hexValue": "34",
                                "id": 1702,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9563:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "9559:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1704,
                            "nodeType": "ExpressionStatement",
                            "src": "9559:5:4"
                          }
                        ]
                      },
                      "id": 1706,
                      "nodeType": "IfStatement",
                      "src": "9496:79:4",
                      "trueBody": {
                        "id": 1700,
                        "nodeType": "Block",
                        "src": "9509:30:4",
                        "statements": [
                          {
                            "expression": {
                              "id": 1698,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 1696,
                                "name": "l",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1671,
                                "src": "9523:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "hexValue": "33",
                                "id": 1697,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "9527:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "9523:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1699,
                            "nodeType": "ExpressionStatement",
                            "src": "9523:5:4"
                          }
                        ]
                      }
                    },
                    "id": 1707,
                    "nodeType": "IfStatement",
                    "src": "9447:128:4",
                    "trueBody": {
                      "id": 1692,
                      "nodeType": "Block",
                      "src": "9460:30:4",
                      "statements": [
                        {
                          "expression": {
                            "id": 1690,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1688,
                              "name": "l",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1671,
                              "src": "9474:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "hexValue": "32",
                              "id": 1689,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "9478:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "9474:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1691,
                          "nodeType": "ExpressionStatement",
                          "src": "9474:5:4"
                        }
                      ]
                    }
                  },
                  "id": 1708,
                  "nodeType": "IfStatement",
                  "src": "9397:178:4",
                  "trueBody": {
                    "id": 1684,
                    "nodeType": "Block",
                    "src": "9411:30:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1680,
                            "name": "l",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1671,
                            "src": "9425:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "31",
                            "id": 1681,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9429:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "9425:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1683,
                        "nodeType": "ExpressionStatement",
                        "src": "9425:5:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1712,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1709,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1671,
                      "src": "9631:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "expression": {
                        "id": 1710,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1642,
                        "src": "9635:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1711,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "9635:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9631:13:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1736,
                  "nodeType": "IfStatement",
                  "src": "9627:153:4",
                  "trueBody": {
                    "id": 1735,
                    "nodeType": "Block",
                    "src": "9646:134:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1718,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1713,
                              "name": "rune",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1644,
                              "src": "9660:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1715,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "9660:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "expression": {
                              "id": 1716,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1642,
                              "src": "9672:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1717,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "9672:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9660:21:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1719,
                        "nodeType": "ExpressionStatement",
                        "src": "9660:21:4"
                      },
                      {
                        "expression": {
                          "id": 1725,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1720,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1642,
                              "src": "9695:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1722,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1126,
                            "src": "9695:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "expression": {
                              "id": 1723,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1642,
                              "src": "9708:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1724,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "9708:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "9695:22:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1726,
                        "nodeType": "ExpressionStatement",
                        "src": "9695:22:4"
                      },
                      {
                        "expression": {
                          "id": 1731,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1727,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1642,
                              "src": "9731:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1729,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "9731:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 1730,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "9743:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "9731:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1732,
                        "nodeType": "ExpressionStatement",
                        "src": "9731:13:4"
                      },
                      {
                        "expression": {
                          "id": 1733,
                          "name": "rune",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1644,
                          "src": "9765:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 1648,
                        "id": 1734,
                        "nodeType": "Return",
                        "src": "9758:11:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 1741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 1737,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1642,
                        "src": "9790:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1739,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "9790:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 1740,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1671,
                      "src": "9803:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9790:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1742,
                  "nodeType": "ExpressionStatement",
                  "src": "9790:14:4"
                },
                {
                  "expression": {
                    "id": 1747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 1743,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1642,
                        "src": "9814:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1745,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "9814:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "id": 1746,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1671,
                      "src": "9827:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9814:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1748,
                  "nodeType": "ExpressionStatement",
                  "src": "9814:14:4"
                },
                {
                  "expression": {
                    "id": 1753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 1749,
                        "name": "rune",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1644,
                        "src": "9838:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1751,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "9838:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1752,
                      "name": "l",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1671,
                      "src": "9850:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "9838:13:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1754,
                  "nodeType": "ExpressionStatement",
                  "src": "9838:13:4"
                },
                {
                  "expression": {
                    "id": 1755,
                    "name": "rune",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1644,
                    "src": "9868:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1648,
                  "id": 1756,
                  "nodeType": "Return",
                  "src": "9861:11:4"
                }
              ]
            },
            "id": 1758,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "nextRune",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1645,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1642,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1758,
                  "src": "9019:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1641,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "9019:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1644,
                  "mutability": "mutable",
                  "name": "rune",
                  "nodeType": "VariableDeclaration",
                  "scope": 1758,
                  "src": "9038:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1643,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "9038:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9018:38:4"
            },
            "returnParameters": {
              "id": 1648,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1647,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1758,
                  "src": "9080:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1646,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "9080:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9079:14:4"
            },
            "scope": 2845,
            "src": "9001:878:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1770,
              "nodeType": "Block",
              "src": "10197:36:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1766,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1760,
                        "src": "10216:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "id": 1767,
                        "name": "ret",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1763,
                        "src": "10222:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      ],
                      "id": 1765,
                      "name": "nextRune",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1758,
                        1771
                      ],
                      "referencedDeclaration": 1758,
                      "src": "10207:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1127_memory_ptr_$_t_struct$_slice_$1127_memory_ptr_$returns$_t_struct$_slice_$1127_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory) pure returns (struct strings.slice memory)"
                      }
                    },
                    "id": 1768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10207:19:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 1769,
                  "nodeType": "ExpressionStatement",
                  "src": "10207:19:4"
                }
              ]
            },
            "id": 1771,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "nextRune",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1761,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1760,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1771,
                  "src": "10137:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1759,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "10137:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10136:19:4"
            },
            "returnParameters": {
              "id": 1764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1763,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1771,
                  "src": "10179:16:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1762,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "10179:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10178:18:4"
            },
            "scope": 2845,
            "src": "10119:114:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1917,
              "nodeType": "Block",
              "src": "10494:1013:4",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1781,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1778,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1773,
                        "src": "10508:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1779,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "10508:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 1780,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10521:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "10508:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1785,
                  "nodeType": "IfStatement",
                  "src": "10504:53:4",
                  "trueBody": {
                    "id": 1784,
                    "nodeType": "Block",
                    "src": "10524:33:4",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 1782,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10545:1:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1777,
                        "id": 1783,
                        "nodeType": "Return",
                        "src": "10538:8:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1787
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1787,
                      "mutability": "mutable",
                      "name": "word",
                      "nodeType": "VariableDeclaration",
                      "scope": 1917,
                      "src": "10567:9:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1786,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10567:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1788,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10567:9:4"
                },
                {
                  "assignments": [
                    1790
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1790,
                      "mutability": "mutable",
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 1917,
                      "src": "10586:11:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1789,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10586:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1791,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10586:11:4"
                },
                {
                  "assignments": [
                    1793
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1793,
                      "mutability": "mutable",
                      "name": "divisor",
                      "nodeType": "VariableDeclaration",
                      "scope": 1917,
                      "src": "10607:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1792,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10607:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1797,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    },
                    "id": 1796,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "leftExpression": {
                      "hexValue": "32",
                      "id": 1794,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10622:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_2_by_1",
                        "typeString": "int_const 2"
                      },
                      "value": "2"
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "**",
                    "rightExpression": {
                      "hexValue": "323438",
                      "id": 1795,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10627:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_248_by_1",
                        "typeString": "int_const 248"
                      },
                      "value": "248"
                    },
                    "src": "10622:8:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_452312848583266388373324160190187140051835877600158453279131187530910662656_by_1",
                      "typeString": "int_const 4523...(67 digits omitted)...2656"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10607:23:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "10694:38:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "10696:34:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "self",
                                      "nodeType": "YulIdentifier",
                                      "src": "10719:4:4"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "10725:2:4",
                                      "type": "",
                                      "value": "32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "10715:3:4"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "10715:13:4"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "10709:5:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "10709:20:4"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "10703:5:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "10703:27:4"
                        },
                        "variableNames": [
                          {
                            "name": "word",
                            "nodeType": "YulIdentifier",
                            "src": "10696:4:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1773,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10719:4:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1787,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "10696:4:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1798,
                  "nodeType": "InlineAssembly",
                  "src": "10685:47:4"
                },
                {
                  "assignments": [
                    1800
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1800,
                      "mutability": "mutable",
                      "name": "b",
                      "nodeType": "VariableDeclaration",
                      "scope": 1917,
                      "src": "10741:6:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1799,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "10741:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1804,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1801,
                      "name": "word",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1787,
                      "src": "10750:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "/",
                    "rightExpression": {
                      "id": 1802,
                      "name": "divisor",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1793,
                      "src": "10757:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "10750:14:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10741:23:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1807,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1805,
                      "name": "b",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1800,
                      "src": "10778:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "hexValue": "30783830",
                      "id": 1806,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "10782:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_128_by_1",
                        "typeString": "int_const 128"
                      },
                      "value": "0x80"
                    },
                    "src": "10778:8:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 1819,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 1817,
                        "name": "b",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1800,
                        "src": "10853:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "<",
                      "rightExpression": {
                        "hexValue": "30784530",
                        "id": 1818,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10857:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_224_by_1",
                          "typeString": "int_const 224"
                        },
                        "value": "0xE0"
                      },
                      "src": "10853:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "falseBody": {
                      "condition": {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1833,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1831,
                          "name": "b",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1800,
                          "src": "10935:1:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<",
                        "rightExpression": {
                          "hexValue": "30784630",
                          "id": 1832,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "10939:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_240_by_1",
                            "typeString": "int_const 240"
                          },
                          "value": "0xF0"
                        },
                        "src": "10935:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "falseBody": {
                        "id": 1855,
                        "nodeType": "Block",
                        "src": "11014:63:4",
                        "statements": [
                          {
                            "expression": {
                              "id": 1849,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 1845,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1776,
                                "src": "11028:3:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1848,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1846,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1800,
                                  "src": "11034:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "hexValue": "30783037",
                                  "id": 1847,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "11038:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_7_by_1",
                                    "typeString": "int_const 7"
                                  },
                                  "value": "0x07"
                                },
                                "src": "11034:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "11028:14:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1850,
                            "nodeType": "ExpressionStatement",
                            "src": "11028:14:4"
                          },
                          {
                            "expression": {
                              "id": 1853,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 1851,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1790,
                                "src": "11056:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "hexValue": "34",
                                "id": 1852,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11065:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_4_by_1",
                                  "typeString": "int_const 4"
                                },
                                "value": "4"
                              },
                              "src": "11056:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1854,
                            "nodeType": "ExpressionStatement",
                            "src": "11056:10:4"
                          }
                        ]
                      },
                      "id": 1856,
                      "nodeType": "IfStatement",
                      "src": "10932:145:4",
                      "trueBody": {
                        "id": 1844,
                        "nodeType": "Block",
                        "src": "10945:63:4",
                        "statements": [
                          {
                            "expression": {
                              "id": 1838,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 1834,
                                "name": "ret",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1776,
                                "src": "10959:3:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1837,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 1835,
                                  "name": "b",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1800,
                                  "src": "10965:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "&",
                                "rightExpression": {
                                  "hexValue": "30783046",
                                  "id": 1836,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "kind": "number",
                                  "lValueRequested": false,
                                  "nodeType": "Literal",
                                  "src": "10969:4:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_rational_15_by_1",
                                    "typeString": "int_const 15"
                                  },
                                  "value": "0x0F"
                                },
                                "src": "10965:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "10959:14:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1839,
                            "nodeType": "ExpressionStatement",
                            "src": "10959:14:4"
                          },
                          {
                            "expression": {
                              "id": 1842,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftHandSide": {
                                "id": 1840,
                                "name": "length",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1790,
                                "src": "10987:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "Assignment",
                              "operator": "=",
                              "rightHandSide": {
                                "hexValue": "33",
                                "id": 1841,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10996:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_3_by_1",
                                  "typeString": "int_const 3"
                                },
                                "value": "3"
                              },
                              "src": "10987:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1843,
                            "nodeType": "ExpressionStatement",
                            "src": "10987:10:4"
                          }
                        ]
                      }
                    },
                    "id": 1857,
                    "nodeType": "IfStatement",
                    "src": "10850:227:4",
                    "trueBody": {
                      "id": 1830,
                      "nodeType": "Block",
                      "src": "10863:63:4",
                      "statements": [
                        {
                          "expression": {
                            "id": 1824,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1820,
                              "name": "ret",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1776,
                              "src": "10877:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1823,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1821,
                                "name": "b",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1800,
                                "src": "10883:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "&",
                              "rightExpression": {
                                "hexValue": "30783146",
                                "id": 1822,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "10887:4:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_31_by_1",
                                  "typeString": "int_const 31"
                                },
                                "value": "0x1F"
                              },
                              "src": "10883:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "10877:14:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1825,
                          "nodeType": "ExpressionStatement",
                          "src": "10877:14:4"
                        },
                        {
                          "expression": {
                            "id": 1828,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftHandSide": {
                              "id": 1826,
                              "name": "length",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1790,
                              "src": "10905:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "Assignment",
                            "operator": "=",
                            "rightHandSide": {
                              "hexValue": "32",
                              "id": 1827,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10914:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_2_by_1",
                                "typeString": "int_const 2"
                              },
                              "value": "2"
                            },
                            "src": "10905:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1829,
                          "nodeType": "ExpressionStatement",
                          "src": "10905:10:4"
                        }
                      ]
                    }
                  },
                  "id": 1858,
                  "nodeType": "IfStatement",
                  "src": "10774:303:4",
                  "trueBody": {
                    "id": 1816,
                    "nodeType": "Block",
                    "src": "10788:56:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1810,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1808,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1776,
                            "src": "10802:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "id": 1809,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1800,
                            "src": "10808:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "10802:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1811,
                        "nodeType": "ExpressionStatement",
                        "src": "10802:7:4"
                      },
                      {
                        "expression": {
                          "id": 1814,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1812,
                            "name": "length",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1790,
                            "src": "10823:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "31",
                            "id": 1813,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "10832:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "10823:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1815,
                        "nodeType": "ExpressionStatement",
                        "src": "10823:10:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1862,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1859,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1790,
                      "src": "11133:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "expression": {
                        "id": 1860,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1773,
                        "src": "11142:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1861,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "11142:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11133:18:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1866,
                  "nodeType": "IfStatement",
                  "src": "11129:57:4",
                  "trueBody": {
                    "id": 1865,
                    "nodeType": "Block",
                    "src": "11153:33:4",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "30",
                          "id": 1863,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "11174:1:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "functionReturnParameters": 1777,
                        "id": 1864,
                        "nodeType": "Return",
                        "src": "11167:8:4"
                      }
                    ]
                  }
                },
                {
                  "body": {
                    "id": 1913,
                    "nodeType": "Block",
                    "src": "11230:250:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1881,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1877,
                            "name": "divisor",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1793,
                            "src": "11244:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1880,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1878,
                              "name": "divisor",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1793,
                              "src": "11254:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "/",
                            "rightExpression": {
                              "hexValue": "323536",
                              "id": 1879,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11264:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_256_by_1",
                                "typeString": "int_const 256"
                              },
                              "value": "256"
                            },
                            "src": "11254:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11244:23:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1882,
                        "nodeType": "ExpressionStatement",
                        "src": "11244:23:4"
                      },
                      {
                        "expression": {
                          "id": 1890,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1883,
                            "name": "b",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1800,
                            "src": "11281:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1889,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1886,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 1884,
                                    "name": "word",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1787,
                                    "src": "11286:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "/",
                                  "rightExpression": {
                                    "id": 1885,
                                    "name": "divisor",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1793,
                                    "src": "11293:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "11286:14:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 1887,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11285:16:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30784646",
                              "id": 1888,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11304:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_255_by_1",
                                "typeString": "int_const 255"
                              },
                              "value": "0xFF"
                            },
                            "src": "11285:23:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11281:27:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1891,
                        "nodeType": "ExpressionStatement",
                        "src": "11281:27:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1896,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1894,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 1892,
                              "name": "b",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1800,
                              "src": "11326:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&",
                            "rightExpression": {
                              "hexValue": "30784330",
                              "id": 1893,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "11330:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_192_by_1",
                                "typeString": "int_const 192"
                              },
                              "value": "0xC0"
                            },
                            "src": "11326:8:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "!=",
                          "rightExpression": {
                            "hexValue": "30783830",
                            "id": 1895,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11338:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_128_by_1",
                              "typeString": "int_const 128"
                            },
                            "value": "0x80"
                          },
                          "src": "11326:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1900,
                        "nodeType": "IfStatement",
                        "src": "11322:105:4",
                        "trueBody": {
                          "id": 1899,
                          "nodeType": "Block",
                          "src": "11344:83:4",
                          "statements": [
                            {
                              "expression": {
                                "hexValue": "30",
                                "id": 1897,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "11411:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "functionReturnParameters": 1777,
                              "id": 1898,
                              "nodeType": "Return",
                              "src": "11404:8:4"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "id": 1911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 1901,
                            "name": "ret",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1776,
                            "src": "11440:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 1910,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1904,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 1902,
                                    "name": "ret",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1776,
                                    "src": "11447:3:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "*",
                                  "rightExpression": {
                                    "hexValue": "3634",
                                    "id": 1903,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11453:2:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_64_by_1",
                                      "typeString": "int_const 64"
                                    },
                                    "value": "64"
                                  },
                                  "src": "11447:8:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 1905,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11446:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "|",
                            "rightExpression": {
                              "components": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1908,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 1906,
                                    "name": "b",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1800,
                                    "src": "11460:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "&",
                                  "rightExpression": {
                                    "hexValue": "30783346",
                                    "id": 1907,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "11464:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_63_by_1",
                                      "typeString": "int_const 63"
                                    },
                                    "value": "0x3F"
                                  },
                                  "src": "11460:8:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "id": 1909,
                              "isConstant": false,
                              "isInlineArray": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "TupleExpression",
                              "src": "11459:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "11446:23:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "11440:29:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1912,
                        "nodeType": "ExpressionStatement",
                        "src": "11440:29:4"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1873,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1871,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1868,
                      "src": "11213:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "id": 1872,
                      "name": "length",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1790,
                      "src": "11217:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11213:10:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1914,
                  "initializationExpression": {
                    "assignments": [
                      1868
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1868,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 1914,
                        "src": "11201:6:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1867,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "11201:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 1870,
                    "initialValue": {
                      "hexValue": "31",
                      "id": 1869,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "11210:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_1_by_1",
                        "typeString": "int_const 1"
                      },
                      "value": "1"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "11201:10:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 1875,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "11225:3:4",
                      "subExpression": {
                        "id": 1874,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1868,
                        "src": "11225:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1876,
                    "nodeType": "ExpressionStatement",
                    "src": "11225:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "11196:284:4"
                },
                {
                  "expression": {
                    "id": 1915,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1776,
                    "src": "11497:3:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1777,
                  "id": 1916,
                  "nodeType": "Return",
                  "src": "11490:10:4"
                }
              ]
            },
            "id": 1918,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "ord",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1774,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1773,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "10442:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1772,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "10442:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10441:19:4"
            },
            "returnParameters": {
              "id": 1777,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1776,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1918,
                  "src": "10484:8:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1775,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "10484:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10483:10:4"
            },
            "scope": 2845,
            "src": "10429:1078:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1926,
              "nodeType": "Block",
              "src": "11729:100:4",
              "statements": [
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "11748:75:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "11762:51:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "name": "self",
                                      "nodeType": "YulIdentifier",
                                      "src": "11789:4:4"
                                    },
                                    {
                                      "kind": "number",
                                      "nodeType": "YulLiteral",
                                      "src": "11795:2:4",
                                      "type": "",
                                      "value": "32"
                                    }
                                  ],
                                  "functionName": {
                                    "name": "add",
                                    "nodeType": "YulIdentifier",
                                    "src": "11785:3:4"
                                  },
                                  "nodeType": "YulFunctionCall",
                                  "src": "11785:13:4"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "11779:5:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11779:20:4"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "self",
                                  "nodeType": "YulIdentifier",
                                  "src": "11807:4:4"
                                }
                              ],
                              "functionName": {
                                "name": "mload",
                                "nodeType": "YulIdentifier",
                                "src": "11801:5:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "11801:11:4"
                            }
                          ],
                          "functionName": {
                            "name": "keccak256",
                            "nodeType": "YulIdentifier",
                            "src": "11769:9:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "11769:44:4"
                        },
                        "variableNames": [
                          {
                            "name": "ret",
                            "nodeType": "YulIdentifier",
                            "src": "11762:3:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1923,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11762:3:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1920,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11789:4:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1920,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "11807:4:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1925,
                  "nodeType": "InlineAssembly",
                  "src": "11739:84:4"
                }
              ]
            },
            "id": 1927,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "keccak",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1921,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1920,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1927,
                  "src": "11674:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1919,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "11674:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11673:19:4"
            },
            "returnParameters": {
              "id": 1924,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1923,
                  "mutability": "mutable",
                  "name": "ret",
                  "nodeType": "VariableDeclaration",
                  "scope": 1927,
                  "src": "11716:11:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1922,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "11716:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11715:13:4"
            },
            "scope": 2845,
            "src": "11658:171:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1960,
              "nodeType": "Block",
              "src": "12167:456:4",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1940,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1936,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1929,
                        "src": "12181:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1937,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "12181:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 1938,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1931,
                        "src": "12193:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1939,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "12193:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12181:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1944,
                  "nodeType": "IfStatement",
                  "src": "12177:66:4",
                  "trueBody": {
                    "id": 1943,
                    "nodeType": "Block",
                    "src": "12206:37:4",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 1941,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12227:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 1935,
                        "id": 1942,
                        "nodeType": "Return",
                        "src": "12220:12:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1949,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1945,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1929,
                        "src": "12257:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1946,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "12257:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 1947,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1931,
                        "src": "12270:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1948,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "12270:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "12257:24:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1953,
                  "nodeType": "IfStatement",
                  "src": "12253:66:4",
                  "trueBody": {
                    "id": 1952,
                    "nodeType": "Block",
                    "src": "12283:36:4",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 1950,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12304:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 1935,
                        "id": 1951,
                        "nodeType": "Return",
                        "src": "12297:11:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1955
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1955,
                      "mutability": "mutable",
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 1960,
                      "src": "12329:10:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1954,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "12329:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1956,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12329:10:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "12358:237:4",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "12372:27:4",
                        "value": {
                          "arguments": [
                            {
                              "name": "needle",
                              "nodeType": "YulIdentifier",
                              "src": "12392:6:4"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "12386:5:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12386:13:4"
                        },
                        "variables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "12376:6:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "12412:37:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "self",
                                  "nodeType": "YulIdentifier",
                                  "src": "12437:4:4"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "12443:4:4",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "12433:3:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "12433:15:4"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "12427:5:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12427:22:4"
                        },
                        "variables": [
                          {
                            "name": "selfptr",
                            "nodeType": "YulTypedName",
                            "src": "12416:7:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "12462:41:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "needle",
                                  "nodeType": "YulIdentifier",
                                  "src": "12489:6:4"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "12497:4:4",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "12485:3:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "12485:17:4"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "12479:5:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12479:24:4"
                        },
                        "variables": [
                          {
                            "name": "needleptr",
                            "nodeType": "YulTypedName",
                            "src": "12466:9:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "12516:69:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "selfptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "12538:7:4"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "12547:6:4"
                                }
                              ],
                              "functionName": {
                                "name": "keccak256",
                                "nodeType": "YulIdentifier",
                                "src": "12528:9:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "12528:26:4"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "needleptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "12566:9:4"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "12577:6:4"
                                }
                              ],
                              "functionName": {
                                "name": "keccak256",
                                "nodeType": "YulIdentifier",
                                "src": "12556:9:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "12556:28:4"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "12525:2:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "12525:60:4"
                        },
                        "variableNames": [
                          {
                            "name": "equal",
                            "nodeType": "YulIdentifier",
                            "src": "12516:5:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 1955,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12516:5:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1931,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12392:6:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1931,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12489:6:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 1929,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "12437:4:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 1957,
                  "nodeType": "InlineAssembly",
                  "src": "12349:246:4"
                },
                {
                  "expression": {
                    "id": 1958,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1955,
                    "src": "12611:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1935,
                  "id": 1959,
                  "nodeType": "Return",
                  "src": "12604:12:4"
                }
              ]
            },
            "id": 1961,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "startsWith",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1932,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1929,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 1961,
                  "src": "12098:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1928,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "12098:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1931,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 1961,
                  "src": "12117:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1930,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "12117:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12097:40:4"
            },
            "returnParameters": {
              "id": 1935,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1934,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 1961,
                  "src": "12161:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1933,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12161:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12160:6:4"
            },
            "scope": 2845,
            "src": "12078:545:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2010,
              "nodeType": "Block",
              "src": "12988:568:4",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1974,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1970,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1963,
                        "src": "13002:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1971,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "13002:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 1972,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1965,
                        "src": "13014:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1973,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "13014:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13002:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1978,
                  "nodeType": "IfStatement",
                  "src": "12998:65:4",
                  "trueBody": {
                    "id": 1977,
                    "nodeType": "Block",
                    "src": "13027:36:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1975,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1963,
                          "src": "13048:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 1969,
                        "id": 1976,
                        "nodeType": "Return",
                        "src": "13041:11:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    1980
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1980,
                      "mutability": "mutable",
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 2010,
                      "src": "13073:10:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1979,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "13073:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1982,
                  "initialValue": {
                    "hexValue": "74727565",
                    "id": 1981,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "13086:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13073:17:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1987,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 1983,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1963,
                        "src": "13104:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1984,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "13104:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 1985,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1965,
                        "src": "13117:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 1986,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "13117:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13104:24:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1990,
                  "nodeType": "IfStatement",
                  "src": "13100:320:4",
                  "trueBody": {
                    "id": 1989,
                    "nodeType": "Block",
                    "src": "13130:290:4",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "13153:257:4",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13171:27:4",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "needle",
                                    "nodeType": "YulIdentifier",
                                    "src": "13191:6:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "13185:5:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13185:13:4"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "13175:6:4",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13215:37:4",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "self",
                                        "nodeType": "YulIdentifier",
                                        "src": "13240:4:4"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13246:4:4",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13236:3:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13236:15:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "13230:5:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13230:22:4"
                              },
                              "variables": [
                                {
                                  "name": "selfptr",
                                  "nodeType": "YulTypedName",
                                  "src": "13219:7:4",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "13269:41:4",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "needle",
                                        "nodeType": "YulIdentifier",
                                        "src": "13296:6:4"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "13304:4:4",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "13292:3:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13292:17:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "13286:5:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13286:24:4"
                              },
                              "variables": [
                                {
                                  "name": "needleptr",
                                  "nodeType": "YulTypedName",
                                  "src": "13273:9:4",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "13327:69:4",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "selfptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "13349:7:4"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "13358:6:4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nodeType": "YulIdentifier",
                                      "src": "13339:9:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13339:26:4"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "needleptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "13377:9:4"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "13388:6:4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nodeType": "YulIdentifier",
                                      "src": "13367:9:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "13367:28:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "13336:2:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "13336:60:4"
                              },
                              "variableNames": [
                                {
                                  "name": "equal",
                                  "nodeType": "YulIdentifier",
                                  "src": "13327:5:4"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "byzantium",
                        "externalReferences": [
                          {
                            "declaration": 1980,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13327:5:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1965,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13191:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1965,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13296:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 1963,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "13240:4:4",
                            "valueSize": 1
                          }
                        ],
                        "id": 1988,
                        "nodeType": "InlineAssembly",
                        "src": "13144:266:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "id": 1991,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1980,
                    "src": "13434:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2007,
                  "nodeType": "IfStatement",
                  "src": "13430:98:4",
                  "trueBody": {
                    "id": 2006,
                    "nodeType": "Block",
                    "src": "13441:87:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1997,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1992,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1963,
                              "src": "13455:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1994,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "13455:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "expression": {
                              "id": 1995,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1965,
                              "src": "13468:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 1996,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "13468:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13455:24:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1998,
                        "nodeType": "ExpressionStatement",
                        "src": "13455:24:4"
                      },
                      {
                        "expression": {
                          "id": 2004,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 1999,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1963,
                              "src": "13493:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2001,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1126,
                            "src": "13493:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "expression": {
                              "id": 2002,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1965,
                              "src": "13506:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2003,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "13506:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13493:24:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2005,
                        "nodeType": "ExpressionStatement",
                        "src": "13493:24:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 2008,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1963,
                    "src": "13545:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 1969,
                  "id": 2009,
                  "nodeType": "Return",
                  "src": "13538:11:4"
                }
              ]
            },
            "id": 2011,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "beyond",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1966,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1963,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2011,
                  "src": "12911:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1962,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "12911:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1965,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2011,
                  "src": "12930:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1964,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "12930:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12910:40:4"
            },
            "returnParameters": {
              "id": 1969,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1968,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2011,
                  "src": "12974:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 1967,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "12974:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12973:14:4"
            },
            "scope": 2845,
            "src": "12895:661:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2054,
              "nodeType": "Block",
              "src": "13893:466:4",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2024,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2020,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2013,
                        "src": "13907:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2021,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "13907:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 2022,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2015,
                        "src": "13919:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2023,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "13919:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13907:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2028,
                  "nodeType": "IfStatement",
                  "src": "13903:66:4",
                  "trueBody": {
                    "id": 2027,
                    "nodeType": "Block",
                    "src": "13932:37:4",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "66616c7365",
                          "id": 2025,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "13953:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "false"
                        },
                        "functionReturnParameters": 2019,
                        "id": 2026,
                        "nodeType": "Return",
                        "src": "13946:12:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2030
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2030,
                      "mutability": "mutable",
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2054,
                      "src": "13979:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2029,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "13979:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2039,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2038,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2035,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2031,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2013,
                          "src": "13994:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2032,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "13994:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 2033,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2013,
                          "src": "14006:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2034,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "14006:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "13994:21:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "expression": {
                        "id": 2036,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2015,
                        "src": "14018:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2037,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "14018:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13994:35:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13979:50:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2040,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2030,
                      "src": "14044:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 2041,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2015,
                        "src": "14055:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2042,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "14055:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14044:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2047,
                  "nodeType": "IfStatement",
                  "src": "14040:64:4",
                  "trueBody": {
                    "id": 2046,
                    "nodeType": "Block",
                    "src": "14068:36:4",
                    "statements": [
                      {
                        "expression": {
                          "hexValue": "74727565",
                          "id": 2044,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "bool",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14089:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          },
                          "value": "true"
                        },
                        "functionReturnParameters": 2019,
                        "id": 2045,
                        "nodeType": "Return",
                        "src": "14082:11:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2049
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2049,
                      "mutability": "mutable",
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 2054,
                      "src": "14114:10:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 2048,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "14114:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2050,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14114:10:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "14143:187:4",
                    "statements": [
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "14157:27:4",
                        "value": {
                          "arguments": [
                            {
                              "name": "needle",
                              "nodeType": "YulIdentifier",
                              "src": "14177:6:4"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "14171:5:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14171:13:4"
                        },
                        "variables": [
                          {
                            "name": "length",
                            "nodeType": "YulTypedName",
                            "src": "14161:6:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulVariableDeclaration",
                        "src": "14197:41:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "needle",
                                  "nodeType": "YulIdentifier",
                                  "src": "14224:6:4"
                                },
                                {
                                  "kind": "number",
                                  "nodeType": "YulLiteral",
                                  "src": "14232:4:4",
                                  "type": "",
                                  "value": "0x20"
                                }
                              ],
                              "functionName": {
                                "name": "add",
                                "nodeType": "YulIdentifier",
                                "src": "14220:3:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "14220:17:4"
                            }
                          ],
                          "functionName": {
                            "name": "mload",
                            "nodeType": "YulIdentifier",
                            "src": "14214:5:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14214:24:4"
                        },
                        "variables": [
                          {
                            "name": "needleptr",
                            "nodeType": "YulTypedName",
                            "src": "14201:9:4",
                            "type": ""
                          }
                        ]
                      },
                      {
                        "nodeType": "YulAssignment",
                        "src": "14251:69:4",
                        "value": {
                          "arguments": [
                            {
                              "arguments": [
                                {
                                  "name": "selfptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "14273:7:4"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "14282:6:4"
                                }
                              ],
                              "functionName": {
                                "name": "keccak256",
                                "nodeType": "YulIdentifier",
                                "src": "14263:9:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "14263:26:4"
                            },
                            {
                              "arguments": [
                                {
                                  "name": "needleptr",
                                  "nodeType": "YulIdentifier",
                                  "src": "14301:9:4"
                                },
                                {
                                  "name": "length",
                                  "nodeType": "YulIdentifier",
                                  "src": "14312:6:4"
                                }
                              ],
                              "functionName": {
                                "name": "keccak256",
                                "nodeType": "YulIdentifier",
                                "src": "14291:9:4"
                              },
                              "nodeType": "YulFunctionCall",
                              "src": "14291:28:4"
                            }
                          ],
                          "functionName": {
                            "name": "eq",
                            "nodeType": "YulIdentifier",
                            "src": "14260:2:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "14260:60:4"
                        },
                        "variableNames": [
                          {
                            "name": "equal",
                            "nodeType": "YulIdentifier",
                            "src": "14251:5:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 2049,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14251:5:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2015,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14177:6:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2015,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14224:6:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2030,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "14273:7:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 2051,
                  "nodeType": "InlineAssembly",
                  "src": "14134:196:4"
                },
                {
                  "expression": {
                    "id": 2052,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2049,
                    "src": "14347:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2019,
                  "id": 2053,
                  "nodeType": "Return",
                  "src": "14340:12:4"
                }
              ]
            },
            "id": 2055,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "endsWith",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2016,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2013,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2055,
                  "src": "13824:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2012,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "13824:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2015,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2055,
                  "src": "13843:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2014,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "13843:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13823:40:4"
            },
            "returnParameters": {
              "id": 2019,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2018,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2055,
                  "src": "13887:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2017,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "13887:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13886:6:4"
            },
            "scope": 2845,
            "src": "13806:553:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2107,
              "nodeType": "Block",
              "src": "14715:534:4",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2064,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2057,
                        "src": "14729:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2065,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "14729:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 2066,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2059,
                        "src": "14741:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2067,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "14741:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14729:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2072,
                  "nodeType": "IfStatement",
                  "src": "14725:65:4",
                  "trueBody": {
                    "id": 2071,
                    "nodeType": "Block",
                    "src": "14754:36:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2069,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2057,
                          "src": "14775:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "functionReturnParameters": 2063,
                        "id": 2070,
                        "nodeType": "Return",
                        "src": "14768:11:4"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    2074
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2074,
                      "mutability": "mutable",
                      "name": "selfptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2107,
                      "src": "14800:12:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2073,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "14800:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2083,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2082,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2079,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2075,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2057,
                          "src": "14815:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2076,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "14815:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 2077,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2057,
                          "src": "14827:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2078,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "14827:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "14815:21:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "-",
                    "rightExpression": {
                      "expression": {
                        "id": 2080,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2059,
                        "src": "14839:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2081,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "14839:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14815:35:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14800:50:4"
                },
                {
                  "assignments": [
                    2085
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2085,
                      "mutability": "mutable",
                      "name": "equal",
                      "nodeType": "VariableDeclaration",
                      "scope": 2107,
                      "src": "14860:10:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 2084,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "14860:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2087,
                  "initialValue": {
                    "hexValue": "74727565",
                    "id": 2086,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "14873:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14860:17:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2091,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2088,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2074,
                      "src": "14891:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 2089,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2059,
                        "src": "14902:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2090,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "14902:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14891:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2094,
                  "nodeType": "IfStatement",
                  "src": "14887:264:4",
                  "trueBody": {
                    "id": 2093,
                    "nodeType": "Block",
                    "src": "14915:236:4",
                    "statements": [
                      {
                        "AST": {
                          "nodeType": "YulBlock",
                          "src": "14938:203:4",
                          "statements": [
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "14956:27:4",
                              "value": {
                                "arguments": [
                                  {
                                    "name": "needle",
                                    "nodeType": "YulIdentifier",
                                    "src": "14976:6:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "14970:5:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "14970:13:4"
                              },
                              "variables": [
                                {
                                  "name": "length",
                                  "nodeType": "YulTypedName",
                                  "src": "14960:6:4",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulVariableDeclaration",
                              "src": "15000:41:4",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "needle",
                                        "nodeType": "YulIdentifier",
                                        "src": "15027:6:4"
                                      },
                                      {
                                        "kind": "number",
                                        "nodeType": "YulLiteral",
                                        "src": "15035:4:4",
                                        "type": "",
                                        "value": "0x20"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "add",
                                      "nodeType": "YulIdentifier",
                                      "src": "15023:3:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15023:17:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "mload",
                                  "nodeType": "YulIdentifier",
                                  "src": "15017:5:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15017:24:4"
                              },
                              "variables": [
                                {
                                  "name": "needleptr",
                                  "nodeType": "YulTypedName",
                                  "src": "15004:9:4",
                                  "type": ""
                                }
                              ]
                            },
                            {
                              "nodeType": "YulAssignment",
                              "src": "15058:69:4",
                              "value": {
                                "arguments": [
                                  {
                                    "arguments": [
                                      {
                                        "name": "selfptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "15080:7:4"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "15089:6:4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nodeType": "YulIdentifier",
                                      "src": "15070:9:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15070:26:4"
                                  },
                                  {
                                    "arguments": [
                                      {
                                        "name": "needleptr",
                                        "nodeType": "YulIdentifier",
                                        "src": "15108:9:4"
                                      },
                                      {
                                        "name": "length",
                                        "nodeType": "YulIdentifier",
                                        "src": "15119:6:4"
                                      }
                                    ],
                                    "functionName": {
                                      "name": "keccak256",
                                      "nodeType": "YulIdentifier",
                                      "src": "15098:9:4"
                                    },
                                    "nodeType": "YulFunctionCall",
                                    "src": "15098:28:4"
                                  }
                                ],
                                "functionName": {
                                  "name": "eq",
                                  "nodeType": "YulIdentifier",
                                  "src": "15067:2:4"
                                },
                                "nodeType": "YulFunctionCall",
                                "src": "15067:60:4"
                              },
                              "variableNames": [
                                {
                                  "name": "equal",
                                  "nodeType": "YulIdentifier",
                                  "src": "15058:5:4"
                                }
                              ]
                            }
                          ]
                        },
                        "evmVersion": "byzantium",
                        "externalReferences": [
                          {
                            "declaration": 2085,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15058:5:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2059,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "14976:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2059,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15027:6:4",
                            "valueSize": 1
                          },
                          {
                            "declaration": 2074,
                            "isOffset": false,
                            "isSlot": false,
                            "src": "15080:7:4",
                            "valueSize": 1
                          }
                        ],
                        "id": 2092,
                        "nodeType": "InlineAssembly",
                        "src": "14929:212:4"
                      }
                    ]
                  }
                },
                {
                  "condition": {
                    "id": 2095,
                    "name": "equal",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2085,
                    "src": "15165:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2104,
                  "nodeType": "IfStatement",
                  "src": "15161:60:4",
                  "trueBody": {
                    "id": 2103,
                    "nodeType": "Block",
                    "src": "15172:49:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2101,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2096,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2057,
                              "src": "15186:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2098,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "15186:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "expression": {
                              "id": 2099,
                              "name": "needle",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2059,
                              "src": "15199:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2100,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "15199:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15186:24:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2102,
                        "nodeType": "ExpressionStatement",
                        "src": "15186:24:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 2105,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2057,
                    "src": "15238:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2063,
                  "id": 2106,
                  "nodeType": "Return",
                  "src": "15231:11:4"
                }
              ]
            },
            "id": 2108,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "until",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2060,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2057,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2108,
                  "src": "14638:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2056,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "14638:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2059,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2108,
                  "src": "14657:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2058,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "14657:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14637:40:4"
            },
            "returnParameters": {
              "id": 2063,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2062,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2108,
                  "src": "14701:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2061,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "14701:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14700:14:4"
            },
            "scope": 2845,
            "src": "14623:626:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2229,
              "nodeType": "Block",
              "src": "15511:1267:4",
              "statements": [
                {
                  "assignments": [
                    2122
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2122,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2229,
                      "src": "15521:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2121,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "15521:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2124,
                  "initialValue": {
                    "id": 2123,
                    "name": "selfptr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2112,
                    "src": "15532:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15521:18:4"
                },
                {
                  "assignments": [
                    2126
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2126,
                      "mutability": "mutable",
                      "name": "idx",
                      "nodeType": "VariableDeclaration",
                      "scope": 2229,
                      "src": "15549:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2125,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "15549:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2127,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15549:8:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2130,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2128,
                      "name": "needlelen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2114,
                      "src": "15572:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "id": 2129,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2110,
                      "src": "15585:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15572:20:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2224,
                  "nodeType": "IfStatement",
                  "src": "15568:1170:4",
                  "trueBody": {
                    "id": 2223,
                    "nodeType": "Block",
                    "src": "15594:1144:4",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2133,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2131,
                            "name": "needlelen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2114,
                            "src": "15612:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 2132,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "15625:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "15612:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2221,
                          "nodeType": "Block",
                          "src": "16262:466:4",
                          "statements": [
                            {
                              "assignments": [
                                2190
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2190,
                                  "mutability": "mutable",
                                  "name": "hash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2221,
                                  "src": "16329:12:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2189,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "16329:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2191,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "16329:12:4"
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "16368:43:4",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "16370:39:4",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "needleptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "16388:9:4"
                                        },
                                        {
                                          "name": "needlelen",
                                          "nodeType": "YulIdentifier",
                                          "src": "16399:9:4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "keccak256",
                                        "nodeType": "YulIdentifier",
                                        "src": "16378:9:4"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "16378:31:4"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "hash",
                                        "nodeType": "YulIdentifier",
                                        "src": "16370:4:4"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "byzantium",
                              "externalReferences": [
                                {
                                  "declaration": 2190,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "16370:4:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2114,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "16399:9:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2116,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "16388:9:4",
                                  "valueSize": 1
                                }
                              ],
                              "id": 2192,
                              "nodeType": "InlineAssembly",
                              "src": "16359:52:4"
                            },
                            {
                              "body": {
                                "id": 2219,
                                "nodeType": "Block",
                                "src": "16478:236:4",
                                "statements": [
                                  {
                                    "assignments": [
                                      2206
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 2206,
                                        "mutability": "mutable",
                                        "name": "testHash",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 2219,
                                        "src": "16500:16:4",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 2205,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "16500:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 2207,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "16500:16:4"
                                  },
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "16547:41:4",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "16549:37:4",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "ptr",
                                                "nodeType": "YulIdentifier",
                                                "src": "16571:3:4"
                                              },
                                              {
                                                "name": "needlelen",
                                                "nodeType": "YulIdentifier",
                                                "src": "16576:9:4"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "keccak256",
                                              "nodeType": "YulIdentifier",
                                              "src": "16561:9:4"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "16561:25:4"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "testHash",
                                              "nodeType": "YulIdentifier",
                                              "src": "16549:8:4"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "evmVersion": "byzantium",
                                    "externalReferences": [
                                      {
                                        "declaration": 2114,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16576:9:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2122,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16571:3:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2206,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16549:8:4",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 2208,
                                    "nodeType": "InlineAssembly",
                                    "src": "16538:50:4"
                                  },
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "id": 2211,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2209,
                                        "name": "hash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2190,
                                        "src": "16613:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "id": 2210,
                                        "name": "testHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2206,
                                        "src": "16621:8:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "16613:16:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 2214,
                                    "nodeType": "IfStatement",
                                    "src": "16609:56:4",
                                    "trueBody": {
                                      "expression": {
                                        "id": 2212,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2122,
                                        "src": "16662:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 2120,
                                      "id": 2213,
                                      "nodeType": "Return",
                                      "src": "16655:10:4"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 2217,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 2215,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2122,
                                        "src": "16687:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "+=",
                                      "rightHandSide": {
                                        "hexValue": "31",
                                        "id": 2216,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "16694:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "16687:8:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2218,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16687:8:4"
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2201,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2197,
                                  "name": "idx",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2126,
                                  "src": "16443:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<=",
                                "rightExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2200,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2198,
                                    "name": "selflen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2110,
                                    "src": "16450:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 2199,
                                    "name": "needlelen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2114,
                                    "src": "16460:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "16450:19:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "16443:26:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2220,
                              "initializationExpression": {
                                "expression": {
                                  "id": 2195,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftHandSide": {
                                    "id": 2193,
                                    "name": "idx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2126,
                                    "src": "16434:3:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "Assignment",
                                  "operator": "=",
                                  "rightHandSide": {
                                    "hexValue": "30",
                                    "id": 2194,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "number",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "16440:1:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_rational_0_by_1",
                                      "typeString": "int_const 0"
                                    },
                                    "value": "0"
                                  },
                                  "src": "16434:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2196,
                                "nodeType": "ExpressionStatement",
                                "src": "16434:7:4"
                              },
                              "loopExpression": {
                                "expression": {
                                  "id": 2203,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "UnaryOperation",
                                  "operator": "++",
                                  "prefix": false,
                                  "src": "16471:5:4",
                                  "subExpression": {
                                    "id": 2202,
                                    "name": "idx",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2126,
                                    "src": "16471:3:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "id": 2204,
                                "nodeType": "ExpressionStatement",
                                "src": "16471:5:4"
                              },
                              "nodeType": "ForStatement",
                              "src": "16429:285:4"
                            }
                          ]
                        },
                        "id": 2222,
                        "nodeType": "IfStatement",
                        "src": "15608:1120:4",
                        "trueBody": {
                          "id": 2188,
                          "nodeType": "Block",
                          "src": "15629:627:4",
                          "statements": [
                            {
                              "assignments": [
                                2135
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2135,
                                  "mutability": "mutable",
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2188,
                                  "src": "15647:12:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2134,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15647:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2152,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 2150,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "~",
                                    "prefix": true,
                                    "src": "15670:34:4",
                                    "subExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 2148,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 2146,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "hexValue": "32",
                                              "id": 2138,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "15672:1:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_2_by_1",
                                                "typeString": "int_const 2"
                                              },
                                              "value": "2"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "**",
                                            "rightExpression": {
                                              "components": [
                                                {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 2144,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "hexValue": "38",
                                                    "id": 2139,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "15678:1:4",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_8_by_1",
                                                      "typeString": "int_const 8"
                                                    },
                                                    "value": "8"
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "*",
                                                  "rightExpression": {
                                                    "components": [
                                                      {
                                                        "commonType": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        "id": 2142,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                          "hexValue": "3332",
                                                          "id": 2140,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "15683:2:4",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_32_by_1",
                                                            "typeString": "int_const 32"
                                                          },
                                                          "value": "32"
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "-",
                                                        "rightExpression": {
                                                          "id": 2141,
                                                          "name": "needlelen",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 2114,
                                                          "src": "15688:9:4",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "src": "15683:14:4",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "id": 2143,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "15682:16:4",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "15678:20:4",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 2145,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "15677:22:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "15672:27:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "hexValue": "31",
                                            "id": 2147,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "15702:1:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "15672:31:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 2149,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "15671:33:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2137,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "15662:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": {
                                    "id": 2136,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15662:7:4",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2151,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "15662:43:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15647:58:4"
                            },
                            {
                              "assignments": [
                                2154
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2154,
                                  "mutability": "mutable",
                                  "name": "needledata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2188,
                                  "src": "15724:18:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2153,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15724:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2155,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15724:18:4"
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "15769:45:4",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "15771:41:4",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "needleptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "15795:9:4"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "15789:5:4"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "15789:16:4"
                                        },
                                        {
                                          "name": "mask",
                                          "nodeType": "YulIdentifier",
                                          "src": "15807:4:4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "15785:3:4"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15785:27:4"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "needledata",
                                        "nodeType": "YulIdentifier",
                                        "src": "15771:10:4"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "byzantium",
                              "externalReferences": [
                                {
                                  "declaration": 2135,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "15807:4:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2154,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "15771:10:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2116,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "15795:9:4",
                                  "valueSize": 1
                                }
                              ],
                              "id": 2156,
                              "nodeType": "InlineAssembly",
                              "src": "15760:54:4"
                            },
                            {
                              "assignments": [
                                2158
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2158,
                                  "mutability": "mutable",
                                  "name": "end",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2188,
                                  "src": "15832:8:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "typeName": {
                                    "id": 2157,
                                    "name": "uint",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15832:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2164,
                              "initialValue": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2163,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2161,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2159,
                                    "name": "selfptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2112,
                                    "src": "15843:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "id": 2160,
                                    "name": "selflen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2110,
                                    "src": "15853:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "15843:17:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "-",
                                "rightExpression": {
                                  "id": 2162,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2114,
                                  "src": "15863:9:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "15843:29:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15832:40:4"
                            },
                            {
                              "assignments": [
                                2166
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2166,
                                  "mutability": "mutable",
                                  "name": "ptrdata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2188,
                                  "src": "15890:15:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2165,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "15890:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2167,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "15890:15:4"
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "15932:36:4",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "15934:32:4",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "15955:3:4"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "15949:5:4"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "15949:10:4"
                                        },
                                        {
                                          "name": "mask",
                                          "nodeType": "YulIdentifier",
                                          "src": "15961:4:4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "15945:3:4"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "15945:21:4"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "ptrdata",
                                        "nodeType": "YulIdentifier",
                                        "src": "15934:7:4"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "byzantium",
                              "externalReferences": [
                                {
                                  "declaration": 2135,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "15961:4:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2122,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "15955:3:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2166,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "15934:7:4",
                                  "valueSize": 1
                                }
                              ],
                              "id": 2168,
                              "nodeType": "InlineAssembly",
                              "src": "15923:45:4"
                            },
                            {
                              "body": {
                                "id": 2184,
                                "nodeType": "Block",
                                "src": "16016:198:4",
                                "statements": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2174,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2172,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2122,
                                        "src": "16042:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": ">=",
                                      "rightExpression": {
                                        "id": 2173,
                                        "name": "end",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2158,
                                        "src": "16049:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "16042:10:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 2179,
                                    "nodeType": "IfStatement",
                                    "src": "16038:64:4",
                                    "trueBody": {
                                      "expression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2177,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2175,
                                          "name": "selfptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2112,
                                          "src": "16085:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 2176,
                                          "name": "selflen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2110,
                                          "src": "16095:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "16085:17:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 2120,
                                      "id": 2178,
                                      "nodeType": "Return",
                                      "src": "16078:24:4"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 2181,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "++",
                                      "prefix": false,
                                      "src": "16124:5:4",
                                      "subExpression": {
                                        "id": 2180,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2122,
                                        "src": "16124:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2182,
                                    "nodeType": "ExpressionStatement",
                                    "src": "16124:5:4"
                                  },
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "16160:36:4",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "16162:32:4",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "ptr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "16183:3:4"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "16177:5:4"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "16177:10:4"
                                              },
                                              {
                                                "name": "mask",
                                                "nodeType": "YulIdentifier",
                                                "src": "16189:4:4"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "16173:3:4"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "16173:21:4"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "ptrdata",
                                              "nodeType": "YulIdentifier",
                                              "src": "16162:7:4"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "evmVersion": "byzantium",
                                    "externalReferences": [
                                      {
                                        "declaration": 2135,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16189:4:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2122,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16183:3:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2166,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "16162:7:4",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 2183,
                                    "nodeType": "InlineAssembly",
                                    "src": "16151:45:4"
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 2171,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2169,
                                  "name": "ptrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2166,
                                  "src": "15993:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "id": 2170,
                                  "name": "needledata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2154,
                                  "src": "16004:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "15993:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2185,
                              "nodeType": "WhileStatement",
                              "src": "15986:228:4"
                            },
                            {
                              "expression": {
                                "id": 2186,
                                "name": "ptr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2122,
                                "src": "16238:3:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 2120,
                              "id": 2187,
                              "nodeType": "Return",
                              "src": "16231:10:4"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2227,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2225,
                      "name": "selfptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2112,
                      "src": "16754:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "id": 2226,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2110,
                      "src": "16764:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "16754:17:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2120,
                  "id": 2228,
                  "nodeType": "Return",
                  "src": "16747:24:4"
                }
              ]
            },
            "id": 2230,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "findPtr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2117,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2110,
                  "mutability": "mutable",
                  "name": "selflen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2230,
                  "src": "15423:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2109,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15423:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2112,
                  "mutability": "mutable",
                  "name": "selfptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2230,
                  "src": "15437:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2111,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15437:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2114,
                  "mutability": "mutable",
                  "name": "needlelen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2230,
                  "src": "15451:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2113,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15451:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2116,
                  "mutability": "mutable",
                  "name": "needleptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2230,
                  "src": "15467:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2115,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15467:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15422:60:4"
            },
            "returnParameters": {
              "id": 2120,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2119,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2230,
                  "src": "15505:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2118,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "15505:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15504:6:4"
            },
            "scope": 2845,
            "src": "15406:1372:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2347,
              "nodeType": "Block",
              "src": "17037:1270:4",
              "statements": [
                {
                  "assignments": [
                    2244
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2244,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2347,
                      "src": "17047:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2243,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "17047:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2245,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17047:8:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2246,
                      "name": "needlelen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2236,
                      "src": "17070:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "id": 2247,
                      "name": "selflen",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2232,
                      "src": "17083:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17070:20:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2344,
                  "nodeType": "IfStatement",
                  "src": "17066:1211:4",
                  "trueBody": {
                    "id": 2343,
                    "nodeType": "Block",
                    "src": "17092:1185:4",
                    "statements": [
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2251,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2249,
                            "name": "needlelen",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2236,
                            "src": "17110:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<=",
                          "rightExpression": {
                            "hexValue": "3332",
                            "id": 2250,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "17123:2:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_32_by_1",
                              "typeString": "int_const 32"
                            },
                            "value": "32"
                          },
                          "src": "17110:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 2341,
                          "nodeType": "Block",
                          "src": "17761:506:4",
                          "statements": [
                            {
                              "assignments": [
                                2308
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2308,
                                  "mutability": "mutable",
                                  "name": "hash",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2341,
                                  "src": "17828:12:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2307,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17828:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2309,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17828:12:4"
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "17867:43:4",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "17869:39:4",
                                    "value": {
                                      "arguments": [
                                        {
                                          "name": "needleptr",
                                          "nodeType": "YulIdentifier",
                                          "src": "17887:9:4"
                                        },
                                        {
                                          "name": "needlelen",
                                          "nodeType": "YulIdentifier",
                                          "src": "17898:9:4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "keccak256",
                                        "nodeType": "YulIdentifier",
                                        "src": "17877:9:4"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17877:31:4"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "hash",
                                        "nodeType": "YulIdentifier",
                                        "src": "17869:4:4"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "byzantium",
                              "externalReferences": [
                                {
                                  "declaration": 2308,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17869:4:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2236,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17898:9:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2238,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17887:9:4",
                                  "valueSize": 1
                                }
                              ],
                              "id": 2310,
                              "nodeType": "InlineAssembly",
                              "src": "17858:52:4"
                            },
                            {
                              "expression": {
                                "id": 2318,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2311,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2244,
                                  "src": "17927:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2317,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 2312,
                                    "name": "selfptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2234,
                                    "src": "17933:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "+",
                                  "rightExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2315,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2313,
                                          "name": "selflen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2232,
                                          "src": "17944:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "id": 2314,
                                          "name": "needlelen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2236,
                                          "src": "17954:9:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "17944:19:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 2316,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "17943:21:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "17933:31:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17927:37:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2319,
                              "nodeType": "ExpressionStatement",
                              "src": "17927:37:4"
                            },
                            {
                              "body": {
                                "id": 2339,
                                "nodeType": "Block",
                                "src": "18005:248:4",
                                "statements": [
                                  {
                                    "assignments": [
                                      2324
                                    ],
                                    "declarations": [
                                      {
                                        "constant": false,
                                        "id": 2324,
                                        "mutability": "mutable",
                                        "name": "testHash",
                                        "nodeType": "VariableDeclaration",
                                        "scope": 2339,
                                        "src": "18027:16:4",
                                        "stateVariable": false,
                                        "storageLocation": "default",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        },
                                        "typeName": {
                                          "id": 2323,
                                          "name": "bytes32",
                                          "nodeType": "ElementaryTypeName",
                                          "src": "18027:7:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        },
                                        "visibility": "internal"
                                      }
                                    ],
                                    "id": 2325,
                                    "nodeType": "VariableDeclarationStatement",
                                    "src": "18027:16:4"
                                  },
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "18074:41:4",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "18076:37:4",
                                          "value": {
                                            "arguments": [
                                              {
                                                "name": "ptr",
                                                "nodeType": "YulIdentifier",
                                                "src": "18098:3:4"
                                              },
                                              {
                                                "name": "needlelen",
                                                "nodeType": "YulIdentifier",
                                                "src": "18103:9:4"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "keccak256",
                                              "nodeType": "YulIdentifier",
                                              "src": "18088:9:4"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "18088:25:4"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "testHash",
                                              "nodeType": "YulIdentifier",
                                              "src": "18076:8:4"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "evmVersion": "byzantium",
                                    "externalReferences": [
                                      {
                                        "declaration": 2236,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "18103:9:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2244,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "18098:3:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2324,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "18076:8:4",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 2326,
                                    "nodeType": "InlineAssembly",
                                    "src": "18065:50:4"
                                  },
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_bytes32",
                                        "typeString": "bytes32"
                                      },
                                      "id": 2329,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2327,
                                        "name": "hash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2308,
                                        "src": "18140:4:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "==",
                                      "rightExpression": {
                                        "id": 2328,
                                        "name": "testHash",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2324,
                                        "src": "18148:8:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_bytes32",
                                          "typeString": "bytes32"
                                        }
                                      },
                                      "src": "18140:16:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 2334,
                                    "nodeType": "IfStatement",
                                    "src": "18136:68:4",
                                    "trueBody": {
                                      "expression": {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2332,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2330,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2244,
                                          "src": "18189:3:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "+",
                                        "rightExpression": {
                                          "id": 2331,
                                          "name": "needlelen",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2236,
                                          "src": "18195:9:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "18189:15:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 2242,
                                      "id": 2333,
                                      "nodeType": "Return",
                                      "src": "18182:22:4"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 2337,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "id": 2335,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2244,
                                        "src": "18226:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "-=",
                                      "rightHandSide": {
                                        "hexValue": "31",
                                        "id": 2336,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "18233:1:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_1_by_1",
                                          "typeString": "int_const 1"
                                        },
                                        "value": "1"
                                      },
                                      "src": "18226:8:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2338,
                                    "nodeType": "ExpressionStatement",
                                    "src": "18226:8:4"
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2322,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2320,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2244,
                                  "src": "17989:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": ">=",
                                "rightExpression": {
                                  "id": 2321,
                                  "name": "selfptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2234,
                                  "src": "17996:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17989:14:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2340,
                              "nodeType": "WhileStatement",
                              "src": "17982:271:4"
                            }
                          ]
                        },
                        "id": 2342,
                        "nodeType": "IfStatement",
                        "src": "17106:1161:4",
                        "trueBody": {
                          "id": 2306,
                          "nodeType": "Block",
                          "src": "17127:628:4",
                          "statements": [
                            {
                              "assignments": [
                                2253
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2253,
                                  "mutability": "mutable",
                                  "name": "mask",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2306,
                                  "src": "17145:12:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2252,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17145:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2270,
                              "initialValue": {
                                "arguments": [
                                  {
                                    "id": 2268,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "UnaryOperation",
                                    "operator": "~",
                                    "prefix": true,
                                    "src": "17168:34:4",
                                    "subExpression": {
                                      "components": [
                                        {
                                          "commonType": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          },
                                          "id": 2266,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "commonType": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            },
                                            "id": 2264,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "leftExpression": {
                                              "hexValue": "32",
                                              "id": 2256,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": true,
                                              "kind": "number",
                                              "lValueRequested": false,
                                              "nodeType": "Literal",
                                              "src": "17170:1:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_rational_2_by_1",
                                                "typeString": "int_const 2"
                                              },
                                              "value": "2"
                                            },
                                            "nodeType": "BinaryOperation",
                                            "operator": "**",
                                            "rightExpression": {
                                              "components": [
                                                {
                                                  "commonType": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  },
                                                  "id": 2262,
                                                  "isConstant": false,
                                                  "isLValue": false,
                                                  "isPure": false,
                                                  "lValueRequested": false,
                                                  "leftExpression": {
                                                    "hexValue": "38",
                                                    "id": 2257,
                                                    "isConstant": false,
                                                    "isLValue": false,
                                                    "isPure": true,
                                                    "kind": "number",
                                                    "lValueRequested": false,
                                                    "nodeType": "Literal",
                                                    "src": "17176:1:4",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_rational_8_by_1",
                                                      "typeString": "int_const 8"
                                                    },
                                                    "value": "8"
                                                  },
                                                  "nodeType": "BinaryOperation",
                                                  "operator": "*",
                                                  "rightExpression": {
                                                    "components": [
                                                      {
                                                        "commonType": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        },
                                                        "id": 2260,
                                                        "isConstant": false,
                                                        "isLValue": false,
                                                        "isPure": false,
                                                        "lValueRequested": false,
                                                        "leftExpression": {
                                                          "hexValue": "3332",
                                                          "id": 2258,
                                                          "isConstant": false,
                                                          "isLValue": false,
                                                          "isPure": true,
                                                          "kind": "number",
                                                          "lValueRequested": false,
                                                          "nodeType": "Literal",
                                                          "src": "17181:2:4",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_rational_32_by_1",
                                                            "typeString": "int_const 32"
                                                          },
                                                          "value": "32"
                                                        },
                                                        "nodeType": "BinaryOperation",
                                                        "operator": "-",
                                                        "rightExpression": {
                                                          "id": 2259,
                                                          "name": "needlelen",
                                                          "nodeType": "Identifier",
                                                          "overloadedDeclarations": [],
                                                          "referencedDeclaration": 2236,
                                                          "src": "17186:9:4",
                                                          "typeDescriptions": {
                                                            "typeIdentifier": "t_uint256",
                                                            "typeString": "uint256"
                                                          }
                                                        },
                                                        "src": "17181:14:4",
                                                        "typeDescriptions": {
                                                          "typeIdentifier": "t_uint256",
                                                          "typeString": "uint256"
                                                        }
                                                      }
                                                    ],
                                                    "id": 2261,
                                                    "isConstant": false,
                                                    "isInlineArray": false,
                                                    "isLValue": false,
                                                    "isPure": false,
                                                    "lValueRequested": false,
                                                    "nodeType": "TupleExpression",
                                                    "src": "17180:16:4",
                                                    "typeDescriptions": {
                                                      "typeIdentifier": "t_uint256",
                                                      "typeString": "uint256"
                                                    }
                                                  },
                                                  "src": "17176:20:4",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_uint256",
                                                    "typeString": "uint256"
                                                  }
                                                }
                                              ],
                                              "id": 2263,
                                              "isConstant": false,
                                              "isInlineArray": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "nodeType": "TupleExpression",
                                              "src": "17175:22:4",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_uint256",
                                                "typeString": "uint256"
                                              }
                                            },
                                            "src": "17170:27:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "-",
                                          "rightExpression": {
                                            "hexValue": "31",
                                            "id": 2265,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": true,
                                            "kind": "number",
                                            "lValueRequested": false,
                                            "nodeType": "Literal",
                                            "src": "17200:1:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_rational_1_by_1",
                                              "typeString": "int_const 1"
                                            },
                                            "value": "1"
                                          },
                                          "src": "17170:31:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "id": 2267,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "17169:33:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2255,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "17160:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_bytes32_$",
                                    "typeString": "type(bytes32)"
                                  },
                                  "typeName": {
                                    "id": 2254,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17160:7:4",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 2269,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "17160:43:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17145:58:4"
                            },
                            {
                              "assignments": [
                                2272
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2272,
                                  "mutability": "mutable",
                                  "name": "needledata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2306,
                                  "src": "17222:18:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2271,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17222:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2273,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17222:18:4"
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "17267:45:4",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "17269:41:4",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "needleptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "17293:9:4"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "17287:5:4"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "17287:16:4"
                                        },
                                        {
                                          "name": "mask",
                                          "nodeType": "YulIdentifier",
                                          "src": "17305:4:4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "17283:3:4"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17283:27:4"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "needledata",
                                        "nodeType": "YulIdentifier",
                                        "src": "17269:10:4"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "byzantium",
                              "externalReferences": [
                                {
                                  "declaration": 2253,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17305:4:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2272,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17269:10:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2238,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17293:9:4",
                                  "valueSize": 1
                                }
                              ],
                              "id": 2274,
                              "nodeType": "InlineAssembly",
                              "src": "17258:54:4"
                            },
                            {
                              "expression": {
                                "id": 2281,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2275,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2244,
                                  "src": "17330:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2280,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "commonType": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    "id": 2278,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "leftExpression": {
                                      "id": 2276,
                                      "name": "selfptr",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2234,
                                      "src": "17336:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "nodeType": "BinaryOperation",
                                    "operator": "+",
                                    "rightExpression": {
                                      "id": 2277,
                                      "name": "selflen",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2232,
                                      "src": "17346:7:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "src": "17336:17:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 2279,
                                    "name": "needlelen",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2236,
                                    "src": "17356:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "17336:29:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17330:35:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2282,
                              "nodeType": "ExpressionStatement",
                              "src": "17330:35:4"
                            },
                            {
                              "assignments": [
                                2284
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 2284,
                                  "mutability": "mutable",
                                  "name": "ptrdata",
                                  "nodeType": "VariableDeclaration",
                                  "scope": 2306,
                                  "src": "17383:15:4",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  },
                                  "typeName": {
                                    "id": 2283,
                                    "name": "bytes32",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "17383:7:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  "visibility": "internal"
                                }
                              ],
                              "id": 2285,
                              "nodeType": "VariableDeclarationStatement",
                              "src": "17383:15:4"
                            },
                            {
                              "AST": {
                                "nodeType": "YulBlock",
                                "src": "17425:36:4",
                                "statements": [
                                  {
                                    "nodeType": "YulAssignment",
                                    "src": "17427:32:4",
                                    "value": {
                                      "arguments": [
                                        {
                                          "arguments": [
                                            {
                                              "name": "ptr",
                                              "nodeType": "YulIdentifier",
                                              "src": "17448:3:4"
                                            }
                                          ],
                                          "functionName": {
                                            "name": "mload",
                                            "nodeType": "YulIdentifier",
                                            "src": "17442:5:4"
                                          },
                                          "nodeType": "YulFunctionCall",
                                          "src": "17442:10:4"
                                        },
                                        {
                                          "name": "mask",
                                          "nodeType": "YulIdentifier",
                                          "src": "17454:4:4"
                                        }
                                      ],
                                      "functionName": {
                                        "name": "and",
                                        "nodeType": "YulIdentifier",
                                        "src": "17438:3:4"
                                      },
                                      "nodeType": "YulFunctionCall",
                                      "src": "17438:21:4"
                                    },
                                    "variableNames": [
                                      {
                                        "name": "ptrdata",
                                        "nodeType": "YulIdentifier",
                                        "src": "17427:7:4"
                                      }
                                    ]
                                  }
                                ]
                              },
                              "evmVersion": "byzantium",
                              "externalReferences": [
                                {
                                  "declaration": 2253,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17454:4:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2244,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17448:3:4",
                                  "valueSize": 1
                                },
                                {
                                  "declaration": 2284,
                                  "isOffset": false,
                                  "isSlot": false,
                                  "src": "17427:7:4",
                                  "valueSize": 1
                                }
                              ],
                              "id": 2286,
                              "nodeType": "InlineAssembly",
                              "src": "17416:45:4"
                            },
                            {
                              "body": {
                                "id": 2300,
                                "nodeType": "Block",
                                "src": "17509:192:4",
                                "statements": [
                                  {
                                    "condition": {
                                      "commonType": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      },
                                      "id": 2292,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftExpression": {
                                        "id": 2290,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2244,
                                        "src": "17535:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "nodeType": "BinaryOperation",
                                      "operator": "<=",
                                      "rightExpression": {
                                        "id": 2291,
                                        "name": "selfptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2234,
                                        "src": "17542:7:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "src": "17535:14:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_bool",
                                        "typeString": "bool"
                                      }
                                    },
                                    "id": 2295,
                                    "nodeType": "IfStatement",
                                    "src": "17531:58:4",
                                    "trueBody": {
                                      "expression": {
                                        "id": 2293,
                                        "name": "selfptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2234,
                                        "src": "17582:7:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "functionReturnParameters": 2242,
                                      "id": 2294,
                                      "nodeType": "Return",
                                      "src": "17575:14:4"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 2297,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "UnaryOperation",
                                      "operator": "--",
                                      "prefix": false,
                                      "src": "17611:5:4",
                                      "subExpression": {
                                        "id": 2296,
                                        "name": "ptr",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 2244,
                                        "src": "17611:3:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 2298,
                                    "nodeType": "ExpressionStatement",
                                    "src": "17611:5:4"
                                  },
                                  {
                                    "AST": {
                                      "nodeType": "YulBlock",
                                      "src": "17647:36:4",
                                      "statements": [
                                        {
                                          "nodeType": "YulAssignment",
                                          "src": "17649:32:4",
                                          "value": {
                                            "arguments": [
                                              {
                                                "arguments": [
                                                  {
                                                    "name": "ptr",
                                                    "nodeType": "YulIdentifier",
                                                    "src": "17670:3:4"
                                                  }
                                                ],
                                                "functionName": {
                                                  "name": "mload",
                                                  "nodeType": "YulIdentifier",
                                                  "src": "17664:5:4"
                                                },
                                                "nodeType": "YulFunctionCall",
                                                "src": "17664:10:4"
                                              },
                                              {
                                                "name": "mask",
                                                "nodeType": "YulIdentifier",
                                                "src": "17676:4:4"
                                              }
                                            ],
                                            "functionName": {
                                              "name": "and",
                                              "nodeType": "YulIdentifier",
                                              "src": "17660:3:4"
                                            },
                                            "nodeType": "YulFunctionCall",
                                            "src": "17660:21:4"
                                          },
                                          "variableNames": [
                                            {
                                              "name": "ptrdata",
                                              "nodeType": "YulIdentifier",
                                              "src": "17649:7:4"
                                            }
                                          ]
                                        }
                                      ]
                                    },
                                    "evmVersion": "byzantium",
                                    "externalReferences": [
                                      {
                                        "declaration": 2253,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "17676:4:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2244,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "17670:3:4",
                                        "valueSize": 1
                                      },
                                      {
                                        "declaration": 2284,
                                        "isOffset": false,
                                        "isSlot": false,
                                        "src": "17649:7:4",
                                        "valueSize": 1
                                      }
                                    ],
                                    "id": 2299,
                                    "nodeType": "InlineAssembly",
                                    "src": "17638:45:4"
                                  }
                                ]
                              },
                              "condition": {
                                "commonType": {
                                  "typeIdentifier": "t_bytes32",
                                  "typeString": "bytes32"
                                },
                                "id": 2289,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2287,
                                  "name": "ptrdata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2284,
                                  "src": "17486:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "!=",
                                "rightExpression": {
                                  "id": 2288,
                                  "name": "needledata",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2272,
                                  "src": "17497:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "src": "17486:21:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "id": 2301,
                              "nodeType": "WhileStatement",
                              "src": "17479:222:4"
                            },
                            {
                              "expression": {
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 2304,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "id": 2302,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2244,
                                  "src": "17725:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "+",
                                "rightExpression": {
                                  "id": 2303,
                                  "name": "needlelen",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2236,
                                  "src": "17731:9:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "17725:15:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "functionReturnParameters": 2242,
                              "id": 2305,
                              "nodeType": "Return",
                              "src": "17718:22:4"
                            }
                          ]
                        }
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 2345,
                    "name": "selfptr",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2234,
                    "src": "18293:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 2242,
                  "id": 2346,
                  "nodeType": "Return",
                  "src": "18286:14:4"
                }
              ]
            },
            "id": 2348,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rfindPtr",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2239,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2232,
                  "mutability": "mutable",
                  "name": "selflen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "16949:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2231,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16949:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2234,
                  "mutability": "mutable",
                  "name": "selfptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "16963:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2233,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16963:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2236,
                  "mutability": "mutable",
                  "name": "needlelen",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "16977:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2235,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16977:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2238,
                  "mutability": "mutable",
                  "name": "needleptr",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "16993:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2237,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "16993:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16948:60:4"
            },
            "returnParameters": {
              "id": 2242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2241,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2348,
                  "src": "17031:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2240,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "17031:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17030:6:4"
            },
            "scope": 2845,
            "src": "16931:1376:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 2387,
              "nodeType": "Block",
              "src": "18734:167:4",
              "statements": [
                {
                  "assignments": [
                    2358
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2358,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2387,
                      "src": "18744:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2357,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "18744:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2369,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 2360,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2350,
                          "src": "18763:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2361,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "18763:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2362,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2350,
                          "src": "18774:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2363,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "18774:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2364,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2352,
                          "src": "18785:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2365,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "18785:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2366,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2352,
                          "src": "18798:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2367,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "18798:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2359,
                      "name": "findPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2230,
                      "src": "18755:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2368,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18755:55:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18744:66:4"
                },
                {
                  "expression": {
                    "id": 2377,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2370,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2350,
                        "src": "18820:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2372,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "18820:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2376,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 2373,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2358,
                        "src": "18833:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "expression": {
                          "id": 2374,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2350,
                          "src": "18839:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2375,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "18839:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "18833:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18820:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2378,
                  "nodeType": "ExpressionStatement",
                  "src": "18820:28:4"
                },
                {
                  "expression": {
                    "id": 2383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2379,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2350,
                        "src": "18858:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2381,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "18858:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 2382,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2358,
                      "src": "18870:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18858:15:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2384,
                  "nodeType": "ExpressionStatement",
                  "src": "18858:15:4"
                },
                {
                  "expression": {
                    "id": 2385,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2350,
                    "src": "18890:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2356,
                  "id": 2386,
                  "nodeType": "Return",
                  "src": "18883:11:4"
                }
              ]
            },
            "id": 2388,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "find",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2353,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2350,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2388,
                  "src": "18657:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2349,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "18657:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2352,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2388,
                  "src": "18676:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2351,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "18676:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18656:40:4"
            },
            "returnParameters": {
              "id": 2356,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2355,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2388,
                  "src": "18720:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2354,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "18720:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18719:14:4"
            },
            "scope": 2845,
            "src": "18643:258:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2421,
              "nodeType": "Block",
              "src": "19352:142:4",
              "statements": [
                {
                  "assignments": [
                    2398
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2398,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2421,
                      "src": "19362:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2397,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "19362:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2409,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 2400,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2390,
                          "src": "19382:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2401,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "19382:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2402,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2390,
                          "src": "19393:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2403,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "19393:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2404,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2392,
                          "src": "19404:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2405,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "19404:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2406,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2392,
                          "src": "19417:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2407,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "19417:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2399,
                      "name": "rfindPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2348,
                      "src": "19373:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2408,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "19373:56:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19362:67:4"
                },
                {
                  "expression": {
                    "id": 2417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2410,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2390,
                        "src": "19439:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2412,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "19439:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2416,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 2413,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2398,
                        "src": "19451:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "expression": {
                          "id": 2414,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2390,
                          "src": "19457:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2415,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "19457:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "19451:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19439:27:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2418,
                  "nodeType": "ExpressionStatement",
                  "src": "19439:27:4"
                },
                {
                  "expression": {
                    "id": 2419,
                    "name": "self",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2390,
                    "src": "19483:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2396,
                  "id": 2420,
                  "nodeType": "Return",
                  "src": "19476:11:4"
                }
              ]
            },
            "id": 2422,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rfind",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2393,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2390,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2422,
                  "src": "19275:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2389,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "19275:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2392,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2422,
                  "src": "19294:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2391,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "19294:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19274:40:4"
            },
            "returnParameters": {
              "id": 2396,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2395,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2422,
                  "src": "19338:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2394,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "19338:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "19337:14:4"
            },
            "scope": 2845,
            "src": "19260:234:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2499,
              "nodeType": "Block",
              "src": "20112:392:4",
              "statements": [
                {
                  "assignments": [
                    2434
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2434,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2499,
                      "src": "20122:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2433,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "20122:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2445,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 2436,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2424,
                          "src": "20141:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2437,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "20141:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2438,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2424,
                          "src": "20152:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2439,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "20152:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2440,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2426,
                          "src": "20163:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2441,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "20163:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2442,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2426,
                          "src": "20176:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2443,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "20176:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2435,
                      "name": "findPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2230,
                      "src": "20133:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2444,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "20133:55:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "20122:66:4"
                },
                {
                  "expression": {
                    "id": 2451,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2446,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2428,
                        "src": "20198:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2448,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "20198:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "expression": {
                        "id": 2449,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2424,
                        "src": "20211:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2450,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "20211:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20198:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2452,
                  "nodeType": "ExpressionStatement",
                  "src": "20198:22:4"
                },
                {
                  "expression": {
                    "id": 2460,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2453,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2428,
                        "src": "20230:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2455,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "20230:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2459,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 2456,
                        "name": "ptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2434,
                        "src": "20243:3:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "expression": {
                          "id": 2457,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2424,
                          "src": "20249:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2458,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "20249:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20243:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20230:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2461,
                  "nodeType": "ExpressionStatement",
                  "src": "20230:28:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2468,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2462,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2434,
                      "src": "20272:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2467,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2463,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2424,
                          "src": "20279:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2464,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "20279:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 2465,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2424,
                          "src": "20291:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2466,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "20291:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "20279:21:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "20272:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2495,
                    "nodeType": "Block",
                    "src": "20371:105:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2476,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2424,
                              "src": "20385:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2478,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "20385:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2483,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 2479,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2428,
                                "src": "20398:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2480,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1124,
                              "src": "20398:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 2481,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2426,
                                "src": "20411:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2482,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1124,
                              "src": "20411:11:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "20398:24:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "20385:37:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2485,
                        "nodeType": "ExpressionStatement",
                        "src": "20385:37:4"
                      },
                      {
                        "expression": {
                          "id": 2493,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2486,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2424,
                              "src": "20436:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2488,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_ptr",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1126,
                            "src": "20436:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2492,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2489,
                              "name": "ptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2434,
                              "src": "20448:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 2490,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2426,
                                "src": "20454:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2491,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1124,
                              "src": "20454:11:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "20448:17:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "20436:29:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2494,
                        "nodeType": "ExpressionStatement",
                        "src": "20436:29:4"
                      }
                    ]
                  },
                  "id": 2496,
                  "nodeType": "IfStatement",
                  "src": "20268:208:4",
                  "trueBody": {
                    "id": 2475,
                    "nodeType": "Block",
                    "src": "20302:63:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2473,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2469,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2424,
                              "src": "20341:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2471,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "20341:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 2472,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20353:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "20341:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2474,
                        "nodeType": "ExpressionStatement",
                        "src": "20341:13:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 2497,
                    "name": "token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2428,
                    "src": "20492:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2432,
                  "id": 2498,
                  "nodeType": "Return",
                  "src": "20485:12:4"
                }
              ]
            },
            "id": 2500,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "split",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2429,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2424,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2500,
                  "src": "20015:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2423,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "20015:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2426,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2500,
                  "src": "20034:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2425,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "20034:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2428,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2500,
                  "src": "20055:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2427,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "20055:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20014:60:4"
            },
            "returnParameters": {
              "id": 2432,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2431,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2500,
                  "src": "20098:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2430,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "20098:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20097:14:4"
            },
            "scope": 2845,
            "src": "20000:504:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2515,
              "nodeType": "Block",
              "src": "21073:43:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2510,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2502,
                        "src": "21089:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "id": 2511,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2504,
                        "src": "21095:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "id": 2512,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2507,
                        "src": "21103:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      ],
                      "id": 2509,
                      "name": "split",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2500,
                        2516
                      ],
                      "referencedDeclaration": 2500,
                      "src": "21083:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1127_memory_ptr_$_t_struct$_slice_$1127_memory_ptr_$_t_struct$_slice_$1127_memory_ptr_$returns$_t_struct$_slice_$1127_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory,struct strings.slice memory) pure returns (struct strings.slice memory)"
                      }
                    },
                    "id": 2513,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21083:26:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 2514,
                  "nodeType": "ExpressionStatement",
                  "src": "21083:26:4"
                }
              ]
            },
            "id": 2516,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "split",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2505,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2502,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2516,
                  "src": "20990:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2501,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "20990:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2504,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2516,
                  "src": "21009:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2503,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "21009:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "20989:40:4"
            },
            "returnParameters": {
              "id": 2508,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2507,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2516,
                  "src": "21053:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2506,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "21053:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21052:20:4"
            },
            "scope": 2845,
            "src": "20975:141:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2584,
              "nodeType": "Block",
              "src": "21734:346:4",
              "statements": [
                {
                  "assignments": [
                    2528
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2528,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2584,
                      "src": "21744:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2527,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "21744:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2539,
                  "initialValue": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 2530,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2518,
                          "src": "21764:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2531,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "21764:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2532,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2518,
                          "src": "21775:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2533,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "21775:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2534,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2520,
                          "src": "21786:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2535,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "21786:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2536,
                          "name": "needle",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2520,
                          "src": "21799:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2537,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "21799:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2529,
                      "name": "rfindPtr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2348,
                      "src": "21755:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                        "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 2538,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "21755:56:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "21744:67:4"
                },
                {
                  "expression": {
                    "id": 2544,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2540,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2522,
                        "src": "21821:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2542,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "21821:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 2543,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2528,
                      "src": "21834:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21821:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2545,
                  "nodeType": "ExpressionStatement",
                  "src": "21821:16:4"
                },
                {
                  "expression": {
                    "id": 2557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "expression": {
                        "id": 2546,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2522,
                        "src": "21847:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2548,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "21847:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2556,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2549,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2518,
                          "src": "21860:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2550,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "21860:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "-",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2554,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "id": 2551,
                              "name": "ptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2528,
                              "src": "21873:3:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "expression": {
                                "id": 2552,
                                "name": "self",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2518,
                                "src": "21879:4:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2553,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_ptr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1126,
                              "src": "21879:9:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "21873:15:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          }
                        ],
                        "id": 2555,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "21872:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "21860:29:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21847:42:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 2558,
                  "nodeType": "ExpressionStatement",
                  "src": "21847:42:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2562,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2559,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2528,
                      "src": "21903:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "expression": {
                        "id": 2560,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2518,
                        "src": "21910:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2561,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "21910:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "21903:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 2580,
                    "nodeType": "Block",
                    "src": "21990:62:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2578,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2570,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2518,
                              "src": "22004:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2572,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "22004:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "-=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2577,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 2573,
                                "name": "token",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2522,
                                "src": "22017:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2574,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1124,
                              "src": "22017:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 2575,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2520,
                                "src": "22030:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2576,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1124,
                              "src": "22030:11:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "22017:24:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "22004:37:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2579,
                        "nodeType": "ExpressionStatement",
                        "src": "22004:37:4"
                      }
                    ]
                  },
                  "id": 2581,
                  "nodeType": "IfStatement",
                  "src": "21899:153:4",
                  "trueBody": {
                    "id": 2569,
                    "nodeType": "Block",
                    "src": "21921:63:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2567,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "expression": {
                              "id": 2563,
                              "name": "self",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2518,
                              "src": "21960:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2565,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "21960:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "30",
                            "id": 2566,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "21972:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "21960:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2568,
                        "nodeType": "ExpressionStatement",
                        "src": "21960:13:4"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "id": 2582,
                    "name": "token",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2522,
                    "src": "22068:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "functionReturnParameters": 2526,
                  "id": 2583,
                  "nodeType": "Return",
                  "src": "22061:12:4"
                }
              ]
            },
            "id": 2585,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rsplit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2523,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2518,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2585,
                  "src": "21637:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2517,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "21637:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2520,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2585,
                  "src": "21656:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2519,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "21656:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2522,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2585,
                  "src": "21677:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2521,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "21677:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21636:60:4"
            },
            "returnParameters": {
              "id": 2526,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2525,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2585,
                  "src": "21720:12:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2524,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "21720:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "21719:14:4"
            },
            "scope": 2845,
            "src": "21621:459:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2600,
              "nodeType": "Block",
              "src": "22648:44:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2595,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2587,
                        "src": "22665:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "id": 2596,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2589,
                        "src": "22671:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      {
                        "id": 2597,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2592,
                        "src": "22679:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        },
                        {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      ],
                      "id": 2594,
                      "name": "rsplit",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        2585,
                        2601
                      ],
                      "referencedDeclaration": 2585,
                      "src": "22658:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_slice_$1127_memory_ptr_$_t_struct$_slice_$1127_memory_ptr_$_t_struct$_slice_$1127_memory_ptr_$returns$_t_struct$_slice_$1127_memory_ptr_$",
                        "typeString": "function (struct strings.slice memory,struct strings.slice memory,struct strings.slice memory) pure returns (struct strings.slice memory)"
                      }
                    },
                    "id": 2598,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22658:27:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                      "typeString": "struct strings.slice memory"
                    }
                  },
                  "id": 2599,
                  "nodeType": "ExpressionStatement",
                  "src": "22658:27:4"
                }
              ]
            },
            "id": 2601,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "rsplit",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2590,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2587,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2601,
                  "src": "22565:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2586,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "22565:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2589,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2601,
                  "src": "22584:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2588,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "22584:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22564:40:4"
            },
            "returnParameters": {
              "id": 2593,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2592,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "scope": 2601,
                  "src": "22628:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2591,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "22628:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22627:20:4"
            },
            "scope": 2845,
            "src": "22549:143:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2659,
              "nodeType": "Block",
              "src": "23049:276:4",
              "statements": [
                {
                  "assignments": [
                    2611
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2611,
                      "mutability": "mutable",
                      "name": "ptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2659,
                      "src": "23059:8:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2610,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "23059:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2625,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2624,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 2613,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2603,
                            "src": "23078:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2614,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "23078:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 2615,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2603,
                            "src": "23089:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2616,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1126,
                          "src": "23089:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 2617,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2605,
                            "src": "23100:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2618,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "23100:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 2619,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2605,
                            "src": "23113:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2620,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1126,
                          "src": "23113:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2612,
                        "name": "findPtr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2230,
                        "src": "23070:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 2621,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23070:55:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "+",
                    "rightExpression": {
                      "expression": {
                        "id": 2622,
                        "name": "needle",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2605,
                        "src": "23128:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2623,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "23128:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23070:69:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "23059:80:4"
                },
                {
                  "body": {
                    "id": 2657,
                    "nodeType": "Block",
                    "src": "23186:133:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 2634,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "23200:5:4",
                          "subExpression": {
                            "id": 2633,
                            "name": "cnt",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2608,
                            "src": "23200:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2635,
                        "nodeType": "ExpressionStatement",
                        "src": "23200:5:4"
                      },
                      {
                        "expression": {
                          "id": 2655,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2636,
                            "name": "ptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2611,
                            "src": "23219:3:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2654,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "arguments": [
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 2645,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "expression": {
                                      "id": 2638,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2603,
                                      "src": "23233:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    },
                                    "id": 2639,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_len",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1124,
                                    "src": "23233:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "components": [
                                      {
                                        "commonType": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        },
                                        "id": 2643,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "leftExpression": {
                                          "id": 2640,
                                          "name": "ptr",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 2611,
                                          "src": "23246:3:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "nodeType": "BinaryOperation",
                                        "operator": "-",
                                        "rightExpression": {
                                          "expression": {
                                            "id": 2641,
                                            "name": "self",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 2603,
                                            "src": "23252:4:4",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                              "typeString": "struct strings.slice memory"
                                            }
                                          },
                                          "id": 2642,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "_ptr",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 1126,
                                          "src": "23252:9:4",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "src": "23246:15:4",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      }
                                    ],
                                    "id": 2644,
                                    "isConstant": false,
                                    "isInlineArray": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "TupleExpression",
                                    "src": "23245:17:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "23233:29:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "id": 2646,
                                  "name": "ptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2611,
                                  "src": "23264:3:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 2647,
                                    "name": "needle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2605,
                                    "src": "23269:6:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                      "typeString": "struct strings.slice memory"
                                    }
                                  },
                                  "id": 2648,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_len",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1124,
                                  "src": "23269:11:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                {
                                  "expression": {
                                    "id": 2649,
                                    "name": "needle",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2605,
                                    "src": "23282:6:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                      "typeString": "struct strings.slice memory"
                                    }
                                  },
                                  "id": 2650,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_ptr",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1126,
                                  "src": "23282:11:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 2637,
                                "name": "findPtr",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2230,
                                "src": "23225:7:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                                  "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                                }
                              },
                              "id": 2651,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "23225:69:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "+",
                            "rightExpression": {
                              "expression": {
                                "id": 2652,
                                "name": "needle",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2605,
                                "src": "23297:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2653,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1124,
                              "src": "23297:11:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "src": "23225:83:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23219:89:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2656,
                        "nodeType": "ExpressionStatement",
                        "src": "23219:89:4"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2632,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2626,
                      "name": "ptr",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2611,
                      "src": "23156:3:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<=",
                    "rightExpression": {
                      "commonType": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "id": 2631,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "expression": {
                          "id": 2627,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2603,
                          "src": "23163:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2628,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "23163:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "+",
                      "rightExpression": {
                        "expression": {
                          "id": 2629,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2603,
                          "src": "23175:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2630,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "23175:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "23163:21:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23156:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2658,
                  "nodeType": "WhileStatement",
                  "src": "23149:170:4"
                }
              ]
            },
            "id": 2660,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "count",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2606,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2603,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2660,
                  "src": "22976:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2602,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "22976:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2605,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2660,
                  "src": "22995:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2604,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "22995:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "22975:40:4"
            },
            "returnParameters": {
              "id": 2609,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2608,
                  "mutability": "mutable",
                  "name": "cnt",
                  "nodeType": "VariableDeclaration",
                  "scope": 2660,
                  "src": "23039:8:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 2607,
                    "name": "uint",
                    "nodeType": "ElementaryTypeName",
                    "src": "23039:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23038:10:4"
            },
            "scope": 2845,
            "src": "22961:364:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2683,
              "nodeType": "Block",
              "src": "23651:93:4",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2681,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "expression": {
                            "id": 2670,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2662,
                            "src": "23677:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2671,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "23677:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 2672,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2662,
                            "src": "23688:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2673,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1126,
                          "src": "23688:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 2674,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2664,
                            "src": "23699:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2675,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "23699:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "expression": {
                            "id": 2676,
                            "name": "needle",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2664,
                            "src": "23712:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2677,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_ptr",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1126,
                          "src": "23712:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 2669,
                        "name": "rfindPtr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2348,
                        "src": "23668:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_uint256_$",
                          "typeString": "function (uint256,uint256,uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 2678,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "23668:56:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "id": 2679,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2662,
                        "src": "23728:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2680,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_ptr",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1126,
                      "src": "23728:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23668:69:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 2668,
                  "id": 2682,
                  "nodeType": "Return",
                  "src": "23661:76:4"
                }
              ]
            },
            "id": 2684,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "contains",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2665,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2662,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2684,
                  "src": "23582:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2661,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "23582:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2664,
                  "mutability": "mutable",
                  "name": "needle",
                  "nodeType": "VariableDeclaration",
                  "scope": 2684,
                  "src": "23601:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2663,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "23601:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23581:40:4"
            },
            "returnParameters": {
              "id": 2668,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2667,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2684,
                  "src": "23645:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 2666,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "23645:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "23644:6:4"
            },
            "scope": 2845,
            "src": "23564:180:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2729,
              "nodeType": "Block",
              "src": "24124:262:4",
              "statements": [
                {
                  "assignments": [
                    2694
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2694,
                      "mutability": "mutable",
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 2729,
                      "src": "24134:17:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2693,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "24134:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2703,
                  "initialValue": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2701,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "expression": {
                            "id": 2697,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2686,
                            "src": "24165:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2698,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "24165:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "expression": {
                            "id": 2699,
                            "name": "other",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2688,
                            "src": "24177:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2700,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "24177:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "24165:22:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2696,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "24154:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 2695,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "24158:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 2702,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24154:34:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24134:54:4"
                },
                {
                  "assignments": [
                    2705
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2705,
                      "mutability": "mutable",
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2729,
                      "src": "24198:11:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2704,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "24198:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2706,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24198:11:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "24228:26:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "24230:22:4",
                        "value": {
                          "arguments": [
                            {
                              "name": "ret",
                              "nodeType": "YulIdentifier",
                              "src": "24244:3:4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "24249:2:4",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "24240:3:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "24240:12:4"
                        },
                        "variableNames": [
                          {
                            "name": "retptr",
                            "nodeType": "YulIdentifier",
                            "src": "24230:6:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 2694,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "24244:3:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2705,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "24230:6:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 2707,
                  "nodeType": "InlineAssembly",
                  "src": "24219:35:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2709,
                        "name": "retptr",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2705,
                        "src": "24270:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2710,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2686,
                          "src": "24278:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2711,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "24278:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2712,
                          "name": "self",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2686,
                          "src": "24289:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2713,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "24289:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2708,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1167,
                      "src": "24263:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 2714,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24263:36:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2715,
                  "nodeType": "ExpressionStatement",
                  "src": "24263:36:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 2720,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 2717,
                          "name": "retptr",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2705,
                          "src": "24316:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "+",
                        "rightExpression": {
                          "expression": {
                            "id": 2718,
                            "name": "self",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2686,
                            "src": "24325:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                              "typeString": "struct strings.slice memory"
                            }
                          },
                          "id": 2719,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "_len",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 1124,
                          "src": "24325:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "24316:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2721,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2688,
                          "src": "24336:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2722,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_ptr",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1126,
                        "src": "24336:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "expression": {
                          "id": 2723,
                          "name": "other",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2688,
                          "src": "24348:5:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2724,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "24348:10:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2716,
                      "name": "memcpy",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1167,
                      "src": "24309:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                        "typeString": "function (uint256,uint256,uint256) pure"
                      }
                    },
                    "id": 2725,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "24309:50:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2726,
                  "nodeType": "ExpressionStatement",
                  "src": "24309:50:4"
                },
                {
                  "expression": {
                    "id": 2727,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2694,
                    "src": "24376:3:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 2692,
                  "id": 2728,
                  "nodeType": "Return",
                  "src": "24369:10:4"
                }
              ]
            },
            "id": 2730,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "concat",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2689,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2686,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2730,
                  "src": "24047:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2685,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "24047:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2688,
                  "mutability": "mutable",
                  "name": "other",
                  "nodeType": "VariableDeclaration",
                  "scope": 2730,
                  "src": "24066:18:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2687,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "24066:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24046:39:4"
            },
            "returnParameters": {
              "id": 2692,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2691,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2730,
                  "src": "24109:13:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2690,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "24109:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24108:15:4"
            },
            "scope": 2845,
            "src": "24031:355:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 2843,
              "nodeType": "Block",
              "src": "24815:635:4",
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2743,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2740,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2735,
                        "src": "24829:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 2741,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "24829:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "hexValue": "30",
                      "id": 2742,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24845:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "24829:17:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2746,
                  "nodeType": "IfStatement",
                  "src": "24825:44:4",
                  "trueBody": {
                    "expression": {
                      "hexValue": "",
                      "id": 2744,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "string",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24867:2:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                        "typeString": "literal_string \"\""
                      },
                      "value": ""
                    },
                    "functionReturnParameters": 2739,
                    "id": 2745,
                    "nodeType": "Return",
                    "src": "24860:9:4"
                  }
                },
                {
                  "assignments": [
                    2748
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2748,
                      "mutability": "mutable",
                      "name": "length",
                      "nodeType": "VariableDeclaration",
                      "scope": 2843,
                      "src": "24880:11:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2747,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "24880:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2757,
                  "initialValue": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2756,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "expression": {
                        "id": 2749,
                        "name": "self",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2732,
                        "src": "24894:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                          "typeString": "struct strings.slice memory"
                        }
                      },
                      "id": 2750,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "_len",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 1124,
                      "src": "24894:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "*",
                    "rightExpression": {
                      "components": [
                        {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2754,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "expression": {
                              "id": 2751,
                              "name": "parts",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2735,
                              "src": "24907:5:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                                "typeString": "struct strings.slice memory[] memory"
                              }
                            },
                            "id": 2752,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "src": "24907:12:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "hexValue": "31",
                            "id": 2753,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "24922:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_1_by_1",
                              "typeString": "int_const 1"
                            },
                            "value": "1"
                          },
                          "src": "24907:16:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "id": 2755,
                      "isConstant": false,
                      "isInlineArray": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "TupleExpression",
                      "src": "24906:18:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24894:30:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24880:44:4"
                },
                {
                  "body": {
                    "expression": {
                      "id": 2774,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftHandSide": {
                        "id": 2769,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2748,
                        "src": "24985:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "nodeType": "Assignment",
                      "operator": "+=",
                      "rightHandSide": {
                        "expression": {
                          "baseExpression": {
                            "id": 2770,
                            "name": "parts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2735,
                            "src": "24995:5:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                              "typeString": "struct strings.slice memory[] memory"
                            }
                          },
                          "id": 2772,
                          "indexExpression": {
                            "id": 2771,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2759,
                            "src": "25001:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "24995:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                            "typeString": "struct strings.slice memory"
                          }
                        },
                        "id": 2773,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "_len",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 1124,
                        "src": "24995:13:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "src": "24985:23:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2775,
                    "nodeType": "ExpressionStatement",
                    "src": "24985:23:4"
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2765,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2762,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2759,
                      "src": "24950:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 2763,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2735,
                        "src": "24954:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 2764,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "24954:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24950:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2776,
                  "initializationExpression": {
                    "assignments": [
                      2759
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2759,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 2776,
                        "src": "24938:6:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2758,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "24938:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 2761,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 2760,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24947:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "24938:10:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 2767,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "24968:3:4",
                      "subExpression": {
                        "id": 2766,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2759,
                        "src": "24968:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2768,
                    "nodeType": "ExpressionStatement",
                    "src": "24968:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "24934:74:4"
                },
                {
                  "assignments": [
                    2778
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2778,
                      "mutability": "mutable",
                      "name": "ret",
                      "nodeType": "VariableDeclaration",
                      "scope": 2843,
                      "src": "25019:17:4",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string"
                      },
                      "typeName": {
                        "id": 2777,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "25019:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2783,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 2781,
                        "name": "length",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2748,
                        "src": "25050:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 2780,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "25039:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_string_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (string memory)"
                      },
                      "typeName": {
                        "id": 2779,
                        "name": "string",
                        "nodeType": "ElementaryTypeName",
                        "src": "25043:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_string_storage_ptr",
                          "typeString": "string"
                        }
                      }
                    },
                    "id": 2782,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "25039:18:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25019:38:4"
                },
                {
                  "assignments": [
                    2785
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 2785,
                      "mutability": "mutable",
                      "name": "retptr",
                      "nodeType": "VariableDeclaration",
                      "scope": 2843,
                      "src": "25067:11:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 2784,
                        "name": "uint",
                        "nodeType": "ElementaryTypeName",
                        "src": "25067:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 2786,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "25067:11:4"
                },
                {
                  "AST": {
                    "nodeType": "YulBlock",
                    "src": "25097:26:4",
                    "statements": [
                      {
                        "nodeType": "YulAssignment",
                        "src": "25099:22:4",
                        "value": {
                          "arguments": [
                            {
                              "name": "ret",
                              "nodeType": "YulIdentifier",
                              "src": "25113:3:4"
                            },
                            {
                              "kind": "number",
                              "nodeType": "YulLiteral",
                              "src": "25118:2:4",
                              "type": "",
                              "value": "32"
                            }
                          ],
                          "functionName": {
                            "name": "add",
                            "nodeType": "YulIdentifier",
                            "src": "25109:3:4"
                          },
                          "nodeType": "YulFunctionCall",
                          "src": "25109:12:4"
                        },
                        "variableNames": [
                          {
                            "name": "retptr",
                            "nodeType": "YulIdentifier",
                            "src": "25099:6:4"
                          }
                        ]
                      }
                    ]
                  },
                  "evmVersion": "byzantium",
                  "externalReferences": [
                    {
                      "declaration": 2778,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "25113:3:4",
                      "valueSize": 1
                    },
                    {
                      "declaration": 2785,
                      "isOffset": false,
                      "isSlot": false,
                      "src": "25099:6:4",
                      "valueSize": 1
                    }
                  ],
                  "id": 2787,
                  "nodeType": "InlineAssembly",
                  "src": "25088:35:4"
                },
                {
                  "body": {
                    "id": 2839,
                    "nodeType": "Block",
                    "src": "25172:251:4",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 2800,
                              "name": "retptr",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2785,
                              "src": "25193:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 2801,
                                  "name": "parts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2735,
                                  "src": "25201:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct strings.slice memory[] memory"
                                  }
                                },
                                "id": 2803,
                                "indexExpression": {
                                  "id": 2802,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2789,
                                  "src": "25207:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "25201:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2804,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_ptr",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1126,
                              "src": "25201:13:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "expression": {
                                "baseExpression": {
                                  "id": 2805,
                                  "name": "parts",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2735,
                                  "src": "25216:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                                    "typeString": "struct strings.slice memory[] memory"
                                  }
                                },
                                "id": 2807,
                                "indexExpression": {
                                  "id": 2806,
                                  "name": "i",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2789,
                                  "src": "25222:1:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "25216:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                  "typeString": "struct strings.slice memory"
                                }
                              },
                              "id": 2808,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "_len",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 1124,
                              "src": "25216:13:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "id": 2799,
                            "name": "memcpy",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1167,
                            "src": "25186:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                              "typeString": "function (uint256,uint256,uint256) pure"
                            }
                          },
                          "id": 2809,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25186:44:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 2810,
                        "nodeType": "ExpressionStatement",
                        "src": "25186:44:4"
                      },
                      {
                        "expression": {
                          "id": 2816,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "id": 2811,
                            "name": "retptr",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2785,
                            "src": "25244:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "+=",
                          "rightHandSide": {
                            "expression": {
                              "baseExpression": {
                                "id": 2812,
                                "name": "parts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2735,
                                "src": "25254:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "struct strings.slice memory[] memory"
                                }
                              },
                              "id": 2814,
                              "indexExpression": {
                                "id": 2813,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2789,
                                "src": "25260:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "25254:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                "typeString": "struct strings.slice memory"
                              }
                            },
                            "id": 2815,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "_len",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 1124,
                            "src": "25254:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25244:23:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 2817,
                        "nodeType": "ExpressionStatement",
                        "src": "25244:23:4"
                      },
                      {
                        "condition": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 2823,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 2818,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2789,
                            "src": "25285:1:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "commonType": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "id": 2822,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "expression": {
                                "id": 2819,
                                "name": "parts",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2735,
                                "src": "25289:5:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "struct strings.slice memory[] memory"
                                }
                              },
                              "id": 2820,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "length",
                              "nodeType": "MemberAccess",
                              "src": "25289:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "-",
                            "rightExpression": {
                              "hexValue": "31",
                              "id": 2821,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25304:1:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            },
                            "src": "25289:16:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "25285:20:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 2838,
                        "nodeType": "IfStatement",
                        "src": "25281:132:4",
                        "trueBody": {
                          "id": 2837,
                          "nodeType": "Block",
                          "src": "25307:106:4",
                          "statements": [
                            {
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 2825,
                                    "name": "retptr",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2785,
                                    "src": "25332:6:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 2826,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2732,
                                      "src": "25340:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    },
                                    "id": 2827,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_ptr",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1126,
                                    "src": "25340:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "expression": {
                                      "id": 2828,
                                      "name": "self",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 2732,
                                      "src": "25351:4:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                        "typeString": "struct strings.slice memory"
                                      }
                                    },
                                    "id": 2829,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "_len",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 1124,
                                    "src": "25351:9:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "id": 2824,
                                  "name": "memcpy",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1167,
                                  "src": "25325:6:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$__$",
                                    "typeString": "function (uint256,uint256,uint256) pure"
                                  }
                                },
                                "id": 2830,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "25325:36:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 2831,
                              "nodeType": "ExpressionStatement",
                              "src": "25325:36:4"
                            },
                            {
                              "expression": {
                                "id": 2835,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "id": 2832,
                                  "name": "retptr",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2785,
                                  "src": "25379:6:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "+=",
                                "rightHandSide": {
                                  "expression": {
                                    "id": 2833,
                                    "name": "self",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 2732,
                                    "src": "25389:4:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                                      "typeString": "struct strings.slice memory"
                                    }
                                  },
                                  "id": 2834,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "_len",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 1124,
                                  "src": "25389:9:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25379:19:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 2836,
                              "nodeType": "ExpressionStatement",
                              "src": "25379:19:4"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 2795,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 2792,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2789,
                      "src": "25149:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 2793,
                        "name": "parts",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2735,
                        "src": "25153:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                          "typeString": "struct strings.slice memory[] memory"
                        }
                      },
                      "id": 2794,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "25153:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "25149:16:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 2840,
                  "initializationExpression": {
                    "assignments": [
                      2789
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 2789,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "scope": 2840,
                        "src": "25137:6:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 2788,
                          "name": "uint",
                          "nodeType": "ElementaryTypeName",
                          "src": "25137:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 2791,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 2790,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "25146:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "25137:10:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 2797,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "25167:3:4",
                      "subExpression": {
                        "id": 2796,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2789,
                        "src": "25167:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 2798,
                    "nodeType": "ExpressionStatement",
                    "src": "25167:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "25133:290:4"
                },
                {
                  "expression": {
                    "id": 2841,
                    "name": "ret",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2778,
                    "src": "25440:3:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  "functionReturnParameters": 2739,
                  "id": 2842,
                  "nodeType": "Return",
                  "src": "25433:10:4"
                }
              ]
            },
            "id": 2844,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "join",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2736,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2732,
                  "mutability": "mutable",
                  "name": "self",
                  "nodeType": "VariableDeclaration",
                  "scope": 2844,
                  "src": "24736:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_slice_$1127_memory_ptr",
                    "typeString": "struct strings.slice"
                  },
                  "typeName": {
                    "id": 2731,
                    "name": "slice",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 1127,
                    "src": "24736:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                      "typeString": "struct strings.slice"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2735,
                  "mutability": "mutable",
                  "name": "parts",
                  "nodeType": "VariableDeclaration",
                  "scope": 2844,
                  "src": "24755:20:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_struct$_slice_$1127_memory_ptr_$dyn_memory_ptr",
                    "typeString": "struct strings.slice[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 2733,
                      "name": "slice",
                      "nodeType": "UserDefinedTypeName",
                      "referencedDeclaration": 1127,
                      "src": "24755:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_slice_$1127_storage_ptr",
                        "typeString": "struct strings.slice"
                      }
                    },
                    "id": 2734,
                    "nodeType": "ArrayTypeName",
                    "src": "24755:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_struct$_slice_$1127_storage_$dyn_storage_ptr",
                      "typeString": "struct strings.slice[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24735:41:4"
            },
            "returnParameters": {
              "id": 2739,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2738,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "scope": 2844,
                  "src": "24800:13:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2737,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "24800:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "24799:15:4"
            },
            "scope": 2845,
            "src": "24722:728:4",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 2846,
        "src": "2046:23406:4"
      }
    ],
    "src": "2013:23440:4"
  },
  "compiler": {
    "name": "solc",
    "version": "0.7.4+commit.3f05b770.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.2",
  "updatedAt": "2020-11-09T15:20:09.551Z",
  "devdoc": {
    "kind": "dev",
    "methods": {},
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {},
    "version": 1
  }
}