<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def update(self, fields=None, update=None, async_=None, jira=None, notify=True, **fieldargs):
 """Update this issue on the server. Each keyword argument (other than the predefined ones) is treated as a field name and the argument's value is treated as the intended value for that field -- if the fields argument is used, all other keyword arguments will be ignored. JIRA projects may contain many different issue types. Some issue screens have different requirements for fields in an issue. This information is available through the :py:meth:`.JIRA.editmeta` method. Further examples are available here: https://developer.atlassian.com/display/JIRADEV/JIRA+REST+API+Example+-+Edit+issues :param fields: a dict containing field names and the values to use :param update: a dict containing update operations to apply :param notify: query parameter notifyUsers. If true send the email with notification that the issue was updated to users that watch it. Admin or project admin permissions are required to disable the notification. :param fieldargs: keyword arguments will generally be merged into fields, except lists, which will be merged into updates :type fields: dict :type update: dict """

        data = {}
        if fields is not None:
            fields_dict = fields
        else:
            fields_dict = {}
        data['fields'] = fields_dict
        if update is not None:
            update_dict = update
        else:
            update_dict = {}
        data['update'] = update_dict
        for field in sorted(fieldargs.keys()):
            value = fieldargs[field]
            # apply some heuristics to make certain changes easier
            if isinstance(value, string_types):
                if field == 'assignee' or field == 'reporter':
                    fields_dict['assignee'] = {'name': value}
                elif field == 'comment':
                    if 'comment' not in update_dict:
                        update_dict['comment'] = []
                    update_dict['comment'].append({
                        'add': {'body': value}})
                else:
                    fields_dict[field] = value
            elif isinstance(value, list):
                if field not in update_dict:
                    update_dict[field] = []
                update_dict[field].extend(value)
            else:
                fields_dict[field] = value

        super(Issue, self).update(async_=async_, jira=jira, notify=notify, fields=data)