set (autostart ${PLUGIN_COBALT_AUTOSTART})
set (preconditions Platform Graphics Internet)

if(PLUGIN_COBALT_PERSISTENTPATHPOSTFIX)
  set(persistentpathpostfix ${PLUGIN_COBALT_PERSISTENTPATHPOSTFIX})
endif()

map()
    kv(outofprocess ${PLUGIN_COBALT_OUTOFPROCESS})
end()
ans(rootobject)

map()
    kv(url "https://www.youtube.com/tv")
    if(PLUGIN_COBALT_CLIENTIDENTIFIER)
        kv(clientidentifier ${PLUGIN_COBALT_CLIENTIDENTIFIER})
    endif()
    if(PLUGIN_COBALT_LANGUAGE)
        kv(language ${PLUGIN_COBALT_LANGUAGE})
    endif()
    if(PLUGIN_COBALT_CONTENT_DIR)
        kv(contentdir ${PLUGIN_COBALT_CONTENT_DIR})
    endif()
    if(PLUGIN_COBALT_PRELOAD)
        kv(preload ${PLUGIN_COBALT_PRELOAD})
    endif()
end()
ans(configuration)

map()
    if(PLUGIN_COBALT_PROP_MODELNAME)
        kv(modelname "${PLUGIN_COBALT_PROP_MODELNAME}")
    endif()
    if(PLUGIN_COBALT_PROP_BRANDNAME)
        kv(brandname "${PLUGIN_COBALT_PROP_BRANDNAME}")
    endif()
    if(PLUGIN_COBALT_PROP_MODELYEAR)
        kv(modelyear "${PLUGIN_COBALT_PROP_MODELYEAR}")
    endif()
    if(PLUGIN_COBALT_PROP_CHIPSETMODELNUMBER)
        kv(chipsetmodelnumber "${PLUGIN_COBALT_PROP_CHIPSETMODELNUMBER}")
    endif()
    if(PLUGIN_COBALT_PROP_FIRMWAREVERSION)
        kv(firmwareversion "${PLUGIN_COBALT_PROP_FIRMWAREVERSION}")
    endif()
    if(PLUGIN_COBALT_PROP_INTEGRATORNAME)
        kv(integratorname "${PLUGIN_COBALT_PROP_INTEGRATORNAME}")
    endif()
    if(PLUGIN_COBALT_PROP_FRIENDLYNAME)
        kv(friendlyname "${PLUGIN_COBALT_PROP_FRIENDLYNAME}")
    endif()
    if(PLUGIN_COBALT_PROP_DEVICETYPE)
        kv(devicetype "${PLUGIN_COBALT_PROP_DEVICETYPE}")
    endif()
end()
ans(systemproperties)

map_isempty(${systemproperties})
ans(systemproperties_isempty)
if (NOT systemproperties_isempty)
  map_append(${configuration} systemproperties ${systemproperties})
endif()

map_append(${configuration} root ${rootobject})
