From e59dae1315a5f1ea8780bd9abc067aec883cc276 Mon Sep 17 00:00:00 2001 From: Nero <95982029+nero150@users.noreply.github.com> Date: Wed, 18 Mar 2026 18:58:26 +0100 Subject: [PATCH] Add files via upload --- CHANGELOG.md | 17 + README.md | 251 ++--- custom_components/xt211_han/manifest.json | 2 +- docs/images/converter_network_settings.png | Bin 0 -> 8850 bytes docs/images/converter_serial_settings.png | Bin 0 -> 18911 bytes docs/images/converter_status_tx.png | Bin 0 -> 17371 bytes docs/images/home_assistant_entities.png | Bin 0 -> 73613 bytes docs/pdfs/cez_obis_codes_han_2025-02-01.pdf | 964 ++++++++++++++++++++ docs/pdfs/cez_rs485_han_interface.pdf | Bin 0 -> 396305 bytes 9 files changed, 1123 insertions(+), 111 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 docs/images/converter_network_settings.png create mode 100644 docs/images/converter_serial_settings.png create mode 100644 docs/images/converter_status_tx.png create mode 100644 docs/images/home_assistant_entities.png create mode 100644 docs/pdfs/cez_obis_codes_han_2025-02-01.pdf create mode 100644 docs/pdfs/cez_rs485_han_interface.pdf diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..4241072 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,17 @@ +# Changelog + +## 0.8.0 +- doplněno README o reálné nastavení převodníku a screenshoty +- přidána složka `docs/images` se screenshoty konfigurace a výsledku v Home Assistantu +- přidána složka `docs/pdfs` s podkladovou dokumentací k RS485 HAN a OBIS kódům +- README upraveno podle reálně ověřeného chování elektroměru XT211 / Relay box +- sjednocen popis dostupných entit a známých omezení + +## 0.7.7 +- opraven parser DLMS/COSEM a zpracování TCP streamu +- opraveno vytváření binárních senzorů +- opraveno mapování výrobního čísla na `0-0:96.1.1.255` +- odstraněno vytváření trvale prázdných textových entit + +## 0.7.6 +- první větší oprava parseru a logování diff --git a/README.md b/README.md index 1d9e734..217187a 100644 --- a/README.md +++ b/README.md @@ -3,127 +3,139 @@ [](https://github.com/hacs/integration)  -> **Čtení dat z elektroměru Sagemcom XT211 (ČEZ Distribuce) přes RS485-to-Ethernet adaptér – bez ESP32.** +> Čtení dat z elektroměru Sagemcom XT211 / Relay box (ČEZ Distribuce) přes RS485-to-Ethernet převodník do Home Assistantu. -Tato integrace nahrazuje ESPHome řešení s ESP32 + RS485→TTL převodníkem. Místo toho používá průmyslový RS485-to-Ethernet adaptér (doporučen **PUSR USR-DR134**), který posílá syrová RS485 data přes TCP přímo do Home Assistantu. - ---- +Tahle integrace čte push data z HAN / RS485 rozhraní elektroměru přes TCP server na převodníku. Není potřeba ESPHome ani ESP32. ## Jak to funguje -``` -XT211 / WM-RelayBox - └── RJ12 HAN port (RS485, 9600 baud) - └── USR-DR134 (RS485 → Ethernet) - └── TCP socket (LAN) - └── Home Assistant (tato integrace) +```text +XT211 / Relay box + └── RJ12 HAN port (RS485, 9600 Bd) + └── RS485 → Ethernet převodník + └── TCP server na LAN + └── Home Assistant ``` -Elektroměr posílá DLMS/COSEM PUSH zprávy každých **60 sekund**. Integrace udržuje persistentní TCP spojení k adaptéru a dekóduje příchozí HDLC rámce. +Elektroměr posílá jednosměrná DLMS/COSEM data z elektroměru k zákazníkovi rychlostí 9600 Bd a podle dokumentace ČEZ se push zprávy předávají 1× za 60 s. Rozhraní je vyvedené na konektoru RJ12, kde je Data A na pinu 3, Data B na pinu 4 a GND na pinu 6. Dokumentace také uvádí sadu OBIS kódů pro HAN rozhraní. fileciteturn6file0 fileciteturn6file1 ---- +## Ověřený hardware -## Požadavky +Integrace byla ověřena s převodníkem z rodiny PUSR USR-DR132/USR-DR134. Výrobce na produktové stránce uvádí, že varianta **USR-DR134** má 1× RS485 port, podporuje TCP server mód, rozsah 600 až 230400 Bd a napájení 5 až 24 V DC. citeturn348633view0 -- Home Assistant 2024.1+ -- RS485-to-Ethernet adaptér s TCP server módem: - - **PUSR USR-DR134** (doporučeno) – RS485, DIN rail, 5–24V - - Nebo jiný kompatibilní adaptér (USR-TCP232-410S, Waveshare, apod.) - ---- +Pro XT211 dává smysl použít právě **USR-DR134** protože je to RS485 varianta. DR132 je RS232. ## Instalace přes HACS -1. Otevři HACS → **Integrace** → tři tečky vpravo nahoře → **Vlastní repozitáře** -2. Přidej URL tohoto repozitáře, kategorie: **Integration** -3. Najdi „XT211 HAN" a nainstaluj -4. Restartuj Home Assistant -5. **Nastavení → Zařízení a služby → Přidat integraci → XT211 HAN** +1. Otevři HACS → **Integrace** → **Vlastní repozitáře**. +2. Přidej URL tohoto repozitáře jako typ **Integration**. +3. Nainstaluj integraci **XT211 HAN**. +4. Restartuj Home Assistant. +5. V **Nastavení → Zařízení a služby** přidej integraci **XT211 HAN**. ---- +## Nastavení převodníku -## Nastavení adaptéru USR-DR134 +### 1. Síťové nastavení -Nastavení přes webové rozhraní adaptéru (výchozí IP `192.168.0.7`): +Použité nastavení na funkční sestavě: +- IP Type: `Static IP` +- Native IP: `192.168.0.152` +- Submask: `255.255.255.0` +- Gateway: `192.168.0.1` +- DNS Server: `192.168.0.1` -| Parametr | Hodnota | -|----------|---------| -| Work Mode | **TCP Server** | -| Local Port | `8899` (nebo libovolný) | -| Baud Rate | `9600` | -| Data Bits | `8` | -| Stop Bits | `1` | -| Parity | `None` | -| Flow Control | `None` | + -> ⚠️ Použij model **USR-DR134** (RS485), ne DR132 (RS232)! +### 2. Sériové / TCP nastavení ---- +Použité nastavení na funkční sestavě: +- Baud Rate: `9600` +- Data Size: `8` +- Parity: `NONE` +- Stop Bits: `1` +- Local Port Number: `8899` +- Work Mode: `TCP Server` +- Client Overrun Mechanism: `KICK` +- Client Access Quantity: `4` -## Zapojení + -``` -WM-RelayBox HAN port (RJ12): - Pin 3 (Data A+) → USR-DR134 terminal A+ - Pin 4 (Data B-) → USR-DR134 terminal B- - Pin 6 (GND) → USR-DR134 GND (volitelné) -``` +### 3. Kontrola, že převodník opravdu posílá data -Napájení USR-DR134: 5–24V DC (např. z USB adaptéru přes step-up, nebo 12V zdroj). +Na stavové stránce převodníku je vidět aktivní klient a počitadlo `TX/RX Count`. Pokud **roste TX počet bajtů**, převodník normálně odesílá data z elektroměru do sítě. Na ukázce níže je vidět připojený klient `192.168.0.190` a narůstající `TX Count`, zatímco `RX` zůstává nulové. To odpovídá jednosměrnému provozu elektroměr → zákazník, který je uvedený i v dokumentaci ČEZ. fileciteturn6file0 ---- + -## Dostupné entity (27 celkem) +## Zapojení RJ12 / RS485 -### 📊 Výkon (W) – okamžité hodnoty -| # | Název entity | OBIS kód | -|---|---|---| -| 5 | Power Limiter Value | `0-0:17.0.0.255` | -| 13 | Active Power Import | `1-0:1.7.0.255` | -| 14 | Active Power Import L1 | `1-0:21.7.0.255` | -| 15 | Active Power Import L2 | `1-0:41.7.0.255` | -| 16 | Active Power Import L3 | `1-0:61.7.0.255` | -| 17 | Active Power Export | `1-0:2.7.0.255` | -| 18 | Active Power Export L1 | `1-0:22.7.0.255` | -| 19 | Active Power Export L2 | `1-0:42.7.0.255` | -| 20 | Active Power Export L3 | `1-0:62.7.0.255` | +Podle dokumentace ČEZ je konektor RJ12 zapojen takto: +- pin 3 = `Data A` +- pin 4 = `Data B` +- pin 6 = `Shield / GND` nebo `Data GND` -### ⚡ Energie (kWh) – kumulativní -| # | Název entity | OBIS kód | -|---|---|---| -| 21 | Energy Import | `1-0:1.8.0.255` | -| 22 | Energy Import T1 | `1-0:1.8.1.255` | -| 23 | Energy Import T2 | `1-0:1.8.2.255` | -| 24 | Energy Import T3 | `1-0:1.8.3.255` | -| 25 | Energy Import T4 | `1-0:1.8.4.255` | -| 26 | Energy Export | `1-0:2.8.0.255` | + -### 🔀 Binární senzory (zapnuto/vypnuto) -| # | Název entity | OBIS kód | -|---|---|---| -| 4 | Disconnector Status | `0-0:96.3.10.255` | -| 6 | Relay R1 Status | `0-1:96.3.10.255` | -| 7 | Relay R2 Status | `0-2:96.3.10.255` | -| 8 | Relay R3 Status | `0-3:96.3.10.255` | -| 9 | Relay R4 Status | `0-4:96.3.10.255` | -| 10 | Relay R5 Status | `0-5:96.3.10.255` | -| 11 | Relay R6 Status | `0-6:96.3.10.255` | +## Co integrace reálně čte -### 📋 Diagnostika (text) -| # | Název entity | OBIS kód | -|---|---|---| -| 1 | COSEM Logical Device Name | `0-0:42.0.0.255` | -| 3 | Serial Number | `0-0:96.1.0.255` | -| 12 | Current Tariff | `0-0:96.14.0.255` | -| 27 | Consumer Message | `0-0:96.13.0.255` | +Na reálně otestované sestavě se z XT211 / Relay boxu četou tyto hodnoty: +- dodávka energie celkem +- spotřeba energie celkem +- spotřeba energie T1 +- spotřeba energie T2 +- okamžitý příkon odběru celkem +- okamžitý příkon odběru L1, L2, L3 +- okamžitý výkon dodávky celkem +- okamžitý výkon dodávky L1, L2, L3 +- limiter +- stav odpojovače +- stav relé R1 až R4 +- aktuální tarif +- výrobní číslo elektroměru -> ℹ️ Idx 2 (`0-2:25.9.0.255` – Push setup) je interní konfigurační objekt elektroměru, neobsahuje měřená data. +Dokumentace ČEZ uvádí širší seznam OBIS kódů včetně názvu zařízení, zprávy pro zákazníka, relé R5/R6 a dalších položek. V praxi ale záleží na tom, co konkrétní elektroměr opravdu posílá ve svém push profilu. Na testované sestavě se tyto položky v datech neobjevily, takže je integrace nevytváří dopředu jako prázdné entity. fileciteturn6file0 fileciteturn6file1 ---- +## Dostupné entity -## Ladění (debug) +### Výkon (W) +- Limiter — `0-0:17.0.0.255` +- Okamžitý příkon odběru celkem — `1-0:1.7.0.255` +- Okamžitý příkon odběru L1 — `1-0:21.7.0.255` +- Okamžitý příkon odběru L2 — `1-0:41.7.0.255` +- Okamžitý příkon odběru L3 — `1-0:61.7.0.255` +- Okamžitý výkon dodávky celkem — `1-0:2.7.0.255` +- Okamžitý výkon dodávky L1 — `1-0:22.7.0.255` +- Okamžitý výkon dodávky L2 — `1-0:42.7.0.255` +- Okamžitý výkon dodávky L3 — `1-0:62.7.0.255` -Přidej do `configuration.yaml`: +### Energie (kWh) +- Spotřeba energie celkem — `1-0:1.8.0.255` +- Spotřeba energie T1 — `1-0:1.8.1.255` +- Spotřeba energie T2 — `1-0:1.8.2.255` +- Spotřeba energie T3 — `1-0:1.8.3.255` pokud ji elektroměr posílá +- Spotřeba energie T4 — `1-0:1.8.4.255` pokud ji elektroměr posílá +- Dodávka energie celkem — `1-0:2.8.0.255` pokud ji elektroměr posílá + +### Binární senzory +- Stav odpojovače — `0-0:96.3.10.255` +- Stav relé R1 — `0-1:96.3.10.255` +- Stav relé R2 — `0-2:96.3.10.255` +- Stav relé R3 — `0-3:96.3.10.255` +- Stav relé R4 — `0-4:96.3.10.255` + +### Diagnostika +- Aktuální tarif — `0-0:96.14.0.255` +- Výrobní číslo — `0-0:96.1.1.255` + +## Známá omezení + +- Integrace zobrazí jen to, co elektroměr opravdu posílá v push datech. +- Ne každý XT211 / Relay box posílá všechny OBIS položky z dokumentace. +- Položky jako `Název zařízení`, `Zpráva pro zákazníka`, `Relé R5`, `Relé R6` se nemusí objevit vůbec. +- Pokud přecházíš ze starší verze integrace, po změně typů entit je rozumné staré entity smazat a integraci nainstalovat znovu. + +## Debug logování + +Do `configuration.yaml`: ```yaml logger: @@ -132,35 +144,54 @@ logger: custom_components.xt211_han: debug ``` -V logu uvidíš surová hex data každého HDLC rámce a dekódované OBIS hodnoty. +V logu pak uvidíš: +- příjem TCP dat +- složení rámců ze streamu +- parsed OBIS objekty +- aktualizaci coordinatoru ---- +## Změny ve verzi 0.8.0 + +- README přepsané podle reálně funkční konfigurace +- přidané screenshoty nastavení převodníku +- přidané screenshoty výsledku v Home Assistantu +- přidaná složka `docs/images` +- přidaná složka `docs/pdfs` +- doplněný `CHANGELOG.md` + +Předchozí funkční opravy z verzí 0.7.6 a 0.7.7: +- oprava parseru DLMS/COSEM +- oprava zpracování TCP streamu +- oprava binárních senzorů +- oprava mapování výrobního čísla +- odstranění trvale prázdných entit ## Struktura repozitáře -``` +```text custom_components/xt211_han/ -├── __init__.py # Inicializace integrace -├── manifest.json # Metadata pro HA / HACS -├── const.py # Konstanty -├── config_flow.py # UI průvodce nastavením -├── coordinator.py # TCP listener + DataUpdateCoordinator -├── sensor.py # Senzorová platforma -├── dlms_parser.py # HDLC / DLMS / COSEM parser -├── strings.json # Texty UI +├── __init__.py +├── binary_sensor.py +├── config_flow.py +├── const.py +├── coordinator.py +├── dlms_parser.py +├── manifest.json +├── sensor.py +├── strings.json └── translations/ - ├── cs.json # Čeština - └── en.json # Angličtina + ├── cs.json + └── en.json + +docs/ +├── images/ +└── pdfs/ ``` ---- +## Podklady v repozitáři -## Poděkování / Credits - -- [Tomer27cz/xt211](https://github.com/Tomer27cz/xt211) – původní ESPHome komponenta a dokumentace protokolu -- ČEZ Distribuce – dokumentace OBIS kódů a RS485 rozhraní - ---- +- `docs/pdfs/cez_rs485_han_interface.pdf` +- `docs/pdfs/cez_obis_codes_han_2025-02-01.pdf` ## Licence diff --git a/custom_components/xt211_han/manifest.json b/custom_components/xt211_han/manifest.json index 7c52326..9230c30 100644 --- a/custom_components/xt211_han/manifest.json +++ b/custom_components/xt211_han/manifest.json @@ -1,7 +1,7 @@ { "domain": "xt211_han", "name": "XT211 HAN (RS485 via Ethernet)", - "version": "0.7.7", + "version": "0.8.0", "documentation": "https://github.com/nero150/xt211-han-ha", "issue_tracker": "https://github.com/nero150/xt211-han-ha/issues", "dependencies": [], diff --git a/docs/images/converter_network_settings.png b/docs/images/converter_network_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..aa1140bd8ef1d608cee506be92a8ee7c53085128 GIT binary patch literal 8850 zcmb`N1yqyo|My1>kdXqT5l{)~MnXCi5J99{rMpAAOF{U8bV*4K=@1x=)adRS-CfU( z|L?E<=RD`howHrLx82))Z=dV)dcWV-!rr`=!^Nh+27y4hFXg3GK_FBpaQ{0N25{Rm zWf}+!D2}RflAw})stsTR-BdzJ0t71i0=YH<1KSVm
L zcapE%_LjvW|J3PZlh7nV1`F1z!>p!lJ8ewSKv>UfzDmq3YoszvBTm3ElT7WJV*bm{ zjuHx2r<$K-uicrS1QNX@XS;Dy`lVM_*uY<;r={4yZn}zUD3Rm3F24C584&2O5M3FV z=xXHdZl?Q!LtaUywUtt+Hh_wRTf2r`$D?eYet#no2q7}a c>ZQ DbNU zei|(|m;XutQNrAs ^%Z5JQ;12-OJ)ml Kerd3TXdchkh?(VzRSu6% z0-@{gOINBuw>?n4;UP~+#==~i_FkvzG|p|jlSaImBQG+Z-&Wo9zkTi6{P~O*j^g-Y z3zR-57me)@a91nz5sxW*|CFG5|FHBaXu&KK0S@&NCQRz+0zwL{T(uOF7}|6(%@djo zzos+MFLI$%m)SxQfsfPhz^zdXhs9^58UTsmYa`-jGus0u{X~RKY`@?#;UUR_{Z5@` zRn~7}JjdGPOp@OF+#}f2%EpDb_t$1T*8~@eGUUx6WC#eW?41CIwgpRVrI}^1$x{x5 zMSsvbPz^KK+A>XQQVQf!H(oVbcBD1sFk@OMTx~|pTEU@p+nwFj|Db8R*FheO${%CQ zH@bo|?G2Ohe@F76?x|Yay$gBIS0tGqNOKE9n&aQM21UGc4D!8%;o5Knzmp6J5;B-v zSwSgY@H?zTpE5AzKBm*+=l iU-~~gC0?6lL6c`RZ5@)$MaISI9 z5M2-253y8)7&f}F0|_E;=ENx*_|>Nv+o!ic9cQ}smzDQ%i2Y&@0h9XxLiV4RT*9Ws z2X68(lBN))mcLbPK6iQAy n 3f5jAdkGg?=6Ovq ;WIBmPmQz1$|`_qyh zdLhYDuKui5TnvUmF0R09(oF$uTe&S!JCpV3OI`cm_=ffrc0E#ZL6=wt9I=@NaYTo5 za|??0{r;Ix%O0K8ig#0Br^yQTQF9J2xnx9SFy +}mx5zBxT4~d&}MaptpdfLWWwJI~#*hrq(PV8zQK6AuemM-5&9o{zcPb0RV{%n6^ z*pxynxC-d?t3>5+daym^aK_-Qb<9P1?G)I~>;7^xL2&iNux3^Ga3>+4>7<}CNxCUi zT#r~y?Dn%89n$5SE$^dwyr^I?0+s(D5&}5>FN80Ru*(%H`%m1TG~xfo{dvB;VhE>G zX&JSdlVx;f6dRXvdVdI)7cF_eq@<-KJSXrA2tWo=NYgI^{hY8vN!D)3>m*7zEHt?5 zA4dEL23&8Hk<+uS3ls#D0fk4oN%N9~Q2?VjJ6o-stMi`o_CANY&h67>P+~+G_)a#y zayrHC_SxTDh>nJ9k0mtpJkFD!R2`mUiKWr>cw_ATSBu|l`D9I*R}NHon=g#*5JaG5 z)HKDMGa7n1Rjfe^0{~uOJ*=%5+%i9uqp2g~b*))@c(m5*c6*6DApAhsU95=@i8(qF zY8zWMcSGcJyIjYseM>)!q`xwgDcUU)#o_l4dl9y!N{D&{eX2~U4fOR0a+^69{oU6L z@th;)v(VY(!1oY}oBlz47r2|~ng{n89mL1~ZtLwuAaIa>PwwjwR)e6Xq``q1TyMDy z(ITK%jA*{;RT~29FSdTf8qf^!>3-8C=j)Afd*G~#hA`jti_DeWZ}+6o?Us7cWzKKc zmp#CmzpIcQVQR5wXHBEYn+5vn^la#maB6wb<>(LL9yZV2t|XeSi8?P} p)mIDY1jNyY=PMtsUd64;YsBi3$|Y=t|UC(VeRoM51L~49o0| z70Ii>`nh2x-WTMDnx)I@?E1^yj)uQ4?0!~)Pj@zlKAbj_&0|XwvK`JmZ$tAHrdMv# zg12`Mi@tSkCw*Q&0P5n|hkSG`7ui|rm7O%0q~^ugHgsG-8nt3);xb$Sn6uXI7kZTE zP8uA;b>qfbeLplA+l%BbBKm(xuBRoGW`gm19d4r5Fd=8U#2N?_0^3-FubvB)s$p zGYF3cu5CGE>z_l{&80uN`uOby9|q0wb>{qs-oN=o6PL eU83BfwbC)um zQ>2JcY<#0=Yj|&MbeY2qukDi0N9)3vqx&z%y3r&<8NmTzIpz$DEm4VV(d>?eU+xh6 zG<8($F9&hiJ*FLefNM;%X$x(5aOsNFM$7$vur!(R6a}!XA>fI6TTdHz15)De5_5eZ zQLMi^fB2DV*6R3&E+d*00kSGv1V6#3k(jg+IuLnss$(wnH}O1EqM*~$h~SG2XG16l z$=+e%aH9e1E94{htY^30LpRXb5q!393%st8Q~OR_yF3<>X77Ckemm8{>+N9GxfSw^ zDj@l9zVEydOZc{K68jfEu)Ptx!>)d6ROF#Tu9)1F^ozihhnf4^{Qlz pj=xwl zAUKEWLx_&HPps?CdfN><$Ryn(dkbsrFMmM1&Z~v)w#Y>9uCPT@a0k43sucP>9$et^ zo=1BC02autB=y^PZt%>0?r`YFwRdU|P3p&_#!4gpel+YxraOrxJ6m7z0OPZ1YX}1w z0{hhcGm1=@$wk~WzJ_WLXzWG^5QPfD!-wUqBNjEH!nX+nX}YiGZlDEX-;pGL@;fdC z&N7=+%AxHK*g= GOl+@G3V^0>;s@GA19*yko7ybH}$Kpo?bvn2{z}rrws~Ycxlw$>Ss;^;L7alC^yu zF8=FPbARX{P-BX`5a-|RPnrhmdQwDiwVkxuCwU$1y?FK&yH|#=F^;MknK(q}5$c{@ zo{ 1IaND`*_o;EffKr!2N 4R4!x+y9ZTZbZ?rX{H9vC4BW3 zfFlUxWr1uz@(Wwyk1EKC>Ww0q_dp*-e^Doei=vsg*Y~eqjhWkWY%vLYUO!H$-yYZS zy8Ha)hntwLIjtDQ+HU5`He0FDZ`=~(y0D7{9b@XoPR1#FaP9TDZ<-FiwuE>?^8~nT z<2uwIe&?+hus3v(fBRq9Jp&OLXXg_{x<0TJrr4q&-<+PeWTN&nduS8##X?dnZaTvO zgzlMlo%gqLd=ZfV&(_a=0;Y@aE````L~Q4ySiqIP z8Lg%gt0gY_-Z_N#-BVJE)mWA3t=a>3?I^~Aj;dvkw9V&fNrS2WRzJHsXKXi#@{KGL zv--Q;Dmcb1=Di+F<~!chk~*QP_+B6j`z&EF>ECucw*8WJq8`{Vds@;QH9@W7G$-mF z{h1o~r-!bza<;=+iTVhxlo_4e?46t(Et{a38-X4Zbi5VX7+O$`cF$VrwE?rpN!6kRf8&J44rVfNstwpQO& z)xl5*BIaB3(w`*`hbadU{daHQl zggTxCUF__CaSQv%pcMJylIuts1>v%r&BtH*V{*Qlev4Na%=h8u*pzO^|KEWR5<*>0 zKH*9f-y&RGjr|jlGOG-;Yq^rm@XBpI>Y;d 818%R-tP+gzKC^MMXtrW1e8Q#cj^je-kyJi!M$K;iGH0IjjS-+KQmrcx%e+Y8;WO zCZzWTC?87j+;0MYKZiPo_=D7* b;+GJWf1wbJIL=P*oig&|Ez}Rm|1+Sf1S>yal2X2PHzlZ;$ks@6f}u4__klGRB?2 zJGVL&R@gz+bOlDSc8{52+KJbH@KG900fK>==--0Et?v>LdL7T`2V!m|D9EWm{A$;A z>)ykd3;m#3H*1?{$gQ5=UeB67_?9e*5D!70R~lPXmY^{XBq<>SBJ!k0HPX>%&tt$O z Elor)zn8wBX2R}eN&!=eQMP+7ZusWSv&pNRwvQ(pG;qz z0C0l?u&$t7V`H#?ijN&2D1Txoc0WUCFAD7} z=GYqhK?CVfqNv+6W80x7dnv{lmt?j(!y$RFSCJ3W@ucpw{^MwOZ>{K}zvNff6HoK^*L{Bkb$Wz!xPf^nx)A5iiB}GKU);K;ZUH_d Zd+4*U73>b`$Yz^FQL)P&2D zG6;e5;uT+^nq02YYBt5X8&t5zwrs`8MGJD{jFVbbRw|X2HMT^p=L EG zPn!%XagDwOW}*0{>X4Euy#g+!pRE-eg~B*?WIHWnI2La2WJNG#)9r&3wHn235z7Iw zlfr8}Q~ho*`~HdBMq0g{B>3xwM#@EwU=!R30PMg$HryRE1i-2q168~MExY Y6e>+%S_st zi 52ujg>Uk0~rR~$IaEy&*k z?8YrKAwYu=|Jl#&Y#@c2jNfG#AOX^I2BdXK#~p57Bc3K@`rx3)s*AH-wr`ZaG*+Wz zBn8P{lxB=i0C 6q%%4L6u${GEzmh`Bb #Pb#++YLEl|g#K j>m-^6{tZUL>h}Cv|ws z_;&s~dUuvS+6(930!EqoCQ-6x3$mWoE90tlQn(xQ%c)5|fXZmA_Klw#X*{q|8F--F z95t7*Fsw>}=hY2hwG~vR3~WZUXXK0QkvdFow&N1XC%d`=g~PUX%JqQgC54#R&YirI z#JCN(tXv)I)f>&Z4(>TyAZv-RnaBxgJ!`Ad$ggpy8Qd?Dnj`+kEZ>hYTUbzqn?bdE zbS|ZDrb94WHC*9u5*zbDrxNj3^lXF?VT6qPqjba!*M>--L9_ynH-fLsY4wVGUVkY3 z(LZHzLX<=MYAY(}RG=JdWf*$0#!7&I0T63tB5Qa;{a+Hd{}lE4yRX0_!3LExfl!8H zQz+hCO`O7&Sgs;r8xYrF_&Q@_?BMV^Luq`hy&W+C9Nq>0Y2asU@(I2rFM1U^%zux& zgI9<$?*3qI?yKD)` u7|C3a6*dq|jh z4JiTW7jY(ZssvAu2r$_5YvFWEzkO^ey*+aLZw{(++5Y7qkk8jo$1R#f4q?%YI)=J6 z=F8%M-C`GZwEcMD)P5!9 gCCcj5Qh4w` I9G<-&HrR=8(AE_gkl21?(dHjr*^# z#0rnB3Pb0*^HNeUD8VC%@cVaN7u`M4>$c~7jC^*mezV(5`8=yW*xCUZVVS(d8<+n! z)0X7n3`@8d+x8mq;}((r9g+QhV>{1PfAs1Wx?D<|^9PMq;T hZVeuzrxiU~*jqxK=6Wx CT6KVcr&vOvCTlYvl#Y+%l(X8F6HXO1435mX69-)Om4!HKPXG3Wp~oz zmg8`HUzCTucXizQ@h>kL>|DH&GGMtQ<$9S0&Jj &f`Mp R%&cV-azT_K;vH@6 z+tz>$WdMi*PhP<5F3q7qn>6K|9AUOz&Tycm{Uw7nU<3FacTu1#uhwque4j|To5gES z|El%+%JDJc!Zr9}Lo8% tcjKkz-<|D<*sk79=(Lg8a^&CaVTlFM z*=_#1IBFkoG|v=srz)br-xTri-)wcVlIpsHmFx;G-kaDp4wn1k5yj%+`!=6B6iR7U zwADoYWS);^1I(&`=8QOVDtdP@*^NC{fvKK*hk?v@Lr;wsmgH#hQ?70;5@XYrWXLs^ z)gDY>MNjb!hH{!U#V^oBo{RW)Uj4!3t4$e7f-(Pu%I`gPCx|*Fl~Ku)VlmLoFdMYd z_^{%}0>}d2V*Jo2LoI&=IC~CL3H?yaEWypHr&CS29uS?;zwy!DN3Pv=nw-j{$N?9( z&PTavb4i|fgJo3;FEMW-DOc*cBLn%CQl}P$bVg tO^7+b{8nq)iY5Nf~nD$g4%Er@*wt zDqxn|@mg6TYnLP2l27Y7T|n+0dO9ZzH bFd%L7aL5SlLp7Xu&5 zH`9|bp^j1jszScHA~lAGe-qov0dcd>*5dviU|`u30?CJiQTu7Fet@y_G(&}rf9C^E zSg1Y$a20;Z@~R2^F4SR^Z{YB!xs~7#en8i}o`p_D6{ILjpubLQrC?haoYzY}$UQfw z?oa{}duQn2;At045E0ujJ}1orlRKZ^JMS&m>(4Ua$!jw{cKOe44A?>_LcZqiFs)sc z0zVR`z~86{M8EI04m+j*xCyv;4ZUWkGfN0p^V0a|F+fBV5GPRi;o<}#-RnyY)4M?- zoSYXtF?2jp2hQ%;R)WLiMhOse)eoij>5*ZeLQ-68U#)I8*E$pB$2OrfAl~9v311{* zQ4lC*4jP_;Um{Z=1IcCtF$TxrA|!uYztbpDf9Yji9Lt)~=bfA>IwdmPReXzXQW=2E zY&@*^ij^+mesLswKAoxpL5;QV&jY|VZ_Oc?E4Jq_S%Tn7>58eQI#lqeb$@EcWC0>+ zT^CAKdDy0ECtM=H)QbtDmfMasu)mq LKrsYH0(Lt#ggsPH2`3_;*q**`EyvgEHx1f4nJXAo=Ntl8fZwR(CGwAu8l zjrVgkpC4@|J|s;NO-Bm@wCI4--}~%wN=+&!eTIGe6%f*qtO9yH|c%g#=I^)8p%q^VO;*153Tp0~5+4Q#bmEGs9} zZG>FRvf_`-0MTKbbX}fGqAJZ5Vk^OF-0ikl oL7eOF=(1;Zs2o|Yn0+Afe_)nZtov*lASM9$% z!~TM=r{on4DE>*DBY-c8F9FQj+|A=0eWp1+(LjRG3ts?dKJZapaUD~cvSr5dIcVu% zZug2Q4rxd;EY&x~ymLG|V#o$D(0DUc=W`e `PPXqKGT5t_{--8V`G=D zfK*4r5LWrZO7#}b^oGmt?2wfDTVpM|bV)TEdxLrNtiX?m?a@>o_X@5{oq}u>_a}zX z=xXk#VidC23{7&QazvN}dins?u*d>z+cA8$A1r`c_->fWeFis=3hmxe&X{2jqZ1(v zb-jDDRQhwVv~brzb&im~bc~QK5T_~tgkjDTS6%HXqY z`NjjtXuEl5=+LLI?6Te>R6P;kt+t%LkExFM5s{J~YE46M+=5?HrzeBOJ?y`vQ2vK zypfhCvHHWv-eAC7!Rle)7Y;RwV4-oYWsJfAs v&8v*ooBX>_x#51X44`8D;o72B(854qao{J5 zi#x(A8u<}GKRXS1 ya15%ra%0iI>uL?Z_B=-qkW6go*hJ6|NdaTOXY zF7&4I;nBemR&yC1R=$(hxaJU-;U|Fya`P6Hfp|#7ress|ghPh#984Hb?~xZL1HLmb zG&YD_-M5DvWkA{R+JBLapRNJn(o~gh=U1b5g65ogpC^=o`nOCnE^x &P4j?6e#%9$Ffcp1z^Defb|EBw`tA{xY+0h)sBFxo|ZQ(({1^eAI?(|Sr zMi9BVr5wy>rbgjqxLEb8&HlQ@%n!vEN)tddrp=1Nr8H9=uA)>}6xA#&!O9jgO>jXJ z5`PcwT?#QtC!-@ry_u4*RA>s1s3RBF7$nL909Q;|4%)@;M*|)g0E^K@H)l9Tt7ItW zWm919v0dPx0^&>AS9jxno|Ny5k=0u&dVeMZ_x0Nq1OF}DXG-S*CbdW_02~tl%$$_2 z0zM^J_7am _v$m {}CgP-x9? zdBhCS)#FpGm`WVVhFHom*M^zYHo>93;db$UNo2-vAyMZpPF)dx?(DNeIjuJbjqtqi z%1So1jhjS|rh#`55bkTbSoAzLmUij^Ze%JB?-WaZebBu@hX{a_LrKQ+F=m2`NV#ni z{8{XZDA<3e4{}!O2Y|%qTxOvq#3O$lG`8CAve-99z`zF-!SRQrdtu`*Knw&D#eLY7 zzORrQBW!EBu&SWnz@uyYH$XjGC<5Yf!C@hl?dL5wtmYm#$9@|umhIDH3)rea kqPcRPS4nGO4Z_R5pNT~@A%IHcn!c|=q`?s% zU~lMFz*`YYg2 aWj>k_z?&O*d4-wbTMTPY!!!gJm%k%v3!L)i{EU~OiXnoLf?q+(a zP{Nu#G={XR?@yrlB*eex1(p*peMR_@Ev9z~BVVQ}^4n6Q(5f9L+e*PIV1AJWL5N5_ zC>qCPsWtuwFjp1}Bbz>*b9H7E#NJY2zK(+DRXY3Nu%M$Q-Gbk=25F88a%p6t&z{6! z=&KW;F>p>c`SVYvx #epJjpLvU0~a?6$FyOrgws9yFh9=$d!SpQ7@gf^r!SZs zi~22m5Y1kzYej$mh7tm55b}EM`#R{^d$gV!-#nw5QCHvV{l;p(_1xOhfYAi4)4AXm zrb4oxfT_N@ybLMk%>f(K>Zia+2+aG}d`zDgknyt()uxk&`pp)E@66*>3p`@`@AsA| zf6v8vr!xe;UUmAIVEBAY;sxJ8N_G4wEK@!#`;ftl=-m(?(eb26>dF0X!6-5}vT+(a zeLg4VpZ0pG-gQ8!jo}*RX{LtE8`${K !-5Bgd6OS?un*Xpik7V7R^7z#5*`G+K^j~!#QKB23iEA_{3IE6(NbW}k=vfEI zQ4QOd$K&ilx%zl3UfCCqg))oV7J(5b!t+8SC`;Zf0N^`6R)0nNM(z6`4In9=2OP4E zAE!rLi1b^Huu7u5t#KhX$0*u^B=ihN8IEE8$q)G{#9~a2QE{*)eyq=D`NoUbj5YhX z6J1Fc^qdNd!i!99HY5G~wQaM=NRQ|m_~H3*6x}!j-e%0+mrhiNQ~xp#w({Q@&t%My zSD}N!z;N)N|ETb$n;brI{?B~_J`?iSlmGqi78(H!%yq`jjuLH=Q<1Rek4zP_DN2>W z2W5u`KL1HB1KJ&wqhOPeAw0Ta{;&b)_l%f8c%weZf*B59>|IVzCXDn^gaj+V1dzs$ zk>le)Qv65ysm)|IlYGLv<5OGlY``M;kO8F9(4MI_^ TojW{AO zE@8PNZ18?Edq`s=Y+Mtr(_6$~hK9wv0xrx)w~ 5~w<}8u0OC6%wDn5reZD@>6ZgYq*1x)9mr-gbWA>1w*E?e!SYs; ff=x +pYhGlV)M!QM!?=<5Ayni`f?3&aFjvMgy1GO>)do)n0z-U%0`hF!~n zMjfs*LBP<8csjX=^~jw~1k4r4QP74+>JXC;e?;WQ?vi>S1}f=Sd1;e2@inCHfU)1( zB>Aay(Hh|092ORE-rbr~!=t{LhQnNW@YSpul2?2| bHJ5G+T{(y!!^hecWcN>|q W*2z{`{PMZa(!4eu(ATShh|PConDXF`ie1CKi}5~c>##>^mLVz9Y!HcA0w zl$ezZ;%%o$6t3xslzdO4f(i2L`qh(6e16tZJn2%^f;m3T*zr!ATx1XOAXA@gq?H6p zUTULq+WHPLQcqTf{W`6qLEW1+%7=@gAuT7>hB-g?2mWl9ZriURw~sNpR+8X3P)pKy zOv0yFC>3_zPt?D5`%-6!X1YRwe--heJ@U5uX&KOkQXdjvH2J=!2=%C~Z}j@Uw~K?s zuVtO`riI)J=yq`xyNtLOe*7V(K8T)Dxb}kg$OL%Nm3H`rgoL3Uuz2am=K>p! BSCix4t!x2BXuY;VF#?ks(Ko3lTETAm54aW7z|X;y}Jh@^FVJdbUPH^6d*`kyt&) zN`w1Wm1MUM;@q-;{uVp1`eQV6@i64!la)wxY4lH7_Si5I7I8-IU7p7yTyDo9I1OyD ze%_iUHf(M6xU-&2VBpj91WQVswo;H=ny6T?ca(_%Gd9G#rt|C}uV3C@6ZR~Q#rXC! z=t%dvH!s^|Ql^I_F(rr~thUzH6b-E_4p8YA3{~?Re-<@5|G!DbO_;Z?was?!EG^9+ z3R29#_&o{S6R}cjQxI!qx~}De?o%fXSgh~zdF|}*`XaDAVNLi1hLU#6T}RWm1y7#v zDU0h4Py2_41?Oh<1)b)e*Yi&FQ{Ow8)4+uXnpY=Q v`v#s-6)iF*UsdJ)>w(EUf@IAokiRH tr9Ew3)6K5m?@b@s*2MzLdv#uiH8Yi@ltG)T zAEX&Sx=~v)XZ300D_V+{{TFo4EpN0hud}hqcS!`Ulw2gBUi~oLYmr<*2_H*$9&kj^ z9yod+xA8|Ik7V=Z36bx=>j*0?0yd~1hXw&>Z=mx!j1lu4Mbr>`Cb6!YTnMfw7hOI8 trlqv)foHM+w_x6yaS?nl(a-;k20Iu|N6Y=V0z8z7!PC{xWt~$(695Xy6Se>V literal 0 HcmV?d00001 diff --git a/docs/images/converter_status_tx.png b/docs/images/converter_status_tx.png new file mode 100644 index 0000000000000000000000000000000000000000..a4ceb753c1391f72461892ccc05f63a73e00351f GIT binary patch literal 17371 zcmc({by$?|zb-m-Hv*Cpf=H)GiXa^V(hbrzNXL*;QX(adba!_MNOuk0IdtcF@%vkQ z?S0NZXRm#&b vhm6=6UYVUC)GkRFK3%Cq)N=Kv>dJ;>sWpJP8N{$ApRu{3O}$ zCIYy?IVelM2bBzw?*KOt%|zuzL7?(Tj5|Xl;5HgqO49)Z!tQ+f1J`4h_Zb8d151mG zesa}=E$Exm_NOvj*|B1BH_xXEFk{s|C(`QvkcN9wR^YZ5bUVh5gU?%seg5OUUl+nw z)5WWPj1NlO0ks L*dfaAw|$r&B*go^=}U;KX(`K~(a_Lj;NL55B0v4*w&G~PEW!X6 z4{x-&m#QWFF^!f)TwMGUKk|S268Z5`@$!ZDmGkw@WvlqK+*$1Xbs8kJ^?ICm)0D=Y zp2PrGNUimnNn_~|b?=sn _J8vo FbAKu)BK7z^i_kc$fdC>gXD`IeT@7>WlSp)Z={}8+@{r#|= zts}hkx-k9D`$YC`aBr#I`*Cpih1V}@h78Fd906K)qX*ADv$my2oU>znB`isvjHqyz zKJKnz@55TYn+HjaCH-Z^hm04nrAPkxOZ6k~;~-ZQ5!c7~N1wFEQg2+j-n(A5<2T-z zm>HfA_ jIUG-_R- VLweMhu4+`uj$86px zB0a-k++w8bwKTZaOOf0X6uif~v>lTNq$89^S;CP!gol&gS0FqgOHB4)N+uJmKz`NL zhf%vVynuGQ0UX9D>7*^HN74vRe4~JIW{V8G@a<=cmAIqPoxm%~zwTM;Kmj$q+qfJ^ z33M9Exjwf$u5G=& CcTOGz5Re8EM<6F&T zk+sW}ha;AC9C)_D`vRvi)9cVjKkwuCN6>N4C`;udIvbu`@!j0xR;jPZjrw;H&(I|7 zkw+Y2k~@h61-E;Lfs(imDd~~jd=;P-~Ho7dG7Td*719alzis%So4ExKOp%xR; z!#Cg@*7=Bp*W@r%eQ2I9Kb@WC4F6fYfGOlt@#~vPb1`tWt(P#bEu;Do3!$EVtFWIH zqEx|^j8OJ`bOci2xbm**2k)E+`n(MZLo!bb(}fcW+BggCtJcWEeg{XWju$U!eMP}G zRnQi7AJ<~Mvuzw~j9+aGc2+(jVRka7GMA=KMB}bZVjyUefl*88I2L*ew@cMH(!)ly zeaOuL8}w(|( xs50e_H$^$1nPVq2t6A_CiA{ zMfrJchfhZ!L(tXI(meC9(j3OF!`MgR<<7U{EK5T-c`e{&TEU)LRzwMNdU#|5M|jsS z*tN*Z(Dt}zRc2tpY#}q?mqjn3l`5P}Z2Hk6CLlPK9GOH>XRSGOXYO?(0}3CM$9ZUo zy^e@)1}A8*wh=tnwmnX_{aev9coA=cb(fVsP2%0$2NwZX{aFzoJ_@2pqkZ7*d>Rqj zp-KFlw@>xX09_wOI9FUZZzKt-MrcBhWOGJjKlg7l5&VtHJ8#}+bo&h3k`|Morzvez zulrfEsox4Ch 6#)&SZDWhPiheNno*=)Lua(KSI-_T@&hz+#tAamD+oBlq03by8Z7?PQhhs z0b{>D>@H<_TiT3%Z#HRnUqMXy_$yfn)5+X>
U+1vAg$PKoo-2El+N3 zVJe*S4(#+u^D2^;C7Yju8kG%EZ_(bMx3%w2qk(?vmBaD1ZQur7##SI)ceJ|brHqkz zgx>EnChtn)gol`I=ph~HiGGV(({6+WhcM$@$FF<$35%tM?up? +CV9vbbZl-=MN+s#&4pt+w!$?n#aw#*Z*cPMmJ19=pu@}?Ser&7wbPkFof4 Gc7k=_vS-*%`cspI zP~<@3i!V0qx$*7rZQPAwe?r{__w6)^5;aPqUR8NyZ8a|h%;_o6YS`solC+x}yb_wg zsf| EkpPRqbt62N`8P9aSWRPH2(h!o`15wZ z(b(Z|i^fp0op!YxH|GBLrxS8g;)*FRvtu?To`%2b6V`zMG$pfJLq*2J!;6i8`>(wS z;S*HF =12Zupn-nEWZ#Yg-s8)xnD1l$SZyuA zi?Z`g`9G;<%mGNUvO}EE8OU^BXgD_BVzRScZIEW9?(C^RfM+{=uy&`(U<-sp7V@eT zE>L@RpHN{l?`KlY9>RaBKy{yDPS_@86&4|Qh1y<(vqcE9c2(E?{cF^j_|5L^4E%j< z=Cb!3Ys1{87fr?>Fo-ByVXX5tk?n5W^7xK_GF-kB4f(l2J0@PAQl7QB?4NvHZL0 zO{64Vj)$lLJ{mlsQ~&+bzJp7@;G``7!{ddrMG8WkzqAhz4(26Az;wqaJ=9%3(#0hi z0MMdlrC^-CFV@@S5wz;=Q~BKI7?<{yMXmlyI&Vi=m{QnpQViquELLR+COPuv7a2Vv z!280IF(~7sYO|}2%OuXR@olIv{Ax;$XdRG=BpXhE=Jq2&yJq26OT_!dZMcpJ97&}w z;4{BqN=9UoGx1L&_vXfDHQzR=PXyKyBJ*$bbj_c)1U6dweNnx@@yn0e>o+K%BambZ z-aa<+5moH5#ki=(X?6Bdf17f=?vEg{Tjru&R!YG=Ij7UZV)M&v){5PahZa>rp<_-N zfuL&Q^66Ddh5@gV8lKI{=bmFjA#B{Vi74Z(6GvpOASsCq&Ut6?hE|AB`neA+32LtH zrVyNtz|6N?vqaP$CO-q?$V_7KGgnPz84FuF_ZVPAUH)3Sc^>hOdu73f0tpZASw+hu z9tdENyo=p $(MitaTO`j5W%4fUNZgA$6;*fR$VdURJO4B4)kKRDl-(A~tk^z&o7Hkj4 z&;^`pQ%Cw$h}qa}WXF002;%c*?~6x9WnnE#lYPGkXs}^jNMsRmQb8`o3c29iXkwtV zEJ?P?Z)rLEGMKH+wf7*dGlTDgcy_v7O${eCilM#Qq4&^Qp)Zu%kUp61X@>7cKfl6d ze;wdxH<;q Vj!Ks*KTu0qS{mQ2E;> z?c4?`aKq2K|IAA+gR1e2s&M<|LuBnrq{>-EHiM8wVao4-Vy81bk85M%M+4HHkg;E| zZjqn)Y0`+e-?Y`yD=QnEvOn&o#;Ox0*J*7P)=DP}kEZU}#3$O(j5Oj@`u9Oi*#*c| zWKalewJp*#ox}DJ`TN(tp3CNkQobwx-h*zU=m_n5Tg#@_Piv^sr*MXvg+!7}GmE(T z5*XE{*r9AAOBP1ZBrzE@w>_f 3Up1pJ~b$eFKr)69|`mnLDk?saqLl_w*JIO zS&=_BCl-i0IAC6klZ)JU_etnJNJAyq9mCQC9`Kn$#w?vXAU>RnrKWrXd!4Q+LkhjC z=cNbf37lB)pc$_K|HR1l>o1S1o}ku+_q600!-IR!_KiJ*G(ii4F(s(DjO)4VSJh9S zYjx!YFFO<_t`AiBu&SV-^a(d$ii0dsT&s(7BbdDs6O$ahDpF(ZcDso>8`7S)`a58O z;16yC>)))eoj_-*SkgBW)riY!V_dr22;+sWu=f!4rebOX+~{oNW<#EKbCN-0Xp%PZ zYE^ m#GukQg4 zG3RLVdc7vpcAkS3?7S*=7J=&|8a~Z?7hM_V219S4n!In{f=!1{o)pycLBkgjMFt)w zPqrHEIm1NAw6kFoo?Wtex_=-%dUGJ$Y1-W?@h#Q)p$4=?3S_4~h3GZ@* -ExvKUG&kq(x)E!2=xl3sF-kV@g583s`{46#^>gVP%Sw9f~24!`#R+GrHZo zkBN{c+R5*xI?{Y%z$B^(g&%9XhnCpmhy9%IwZ-7YjUYi1B}_*YOf;x^nOBW pdz}y~!S)TciTSmZE+OJargg(Op%3i*@y7q!iDY4L-GK#7_J&sKqBl~0?i(#X z07kGUo1B94(R%?khl#zd5eMN#gL3M*5@aRa3lEvU)^-Kw1!zX;X4|Qn97) a{MdG$H+V%sqNWJ&v3Cftxtl5ygHTM|q*ACMsw#Li!+Q))hP z=*SUeqY+0~U h!mAIZQA8#oYp)}t zIq!LSs}TGd<>#W|pvQZ~_{ju`o_sWxWhqJq+{ZtGrTcRaG={p$YKLYUv8adx6$Lgw zP|GUjSflLJlCmZ|oOZTojizXoa>ae3FttF D(S$?jl93&qmY`z)aA=Q{DgC* zYOP?ImYDcUM3&-%?yVk{X5A|OQneCkNoj&wCj2!0+M&=jONsh0WBL=`y;$qYrlvt& zmHuo9>&DflSFw)8lGypx=7V_s2{hW=-(pzpr8}peWawUGQ>tt&kr1np>p;yyO?2dz zf?L>~?oOopoBnm_Il-EXJiBv_)8~ YTO$#DZ@U=6%L|V!wyKeMH%uRyJwDvk0Fyp*`a2DN ZT8QM8up2bo$p)A_yvFE2&%_MflaLyZ RCXp;p5dAaFgv?6W#1-_={ zt-A0>;=G>%- JY*zq}jZl@xmkK }Vr`Hmb{9lbGm=*uobtka?+#IS()5=1#orR| z)i8`A8v=}K93YyttiLT(k}i3-Zs9 #!h+@?DsA`$KdUE1M?kV_(qrAYO#ed%YPFnCfVxzt8Fyq#tewvlNvUV-`je z7wq%8wgdv2)Sq6wIZOu0Rr5KsTQ)LoG3s<4cfh$j6zi00QVrz;=vP7Be)EHc56m$= z)KvhJuF@ni7#Xi#=#rm6lL>KCB%v^*^Crx+r=eC6SW^A03n>KDx^;WLN1gPJYsIrI zT{i~;WVm-+CZn|7EE*mvb+w%_OuNtet342FH;uuR)q3{zCnu>7G0sGe(GdZg6Z^rH z66A4TPFr{-Ig|%(%uOToxY=Xym51!X6|og0T P(eTk z%;o{m+atCaXim5mUB5 _!yqn{9MZhv6UHrjl9z1*fq(fm>Ms33Yw zV$B6yGA_yXDfS*A_|=SNzEB8nObrcSWYv{LW2{sm`FF1lxr*RpkQ`R#u|8t^_;vY2 zg?;dKb4zleAMkju&s^WV+KYI45I*0?HC5zbtJiy(7}OF P0%_tC65V)pz3 z${5NQdv`JyZO)a&a`G8i6Q7R6$mdrRoD0oleDD@ZG>v@lww}j{?iqAMXt5bra7iyQ zOb=+|&^I~v*=G)M9nZ!XOSb>Ksh{EBklCa_6kEB7i4ZuR701Pc$s&K8b?X;@$X^N% zJM^7RHGL6 GyTke}XXdOvtPwHy`<;{T%A5tWx49w{ z^-NAsElD%nOTJ}-(B0_V^ U|O#OA%sdzU>b)S zHD;C5aROgq1WMN4^8LHAQC;Ew*!o7)Ny-E1mfv;=p#OCy5OeHehYY8JxSrv zr+}Qb4bB)xC!c&dK$yh0<21zJpALZzIsNcJZ2*s$DYK%*JRK8K2P7mL`PJqHTYD>_ z`{|XAI}9(;5|_i)aIXxT4XW=_X5u)6V+Cjhg7LaAhr032iqo{~pYNAVPC|=b{h=MZ zSatrcyt*m>VM$Tk>hFuut#e|)Mg&yLgh)eP(hdL?%OJ@^oEHi~H k!C zigp`=@ l>!NC4IRB{)E>XE?C0Sl}#;!Fzkd4+wdC}Ue48yLDs5*usm$0oFm;o$!RN%eX zf}Ize^5--JhzzaGZ}F|Q6Vg0yg4l9+C6qfReY62jKDLvSzFz-eN=$?>v#jGqEJ+S} z5(QoIY(ykc_9OIIm^vT31o@M<)%eVXw-8N29Q%SPZ=b egi-=3^Yy)J+^m(fzxo+%}S^0UUaFra=OYb^0> zk3D_W!pZ9&jHabVP**4FqP>u6EQr{#17Z}KneM+Sp3p-g5|Q_X_JcoL!FgNK;Xc82 z8iCJ73c|m6ho?dxxN2?4_;%64E;1M!(E@V;nvGnx&^1_$0f)EwX5h+pbNv^;O}DS2 zk)wa`R5xht?d(BEv4HsjUz;R^kfsb1*#}+E2~lFV3LR7)EkKk)7!lkAMaD&DQMg-c zZkr7$)up!T77H`z93(5SZIszc9w 7Hc*od5Q}jK0oX}>GOW(w)FyCIev?oWt$sN z=PzEcL&zff%(pywKDco!#HrApOd(;{a!$X%8?^+yRW5+Ody;2G=o#E$D-dFei}Xz+ zBr~cP?qM@23iGuGqvE2lD47xT!rE2~cP6icwEL;An$3Tt`yIrh2yDErKG~$#@c7P= zwZs?ooxwu1 zMU$IDzj#alnoz_q}IS35}90Fk9$WPSHf$F~dt^i_48 zCFDS;swJ16Re6(NN@oB+46Ls?jwYiSvqLbNgknVl_*_aCl6!RY6p*OmY2J!K%hIqr z5KkSuq>5iPI_V?67a=#W4V=|Pk|5ZA{Fb*J`B*lD)QJZ_uYX#KYT;%X?dC2HDoap` zf5Jv4Aw>6st2F+38G{$JKwHPN#_A6q5^~~uOI{JVx#~YnZp(tMHGmgx;3`xz=Z9rN z@yAu8%$y^6YF35#mSyDdtUUNJsfy2bgLSv*lr#+3D#3fC@(Djf4$@gWhM*d><<1@- z+Pgp~wWeS^^CttcC3LRRl|o_hZSaXUvNMQ%=QGO?Vj0Uv$uC+qv&c-Z28{jU+`Y^o ze7Q8qujw)bqR-X=3Y`H na+-^&r&dNhgGqau2gUq!!+n+&ZmzYRrOuEwn{vjD#UB*@C zifmo&I7#9vu^ZulM5?cZJek&SVX@uTh2nEREjWj&dk54D)kQrR%$<10ay>; NnGK~Il52|hAVw4j_Q2?$zT2OT8jR^V!#EG@`-@g6_Bbfg{N(1~C-r=Ii0@XoC z2O}Py4KFf@qa6^KF!y_AT_YAh^ZzO!f(_AKQ~RjU@AoX;#!sz@#Z`5!$35Q6UPr!k z4Y=zUYgqZEmK%$Pz)ob6;?t<%r1UMJP!th4c9WZpmtoTHKE~&4A(jx>c4Hk`8ojiD ziHnl~UR-RZO{cKa4~iaLYZrT3yO9N6m-+Dn+>;JugHEoKS|E`D>`SqGaADI6+WoJ! z*boQBk=YjT$H)kXp>b91z9+GWeC(IOm5z2bt?&34{@KLXV-bOXzeJ2cJ}=?++J^n_ zq*0VG$?tTFBH$jl$vco=33MCuP~mn!NPi_|ZuI%!TL@q4GLJX{Xn75vb<=+K%o(sQ ze}nvG#yXU6z`|KB(l?XkUy%51f4QMASJgMksOL(J<;Zrkz`kkr3)Dtye*hFH+~e!& zP`#xC_I;m#dX!LOl+47?%mr}g0p2`ddANP_?@J=X%!K4Et4e}YL~^~bFtfilIYoWp zKD(rtU>ifI?NU@pzxZ t4CL)ssa6>vnqrt`Zc!ekq(!BhBdWd~@@vdA=*E z#If5jK$3gv#5sNo-Zo@!OCS5RSob`W1S46O; fIMbm@ zaLr#-j3fB~cp-j>8qQw#v9zhV!GBXol4@XiHB^2j9bn>=BCGn>?{v3em7G-Z({1L8 z36>xI%KONOFRJ~E!AZ~G{lqt!C(2uD9KT#?V$YRS9`KZ-KH_}-0q-wAe`)zS>?xDc zM8=N2_n$8`R#~gYdR%AT$7CQ$MJL}^_iNku9qAwb87lDed?gwFV((Q?kc#JIDM{^! zVD(DMe7O!6mC8&% ADKNQil;G<}y-T)&a&i`X#Sc^v6KJ!LeC(43_4@pZFS-R7hrm zCGo%?^!t@W2;e>k@5!!tQ~*W;hQdPUU{YiF8t!O3;C0Iog&SeUCjp-8WLH?e72*l^ z2zstGFx$&ScE?}!2Yg@YPd3%`O$;K{5v=M ctlW9vJrAEhVM=(&!dRGFlBwy}?BHiiU;ME3%`%+}hTdX7=9`LPlBLufR8 zvI-fC@rrR%Dgr8hh5~ftW&x7VLlQkil-y8pU^wqr9rT-mEy}>&YDf!79yjalt cGLTpf+!CwjV5|))DpXIF(lJ7y6OP}k7|--X)o+k8o~U0CzLrt8*1JQ*w?KK z=#tic%SIy!Ty-zp<>*F*{-Wp0T2ZM>Uf08FYTqMO0_9h?S!Y=khYlNeQ#=>4j2k)) zJaiGXYsM_6#Le{ybYMfKos2tw<2ho})t99yUh}c$J(zmC g|7UL^R| %|!4wkCJmHf0Oc>j4x~ z8^{Z=4c1$lqNKBrBJ-SHU}8Q2xF@38RF5|P $($vJP!4XlWBUH8$SI k?&6X+#wCFV```0B1+?SrebMWd&Zg=VooePva~}_&a$wm z7v`$C`!2-mm7%WLo?P<{%7oSOA^0{wp?VfhIx;!K-?iRU7yrO_3tAd4x{#a5eQ~c0 zb(8Vhsya=}Q*;+_gYDmBQ*>G}JWgf6EZnRt2$mFezc0o)-?@-XzSWE{nTtJp!_s-i z=oDJy@ldfBJ;r-{eXZ(t{wqA_Uwfk)FO2gkGkZ$dOPhOGG&U!Foi}!j8`iqijaRGC z_Ecou4w*}b!kA=B4-B3n#n;=ZjkvhS_JNIs LDd? z$^Y-LeO!o2eIbvjf7lNiz@d`{MMW<^FGLBAYh=HQ(Su8j@uexbOr1VPB2 zARcaLU}fdwarrd&UgulYzMv;-ew@|{kT!er9ElA_i*zCa*UMRmEVDM`On+RWfkFLc zINNj{$b$pp1@5DbH;oGv-oDJCCN-~y^M$Kn#?TIWweQ!Tx4J32a?GE}z#dzBo$M zqcC(Pm0sZug7e*(0~gRU_{covB&08L6!^l8I$3U77&nxLoi@TT1X_Y$VLMJeB&D9O ztRrjtRuAh-K+1qno3b4(H|d*SX*IBiiGV$f;ay~>iyFqxJ*}V28?XLN(_xiq%nP-{ zhfW=>C!*A`lLx+YyT?-ScU~OV*msjB&4ddckz-EB@cJArDl1Ax%b;)UyAGM^`R~VM zn_D@v*(vu%kVwlandyUhX{q0VBpIsr3~`St_sYuVYaJB_rJz$9lN5g%`)8gw;RHC& zs~*}x!7XOfz-YGgtt1e+{3fJv$l2Bo!?G=jvtn1HNJw<7Vc#BDyGXdqF)yiPSH5ku zNuRvn;L|U9xQsDRvTom2@hS_rO%+*l$@`Zm++3 jJH{0D7gqi~~CEZ7tsP zli7Wt* W&rd9T~ zEsbKuSQGr#_)bwpF%E!4>3NF{q{Vhq c?~e#KNRy>3-@IaB}z0h ^xm}WDB?8q-afB?P-!Qf0 z`{3D1i<#S+%BnwnZ1-|%Piz?0IWuW`b21iToFgyIHffwIJ@NA8um%*qIs5l}QK!ZV z)B(Bpnmkrb*2;sf>rEME@_{&=-!;OOMHcuy(iRA+Wmj)Zyd@USF2;#v=ubFXB>@L{ z_p;-Pk^#CXN7es`EuAnh$6Q$N9a|ILGTncuS(nba;b5`UGjXUVLnb-kV9}z_I>vh{ zb$!b<{9$p)vAbST%BnNDm7?-))8lz )nsU_?VD}oogaQW;_^4?~RqWSqLwCf0|l%_V0SGN7fGR&A0KFcS)(2;+CoT zCqrq5u{VD(1e|UmyJC@&T0VvVnRr_u8e=+E&hDvu;@DaDY+m#f*NS|5C+S>i0i~&M z)go|^Q?#EnLv?rJ-H{z+`7U+b!sYBmE6$nuQv>r~H4suvEu~Q#9~Tuz0ScwmbGw8^ z%) Elf35-X=_xRZ%j?f=fvcLCk?li8 zckx(X8QwXyJ0jpvpK=0>q-X M-V^|&PV{AVP 6FOQbVokQFFWSbvm)Y tBfRTEF*CG1klqZs(4ZP>KNU$ste3rYWLRHrNZK5 zs7sJIKw;N}(~_JOT|Y$_^^vzNr^&bfo_3T*yrF@#PYM$q5hMWN2%*>F$Rpzjx}@Ny zP}}UGvG3n0rPyDS;t5`^)pe|8`e#=D=>We;?qioELm!eKJqrfFgADN7kL)e1r?RF{ z%$r=O6@vO1 `A$nW3%8<;E5mHc@ckrp&7h52i|tKUd9;WS zet~y1@sI3}Cq+QV?J0Oicn#F0auw=W4gVRCx7$x)3@n3e>Q{w#y32NsCY6G18zHVh z$9xQ1rtr)`hfU=2S1WBmh~PG74qWIo0?H&g0L?sY;Qja_3u?GYIRd@C31_vj`2 z1TCgFNJ9#D^M&_+&T=O>eoR_pOsu^Da(H3ntxyA)Bn(vg1^xx7&BDRWR-f+=nYl(X z&T=U(`%4Lqsb7=8yR2DBOE$zqmP5HkYM&tmR-W8bHc};kNzD1Wb2N&tt}djMoa*c7 zak{z8rd4iQiXm9nv0C3(>hl-0R)f#t#&VO~i;ZoD1e3M2GgOT`ChEb9Is&!Irbr=$ zNOB>gp$U u?Fv|7-|IG;hC{F$;lk*!~Ax;1}GjdA|M2!;HJDMkV(&Sk! z&!8hj37fe%i-j1>{c>p<`#-zPJ2NggE|U&31HSj38ci|q*VKQUywlkR$Xk>dy0Mbk zXovn^MB6ZoyKgzCh8kFe3O+X&sa&l-kG g@#jMQ)%W#3WYWa~(Wh%8xxx(T} z%>OM`$S^aVl60avD*2ZCs_)Iekfja&K7}6q&^B)H9N5#H)7=x~qXedqM_SOkha;P& za4Ys;RG<<%;&%SbFLd%yN3$QW;ET!(&ZvuAx6nsbdj3BIm%nLk#ohd3&|Pc-DI%hz^L$kfEKWFJ zajFq*Axr=U5T>5q!v8(Wcv}BOnMGpD&RZtbpHFospz!K{GXNMoRIklx+!d;VY6*n6 zPE)_<)qk-)coo24gSxZ$S{wS^+{2Ql%QWi}3N(ajq}QscKPXz1V`#(I3 8(h>#2Qi`A%r6 aXoyWj2*AS{1nI8)Y*AyYC(c2F@W|Ovphc$ zvlRxm&VXWtK-%r!!1Tm(;Vjgc!P}kg(<40_o$Rl5O`u&{N4ac`{6yImQ^2|%h@C2M zmynB5fHMOH+&4vHCXeq9N8~GoljnUHUpRlQXZ&{_I$a|t9R9*xG67ca3_L9!@U+|( zp%*_~#JLqZn7W5R+DNCcr &27;T5YK90|vhk_+1Lv=gnOwwiZBUgPfyVaDJV z)G4nC?4#EVAb1c!Vz({={F{6OyRJbG=x{1VgvJzF5T9- W3Wb3UOGNd02j8 zw+Atwb;gY|;;r$U=6&?hBj8K0^smxmH^YNi$$<1B|c0pLBC#`~Xjf4~R8L7&8ep z0gg6Gn_2wlh5IUyE7J7%eMs#M@F*M?Nz$1xrxX!^9O>yAXqw*qHtJ#S&KUZ4tU-z} zg=82fZH@c~u;w(Qc!mv|^|J&@1^>M*D(oQim0dBW+fFo`nA^_QSh2~{Tf=YsBdX95 zD<)V<)FRiR99n*lbn70??fifT4bSi=tNGq?8OVA-O2fS{fMK64-~ykTs(HwGLR>&N zckAP#D)>RE1x;%Tw^%tB`KeIudz#e2_$`QiM}wqgC^eDR-SWS4p0SYe4DE$M{G~1L z!R0q8OjZdghCa`T!i2v*JJg|e-~FdLc=->XxuN+_)IpRwvW$Q6@YXI4W*N8d$_)(a zPt~bvJ?G5;00Q*S#MDr8qp)Z|x)C5^W^z@HBsPWb{CA+?8R~@Y(6YpP09@@~bSBA@ zwB0M^v?}_j5w}Up_50DU-@v>;1~PIt(pm#p_&{-Xl4H&Cgpd>?b#~Crikj`aO1zz( z&by$ t|5wPlwpj)6#;#=^Y$)3nmmp~)mSH1H_8mmG%9&O5Sj>d<)zJ?4ct7m; zt0y0HsMVNJy>T{V*v(74{MsVI>Yr%I*eGlPdp;p{=B26!3FgIZxn(|HFtZ_(1l|fz zgMn}W8jJlFeF6Mm1vuO%pTqul0Vhmu#Qo`oU;%aDmLTOIjXe$hH}|VEy=jzaldbtb zlTH}j)c*0eli*_Cu S{2I#>QhPHk2 zN>ooVm?XHPngw7!!HY_!9woX|8IpfDKQyBmOuaSGLkJu+7`>pE07-aUV+fHk;GfVH zhQ3k;o1`7_jI#lqy)8YMWR6I7L{yQfb~ I@Vmc`HfAWh0sjmeYWGwg&Zuz*$Uik_!LaVT(({PLgH?%H`fL<3 z9|+z7Thi$9i`_rF@cFt!(+VO$&9GtHvK2n+&pN(W`=8+Mp9L08fFPwWu#+qkaUSn4 z!ELU0w#^<$JkVk>kO|ZK>#l#96vcAbwfILLl842NhA } 4Vqy%%RG}k2 zC{}p1K5+%&DjszSS^Cp)l*37+IFlSjX6FGT=3Qn>Du>oj_Xi Zk6R^vC zoKbpN40dM5Y;H-OV1V}jOGGh#JCPr$2sDr7=K<<_xoFAWy-3ZnK<8y;4<*r^7W!`L zQUo5fj Qx@)6P`?L$ER8932zZn9a;zb?ik1ICP`4=`rf0QihUlJ%%Q0xxs{3~i&lpa+A? z*N|XLk)7E!u6wnv!MZg?c HO^%UmU+(`q e>G% zb`$M!01)0QCPcXqr7$P+b2!pcn=1x0jjwRy?OvknH4?y5A$Vd_Fzhv@Z?1edvRwR> z;uM;?FRJ^mp*v<~Bs#>pF!dMs2|68YB+o}lRCvNKS-~^n|5#1#v(GZ#Ob^*y&@4>C z=ltI80ss=8O`T$bJvY@ka=Am)p{HHydCH#(ci?%R15Mabf;We=0iopbg;~8B-n{jB zqgG-Wn| *1;Uu!6R>w|WAsmp=p{~)7G{>Y|blJv=n#M`pm z4xy<`_?C S ^+@d zG!Gwy>Ce #?9DQcjU&c`xM8yQvHulRoO;FfM{D{*dgfHx F?RMkgTfIPVL|D72^(a!0O@20!pYpawJXwdub V$$gSW{-Fe=wn7B(1C=+u|cV6nB{09#1lGl^%Wnd!~rk(C`S^eE; z()p+$;{03@gA_7_y~C~% c*THeSKKA&=OxI@`#CxD z-{T!#KlJwGi!T=t70;3{Hv2CUc&p#hpmG9+M>S6O?S%7BfIfNozS}#XC)pHQw*myP z9qFTuwHE|9iUP>D@%w-D*VH`q)6orRYK*eXlON>3)jJlz0;i3fU+D_iK^^gsU;7rc z!f`Q%UO-_ZTe&-x!kbsYV^8MSdVahia0EoFcKK@8eoLraP@(KYL-nh023S~4NU^eA zaoF|7DD-XVB5@yYTVAJbcD$qjTc7jk?RTl9Io_3WsEp7mKV5(MT`KaHWU)uGf>m_U z+H2PRiG~johpjQ!-b|b&t;L=_@fHL&1YX1cXux2#z<+|5rJUx>+y47eOo6$Yu~{>z z2cN_Ys!!FYIuAeTh0{>kC+^)*VleUF13oO&xpIxOkFXxVa28mM!bHp~7eD&}4DB7) zffJyqJ9|FF?>u#(3bZA6)+-Q-sz9C0c9w}6B-Y&<6T<
OZ`b8=PcwsdV0sl#XRHgmFP zpCeDhqud&@&gs_K7@S#5YT5wmk6WJlsKRt#f#Z6aE=Lk%P(?hLZ?|%i`FoIzw#%7V z&+gmkM1a|WY?Sul(+RB3BcPXS1-M0p*j1(ahqq71Gv689O!=Aca99FLHYuOe8aP#m zg{#7lEK$BfRJHWwUJN*L0so}uK>zq#d>`HbRL~|U3z(VdG1WjqV$VOI$HlSN*_%X( zwvjr=4O0^g(D;{JC4wvggm5S4UlCEmG4?rihKI4w@duWtN^oKeD|M*%Mp6={6KZy) z)@_dmi)bz(3imeytZtx&MB9coorKC~p2Pf^``J|E1%7{`+KXN2;uwzt-RI53C_#cM zJxnmz1L$IHkcJfnq~=JQVfYV`zfphF&x2vb99HC+$t#CY>`W3I9z-&k5zz1!V2?-% zY~<@Hv4Ci8!N>f}C|K)OgH%P@T+<19ecPC?nJFyp=#9zVlHO%c@Khv-MX61%v}vmG z?O-Zm^fbx7YxZgiC3Kc~=2$8?lPkZb*83u_K!1LDb6#UR(J0$pU;lMVCy+eMHNFKB z4=r4hu-68=#K`eV&AUs?0)qzJ;v!paL?Sy_nXOb!{~Pr&yv i*cCPv>cclW`2y1%Zf67dtAHqMBAa{n0sV{YUAE{KEF{PU`KL9XwrxP7Jcl z<_#7 a7!(wj3se3QlqsxVZmJtA0AEl^e%Zs`tL(kpor|#D3_9 ^U{~J*|^vDji4+x)IqIR1#z_Z zC83{ZX-`w72Dv6lUB0Y)q0sEEnsfnygZQ4T_PWJC^#u!{5T2&xq7(Ek2`H@bh!;-e z`z|ltv|Y=u5O#_EbY#ZV?>G1w7TiJ#e8mGC=p@K)%_f=V*ZY7+ep(^)r}EJ=BBPQI zxAD5IWlyp^qtyTJ7f?8|{X>u0{QhSrQinQR((3<21F6D6c&K0qa1c=Rm{;}h3BbSS f0`nXnMFylV6I+rhSAZ|%07-vP5HERe;P-z3G0LJ1 literal 0 HcmV?d00001 diff --git a/docs/images/home_assistant_entities.png b/docs/images/home_assistant_entities.png new file mode 100644 index 0000000000000000000000000000000000000000..282949000f1b1904281accc0ebe52d7d0e4f4e78 GIT binary patch literal 73613 zcmeFZWmucx+NK+vmLe^sIF#Z}@fIz#w79#wyE_#37I!V~?hc`7aQEP@2@qt5_02kF z%`xBDo|!%KWB=gbO+t|H@;>) <0D>?8fLx1?3cu%7 z#YPMK9fG66cM(9v7|A~T2D0fF=`R34bqvP6J_`Ky3%eicjsO5w@ADhNfNhZx0PvJA z{`HHJo6gaLubm<^1NtDew4>4xxom8dy4@thv=?NjA=-!zDfwW6DTU(nF$H+dMK`wc zvyy42gFA_TJFzfwIqkT)ryi2za~z~;QK_9aN Xyj7nbb&ZoU&+1B5V9VQOlfs|7me8M4`<8iqXKa@ `yF)1lm;u;dloDVh^-|@Uk@<)MRtYanw zo;=+tCjipdqg9bOBFp5Asuf!quB-mH*urS5aSSt-G*5H+N25%D0%Ndmh>$4z9|cz? z!3i;RiW7Wqz}O*9(}9_y;63{vP=oxgQ_W0$LU~0wZ C;CwrKwPS_IubYZQz#|D8?c8{w}LM};M; zGLSr02>P+o`VK(50?BEQQL^;hr!( Cso& z1Jzj?!S#KlX#nBsael$>m&M0A_D1c_J2aiAIbRTv-DK4j(3n*<5KTD#0du 1AD3eGZwt{F01=j&AjW t(gRcd;+005CVM_^=)~DXBl_u*_1;%!7#fzeP<5I$Nd#zgWNuzi zjPe(JAw= %W z@wUi!S {(oX%P`3Evt^?L#~^3K5+IV^ z;0=?Lg~WAaGJa%MExOUb^TfV=@lB+TyaZ^XX0aCRHMobTbHt%EIeb{`RV1h+$o!Rq z=h59mt<5Fn_x+CswG;}@f#!#zB?rq9t%E<*MVeFGnvd n!TZ*(XFdy5{l6KkdFmEB{R=-wX1;zRlTiz(@c`tduJ7JlgJ( z@!AP|DJ=Aq_|+mA;rR47l8tw@HT^^P_IZ3gof2`W>6CXgqv2L?_mfW>_MSlm^AoZ+ z-PqQ9E%fSN@7@Dwsac&ST$=n_Y>)L06&Y5NfPWDSW>|=bP4`j+^m^*7g0s%oXi|7y zUi 6Iea zXN6n;9VG0X&WnjCNU7HEW}}B5-%lR3*r#LcQo@iG$2u+$TPK n z>@N0x+)FBNK+T)4vOewyQgYSe;lkaiL+@Jku<0Iq1D*&|vO7js=2Obh_0JJY_c9lt z;Cp~_|F>q}<-7M#HUKYFM)0j_1$dCK 71!j7eb<(g@V9)-PAzbV1>LXzIs(sSZiY`!1`0|}!I{#p^6F1b-2JQ16 z{}!;~^i#s3Jvr9q?c$b^FP(0JoG4WVlA7JUIv-gQi}2-e5a`ApG>@CsT9PMy8^TKX zCWC>LLvZ=8XL*L)BVXtcH{R3ZU{3qy#rUIX^m5g;$Iq!z*QaThO+Np3k~RW{qJf11 z2>2pQf86hto9=C8>fA4M$;MJ1=k(t5Ez5Q-eT@ LpAXmuZE4qgZZaP ziIXo%?NTHWT-+i#0yt)5AC#NI)`(JQzEze+bNeaaA7H21McKyNr`4EyV9!nFrirHC zC^t#{>>}M^f<7w8-(5F5n^$tmIl9e07U39VGL2XEAoL1w9vA0t475{C64oqesU;_- ztg9rB>;WEVl`WtIJ=p6a81+xZQGbo2q~5V@Ck;QXS~qH>VRznsJQly~0|ms%I)zXc z)uWm5r5Q2BWwb~Kyk2~qnm%jQ)PDLkBE&yIz{|Wr+xNiTDIjdGO5@?z` PvDVF8?ctV~FUqLgF*S(da zI$6b-W+kpu@A0djD!>rgydWG5F~qYDjqU(k?0OC=SuU^uLx3*Dy9j>d*CKD }-_I&u0`v25nJsrYLC$pvv(;N6IZzGQ=cMFvzh=9*R9j&MTcx0?5 zM1?RS=-=+3YZs#EQ?S=XlJkI%Klxi7sM%MKeUU??O)j6S2#15z^q|ZDjC$xU1~4?} zp(zS4|M~{>^^;>;=1apBsb!y@YPLsn#yjL9NH!VdjM?y3#Pa2v2$XY#bxMMW*H-M@ zZ(KP+y9InWnYXFx0Ql!h@;C*NqT@#N)A-)y1qPJ6X@yts^H+f_-DB%Dut(R9^}5uw z%{&l`z9Y6-F|l&y&lIr+hCy~g-FBg~8V|Roz2~H?<-T|yNJz15GVU+HyLNS~p?7^u zyQdkemcbrR99R!TJALpkad@d%&RBXHDudAkBlPfqQUgp69uiL7U4}sTu1{Ht2l(G; zzI5&P?U&``9Dl3u0!FtMW3HJP_Ih&lh_9)*OrwPom%g0POaHsTD{koiMgHtw6`Mse ze6<19BGZP#p`2jg(S$$$mPVSP9IeE@OqDI|RYVNy(>S`osPps0 yQ!Ft!`~f`*flz7L0#8?CXFoH z(_jz=?m%AG^6*_0N@st^{2{7uAB(8{n5xED>7h93+%s?UVsZgLV~;u*k?ackEx#c_ zj>>oL=&%o>u1&4CG$%nv^5H60|5lnIM=eq>?u4bSGsEoYRe7ru dxlIiC!i^7QZZosb4ivr zaS6Dv>h5#gTMZ0^lt?V?BQNT)9_%w3Nl}*(b|Uc1Z909nhvZ`pBU+hCfBeIGAKK7C z^$Ifij_^b6NVvB~ x2n&6&5Q#d8Z@>SuuTVyNlW#^~Yl{fsAYv!7>q zwBHCdo}FQEbg6i)6nN(I~EK28?$lIP(3o>1i=$GtOP(>H9~q3CzP)STMK?Ia!k zn*)-!)U9S-Ey2NAS~+F`#FZ8ybBp4Caz<1*CR*->Riq3>(@&==k> Rm_|I&E`oWRbK3fUT{BOLu5tXhi1x%ilg| zify~{H(k_2M6KOi-f>*Td7W-}_m5A>RV8SHwW=b<*S^a^N=fFmM(QI-Ims-xj3$R# zmIB8!=7fq5%y3VxrS^+?vFbLKzWS7O2Mn`+ozsdQMuv|TOCPbn%L%NQ0S{0nM9Qbc zM_;eB;t7O?F)bY4xzz6G>O)m5VyG@Et&hsJB2p~P@Lx&qp6RGQW_`T*N$Q-$+{m)4 zF|zP_HMM~S3EcdNgp$i7cWZ5XjI7`ITXV^|gM{dJDBRV*II9jzNmpeX_)9w%CXHzClUD @Gzts{*fwAl`@LD6MpdYviI*r<&fWFJ5w#_M0C>3F#Pgkj&Cae)Qrq6rpvE0YgS3 zsX OK7;Yp1Gg> 584jfhXxKpkfty!V5=Zy7>^fS+bqC3QR^XU-vEfSaK zLJbk>V}pP6z5OSFU)@)s-b3l}zhQ2q5My%>q=QXq`S_M|-b)yAQ0HTq>(FC;Bo> zv*Hg)?+IUyvs+mivh{jilU+