| list_hub_profilesA | List all hub profiles in a workspace. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| list_managed_hub_profilesA | List hub profiles where the current API key user has Admin or Editor role. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| get_hub_profileA | Get full hub profile details by ID. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| get_hub_profile_by_usernameB | Get hub profile details by its URL username/slug. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| filter_hub_profilesA | Batch-fetch lightweight hub profile data for a list of IDs. workspace_id: target workspace ID — get available IDs from list_workspaces()
availability_level: "Public" or "Private" to filter by visibility
|
| create_hub_profileA | Create a new hub profile in a workspace. workspace_id: target workspace ID — get available IDs from list_workspaces()
availability_level: "Public" (default) or "Private"
primary_url: optional external URL shown on the profile
app_clip_on: enable iOS App Clip
widgets: profile widget configuration objects
buttons: action buttons, each
{"title": "...", "logic": {"type": "...", "url": "..."}}
|
| update_hub_profileA | Update an existing hub profile's metadata. All fields are overwritten — provide the full desired state.
workspace_id: target workspace ID — get available IDs from list_workspaces()
availability_level: "Public" or "Private"
primary_url: optional external URL shown on the profile
app_clip_on: enable iOS App Clip
widgets: profile widget configuration objects (replaces existing)
buttons: action buttons (replaces existing), each
{"title": "...", "logic": {"type": "...", "url": "..."}}
|
| archive_hub_profileA | Archive a hub profile (hidden from listings, content preserved). workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| restore_hub_profileA | Restore a previously archived hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| delete_hub_profileA | Permanently delete a hub profile and all its data. Irreversible. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| join_hub_profileA | Join a public hub profile as the current API key user. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| move_hub_profile_to_workspaceA | Transfer a hub profile to a different workspace (preserves content). |
| turn_on_hub_profile_communityB | Enable community features for a hub profile (posts, comments, reactions). workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| list_channelsB | List all channels for a hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| get_channelA | Get full channel details by ID (includes categories and heading content). workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| get_channel_by_nameB | Get channel details by hub profile username slug and channel name slug. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| create_channelA | Create a new channel in a hub profile. Returns the new channel ID. workspace_id: target workspace ID — get available IDs from list_workspaces()
privacy: "Private" (default) or "Public"
|
| update_channelB | Update a channel's name, privacy, and category order. workspace_id: target workspace ID — get available IDs from list_workspaces()
privacy: "Public" or "Private"
categories: list of {"id": "...", "order": 0} to reorder categories
|
| archive_channelA | Archive a channel (hidden from members, content preserved). workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| restore_channelB | Restore a previously archived channel. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| delete_channelA | Permanently delete a channel and all its categories/sections. Irreversible. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| create_categoryA | Create a new category inside a channel. Returns the new category ID. workspace_id: target workspace ID — get available IDs from list_workspaces()
view_type: display view type (e.g. "Grid", "List")
progression_enabled: track user completion progress
cover_show: show cover images in this category
expandable: allow the category to be collapsed
sections: list of {"name": "...", "type": "...", "reference_ids": [...]} for initial sections
|
| update_categoryA | Update a category's name, pin status, notification settings, and display options. workspace_id: target workspace ID — get available IDs from list_workspaces()
view_type: display view type (e.g. "Grid", "List")
progression_enabled: track user completion progress
cover_show: show cover images in this category
expandable: allow the category to be collapsed
|
| archive_categoryC | Archive a category inside a channel. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| restore_categoryA | Restore a previously archived category inside a channel. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| delete_categoryA | Permanently delete a category from a channel. Irreversible. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| get_category_referencesC | List content references in a category with cursor-based pagination. workspace_id: target workspace ID — get available IDs from list_workspaces()
Returns items and a cursor for the next page (null if no more pages).
|
| get_category_by_slugsA | Get category details by hub profile username, channel name, and category name slugs. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| create_sectionA | Create a new section inside a channel category. Returns the new section ID. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| update_sectionB | Rename a section inside a channel category. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| delete_sectionA | Permanently delete a section from a channel category. Irreversible. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| add_content_to_categoryC | Add one or more content items to a section inside a channel category. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| list_contentsA | List content items in a hub profile with cursor-based pagination. workspace_id: target workspace ID — get available IDs from list_workspaces()
types: ["Content"], ["Collection"], or None for both (default)
Returns {"items": [...], "cursor": "..." | null}
|
| search_contentsA | Search content items in a hub profile by keyword. workspace_id: target workspace ID — get available IDs from list_workspaces()
search: REQUIRED non-empty keyword. An empty/blank string is rejected (400);
there is no "list all" via search — to browse, walk channels/categories.
types: ["Content"], ["Collection"], or None for both (default)
|
| get_contentB | Get content item details by ID (v1 schema). workspace_id: target workspace ID — get available IDs from list_workspaces()
hub_profile_id: optional, used to resolve access context
|
| get_content_v2A | Get content item by ID (v2 schema). workspace_id: target workspace ID — get available IDs from list_workspaces()
Includes main asset, user progression, and extended metadata.
|
| create_contentA | Create a new content item in a hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces()
privacy: "Preview" (default), "Private", or "Public"
channels: list of channel IDs. NOTE: a channel placement needs a category,
so passing channels alone here often does NOT stick (saved channels:[]).
To reliably place content, call add_content_to_categories(content_id,
channel_id, category_ids=[...]) after create.
main_asset_id: ID of the primary playable asset
url: optional external URL to associate with the content
cover_image: http(s):// URL (or local path) of the cover; the URL PATH must
end in an image extension (.jpg/.png/...). Query strings are fine (signed
URLs work); an extension-less URL (e.g. placehold.co/600x400) returns 400.
categories: category assignment objects
context: the body — an ordered list of widget objects. Each widget MUST
carry a "$type" discriminator (literal key, with the dollar sign). Keys are
camelCase: the backend rejects snake_case for multi-word fields (assetId,
hubProfileIds, referenceIds) as a silent 400, so never send asset_id etc.
Shapes:
• Text (markdown body):
{"$type": "Text", "content": "<markdown, required>", "title": "<optional>"}
• LinkList:
{"$type": "LinkList", "title": "<optional>", "links": [
{"$type": "CustomLink", "title": "<required, unique in list>", "url": "https://...", "extension": "<optional image ext>"},
{"$type": "KnownLink", "title": "<required>", "url": "https://..."}
]}
(both link types use "title" + "url"; NOT "label"/"type". Max 20 links.)
• Media: {"$type": "Media", "assetId": "<existing PLAYABLE/video asset id>", "autoplay": false, "title": "<optional>"}
(assetId must be an EXISTING playable/video asset of the hub; an image or
a just-uploaded asset is NOT playable media and returns 404. No image-body
widget exists — use the cover, a CustomLink, or markdown in a Text widget.)
• HubProfile: {"$type": "HubProfile", "hubProfileIds": ["<hub id>", ...], "title": "<optional>"}
(hubProfileIds is a REQUIRED array, even for a single hub)
• ContentWidget: {"$type": "ContentWidget", "referenceType": "Content",
"referenceIds": [{"$type": "Content", "id": "<content id>"}], "title": "<optional>"}
(each reference is {"$type": "Content"|"Asset", "id": "..."}; referenceType matches the kind)
A single bad widget rejects the WHOLE call with 400 (the error now names the
rejected field). Widget title (when set) is 1-150 chars.
|
| update_contentA | Update a content item's metadata. Only provided fields are changed. workspace_id: target workspace ID — get available IDs from list_workspaces()
privacy: "Preview", "Private", or "Public"
channels: list of channel IDs (replaces existing placement)
main_asset_id: ID of the primary playable asset
url: external URL to associate with the content
hub_profile_id: the owning hub profile. Optional — when omitted it is
resolved automatically from the content, so you normally do not pass it.
cover_image: http(s):// URL (or local path) of the cover; the URL PATH must
end in an image extension (.jpg/.png/...). Query strings are fine (signed
URLs work); an extension-less URL (e.g. placehold.co/600x400) returns 400.
categories: category assignment objects (REPLACES existing — to append,
read the content first and send the full list back)
context: the body — REPLACES the existing widget list. Same widget shapes
as create_content, camelCase keys: "Text"{content}; "LinkList"{links:[{$type,
title,url}]}; "Media"{assetId,autoplay}; "HubProfile"{hubProfileIds:[...]};
"ContentWidget"{referenceType,referenceIds:[{$type,id}]}. To append to the
current body, read it first (get_content_v2) and send the existing widgets
plus the new ones.
|
| archive_contentA | Archive a content item (hidden from listings, fully reversible). The platform has no hard delete for content — archiving is how you remove
a content item from view; use restore_content to bring it back.
workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| restore_contentA | Restore a previously archived content item. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| add_content_to_categoriesA | Add a content item to one or more channel categories. workspace_id: target workspace ID — get available IDs from list_workspaces()
content_id: ID of the content item
channel_id: ID of the channel
category_ids: IDs of the categories inside that channel to add the content to
|
| remove_content_from_categoriesA | Remove a content item from one or more channel categories. The content item itself is not deleted.
workspace_id: target workspace ID — get available IDs from list_workspaces()
content_id: ID of the content item
channel_id: ID of the channel
category_ids: IDs of the categories to remove the content from
|
| move_contentA | Move a content item to a different category section within a channel. workspace_id: target workspace ID — get available IDs from list_workspaces()
content_id: ID of the content item to move
channel_id: ID of the channel containing the target category
category_id: ID of the destination category
section_id: ID of the destination section within that category
|
| create_content_sectionB | Create a section inside a collection content item's category. workspace_id: target workspace ID — get available IDs from list_workspaces()
category_name: the name slug of the category (e.g. "week-1")
|
| update_content_sectionB | Rename a section inside a collection content item's category. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| delete_content_sectionC | Delete a section from a collection content item's category. Irreversible. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| add_subcontentA | Link existing content items as subcontent inside a collection section. Subcontent is the nested content that lives inside a Collection — think
lessons inside a course, or chapters inside a module. A Content item
automatically becomes a Collection once it has at least one subcontent item.
workspace_id: target workspace ID — get available IDs from list_workspaces()
content_id: ID of the collection (the parent content item)
category_name: "Content" for nested content items, "Asset" for nested assets
section_id: ID of the section to add the subcontent into
(create a section first with create_content_section if needed)
subcontent_ids: list of content IDs to link as subcontent (one or more)
|
| get_subcontentA | List the subcontent items nested inside a collection, page by page. Returns the content items linked as subcontent inside the given collection's
category. Each item includes its id, name, cover, privacy, progression,
and the section it belongs to.
workspace_id: target workspace ID — get available IDs from list_workspaces()
content_id: ID of the collection (the parent content item)
category_name: "Content" (nested content items) or "Asset" (nested assets)
page_size: items per page (default 50)
cursor: opaque cursor from a previous response; omit for first page
order: "Asc" (default) or "Desc"
Returns {"items": [...], "cursor": "..." | null}
|
| delete_subcontentA | Unlink a subcontent item from a collection section. Removes the link between the collection and the subcontent item. The
subcontent item itself is NOT deleted — it continues to exist as a
standalone content item.
workspace_id: target workspace ID — get available IDs from list_workspaces()
content_id: ID of the collection (the parent content item)
category_name: "Content" or "Asset"
section_id: ID of the section that currently contains the subcontent item
subcontent_id: ID of the subcontent item to unlink
|
| move_subcontentA | Reorder a subcontent item within a collection section. Moves the item to the position immediately AFTER previous_subcontent_id.
Pass previous_subcontent_id=None to move the item to the very first
position in the section.
workspace_id: target workspace ID — get available IDs from list_workspaces()
content_id: ID of the collection (the parent content item)
category_name: "Content" or "Asset"
section_id: ID of the section containing the subcontent item
subcontent_id: ID of the subcontent item to reorder
previous_subcontent_id: ID of the item that should come directly before the
moved item; None places it first in the section
|
| patch_content_progressionA | Update the current user's progression status for a content item. workspace_id: target workspace ID — get available IDs from list_workspaces()
status: "NotStarted", "Incomplete", or "Completed"
|
| patch_media_progressionA | Update the current user's last watched position in a media asset (seconds). workspace_id: target workspace ID — get available IDs from list_workspaces()
Call periodically during playback to enable resume functionality.
|
| get_progression_statsA | Get completion statistics for the current user. workspace_id: target workspace ID — get available IDs from list_workspaces()
Pass collection_id to scope to a specific collection.
Returns total content count and how many the user has completed.
|
| list_assetsA | List assets in a hub profile with cursor-based pagination. workspace_id: target workspace ID — get available IDs from list_workspaces()
types: e.g. ["Media", "File", "Image", "Embed", "Video"] or None for all
Returns {"items": [...], "cursor": "..." | null}
|
| search_assetsA | Search assets in a hub profile by keyword. workspace_id: target workspace ID — get available IDs from list_workspaces()
types: e.g. ["Media", "File"] or None for all types
|
| get_assetA | Get full asset details by ID (Media, File, Image, Embed, or Video). workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| update_assetA | Update an asset's display name, read-only flag, and optionally its cover image. workspace_id: target workspace ID — get available IDs from list_workspaces()
cover_image: local file path or http(s):// URL — SDK uploads automatically.
|
| create_embed_assetB | Create an embed asset (external URL embed) in a hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| create_media_assetA | Create a media (video) asset record in a hub profile. DEPRECATED: registers a record only and does not upload bytes; the
current backend requires a multipart upload init, so this call fails.
Use `upload_asset` to create and upload in one step.
workspace_id: target workspace ID — get available IDs from list_workspaces()
Returns a signed URL for uploading the actual video file.
|
| create_file_assetA | Create a file asset record in a hub profile. DEPRECATED: registers a record only and does not upload bytes; the
current backend requires a multipart upload init, so this call fails.
Use `upload_asset` to create and upload in one step.
workspace_id: target workspace ID — get available IDs from list_workspaces()
extension: without dot, e.g. "pdf"
Returns a signed URL for uploading the actual file.
|
| create_image_assetA | Create an image asset record in a hub profile. DEPRECATED: registers a record only and does not upload bytes; the
current backend requires a multipart upload init, so this call fails.
Use `upload_asset` to create and upload in one step.
workspace_id: target workspace ID — get available IDs from list_workspaces()
extension: without dot, e.g. "png"
Returns a signed URL for uploading the actual image.
|
| create_video_assetA | Create a video file asset record in a hub profile. DEPRECATED: registers a record only and does not upload bytes; the
current backend requires a multipart upload init, so this call fails.
Use `upload_asset` to create and upload in one step.
workspace_id: target workspace ID — get available IDs from list_workspaces()
extension: without dot, e.g. "mp4"
Returns a signed URL for uploading the actual video file.
|
| upload_assetA | Create an asset AND upload its bytes in one call. This is the real upload path: it runs the full multipart flow
(init -> PUT parts -> finalize) and returns a ready, downloadable asset.
Prefer this over the deprecated create_*_asset tools, which only
register an empty record and fail against the current backend.
Provide the file via exactly one of:
- source_url: an http(s):// URL the server downloads, or
- base64_content: base64-encoded bytes (best for small files).
workspace_id: target workspace ID — get available IDs from list_workspaces()
extension: file extension without the dot (e.g. "pdf", "png", "mp4").
Inferred from source_url or name when omitted.
asset_type: "Image", "Video", or "File". Auto-detected from the extension
when omitted.
width / height: image dimensions in pixels. Auto-detected from the file
header for common image formats; pass explicitly otherwise.
media_type: optional mediaType integer for Video uploads.
|
| get_workspace_usersA | List all users in a workspace with their roles. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| get_userC | Get a user's full profile by ID. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| check_user_exists_by_emailA | Check whether a user account with the given email address exists. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| check_user_exists_by_phoneA | Check whether a user account with the given phone number exists (e.g. "+1234567890"). workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| list_invitationsC | List all pending invitations for a hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| invite_to_hub_profileC | Send email invitations to join a hub profile. workspace_id: target workspace ID — get available IDs from list_workspaces()
role_id: 1 = Admin, 2 = Editor, 3 = Viewer
|
| invite_to_workspaceA | Send email invitations to join a workspace. workspace_id: target workspace ID — get available IDs from list_workspaces()
role_id: 1 = Admin, 2 = Editor, 3 = Viewer
|
| get_invitation_linkC | Generate a shareable invitation link for a single email address. workspace_id: target workspace ID — get available IDs from list_workspaces()
role_id: 1 = Admin, 2 = Editor, 3 = Viewer
Returns the invitation ID and access link URL.
|
| update_invitationB | Update the role assigned to a pending invitation. workspace_id: target workspace ID — get available IDs from list_workspaces()
role_id: 1 = Admin, 2 = Editor, 3 = Viewer
|
| delete_invitationB | Cancel and permanently delete a pending invitation. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| list_workspace_invitationsA | List all pending invitations for a workspace. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| get_workspace_invitation_linkA | Generate a shareable invitation link for a workspace for a single email. workspace_id: target workspace ID — get available IDs from list_workspaces()
role_id: 1 = Admin, 2 = Editor, 3 = Viewer
Returns the invitation ID and access link URL.
|
| update_workspace_invitationA | Update the role assigned to a pending workspace invitation. workspace_id: target workspace ID — get available IDs from list_workspaces()
role_id: 1 = Admin, 2 = Editor, 3 = Viewer
|
| delete_workspace_invitationA | Cancel and permanently delete a pending workspace invitation. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| can_readA | Check whether the current user has read access to a target. workspace_id: target workspace ID — get available IDs from list_workspaces()
target_type: "HubProfile", "Workspace", "Channel", "Content", etc.
|
| can_editC | Check whether the current user has edit access to a target. workspace_id: target workspace ID — get available IDs from list_workspaces()
target_type: "HubProfile", "Workspace", "Channel", "Content", etc.
|
| can_create_childA | Check whether the current user can create a child resource inside a parent. workspace_id: target workspace ID — get available IDs from list_workspaces()
Example: can the user create a "Channel" inside a "HubProfile"?
|
| can_manage_permissionsC | Check whether the current user can grant/revoke roles on a target. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| can_archiveB | Check whether the current user can archive a target. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| is_memberC | Check whether the current user is a member of a target (any role). workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| get_permission_targetsA | Get all targets of a given type accessible to the current user. workspace_id: target workspace ID — get available IDs from list_workspaces()
target_type: "HubProfile", "Workspace", "Channel", etc.
child_target_type: filter to targets that have a child of this type
parent_target_id: filter to targets belonging to this parent
Returns each target with its permission flags (can_edit, can_archive, etc.)
|
| give_permissionA | Grant a user a role on a target (hub profile, workspace, channel, etc.). workspace_id: target workspace ID — get available IDs from list_workspaces()
target_type: "HubProfile", "Workspace", or "Channel"
role_id: 1 = Admin, 2 = Editor, 3 = Viewer
|
| delete_permissionA | Revoke all permissions a user has on a target. workspace_id: target workspace ID — get available IDs from list_workspaces()
target_type: "HubProfile", "Workspace", or "Channel"
|
| list_workspacesA | List all workspaces accessible with the current API key(s). Returns a SLIM row per workspace — id and name — which is all you need to
pick a workspace_id for other tools. For full details (seats, subscription,
hub profiles) call get_workspace(workspace_id); for a workspace's brands
call list_hub_profiles(workspace_id).
A user-level key (srgplus_u_) returns every workspace it can reach; multiple
keys are merged. The list comes from the single bulk call made when the key
was resolved, so it is one response, not one request per workspace.
|
| get_workspaceA | Get full details of a workspace (name, seats, subscription, hub profiles). workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| update_workspaceA | Update a workspace's display name. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| get_workspace_hub_profilesB | List all hub profiles in a workspace (minimal representation). workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| list_workspace_actionsA | List all automation actions configured on a workspace. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| get_workspace_actionA | Get full details of a workspace automation action by ID. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| create_workspace_actionB | Create a workspace automation action. Returns the new action ID. workspace_id: target workspace ID — get available IDs from list_workspaces()
metadata example for a webhook trigger:
{"$type": "ProgressionUpdatedMetadata", "webhookUrl": "https://..."}
hub_profile_ids: profiles this action applies to (default: all)
|
| update_workspace_actionA | Update a workspace automation action. All fields are overwritten. workspace_id: target workspace ID — get available IDs from list_workspaces()
metadata example: {"$type": "ProgressionUpdatedMetadata", "webhookUrl": "https://..."}
|
| delete_workspace_actionA | Permanently delete a workspace automation action. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| list_permission_groupsA | List all permission groups for a target. workspace_id: target workspace ID — get available IDs from list_workspaces()
target_type: "HubProfile" or "Workspace"
|
| get_permission_groupA | Get a permission group by ID, including its members. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| create_permission_groupB | Create a new permission group on a target. Returns the new group ID. workspace_id: target workspace ID — get available IDs from list_workspaces()
target_type: "HubProfile" or "Workspace"
|
| update_permission_groupB | Rename a permission group. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| delete_permission_groupA | Permanently delete a permission group. Members lose inherited permissions. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| add_users_to_permission_groupB | Add one or more users to a permission group. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| remove_user_from_permission_groupC | Remove a user from a permission group. workspace_id: target workspace ID — get available IDs from list_workspaces()
|
| get_srgplus_guideA | Return the full SRG+ how-to guide: navigation, content creation, the
exact widget shapes for the context body, safe-update rules, asset upload,
archive/restore, and common pitfalls. Call this once before authoring or editing content if you are unsure of the
workflow or a widget's shape — it is the authoritative reference and ships
with the connector (no separate skill install needed).
|