From b855f7625731ecf5aeaccc0d0f7c7aa0e5ec023f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 20 Sep 2023 21:57:06 +0000 Subject: [PATCH] deploy: 883090fff7a0dc98af01ee4a9626af1a5a2dd2c4 --- 404.html | 4 ++-- assets/js/3865d09d.68864eb6.js | 1 + assets/js/3865d09d.f3bb47dd.js | 1 - assets/js/64b0ce6a.3edddec3.js | 1 - assets/js/64b0ce6a.c832846e.js | 1 + ...5ec7539.f1917fc6.js => a5ec7539.d8c77f85.js} | 2 +- assets/js/eb3cd3e5.86988d4d.js | 1 - assets/js/eb3cd3e5.ca8ae6dd.js | 1 + assets/js/f39b3a0b.22bd28d3.js | 1 - assets/js/f39b3a0b.f455d83e.js | 1 + assets/js/ff93640d.190f2c21.js | 1 + assets/js/ff93640d.fe1f3c0e.js | 1 - ...ain.efaa5c73.js => runtime~main.a07c38c1.js} | 2 +- async-mode/index.html | 4 ++-- authentication/index.html | 4 ++-- branding/index.html | 6 +++--- callbacks/index.html | 4 ++-- commercial-license/index.html | 4 ++-- custom-title/index.html | 6 +++--- disable-filesystem-ota/index.html | 6 +++--- disable-firmware-ota/index.html | 6 +++--- examples/index.html | 4 ++-- firmware-version/index.html | 6 +++--- getting-started/index.html | 4 ++-- hardware-id/index.html | 6 +++--- index.html | 4 ++-- installation/index.html | 4 ++-- v3/img/branding.png | Bin 0 -> 45233 bytes v3/img/custom-title.png | Bin 0 -> 14565 bytes v3/img/dropzone.png | Bin 0 -> 30935 bytes v3/img/firmware-version.png | Bin 0 -> 29376 bytes v3/img/hardware-id.png | Bin 0 -> 29356 bytes v3/img/ota-modes.png | Bin 0 -> 56648 bytes 33 files changed, 43 insertions(+), 43 deletions(-) create mode 100644 assets/js/3865d09d.68864eb6.js delete mode 100644 assets/js/3865d09d.f3bb47dd.js delete mode 100644 assets/js/64b0ce6a.3edddec3.js create mode 100644 assets/js/64b0ce6a.c832846e.js rename assets/js/{a5ec7539.f1917fc6.js => a5ec7539.d8c77f85.js} (50%) delete mode 100644 assets/js/eb3cd3e5.86988d4d.js create mode 100644 assets/js/eb3cd3e5.ca8ae6dd.js delete mode 100644 assets/js/f39b3a0b.22bd28d3.js create mode 100644 assets/js/f39b3a0b.f455d83e.js create mode 100644 assets/js/ff93640d.190f2c21.js delete mode 100644 assets/js/ff93640d.fe1f3c0e.js rename assets/js/{runtime~main.efaa5c73.js => runtime~main.a07c38c1.js} (78%) create mode 100644 v3/img/branding.png create mode 100644 v3/img/custom-title.png create mode 100644 v3/img/dropzone.png create mode 100644 v3/img/firmware-version.png create mode 100644 v3/img/hardware-id.png create mode 100644 v3/img/ota-modes.png diff --git a/404.html b/404.html index ea914a1..4689dd0 100644 --- a/404.html +++ b/404.html @@ -7,13 +7,13 @@ - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/assets/js/3865d09d.68864eb6.js b/assets/js/3865d09d.68864eb6.js new file mode 100644 index 0000000..b4df8de --- /dev/null +++ b/assets/js/3865d09d.68864eb6.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkelegantota_docs=self.webpackChunkelegantota_docs||[]).push([[739],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=a.createContext({}),c=function(e){var t=a.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},m=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(r),m=n,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||i;return r?a.createElement(f,o(o({ref:t},p),{},{components:r})):a.createElement(f,o({ref:t},p))}));function f(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,o=new Array(i);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:n,o[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var a=r(7462),n=(r(7294),r(3905));const i={title:"Hardware ID",sidebar_label:"Hardware ID (Pro)",sidebar_position:10},o=void 0,l={unversionedId:"hardware-id",id:"hardware-id",title:"Hardware ID",description:"This feature is only available in ElegantOTA Pro.",source:"@site/docs/hardware-id.md",sourceDirName:".",slug:"/hardware-id",permalink:"/hardware-id",draft:!1,tags:[],version:"current",sidebarPosition:10,frontMatter:{title:"Hardware ID",sidebar_label:"Hardware ID (Pro)",sidebar_position:10},sidebar:"tutorialSidebar",previous:{title:"Disable Filesystem OTA (Pro)",permalink:"/disable-filesystem-ota"},next:{title:"Firmware Version (Pro)",permalink:"/firmware-version"}},s={},c=[{value:"Introduction",id:"introduction",level:2},{value:"Example Usage:",id:"example-usage",level:3},{value:"Best Practices",id:"best-practices",level:2}],p={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,n.kt)(u,(0,a.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("div",{className:"pro-label"},(0,n.kt)("i",null,(0,n.kt)("h4",{style:{fontWeight:"500",marginBottom:5}},"This feature is only available in ",(0,n.kt)("a",{target:"_blank",style:{color:"red"},href:"https://elegantota.pro"},"ElegantOTA Pro"),"."))),(0,n.kt)("br",null),(0,n.kt)("br",null),(0,n.kt)("img",{src:"/v3/img/hardware-id.png",alt:"Hardware ID",width:"400px"}),(0,n.kt)("br",null),(0,n.kt)("h2",{id:"introduction"},"Introduction"),(0,n.kt)("p",null,"The Hardware ID feature in ElegantOTA is shown on the ElegantOTA Pro portal. This ID should be a unique string that helps you easily identify the specific hardware device among others in your network."),(0,n.kt)("h3",{id:"example-usage"},"Example Usage:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},'#include \n\nvoid setup() {\n // Initialize your hardware and other configurations here\n\n // Set the Hardware ID\n ElegantOTA.setID("my_device_001");\n\n // Additional setup code\n}\n\nvoid loop() {\n // Your main loop code here\n}\n')),(0,n.kt)("p",null,"In the above example, the ",(0,n.kt)("inlineCode",{parentName:"p"},'ElegantOTA.setID("my_device_001");'),' function call assigns the Hardware ID "my_device_001" to the device.'),(0,n.kt)("h2",{id:"best-practices"},"Best Practices"),(0,n.kt)("p",null,"To make the most of the Hardware ID feature, consider the following best practices:"),(0,n.kt)("ul",null,(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Choose a Hardware ID that is unique to each device to avoid conflicts.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Avoid using special characters or spaces in the Hardware ID, as these might cause issues when used in network communication or file naming.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Document and keep track of the Hardware IDs for all your devices to ensure proper management.")),(0,n.kt)("li",{parentName:"ul"},(0,n.kt)("p",{parentName:"li"},"Ensure that the Hardware ID is set during the device's initialization phase, such as in the ",(0,n.kt)("inlineCode",{parentName:"p"},"setup()")," function, to guarantee that it is properly configured before any network or communication activities."))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/3865d09d.f3bb47dd.js b/assets/js/3865d09d.f3bb47dd.js deleted file mode 100644 index 6cfa70a..0000000 --- a/assets/js/3865d09d.f3bb47dd.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkelegantota_docs=self.webpackChunkelegantota_docs||[]).push([[739],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>f});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var s=n.createContext({}),c=function(e){var t=n.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(s.Provider,{value:t},e.children)},u="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},m=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,p=l(e,["components","mdxType","originalType","parentName"]),u=c(r),m=a,f=u["".concat(s,".").concat(m)]||u[m]||d[m]||i;return r?n.createElement(f,o(o({ref:t},p),{},{components:r})):n.createElement(f,o({ref:t},p))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[u]="string"==typeof e?e:a,o[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const i={title:"Hardware ID",sidebar_label:"Hardware ID (Pro)",sidebar_position:10},o=void 0,l={unversionedId:"hardware-id",id:"hardware-id",title:"Hardware ID",description:"This feature is only available in ElegantOTA Pro.",source:"@site/docs/hardware-id.md",sourceDirName:".",slug:"/hardware-id",permalink:"/hardware-id",draft:!1,tags:[],version:"current",sidebarPosition:10,frontMatter:{title:"Hardware ID",sidebar_label:"Hardware ID (Pro)",sidebar_position:10},sidebar:"tutorialSidebar",previous:{title:"Disable Filesystem OTA (Pro)",permalink:"/disable-filesystem-ota"},next:{title:"Firmware Version (Pro)",permalink:"/firmware-version"}},s={},c=[{value:"Introduction",id:"introduction",level:2},{value:"Example Usage:",id:"example-usage",level:3},{value:"Best Practices",id:"best-practices",level:2}],p={toc:c},u="wrapper";function d(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"pro-label"},(0,a.kt)("i",null,(0,a.kt)("h4",{style:{fontWeight:"500",marginBottom:5}},"This feature is only available in ",(0,a.kt)("a",{target:"_blank",style:{color:"red"},href:"https://elegantota.pro"},"ElegantOTA Pro"),"."))),(0,a.kt)("h2",{id:"introduction"},"Introduction"),(0,a.kt)("p",null,"The Hardware ID feature in ElegantOTA is shown on the ElegantOTA Pro portal. This ID should be a unique string that helps you easily identify the specific hardware device among others in your network."),(0,a.kt)("h3",{id:"example-usage"},"Example Usage:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cpp"},'#include \n\nvoid setup() {\n // Initialize your hardware and other configurations here\n\n // Set the Hardware ID\n ElegantOTA.setID("my_device_001");\n\n // Additional setup code\n}\n\nvoid loop() {\n // Your main loop code here\n}\n')),(0,a.kt)("p",null,"In the above example, the ",(0,a.kt)("inlineCode",{parentName:"p"},'ElegantOTA.setID("my_device_001");'),' function call assigns the Hardware ID "my_device_001" to the device.'),(0,a.kt)("h2",{id:"best-practices"},"Best Practices"),(0,a.kt)("p",null,"To make the most of the Hardware ID feature, consider the following best practices:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Choose a Hardware ID that is unique to each device to avoid conflicts.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Avoid using special characters or spaces in the Hardware ID, as these might cause issues when used in network communication or file naming.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Document and keep track of the Hardware IDs for all your devices to ensure proper management.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Ensure that the Hardware ID is set during the device's initialization phase, such as in the ",(0,a.kt)("inlineCode",{parentName:"p"},"setup()")," function, to guarantee that it is properly configured before any network or communication activities."))))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/64b0ce6a.3edddec3.js b/assets/js/64b0ce6a.3edddec3.js deleted file mode 100644 index 366ef7f..0000000 --- a/assets/js/64b0ce6a.3edddec3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkelegantota_docs=self.webpackChunkelegantota_docs||[]).push([[861],{3905:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>m});var a=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,a)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},d=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},g=a.forwardRef((function(e,t){var o=e.components,r=e.mdxType,n=e.originalType,p=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=s(o),g=r,m=u["".concat(p,".").concat(g)]||u[g]||c[g]||n;return o?a.createElement(m,i(i({ref:t},d),{},{components:o})):a.createElement(m,i({ref:t},d))}));function m(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=o.length,i=new Array(n);i[0]=g;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>n,metadata:()=>l,toc:()=>s});var a=o(7462),r=(o(7294),o(3905));const n={title:"Branding",sidebar_label:"Branding (Pro)",sidebar_position:13},i=void 0,l={unversionedId:"branding",id:"branding",title:"Branding",description:"This feature is only available in ElegantOTA Pro.",source:"@site/docs/branding.md",sourceDirName:".",slug:"/branding",permalink:"/branding",draft:!1,tags:[],version:"current",sidebarPosition:13,frontMatter:{title:"Branding",sidebar_label:"Branding (Pro)",sidebar_position:13},sidebar:"tutorialSidebar",previous:{title:"Custom Title (Pro)",permalink:"/custom-title"},next:{title:"Commercial License",permalink:"/commercial-license"}},p={},s=[{value:"Step 1: Prepare Your Logo",id:"step-1-prepare-your-logo",level:3},{value:"Step 2: Convert Logo Image to a Byte Array",id:"step-2-convert-logo-image-to-a-byte-array",level:3},{value:"Step 3: Modify logo.h",id:"step-3-modify-logoh",level:3},{value:"Step 4: Modify logo.cpp",id:"step-4-modify-logocpp",level:3},{value:"Step 5: Upload the Modified Library",id:"step-5-upload-the-modified-library",level:3},{value:"Using the Custom Logo",id:"using-the-custom-logo",level:2}],d={toc:s},u="wrapper";function c(e){let{components:t,...o}=e;return(0,r.kt)(u,(0,a.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"pro-label"},(0,r.kt)("i",null,(0,r.kt)("h4",{style:{fontWeight:"500",marginBottom:5}},"This feature is only available in ",(0,r.kt)("a",{target:"_blank",style:{color:"red"},href:"https://elegantota.pro"},"ElegantOTA Pro"),"."))),(0,r.kt)("br",null),(0,r.kt)("br",null),(0,r.kt)("h1",{id:"overview"},"Overview"),(0,r.kt)("p",null,"Branding in this context refers to the custom logo that is displayed on the ElegantOTA portal during the OTA update process. You can customize the logo by defining the logo image as a byte array in the ",(0,r.kt)("inlineCode",{parentName:"p"},"logo.h")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"logo.cpp")," files of the library's source code."),(0,r.kt)("p",null,"To add your custom logo on the ElegantOTA portal, follow these steps:"),(0,r.kt)("h3",{id:"step-1-prepare-your-logo"},"Step 1: Prepare Your Logo"),(0,r.kt)("p",null,"First, you need to create or obtain the logo image you want to display on the ElegantOTA portal during OTA updates. Ensure that the logo image is in a suitable format, such as a SVG (recommended) / PNG or JPG file and make sure your image is optimized & small in file size."),(0,r.kt)("h3",{id:"step-2-convert-logo-image-to-a-byte-array"},"Step 2: Convert Logo Image to a Byte Array"),(0,r.kt)("p",null,"To include the logo in your library, you'll need to convert the image into a byte array."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Go to ",(0,r.kt)("a",{parentName:"li",href:"https://file2raw.labrat.one/"},"File2Raw utility")," ( I created this utility a few years back for the purpose of converting files into byte array for C++ applications )."),(0,r.kt)("li",{parentName:"ol"},"Select your logo."),(0,r.kt)("li",{parentName:"ol"},'Select "Gzip Compress" & "Use PROGMEM (Arduino)".'),(0,r.kt)("li",{parentName:"ol"},'Click "Convert".')),(0,r.kt)("h3",{id:"step-3-modify-logoh"},"Step 3: Modify ",(0,r.kt)("inlineCode",{parentName:"h3"},"logo.h")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Open the ",(0,r.kt)("inlineCode",{parentName:"p"},"logo.h")," file in your ElegantOTA library source code.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Locate the ",(0,r.kt)("inlineCode",{parentName:"p"},"ELEGANTOTA_LOGO")," byte array declaration, which should look like this:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"extern const uint8_t ELEGANTOTA_LOGO[];\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Replace the length of the ",(0,r.kt)("inlineCode",{parentName:"p"},"ELEGANTOTA_LOGO")," array with your custom logo's byte array length.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Locate the ",(0,r.kt)("inlineCode",{parentName:"p"},"ELEGANTOTA_LOGO_MIME")," variable, which defines the MIME type of your logo image. By default, it is set to ",(0,r.kt)("inlineCode",{parentName:"p"},"image/png"),". If your logo is in a different format (e.g., JPEG), update the ",(0,r.kt)("inlineCode",{parentName:"p"},"ELEGANTOTA_LOGO_MIME")," variable to the appropriate MIME type.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Set ",(0,r.kt)("inlineCode",{parentName:"p"},"ELEGANTOTA_LOGO_WIDTH")," & ",(0,r.kt)("inlineCode",{parentName:"p"},"ELEGANTOTA_LOGO_HEIGHT")," according to your desired size which will be displayed on the webpage."))),(0,r.kt)("h3",{id:"step-4-modify-logocpp"},"Step 4: Modify ",(0,r.kt)("inlineCode",{parentName:"h3"},"logo.cpp")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Open the ",(0,r.kt)("inlineCode",{parentName:"p"},"logo.cpp")," file in your ElegantOTA library source code.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Replace the contents of the ",(0,r.kt)("inlineCode",{parentName:"p"},"ELEGANTOTA_LOGO")," array with your custom logo's byte array generated in File2Raw utility."))),(0,r.kt)("h3",{id:"step-5-upload-the-modified-library"},"Step 5: Upload the Modified Library"),(0,r.kt)("p",null,"After making these changes, compile and upload the modified ElegantOTA library to your device."),(0,r.kt)("h2",{id:"using-the-custom-logo"},"Using the Custom Logo"),(0,r.kt)("p",null,"Once you have uploaded the modified ElegantOTA library to your device, the custom logo will be displayed on the ElegantOTA Portal webpage during OTA updates."),(0,r.kt)("p",null,"That's it! You have successfully added custom branding to the ElegantOTA portal by defining the logo as a byte array in the ",(0,r.kt)("inlineCode",{parentName:"p"},"logo.h")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"logo.cpp")," files. Your logo will now be displayed on the ElegantOTA portal."),(0,r.kt)("p",null,"Please note that branding, including logos and images, may be subject to copyright and trademark laws. Ensure you have the necessary rights or permissions to use any branding elements in your project."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/64b0ce6a.c832846e.js b/assets/js/64b0ce6a.c832846e.js new file mode 100644 index 0000000..d084efa --- /dev/null +++ b/assets/js/64b0ce6a.c832846e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkelegantota_docs=self.webpackChunkelegantota_docs||[]).push([[861],{3905:(e,t,o)=>{o.d(t,{Zo:()=>d,kt:()=>m});var a=o(7294);function r(e,t,o){return t in e?Object.defineProperty(e,t,{value:o,enumerable:!0,configurable:!0,writable:!0}):e[t]=o,e}function n(e,t){var o=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),o.push.apply(o,a)}return o}function i(e){for(var t=1;t=0||(r[o]=e[o]);return r}(e,t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,o)&&(r[o]=e[o])}return r}var p=a.createContext({}),s=function(e){var t=a.useContext(p),o=t;return e&&(o="function"==typeof e?e(t):i(i({},t),e)),o},d=function(e){var t=s(e.components);return a.createElement(p.Provider,{value:t},e.children)},u="mdxType",c={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},g=a.forwardRef((function(e,t){var o=e.components,r=e.mdxType,n=e.originalType,p=e.parentName,d=l(e,["components","mdxType","originalType","parentName"]),u=s(o),g=r,m=u["".concat(p,".").concat(g)]||u[g]||c[g]||n;return o?a.createElement(m,i(i({ref:t},d),{},{components:o})):a.createElement(m,i({ref:t},d))}));function m(e,t){var o=arguments,r=t&&t.mdxType;if("string"==typeof e||r){var n=o.length,i=new Array(n);i[0]=g;var l={};for(var p in t)hasOwnProperty.call(t,p)&&(l[p]=t[p]);l.originalType=e,l[u]="string"==typeof e?e:r,i[1]=l;for(var s=2;s{o.r(t),o.d(t,{assets:()=>p,contentTitle:()=>i,default:()=>c,frontMatter:()=>n,metadata:()=>l,toc:()=>s});var a=o(7462),r=(o(7294),o(3905));const n={title:"Branding",sidebar_label:"Branding (Pro)",sidebar_position:13},i=void 0,l={unversionedId:"branding",id:"branding",title:"Branding",description:"This feature is only available in ElegantOTA Pro.",source:"@site/docs/branding.md",sourceDirName:".",slug:"/branding",permalink:"/branding",draft:!1,tags:[],version:"current",sidebarPosition:13,frontMatter:{title:"Branding",sidebar_label:"Branding (Pro)",sidebar_position:13},sidebar:"tutorialSidebar",previous:{title:"Custom Title (Pro)",permalink:"/custom-title"},next:{title:"Commercial License",permalink:"/commercial-license"}},p={},s=[{value:"Step 1: Prepare Your Logo",id:"step-1-prepare-your-logo",level:3},{value:"Step 2: Convert Logo Image to a Byte Array",id:"step-2-convert-logo-image-to-a-byte-array",level:3},{value:"Step 3: Modify logo.h",id:"step-3-modify-logoh",level:3},{value:"Step 4: Modify logo.cpp",id:"step-4-modify-logocpp",level:3},{value:"Step 5: Upload the Modified Library",id:"step-5-upload-the-modified-library",level:3},{value:"Using the Custom Logo",id:"using-the-custom-logo",level:2}],d={toc:s},u="wrapper";function c(e){let{components:t,...o}=e;return(0,r.kt)(u,(0,a.Z)({},d,o,{components:t,mdxType:"MDXLayout"}),(0,r.kt)("div",{className:"pro-label"},(0,r.kt)("i",null,(0,r.kt)("h4",{style:{fontWeight:"500",marginBottom:5}},"This feature is only available in ",(0,r.kt)("a",{target:"_blank",style:{color:"red"},href:"https://elegantota.pro"},"ElegantOTA Pro"),"."))),(0,r.kt)("br",null),(0,r.kt)("br",null),(0,r.kt)("img",{src:"/v3/img/branding.png",alt:"Branding",width:"400px"}),(0,r.kt)("br",null),(0,r.kt)("br",null),(0,r.kt)("h1",{id:"overview"},"Overview"),(0,r.kt)("p",null,"Branding in this context refers to the custom logo that is displayed on the ElegantOTA portal during the OTA update process. You can customize the logo by defining the logo image as a byte array in the ",(0,r.kt)("inlineCode",{parentName:"p"},"logo.h")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"logo.cpp")," files of the library's source code."),(0,r.kt)("p",null,"To add your custom logo on the ElegantOTA portal, follow these steps:"),(0,r.kt)("h3",{id:"step-1-prepare-your-logo"},"Step 1: Prepare Your Logo"),(0,r.kt)("p",null,"First, you need to create or obtain the logo image you want to display on the ElegantOTA portal during OTA updates. Ensure that the logo image is in a suitable format, such as a SVG (recommended) / PNG or JPG file and make sure your image is optimized & small in file size."),(0,r.kt)("h3",{id:"step-2-convert-logo-image-to-a-byte-array"},"Step 2: Convert Logo Image to a Byte Array"),(0,r.kt)("p",null,"To include the logo in your library, you'll need to convert the image into a byte array."),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},"Go to ",(0,r.kt)("a",{parentName:"li",href:"https://file2raw.labrat.one/"},"File2Raw utility")," ( I created this utility a few years back for the purpose of converting files into byte array for C++ applications )."),(0,r.kt)("li",{parentName:"ol"},"Select your logo."),(0,r.kt)("li",{parentName:"ol"},'Select "Gzip Compress" & "Use PROGMEM (Arduino)".'),(0,r.kt)("li",{parentName:"ol"},'Click "Convert".')),(0,r.kt)("h3",{id:"step-3-modify-logoh"},"Step 3: Modify ",(0,r.kt)("inlineCode",{parentName:"h3"},"logo.h")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Open the ",(0,r.kt)("inlineCode",{parentName:"p"},"logo.h")," file in your ElegantOTA library source code.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Locate the ",(0,r.kt)("inlineCode",{parentName:"p"},"ELEGANTOTA_LOGO")," byte array declaration, which should look like this:"),(0,r.kt)("pre",{parentName:"li"},(0,r.kt)("code",{parentName:"pre",className:"language-cpp"},"extern const uint8_t ELEGANTOTA_LOGO[];\n"))),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Replace the length of the ",(0,r.kt)("inlineCode",{parentName:"p"},"ELEGANTOTA_LOGO")," array with your custom logo's byte array length.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Locate the ",(0,r.kt)("inlineCode",{parentName:"p"},"ELEGANTOTA_LOGO_MIME")," variable, which defines the MIME type of your logo image. By default, it is set to ",(0,r.kt)("inlineCode",{parentName:"p"},"image/png"),". If your logo is in a different format (e.g., JPEG), update the ",(0,r.kt)("inlineCode",{parentName:"p"},"ELEGANTOTA_LOGO_MIME")," variable to the appropriate MIME type.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Set ",(0,r.kt)("inlineCode",{parentName:"p"},"ELEGANTOTA_LOGO_WIDTH")," & ",(0,r.kt)("inlineCode",{parentName:"p"},"ELEGANTOTA_LOGO_HEIGHT")," according to your desired size which will be displayed on the webpage."))),(0,r.kt)("h3",{id:"step-4-modify-logocpp"},"Step 4: Modify ",(0,r.kt)("inlineCode",{parentName:"h3"},"logo.cpp")),(0,r.kt)("ol",null,(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Open the ",(0,r.kt)("inlineCode",{parentName:"p"},"logo.cpp")," file in your ElegantOTA library source code.")),(0,r.kt)("li",{parentName:"ol"},(0,r.kt)("p",{parentName:"li"},"Replace the contents of the ",(0,r.kt)("inlineCode",{parentName:"p"},"ELEGANTOTA_LOGO")," array with your custom logo's byte array generated in File2Raw utility."))),(0,r.kt)("h3",{id:"step-5-upload-the-modified-library"},"Step 5: Upload the Modified Library"),(0,r.kt)("p",null,"After making these changes, compile and upload the modified ElegantOTA library to your device."),(0,r.kt)("h2",{id:"using-the-custom-logo"},"Using the Custom Logo"),(0,r.kt)("p",null,"Once you have uploaded the modified ElegantOTA library to your device, the custom logo will be displayed on the ElegantOTA Portal webpage during OTA updates."),(0,r.kt)("p",null,"That's it! You have successfully added custom branding to the ElegantOTA portal by defining the logo as a byte array in the ",(0,r.kt)("inlineCode",{parentName:"p"},"logo.h")," and ",(0,r.kt)("inlineCode",{parentName:"p"},"logo.cpp")," files. Your logo will now be displayed on the ElegantOTA portal."),(0,r.kt)("p",null,"Please note that branding, including logos and images, may be subject to copyright and trademark laws. Ensure you have the necessary rights or permissions to use any branding elements in your project."))}c.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/a5ec7539.f1917fc6.js b/assets/js/a5ec7539.d8c77f85.js similarity index 50% rename from assets/js/a5ec7539.f1917fc6.js rename to assets/js/a5ec7539.d8c77f85.js index 550dd8c..f9f1432 100644 --- a/assets/js/a5ec7539.f1917fc6.js +++ b/assets/js/a5ec7539.d8c77f85.js @@ -1 +1 @@ -"use strict";(self.webpackChunkelegantota_docs=self.webpackChunkelegantota_docs||[]).push([[818],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function o(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):o(o({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),c=p(n),m=a,f=c["".concat(s,".").concat(m)]||c[m]||d[m]||i;return n?r.createElement(f,o(o({ref:t},u),{},{components:n})):r.createElement(f,o({ref:t},u))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,o=new Array(i);o[0]=m;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[c]="string"==typeof e?e:a,o[1]=l;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>d,frontMatter:()=>i,metadata:()=>l,toc:()=>p});var r=n(7462),a=(n(7294),n(3905));const i={title:"Custom Title",sidebar_label:"Custom Title (Pro)",sidebar_position:12},o=void 0,l={unversionedId:"custom-title",id:"custom-title",title:"Custom Title",description:"This feature is only available in ElegantOTA Pro.",source:"@site/docs/custom-title.md",sourceDirName:".",slug:"/custom-title",permalink:"/custom-title",draft:!1,tags:[],version:"current",sidebarPosition:12,frontMatter:{title:"Custom Title",sidebar_label:"Custom Title (Pro)",sidebar_position:12},sidebar:"tutorialSidebar",previous:{title:"Firmware Version (Pro)",permalink:"/firmware-version"},next:{title:"Branding (Pro)",permalink:"/branding"}},s={},p=[{value:"Overview",id:"overview",level:2},{value:"Syntax",id:"syntax",level:2},{value:"Example",id:"example",level:2},{value:"Usage",id:"usage",level:2}],u={toc:p},c="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"pro-label"},(0,a.kt)("i",null,(0,a.kt)("h4",{style:{fontWeight:"500",marginBottom:5}},"This feature is only available in ",(0,a.kt)("a",{target:"_blank",style:{color:"red"},href:"https://elegantota.pro"},"ElegantOTA Pro"),"."))),(0,a.kt)("h2",{id:"overview"},"Overview"),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"setTitle()")," function is a method provided by the ElegantOTA Pro library. It is used to set the title of the OTA (Over-The-Air) update portal. This title is displayed at the top of the update portal web page, providing a user-friendly and customizable interface for managing firmware updates."),(0,a.kt)("h2",{id:"syntax"},"Syntax"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cpp"},"void setTitle(const char* title);\n")),(0,a.kt)("h2",{id:"example"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cpp"},'#include \n\nvoid setup() {\n // Initialize the ElegantOTA library\n ElegantOTA.begin();\n\n // Set the title of the OTA update portal\n ElegantOTA.setTitle("OTA Update - XYZ Inc");\n}\n\nvoid loop() {\n // Your main program loop\n}\n')),(0,a.kt)("h2",{id:"usage"},"Usage"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Include the ElegantOTA library in your Arduino sketch."),(0,a.kt)("li",{parentName:"ol"},"In the ",(0,a.kt)("inlineCode",{parentName:"li"},"setup()")," function of your sketch, initialize the ElegantOTA library using ",(0,a.kt)("inlineCode",{parentName:"li"},"ElegantOTA.begin()"),"."),(0,a.kt)("li",{parentName:"ol"},"Use the ",(0,a.kt)("inlineCode",{parentName:"li"},"setTitle()")," function to set a meaningful title for your OTA update portal. This title will be displayed at the top of the update portal web page when users access it."),(0,a.kt)("li",{parentName:"ol"},"Continue with the rest of your sketch's setup and loop functions.")))}d.isMDXComponent=!0}}]); \ No newline at end of file +"use strict";(self.webpackChunkelegantota_docs=self.webpackChunkelegantota_docs||[]).push([[818],{3905:(e,t,n)=>{n.d(t,{Zo:()=>u,kt:()=>f});var r=n(7294);function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function l(e){for(var t=1;t=0||(a[n]=e[n]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(r=0;r=0||Object.prototype.propertyIsEnumerable.call(e,n)&&(a[n]=e[n])}return a}var s=r.createContext({}),p=function(e){var t=r.useContext(s),n=t;return e&&(n="function"==typeof e?e(t):l(l({},t),e)),n},u=function(e){var t=p(e.components);return r.createElement(s.Provider,{value:t},e.children)},c="mdxType",d={inlineCode:"code",wrapper:function(e){var t=e.children;return r.createElement(r.Fragment,{},t)}},m=r.forwardRef((function(e,t){var n=e.components,a=e.mdxType,i=e.originalType,s=e.parentName,u=o(e,["components","mdxType","originalType","parentName"]),c=p(n),m=a,f=c["".concat(s,".").concat(m)]||c[m]||d[m]||i;return n?r.createElement(f,l(l({ref:t},u),{},{components:n})):r.createElement(f,l({ref:t},u))}));function f(e,t){var n=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=n.length,l=new Array(i);l[0]=m;var o={};for(var s in t)hasOwnProperty.call(t,s)&&(o[s]=t[s]);o.originalType=e,o[c]="string"==typeof e?e:a,l[1]=o;for(var p=2;p{n.r(t),n.d(t,{assets:()=>s,contentTitle:()=>l,default:()=>d,frontMatter:()=>i,metadata:()=>o,toc:()=>p});var r=n(7462),a=(n(7294),n(3905));const i={title:"Custom Title",sidebar_label:"Custom Title (Pro)",sidebar_position:12},l=void 0,o={unversionedId:"custom-title",id:"custom-title",title:"Custom Title",description:"This feature is only available in ElegantOTA Pro.",source:"@site/docs/custom-title.md",sourceDirName:".",slug:"/custom-title",permalink:"/custom-title",draft:!1,tags:[],version:"current",sidebarPosition:12,frontMatter:{title:"Custom Title",sidebar_label:"Custom Title (Pro)",sidebar_position:12},sidebar:"tutorialSidebar",previous:{title:"Firmware Version (Pro)",permalink:"/firmware-version"},next:{title:"Branding (Pro)",permalink:"/branding"}},s={},p=[{value:"Overview",id:"overview",level:2},{value:"Syntax",id:"syntax",level:2},{value:"Example",id:"example",level:2},{value:"Usage",id:"usage",level:2}],u={toc:p},c="wrapper";function d(e){let{components:t,...n}=e;return(0,a.kt)(c,(0,r.Z)({},u,n,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"pro-label"},(0,a.kt)("i",null,(0,a.kt)("h4",{style:{fontWeight:"500",marginBottom:5}},"This feature is only available in ",(0,a.kt)("a",{target:"_blank",style:{color:"red"},href:"https://elegantota.pro"},"ElegantOTA Pro"),"."))),(0,a.kt)("br",null),(0,a.kt)("img",{src:"/v3/img/custom-title.png",alt:"Custom Title",width:"400px"}),(0,a.kt)("br",null),(0,a.kt)("h2",{id:"overview"},"Overview"),(0,a.kt)("p",null,"The ",(0,a.kt)("inlineCode",{parentName:"p"},"setTitle()")," function is a method provided by the ElegantOTA Pro library. It is used to set the title of the OTA (Over-The-Air) update portal. This title is displayed at the top of the update portal web page, providing a user-friendly and customizable interface for managing firmware updates."),(0,a.kt)("h2",{id:"syntax"},"Syntax"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cpp"},"void setTitle(const char* title);\n")),(0,a.kt)("h2",{id:"example"},"Example"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cpp"},'#include \n\nvoid setup() {\n // Initialize the ElegantOTA library\n ElegantOTA.begin();\n\n // Set the title of the OTA update portal\n ElegantOTA.setTitle("OTA Update - XYZ Inc");\n}\n\nvoid loop() {\n // Your main program loop\n}\n')),(0,a.kt)("h2",{id:"usage"},"Usage"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},"Include the ElegantOTA library in your Arduino sketch."),(0,a.kt)("li",{parentName:"ol"},"In the ",(0,a.kt)("inlineCode",{parentName:"li"},"setup()")," function of your sketch, initialize the ElegantOTA library using ",(0,a.kt)("inlineCode",{parentName:"li"},"ElegantOTA.begin()"),"."),(0,a.kt)("li",{parentName:"ol"},"Use the ",(0,a.kt)("inlineCode",{parentName:"li"},"setTitle()")," function to set a meaningful title for your OTA update portal. This title will be displayed at the top of the update portal web page when users access it."),(0,a.kt)("li",{parentName:"ol"},"Continue with the rest of your sketch's setup and loop functions.")))}d.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/eb3cd3e5.86988d4d.js b/assets/js/eb3cd3e5.86988d4d.js deleted file mode 100644 index 3e06078..0000000 --- a/assets/js/eb3cd3e5.86988d4d.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkelegantota_docs=self.webpackChunkelegantota_docs||[]).push([[784],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),f=a,d=u["".concat(l,".").concat(f)]||u[f]||m[f]||i;return r?n.createElement(d,o(o({ref:t},p),{},{components:r})):n.createElement(d,o({ref:t},p))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,o[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const i={title:"Firmware Version",sidebar_label:"Firmware Version (Pro)",sidebar_position:11},o=void 0,s={unversionedId:"firmware-version",id:"firmware-version",title:"Firmware Version",description:"This feature is only available in ElegantOTA Pro.",source:"@site/docs/firmware-version.md",sourceDirName:".",slug:"/firmware-version",permalink:"/firmware-version",draft:!1,tags:[],version:"current",sidebarPosition:11,frontMatter:{title:"Firmware Version",sidebar_label:"Firmware Version (Pro)",sidebar_position:11},sidebar:"tutorialSidebar",previous:{title:"Hardware ID (Pro)",permalink:"/hardware-id"},next:{title:"Custom Title (Pro)",permalink:"/custom-title"}},l={},c=[{value:"Introduction",id:"introduction",level:2},{value:"Example Usage:",id:"example-usage",level:3},{value:"Use Cases",id:"use-cases",level:2},{value:"Best Practices",id:"best-practices",level:2}],p={toc:c},u="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"pro-label"},(0,a.kt)("i",null,(0,a.kt)("h4",{style:{fontWeight:"500",marginBottom:5}},"This feature is only available in ",(0,a.kt)("a",{target:"_blank",style:{color:"red"},href:"https://elegantota.pro"},"ElegantOTA Pro"),"."))),(0,a.kt)("h2",{id:"introduction"},"Introduction"),(0,a.kt)("p",null,"The Firmware Version feature in ElegantOTA allows you to specify and manage the version of the firmware running on your Internet of Things (IoT) devices. By setting a firmware version, you can easily track and control the software running on your devices, making it simpler to perform updates, monitor compatibility, and manage your IoT ecosystem effectively."),(0,a.kt)("p",null,"You can set the Firmware Version for your device using the ",(0,a.kt)("inlineCode",{parentName:"p"},'ElegantOTA.setFWVersion("version");')," function."),(0,a.kt)("h3",{id:"example-usage"},"Example Usage:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cpp"},'#include \n\nvoid setup() {\n // Initialize your hardware and other configurations here\n\n // Set the Firmware Version\n ElegantOTA.setFWVersion("v1.0.0");\n\n // Additional setup code\n}\n\nvoid loop() {\n // Your main loop code here\n}\n')),(0,a.kt)("p",null,"In the above example, the ",(0,a.kt)("inlineCode",{parentName:"p"},'ElegantOTA.setFWVersion("v1.0.0");'),' function call assigns the firmware version "v1.0.0" to the device.'),(0,a.kt)("h2",{id:"use-cases"},"Use Cases"),(0,a.kt)("p",null,"The Firmware Version feature can be beneficial in various scenarios:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Firmware Updates"),": When new firmware versions become available, the Firmware Version identifier helps you check if an update is necessary. It also allows you to verify that devices have received the correct update.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Compatibility"),": By knowing the firmware version of each device, you can ensure that all components of your IoT network are compatible. This is especially important when devices communicate or interact with each other.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Historical Tracking"),": You can maintain a history of firmware versions installed on each device, which can be useful for troubleshooting issues or understanding the evolution of your firmware.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Remote Diagnostics"),": When diagnosing issues remotely, having access to the firmware version can help you identify potential problems related to specific software releases."))),(0,a.kt)("h2",{id:"best-practices"},"Best Practices"),(0,a.kt)("p",null,"To make the most of the Firmware Version feature, consider the following best practices:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Follow a consistent versioning scheme for your firmware, such as Semantic Versioning (SemVer), to ensure clarity and compatibility tracking.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Set the firmware version during the device's initialization phase, such as in the ",(0,a.kt)("inlineCode",{parentName:"p"},"setup()")," function, to guarantee that it accurately reflects the installed firmware.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"When updating firmware, always ensure that the new version is correctly set using ",(0,a.kt)("inlineCode",{parentName:"p"},"ElegantOTA.setFWVersion()")," to maintain accurate version information."))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/eb3cd3e5.ca8ae6dd.js b/assets/js/eb3cd3e5.ca8ae6dd.js new file mode 100644 index 0000000..44c03e6 --- /dev/null +++ b/assets/js/eb3cd3e5.ca8ae6dd.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkelegantota_docs=self.webpackChunkelegantota_docs||[]).push([[784],{3905:(e,t,r)=>{r.d(t,{Zo:()=>p,kt:()=>d});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),c=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},p=function(e){var t=c(e.components);return n.createElement(l.Provider,{value:t},e.children)},u="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,i=e.originalType,l=e.parentName,p=s(e,["components","mdxType","originalType","parentName"]),u=c(r),f=a,d=u["".concat(l,".").concat(f)]||u[f]||m[f]||i;return r?n.createElement(d,o(o({ref:t},p),{},{components:r})):n.createElement(d,o({ref:t},p))}));function d(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var i=r.length,o=new Array(i);o[0]=f;var s={};for(var l in t)hasOwnProperty.call(t,l)&&(s[l]=t[l]);s.originalType=e,s[u]="string"==typeof e?e:a,o[1]=s;for(var c=2;c{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>s,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const i={title:"Firmware Version",sidebar_label:"Firmware Version (Pro)",sidebar_position:11},o=void 0,s={unversionedId:"firmware-version",id:"firmware-version",title:"Firmware Version",description:"This feature is only available in ElegantOTA Pro.",source:"@site/docs/firmware-version.md",sourceDirName:".",slug:"/firmware-version",permalink:"/firmware-version",draft:!1,tags:[],version:"current",sidebarPosition:11,frontMatter:{title:"Firmware Version",sidebar_label:"Firmware Version (Pro)",sidebar_position:11},sidebar:"tutorialSidebar",previous:{title:"Hardware ID (Pro)",permalink:"/hardware-id"},next:{title:"Custom Title (Pro)",permalink:"/custom-title"}},l={},c=[{value:"Introduction",id:"introduction",level:2},{value:"Example Usage:",id:"example-usage",level:3},{value:"Use Cases",id:"use-cases",level:2},{value:"Best Practices",id:"best-practices",level:2}],p={toc:c},u="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(u,(0,n.Z)({},p,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"pro-label"},(0,a.kt)("i",null,(0,a.kt)("h4",{style:{fontWeight:"500",marginBottom:5}},"This feature is only available in ",(0,a.kt)("a",{target:"_blank",style:{color:"red"},href:"https://elegantota.pro"},"ElegantOTA Pro"),"."))),(0,a.kt)("br",null),(0,a.kt)("br",null),(0,a.kt)("img",{src:"/v3/img/firmware-version.png",alt:"Firmware Version",width:"400px"}),(0,a.kt)("br",null),(0,a.kt)("h2",{id:"introduction"},"Introduction"),(0,a.kt)("p",null,"The Firmware Version feature in ElegantOTA allows you to specify and manage the version of the firmware running on your Internet of Things (IoT) devices. By setting a firmware version, you can easily track and control the software running on your devices, making it simpler to perform updates, monitor compatibility, and manage your IoT ecosystem effectively."),(0,a.kt)("p",null,"You can set the Firmware Version for your device using the ",(0,a.kt)("inlineCode",{parentName:"p"},'ElegantOTA.setFWVersion("version");')," function."),(0,a.kt)("h3",{id:"example-usage"},"Example Usage:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cpp"},'#include \n\nvoid setup() {\n // Initialize your hardware and other configurations here\n\n // Set the Firmware Version\n ElegantOTA.setFWVersion("1.0.0");\n\n // Additional setup code\n}\n\nvoid loop() {\n // Your main loop code here\n}\n')),(0,a.kt)("p",null,"In the above example, the ",(0,a.kt)("inlineCode",{parentName:"p"},'ElegantOTA.setFWVersion("1.0.0");'),' function call assigns the firmware version "1.0.0" to the device.'),(0,a.kt)("h2",{id:"use-cases"},"Use Cases"),(0,a.kt)("p",null,"The Firmware Version feature can be beneficial in various scenarios:"),(0,a.kt)("ol",null,(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Firmware Updates"),": When new firmware versions become available, the Firmware Version identifier helps you check if an update is necessary. It also allows you to verify that devices have received the correct update.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Compatibility"),": By knowing the firmware version of each device, you can ensure that all components of your IoT network are compatible. This is especially important when devices communicate or interact with each other.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Historical Tracking"),": You can maintain a history of firmware versions installed on each device, which can be useful for troubleshooting issues or understanding the evolution of your firmware.")),(0,a.kt)("li",{parentName:"ol"},(0,a.kt)("p",{parentName:"li"},(0,a.kt)("strong",{parentName:"p"},"Remote Diagnostics"),": When diagnosing issues remotely, having access to the firmware version can help you identify potential problems related to specific software releases."))),(0,a.kt)("h2",{id:"best-practices"},"Best Practices"),(0,a.kt)("p",null,"To make the most of the Firmware Version feature, consider the following best practices:"),(0,a.kt)("ul",null,(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Follow a consistent versioning scheme for your firmware, such as Semantic Versioning (SemVer), to ensure clarity and compatibility tracking.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"Set the firmware version during the device's initialization phase, such as in the ",(0,a.kt)("inlineCode",{parentName:"p"},"setup()")," function, to guarantee that it accurately reflects the installed firmware.")),(0,a.kt)("li",{parentName:"ul"},(0,a.kt)("p",{parentName:"li"},"When updating firmware, always ensure that the new version is correctly set using ",(0,a.kt)("inlineCode",{parentName:"p"},"ElegantOTA.setFWVersion()")," to maintain accurate version information."))))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f39b3a0b.22bd28d3.js b/assets/js/f39b3a0b.22bd28d3.js deleted file mode 100644 index d4764ad..0000000 --- a/assets/js/f39b3a0b.22bd28d3.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkelegantota_docs=self.webpackChunkelegantota_docs||[]).push([[989],{3905:(e,r,t)=>{t.d(r,{Zo:()=>u,kt:()=>b});var a=t(7294);function n(e,r,t){return r in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function i(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);r&&(a=a.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,a)}return t}function o(e){for(var r=1;r=0||(n[t]=e[t]);return n}(e,r);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,t)&&(n[t]=e[t])}return n}var s=a.createContext({}),c=function(e){var r=a.useContext(s),t=r;return e&&(t="function"==typeof e?e(r):o(o({},r),e)),t},u=function(e){var r=c(e.components);return a.createElement(s.Provider,{value:r},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var r=e.children;return a.createElement(a.Fragment,{},r)}},d=a.forwardRef((function(e,r){var t=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(t),d=n,b=p["".concat(s,".").concat(d)]||p[d]||m[d]||i;return t?a.createElement(b,o(o({ref:r},u),{},{components:t})):a.createElement(b,o({ref:r},u))}));function b(e,r){var t=arguments,n=r&&r.mdxType;if("string"==typeof e||n){var i=t.length,o=new Array(i);o[0]=d;var l={};for(var s in r)hasOwnProperty.call(r,s)&&(l[s]=r[s]);l.originalType=e,l[p]="string"==typeof e?e:n,o[1]=l;for(var c=2;c{t.r(r),t.d(r,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var a=t(7462),n=(t(7294),t(3905));const i={title:"Disable Firmware OTA",sidebar_label:"Disable Firmware OTA (Pro)",sidebar_position:8},o=void 0,l={unversionedId:"disable-firmware-ota",id:"disable-firmware-ota",title:"Disable Firmware OTA",description:"This feature is only available in ElegantOTA Pro.",source:"@site/docs/disable-firmware-ota.md",sourceDirName:".",slug:"/disable-firmware-ota",permalink:"/disable-firmware-ota",draft:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{title:"Disable Firmware OTA",sidebar_label:"Disable Firmware OTA (Pro)",sidebar_position:8},sidebar:"tutorialSidebar",previous:{title:"Async Mode",permalink:"/async-mode"},next:{title:"Disable Filesystem OTA (Pro)",permalink:"/disable-filesystem-ota"}},s={},c=[{value:"Disable Firmware OTA:",id:"disable-firmware-ota",level:4},{value:"Enable Firmware OTA:",id:"enable-firmware-ota",level:4},{value:"Get Firmware OTA mode status:",id:"get-firmware-ota-mode-status",level:4}],u={toc:c},p="wrapper";function m(e){let{components:r,...t}=e;return(0,n.kt)(p,(0,a.Z)({},u,t,{components:r,mdxType:"MDXLayout"}),(0,n.kt)("div",{className:"pro-label"},(0,n.kt)("i",null,(0,n.kt)("h4",{style:{fontWeight:"500",marginBottom:5}},"This feature is only available in ",(0,n.kt)("a",{target:"_blank",style:{color:"red"},href:"https://elegantota.pro"},"ElegantOTA Pro"),"."))),(0,n.kt)("br",null),(0,n.kt)("br",null),(0,n.kt)("p",null,"ElegantOTA allows you to selective enable or disable OTA modes of your choice for security reasons or when you have a important task running where you don't want it to get interrupted by an OTA update. This will be represented in the portal (ElegantOTA webpage) too."),(0,n.kt)("p",null,"This function should be used very carefully as it blocks firmware update! If by mistake this is left disabled, your device will not be recoverable by an OTA update."),(0,n.kt)("h4",{id:"disable-firmware-ota"},"Disable Firmware OTA:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},"// Pass 'false' to disable Firmware mode\nElegantOTA.setFirmwareMode(false);\n")),(0,n.kt)("h4",{id:"enable-firmware-ota"},"Enable Firmware OTA:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},"// Pass 'true' to enable Firmware mode\nElegantOTA.setFirmwareMode(true);\n")),(0,n.kt)("h4",{id:"get-firmware-ota-mode-status"},"Get Firmware OTA mode status:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},'// You can use this logic inside a function if neccessary\nif(ElegantOTA.checkFirmwareMode() == true) {\n Serial.println("Firmware mode is enabled");\n} else {\n Serial.println("Firmware mode is disabled");\n}\n')))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/f39b3a0b.f455d83e.js b/assets/js/f39b3a0b.f455d83e.js new file mode 100644 index 0000000..90b95e5 --- /dev/null +++ b/assets/js/f39b3a0b.f455d83e.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkelegantota_docs=self.webpackChunkelegantota_docs||[]).push([[989],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>b});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function o(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var s=a.createContext({}),c=function(e){var t=a.useContext(s),r=t;return e&&(r="function"==typeof e?e(t):o(o({},t),e)),r},u=function(e){var t=c(e.components);return a.createElement(s.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,i=e.originalType,s=e.parentName,u=l(e,["components","mdxType","originalType","parentName"]),p=c(r),d=n,b=p["".concat(s,".").concat(d)]||p[d]||m[d]||i;return r?a.createElement(b,o(o({ref:t},u),{},{components:r})):a.createElement(b,o({ref:t},u))}));function b(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var i=r.length,o=new Array(i);o[0]=d;var l={};for(var s in t)hasOwnProperty.call(t,s)&&(l[s]=t[s]);l.originalType=e,l[p]="string"==typeof e?e:n,o[1]=l;for(var c=2;c{r.r(t),r.d(t,{assets:()=>s,contentTitle:()=>o,default:()=>m,frontMatter:()=>i,metadata:()=>l,toc:()=>c});var a=r(7462),n=(r(7294),r(3905));const i={title:"Disable Firmware OTA",sidebar_label:"Disable Firmware OTA (Pro)",sidebar_position:8},o=void 0,l={unversionedId:"disable-firmware-ota",id:"disable-firmware-ota",title:"Disable Firmware OTA",description:"This feature is only available in ElegantOTA Pro.",source:"@site/docs/disable-firmware-ota.md",sourceDirName:".",slug:"/disable-firmware-ota",permalink:"/disable-firmware-ota",draft:!1,tags:[],version:"current",sidebarPosition:8,frontMatter:{title:"Disable Firmware OTA",sidebar_label:"Disable Firmware OTA (Pro)",sidebar_position:8},sidebar:"tutorialSidebar",previous:{title:"Async Mode",permalink:"/async-mode"},next:{title:"Disable Filesystem OTA (Pro)",permalink:"/disable-filesystem-ota"}},s={},c=[{value:"Disable Firmware OTA:",id:"disable-firmware-ota",level:4},{value:"Enable Firmware OTA:",id:"enable-firmware-ota",level:4},{value:"Get Firmware OTA mode status:",id:"get-firmware-ota-mode-status",level:4}],u={toc:c},p="wrapper";function m(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("div",{className:"pro-label"},(0,n.kt)("i",null,(0,n.kt)("h4",{style:{fontWeight:"500",marginBottom:5}},"This feature is only available in ",(0,n.kt)("a",{target:"_blank",style:{color:"red"},href:"https://elegantota.pro"},"ElegantOTA Pro"),"."))),(0,n.kt)("br",null),(0,n.kt)("br",null),(0,n.kt)("img",{src:"/v3/img/ota-modes.png",alt:"Modes",width:"400px"}),(0,n.kt)("br",null),(0,n.kt)("br",null),(0,n.kt)("p",null,"ElegantOTA allows you to selective enable or disable OTA modes of your choice for security reasons or when you have a important task running where you don't want it to get interrupted by an OTA update. This will be represented in the portal (ElegantOTA webpage) too."),(0,n.kt)("p",null,"This function should be used very carefully as it blocks firmware update! If by mistake this is left disabled, your device will not be recoverable by an OTA update."),(0,n.kt)("h4",{id:"disable-firmware-ota"},"Disable Firmware OTA:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},"// Pass 'false' to disable Firmware mode\nElegantOTA.setFirmwareMode(false);\n")),(0,n.kt)("h4",{id:"enable-firmware-ota"},"Enable Firmware OTA:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},"// Pass 'true' to enable Firmware mode\nElegantOTA.setFirmwareMode(true);\n")),(0,n.kt)("h4",{id:"get-firmware-ota-mode-status"},"Get Firmware OTA mode status:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},'// You can use this logic inside a function if neccessary\nif(ElegantOTA.checkFirmwareMode() == true) {\n Serial.println("Firmware mode is enabled");\n} else {\n Serial.println("Firmware mode is disabled");\n}\n')))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ff93640d.190f2c21.js b/assets/js/ff93640d.190f2c21.js new file mode 100644 index 0000000..dc09809 --- /dev/null +++ b/assets/js/ff93640d.190f2c21.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkelegantota_docs=self.webpackChunkelegantota_docs||[]).push([[816],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>y});var n=r(7294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var o=n.createContext({}),c=function(e){var t=n.useContext(o),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},u=function(e){var t=c(e.components);return n.createElement(o.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},d=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,l=e.originalType,o=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=c(r),d=a,y=p["".concat(o,".").concat(d)]||p[d]||m[d]||l;return r?n.createElement(y,s(s({ref:t},u),{},{components:r})):n.createElement(y,s({ref:t},u))}));function y(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var l=r.length,s=new Array(l);s[0]=d;var i={};for(var o in t)hasOwnProperty.call(t,o)&&(i[o]=t[o]);i.originalType=e,i[p]="string"==typeof e?e:a,s[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>o,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var n=r(7462),a=(r(7294),r(3905));const l={title:"Disable Filesystem OTA",sidebar_label:"Disable Filesystem OTA (Pro)",sidebar_position:9},s=void 0,i={unversionedId:"disable-filesystem-ota",id:"disable-filesystem-ota",title:"Disable Filesystem OTA",description:"This feature is only available in ElegantOTA Pro.",source:"@site/docs/disable-filesystem-ota.md",sourceDirName:".",slug:"/disable-filesystem-ota",permalink:"/disable-filesystem-ota",draft:!1,tags:[],version:"current",sidebarPosition:9,frontMatter:{title:"Disable Filesystem OTA",sidebar_label:"Disable Filesystem OTA (Pro)",sidebar_position:9},sidebar:"tutorialSidebar",previous:{title:"Disable Firmware OTA (Pro)",permalink:"/disable-firmware-ota"},next:{title:"Hardware ID (Pro)",permalink:"/hardware-id"}},o={},c=[{value:"Disable Filesystem OTA:",id:"disable-filesystem-ota",level:4},{value:"Enable Filesystem OTA:",id:"enable-filesystem-ota",level:4},{value:"Get Filesystem OTA mode status:",id:"get-filesystem-ota-mode-status",level:4}],u={toc:c},p="wrapper";function m(e){let{components:t,...r}=e;return(0,a.kt)(p,(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("div",{className:"pro-label"},(0,a.kt)("i",null,(0,a.kt)("h4",{style:{fontWeight:"500",marginBottom:5}},"This feature is only available in ",(0,a.kt)("a",{target:"_blank",style:{color:"red"},href:"https://elegantota.pro"},"ElegantOTA Pro"),"."))),(0,a.kt)("br",null),(0,a.kt)("br",null),(0,a.kt)("img",{src:"/v3/img/ota-modes.png",alt:"Modes",width:"400px"}),(0,a.kt)("br",null),(0,a.kt)("br",null),(0,a.kt)("p",null,"ElegantOTA allows you to selective enable or disable OTA modes of your choice for security reasons or when you have a important task running where you don't want it to get interrupted by an OTA update. This will be represented in the portal (ElegantOTA webpage) too."),(0,a.kt)("p",null,"Using these functions you can enable or disable filesystem updates ( SPIFFS or LittleFS )."),(0,a.kt)("h4",{id:"disable-filesystem-ota"},"Disable Filesystem OTA:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cpp"},"// Pass 'false' to disable Filesystem mode\nElegantOTA.setFilesystemMode(true);\n")),(0,a.kt)("h4",{id:"enable-filesystem-ota"},"Enable Filesystem OTA:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cpp"},"// Pass 'true' to enable Filesystem mode\nElegantOTA.setFilesystemMode(false);\n")),(0,a.kt)("h4",{id:"get-filesystem-ota-mode-status"},"Get Filesystem OTA mode status:"),(0,a.kt)("pre",null,(0,a.kt)("code",{parentName:"pre",className:"language-cpp"},'// You can use this logic inside a function if neccessary\nif(ElegantOTA.checkFilesystemMode() == true) {\n Serial.println("Filesystem mode is enabled");\n} else {\n Serial.println("Filesystem mode is disabled");\n}\n')))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/ff93640d.fe1f3c0e.js b/assets/js/ff93640d.fe1f3c0e.js deleted file mode 100644 index cc58d17..0000000 --- a/assets/js/ff93640d.fe1f3c0e.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkelegantota_docs=self.webpackChunkelegantota_docs||[]).push([[816],{3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>y});var a=r(7294);function n(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function l(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);t&&(a=a.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,a)}return r}function s(e){for(var t=1;t=0||(n[r]=e[r]);return n}(e,t);if(Object.getOwnPropertySymbols){var l=Object.getOwnPropertySymbols(e);for(a=0;a=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}var o=a.createContext({}),c=function(e){var t=a.useContext(o),r=t;return e&&(r="function"==typeof e?e(t):s(s({},t),e)),r},u=function(e){var t=c(e.components);return a.createElement(o.Provider,{value:t},e.children)},p="mdxType",m={inlineCode:"code",wrapper:function(e){var t=e.children;return a.createElement(a.Fragment,{},t)}},d=a.forwardRef((function(e,t){var r=e.components,n=e.mdxType,l=e.originalType,o=e.parentName,u=i(e,["components","mdxType","originalType","parentName"]),p=c(r),d=n,y=p["".concat(o,".").concat(d)]||p[d]||m[d]||l;return r?a.createElement(y,s(s({ref:t},u),{},{components:r})):a.createElement(y,s({ref:t},u))}));function y(e,t){var r=arguments,n=t&&t.mdxType;if("string"==typeof e||n){var l=r.length,s=new Array(l);s[0]=d;var i={};for(var o in t)hasOwnProperty.call(t,o)&&(i[o]=t[o]);i.originalType=e,i[p]="string"==typeof e?e:n,s[1]=i;for(var c=2;c{r.r(t),r.d(t,{assets:()=>o,contentTitle:()=>s,default:()=>m,frontMatter:()=>l,metadata:()=>i,toc:()=>c});var a=r(7462),n=(r(7294),r(3905));const l={title:"Disable Filesystem OTA",sidebar_label:"Disable Filesystem OTA (Pro)",sidebar_position:9},s=void 0,i={unversionedId:"disable-filesystem-ota",id:"disable-filesystem-ota",title:"Disable Filesystem OTA",description:"This feature is only available in ElegantOTA Pro.",source:"@site/docs/disable-filesystem-ota.md",sourceDirName:".",slug:"/disable-filesystem-ota",permalink:"/disable-filesystem-ota",draft:!1,tags:[],version:"current",sidebarPosition:9,frontMatter:{title:"Disable Filesystem OTA",sidebar_label:"Disable Filesystem OTA (Pro)",sidebar_position:9},sidebar:"tutorialSidebar",previous:{title:"Disable Firmware OTA (Pro)",permalink:"/disable-firmware-ota"},next:{title:"Hardware ID (Pro)",permalink:"/hardware-id"}},o={},c=[{value:"Disable Filesystem OTA:",id:"disable-filesystem-ota",level:4},{value:"Enable Filesystem OTA:",id:"enable-filesystem-ota",level:4},{value:"Get Filesystem OTA mode status:",id:"get-filesystem-ota-mode-status",level:4}],u={toc:c},p="wrapper";function m(e){let{components:t,...r}=e;return(0,n.kt)(p,(0,a.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,n.kt)("div",{className:"pro-label"},(0,n.kt)("i",null,(0,n.kt)("h4",{style:{fontWeight:"500",marginBottom:5}},"This feature is only available in ",(0,n.kt)("a",{target:"_blank",style:{color:"red"},href:"https://elegantota.pro"},"ElegantOTA Pro"),"."))),(0,n.kt)("br",null),(0,n.kt)("br",null),(0,n.kt)("p",null,"ElegantOTA allows you to selective enable or disable OTA modes of your choice for security reasons or when you have a important task running where you don't want it to get interrupted by an OTA update. This will be represented in the portal (ElegantOTA webpage) too."),(0,n.kt)("p",null,"Using these functions you can enable or disable filesystem updates ( SPIFFS or LittleFS )."),(0,n.kt)("h4",{id:"disable-filesystem-ota"},"Disable Filesystem OTA:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},"// Pass 'false' to disable Filesystem mode\nElegantOTA.setFilesystemMode(true);\n")),(0,n.kt)("h4",{id:"enable-filesystem-ota"},"Enable Filesystem OTA:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},"// Pass 'true' to enable Filesystem mode\nElegantOTA.setFilesystemMode(false);\n")),(0,n.kt)("h4",{id:"get-filesystem-ota-mode-status"},"Get Filesystem OTA mode status:"),(0,n.kt)("pre",null,(0,n.kt)("code",{parentName:"pre",className:"language-cpp"},'// You can use this logic inside a function if neccessary\nif(ElegantOTA.checkFilesystemMode() == true) {\n Serial.println("Filesystem mode is enabled");\n} else {\n Serial.println("Filesystem mode is disabled");\n}\n')))}m.isMDXComponent=!0}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.efaa5c73.js b/assets/js/runtime~main.a07c38c1.js similarity index 78% rename from assets/js/runtime~main.efaa5c73.js rename to assets/js/runtime~main.a07c38c1.js index 2d9abb6..860caa6 100644 --- a/assets/js/runtime~main.efaa5c73.js +++ b/assets/js/runtime~main.a07c38c1.js @@ -1 +1 @@ -(()=>{"use strict";var e,t,r,a,o,n={},d={};function f(e){var t=d[e];if(void 0!==t)return t.exports;var r=d[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,f),r.loaded=!0,r.exports}f.m=n,f.c=d,e=[],f.O=(t,r,a,o)=>{if(!r){var n=1/0;for(l=0;l=o)&&Object.keys(f.O).every((e=>f.O[e](r[i])))?r.splice(i--,1):(d=!1,o0&&e[l-1][2]>o;l--)e[l]=e[l-1];e[l]=[r,a,o]},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var n={};t=t||[null,r({}),r([]),r(r)];for(var d=2&a&&e;"object"==typeof d&&!~t.indexOf(d);d=r(d))Object.getOwnPropertyNames(d).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,f.d(o,n),o},f.d=(e,t)=>{for(var r in t)f.o(t,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((t,r)=>(f.f[r](e,t),t)),[])),f.u=e=>"assets/js/"+({30:"09d5ad39",53:"935f2afb",162:"d589d3a7",168:"625b1ed7",217:"3b8c55ea",361:"4d37f007",514:"1be78505",611:"a81a9ba7",671:"0e384e19",739:"3865d09d",757:"35754347",784:"eb3cd3e5",816:"ff93640d",818:"a5ec7539",861:"64b0ce6a",918:"17896441",924:"21834f87",989:"f39b3a0b"}[e]||e)+"."+{30:"52178145",53:"91aff0ff",162:"2a0fd2d0",168:"d67efd92",202:"f5b878aa",217:"de5cc3a2",361:"67463489",514:"5303ed6d",611:"3efe1b70",671:"ab487a62",739:"f3bb47dd",757:"da2b4274",784:"86988d4d",816:"fe1f3c0e",818:"f1917fc6",861:"3edddec3",918:"a019dfd7",924:"6e87f8a0",972:"aacabf51",989:"22bd28d3"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="elegantota-docs:",f.l=(e,t,r,n)=>{if(a[e])a[e].push(t);else{var d,i;if(void 0!==r)for(var c=document.getElementsByTagName("script"),l=0;l{d.onerror=d.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],d.parentNode&&d.parentNode.removeChild(d),o&&o.forEach((e=>e(r))),t)return t(r)},s=setTimeout(b.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=b.bind(null,d.onerror),d.onload=b.bind(null,d.onload),i&&document.head.appendChild(d)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/",f.gca=function(e){return e={17896441:"918",35754347:"757","09d5ad39":"30","935f2afb":"53",d589d3a7:"162","625b1ed7":"168","3b8c55ea":"217","4d37f007":"361","1be78505":"514",a81a9ba7:"611","0e384e19":"671","3865d09d":"739",eb3cd3e5:"784",ff93640d:"816",a5ec7539:"818","64b0ce6a":"861","21834f87":"924",f39b3a0b:"989"}[e]||e,f.p+f.u(e)},(()=>{var e={303:0,532:0};f.f.j=(t,r)=>{var a=f.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var n=f.p+f.u(t),d=new Error;f.l(n,(r=>{if(f.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;d.message="Loading chunk "+t+" failed.\n("+o+": "+n+")",d.name="ChunkLoadError",d.type=o,d.request=n,a[1](d)}}),"chunk-"+t,t)}},f.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,n=r[0],d=r[1],i=r[2],c=0;if(n.some((t=>0!==e[t]))){for(a in d)f.o(d,a)&&(f.m[a]=d[a]);if(i)var l=i(f)}for(t&&t(r);c{"use strict";var e,t,r,a,o,n={},d={};function f(e){var t=d[e];if(void 0!==t)return t.exports;var r=d[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,f),r.loaded=!0,r.exports}f.m=n,f.c=d,e=[],f.O=(t,r,a,o)=>{if(!r){var n=1/0;for(l=0;l=o)&&Object.keys(f.O).every((e=>f.O[e](r[c])))?r.splice(c--,1):(d=!1,o0&&e[l-1][2]>o;l--)e[l]=e[l-1];e[l]=[r,a,o]},f.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return f.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,f.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);f.r(o);var n={};t=t||[null,r({}),r([]),r(r)];for(var d=2&a&&e;"object"==typeof d&&!~t.indexOf(d);d=r(d))Object.getOwnPropertyNames(d).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,f.d(o,n),o},f.d=(e,t)=>{for(var r in t)f.o(t,r)&&!f.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},f.f={},f.e=e=>Promise.all(Object.keys(f.f).reduce(((t,r)=>(f.f[r](e,t),t)),[])),f.u=e=>"assets/js/"+({30:"09d5ad39",53:"935f2afb",162:"d589d3a7",168:"625b1ed7",217:"3b8c55ea",361:"4d37f007",514:"1be78505",611:"a81a9ba7",671:"0e384e19",739:"3865d09d",757:"35754347",784:"eb3cd3e5",816:"ff93640d",818:"a5ec7539",861:"64b0ce6a",918:"17896441",924:"21834f87",989:"f39b3a0b"}[e]||e)+"."+{30:"52178145",53:"91aff0ff",162:"2a0fd2d0",168:"d67efd92",202:"f5b878aa",217:"de5cc3a2",361:"67463489",514:"5303ed6d",611:"3efe1b70",671:"ab487a62",739:"68864eb6",757:"da2b4274",784:"ca8ae6dd",816:"190f2c21",818:"d8c77f85",861:"c832846e",918:"a019dfd7",924:"6e87f8a0",972:"aacabf51",989:"f455d83e"}[e]+".js",f.miniCssF=e=>{},f.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),f.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="elegantota-docs:",f.l=(e,t,r,n)=>{if(a[e])a[e].push(t);else{var d,c;if(void 0!==r)for(var i=document.getElementsByTagName("script"),l=0;l{d.onerror=d.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],d.parentNode&&d.parentNode.removeChild(d),o&&o.forEach((e=>e(r))),t)return t(r)},s=setTimeout(b.bind(null,void 0,{type:"timeout",target:d}),12e4);d.onerror=b.bind(null,d.onerror),d.onload=b.bind(null,d.onload),c&&document.head.appendChild(d)}},f.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},f.p="/",f.gca=function(e){return e={17896441:"918",35754347:"757","09d5ad39":"30","935f2afb":"53",d589d3a7:"162","625b1ed7":"168","3b8c55ea":"217","4d37f007":"361","1be78505":"514",a81a9ba7:"611","0e384e19":"671","3865d09d":"739",eb3cd3e5:"784",ff93640d:"816",a5ec7539:"818","64b0ce6a":"861","21834f87":"924",f39b3a0b:"989"}[e]||e,f.p+f.u(e)},(()=>{var e={303:0,532:0};f.f.j=(t,r)=>{var a=f.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var n=f.p+f.u(t),d=new Error;f.l(n,(r=>{if(f.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;d.message="Loading chunk "+t+" failed.\n("+o+": "+n+")",d.name="ChunkLoadError",d.type=o,d.request=n,a[1](d)}}),"chunk-"+t,t)}},f.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,n=r[0],d=r[1],c=r[2],i=0;if(n.some((t=>0!==e[t]))){for(a in d)f.o(d,a)&&(f.m[a]=d[a]);if(c)var l=c(f)}for(t&&t(r);i - +

Async Mode

Introduction

One of the features of ElegantOTA is the async mode, which provides asynchronous web server functionality for handling OTA updates. This mode should only be enabled if you are using ESPAsyncWebServer library in your project/firmware.

Enabling Async Mode

To enable async mode for ElegantOTA, follow these steps:

  1. Locate the ELEGANTOTA_USE_ASYNC_WEBSERVER macro in the ElegantOTA.h file, and set it to 1:

    #define ELEGANTOTA_USE_ASYNC_WEBSERVER 1
  2. Save the changes to the ElegantOTA.h file.

  3. You are now ready to use ElegantOTA in async mode for your OTA updates, utilizing the ESPAsyncWebServer library.

Benefits of Async Mode

Enabling async mode for ElegantOTA offers several advantages:

  1. Non-blocking Operation: In async mode, ElegantOTA leverages the asynchronous web server capabilities of ESPAsyncWebServer. This means that OTA updates won't block your device's main loop. It allows your device to continue executing other tasks while handling OTA updates in the background.

  2. Improved Responsiveness: Your device can remain responsive to user interactions or other processes during OTA updates, ensuring a smoother user experience.

- + \ No newline at end of file diff --git a/authentication/index.html b/authentication/index.html index 997a60c..ae1d0c7 100644 --- a/authentication/index.html +++ b/authentication/index.html @@ -7,13 +7,13 @@ - +

Authentication

Introduction

The Authentication feature in ElegantOTA enhances the security of your Internet of Things (IoT) devices by requiring authentication before allowing firmware updates or configuration changes. This feature ensures that only authorized individuals or systems can access and modify your devices, adding an extra layer of protection to your IoT ecosystem.

Setting Authentication

You can set up authentication for your device using the ElegantOTA.setAuth("username", "password"); function. This function requires two parameters: a username and a password. These credentials act as a gatekeeper, preventing unauthorized access to the device's OTA (Over-The-Air) update and configuration interfaces.

Example Usage

#include <ElegantOTA.h>

void setup() {
// Initialize your hardware and other configurations here

// Set Authentication Credentials
ElegantOTA.setAuth("myUsername", "myPassword");

// Additional setup code
}

void loop() {
// Your main loop code here
}

In the above example, the ElegantOTA.setAuth("myUsername", "myPassword"); function call sets the username to "myUsername" and the password to "myPassword" for device authentication.

Clearing Authentication

Authentication once set can also be cleared by calling:

ElegantOTA.clearAuth();

Use Cases

The Authentication feature is crucial in various scenarios:

  1. Security: It safeguards your IoT devices against unauthorized access, reducing the risk of malicious updates or configuration changes.

  2. Access Control: By setting unique credentials for each device, you can control access to individual devices, ensuring that only authorized personnel or systems can modify them.

  3. Compliance: Some security and compliance standards require authentication mechanisms for IoT devices. ElegantOTA's Authentication feature helps you meet these requirements.

Best Practices

To ensure the effectiveness of the Authentication feature, consider these best practices:

  • Choose strong and unique usernames and passwords for each device.

  • Avoid using default or easily guessable credentials to enhance security.

  • Keep the credentials in a secure location and avoid hardcoding them directly into your code to prevent accidental exposure.

  • Regularly update and rotate the authentication credentials to maintain security.

  • Test the authentication setup thoroughly to ensure that only authorized users can access the device.

- + \ No newline at end of file diff --git a/branding/index.html b/branding/index.html index 023a453..2c5acd6 100644 --- a/branding/index.html +++ b/branding/index.html @@ -7,13 +7,13 @@ - +
-

Branding

This feature is only available in ElegantOTA Pro.



Overview

Branding in this context refers to the custom logo that is displayed on the ElegantOTA portal during the OTA update process. You can customize the logo by defining the logo image as a byte array in the logo.h and logo.cpp files of the library's source code.

To add your custom logo on the ElegantOTA portal, follow these steps:

First, you need to create or obtain the logo image you want to display on the ElegantOTA portal during OTA updates. Ensure that the logo image is in a suitable format, such as a SVG (recommended) / PNG or JPG file and make sure your image is optimized & small in file size.

Step 2: Convert Logo Image to a Byte Array

To include the logo in your library, you'll need to convert the image into a byte array.

  1. Go to File2Raw utility ( I created this utility a few years back for the purpose of converting files into byte array for C++ applications ).
  2. Select your logo.
  3. Select "Gzip Compress" & "Use PROGMEM (Arduino)".
  4. Click "Convert".

Step 3: Modify logo.h

  1. Open the logo.h file in your ElegantOTA library source code.

  2. Locate the ELEGANTOTA_LOGO byte array declaration, which should look like this:

    extern const uint8_t ELEGANTOTA_LOGO[];
  3. Replace the length of the ELEGANTOTA_LOGO array with your custom logo's byte array length.

  4. Locate the ELEGANTOTA_LOGO_MIME variable, which defines the MIME type of your logo image. By default, it is set to image/png. If your logo is in a different format (e.g., JPEG), update the ELEGANTOTA_LOGO_MIME variable to the appropriate MIME type.

  5. Set ELEGANTOTA_LOGO_WIDTH & ELEGANTOTA_LOGO_HEIGHT according to your desired size which will be displayed on the webpage.

Step 4: Modify logo.cpp

  1. Open the logo.cpp file in your ElegantOTA library source code.

  2. Replace the contents of the ELEGANTOTA_LOGO array with your custom logo's byte array generated in File2Raw utility.

Step 5: Upload the Modified Library

After making these changes, compile and upload the modified ElegantOTA library to your device.

Once you have uploaded the modified ElegantOTA library to your device, the custom logo will be displayed on the ElegantOTA Portal webpage during OTA updates.

That's it! You have successfully added custom branding to the ElegantOTA portal by defining the logo as a byte array in the logo.h and logo.cpp files. Your logo will now be displayed on the ElegantOTA portal.

Please note that branding, including logos and images, may be subject to copyright and trademark laws. Ensure you have the necessary rights or permissions to use any branding elements in your project.

- +

Branding

This feature is only available in ElegantOTA Pro.



Branding

Overview

Branding in this context refers to the custom logo that is displayed on the ElegantOTA portal during the OTA update process. You can customize the logo by defining the logo image as a byte array in the logo.h and logo.cpp files of the library's source code.

To add your custom logo on the ElegantOTA portal, follow these steps:

First, you need to create or obtain the logo image you want to display on the ElegantOTA portal during OTA updates. Ensure that the logo image is in a suitable format, such as a SVG (recommended) / PNG or JPG file and make sure your image is optimized & small in file size.

Step 2: Convert Logo Image to a Byte Array

To include the logo in your library, you'll need to convert the image into a byte array.

  1. Go to File2Raw utility ( I created this utility a few years back for the purpose of converting files into byte array for C++ applications ).
  2. Select your logo.
  3. Select "Gzip Compress" & "Use PROGMEM (Arduino)".
  4. Click "Convert".

Step 3: Modify logo.h

  1. Open the logo.h file in your ElegantOTA library source code.

  2. Locate the ELEGANTOTA_LOGO byte array declaration, which should look like this:

    extern const uint8_t ELEGANTOTA_LOGO[];
  3. Replace the length of the ELEGANTOTA_LOGO array with your custom logo's byte array length.

  4. Locate the ELEGANTOTA_LOGO_MIME variable, which defines the MIME type of your logo image. By default, it is set to image/png. If your logo is in a different format (e.g., JPEG), update the ELEGANTOTA_LOGO_MIME variable to the appropriate MIME type.

  5. Set ELEGANTOTA_LOGO_WIDTH & ELEGANTOTA_LOGO_HEIGHT according to your desired size which will be displayed on the webpage.

Step 4: Modify logo.cpp

  1. Open the logo.cpp file in your ElegantOTA library source code.

  2. Replace the contents of the ELEGANTOTA_LOGO array with your custom logo's byte array generated in File2Raw utility.

Step 5: Upload the Modified Library

After making these changes, compile and upload the modified ElegantOTA library to your device.

Once you have uploaded the modified ElegantOTA library to your device, the custom logo will be displayed on the ElegantOTA Portal webpage during OTA updates.

That's it! You have successfully added custom branding to the ElegantOTA portal by defining the logo as a byte array in the logo.h and logo.cpp files. Your logo will now be displayed on the ElegantOTA portal.

Please note that branding, including logos and images, may be subject to copyright and trademark laws. Ensure you have the necessary rights or permissions to use any branding elements in your project.

+ \ No newline at end of file diff --git a/callbacks/index.html b/callbacks/index.html index 8d7484e..65affcf 100644 --- a/callbacks/index.html +++ b/callbacks/index.html @@ -7,13 +7,13 @@ - +

Callbacks

Overview

The ElegantOTA library offers three callbacks that allow you to customize the behavior of your OTA update process. These callbacks enable you to execute specific functions at different stages of the update process, giving you control over the update flow. Here are the available callbacks:

  1. void onStart(void callable(void));
  2. void onProgress(void callable(size_t current, size_t final));
  3. void onEnd(void callable(bool success));

Let's delve into the details of each callback and how to use them effectively.

1. onStart Callback

The onStart callback is triggered when the OTA update process begins. It's a convenient way to perform any setup or initialization tasks before the update process starts. You can use this callback to prepare your device for the update, such as saving important data, configuring pins, or setting up any required resources.

Example:

ElegantOTA.onStart([]() {
Serial.println("OTA update process started.");
// Add your initialization tasks here.
});

2. onProgress Callback

The onProgress callback is called periodically during the OTA update to provide information about the progress of the update. It's useful for tracking the percentage of completion or displaying progress information to the user. This callback passes two parameters: current (the number of bytes transferred so far) and final (the total number of bytes to be transferred).

Note: onProgress callback can be called very frequently while the update is getting downloaded. It's neccessary to defer any tasks or logging so that core is not overloaded. Please refer to 'demo' example where progress is logged after every second.

Example:

ElegantOTA.onProgress([](size_t current, size_t final) {
Serial.printf("Progress: %u%%\n", (current * 100) / final);
});

3. onEnd Callback

The onEnd callback is invoked when the OTA update process completes, whether it succeeds or fails. It passes a boolean parameter success indicating the outcome of the update. You can use this callback to perform cleanup tasks or take action based on whether the update was successful or not.

Example:

ElegantOTA.onEnd([](bool success) {
if (success) {
Serial.println("OTA update completed successfully.");
// Add success handling here.
} else {
Serial.println("OTA update failed.");
// Add failure handling here.
}
});
- + \ No newline at end of file diff --git a/commercial-license/index.html b/commercial-license/index.html index 9494bd6..23b67fe 100644 --- a/commercial-license/index.html +++ b/commercial-license/index.html @@ -7,13 +7,13 @@ - +

Commercial License

ElegantOTA Lite (open-source version) and ElegantOTA Pro are two different versions of the same OTA (Over-The-Air) update library, each with its own set of features and licensing terms. Here's a comparison between ElegantOTA Lite, which is open-source and AGPL-3.0 based, and ElegantOTA Pro:

  1. Licensing:

    • ElegantOTA Lite: This version is open-source and released under the AGPL-3.0 license. It means that it's freely available for anyone to use, modify, and distribute. However, if you use ElegantOTA Lite in a commercial product, the AGPL-3.0 license requires you to make the source code of your product, including any modifications to ElegantOTA Lite, available to the public.

    • ElegantOTA Pro: This version is offered under a one-time charge for a commercial license. It allows you to use ElegantOTA Pro in a commercial product without the requirement to open-source your proprietary code. The commercial license provides more flexibility and protection for businesses.

  2. Support:

    • ElegantOTA Lite: Support for ElegantOTA Lite is typically community-driven. You may find help through online forums, documentation, or user-contributed resources. However, professional support may be limited.

    • ElegantOTA Pro: ElegantOTA Pro includes dedicated support and assistance. This can be essential for businesses that require timely and reliable support to ensure their OTA update process runs smoothly.

In summary, the choice between ElegantOTA Lite and ElegantOTA Pro depends on your specific needs and the nature of your project:

  • If you are working on an open-source project or have no concerns about the AGPL-3.0 license's requirements and need basic OTA update functionality, ElegantOTA Lite is a viable choice.

  • If you are developing a commercial product, ElegantOTA Pro provides a more comprehensive and professionally supported solution while allowing you to maintain the proprietary nature of your code. However, it comes with a one-time commercial licensing fee.

You can get ElegantOTA Pro via the official product page at: https://elegantota.pro

- + \ No newline at end of file diff --git a/custom-title/index.html b/custom-title/index.html index 6b389ac..62ebd48 100644 --- a/custom-title/index.html +++ b/custom-title/index.html @@ -7,13 +7,13 @@ - +
-

Custom Title

This feature is only available in ElegantOTA Pro.

Overview

The setTitle() function is a method provided by the ElegantOTA Pro library. It is used to set the title of the OTA (Over-The-Air) update portal. This title is displayed at the top of the update portal web page, providing a user-friendly and customizable interface for managing firmware updates.

Syntax

void setTitle(const char* title);

Example

#include <ElegantOTA.h>

void setup() {
// Initialize the ElegantOTA library
ElegantOTA.begin();

// Set the title of the OTA update portal
ElegantOTA.setTitle("OTA Update - XYZ Inc");
}

void loop() {
// Your main program loop
}

Usage

  1. Include the ElegantOTA library in your Arduino sketch.
  2. In the setup() function of your sketch, initialize the ElegantOTA library using ElegantOTA.begin().
  3. Use the setTitle() function to set a meaningful title for your OTA update portal. This title will be displayed at the top of the update portal web page when users access it.
  4. Continue with the rest of your sketch's setup and loop functions.
- +

Custom Title

This feature is only available in ElegantOTA Pro.


Custom Title

Overview

The setTitle() function is a method provided by the ElegantOTA Pro library. It is used to set the title of the OTA (Over-The-Air) update portal. This title is displayed at the top of the update portal web page, providing a user-friendly and customizable interface for managing firmware updates.

Syntax

void setTitle(const char* title);

Example

#include <ElegantOTA.h>

void setup() {
// Initialize the ElegantOTA library
ElegantOTA.begin();

// Set the title of the OTA update portal
ElegantOTA.setTitle("OTA Update - XYZ Inc");
}

void loop() {
// Your main program loop
}

Usage

  1. Include the ElegantOTA library in your Arduino sketch.
  2. In the setup() function of your sketch, initialize the ElegantOTA library using ElegantOTA.begin().
  3. Use the setTitle() function to set a meaningful title for your OTA update portal. This title will be displayed at the top of the update portal web page when users access it.
  4. Continue with the rest of your sketch's setup and loop functions.
+ \ No newline at end of file diff --git a/disable-filesystem-ota/index.html b/disable-filesystem-ota/index.html index 265aeab..837578a 100644 --- a/disable-filesystem-ota/index.html +++ b/disable-filesystem-ota/index.html @@ -7,13 +7,13 @@ - +
-

Disable Filesystem OTA

This feature is only available in ElegantOTA Pro.



ElegantOTA allows you to selective enable or disable OTA modes of your choice for security reasons or when you have a important task running where you don't want it to get interrupted by an OTA update. This will be represented in the portal (ElegantOTA webpage) too.

Using these functions you can enable or disable filesystem updates ( SPIFFS or LittleFS ).

Disable Filesystem OTA:

// Pass 'false' to disable Filesystem mode
ElegantOTA.setFilesystemMode(true);

Enable Filesystem OTA:

// Pass 'true' to enable Filesystem mode
ElegantOTA.setFilesystemMode(false);

Get Filesystem OTA mode status:

// You can use this logic inside a function if neccessary
if(ElegantOTA.checkFilesystemMode() == true) {
Serial.println("Filesystem mode is enabled");
} else {
Serial.println("Filesystem mode is disabled");
}
- +

Disable Filesystem OTA

This feature is only available in ElegantOTA Pro.



Modes

ElegantOTA allows you to selective enable or disable OTA modes of your choice for security reasons or when you have a important task running where you don't want it to get interrupted by an OTA update. This will be represented in the portal (ElegantOTA webpage) too.

Using these functions you can enable or disable filesystem updates ( SPIFFS or LittleFS ).

Disable Filesystem OTA:

// Pass 'false' to disable Filesystem mode
ElegantOTA.setFilesystemMode(true);

Enable Filesystem OTA:

// Pass 'true' to enable Filesystem mode
ElegantOTA.setFilesystemMode(false);

Get Filesystem OTA mode status:

// You can use this logic inside a function if neccessary
if(ElegantOTA.checkFilesystemMode() == true) {
Serial.println("Filesystem mode is enabled");
} else {
Serial.println("Filesystem mode is disabled");
}
+ \ No newline at end of file diff --git a/disable-firmware-ota/index.html b/disable-firmware-ota/index.html index e0abba6..b27e5b0 100644 --- a/disable-firmware-ota/index.html +++ b/disable-firmware-ota/index.html @@ -7,13 +7,13 @@ - +
-

Disable Firmware OTA

This feature is only available in ElegantOTA Pro.



ElegantOTA allows you to selective enable or disable OTA modes of your choice for security reasons or when you have a important task running where you don't want it to get interrupted by an OTA update. This will be represented in the portal (ElegantOTA webpage) too.

This function should be used very carefully as it blocks firmware update! If by mistake this is left disabled, your device will not be recoverable by an OTA update.

Disable Firmware OTA:

// Pass 'false' to disable Firmware mode
ElegantOTA.setFirmwareMode(false);

Enable Firmware OTA:

// Pass 'true' to enable Firmware mode
ElegantOTA.setFirmwareMode(true);

Get Firmware OTA mode status:

// You can use this logic inside a function if neccessary
if(ElegantOTA.checkFirmwareMode() == true) {
Serial.println("Firmware mode is enabled");
} else {
Serial.println("Firmware mode is disabled");
}
- +

Disable Firmware OTA

This feature is only available in ElegantOTA Pro.



Modes

ElegantOTA allows you to selective enable or disable OTA modes of your choice for security reasons or when you have a important task running where you don't want it to get interrupted by an OTA update. This will be represented in the portal (ElegantOTA webpage) too.

This function should be used very carefully as it blocks firmware update! If by mistake this is left disabled, your device will not be recoverable by an OTA update.

Disable Firmware OTA:

// Pass 'false' to disable Firmware mode
ElegantOTA.setFirmwareMode(false);

Enable Firmware OTA:

// Pass 'true' to enable Firmware mode
ElegantOTA.setFirmwareMode(true);

Get Firmware OTA mode status:

// You can use this logic inside a function if neccessary
if(ElegantOTA.checkFirmwareMode() == true) {
Serial.println("Firmware mode is enabled");
} else {
Serial.println("Firmware mode is disabled");
}
+ \ No newline at end of file diff --git a/examples/index.html b/examples/index.html index 021908e..5124812 100644 --- a/examples/index.html +++ b/examples/index.html @@ -7,13 +7,13 @@ - +

Examples

ElegantOTA repository comes with Demo and AsyncDemo examples.

Demo Example

Demo example is for people who are using the inbuilt webserver of their platform. This is meant to run without any dependencies.

Async Demo Example

Async demo example utilizes AsyncWebServer which has significant performance gains. Only use this example as reference when your project is using AsyncWebServer. Know more about this in "Async Mode" documentation.

You can find those examples in the ElegantOTA repository.

- + \ No newline at end of file diff --git a/firmware-version/index.html b/firmware-version/index.html index 6fc5559..b19cebc 100644 --- a/firmware-version/index.html +++ b/firmware-version/index.html @@ -7,13 +7,13 @@ - +
-

Firmware Version

This feature is only available in ElegantOTA Pro.

Introduction

The Firmware Version feature in ElegantOTA allows you to specify and manage the version of the firmware running on your Internet of Things (IoT) devices. By setting a firmware version, you can easily track and control the software running on your devices, making it simpler to perform updates, monitor compatibility, and manage your IoT ecosystem effectively.

You can set the Firmware Version for your device using the ElegantOTA.setFWVersion("version"); function.

Example Usage:

#include <ElegantOTA.h>

void setup() {
// Initialize your hardware and other configurations here

// Set the Firmware Version
ElegantOTA.setFWVersion("v1.0.0");

// Additional setup code
}

void loop() {
// Your main loop code here
}

In the above example, the ElegantOTA.setFWVersion("v1.0.0"); function call assigns the firmware version "v1.0.0" to the device.

Use Cases

The Firmware Version feature can be beneficial in various scenarios:

  1. Firmware Updates: When new firmware versions become available, the Firmware Version identifier helps you check if an update is necessary. It also allows you to verify that devices have received the correct update.

  2. Compatibility: By knowing the firmware version of each device, you can ensure that all components of your IoT network are compatible. This is especially important when devices communicate or interact with each other.

  3. Historical Tracking: You can maintain a history of firmware versions installed on each device, which can be useful for troubleshooting issues or understanding the evolution of your firmware.

  4. Remote Diagnostics: When diagnosing issues remotely, having access to the firmware version can help you identify potential problems related to specific software releases.

Best Practices

To make the most of the Firmware Version feature, consider the following best practices:

  • Follow a consistent versioning scheme for your firmware, such as Semantic Versioning (SemVer), to ensure clarity and compatibility tracking.

  • Set the firmware version during the device's initialization phase, such as in the setup() function, to guarantee that it accurately reflects the installed firmware.

  • When updating firmware, always ensure that the new version is correctly set using ElegantOTA.setFWVersion() to maintain accurate version information.

- +

Firmware Version

This feature is only available in ElegantOTA Pro.



Firmware Version

Introduction

The Firmware Version feature in ElegantOTA allows you to specify and manage the version of the firmware running on your Internet of Things (IoT) devices. By setting a firmware version, you can easily track and control the software running on your devices, making it simpler to perform updates, monitor compatibility, and manage your IoT ecosystem effectively.

You can set the Firmware Version for your device using the ElegantOTA.setFWVersion("version"); function.

Example Usage:

#include <ElegantOTA.h>

void setup() {
// Initialize your hardware and other configurations here

// Set the Firmware Version
ElegantOTA.setFWVersion("1.0.0");

// Additional setup code
}

void loop() {
// Your main loop code here
}

In the above example, the ElegantOTA.setFWVersion("1.0.0"); function call assigns the firmware version "1.0.0" to the device.

Use Cases

The Firmware Version feature can be beneficial in various scenarios:

  1. Firmware Updates: When new firmware versions become available, the Firmware Version identifier helps you check if an update is necessary. It also allows you to verify that devices have received the correct update.

  2. Compatibility: By knowing the firmware version of each device, you can ensure that all components of your IoT network are compatible. This is especially important when devices communicate or interact with each other.

  3. Historical Tracking: You can maintain a history of firmware versions installed on each device, which can be useful for troubleshooting issues or understanding the evolution of your firmware.

  4. Remote Diagnostics: When diagnosing issues remotely, having access to the firmware version can help you identify potential problems related to specific software releases.

Best Practices

To make the most of the Firmware Version feature, consider the following best practices:

  • Follow a consistent versioning scheme for your firmware, such as Semantic Versioning (SemVer), to ensure clarity and compatibility tracking.

  • Set the firmware version during the device's initialization phase, such as in the setup() function, to guarantee that it accurately reflects the installed firmware.

  • When updating firmware, always ensure that the new version is correctly set using ElegantOTA.setFWVersion() to maintain accurate version information.

+ \ No newline at end of file diff --git a/getting-started/index.html b/getting-started/index.html index d238226..ea3cfba 100644 --- a/getting-started/index.html +++ b/getting-started/index.html @@ -7,13 +7,13 @@ - +

Getting Started

Getting started with ElegantOTA is pretty simple. This guide assumes that you already have a simple webserver code prepared and you just need to inject the following lines in your existing code:

Include Dependency

At the very beginning of sketch include the ElegantOTA library.

#include <ElegantOTA.h>

Add begin function

Now add the begin function of ElegantOTA in setup block of your sketch. This will inject ElegantOTA routes and logic into the web server.

ElegantOTA.begin(&server);

Add loop function

Last part is to call the loop function of ElegantOTA in loop block of your sketch. This loop block is necessary for ElegantOTA to handle reboot after OTA update.

ElegantOTA.loop();

Final Code

That's it! This is how a ready to use example will look like:

/*
-----------------------
ElegantOTA - Demo Example
-----------------------

Skill Level: Beginner

This example provides with a bare minimal app with ElegantOTA functionality.

Github: https://github.com/ayushsharma82/ElegantOTA
WiKi: https://docs.elegantota.pro

Works with both ESP8266 & ESP32

-------------------------------

Upgrade to ElegantOTA Pro: https://elegantota.pro

*/


#if defined(ESP8266)
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#elif defined(ESP32)
#include <WiFi.h>
#include <WiFiClient.h>
#include <WebServer.h>
#endif

#include <ElegantOTA.h>

const char* ssid = "........";
const char* password = "........";

#if defined(ESP8266)
ESP8266WebServer server(80);
#elif defined(ESP32)
WebServer server(80);
#endif

void setup(void) {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
Serial.println("");

// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.print("Connected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());

server.on("/", []() {
server.send(200, "text/plain", "Hi! This is ElegantOTA Demo.");
});

ElegantOTA.begin(&server); // Start ElegantOTA
server.begin();
Serial.println("HTTP server started");
}

void loop(void) {
server.handleClient();
ElegantOTA.loop();
}
- + \ No newline at end of file diff --git a/hardware-id/index.html b/hardware-id/index.html index b0d4c39..baaed50 100644 --- a/hardware-id/index.html +++ b/hardware-id/index.html @@ -7,13 +7,13 @@ - +
-

Hardware ID

This feature is only available in ElegantOTA Pro.

Introduction

The Hardware ID feature in ElegantOTA is shown on the ElegantOTA Pro portal. This ID should be a unique string that helps you easily identify the specific hardware device among others in your network.

Example Usage:

#include <ElegantOTA.h>

void setup() {
// Initialize your hardware and other configurations here

// Set the Hardware ID
ElegantOTA.setID("my_device_001");

// Additional setup code
}

void loop() {
// Your main loop code here
}

In the above example, the ElegantOTA.setID("my_device_001"); function call assigns the Hardware ID "my_device_001" to the device.

Best Practices

To make the most of the Hardware ID feature, consider the following best practices:

  • Choose a Hardware ID that is unique to each device to avoid conflicts.

  • Avoid using special characters or spaces in the Hardware ID, as these might cause issues when used in network communication or file naming.

  • Document and keep track of the Hardware IDs for all your devices to ensure proper management.

  • Ensure that the Hardware ID is set during the device's initialization phase, such as in the setup() function, to guarantee that it is properly configured before any network or communication activities.

- +

Hardware ID

This feature is only available in ElegantOTA Pro.



Hardware ID

Introduction

The Hardware ID feature in ElegantOTA is shown on the ElegantOTA Pro portal. This ID should be a unique string that helps you easily identify the specific hardware device among others in your network.

Example Usage:

#include <ElegantOTA.h>

void setup() {
// Initialize your hardware and other configurations here

// Set the Hardware ID
ElegantOTA.setID("my_device_001");

// Additional setup code
}

void loop() {
// Your main loop code here
}

In the above example, the ElegantOTA.setID("my_device_001"); function call assigns the Hardware ID "my_device_001" to the device.

Best Practices

To make the most of the Hardware ID feature, consider the following best practices:

  • Choose a Hardware ID that is unique to each device to avoid conflicts.

  • Avoid using special characters or spaces in the Hardware ID, as these might cause issues when used in network communication or file naming.

  • Document and keep track of the Hardware IDs for all your devices to ensure proper management.

  • Ensure that the Hardware ID is set during the device's initialization phase, such as in the setup() function, to guarantee that it is properly configured before any network or communication activities.

+ \ No newline at end of file diff --git a/index.html b/index.html index 5c2bb97..0c3c905 100644 --- a/index.html +++ b/index.html @@ -7,13 +7,13 @@ - +



   

ElegantOTA provides a beautiful user interface to upload over-the-air firmware/filesystem updates to your hardware with precise status and progress. ElegantOTA is designed to make the process of OTA updates slick and simple!

Note: This documentation serves both the versions of ElegantOTA ( Lite - Open Source and Pro ). Therefore, if you notice "(Pro)" mentioned on any of the features in the documentation, that means it is only available in ElegantOTA Pro.
- + \ No newline at end of file diff --git a/installation/index.html b/installation/index.html index 4ea087d..0e72f2b 100644 --- a/installation/index.html +++ b/installation/index.html @@ -7,13 +7,13 @@ - +

Installation

ElegantOTA requires no dependencies and runs out of the box with existing libraries provided in Arduino core. You can install ElegantOTA through one of the following methods:


1. Via Arduino IDE - Library Manager

Go to Sketch > Include Library > Library Manager > Search for "ElegantOTA" > Install


2. Manual Install

For Windows:
  • Download the Repository
  • Extract the .zip in Documents > Arduino > Libraries > {Place "ElegantOTA" folder Here}
For Linux:
  • Download the Repository
  • Extract the .zip in Sketchbook > Libraries > {Place "ElegantOTA" folder Here}

3. Import through Arduino IDE

  • Download the Repository
  • Go to Sketch > Include Library > Add .zip Library > Select the Downloaded .zip File.

- + \ No newline at end of file diff --git a/v3/img/branding.png b/v3/img/branding.png new file mode 100644 index 0000000000000000000000000000000000000000..6359e749636243beab3fe24f2cae0edc0c267c1d GIT binary patch literal 45233 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

}m zb>x+=_o`5RNCI=H7HZNuF5K!mpG}!$=2Y_)j0^6R_+XI=yg!?F-7j%ZB^@u;Wy29V z5GCO@k9=lX>J|3&U)L|T^&oP44XMWH&prc_cqCPG*g={h9!QuZ!^+4QK9rsu?Yh^X zrdq5+?jX0^5&W0b<0}fiv9q^tJwvm3#lR32qwAqz-L$Nr0khONU|qLu{f@ob^TwyG zHcuq0C8JU-{10=NWB#ycr{s$_(nPO7bcWUaZqsweHCYOYSs+#4u3nAuUm@KC12LQf zeD7GBZa5SpR^09`*X_z#YYs;gMSY{d_ zKc6HA%u~638Bs&yq%r+9xUAsBa%S16GUzD7@L%*>z=~x z1BLquJHxA2k7pK24JEM!(BOC1`$RA{NNZ0N)9Qi8EqHIXCbiBfwf2{BOk z5Q{`O2=v2ckPk8i1wfz1n?N{7<3~H_s?g>8Cx0=abu-*whN@FNXPM$_SJQQu?_`*N zAsfw%4%ck*aHsbZzC9T+h+aLvPAs#oyLFf-`-Nfh=#NoJm^6&Y;8M~0a1j*&(0kKo0Sgr&ZtRvb}O8wZM+uYC9Xmqs;P zc}$rf(Z>q440OB*#B@IA*d%ng5>W(Kg=`GA#15``J$mBjY)i^(9qCK)`~?lA^Lrkfd9vsx zP@TiHi*q@d+u$4h>$kk>8Z;6@%s8QBo0_Wms)Z}xw~J$FLWO>r>0^=EEVC9e?T!ox z(TrC{|EY#)D36KpS!A50iToU6u`siAoPMKNh1F@P7O3N?HeH==brYy*vt}oI)J}$z z424%xH=bQ>+s#;2!I#D^>jGy<0;HJA zyrf_13NY@id6tHliUOPOYp(M0Gi;YT{#w-AQ{H~QcEHSvKw?(bR=UvXlc*-N-76>U zC`yNU7d*Culy6i$ed#QOg$Usl(!o?0b=Tl=M7bFaz4KMq2KD;ogr;gw+0yD2JqxyYT51C zOx+&NeD&wwZ^^Zs;)6(e`=OSBP*9f1d%D%t|m2~+KiQT1d(rRs#aOgCD;bk zLHGAu>SsDwv|xO5mitZjh;#BK8^&!s|GbO$5&GaSbrIf>JOjk|owc+;*2v?2VKwv7 zoYG33?eXFmGzup%iC`CP<{udHzSD2%r2I1nCd(T1{6#EmMV`$j?~MsKRTd zp8&S`;li#HX}YN)!CX(-;`!BfQG{Wra8@s0d&!r#JaS1w8sDFg_6r2RU=S~N`nBZQ$ax{w;p=!JUbgK&-qr+&D>>m9oUzNqu z^8l4Jn@?2>!KPuCN2B_+n`LSgbd#3ILc>J%bZg892iw&W984;zQ#Ulvh*^=z!8LVA zc%tKWC~okkWP;263PMs)UhHu))Tx8>g7OdJV2g?Sx zaa$0&m`)x8)30MaeEO{E?rOWl9hSQA+jrZDn^z{D$4dLW&Ze8J4s;p@HrG%~VB26wA&{@Xg*`%GCPKth~=0t~S z220%yR8lQd&g90T^61*a?CMU6x^2F8{j%f!Qh3>vvQ6FX6X)H^32pfFrtZDnR^@t< z>vvU}C3{TkB)21mn)Al%wrDhT`LonPx>^2@^z*TNhlPyT#4LJ+s=_Wz)~2`cW4AEa z-QC&sevvPa`KXkLlV{v^V{?b|@tSmK!`Ty|RbC`Bmcd%6#Z<8(y)BGfvSB_d9kw=Ae*Z_&y9q-ur2K56aDv+Oo4 zcyPF!DEISjTVFq#*&#h|o_wo?!_K7rzJ5W!05$k3chS^G& zZ@Vm}rTF$$0<262IyOeY@_iXkN(=EiUi7$^GeIM&4zl_5Sb(|dR(;#GSf?R@ee#Ur zYCJ=l!)}G92!7qh{E72s-xH^8O!=2=>}sF=k~BTM!fdFC8G~iUIJ0p*>HfR5gS+*; z;!WKQYne_bJmRmh<8^gMW3CEtN;V@^AwIf-=NH$L9j4943#b4E88PSkTO93UK10mT z;28I_T?R)BqJcrZp+;L6VO^-mjo8(BCn zirjUXAyyO>>I`GuuH6I6@IzTqxQ|<1=pw~u<*8evRb}o#0{~>$QDN>G1ts=-ov+ne%9v-JbJ$x31?cLGsm&mI}KOV9h=iSTORfT(>mq4{LVn_oqv zbc+Jpy_~DZ10qnmB^mV=2Av;3(dBxtu2ThW7u$cX0Oef#^Flc7s?T@qF3WMRfv(m=7=hlU}zLk~{0sNq*GB zR9vg@%Wzxp$wL$jc!-~16pl&0_Mvo1xbXQry~TI|y5;=UOvfq+x*Bzqe4oHv`en5c z?GUiG;jAUc{erTAgkclkZa1@&;d67GADp*iKcA|ob<@UZYa44D=y|4jOcZD+qvAAb z?6@BUyzwytOrAfZ04<#V?5E-KS%vL1k9Nzh?61grDaLO=?Dpvc;99?UktGQr&A_af za72aP&O0q*lP@^sPqsbrHfotn4;3MF(p+l>u%>l-7fSK2eTY|>-~H5CPp%4P55_DINRv_dfHY_ zUJX^+EXzC0vP)93oNvc9y#%}=6)EyYcpSDPKfGv&E~m8AcLL;UHCl;nmFJB4OXP0j z9luOn)U>acso7GS|8TjQO(NpyS&80|CeMKII@#q(MCfXy^4&7OI`b}%YxvE2q_Vb; zcznId*64XcwBna`Q%7I-$3|IR4OK#yZOc*5nNeR_S!O^zZPIkVf(^D(S-u@ITRgM; zY{`$*x47&a1Wam11mF?{=2*72G@3h>)h7xSxxC7`$>x+kehlLjb}6tH2TWoh8T5qR zZhUIJ>*n&fH9+9N>yc5MLK&w~mtL+~vCgDN6*dg33!8WL;=E00-xs_&nj2A6d66J= zK3hIqYS>wFYY9l?4sP{w$PBo+;ViE#&}s%2%({7;G3jcamFZ1D9B9hfx0lySECs|; zVmyy=UmLfA`j;#$=L=$Ia}BX+XtjJTn{IIiE6Hu5$MV%;x?z@6b~Q&m`73&fMoZ-b zB2482Nszr+4IQ`ND9&rK*@@7BUmVqzB~+(}^hrM&&gLbP+_o4>*IT;B<;!C+vK!Bf z%Cj^NL?~#y#LO|A5-<7Yr<02#%o3e`p&wEZMlTrK6-iB7Rqgec;g`DTe_A1naxds} zaJl&H&IHlaBw=dnYyqr<1X7T`Tzb5?N(9X!vTdm73qu{s^zAE9E=zc4xAODex%=k( zHp1E`@<5Ui$pqziyzOE>r`eE|JC2dN{0zu~2^{>Q3?rr{Gk8=zva*Yt?le7;`ODwN zTmnIf%7)Vu2>>hrL{{e0M=f}%4l3{L=iBjh9m<=-PD+l=-Kt8hJIN~@PUYxg_1|vn z;5nHY>$<|7e0*DSr$ukTw+cG540k)8e3a}4%;_@oi)St=?x{Q$su$Oqrj3j14X)=Q z{8)=X@`)F($DCwTF6Sx@L;%48MlG@=kFL%qz`>|+AS|jkqQ`kKiZG;k(cP?FS|wZL z9*oHyPnhW`5SCNN^V-bU+Gjf8H|$-Ja^;ZH@zlthmZj`{BDZi_jq+*JL~5YB9yIn& zt2D071h54Flz9jF;y;OLQ%9a0GNUuG=yo!qm~A+g%ZUU=F39XLmX?Rq?$ufdhkk?E z47oVlaq+emq|+Q&;T(evveW~QQf&`i9l zus}b_=B(hRwXOUWn#7$oKN{4p?(khg=CdK2)&_r$#b@<;zsa$0CcQJMHnPJ|DOA}YHF!B7q5~t6DH6fY%dV~K_$|t~ZRTg4gVkkE z0|=PF{;)N-Opwh)v2OASX4&|@v4BpMH)~Ug&P1P9nUTK*lQRdC!Sco3X|d<#ok*O>KspR03tu5vjqMt9X{$EIA@h% zarKRz^X00V5rCvv*Nqs=uy>Ntly)R~T>SRsu)c9BJ#|mdygl2dk&ojFTZP9+!aGDB zmbef|4@a)fK3=|mJo)vBjlA242EEmfkQZ3H)~A4fgU<`>b=LY#6}SwEn98}{yOVGj zM>E;(q zwjc|+an`xo?y2AW?6na}Q8un{jOOLUif#mF(kz zOqLW{lxR*I+gDlx0YI_ExupHor_Kf8;}cGf!@{bxXbV9Wu~~Vo`z$wlxV}+#0 z#PH8+BqlvC(0r?ir>}y5w181rVur`cXh8VX(sA=$TtjdELze+3oE*MA1quWMsSQP6@~GhgX*89L?nt;tTu z1y?qw4yiB!-7rirbH>Lk50Jz&kDnx^&_jE8p%BGTT=ILwouRvL>s%s-$E=d-TGjd!q^Mt7V*$j@@&bpsn3 zftkmLMsWSozfSkq>d_2<+1zQ>#!0r14q2Ac+MhF6j&zC4_^1y>7>_qPgFhpy0s z`BdNUXl5-Yud|b$%S{jXQo3iz9%^q@^rNn$dsr6A`;rsRvGI8>+E!WL6JDdst8J`k zq#~xvOD)qD4t84>HS7r-szESDn-qC~IC~441354G)b>WR69S|$i#9+6_{qRR*j=k> zWh$lcbR?jVWFiLAgNn%e?sQ(NfU$~Rjh-dL1Y?P1RPwtLIdYBHlkJy31n&| z#F~vPKkqJbKH34<+Sl8}Z)?HpHBh+wZKawaYG5i@bCA!WcYC;2C4UeUb#>GHD7^{+ zjnRI;;k>4QiENT`-v(327n^i%v*h-Cfla@dR*_y#FUxzHlS(yCsD?|u!fjbtuC{zc zK~Nf)5kmsF$Aj`(Jt*(l_{T#dOv`M1q58uPWRo4`gPI+mv1;38u+pQ4R+e!2H)|8%w2a-US#K(50;Tnj#7KOm~xU;bWXC%?GSt`gQoPD*QRt>!*H>aKzkWROCf8AmgumygI` zr^NBEdNg~je#N|})4CsxcD>N{WQ;4Au@WEdpVoxz)vWjU;n6TE$<>5ZicJLWq6xf^ z6~FUHQ?c%eWJvnbVlCis3XC>H^;6GoIcpDKlZytSWDB16K84VQlsV;vF_N3s0H*X}L4}2vU3mN>>*inMg98r3Qs!qO(OknhUVvTHH2?fhRMy=$$e=Og6Q&@fFOfE{4BI^&{9dsz%ij)BD0L=i;oEIG;X*L}o}3>AniV zp3|4|dKSDR=h^%tIcUkIUqe_(1&y&<3|`B`iCT}Ar2Yj378#VXrXB*o0$i4@iJ9ll zY$#1UDMWBJ^1cgZH6zh$5mBI>vkX>#0o@#KADQ+#1NWd&x=|?xQxt9oiO?i(GH2*$ zf(n?jD)%zqma)e8lG%OERLj&*ws|u-TVo%tTE%a_?!q`@0TL!qMUT~lnf~sLCf)vI z2uZLrEkl@tAMrtCv7?sxksccbAg~0*+R@j9$l#Zh24i#oe5~WRjSDh<<7*hkA+-pg zbOBRw#&8vN%vAX%N+GSxN|_nUtf~bEi%}AiLh$YlX8#0X;Weqhf5nRr<|#s%)k3(uDKtG;#NIWqPsTb|rTO$8B2T z_J&~y;k9dE^x8l&8<1Vgt49OK=Jvvcpxvh+9Xy`+yvpWctt!?6tiOQqO=hv?pZ$)Z zwSZhztag}YSoI+3bFPscfE6({N-p<$H~Wk_LQ0+g+S`w>%It>Xf>IUbLGk6Csi1rK5* zIhQ2SchO@2Z-@vL4G^eXqo|v?^1+c14xLDZ?X(sOWLfSluo&|m*bqp z=s48KC5s3<+0TY9#BoWZ;!vb<)=|7jtb;^7dcrrj=>foQ)v@2S)EXBf)V-$EwXD-= zx3@q;MwDAtR-=oozgoc4cdmOiyiO6@hL|f2$O=VhG4{*DnQ$TUsSN+BZd)M&!tm}| zF)d8jf|bgm(w^KPfQ8+Ww9|2yCyrU{HkSOdjoe8ynL)P8UUxrr4z$6 z%$vj8@&Pal#zn~L=%MdWxO}B2kSvPBm5djzhz;W`J4P3c<`5g?5DZ5yd|}L}G5AiF zln(dT3$6*Y>_{_=M|C+lQXWI&JlD>5--xIQ!SLP+tC5aatS!LUhVW-`;33Abc;i}p z33r6jePHXRs|~2!@sF{qU(={%u6He;Db=YfswF42&`OsG7AkzV35=jWX6F_r*NyiG zwN0q+C;NRt12Mxf@@}-tjqT9=9?K#O?6lXg-ze2yLJs6OQi4GBs-h13iP-yusH9YD z^_Hrr^-)Az0hD(9qEOgj0klK^vDYI3YG(vVJhc?e9awG2cCZ#DIA+^bL%Wimizb%uvT^%as`WvHa$CG0GK})fp zU#&?C8y!rWo0P9l-^xjpl{LJqDy`EA$=?w|BZvIR?hYv+YTjcX7pOdEX7ha4xnU=C zKIiG#rn=X|v*`AqU*bTV!o=8h_?QZ}s`=n|Ro6y#a>#Xc4_^wSv1bLX(3gl9R$oq& zehiV9Ylhb;g1Youn>+fd{Am&(QChb&!Kc<((kuZVvaj{@CBSdWZazn79A&g z6c!>s?obRbC39LtJX&zwla}Ewuw(-~NV`s%iZcb<+{eQ3P!SFeeW+FTvTmK@J}VF2 zv%hjiWMDq!sspuw!sJW2l-$nBgQpH}S#sX^lpz`xYE~K$Ht8>a|LOde({gn6DP!Ex z(NSA8S?TGE?NR^6legjnQC6KZe99KL71pUk!wR)JnZXg|V5+CF1=m^f7b~>xM~9uj zE0|HlcULOz&#Ne*X+?y2mC9`JGXM{K<0Wkq?j;ijxXMPPnwqG4SWatFPev4zYNYet zSsT3VWoqX)2Y2i_%I%s$_VXiIwjORZUGWlP%zUzIE9045QVJV0Jz)#2o z@O<{b%5MF&O_$`{qym)L#>Jd~(I(G(nPje9#-a#&YA-Q|$Di)#(|10vGUAC*$)iNG z9P=oHso4fPMo_ZBwNG>kj3SoWMzBYbyscnn`1zB5*T)c0=f`vk{3;R<4Mkf>HOhSK zQBk&Gh|rPLr6`D%`eS#aT=mJYtPlY&xaXPTWu8F9#9mH!j>)ad=?cIvk&zgR^nXAp zYsJRgPE|K!y3rp9EjCDSA!e%sm_qTr6&Zein?QNt1aShhX)rfKAd9kX2CMDiFq{pI z^7-K*dMD++8K_eVB>^%lJhQ2rvitY#75o=5VDp$d&!#LkH-{9R}l*H#yE}yA`YKtaUrX4`2o5W?V$oyhHrW zL2GD{^YM`#sH*&s(i>Wf9O#aIkQ||SXJYtO5-1o(5+!*mDBKM&98KtYigyvXmqR%z zE)QDEwu|Z{1}@I$AL?11Ywo)YHY&!?opze@gc|Jk<{Mo6gVPHFbTCys4nF~aGlz^9 zYc2^?u!a~JHz&udP~!qX&m>p?Yw5wR<@E*AbfGA5)~OX+!LeVRMbdkj88;}ZAb!)L zxN(Wu1dpM(@X&Pm3CrtOHe2I`@fD^+)LXw{2ba?H_w)uOrf9ravDiH3-Xs;Ayu6M3 z#``tvI)?%?7BQ?KqaMMCOq+$)CBhl;x{5~5ORFisKnqd20yXul8#}x+UWb)1NvFmv zBX9*t8VN+(R;R`$WkTuyxhV&p{81^oAgpjU7GJ_(Akou40M)7m&A=8b!FstRfqDo>> z9`nd`Lm>W2Id_Sa8+CODQg3mP1*ckP+TK{Yuh8*{Y3#)sX;~sG;&1M$uR_UgN4XO_ zD$xT-ivbD;kvTmxmbrhAZRvWNbFMi03W&619%E68$bH8m(N3)eQnq-zL)v+|O~3Q^ z%JZ?*ybF+skW0+iMy{L`IBUbF2Z{}iq{!3C_SJ&&{>b!@tL&&2%`2eX`(eE^AYR1% zyEgQ6?5K}-0Xd4b{|EyJidl$2PWrLC)`|(ySi+JA&a+2Rj#@zCY(Vjxsk-toI`$`z z5HR< zt1-tcr5VtBndf_NC%NvtIEB28c8UnjuU{RXSrRUgIda_$sfBDR)okz8F@0*X9}rd( z*d*c^3U{9>YkeZv1;Dt^SxB!Rieixuw3f}8cdNKva)_9p(}M9%?8clgyIrs2giS)^ z+_qWx>unbNR7&-ZvPf+pPdKMouA)cQnj|yNcIG>HU9Jp z57+$~3_9UZn5_Mv#s$>v=SLb!ZG*-Mem;;%GV+0fNbNlTR`5e`_*2*w#;SGjb=_V) zWi(5k)GQl+cC-itAF<_W>ECsn#pB-hrS!-EA=(7T(N76lohfU55>YMF(DJ-pHA(!s zN*>E|DopQpxA5p(79X_CraZ#dbVJRgS|ByO`oJ*RtGmC;h@#A2l&<~STWB^+Fjmwq z>o^LyxNb*ub;8bQ&da4hHUqqX%GWbN|4}f|gYh`+2WvIZ;LyT((2J^`qA-7m=h?l@ zNF4eiu9ZfkT4o!rw$a89o0V`LnXa?|=lXKf&Gl44sTY!jrmWN^c`T%_Cz>20i$HY( zAevT=_fxo5y{3_^d61Ze{TQI|E|LqazTUg<0ZKZ=P^DC(Pm2#l6d>2G>d~rh(1~wY zbC`F|{yBv|R7=d~KT%eYnfS-t)iCE*#o&x-NIX5XBVrDkbAP?mvh#{Yuh4uw$ua4s zpis(Rp}6rZPUxsBJt@%rusvpF(z}yCV#P^hV?Stobu7AGJrzHtO(yKi@Qh8G?@(9fZv!^4Z(8+OBtYO~GJ}q194sdIX6Grd6j}J(Jh%-k9h>-F|*JqPZ z=Eto+o>6i#)OxYZlPlsrZQweK^O6_g&}+uyu%5m6>MfK>dB;|_b5sq#zBwLPZT5K* z&Qx44V>#EV-c6VPz#s$zg(_T99JM-!#2nwrg5ofwj;ZqX4JB$dr|0FX4o@)~ff|@* z6-cXUtN@_uMZB1MS?-cM~-7UUkjQDhNQkwY-02hVsAx|x~ zP@9Cv@JJkNq=y7(fUl2CfE^6%$Ig8vN}VL02fuyU%O`R^z5|#9ME|9a&j9<=UiUWf z7cvry@PxK~Vfn0>`gi69y}2bIDJR%;b!w6^^X}r=1FB3tmqglB6FQEGu$NJu_0wfw zIKYStTyfdeQJ?p>+_Cw6Nu)E_e5f~NbuPT}9Qzl=bN06d?MDEwjH`s49%m~q2zb$u z2U37tQW)BH1S-See@7nICDgypu`=iAW+R+0*oFYh} zea-LXmVWqcO}}R)qZ@3JQM?D@-pUGFiqN~YfIn}S$+$+7N zWsi;of_aI{37eCy8X+Ad+3?)#1Zoz|3O{uMt=dfL?(uyg09Q!lzC%6PXS?2=khJV; za_aEbRJ+d|$ueK$mlnBPi3s>azh}6+&pF<}$Z+Vuw!0!p!A`Yi(Ym+plsLsTWL6fk zU)f|~As!SBsIrNPK>?5fb87OOJ#d2==oc-9%2W&*ljLe-)8EFj4yu}DBv77E7PDa8 z9kkN?Vx1BBX*p4JJHG3>TNzV-H=VDQj3&BKd;6r{^9I%@qUU+?8?B|TN(6@Utz|CG zcp#3U(%d!3(KH3aMQe5jjVTm-)+4hJeY{A3T#QU@v>3m$t zWEmA8Iii(PEur0#Z@1dM9DPDAz}MoHXaZC!AR>{PL|ykYm35QqoWSGIH|!1;2*{q_r*)6e-EzES|g-iyaviniG%}-P51*SCQ=;=i30ri z2;AnQ>HuWCJ6jA;cKxR&qgnis4303n9Vjx z&%4uXw~H2ErJ)q=q0?+30Hj9n9(|Vbjh%ZRv+{@vmyFq^D~VmB0Bkh6916cZ7p3A^ z3;F~_;xz8Xy_SZQMd!-0HMF5i09*!ARW~10>=mG77LuE-h~<^I0Im0&`bMDy<$+b6LJjOaA{bhpjC`t|voNa_7zmw# zk8-WfIfDHh_TxDnt+RBfCo+-5zkLHj9@9C@hZjWPnbIYM>Ez?N{G;V} z0{sR=?wQRg9H{?85*Ir|f4wPxHg_D>>TeQL+3gfRI`J)q1k0cMyfJCP4mY72G{3t~e{9CEsf} z7ja(drjHN-duqM|>#b6{TSf*sZM5X5MMp%?0KCh%1edK`4vTS1jgm#SQY)Sj)Ajzu zWzDoDfBK{#7uJ8q=70h4=o8O{my4&fszp}@->vrK7s*_GneJ|`AknuvGJ*VP0) zDP2K5)*6LHz4}8@(;aFR$nqV~)nEO6^$H_;(}9@*mrH}4%>t+%^(`9K=V<+|3({7U zj%Ot#>TGp47z~U7^=n4GZ_|t>OZ0uTKewQ0#f1BZM}dGu4+wCmeq;i|qT#Y!epzN! zdR)W61vmBXSGWW`Vz%L{Cy0JW-)z*FwMRffVvyI`HCw123R zY`XxTgo*9??+qJNu0TXmem-xq8#RzDy0Dq$vTaorSXuH394B;1PVP7^XXM(tvgZB^ogRQ#lUa|~`rz}VEm5w7CFq~8PWRb-P(cjiDwRT;=L;rV1$o&P z@FjMJu^ycyi{C(2_}AW&95Te{u^cj!{_r#;9_xc&fvn*`$S7f519lp=sBzfUtN~)5 z)$Z&hnd$0^3|(aU91g_z$LrsSbR&s$U8K)u?G-mi>Z(pQO0#zWWmN*O6OPleqP~2! z;%K1C0h$MPwKyw!W+}4irf6j8CH>9F7E?tB_$*_)YX&svZiksHt+wjJn$Klpx}84m zRWB=)mKwf9W~A0@Sp=Nt+KoCttU#in7Ml5SSwbmYLSCcBF0){8LZgfho+~xSPx!Yi z3=E0bBYF&o2v&#c}W@hi3 zAN6yP7sp}gms@3YRR%%DCs6y&1jz$sL;5U zR@(tRrjP+bx+=E(W9Ml}CY#IVFj3XKOMHQDlgL(k6SrCT$@ILHI--@DNWNu|Q_`1_D(0FvjRP5K3k<`^uQhbZxjq!M83oUf% z2UQtTyX~t7k@b@F4l9iBQQ*EKX}!n~Q4u;X&g>r|e72`m_ni#X6apD5%5B+<&dgug zg`Oaz^ZaH9S}oEwPgqzpTE3%FK>X6q*V6T{KjG!a=0^0Yp9m~Xb zNL?jZ!2dMW45>4}99HnOl%xF%)_aL)EZvt;*IoHva`v;C*$SGVrT%jF=>Brj5K)I} zZm!Iq(^g^e(g!}##RxLrjQkD-qggdncpaRG#`N^0ti~`i&o(Kr{6Fk{byQVd_pTx! z@ggOlfP{35bcZz3-6-89od*S#ZloKeyCn>|Te`cu;jV-Ee&6qoaqk%S&pXB$3Y)Xn z-fOP8o*8SdXIa$cZ7v|bd5`^ZEFf>*USzm(*dpZRnGKxkDb%;3-s#~oiq*a~^m{i> zDk5`Vo8=fRoPU(#d-_Uru}9_Q#o65-amB6+)TDy?Eb~}9OoMz2;+~XhHh*< zbq+Ep-73_IV-5MbJ`{zAT^O<`uzZ$vp8)D~tP+D~yl@$eR{v>vZowqNshcJ{dCZ?- zoS~d{defnIu-D4fJ^lRBy4fvBW@|7;dD6RS#_h;S6a{~KXt+b2L!i&lI5W?43$p>N z37M|-@af5wCc@o~61!efE{MDGQVm7}bDwhC%>4NJX^*9%4uNVtX9$aw$Fi9CR)xHL zUGO{jS1*Yxdw5xwOmvMht2278r^r3|j=55ti3%6{k{T*cZ8uK(m#^~2H>)$}n!-wF z#oOpUsGr4qf&`@j>;^;h@0|?#Z}{mfZeLVN^5eMKkf`KE`fz44s+Zi$wOV8Uro(C# z%1vii2mku${0+Q)2Y!V*#jvwxM_h?VxOs2OxJn`UvskvU;Zx7Mg0bfao3Uqu?d2t` z`Gy1ZTDsO=oWUATvU7Tn-P13yz*~ zw&AjghE!Ao+ntOCQ=1hIq;Q+S79CZaXA(Ea4aVy}R*|>_&T2Xnq4ADmX7{VJ9Y2=t zFucB;^STOZUwHqh28&h@^IDX2s0Z<_@83zY63m*ttVB)hm(p zmPaP{tjCu0{l`ij4J>y!LeurRexduK4}leig_LZ&iL>7p{;lqjWJThytN1GJbMWok z$G`maId#ZR?Tx_`<-7S`jZe)#Em)2XF*Dl_vJgCr-c^0nKli}p`5N!B*^?|S5jL6o z*UfAgno=kW{@BLrb8+gHqu8UcN$=(Wmcl^2!^U~ppJuR?8zQzD%A~1IfSRpA^G~D2 z_$!Ok=hKRhIfOmMwwhI%bas@!(0{F|K11RSjh}-+3tqac2HW{+z(*c?4Qut3e1E=l`$l6G1=9M|q*tr{ zeKivzk_oUzaWj&%EqW*&7F2;!8}z% z^u~T@OrtjA6mggG7Z<>oO!~na`s^2<^=l}S8u)E1+~_^D806NpQgUAoQeBfp<_!%u z6_zd9TAp^yh=D-={_UD{Wh5pFfge5<6L*7=iswUSS=tEt&}31?lyd z7*K->bVOT-&ngTr9TXrJb1ynm5-J;l)F$!`?M+h5nAH&_?R|#|*({>iMl2)XI3>-R z$#v=@7PiTo4hyh#u7a>Wbw1Www#mO29?wwU6;7sNq<@ITkfR%e4@}Z~u%Y331nJ^W z8*>XrjdbRCC?ag_t_jU7%Up*=tQXBlo0Y`ydmSUGLyJV}>Ns-a8Fq%-i}J8wHAIN0 zQhKuH8MXYamfw1gpr7Q`V<=6hM(*L6B37F)jPMC?c+Ye3gOlp)?2F9i^xrXhevF!Fq+lf`}~2Pd(u$nuK+`>dFvEt6-HV zPe@gnZV=bsZwae)cz1&AIoxJxY8Ei68GM>0X=8F5n_YRNQLcq~$+54|MrU`~zQ56? zJkd=2z^(}AHY^4`@II~Ok$&?yl!!JO<@=J+*t<6?e6#b#prfk9Tw0+fd zZG11IHENs1x@@M%2mU=Lx^zr>nxOlTga*kzm+?$hWl-GUZkS7be3(ycxCwi^^)4)g z6gY(Bh*2+p59|h7Z;Zkv4U4fRnFq>>8wbi)28|Kxh%Z)Tj$h|FIeM`#`?m5twET;m z>I*hcBH@FkR~W}iJ{Upt4nyYeK=j;E#Kzw@sH39bJNC_&cg{7Gh zN?L`e@yqhvhMmKpq<>_zGQD%`)QoEobQDcHJlupsmbKIJblg3)WpylwgN(B;5I&;b zo1uJC)<|jyTQteujxLuvQHtVoac*vfKfEJE+~Sq%tjt&qdr6s6@8KGqwPvBf^5b0-HYKVP zO^SiOMLF9z6GnT%prS^(XvV(H`U#5z&D!@3XWA}P@eOxc=!j39{cgcvp%dxmy(9Qb zr_8Z-M!&Igre*VG)ib>a+}y!oh>S-mG+s}&=L(FJV78t}rVEmc9~RU3Y*ZtX=3qZ$ zz~!cF7^4qKll~B{pmC=o3YU2+XCD8!k1>>UAcwB&g*`E`7rzfcB%0@9w|@ptz){J7 z;Y=*nw^$`*civ=49N;gsuBo68ddK8d+GrCVRj%kJ++eJtgo5vnV>a_$=#FRtPx*6d z6nyu3b(i`j&gNo`)i8WqT~4|vRw`8B$F+lKN7a(^-fw+FL%``3H-5D#M5Ud7JFz>y z=2R=;;bG~Hd1A%)H=G%gjwgPG?2xqkmnn1~P!e<%;~qSd=(Eh`JnDl{YMWl&Zj`Gn z$7blWRerm$2o_+S(09s>NBub7*NKJR{RvaRV=wjM%Yx9C_i5Yu;h0KJzwBud?)fmE zH@#9x|8b~BQoQS`W>18Thx8R)3qMs8?kCIMVevR$y9fVpi-`6&X*1bn1L%RI@h& zvo(IM9;s(-^Bw(0|2tFU0bpKU>3bDB&~vei8(avQ^DBW zcb)X+dR+G5z?oD!e@@nZollzIqAtEOcdwSL4X_Z2BM`|d15M7m+w*76^sDjT5%rYT z+bkH9Yhgda@(kpqXUc`A?}cfBvC!4bhRpwCVS`V>0XGo;-T{W=B#^%XL>`9cG+yh! zx1B$gYm6?;4??k@OK`wtCrG6Wy1TNGP4`$c8!pI)bI>+YtdDlrB9@3FE(-t$y`Tpx zNeB+tanR z;j&8)9^&H&xAoA&K2-p5Cet>J3Umw34}s25C!29B4Gtv@*F@=|0)fbk*iH!8jXfo@ zY#X-K%)(rt?QOKlkq%)JxYOcn`Eb;iUj&4nh6@&psec5TiflZylABK#M8{&iQ2^2N zM8U6JC9ZHt*C=VUc?}=rAOBFvjx{hkKK0>`CZIv|;O4^1KTXVG7Ljq7n#_FHl-R3X zeb91yE_X`Hzt@0MGdzE>O72bz87{lWY~JDrg_GAygS#NSdkW3S+_9qm<82e672arA zt|`;*@^vndtPAR9wmOrb05-cNFbpxRQC10!jFmf*lbPe<2>KxaOyMV=)8FLXZk&kZ zR2X1UaQe#eCHHDf{q;Px!t``d@Yh8szZ)t~=0WCdwK{ew9?i2u)hj#|;dC^B-vx9g zbL29$;t#AulFj61(gg*U*P4o2*lf^T;kti|9-#a(N@q>m3ooMOoo4M@!5$PI?`={O zHNW(u8EDyLi+gI+pJtTEW;#ZcTYTli#-;DHJS%J3y`|MrEc|9nbw>3g=0aXS8HeGj zdJrb5(f)lD{1M^S9z$4p4Iq{BZPfDLnI<%`hY)THo4i80pmB-!@PQsE1nxBjX|5%W zawE0}g}`nWzz1QnSi5Q1N+?$u8PUK{LDejk&DZn~xkP#nKls)mv$Z)1*^sO0%y$(x z=SOLZ%6D4A%5mAdN6PUjB)68{gWjZ4o{swPuR(j$U6)M$r#B{K|C6c}HsZ`uo71(} za|(3Bpx|e%!E#^%#m6CLh(i}c0T41+g*piH8|y&vFthc+&@fm|!)141&q0Z|ikVUQ;&aR@XaOJz&)5&qYt0R_DXU zps7Q`0Fi&97+5z06S)SR{(rA%d%%1_cj^9_G$mS%DpDHwcxH}6K>!L>E?CaqF=WZX zVj<%rmqBbYPLPaN!tm!wvvgw%7OOaJK!_X2bYWEf>F>_mf-!(|I~`m5E-PU>ZZhNa zu7aHaj8p|>oY6WHGJfR>EJv=rcu)*3dwq%-hcwWa$zgnMexgwzmNx86w_lP46X*-< zf5O>nP0&^wjHp&eUxUbs zni+oY|5h^|QOh^`sxwsp2!*=?aya6eC8hfU5S#%7TmVt*#@PTT`L~%8$Nme?OjL$$ z@T^CT?u+yPM$KezgMmSs`H_YC`6g{xMUBP24oVi}R~L`UoBCi{2*wo34c`o?&s2%u zX)$=LQEv~^GVz7MKF*SYSoR)h!8X|j;jh<-r1=kP`Ag4oUNGfa4ma9Vi_OY#HrvDx z7z|~FFNL7J69t1pK)3hD5g?Ksg281!v%~!lEqkM`Hlv!15>NvxI{V9B0?Buw@0C7; zlmLks@HqMYB~llJlfCkx;*^Mmih;&mGz%MU{t;Vq^pq`Zc5E=~b6)`+1Nea#R_g2r zAGH2>!H5a?XRraEF#ae!nwZ)D0hZa*wTRD^LJcN8xSyWVT<}MP2n7M6OITYL>%1(8 z9v)Tpl){~s`nitv2a8Xct!dSOwRO|#uqgp>2$~R<+bgBPgXY6`3+%f7jO;_&|HLu3 zA&1`eL*XhzjSiax>5x)>4gBe_2^1MqY4Vo$UXk{3`z2d`)w+L8l&9*+LbV?X`UsI> zuJ2Dr1vCFKn~}@DnsvNACdmS+SKSsF4J=-y#5JGuNEq!3T2Dqm=RV92)hl#)$Ov9zd~9y4e4~@GS`Q{UYEZ z!w2r$m&7%N0iztTU_XT2a`o7GeC;V-c*3QL(+fq8_dx#Q-!hEc;M5k*jWy?hZKTG+PF8MDFMoQk)Le<1?UK~gZq8Bd$zZ~wLfP>m3i1pO-eWTA-r z@5}YTFW3v@_?!C$h%5^9#l(61BlF)cM-<`)+E~D|`3|B*&7kX_#&b@siua5DiL+yH-z)`pF?cH+W9MDuc~QBT;H zFJGQ~INIbgzA}9=4pxOp;Nak1j8~2qBn*C(BQZb!UuM4W+KtCYhUTlv{iOT@&Z2eU> z;YFKZ$8|UsP1IY9%1;i@jZ1F+8F|K(uVAd6VXu~Ik0j-g@6eTEa=4~c;Sh4Zk9iJi*R7$(n=b;^5PTPF+4ZBgZ#sd88T=^fOiYepSb3nb5;F%g|4%WXAJj%_tO zn73A!lYrnQTcKr<$7~ixZF?_qNdCGW(D+pzo;1D|K1wWiu$WmLo(APKA!mnLQ>9U~ zQ7rV^YJlM>+!tjM{NA3U1b&x_l}Kw2tW0Fs(LJ?w?NLW}syTGj>lzmdMwE&g2||=o z#>rJME~%l_s$qUrx_>qC$=SbX6Ev?ce&QMrNZcM?5g0{*g;gY)mZ{Q>>%d;X)aBwH ztbtZD>P%NQMSj6!3939wW(s$Xt76X*m6mw6wsBT6rQ#NP_?F*BT5YRYZrdCsE*=pW zT{qO$wTw>tjl0Iz8I4Y>5@BIsaiDHiYMdS=4izNSy*-0@%igeQHOVXbhTN6GW(t$V zbrn71dd#&gPi=PF#=#AgDnIkLNxVMNcypXbuSMFTayCkF!r!rde0S>h)#yOBol#p? z+ojRh>EMZ}($1EvsjhJkK*bQk4cU=_Z{t!Kj-2=?cjCEFjOJEfVs+5Br!nlbH|~kJ zyBI9%@rIf_hZo(?@k-RL(DMz+<1?XF!p{`_bno5jb|VS*JkR+mHD%Cx4#(8y+pH*T zI|x@@@)Ipj6Y%zB@;kU~JGLwG4~UM}0~M1_E+^Lst9g~e`J#-<&Z0h#P(-m^UCa`0 z33i}x_p}x7P43lRqeKiZCtYk+!(>DcPj7xTOdk;n+OqB-Y#Usg$MzDl$%^;i`? ztJGhtg(KW54DDBWZ+3;S7*`5slG3)xV&EKq_APWe2$7y|hkfjDY5A=uL~l7TVxwcD z_dZ?2dAZMB56IK}JmW>UJva|D%brt!1Qei#$g!Tblp$op-|KLFq}Jmz0cFxONG|c- zuvok zO*px{q^mR>jM_S5iRGkvR&=mNp+8b$*jMycb;wR(R7uq1dgMy0MF2P-`3_lh^T>UK z_w^OTD!Y|(m77#3tN%CwFOj~>#s=;$bJ2wzE!Lr6g1r_&11L$ljO3u0_Z_stfWDx= z^T=0Uk87in46moM$spi`iRIN_lv=)ChZDBmErI(91Uis{+BS9^gU2EHz-6(SI)xwW zDk~0>D*L>yfmF$UXZfM|BZ|kPza9^PMOKYgtQ3dKS5ejNPlinjn?q|wx_unFqGq$Y zSlenkb~)%R97kpu)QvAzq{=HA^xGv5qth+TuGsDssLgBULw`}SE^>;H?hh)5Y^JC* z!al<*jx&$ntmXgka|W>xXw9%yZCfnbVg~bhSe_BFz#6}xZE+`3rM-*$_O}&^q}5Ft zUAo?VTQI8H5~DQaiyaF5FJ7o4`>FMha|lR3SgE?h$ov!RIV=eL8q$8jMGs%VGQ?6R5M#k~DfkVhT&n`nQY6 z4-eeInu&?EAu}-mq6s|y*t=2@$mnr@g;M-P$YA9~%hEQ1vz&~tA@*L7HifXTFg?fj z-^A+>)f}L7CGb@}>{<|i2Er5HKA%w-VT~1gK$k}EI{L5g9&r>ZWObK#e04ch zSk55=DR+H9aiL`n2wqax4{1Zayz|H3 zRn+Z>>Q50J%2Dd*rCBIJyP=MIrw7PZzd?cVmkSp|BdZBcInng+@L19&Rq+Lhgb!pa zu*Ej>r=6sL8F7~~sk(rbv$+<2q&|B?dK3on6A(Aq6F75_gGGx*5~>^L}hE-dm(7jEKM zqFUGoUmw^uu$d<_xFR6R{GNmX_lv4&Xd@#c^cN0o$|?Qpa`ICU+R!M(+5M3}v~3eo zFf1Z${yBdo4#4F|sz%yu;xXW**jAWNR59wK{(fDs)koZGRE}xY(w43bLpN#=P0g?a z>GoeT1_IE}zojK#dNgb|`%CaQ^5K64^kjv1;}3Y<2oYrZ8O^MCaQ>nP1z#5e(N4hD zSM7gwgUAdHjPAlP6PGCh!e8$MK;q^v|7u3R(yJ@TO41C_$OUZp&a9!od(0m_NXfqO z8^vzatpuujaofBjzn`yP?WJ>}M&Gzdf~E!jR)gyLYp_7?)x4Y-!?)>2q5$J{Gb|Bw zjrEsu)gYlUX09isO+}LMH$IrtOcOyVCWLNL|Dmk>OUNhhahR^j?R>CqB*z;^*U^8l z+Ti=Qib5q7q6Jg-#Bk(t$@I^Iq3_xQP(3lb_1%p$fBmB$4OG}+(yHKBVcL&Lv;)$Y zD=~fnzn*^cb$$oL1%r{r=K3*U8e6)B?)_W3$k4fiZ22_$&lAw-dov_esAwl1+bwk> zPPbvhqFDo`o_6FvK{*i(oUN_xx8?bHYvn07`mxemp2YtrZ%L%uh;#7Gw$nd=AC zUjX6S&(IcRvfk^s{g7MpOK zko!AQFVRl6Tke)uRHOyM?RG)Fh4zjV>>wt6SnM!;{6>&bUo@RoV5r}pgY-i3?Kgxb>FWH6DCklrJ1j-2=RP^-S z=^aoBf4o(iP972d<*(Nh_Tp#M+PZ(3Cjpgj2JiCk?%#Y#UKPmK$LgNaf5;c4HHxVZ zIoSR!-!C`vFEWaJYs01O@AO4`cn)!07w(Zi1nZ4DnGl90mV%sF~5Ib zeJTaIvJkYiwB+}v==0_dh&hgKe_V(P|8lohJl#OnHEzkJ}!p8bQG=C5CSdykLGhd+Aueq8AE?Z4RloTcYQi&K|hBd z*b1h@{wjJ{45-AONFYH$R$i0{DAriH)wZJXXn#ft*kk!dr9jv}3WUo%R8;h#&$T-8 zfb-p-X`#_#IqMBq0x199aLE(>7@%w@WdxLDomjRB1{yLGxNbfw#*SmPjL5(Zpj9hT z9nROlVI<_D)=4(%(Y9UII%cOxWHw0!d`X9hh2QR6yNYqXT3Ly3T|mE{o{DKyk<;?L z2q}U?;37tR@wTXgI<-U{NAud=Y-m_LUlJ!;dA%Utb<)D@Q0IDVSY4w$zan*r+TSZR zm6p0>o0$I#1`(Q=*PH9p$pz^psU@;)vha}S9?ScPOkfsk)jKBE?{`-($CCk0C!|lo zX_GU~%Lxp8wY!E)0eqLMsC%8;9xY!HR)TvNWRXi#&yijR06&YzR7uNIPJ1 zBN#|-xOiFo+;v^b`8dIGVdit{hr|~d>ZHBt?+2VPN2(PbG>SW;J}w^;z4bLu4U^ts z>vT9zj#mnXlpp#*d3$TX)M*$=$3^hGsf9^JJB&XB);HJI8B}|>f;~Q@lQjmgqs-%v zZ(|Vs`mjp?XZ*m6kli|jO0C{4X89h2c(M)V_qZemhU-JJyMp_MU0^$4Qx)kwf~SL2 zJ@`*#wLMO;PN$CP5i|T#ndA~fZXtpXvlC1}(AZ3L2Z#}Igf;>S3MeubO zvp&o2S>EpEY?H4_19&XstCJ=w@+TaxpY6S-p$`uW! zTUgD$MH2WVh=X=8W+MfmW`&ob6PNz33mc`^EddVSi}V&cnR>!1r(%}^>VXo3#l)Bt z;LvLl0c{N>Hcj9@`d-|uUTr!g;e2`M$$4nguN>I}oP9h=@>C_Tk6BWgR)?5Ir643e zJ|Eq_4hInt(e`4Oq8)JhX85Z=I|i(=57q&(OFE$9FA^=4jHVaKPT)De10e5+Rc_I~ z!Q&Fn)BXG~d>EJ1c(bOw#I^}Zt1Bj#r6`Uxagp~#YAVO zVI>pAdbRo%6O_Qp9BuX#5*~28_##wF4$TB@jy10-<-Y2)yK}z#n1@G8BnX%8^@X6;~}OBXxr zMhQZ^Fp|HtjsX28LW3zH<=xwPCW5#=RmY6-c`(~Zh%x}|JA1F`G+Qa<*>HLoZVNb# z#8H(V=kpg^(*($}Th*T`n}kmcE5B#2&k%4RsJhnH5oRDstG!T8bE+AyL?y{tzdW8K zVVgR!TUEeb-2Y_PqwGV|p`5*k0JqXz>ygslMmk+1Ywme8u&xw(LOoX>_c<+?n^ZxX zbCj|ZJ@Np?Z~isv6ost*<$@ngK}2rhRSL5b9F<@YKDv-_0-vXckj*C?*|9{Avxib$ zaE*QeoUDNZ@h8 z7?T{TbqTxGi@IKW2o5h0nK(MK1Dx8eJjWARCQn>M2ER6CN~zg?MH#_`EBn&*0695% z%5MA8c35p$(P?gH_L*%*7h4P=3H8Jv3}vt5qRtdLB8tQEVeUhyNazy z6)n2ssbgJ51N1}Pu8YIMqyn^$NbZjpUniBkTdr}CQu0}%5>*pYJ}|Z@8=FCoo9Hbh*j2)o zs|E&Tsl{JGnxp(n>6Uj6FO$IG{8sq#4?qMCRoe0+N)Guss#!818E#lWHA@DFx1&i( z$z%D1o_F;G69}0W)Zo!;mhs!#*&1{VcV*JJWnXVO(%aW)et5sPx+gf(Ze-9LaJ)G0Oqh*qUT<^B{S1qmPck@PXJ~hP zy8b)mo6JP@1Ko$}Rn{psDfp@FpCeVYNgfR?qWLw#;kb2F>5G_^3Qg+jxF1@T=zd<7 zmz5==NOF_N#!|-OQ$_VWNK0x3$84-|^YXt&`g}Oj9<(_=n0gXKtNlr=e^6;JooYIy zFQ<%I?%q(O&c&Rz{X8AYEnimNGvk8J7@qN}JI{zY!S3`7i&_UpHdF&s4a)-EM`*JD z3>)LAZa9>4OUH6InXEsv$MNl02U@=PVV0zs;E@j1nz0LsM3!UAONv zubmx^NN&v6i#GH;w>X#|=Rp2pIdLD|rVdCXYndWJ0t0%8s4Ih`i9OI?8zWMr(xGyI zd=7}{X~7O(Q=f5JzgR%9=yUf7uW6Qo?=*B_ar4!hduDqhAgo=69ev1S8j$wH(D2?9 z*F|%%6wJJ!qOeW5yX1~*O%0n_g(vf3?(CvvNR>NwuOYDaS zkN&B3W^EG-c_p%DbQ5w&7`U(FFRqSzID-Y{ zrc>HC!H#;1_M+)wx)CkM*IOzZ=6(+A1iggXc9G`8?*1Wwk4knbmQ`vxDLQ}!A8FaK z-ZguoprE{7zRifd*Tap=h#2urIRExkUDr2|Kq2f#v{fcWy9HUhhJD1pZ0-$=LOiU) z=Gfx%ytJM~x`}T%7JLTi$KZ?y%J~*TtE+CF<9GycfmoJ2PygNnT^W{l-Dt~hG1PDk zmr|?RoLRCm%K4g94gEYeLy_wRm&HuHl_kdG=X3r|-tLZQs!!45n`O{woAPPLI6bdj zt1%KXv8gG0l;MqU5z++noLRpqd1tG-y;ZaBpto6eILGmrKO{0Q5N}ZHz{7PFzu2LN z_nd3FCMTSNz_ZM|BXFoMi=E*WwkON1oJnC zC38yb792r+0IZI0zzWR)=Hzzw6#~vtwXFxKtQO4Tv|!FSOcDvyOGCX~>20^tOWZTr zFR6;ChgB8hu+l3R79O4fj{I3dP~oR}Pk-F;`E`e#V0Y5B$zbb;{lOZ{h{int-CRtp zuq)!t4~BU9B?JXic>>u*?07nrj=R3LqtIttZ(4wLrj7ARnXs_1bWt^aVrFKINuf*F zJ~kYBRkRmW2f52C@W}a*GJKcc*f^=SzV&>g|PpeT#}bR%BUGq^lwt<*{iMDRd6brwqb-1s0hC%}kEBCgHYy zBY}IwDd%nRFvyhs73}BOoy4>Pl~i{_@2!?`hQgl{o()X+K-WtSSB#HXFbT}wA0rcL zdOBo^MDw2t2(?>z>~qIFT_k2@K%Gcks)M6IQ)*@ctMLknq)m+MX9~XHDhcnrw!HWFhncHN% z(z<#Ul~n5cTK8l8w4q~~;0o=J>sd3zVFem_aV52#+xUKTkKtX(#*D~UJU(6S#r_Bf zY%r6*e6JcwDy4ulBJw+zxK{L@1U-tR@%6aF-y3(%ESSUfz)y##q2%)Xn5!wDIa-Gq zA~+^b=P-nxPG5Cge|IqTgJwcYf{}!TW+qt{^BH1Zp7MlcLq(^1-dcTa!TBe>0C)au zpQqo+GHiYNCM%97x*BqJ=jxRnyf8ULIhYxpc;MiszltdAD{Rd(Q#m6e8hp3j^iA9c=u?xDSW(__nl^-rGbr)$nYCi zsw23Z?6)_ua!-$mo+_pmyiN66k+G!*y7)3LwLTQxp)-S{jhml$Th^8?3M z*h$C`Y7}|Zn`TofTX=%6;>yD!S;``nmgEUyWyVP#bnNxhjzZOzN`R{@JI3jFG#&TQ zticl5#K1j;=lF6m=c5bU?SP$UaKnu<6FquC_QbC3N5y0H9v%v>aJ18(Qc+VsRl3ac zuRv+g(>k0VVe5bfVqUOcWW12li~=nhZ{zJv+Qmf!*C7(k3vQ)flEKcjGnPf6sDVbC zJw`o`8yfS_~wkIitlGcU$FWX`p}zPe1K4%n(5RAM&YW{(C` zQ1)(0$vFoOT89d&L{8zbxRkeHCsILBrYP+tCr`8dwHEY=5kpMHe*{zJs)libyZx9#zC=&2o_R2*>%H@PYkkQ-5CXom<{oz1M`ACNd;JV&}8>knY=*`uRuFbSNOd zxHcy2vRTD?@(Iwz*EQMbkUR;FY*WZYn25Pt*rV~7x&M{AnzemukfxwY{`H*VKTjeG zPN}k_dA^!_o_3q~!GT<$A+)30pv8XxJD(ktO z5HXr+p`2#19D^s)abIC0{sqUJvc~aZ-pdSMdO8!V^c~A z5sUS{+s1BIdOpn@O+-^}K}~ZNEZ3dvrMA0-oy^z@-1joBb}1g83!VZpi^T=mZ-;k1jjllrxv;VmlbW`o<~Z zZyC*Th#q{uOZZ7=tNPeuU$rN(PEkCL%%7!_6c$_5QIKf}^dz`Vx?QwZ})Zu3K9(Tkvo4A9|@tt9NkMx2)`y5&QK?i&-T6whgt5^jZ#~ zOywuin`DYHEC5DUZ{el;;zX1%ms%WW7h~V*>!PnNQpGI^tc1iJU9B$G?Kw^(6arx& zwv_iy>^j;bI}94V1fbz17;aI!c?%Y7b~7zOxCOS0=nB-Pb;q6y-nkf6`k9)8hU@bH zP0u>`Cvs+Z5uupU_=LNZ-uq=%)7t8lK@4LCLL_qZXmCf(Ns~lSZxBEC;r)A+{SeXR z?ie~umRK|Uh0V$=s`1-^25g!om;|sFXIVmMEb#&jhz2#dsE?E@BEs zlC<60+6LYcQeAj_^lCZ;id>-FU_T^N4&U;Lu?xo;CWE)C4w9nD}rKF=B-O& zLE|X+mjeBVS&44XrITFzxX(AXJGHqQcJJ5p6DSTJu}W!ro*pwq#xP|{LY7EgNm^P4 zUF_jFBIUhPz8K?7_akn$-D?Y9+$ha#$BOop>E_zTpVV=R2NXwzu)}nYEc-pVByOzr0z}Uhdh?op+5t*qS1%>v@ru+mwL&b*fTy z;myTvaG{*=SpqvIQ?IqMp`un zt}JX-T*ez?XA|lVqmooq*WX=fB@tTTRTYTyd2AL3+}LX`SpH;jQ*{@&_l>QA&?{>p zw~jhLE1@GjiU_tCx9xH+BPL2+8qCf>Tz|3n=IP4;tg58dzS1l}8ON+pCNuB~Fe0XZ z^eZ^$*ygZZBCe7K1yX?;#S0cn1mtCu9pySx>+wn>YIG ze%fbXZfd1+O5I}A%sG9CzL5@ciMA6}HnAQl7kr*fhM%@Ay?^H{pqWqu*!BiSbVO)o z_05~c{T@D})OTa85$_gEy(@$aSDv^|Zq;rR#PB8{>4`-p4*X8%B76WzQ!hvf2L=%& zO-2_mK9lcs3gc*{o{x1uaU}|$aY*0F|2~4C(iEAiY#JNV(EhZXTOOAj@){S-xaG*g zyETUcm-4;f&ulCy8uxAZI>baO4S;bU!Lb7D6l58>%nD5}YpEZ22w1O;hH&8DB$FYW zL{E%+bq6~37CY9G*&GC5P{MCviS*Q>`sBWr#l}lopeKJ>A&&bXMoK{X(_r1)FN;A*`5mX-*+!le zjTDRmym+`p=&$bl>=*w#1lbq=^u4sD2AcV=54eRoK%ie=<6l?7m(U&q;Xf<;5D!N8 z->t!lL*eKwlnBp!#e$5SJeKM{4i4Kvw)F+HjTy8?&+!`jj*yDYF>!hMu$cxMP$C)@ z7fu2wb#2$GWyZkaQvgVqg{wi8i=rZF0;glt;2^UJVDQ{%?+72teJD596#$(}DE|B+ zBEAo;9UL6K;5ex7XWmCF%?Suhv_>9@QGNsiV$R(g&X1vN39iOkEzcn#x zyV9HT?)(n?y|B(sNT&I2DqMe|r>D5I)#*QkU~U&?1pAb4LfB93Z{XZWlw&tdGL zUX;CGTmn>b{F4}B;^Lu*^Ay5L*o?S`%%SfwDI^6253b1q@L9+O)$+#Gir9WB1td+_ z3%fZ@IPnsiLg%N$G#)9admif+MjBB)M#x^I!kx7%g_MRmi$nct?A3!30Qfgq_iQ zeygdV3{lOs+)5T6bpyw(TSPA6LIR52h&S)=gve|$rr19)kbvlMHF|+y&^M)8WewRF zD<9C7=po3!7R^fDfK?W!_SdHVME+xjL3S{cefmn9FV7Cy$W9g$Zomg6l0R-iU;H^O zIOcAtYqVYg_|u{J8WqOOgVIYLwMUQK))$Sv@NU%WO<<#o{XiB_G)3v;i*cdFL)@-O zu(Ze$TWy;PG+~x3WbkQQjOL5k+u;~rsdnNwrnI&)Vgz9qWmKNbr4vrS<&2i{rM2>A zz6pvYfBe`QqhuS$+Fd>Uo(okiRMPn%x8v#W;ckY` zCgB^Jt}=i>bo+jFk{y!sZwT%+1|f}knPks<@Gfs+8mH<`ZTaoU)E{!b`Uny_f}tCu zrO^seadGSM`)~dL$HylwQ@4dg4c;iC-q!|W!z=~^YNj2VCo6R_4|?!tH0NOj>dB>I zHx^83si>krBJAnH!H-KFZJ?<)(T(8D zDq=A8LL(vy48!zVg2Gdt`AXEQ6AH%~JNuE6l1ANTe@xhOE_TF(YwDzf&<%W%WEe<# zx-wR~Dij{Xfzpc+e1fh-LVD3C>FJ|5N{!kQc@|BW)XObNva?suqL<{cg|WeE9-fKT zKV4&XkD>Sgz4ty8b3*mGpufnXBI0v9$r^TlC@46}O|Lq!_CXhnxi|=SE_r!cf^_VM z8a=|d!C5F93itDNewY-pUf@hziWwWVy#E1p?64S^P=4QGQ#JF)tplpEMLI~x9ckH| zSU-j#@J(Z~!0WE((dQS&!(wRGv81wOx3^y8VW87M(T$%Sp-~vCPl4+9BS_I`z)KRy zgD{>2T9h&HS9-I{4k#} zbbIkoWkf^||I?@i6Yz9(mXxsizVeO7MjVU>mL2tLYU*Q|zl}A}9I<5k_2C!s*vmpN z5DZYUkjy^%;J=>#7Ce6^kId-5o)2#M@_j1i`-^yG5=vpLim%x zs#o*tQpfG7OnrbKiCq5{A?9rnQIr8wTl#V^?b6&j+uNTWC&aO^3)Hr? zSx6xR$1MEW+k3;wEWDC;O$Vu01;dVGDk%~hg+RU6w5Ob(QHGb|)zh4~O1o7aA3zn=c=ZIEqqj8WVk zXulP@eBpY$#WEsbZOgfEYgHynChV)tgu?Cu9f6=Ut{Qovo8vhTh36 z79QS>ATjO3F?rlVz%`sD;wJq1?LSzQ!yuJEDQK#GYJ~6ZASGo#y~KgYObzq!;pCxc z|5l)BcRVfPH%TvS5!B)@U+zHFhkyQYk-@$p2$G^>n7i@38;1_#uQ^8kIc$Vn?lrGp z8zX$ZcljXrk!$?H+E7cU-PJ{~LD$+4OYFXJxhw@ZtOuMwCQG(17C7dAJUez~zA;rU zIb5JdcX@^yBArkpmQ;VKKRL#-d#@)OY`WO@_XdXo<|x_Zn@<;ORV*&Wa(-y}D3^Bl z>Ajp{rRAt;`zb0Svk1&daVVHkvK(NXBll;uFpOWpE_I#D4zEP3h)GL-J$by!8pUd( z!(20ztAlBoiu4{TO8@2WyBpeW)A63K@Ed=3fLoLssi zoEDnzmEY^#U6+f&S+HW@w45biKU}eAeaEENH{}h=lXZ2zxoiKNRbFubAJ|Y5fxR-G z3B(w!u}2mU;jeovThmhbO00NG;~y88^3&1pb*_~gqji#zRrhdjQHX=}=lm%7iBw_a z7A!1CMupY%mj7*6?9F=NX(Za8wifafz}+cz2tNWsV~!Wk1B>zUaOIk}s0Bk@`wkLQ z-3hic{BD-R7GtEj8k!W(49<@%N&pSLj^Ov`sHiCVe2vP!OA|zIhEH7O4U=aXI68T` zBne!OeMjnXqW<@=#k+^w>Eb{78;wb-HfTKnB)C2{Wcgv2Q+aFldryNn5lyiwp* zWx8tY`^||>gm30c< zx5C0crZGK?``i6w!ZqpXANK1`PnVdgN&H~mUOg$CCE@%~P-~$7E#t|T{CnH@!^23; zuiv#Omy~u)TU;E&Y{L$xbMm1L9k`e1&4u3h6UkR#bwc%e&NW6f2jO za^Cp57fGJ1d`l~F6d^tmP28mOksD({Y6IEm!vG48B`# zJD)qNJa09Y%H9M1{nYWJhiL-J^(QZj^LFx>5??DC)ltaswo&S4&_!G!Bd3&Oyp)-2 zS)+cK3yv$13sbCqeLv?VVPVPY=3T2z#+HBBwyP&GR|`sCTyiq;ZWFW_C!wT&`@nAE zX9B~=J+r^matmw6`NI4vD`; zI5bz)mA6W&MbZkq@P%@fYwTT3B^(y#q#V<@;~&A>8sTjb@xwesTFhb2+3F@qjE|16 zoQ|t6Ba)2UAHz?S8d-51mSvOoXh>1qT8|N@(>)4PQpE1_0BMqi^l<5@=a(>exs9Cj z%GhkVWYCzVn3uqgCxGx$NCCSKt=aPn;(XvC^OA4*W7;UAcpF1d5Mm+lP>2(g@`X0X z?6+M|oiVtXJWS%&CYt!kDIM$(FzoJ|LZ`$c&wouL>u1qWF+5&DxLzFBQG?LoECnYg z^!5?c7sTXwi^AwDG>H3~A#|bD1a=#FIG@o9pPu;@#*9@1^BA5l81CtvoT%$YuH~{V zw2a@bIZ{oyOsPTNO~=@hC?I1*A^F!0p9w)0hlmq$QtvEeMZxR{&PWlv>ZLVorGUZt zOqIhwgUpvMHYq!jYe1@^g`=?^Ev0%}e#qc{f66n8hwR4Ifp&yJeGD~|wb8XzpCeJ| zlYG{WVslbXYjY#fbUwUT#LK8&oOx+9iPpvMb_IzerS%vt`4Cwyu;hO5;<;r$IKMbT zGw=cddp?M-uPkU`nJKfusyj62mSwbZbI>E4ln4RF$-Jn}OH(ZGb6u-)?{aw>;t9rw)sL@)9%51}6owS0+ zRjmR^APX>_gG7b32s*+ue|IX3K4h`p#jyA- z8K32jYWHO9$~(bSQA*b>OUmZVxi{}z#f_w@%O#r-0Jh0?^sd$rR5M<05r15lQI~=u zM|SC$jhBAvv*498RKKg3Y)kLA?||vO^<_bzZ(C>Ru=^IFiflSP`JB;=XE`;kd_Ajp zV95-WFUf9njo z_i{k81l;QS{C+W2nQx|V5zk?^@9Qg{>e&3un}_3DfkltaQtOd@rTkssc)G(?Q7W;9FN(nf4IZWANDy3FxQ<;Cvn_!f-OWx`|&7CVMk z?CBO<;C7Q8yLaYy0DmI&*j8L(do1rcejqtwqlZ(QI#W0Bv_oA-C)X<;yni*xY1E}! zR6D-Lm;v}jolHEx^*hWJZ)F68s5d3bw5&u@WUus10Tn@c9B^QyA)yBy%vz64@Bv0J z31AX~CsPJ012X&if}A0A_HZzq>_i>>ndWCJg8@w@(bToOx!6=CXoGoQel@b)a#MzL zdyV+aFKasuabOjgPc3$krt3FC)xGkZ9O4fnEAHSl_NmbUU>EHrt!eH`j{(V*N@2)3 zCSewZO)UaR6L<*~F;>fIMJFWWqNGM53R0jHIvzCKQJ++~WEbYlqAIGEl^G zlOFQRF zGHBX*S&O9&+e>UvdHTF}Bj)#V#z+mI-~_EvMUmnu6ylny*pQI$XVZJ<$U>(r)1KFi zA*P{Mixl4F_qOsBWbg4HB6AjjbRB{u1`JDMI6^tKq4D@>zBh|J8J934WMRz{lmKqI z%x3;6-u$}eLshBNqI;#;bW`DUlLC4+c@#V@V-9PDP!wURe*@VXe`0m4801#*#&P$z zd8e5mQ}E$JPnPDm)v~5wRu5T5rKj|jZXvwSG*o5~WeHT(kc5EBR7i|*Q@TgebOAqa_*&H-2 zC+-6IC5!{MUM4R~1t@YU@$9SaXMKIOpHbO9o#QH4XrGpiTkc6Ss&IlIOLL{Lvc}d5 z$S5SeLVX~79+Bdzpcq1dzzFxkKgZ>dJZuH^HP>q@h53mQQbj6R8|u}%+2KpKrw}j+ z2pE2Ov`4$A2>(?b+iST$wVCmSJtvjE$XZH}IhvVEDiTXKARz$NLvE6^XBvGr6i6IG z_?=nZx7817(aYxvA>a*BdDiA*1ex-oD4H@HHN47hx*j_G1Ch_YH}~j5gPOmqy7lD7 zud)x`rkPuxTY&Xq{l4EvxSu^w2je|xNpD3S`jH+Hy1zRnC&9qA@^s=6+7Jvj^rAog z>BKp=wQ{mP!3TQy{_M<)#!h8VG)@{_ewglkZTQp=C?pV0o3q9>g+liww*RU%EL%Rq zuun3C6AEe2HJ>TT+M(R*7B~jxq+wGVwz_ql9HX=QK5aHj&bMqA=;HFWQ)i>16Dwgw zOh=-cz+_mZb~9RBgz>9VmHS)-5T28zh@Z@AW>nn>5gv#}zBP49ma-(Q4ya=(xXlFA zzjW@v7a5n-c5<(_!f4J>SWeT&2oNs^-&KwrFS8gaAJ6Ttjh(W@b#AmeG?vZ#e2J45 zHdS^u_cc*ZFo`giA4Nrfgvlg50n&Z3@m5akKKo1me0(1uy@Y{Ox1x0GIrR3}=&l-A zk&jexNQlZ+^``9k;rQlhaYKcnPyYyVcq#uZ+OFaX|T|jj-QjmX*sJrNBGqCJ1y)HwAmXuD&Ec8zJTh~uB zzB8%jgU~Uvg|4t5vvp%DmeC2as%Ub%G{&FOnrcXS(Z#i zpy@RUDXjt?^yDn*=m-R-_Iz^^<6ITWw^8yVZXE5?$v8Us>C~fV&du&d$4xF%u%xCg zj?Mt*c)C8$z~{i7n_K8}dK6os8aPHgrH>8um`(AR&H2ek8Xj;lW%vMpzZ#ZyD-Cc} zlrIfH!9V)XceWc=ZR8<~fwO4YhW$;2#S?Htc8Kb6{6J6$ufd`%SHoY0BjKJkM-Es#J#TzmZZ2|J$0kjr+vb(R(5en$s&ycn`O|E<{ ztEwyO>1Z|?aQM9DASEQQUSM4K3~gtpexg~=^vPDIzz>RoDKbyT_?Z4szu#-%N!KtN}OI&`%KXQtQahc6} z2$$IwMVK`;H7onxb`f*FhiWL+Nlk}V90?yU4k@0=m>S{MaL zjeJX4F`OGKQd!DK24T14r89E^tbwF#jW3* z3>((=9X2>P6qY?{)amTPsk}AJu=OAv63!r|25mU1O;q@gY$;YT1J%Z zw7(5cvA<{peJ0+O`2#3+b`lxaW zyW2-}#an(p4JY&{<9w0h0>PE~PC0ghkrw5K8S;*34h2KBiz~hBRgAy-D}x~Fc%=nZ zA=DZaGn}lI|`CibShEPH*bu(0Ph`0#Xk-k^|_dL5=rMfW7s-00PqRuDmq_ftY8q z=fqlv|22hsJ|~v54VfAwUI$Zxf+@EvJp37WBKdMOBU7JSa2?$A9RgyY`Ry>33r%A9 zA7IV*gyA(#b^gTGuc!ecP6`DNrl!W(Y!tQ29m_Q$IZ~j_Ag83@j=X!#dVG+z)Uovq zO$4d&LDZ!gVyaJo&^=h-J_`V<&@yLN+Yw?|yOhi4TYBi0ICBJOr`D2xJ`o3vd-jjw^%5&ishLW|eSd{VN5WK*rCPF%WgUa%(tpQC+x)o#}nu$9WD9}!N zNkad4m<8@W%c+KM)7r656S@33A(jv4jar6EF{S~PD`-Ba2s>Q&*c_;LD1f2JKAGC2 zb=J3{QvrfA$}Khh9`)!?66_+DRe}Gh+3}3lW32g_Xw@b&`N_LmLt2h>A8u9~k&CgU zD>o1*{M7SR9V_-hw0W7NecJL|I0mxgH*ttt>2WV0Aw1E{mo)0|z@-&)^C_G80~S%7 zgIwd|;~g1bFiT-K017+LhR?lrcZuRSau91LC9s#+f#?jL%m_a;J`}{0XNo2EfjHED zLr=B~Vn%zuJ;~l0IG}mDK~gyni?-9f*V$E~xpBpAZqHtfVe92wDsBQ1?iC3Hw%J8H z#uT|?pj|_;+>tajM-~>v1J`IY(Y{2+rR*$UBMIk1JpemGp)s-m zpP*T2D#XOD7hiDw>s=~sZ@Erm1X&haaSd6fv~~NV&7<$_)P?DD!z|H-URyzx69#*% zE&JrgvOChEu#yF#EP4EnGGAW_Mw?)fP#tcaRfp?fJ-Bz>0vCh!2{!C(Cnx1Ilk1D{ z!)Ymyp^hz+&1hjXQ1!V=wze}^B*EmS4Gu8qG_a*-s<~L>EOzB7KmVys%z+>VsKmp~ zujV;0TDx7xRa`e}kq0b3X)7Hi7hVk#FbhkP@%v@dB`9A>s*gfl#(cGB@tjS_pWz2f zTRWe~;`=qO%i4v3Lo}6ki7{pdtG9heZd89~E~cc~*%I;0xB2dE%sSQ20n<%WO?Vb8 zHsODobrf|uI=(7%hBK7fLTUDHxx|HPp8E?le@K%5%XyygLYa}2F-b$;<~D}WR1bB z^x^6UoRPwzI?A{a%DgF0z1%5yF;DT^0s^N9HacmXSIolM+8;N(0I%b+y*nzU-`@%DH8a)AUe zwt=WOc-lfg=i$o${#%o3DbxS@k{3=aU^@K+$j9IGRKEPhCg7d32|P&Kpg&G{!5Ex7 zn$?(?vcK4bCPIFa!t6+XWK`5M^XQZmy69VuG=Dl+KA=kb>3Qwmb9?msi=otyl$7nU zzms+T&!Z8iCfb;(7k)Q1pDfF$3dCU~RCjOxg@NpxV<4#&i;5RJgny4f695Bg@9y~b zrT_HCzaaBD3Gv615P2zJ#>2tf;>9lVoD{hDJaA-u2SR`Rm}s@My!hJDGntYIBnj9` zR~LXA8EL2r92^1;tn3X$hJ6d@XtlsD0CQ1! zQ8>8j*cbPPNU+~vV`&w6IJghAaB%*?aB#P^naNf_&o~8zaU>8&eX)R|sI2@Pf5B!Q5 z1&j^6mZh4ei>ACBpRv6ylc9;dktvght;2IGH~|knSkczh#SrXaYh&lk=OGCBOTh;# zKUXtDz<)_xtOX&O@=9QFdnZ#c7ZVE;3q%MF3h5&VPj@vdjq3*zK^=KpxZnhHGE@+mr5n!%2gI4(08sHmC;{DBW@ zrrJ!> z&L%V3NY;U#5bT6vutgq%B;sHj7YE0(JoobW;?vz>nf68L_tNifR=iSWt6uJ2SH6|S zcdgE&g4~K~Yy<&_-C?oAxI|egIr>H@6Im&9rlb7)&9>=+kj}z|{M?qS%q=t@)6|{1 zEm>>Zv7tp_tJSuk26@5P2$BAfT;L`bLTZ@WFNw9~SE{#aq{4bx8cHm9wN6ju2d*wW ziS_1_y&+jGBNGbSD>4EGPDgutuM_X@CnlFi#^x(pT2MV4%s1Gp`dU@u$CsC5glrhF z7eXHQkr(H&*lP7f*v992?<*?0?(gsOD(>%vnwYvgDJLVpe{X)lx~8Dx4sIpub0g(P z^H^S3P*zfN@!nl&E3;>h1Js@5T+dmS*v_L=o$ znGY>Gc`D_dbI)VvD+Gaj9#R)wV8kDO_lulIzvDs{r-{iVQ>ZfSaES${7zLx_d6C*!IpX zi6T(#Ibt};4je%Mg|tkEJv6kDU{(EoR62cPmJ^Omn6iXN^eIfb1#b7qQQn}@H0)b` z;vK#`k&z0JLGJ0I)Tg%WDaQ5L2EB)~ydpna3z~R?M6c?nVCQ)#aWl-rZG39l2HNMVK(_P7eEtV6*~S$VDOV6!E{9~RGv^j6Hk z%(lhGoEH6QlvQ!>V?i|;Mg$H=j_EnN24!1$kP_g71o$;X)LGKf)3Y+VFt0=8zSuAC zCYaIE64R=59wZQ%s)L^MV#w<0ijevR41779hg|0~0vr{Hr51_J^Upm-x4u07N7_$t+Z49{XT z@WyAn(#+=xz6N!5F~w0Wf(-svZoKC+W@@!@F(-b21t>gK`aFo&7(7gD{{Hc5&G$1` z*I?Q8x-Pdt?mdxkm&;o z#T~1=FPM!Oz5lkiZvLI&gP#QWGte7v`@89gyze%a6|FC46||wm*{nx%szurF+@fcz zJ{RUqdcs6RJteldA(nvwMO{Ax!V983hBBkSWNFlA#^I!LUH7`-Rgeg1B^G}ea5nys&M^%Zhio|%{gOe+#%MRFs!Hp#{~ zA`JR$u<5e<@M97&U@Bl44p-EsA0W5H;nH+(FO$|7Hpj&|*gi{^JaGI~={H#bg6@|Y ze(CpOAZcs_5N-runYqGjGGMre6Ygs{5E>4rK_>X_J?)cyKT9RWI4>BqijuaLV2%%) zWF^2PQUJRZ$!;wEOPGU9HtZfvXd^GGnPSl=<#SPTJNQZS70B`h=7HD{nnBH5i$SHE z8{uhAs`VGL{l8d~>Lv8R%M#ZI*#Sb(%5KU8nqL=sT0bdBbkDU4O z!z`@V#RKR`~*pFiOd^~qOqV-?!(iiwruR)VmQAj(6l$Wv6-dn!G_MvQo3!ALB zw8>(YH2-sMpDQluaBp-Deaf4|p|}L^L3z{~GIl&n!)E|GT1d+~c>JsoUu_9^IwxlMDCCmMVjgeV;Yn zZ>H(}i-uK?)I(8ExjW9MoCMp$opnyjV&6{g;D3zHJ7exjAuto|J!AxxZ65uJ9q^9Z zGo?#Mk5^)g7m3Tauwv13p`U&WTh?!pB5%WkT@y07j0?SYZQ{ba!?u3B^rMopvKECv zZ$%JUZEw+ugbnk~`yLU|?Pa3@TL87DX*s!!HvOM-?R!276cY6x3nI-XVdEP=7GjdVpC=Lr`0h*0xC-f?#$+$1C~Dz<#kKgsCgauWEo{_bPh8+ z!hU6*9>VwQv4KK8E2lx~lTetp^B4mQY-S{dv4fq96cSaHcW^dj$jWm!%xYIICN#w23JCyfnffB4 z3=;t>AJ!YxzqM71s#6xY(e?|kp1FD+2cVdoh;*D9X0j2*l$xY6GhTK` z+mLu8lYi|A)~d2M5Oc7m;u#=bybla^yhH`w#I{U z5}0st^;qMi`IL%(Yx6r4d4j{}_SV?5Ihzw^i#eL~PxU2Q!MN zj-f0j>ZJtXHY_?aeR{c9H1tN;)iMdvtUIQnSF;^;Fo`sJcG*pJtR<;Zw3DThe9Epd zUOL21-PUt?z`r@vxM~MPj6g&U&VaJSnyTT!OMuz2rPCzyn1^wuML0M)r9VgT_3f7ckyU7p-%zZ?b-U)NFOQnwUxo^0YL;ZkeURmtv@f`o52tGnDJu ze&~yfG~GxMg1h2@eXvV#+pV< z=f$Sld3*Q?hcy4p9qu1-L}&YfOC}sZoO%X9B)|}rI?0yxt*EEtR13LB(}-UDOtri8 zgCl>J)zon3!GJa41rEuAX`m+C`mCH1ZhQrGU>W=Na25&9PnkrzA*xuR6)L}n@2)kc z?S7L~y11}svl!SE8u&BZt*1SQ(<@uY1@tJ|#T^(AR#@+=MAd$L++sc=WOIZo{K(nv zBhwpQ#+n}faCe2)h}32?vE@W8oGMj)YRtlczZAo3RE#H)fr~^I8Z?sJ=_q7TaGa79awB>uwiP((--PnMkk&w6p zU_q30W*}K(S=pim)vk!85BOF@RT)*jJ3Kyrll$pPcA?okw&gD6%{F3+Y<_*yZr(z% z2Dr!oYbB8LEG659)ouOhk|#srH12YCW2BDFpzA7w17b;&%vQFkB$({2LV{ByaG(Wm zD93ip+BADG1}ZNvA>L3-K@abe3Y^i27)E37w#u4D^ z=aEu3!<+Eq25+M$gwM{Z*M6`b-CyYKG4!FGv_!vJzN^HEk{eFrS8M{D)4P%Awja)r z>#j7oTE}w8D*mHL_0DQD|@Ue@VpAqB2Iw&1YmPLJLkhNV-hw*E&Xn zKqO|4A)2Hk^M*B?A97j)b-@t=Cl=cvD@xOm)ynl$szIvnOQ{l&6Bf%RFKU*wqgpUi zG9M*>TwRnd7)QNV#ZGZcd5q0v)pp#Xg1Gzg-QM zhfLXHxVYdMl1A{$iMKAl@NwoRC7zNK!FsLx`u3=u-k!TVeo_~u^wFA#bkFk-1xQKw zUCMg6Se37HeWVvD>*W-s%W;w;e}>V!h*ejS#p-EP3&`&jDIMZ)X$^LoR#ij0;}GVh zJ>4urA4vHa;DLJAe}L`vbL2$?EEuj6z1T{Yw;#HPExjb;JF0-(DO0Mz-!|U1trJRh z**2VjK+M#8^pXm$c&0ls?UT`D`N>c&df``RoU5HT)^~qCiFkpHG^M4EO2eJWuK!7}arEOhS7AA;EMZ1#yK1g-Mg|US#L)bN z%LkflukO`u{QCjNNFAeIBYE;hKe6FSC4I6>;h6~m#9WASs#mQJ=G5?(Xo{Z`{vdtr zFlW^&{2K{BRI#g*YMs-)56HbyIE5ved%>1WL|XaSY>RJcQ#lEAw;50BsJkwg6HxgK zYKFzJkgzmOhyEx(@468KT3C(yoI^}2*?_EIBm4veD?&oZ-D&$x({xmh2}IqAM$-0x zQtRUU>6TNzySD%<>&?q9ZlnIV&ovj7M*|qg0E6VHx zREuC%E(_F&W?A4i;>0suIF6s(X2mFEK%Vgs&7FqS*s}b7BdnR#QJ1`JcJxuoKo3&c z{$XyJWk5l)`049ut5wXW%*_ag#cemdL{D zutnD3JC9Ajq{J53hCxV&upmvVJAd@t@&5+qHD@M`g4 zDgpKI*G(tNk?h@XE+T-vdFT&vem6$VhlSn+r{UCU%^%9I`eG^i3iU`fXM`W&ha?rf zI6-zcLjJtQ;!p5qyt`TsZ3UILc#L!pBs}&`VbH@U55Q>pf#qZ9HhE$;1HuHvL9h-) zGrxI=aZTvxu7uxtBx~jNRFJp@*V0seb6{2LBwnonZ~_Hr_G;`JI*!e&c93o{1)RHc&RcxjsPY3OiB`iT)X8WYHM2$jd;>Zy&UWN!GA*-qcs2>kt_N)0JI$ui8{bu>$=h|mlHMhcZ;e`h^NW4vO zy^lmkn20(qD!*I>!Z$dxgpbD?UZ^X-0zFfS-yi{haHVRxbtu%OpWn&{d(j*P| z`cE`qF@(q%X48`e9uGhOc&v`tdj%dW9j17cl^7&*na#)58xs9JjL&s#J%00e@AAB3D1 zH(R|*>ueo^^tl+mn(#%SD0@H9CQ>b0ldx6B*f+oi@mnr|F_!eap7(iJJNGolYBXF{ zFj0L1LwxzYqDfHw^ z|3o-W!hF%!l7Tu(i6@kCAB8}vQZ|3?a=#U`1M;zta3XZLEU9r$ zS*Z!YgvKIF#Xktq^`lBF6o?|vG=tNlyT|oNyQsy(6#4v&R@HtFj|E8vQS=d2zSvp` zLk?!;Xqq{fp#fKSWPRdG@_1xt>5LZ{eu2}Oidedf(Ff<rRZy^lajnm_NtdKzMAw>Jz4%i)ae|CDt-q!ds#C6m={R3-w7Gwsa2YBU zc6Mr|46OqEQSx^7`kAqv8pAWp|1y9a3eixv@Bm4l;igNx7NLDD!ZkQtEj#EqT4#7Y zepCAzVQ0*tyUv%S*ISGoZJ16T>Bb2`yJo6xGMFR%okCdz18LNXfK{e6VQ~O4*4gX= ziaOkL^ykV()=`nidu!1##RdPXya4M>bHo_Q{)yX%3HUL;nj}@y` z4m%oRwcy&V71fV%^YsI_n78%yt|CL62)DGDr@jz+yfZ>D;*iO{>I-YbKy;8-;l|4` z>_|Q#?|O6pMJw{o$Og$0?722bo-_>+!9W^-qDbq#@K*U7V%P2FMDk2xKa^RT z9(9g(J1%#Uf@u0Y6{{-OvjnH-kqf~4hztk|D-KMla(sjfoXqI%;234d!D!nwRgGUXE7-0wN|2cG24$ec*iz~dk7 zgumZ`$$RS%eu=&TZrI1g71WO7ZA9f1lJqHV@=P|NHxfx%X%@>{_SRPf%k0pV_^85+ zUk#iKh2Ybh{}z-cu*h4ZD-I4X9o;H+!9JMVs%6)Nbh+i7Onp`i#s8CGSV<*V6RqmN zLK%=dhVnr8Jgv`=AVgdw0&2ozSptA`_`jz+ozVaX#967rB+mtAvI0IyXR_|r9`zn* zVmJ|JACn!BO-9e4FOTy$3}ihk&U5DH5(1OLE64V&q-5Ushtq;g$?{;PloALHH*8b- zPwpzy5ylC60^DWfq2OnW>C14ZRA+1X2n=3Ap==PDQ(of1`1l^7(+9nYN&guhefBln zAXq}F(|Jdw|I3K{X~Z_J@0V`_INV#e+qtjX&u!Xw_n^TYlF`_y2V+`&MSmrs25x>J z^w(p3KR?MREa2213vG$^!6wvje=Ve=hspfI6BW8FsadqOcwf0E^T+{JFi6nmtytVNOv`JAG`auRT^)l0i z)-Ij<(olQXT{%W98u@`5hlUzS*z1(_+xqPv^oaR3<1k8~K!O^h?uYsTb6&Jq_hnD1 zJi8;?q6-u2u6)(YAUCQ1DH%Vubg5*QJcI|{_xF0wGj^A=l5Xs6quqVx9Pts`g6 z$&4$+p{7o3(vTCs(g2m-l!SvoeV6Vely153hm%WUpcI9ln0n>o*XddEORjgif@;Zn zK1n*xBQv1_av2{g81-8EGjfV?ZzWmQ)bh5BHT2$SbG6beHrUD=Ol_D<9B}vF{D3si ztxzehPh7;Me>n}YE_y3od{2(gL3sl#k1OKx(c2U@8$6XlIO=U_HgPMFUu6=eXoMct zq-`b>73#Isvc=$on&YFx^)$s; zy}TcP#6WZ&bui{_9msfZHNL+VvFfGlHsYb(%hb{=)#m4y|07?@IXxG69w{=(fzv4+ ztc|g1J*J{$K<-V}G(0tUgiJ7GYaX3&!O5wju1@=MEQ3K}oKG|D;3RsDVDgUuW{S2b zwT;P;OhtoDmPPE;XogikeD&>Q%28Y&xmQ;#v`R1`lH&fjeY0?E*-DON01Rrux*FYm zdz`$QFBO{<0RwWne#m-!Ea*=~;vT4jHp=0gUhtd7TZ_q@zj3M%ROsMehIU57p(32_ zWye=<(58;LbEC&A9(XGsUJy7-2McU$)-H{?e;VBP`=FYATi&R&n^<*a&Y6H77hZ~S zs;fxh5o2ID?}w_woKDJ>&<=c)5^QwE-Z6m7Q#!ZJYPR7mE|oFbbgga6~D1= zEj@-8P>d~&7T*uR5&iU9Fp)aN-M6{s?PF_;$|d+ANn=*VST&y_&A?>{iCk)U=2&<4 z)P_?Y=cF)9O-^u&ipEBm;2U`%I$DI7eH$j{hIOzeovcF6siiTFYi!8Jml=hFgAAL2 zFU)C5we2M1_( z2djlRve|T{(u?Bcv^;^Z2>+{mSl9>g&`MOlL`OTI%w;c2YHKhxdtI zd@T)EJqf$hOlNIhAWUJ+@aABNda{LBPx39Q-%?Kq83RH}S+{W)cSidWOw}S1fqb2Uw{c8iN$8wh5E3&bDY( zx9q-^h4C7Mk%|U=5$`IF`Oqp%@>DSl#a+}0qXkWCMwz(Wclg?sy}c$O>*NQPR}{o)!JDh8du?%kujLnwU3{dbGLN*Fgt@M0VW5aZIqCfAGQl# z`>Y3hAas5t_c?bgA>!uJtj@LMcRM`Q4#BQdB8}is{gk97TR4TCFOH5mv8}(l_?mqz z$C3j#<%1mQwBG&9*2~UP4tvcsx6*fyG9x@=wQ|`E^}&iUfZy z(vA6@87^$TVbf3c^9hJL(L>qhCz{b%e#KDuol`;K+xtXcfn51%)~m0_7t7bdQHckN z6*%7}PbeI(ynaU758zX^WC0Jfe=#Ja)=E_*o|OwjscFMInv>OK2-C4OzwfwGUp=k3 zT3#iC@Ol>-(=Ws?>5lJ=`SnLrb{mFZBog&fy@Qy) zpR`CoRf@O?bv5QfQB@MBDhT*dL@c7`V$QEO4!BZXPyl`0T3kirc{R*E-qIK-t$LpG^JnT6JI`F z&S!}{g}-1*r+E-a&!i*wg6=Xn9$;_}hQ&Yj_F_!>%Xi?=@ta;SH}-q*sOve;Xn&^j zUK&r6lOa7k!A1eG2L!R8b19@*{DI%}q%)Oe5j&sdPrLh>(a`1T$HghfuPPw|ZQG!P z6k_R15xrah&N8>Vi7g3fo_b)H9<;YewQcykyNIJ&fH1WGrhH$xx|*m_Gcl#@8qKov+zBg}}{asmpPVuts3WpJJ<#08L3_j+QB-I*Q-j#nBtgQX{Jm35@K?n@cL%?*QlssGPRt`d8^W#^BXds)urM z9l)$&A*q0eG$sUDe0d@t#L80oyOgg&*{ByJnKuQq&<2sCEa(FlP#)T zUUatc@(eyd!!1+fl1{hZoR-UGR9kMn-JGi1{@fa`%db+Tk6{fTGJbyN5Ky!`SqM>VG@N z{ze%I04{SOWztt9*VjO>$peC|sILp}$F97^Emm?Xp$DJEPg{?KvD;8y4cpq-e2OOF zmh|pRV>eH&F&6e%B_&#R%IWI?&G*;Rd@(CKNf9LRLfV#c)(uJ}=^Q4QsEZG;xw-Mw ztX~gCjxA~p`N)i=?Q@=5Eh%1Y9vfQ~@)g_A?7+El=&&S}gE=iW;(Uv|zO*Q&yWmjx z_o7%v!$BegK~&;du6U(uJVFM=o~E|Dj>(>yR&}02TP@ph_L(V~9BT92cUp(3aUou` z#u(NlD#v=&LisL`Nw>VD*fMj%c_^PBZj`0p(|bRsfKaPH6A>W%P=O08%*f5&lTYh_ zH#+JO5hRJVpj(vk>=^tPqQu)y(iJ8^hjDZjwn*x0$NR7$DFmO}&Oq+1LoJtrmPJO5 zFNmAVwJ`=-rDOXB>hJb-h)qhY@ET)E=;djRlDk(hRE%BNdNzbtk`^CPZD1!Kq;U{X zX>j)QqhE@$8K%$_;--b;NhO3&q5I3}%+00+CGLl706~}*D z|2_sz*pk{>F!uvFsyj|!&T}roYO?y{0j-T+)C=bz~7=~->og2V1&s?RJ^n#?Z=)q{Qy@MDm_8VfS zkF1!(<4BSiR2DmGqGvUX>MP5xYih(7V!06uFNB0u`J+II|ph&DY*<;c#fx~|7(VO=1t{N%z9eLnUK={T-2c%z$=$xY&u3{DA z+9KuMp-NSs*Np1OJ8L1*%dZL_LhD62XhCYi`4X8kr1D2?`?@2BLClUw(3WlVt8uX# z5+2j^&3>*-qM||Cn-^mbn|7YgeQY;sO-WR~TZvwV>dqn=iB>t$n=x;-73lytdsOS> zsWiCg<Wgypmr-gMekH^F>#X-H!GYo4u@;&<_Y*UKS;+PxX$u2c?Tn|FOZEY&Hw@A28{ zdfSPn%%2K!HR9_j>h{v)IUI3V94mEypCb|n&~$(&r~{)_&&C0ML20XJ6sPhp3a`~o zQcbhJ#JF`;rq;UD{qDzXpJsP5Wc|P(v@^v%>E3GD3y$M}hyoA>dTevrX}$)ep)GQa z5KTklpx(uoaV*&QG%Rk=8f3ANuGXt%d-c|F6UPVFIW%#j=8!pRv(?90ZaLm$y4i?i zAs=Hp9GycMBWyW~pQ(Jd?_(J&_JD<*yUHwkfOMWqR8sdS%TDcO9zp_RnIgZQw-rBG zMq}*Ed&s6~@rFFE-vuY`mD!!TA7=6^_l9#a`)jtu_(o}h^{Zl%vU{5#-4LVXN-nBm z0(GZ(4uZ2}t*bUlI-Qk0S7c7i^z{$hL+ou-=s#VX%Y2M+uR2Re4Ks^Qg)(ijqGVHrrtsnB<$i-LnK;eKwu zrsJ2b)`T^SQXZKiDj>cE(^CHzlf@;#D@=YwkJ%jq1_Elrj$g((bV=#8OOu{!T%KR1MV{5*{~ z)CM8gZW-_ElC$B<-@)e3S%L*siXfqu6t7jYQT@^TGp=msa*;g45ePS>6PKcE!1;#L z<3)Rvh{j7uMK{K2eaZSSX*CaHd7gKO>LDIJ^qFopXS8iWt^VCKDVgMY@QK57C)K|l z;_hR3QCL6J4DOTE{Q9$t9^z?@)b_HI)g5i2z4&Rw$IKqb-p8!7)7kX)T5<@x7N_g= zW)_^f;N`~JAle^Ii!k$;lOxuXyIGx7} zv1EJ(KX)Rdq(DgQGhIo{b2`pRjJ;gH?7jj9h*E}x?)IH!FxGyYH29a-QF2Mvbsf(= z++KWaNPpFCeq|?fjuw;3mzUH9aX2__=e$uAx~Q$%;!uS}?=>U=pFk0EK_`*hxK6V9 z8<|)5HZ+GZdTEx%5k>9GxoNO-c}aHJFkFoZ2DUVHjH^n3!$8udu~6EL4-s@#c=_tv zuOrsZHdag?s_WGLjm||tz)*jj2yk&`w64IxBd?JpG+pJ5AD4&r-%P=V1$u4z|B;Gkz z2c;YckPzX-fv-9bVeZHy2u2GnC(_JJmq+`z?u)~Kxd`{LgDJbBuy&6FOP2TT&|m@K38ysU z|G+w@m+&*n&DjqU1IL>hr4_7}ewrQRzx^p`X=1l#atD}yb}@&7@J zpb^1;WUFA9w#f~$y45~Iq)!g2MxvJA+k+lBo-e0UE57d)a)jQ%kUgNm49&9cGWg|* zt$6kY+#cLt4*d?Wfq0Ow4XfI+wd8l}w3eDhr?$;5Wdu?Di-H9#iHcw>Wt$83;SSVb z*v}L5L);(XccuRo;1>*G1RRsVUEGN&?uXAPP2`yASo{Z|iGX(T;c0OEEeeMQP8Ep< zYUY@u3H}0r&oCDw!dq(po)B_~V^ft9m-RmIZh1WaAK1|!GR}YyvLnaaJSVoGlPhc_ zHT=}A$KLamN^+1Fm(KLe!PVwp-G~$s1NDmw_#Xy0q#8!oKmK|-dHjPpT@UNSrPgof z^$;R1goBE|Tm?ZqA-Yjtk2Qo;=9m>wb!NZj0ils1qZwR3)hoF)@ngu!s3DW~(aF!~ zYm^w6STC0v0*lVxyKognKs9u;>I9!!Jh2~yF01Q2z&}y{Vs$tHA}yucOSA9jexYtE zknqY=|Mb1$KT16G`u%0aS@18W2c7~skkA=b8%X8<=yxfvdxGUsrl5h3pig>|VHKsD5S{WLD zVbpq{W^^D8wz{}sW&ZDIN{F2qj=brcj0@l@eX7Yi3t7-N=oNLYSqkU715~$x15M_y2>z5l56x<=t7}#loDqZKK~2Ev^QH@tsVIbf0fFF3nBCPO^JgwVWvx%TrkP!uO#K@XI)z;W%-s1VIm5) zKV3a;T?{pC-p-U&qFv4XgWQ5iKo+*viQeLn?;|ETFvx+rJR%6tk;?6m_cO%i9=X6y zj`vGE?5_ktHe0xg^byj_?s7*3u&FbL3lJb=Lbrs|21hv5p^!UE!bMc2qa`;QP3^lj z8FQF+*XMhtMTjU^Qh)Cpf93gbYq~u(smJgaXQo6rwC!m|{|NrPtCdFGVZEJ;j3`kq z95V7pOI8&Ro&teag4(-#mi@1?!aO@Xc;M6mi{NaH4+u3oQ5(WkP>@Oo1nbB@YO&02opR6miGoF$f)9qP9jz!iBfQ%4N8sg zSg7g&ffo;xwxO@K?lzbfJlRgtQmHrjw4h*3i)?vOZq61s~h*?OHj2UU{A1e?{Yr+ztbyC(~o^ETr84( zw6h`)WRwBx$rWt}h}9U59ZU@TeyF6OZB3cRfmzB?MiNH;1na+#9uI7=Cmho5C@yjV zB(0w+E%$qeEXW~Jwh&+iA{`0D)yu$0w^DG_E2T%!dv@2K$8rBzO?3E*pZ-%{@&mw0 zRXd|RGGJ2LPM0uu9^O&?{LkQ*l%SJh8jq?%kh_-Pm@cg4=3(tzJWOpwxTyTo+DRyI z$w@XiRgj=_7gs{6{{DbasL7Xo~5LnS!W1d|wc8F4)Ym$NklK&x&1hVYU>f4diJ6T1T## zy1y&qZl$QzlU8e@2%aTBF2I*5T3V0&il+Fal)5@Lt07@K>NB!(SVUYXinHY2pH? z%%*tO<4{d_bOPmqz6?JJeGRrwLLLAT22WuQo&MzA(}!h*?){eA^t2(mZ^xhiyeA`} K0Id)+2>d^qVUK?R literal 0 HcmV?d00001 diff --git a/v3/img/dropzone.png b/v3/img/dropzone.png new file mode 100644 index 0000000000000000000000000000000000000000..9e9e9737d880fb8168500a46467368a296b27c17 GIT binary patch literal 30935 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 E01uDjZvX%Q literal 0 HcmV?d00001 diff --git a/v3/img/firmware-version.png b/v3/img/firmware-version.png new file mode 100644 index 0000000000000000000000000000000000000000..d7100995d578978643e458cbce1cbf745d182f51 GIT binary patch literal 29376 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 literal 0 HcmV?d00001 diff --git a/v3/img/ota-modes.png b/v3/img/ota-modes.png new file mode 100644 index 0000000000000000000000000000000000000000..795c9631fe6256c939ef94787e8df613d0ceb037 GIT binary patch literal 56648 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 literal 0 HcmV?d00001