private void parseLink(final byte[] link) throws ParseException {
		try {
			if (!isMagicPresent(link))
				throw new ParseException("Invalid shortcut; magic is missing", 0);

			// get the flags byte
			final byte flags = link[0x14];

			// get the file attributes byte
			final int fileAttsOffset = 0x18;
			final byte fileAtts = link[fileAttsOffset];
			final byte isDirMask = (byte) 0x10;
			isDirectory = (fileAtts & isDirMask) > 0;

			// if the shell settings are present, skip them
			final int shellOffset = 0x4c;
			final byte hasShellMask = (byte) 0x01;
			int shellLen = 0;
			if ((flags & hasShellMask) > 0) {
				// the plus 2 accounts for the length marker itself
				shellLen = bytesToWord(link, shellOffset) + 2;
			}

			// get to the file settings
			final int fileStart = 0x4c + shellLen;

			final int fileLocationInfoFlagOffsetOffset = 0x08;
			final int fileLocationInfoFlag =
					link[fileStart + fileLocationInfoFlagOffsetOffset];
			isLocal = (fileLocationInfoFlag & 2) == 0;
			// get the local volume and local system values
			//final int localVolumeTable_offset_offset = 0x0C;
			final int basenameOffsetOffset = 0x10;
			final int networkVolumeTableOffsetOffset = 0x14;
			final int finalnameOffsetOffset = 0x18;
			final int finalnameOffset = link[fileStart + finalnameOffsetOffset] + fileStart;
			final String finalname = getNullDelimitedString(link, finalnameOffset);
			if (isLocal) {
				final int basenameOffset = link[fileStart + basenameOffsetOffset] + fileStart;
				final String basename = getNullDelimitedString(link, basenameOffset);
				realFile = basename + finalname;
			} else {
				final int networkVolumeTableOffset =
						link[fileStart + networkVolumeTableOffsetOffset] + fileStart;
				final int shareNameOffsetOffset = 0x08;
				final int shareNameOffset =
						link[networkVolumeTableOffset + shareNameOffsetOffset] + networkVolumeTableOffset;
				final String shareName = getNullDelimitedString(link, shareNameOffset);
				realFile = shareName + "\\" + finalname;
			}
		} catch (final ArrayIndexOutOfBoundsException e) {
			throw new ParseException("Could not be parsed, probably not a valid WindowsShortcut", 0);
		}
	}
Gobbles up link data by parsing it and storing info in member fields

@param link
		all the bytes from the .lnk file
recaf-core/src/main/java/software/coley/recaf/util/ShortcutUtil.java