{"id":9089,"date":"2026-01-29T11:37:59","date_gmt":"2026-01-29T19:37:59","guid":{"rendered":"https:\/\/visualgdb.com\/w\/?p=9089"},"modified":"2026-01-29T19:40:43","modified_gmt":"2026-01-30T03:40:43","slug":"refactoring-existing-code-with-ai","status":"publish","type":"post","link":"https:\/\/visualgdb.com\/tutorials\/ai\/thermostat\/01-refactoring\/","title":{"rendered":"Refactoring Existing Code with AI"},"content":{"rendered":"<p>This tutorial shows how to use AI edits to quickly reorganize code from existing projects to make it more structured. Using short prompts and faster models with near-instant results eliminates most of the repetitive work, while still giving you full control over the result.<\/p>\n<p>This is the first tutorial in the series where we are using AI to turn a third-party <a href=\"https:\/\/gitlab.com\/slimhazard\/picow-http-example\">open-source HTTP server for Raspberry Pi Pico<\/a> into a smart thermostat. In this tutorial we will use AI to quickly move temperature-related logic into a separate struct, so we can later add automatic temperature control to it.<\/p>\n<ol>\n<li>Start by cloning <a href=\"https:\/\/gitlab.com\/sysprogs-tutorials\/picow-http-example\">our fork of the HTTP server<\/a> that fixes build issues on Windows:\n<pre>git clone https:\/\/gitlab.com\/sysprogs-tutorials\/picow-http-example -b before_edits --recursive<\/pre>\n<p>Make sure you are checking out the <strong>before_edits<\/strong> tag that does not have the AI-driven edits yet.<\/li>\n<li>Open the project in VisualGDB and try building it. If it fails due to missing Python dependencies, edit the <strong>PYTHON_FOR_GPERF<\/strong> variable in <a href=\"https:\/\/gitlab.com\/sysprogs-tutorials\/picow_http\/-\/blob\/master\/CMakeLists.txt?ref_type=heads\">lib\\picow-http\\CMakeLists.txt<\/a> to point to a Python installation that contains <strong>brotli<\/strong>, <strong>pyyaml<\/strong>, <strong>jinja2<\/strong> and <strong>cryptography<\/strong> packages:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/01-cmake-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9091\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/01-cmake-1.png\" alt=\"\" width=\"1193\" height=\"789\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/01-cmake-1.png 1193w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/01-cmake-1-300x198.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/01-cmake-1-1024x677.png 1024w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/01-cmake-1-768x508.png 768w\" sizes=\"(max-width: 1193px) 100vw, 1193px\" \/><\/a><\/li>\n<li>The sample server will try to connect to an existing Wi-Fi network. You can use VisualGDB Project Properties to update the SSID and password:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/02-net.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9092\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/02-net.png\" alt=\"\" width=\"821\" height=\"545\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/02-net.png 821w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/02-net-300x199.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/02-net-768x510.png 768w\" sizes=\"(max-width: 821px) 100vw, 821px\" \/><\/a><\/li>\n<li>Build the project again and press F5 to start debugging it. The server should connect to the Wi-Fi network, and opening its IP address in the browser should show the sample page:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/03-server.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9093\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/03-server.png\" alt=\"\" width=\"779\" height=\"596\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/03-server.png 779w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/03-server-300x230.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/03-server-768x588.png 768w\" sizes=\"(max-width: 779px) 100vw, 779px\" \/><\/a>Note that the example server only works with HTTP, not HTTPS, so you need to explicitly specify it in the browser (e.g. <strong>http:\/\/192.168.137.111\/<\/strong>).<\/li>\n<li>We will now begin modifying the example to work as a simple thermostat. To keep the code organized, all thermostat-related variables will be contained inside the <strong>Thermostat<\/strong> struct, and all thermostat-related functions will take a pointer to it (e.g. <strong>Thermostat_SetTargetTemperature(&amp;g_Thermostat, 123)<\/strong>).\u00a0Use the <strong>Add-&gt;New File<\/strong> command in Solution Explorer to add two files to the <strong>logic<\/strong> subdirectory:<br \/>\n<strong>ThermostatController.h<\/strong>:<\/p>\n<pre>#pragma once\r\nstruct ThermostatController\r\n{\r\n};\r\nextern struct ThermostatController g_Thermostat;<\/pre>\n<p><strong>ThermostatController.c:<\/strong><\/p>\n<pre>#include \"ThermostatController.h\"\r\nstruct ThermostatController g_Thermostat;<\/pre>\n<\/li>\n<li>The sample project already contains code for reading the temperature value, so it would make sense to reuse it for the thermostat. If you search the code for &#8220;temperature&#8221;, you can quickly find the <strong>get_temp()<\/strong> function that recomputes the value from the <strong>temp_adc_raw<\/strong> variable:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/04-get_temp-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9097\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/04-get_temp-1.png\" alt=\"\" width=\"1193\" height=\"789\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/04-get_temp-1.png 1193w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/04-get_temp-1-300x198.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/04-get_temp-1-1024x677.png 1024w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/04-get_temp-1-768x508.png 768w\" sizes=\"(max-width: 1193px) 100vw, 1193px\" \/><\/a><\/li>\n<li>Let&#8217;s move the temperature-related logic inside <strong>g_Thermostat. <\/strong>Instead of dealing with the value and the critical section directly, <strong>get_temp()<\/strong> should simply call <strong>Thermostat_GetRawValue(&amp;g_Thermostat)<\/strong> and let the thermostat logic handle the locking and storing. Doing this by hand would require several small annoying changes:\n<ul>\n<li>Replacing the <strong>temp_critsec<\/strong> and <strong>temp_adc_raw<\/strong> variables with fields in <strong>struct Thermostat<\/strong><\/li>\n<li>Creating declarations for <strong>Thermostat_GetRawValue()<\/strong> and <strong>Thermostat_Init()<\/strong> in Thermostat.h<\/li>\n<li>Including <strong>Thermostat.h<\/strong> from <strong>tasks.c<\/strong><\/li>\n<li>Ideally, including headers defining <strong>critical_section_t<\/strong> and <strong>uint16_t<\/strong> from Thermostat.h where the fields got moved<\/li>\n<li>Creating <strong>Thermostat_GetRawValue()<\/strong> in <strong>Thermostat.c<\/strong> and moving locking code there<\/li>\n<li>Finding <strong>critical_section_init()<\/strong> call in <strong>main(), <\/strong>moving it into <strong>Thermostat_Init()<\/strong> and calling it from main()<\/li>\n<\/ul>\n<p>AI can do all of this with a very concise prompt, so click on the pencil icon above <strong>get_temp()<\/strong> and enter the following prompt:<\/p>\n<pre>temp_adc_raw -&gt; g_Thermostat.RawTemperature. Also move critsec. Add Thermostat_Init(&amp;g_Thermostat) and Thermostat_GetRawValue()<\/pre>\n<p><a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/05-edit.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9098\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/05-edit.png\" alt=\"\" width=\"1193\" height=\"784\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/05-edit.png 1193w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/05-edit-300x197.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/05-edit-1024x673.png 1024w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/05-edit-768x505.png 768w\" sizes=\"(max-width: 1193px) 100vw, 1193px\" \/><\/a><\/li>\n<li>Pick a language model in the selector and click the <strong>Go<\/strong> button. Depending on the model you selected, the refactoring should take 10-30 seconds:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/06-edited.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9099\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/06-edited.png\" alt=\"\" width=\"1189\" height=\"785\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/06-edited.png 1189w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/06-edited-300x198.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/06-edited-1024x676.png 1024w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/06-edited-768x507.png 768w\" sizes=\"(max-width: 1189px) 100vw, 1189px\" \/><\/a>High-end models (GLM\/Claude) typically get everything from the first try. Lower-end models (e.g. GPT-OSS) are more likely to confuse the details (e.g. put function bodies in <strong>tasks.c<\/strong> and not <strong>Thermostat.c<\/strong>), but they produce results 3-5x faster.<\/li>\n<li>VisualGDB provides commands for quickly jumping between suggested edits. We advise setting keyboard shortcuts (e.g. <strong>Ctrl+Shift+Alt+Enter<\/strong> and <strong>Ctrl+Shift+Alt+Backspace<\/strong>) for the <strong>AcceptSelectedChanges<\/strong>\/<strong>RejectSelectedChanges<\/strong> commands via <strong>Tools-&gt;Customize-&gt;Keyboard<\/strong>:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/05a-keys.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9100\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/05a-keys.png\" alt=\"\" width=\"826\" height=\"467\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/05a-keys.png 826w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/05a-keys-300x170.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/05a-keys-768x434.png 768w\" sizes=\"(max-width: 826px) 100vw, 826px\" \/><\/a><\/li>\n<li>Now you can quickly jump between the suggested edits by pressing these shortcuts. Note how <strong>temp_isr() <\/strong>still manually handles the critical section:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/07-critsec.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9101\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/07-critsec.png\" alt=\"\" width=\"1189\" height=\"785\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/07-critsec.png 1189w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/07-critsec-300x198.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/07-critsec-1024x676.png 1024w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/07-critsec-768x507.png 768w\" sizes=\"(max-width: 1189px) 100vw, 1189px\" \/><\/a><\/li>\n<li>It could make the code more structured if <strong>temp_isr()<\/strong> just passed the raw value to <strong>Thermostat_StoreRawValue()<\/strong> that handled the low-level\u00a0 details like the critical sections. Make sure you have not ended the editing session yet, and then simply use this prompt:\n<pre>+Thermostat_StoreRawTemperature()<\/pre>\n<p><a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/08-store.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9102\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/08-store.png\" alt=\"\" width=\"1189\" height=\"785\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/08-store.png 1189w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/08-store-300x198.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/08-store-1024x676.png 1024w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/08-store-768x507.png 768w\" sizes=\"(max-width: 1189px) 100vw, 1189px\" \/><\/a>Since we are continuing the same session, the AI will correctly infer the rest of the details, and will create a declaration\/definition for <strong>Thermostat_StoreRawValue(),<\/strong> and will call it. It also takes less time than the initial edit, as it only needs one pass.<\/li>\n<li>If the AI does get it wrong in the second step, you can always step back and refine the prompt, or choose a bigger\/slower model:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/back.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9103\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/back.png\" alt=\"\" width=\"912\" height=\"255\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/back.png 912w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/back-300x84.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/back-768x215.png 768w\" sizes=\"(max-width: 912px) 100vw, 912px\" \/><\/a>Once you are done reviewing the changes, click <strong>Accept All<\/strong> to finish the editing session, or simply save the file and VisualGDB will ask you if it should automatically accept the remaining changes.<\/li>\n<li>We will use the existing LED output to control the heater used by the thermostat. Search the code for &#8220;led&#8221; and locate the <strong>led_handler()<\/strong> function that uses <strong>cyw43_arch_gpio_put()<\/strong> to control the LED. Then, click the AI edit button in the top right of the editor:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/10-newedit.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9105\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/10-newedit.png\" alt=\"\" width=\"1189\" height=\"785\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/10-newedit.png 1189w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/10-newedit-300x198.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/10-newedit-1024x676.png 1024w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/10-newedit-768x507.png 768w\" sizes=\"(max-width: 1189px) 100vw, 1189px\" \/><\/a><\/li>\n<li>Use the following prompt:\n<pre>+Thermostat_SetOutputValue(g_Thermostat, bool) wrapping CYW43_WL_GPIO_LED_PIN<\/pre>\n<p><a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/11-edited.png\"><br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9106\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/11-edited.png\" alt=\"\" width=\"1189\" height=\"785\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/11-edited.png 1189w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/11-edited-300x198.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/11-edited-1024x676.png 1024w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/11-edited-768x507.png 768w\" sizes=\"(max-width: 1189px) 100vw, 1189px\" \/><\/a><\/li>\n<li>You can create similar wrapper for getting the output value of the thermostat by just executing the &#8220;+Get&#8221; prompt:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/13-get.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9108\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/13-get.png\" alt=\"\" width=\"1216\" height=\"767\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/13-get.png 1216w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/13-get-300x189.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/13-get-1024x646.png 1024w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/13-get-768x484.png 768w\" sizes=\"(max-width: 1216px) 100vw, 1216px\" \/><\/a><\/li>\n<li>Finally, since <strong>get_temp()<\/strong> is now just a wrapper around <strong>Thermostat_GetRawValue()<\/strong>, we can rename it to <strong>Thermostat_GetTemperatureK()<\/strong>, and move it <strong>ThermostatController.c<\/strong>. This can be done with a very simple prompt:\n<pre>Replace get_temp() with Thermostat_GetTemperatureK(&amp;g_Thermostat) in @ThermostatController.c<\/pre>\n<p><a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/14-renamed.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9109\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/14-renamed.png\" alt=\"\" width=\"1216\" height=\"767\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/14-renamed.png 1216w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/14-renamed-300x189.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/14-renamed-1024x646.png 1024w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/14-renamed-768x484.png 768w\" sizes=\"(max-width: 1216px) 100vw, 1216px\" \/><\/a>Note how a simple one-sentence prompt got the AI to update 5 different files, moving the declaration\/definition and updating the references.<\/li>\n<\/ol>\n<p>Now all the code related to temperature measurement and output control resides in a single module with clear structure:<a href=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/15-overview.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-9113\" src=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/15-overview.png\" alt=\"\" width=\"1216\" height=\"767\" srcset=\"https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/15-overview.png 1216w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/15-overview-300x189.png 300w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/15-overview-1024x646.png 1024w, https:\/\/visualgdb.com\/w\/wp-content\/uploads\/2026\/01\/15-overview-768x484.png 768w\" sizes=\"(max-width: 1216px) 100vw, 1216px\" \/><\/a>We can now proceed with adding the actual thermostat logic to it. Follow <a href=\"https:\/\/visualgdb.com\/tutorials\/ai\/thermostat\/02-newlogic\/\">this tutorial<\/a> for detailed step-by-step instructions.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This tutorial shows how to use AI edits to quickly reorganize code from existing projects to make it more structured.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[253],"tags":[254,133,231],"_links":{"self":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/9089"}],"collection":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/comments?post=9089"}],"version-history":[{"count":9,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/9089\/revisions"}],"predecessor-version":[{"id":9165,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/posts\/9089\/revisions\/9165"}],"wp:attachment":[{"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/media?parent=9089"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/categories?post=9089"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/visualgdb.com\/w\/wp-json\/wp\/v2\/tags?post=9089"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}