human
Complete this python program:
def addon_property(name, desc, default=None, fire_event=True):
assistant
#Here is the Python program you requested.

    """Use this function to declare class variables, that will be exposed as :class:`AddonInfo`.
    It works similar to the @property function. You declare the variable like `state = addon_property(...)`
    and use it as any other variable.
    :param name: display name
    :param desc: verbose description
    :param default: the default value
    :param fire_event: Fire `addon:property:change` event, when modified
    """
    h = u'__Property{0}'.format((hash(name) ^ hash(desc)))
    ADDONMANAGER.add_info_property(h, name, desc)
    def _get(self):
        if (not hasattr(self, h)):
            return default
        return getattr(self, h)
    def _set(self, value):
        if fire_event:
            self.__manager.fire(u'addon:property:change', value)
        return setattr(self, h, value)
    def _del(self):
        return delattr(self, h)
    return property(_get, _set, _del)