{"id":396666,"date":"2026-11-06T21:14:31","date_gmt":"2026-11-06T21:14:31","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ghostlabs-friendly-skies\/"},"modified":"2026-11-06T21:13:57","modified_gmt":"2026-11-06T21:13:57","slug":"ghostlabs-friendly-skies","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/ghostlabs-friendly-skies\/","author":23277533,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.1","stable_tag":"1.0.1","tested":"7.1.4","requires":"7.1","requires_php":"8.1","requires_plugins":null,"header_name":"GhostLabs Friendly Skies","header_author":"GhostLabs","header_description":"Display Bluesky posts, profiles, feeds and conversations on your WordPress site. Five blocks, no Bluesky account required.","assets_banners_color":"0c6fd4","last_updated":"2026-11-06 21:13:57","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/theghostlab.io\/friendly-skies","header_author_uri":"https:\/\/theghostlab.io","rating":0,"author_block_rating":0,"active_installs":0,"downloads":37,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"ghostlabs","date":"2026-11-06 21:13:57","revision":3788721}},"upgrade_notice":{"1.0.1":"<p>Counts of one now read in the singular. The cache duration filters take the ghostlabs_ prefix; the old names still work.<\/p>","1.0.0":"<p>First release. Five blocks that show Bluesky posts, feeds, conversations, profiles and follow buttons, rendered on your server. Requires WordPress 7.1 and PHP 8.1.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3788720,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3788720,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256},"icon.svg":{"filename":"icon.svg","revision":3788720,"resolution":false,"location":"assets","locale":false}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3788720,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3788720,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":{"ghostlabs\/friendly-skies-feed":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ghostlabs\/friendly-skies-feed","version":"0.1.0","title":"Friendly Skies: Feed","category":"embed","icon":"rss","description":"Display a Bluesky account\u2019s posts as a list or a grid.","keywords":["bluesky","feed","social","timeline","bsky","atproto"],"attributes":{"align":{"type":"string","default":""},"sourceType":{"type":"string","default":"user"},"actor":{"type":"string","default":""},"layout":{"type":"string","default":"list"},"theme":{"type":"string","default":"system"},"maxPosts":{"type":"integer","default":10},"includeReplies":{"type":"boolean","default":false},"includeReposts":{"type":"boolean","default":true},"contentFilter":{"type":"string","default":"all"},"pinnedPostUri":{"type":"string","default":""},"showEngagement":{"type":"boolean","default":true},"showTimestamps":{"type":"boolean","default":true},"truncatePosts":{"type":"boolean","default":true},"truncateLength":{"type":"integer","default":280},"gridColumns":{"type":"integer","default":3}},"supports":{"html":false},"textdomain":"ghostlabs-friendly-skies","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":["file:.\/style-index.css","ghostlabs-fs-global"],"render":"file:.\/render.php","viewScript":"file:.\/view.js"},"ghostlabs\/friendly-skies-follow-button":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ghostlabs\/friendly-skies-follow-button","version":"0.1.0","title":"Friendly Skies: Follow Button","category":"embed","icon":"heart","description":"A styled button linking to a Bluesky profile with optional follower count.","keywords":["bluesky","follow","social","button","bsky"],"attributes":{"handle":{"type":"string","default":""},"theme":{"type":"string","default":"system"},"buttonStyle":{"type":"string","default":"primary"},"showFollowerCount":{"type":"boolean","default":false},"label":{"type":"string","default":"Follow on Bluesky"},"size":{"type":"string","default":"medium"},"showIcon":{"type":"boolean","default":true}},"supports":{"html":false},"textdomain":"ghostlabs-friendly-skies","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":["file:.\/style-index.css","ghostlabs-fs-global"],"render":"file:.\/render.php"},"ghostlabs\/friendly-skies-embed":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ghostlabs\/friendly-skies-embed","version":"0.1.0","title":"Friendly Skies: Bluesky Post","category":"embed","icon":"format-status","description":"Embed a Bluesky post.","keywords":["bluesky","social","embed","post","bsky"],"attributes":{"url":{"type":"string","default":""},"theme":{"type":"string","default":"system"},"displayMode":{"type":"string","default":"card"},"showEngagement":{"type":"boolean","default":true},"showTimestamp":{"type":"boolean","default":true},"clickBehavior":{"type":"string","default":"new-tab"}},"supports":{"html":false},"textdomain":"ghostlabs-friendly-skies","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":["file:.\/style-index.css","ghostlabs-fs-global"],"render":"file:.\/render.php"},"ghostlabs\/friendly-skies-profile":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ghostlabs\/friendly-skies-profile","version":"0.1.0","title":"Friendly Skies: Profile Card","category":"embed","icon":"id","description":"Display a Bluesky profile card.","keywords":["bluesky","profile","social","card","bsky"],"attributes":{"handle":{"type":"string","default":""},"theme":{"type":"string","default":"system"},"cardStyle":{"type":"string","default":"full"},"showStats":{"type":"boolean","default":true},"showBio":{"type":"boolean","default":true},"ctaButton":{"type":"string","default":"none"}},"supports":{"align":["wide","full"],"html":false},"textdomain":"ghostlabs-friendly-skies","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":["file:.\/style-index.css","ghostlabs-fs-global"],"render":"file:.\/render.php"},"ghostlabs\/friendly-skies-thread":{"$schema":"https:\/\/schemas.wp.org\/trunk\/block.json","apiVersion":3,"name":"ghostlabs\/friendly-skies-thread","version":"0.1.0","title":"Friendly Skies: Threaded","category":"embed","icon":"format-chat","description":"Display a Bluesky conversation in threaded form.","keywords":["bluesky","thread","replies","conversation","bsky"],"attributes":{"url":{"type":"string","default":""},"theme":{"type":"string","default":"system"},"depth":{"type":"integer","default":5},"showOnlyOpReplies":{"type":"boolean","default":false},"showEngagement":{"type":"boolean","default":true},"collapseThreshold":{"type":"integer","default":10},"clickBehavior":{"type":"string","default":"open"}},"supports":{"align":["wide","full"],"html":false},"textdomain":"ghostlabs-friendly-skies","editorScript":"file:.\/index.js","editorStyle":"file:.\/index.css","style":["file:.\/style-index.css","ghostlabs-fs-global"],"render":"file:.\/render.php","viewScript":"file:.\/view.js"}},"tagged_versions":["1.0.1"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3788720,"resolution":"1","location":"assets","locale":"","width":2488,"height":2244},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3788720,"resolution":"2","location":"assets","locale":"","width":2560,"height":1600},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3788720,"resolution":"3","location":"assets","locale":"","width":2560,"height":1600},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3788720,"resolution":"4","location":"assets","locale":"","width":2560,"height":1600},"screenshot-5.png":{"filename":"screenshot-5.png","revision":3788720,"resolution":"5","location":"assets","locale":"","width":2560,"height":1600}},"screenshots":{"1":"All five blocks on one page.","2":"The Threaded block rendering a real conversation, with reply indentation.","3":"The block inserter, searched for \"bluesky\".","4":"The Feed block in its List layout, showing one Bluesky account's posts.","5":"The same feed in the Grid layout. Pro adds the Masonry, Carousel, Highlight and Ticker layouts, and Search, Custom Feed and Bluesky list sources."}},"plugin_section":[],"plugin_tags":[223780,223781,246055,230,2877],"plugin_category":[56],"plugin_contributors":[242362],"plugin_business_model":[],"class_list":["post-396666","plugin","type-plugin","status-publish","hentry","plugin_tags-atproto","plugin_tags-bluesky","plugin_tags-bluesky-feed","plugin_tags-embed","plugin_tags-social-feed","plugin_category-social-and-sharing","plugin_contributors-ghostlabs","plugin_committers-ghostlabs"],"banners":{"banner":"https:\/\/ps.w.org\/ghostlabs-friendly-skies\/assets\/banner-772x250.png?rev=3788720","banner_2x":"https:\/\/ps.w.org\/ghostlabs-friendly-skies\/assets\/banner-1544x500.png?rev=3788720","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":"https:\/\/ps.w.org\/ghostlabs-friendly-skies\/assets\/icon.svg?rev=3788720","icon":"https:\/\/ps.w.org\/ghostlabs-friendly-skies\/assets\/icon.svg?rev=3788720","icon_2x":false,"generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/ghostlabs-friendly-skies\/assets\/screenshot-1.png?rev=3788720","caption":"All five blocks on one page."},{"src":"https:\/\/ps.w.org\/ghostlabs-friendly-skies\/assets\/screenshot-2.png?rev=3788720","caption":"The Threaded block rendering a real conversation, with reply indentation."},{"src":"https:\/\/ps.w.org\/ghostlabs-friendly-skies\/assets\/screenshot-3.png?rev=3788720","caption":"The block inserter, searched for \"bluesky\"."},{"src":"https:\/\/ps.w.org\/ghostlabs-friendly-skies\/assets\/screenshot-4.png?rev=3788720","caption":"The Feed block in its List layout, showing one Bluesky account's posts."},{"src":"https:\/\/ps.w.org\/ghostlabs-friendly-skies\/assets\/screenshot-5.png?rev=3788720","caption":"The same feed in the Grid layout. Pro adds the Masonry, Carousel, Highlight and Ticker layouts, and Search, Custom Feed and Bluesky list sources."}],"raw_content":"<!--section=description-->\n<p>Friendly Skies puts Bluesky on your WordPress site as five native blocks. Place them\nwhere you want them \u2014 in a post, a template part, a sidebar \u2014 and they render on your server as\nordinary HTML.<\/p>\n\n<h4>The five blocks<\/h4>\n\n<ul>\n<li><strong>Post<\/strong> \u2014 paste a Bluesky post URL. Author, text, images, video, quote posts, link cards and\nengagement counts, rendered as HTML.<\/li>\n<li><strong>Feed<\/strong> \u2014 a stream of posts, in a List or Grid layout.<\/li>\n<li><strong>Threaded<\/strong> \u2014 a whole conversation, with reply indentation, a depth limit and a collapse\nthreshold.<\/li>\n<li><strong>Profile Card<\/strong> \u2014 avatar, banner, bio and stats, in Full, Compact or Minimal styles.<\/li>\n<li><strong>Follow Button<\/strong> \u2014 a styled link to a profile, with an optional live follower count.<\/li>\n<\/ul>\n\n<h4>No account, no app password<\/h4>\n\n<p>Everything above reads Bluesky's public API. There is nothing to connect and no credentials to\nstore \u2014 no account, no app password, no key of any kind.<\/p>\n\n<p>The settings screen has one option on it: how long a response from Bluesky is reused before it\nis fetched again. Everything else a block does is configured on the block itself.<\/p>\n\n<h4>Rendered on your server, not in your visitor's browser<\/h4>\n\n<p>Every block is server-rendered and cached. Your readers load your HTML from your host. When\nBluesky can't be reached, a block shows the last copy it fetched rather than an empty space.<\/p>\n\n<h4>Built to be read<\/h4>\n\n<p>Contrast meets WCAG AA, every control is reachable from the keyboard, animation respects\n    prefers-reduced-motion, and all output is escaped. None of that is a paid feature.<\/p>\n\n<h3>Friendly Skies Pro<\/h3>\n\n<p>Everything above is free and stays free. Pro adds two things:<\/p>\n\n<ul>\n<li><strong>More ways to show other people's posts<\/strong> \u2014 Search, Custom Feed and Bluesky list sources, and\nthe Masonry, Carousel, Highlight and Ticker layouts.<\/li>\n<li><strong>Import from Bluesky<\/strong> \u2014 bring your Bluesky posts into WordPress as real posts or a custom\npost type, on a schedule, with filters and two import styles. The Theme Native style (the\ndefault) writes each post's text into WordPress; the Bluesky Embed Block style stores a link to\nthe post and shows it from Bluesky. Photos from your own posts are copied into your Media\nLibrary, and the first becomes the featured image; photos in reposts stay on Bluesky.<\/li>\n<\/ul>\n\n<p>Pro is a separate plugin. You download it from your GhostLabs account, upload it, and activate\nit; it then switches this plugin off. Nothing is copied or migrated, because both editions store\ntheir settings in the same place. The FAQ below walks through it.<\/p>\n\n<h3>External services<\/h3>\n\n<p>Friendly Skies contacts one outside service, and never just because the plugin was installed or\nactivated.<\/p>\n\n<p><strong>Bluesky (bsky.app \/ public.api.bsky.app)<\/strong> \u2014 every block reads Bluesky's public API to\nrender what you asked it to show. The request contains the handle, post URL, feed or list you\nput in the block, and nothing about your site or your visitors. It is made by your server, not\nby your reader's browser, and the response is cached. This happens whenever a page containing a\nblock is rendered, and whenever a block is previewed in the block editor (your server renders\nthe preview the same way), if the cache has expired. The Follow button contacts Bluesky only when\nit is set to show a follower count, and otherwise contacts nothing.<\/p>\n\n<p>Images are fetched from Bluesky itself. Avatars, profile banners, post\nphotos, and link-card and video thumbnails are shown from Bluesky's own image addresses, so when a\npage with a block loads, your reader's browser requests those images from Bluesky, which receives\nthe reader's IP address, browser details and the site they are on, like any image request. The\nsame is true of your own browser while a block is previewed in the editor. No Bluesky script,\niframe or tracking code is added to the page or the editor.<\/p>\n\n<p>Bluesky's terms of service: https:\/\/bsky.social\/about\/support\/tos\nBluesky's privacy policy: https:\/\/bsky.social\/about\/support\/privacy-policy<\/p>\n\n<p><strong>Links to GhostLabs \u2014 not a service.<\/strong> The plugin links to two GhostLabs sites from wp-admin and\nthe block editor. It never contacts either one: nothing is requested from them in the background,\nand the plugin sends them nothing.<\/p>\n\n<ul>\n<li><strong>https:\/\/theghostlab.io<\/strong> \u2014 GhostLabs' site, including Friendly Skies Pro's product page.<\/li>\n<li><strong>https:\/\/enter.theghostlab.io\/account<\/strong> \u2014 your GhostLabs account, where Friendly Skies Pro is\ndownloaded after you buy it. It is linked from <strong>Settings \u2192 Friendly Skies \u2192 Pro<\/strong>, under\n<strong>Already own Friendly Skies Pro?<\/strong>, and opens in a new tab.<\/li>\n<\/ul>\n\n<p>Following either link is an ordinary visit to that site in your browser.<\/p>\n\n<p>GhostLabs terms of service: https:\/\/theghostlab.io\/terms-of-service\nGhostLabs privacy policy: https:\/\/theghostlab.io\/privacy-policy<\/p>\n\n<h3>Source code<\/h3>\n\n<p>The complete source of this plugin, including the block sources its compiled assets are built\nfrom, is published at:<\/p>\n\n<p>https:\/\/github.com\/theghostlab\/wp-ghostlabs-friendly-skies<\/p>\n\n<p>The compiled JavaScript and CSS in this release are readable, not minified. In that repository,\n    pnpm install --frozen-lockfile &amp;&amp; pnpm run build rebuilds them. Later releases may ship the same\nsources minified, which <code>GHOSTLABS_MINIFY=1 pnpm run build<\/code> produces.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Install through <strong>Plugins \u2192 Add Plugin<\/strong>, or upload the plugin folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate it through the <strong>Plugins<\/strong> screen.<\/li>\n<li>In a post, a page or a template, open the block inserter and search for \"bluesky\". Choose one of\nthe five Friendly Skies blocks.<\/li>\n<li>Give it what it asks for: a handle for the Feed, Profile Card and Follow Button blocks, or a\npost URL for the Post and Threaded blocks. There is nothing to connect and no account to sign in to.<\/li>\n<li>Optional: <strong>Settings \u2192 Friendly Skies<\/strong> sets how long a response from Bluesky is reused before it\nis fetched again.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"can%20friendly%20skies%20post%20my%20wordpress%20articles%20to%20bluesky%3F\"><h3>Can Friendly Skies post my WordPress articles to Bluesky?<\/h3><\/dt>\n<dd><p>No. Friendly Skies reads from Bluesky and never writes to it \u2014 it has no permission to publish\non your behalf and no code that could. If you want to announce your posts on Bluesky, look at\nAutoblue or ATmosphere, which are built for that direction.<\/p><\/dd>\n<dt id=\"do%20i%20need%20a%20bluesky%20account%3F\"><h3>Do I need a Bluesky account?<\/h3><\/dt>\n<dd><p>No. The free blocks read public data, so you can display any public account, in threaded form or\nas a post without connecting anything.<\/p><\/dd>\n<dt id=\"does%20this%20load%20anything%20from%20bluesky%20in%20my%20visitor%27s%20browser%3F\"><h3>Does this load anything from Bluesky in my visitor's browser?<\/h3><\/dt>\n<dd><p>Images, yes. Scripts, no. Blocks are rendered on your server and cached, and no Bluesky script,\niframe or tracking code is added to the page. The images in a block \u2014 avatars, profile banners,\npost photos, and link-card and video thumbnails \u2014 are shown from Bluesky's own image addresses,\nso your reader's browser loads those from Bluesky.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20bluesky%20is%20down%3F\"><h3>What happens when Bluesky is down?<\/h3><\/dt>\n<dd><p>A block shows the last copy it fetched from Bluesky, for up to a week, and stops asking Bluesky\nfor a couple of minutes at a time, so an outage doesn't slow every page. If a block has no copy,\nit shows a short message in its place rather than an empty space, and a Post or Profile Card\nblock adds a link to it on Bluesky. A Follow Button still shows, without its follower count.<\/p><\/dd>\n<dt id=\"is%20this%20an%20official%20bluesky%20plugin%3F\"><h3>Is this an official Bluesky plugin?<\/h3><\/dt>\n<dd><p>No. Friendly Skies is an independent plugin that uses Bluesky's public API. It is not\naffiliated with or endorsed by Bluesky.<\/p><\/dd>\n<dt id=\"which%20layouts%20and%20sources%20are%20free%3F\"><h3>Which layouts and sources are free?<\/h3><\/dt>\n<dd><p>The List and Grid layouts, showing any one Bluesky account's posts. Search, Custom Feed and Bluesky list\nsources, and the Masonry, Carousel, Highlight and Ticker layouts, are Pro.<\/p><\/dd>\n<dt id=\"i%20bought%20pro.%20how%20do%20i%20switch%3F\"><h3>I bought Pro. How do I switch?<\/h3><\/dt>\n<dd><p>Friendly Skies Pro is a separate plugin. Once you have bought it:<\/p>\n\n<ol>\n<li>Download it from your GhostLabs account. <strong>Settings \u2192 Friendly Skies \u2192 Pro<\/strong> links there under\n<strong>Already own Friendly Skies Pro?<\/strong><\/li>\n<li>Upload it to your site from the Plugins screen, with the <strong>Upload Plugin<\/strong> button.<\/li>\n<li>Activate it, then enter the license key from your receipt email on its <strong>Licenses<\/strong> tab.<\/li>\n<\/ol>\n\n<p>When Friendly Skies Pro starts, it deactivates this plugin. Every block on every page keeps\nworking through the switch, because both plugins use the same stored settings and the same cached\nresponses. Pro sets its own cache timings, so the cache duration chosen in this plugin no longer\napplies. This plugin is left installed but inactive, and you can delete it whenever you like.<\/p>\n\n<p>On a multisite network, a network administrator uploads the plugin.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20my%20theme%3F\"><h3>Does it work with my theme?<\/h3><\/dt>\n<dd><p>Yes. Blocks inherit your theme's typography and colours where sensible, offer light, dark and\nsystem schemes, and are styled with CSS custom properties you can override.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fixed: a count of one reads in the singular (\"1 reply\", \"1 follower\", \"Show 1 more reply\").<\/li>\n<li>Changed: the cache duration filters are now <code>ghostlabs_friendly_skies_cache_ttl_{$type}<\/code>. The old <code>friendly_skies_cache_ttl_{$type}<\/code> names still work and are deprecated.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release.<\/li>\n<\/ul>","raw_excerpt":"Five blocks for Bluesky: feeds, posts, conversations, profiles and follow buttons. Server-rendered, cached, no account needed.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/396666","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=396666"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ghostlabs"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=396666"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=396666"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=396666"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=396666"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=396666"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=396666"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}