def mark_subparameter_for_unpacking(self, input_socket):
        """Mark subparameter for unpacking.

        Parameters
        ==========
        input_socket (InputSocket instance)
            it represents the socket of an existing
            subparameter.
        """
        param_name = input_socket.parameter_name
        subparam_index = input_socket.subparameter_index

        kind = self.var_kind_map[param_name]

        ### reference the list of subparameters for
        ### unpacking locally for easier access
        subparams_for_unpacking = self.data["subparam_unpacking_map"][param_name]

        ### reference the subparam unpacking icon map
        ### locally for easier and quicker access
        sui_flmap = self.subparam_unpacking_icon_flmap

        ## retrieve the list of rects from the
        ## subrectsman

        subrectsman = self.subparam_rectsman_map[param_name][subparam_index]

        subrectsman_rects = subrectsman._get_all_rects.__self__

        ### if variable is of keyword-variable kind, we'll
        ### need to remove the keyword entry from the
        ### live map and the keyword from the data,
        ### as well as the rect of the entry from
        ### the subrectsman rects

        if kind == "var_key":

            keyword_entry = self.subparam_keyword_entry_live_map.pop(subparam_index)

            remove_by_identity(
                keyword_entry.rect,
                subrectsman_rects,
            )

            (self.data["subparam_keyword_map"].pop(subparam_index))

        # put together a bottomleft coordinate for the
        # unpacking icon;
        #
        # for the bottom use the top of the subrectsman
        # (3 pixels higher, by subtracting the amount)

        bottomleft = (input_socket.rect.right + 15, subrectsman.top - 3)

        icon_surf = UNPACKING_ICON_SURFS_MAP[
            (
                kind,
                self.data.get("commented_out", False),
            )
        ]

        unpacking_icon = Object2D.from_surface(
            surface=icon_surf,
            coordinates_name="bottomleft",
            coordinates_value=bottomleft,
        )

        # store the subparam keyword entry
        sui_flmap[param_name][subparam_index] = unpacking_icon

        # this dict subclass instance must be updated
        # every time it is changed
        sui_flmap.update()

        # store reference to unpacking icon's rect
        subrectsman_rects.append(unpacking_icon.rect)

        # mark as subparam for unpacking by appending it
        # to corresponding list
        subparams_for_unpacking.append(subparam_index)
        subparams_for_unpacking.sort()

        ### reposition all objects within the node
        self.reposition_elements()

        ### reset body's height and image
        self.reset_body_height_and_image()

        ### there's no need to indicate here that changes were made
        ### in the data cause this is done by the input socket in
        ### the method that calls this one, so the line below that
        ### would be otherwise executed, appears commented out
        #indicate_unsaved()
Mark subparameter for unpacking.

        Parameters
        ==========
        input_socket (InputSocket instance)
            it represents the socket of an existing
            subparameter.
        
nodezator/graphman/callablenode/subparam/unpacking.py