arry trenner text to subject id user val alexa_instanz_0 alexa_instanz_1 ueberschrift_nachrichten_Batterien_Status anzahl_Batterien_Status_aktiv uebnerschrift_nachrichten_Batterien_volt anzahl_Batterien_volt_gesamt uebnerschrift_nachrichten_Steckdosen anzahl_Steckdosen_aktiv uebnerschrift_nachrichten_Lichter anzahl_Lichter_aktiv uebnerschrift_nachrichten_Bewegungsmelder anzahl_Bewegungsmelder_aktiv gekippt anzahl_fenster_gekippt anzahl_tueren_gekippt uebnerschrift_nachrichten_Temperaturen liste_temperaturen_gesamt anzahl_Batterien_Status_inaktiv liste_Batterien_volt_gesamt_text anzahl_Steckdosen_inaktiv anzahl_Lichter_inaktiv anzahl_Bewegungsmelder_inaktiv geoffnet anzahl_fenster_offen anzahl_tueren_offen liste_temperaturen_html angesprochener_echo_instanz_0 angesprochener_echo_instanz_1 emoji_πŸ”‹ Batterien timeout anzahl_Batterien_Status_gesamt etage timeout2 liste_Batterien_volt_html emoji_πŸ”Œ Steckdosen timeout3 anzahl_Steckdosen_gesamt emoji_πŸ’‘ Licht timeout4 anzahl_Lichter_gesamt emoji_πŸ‘€ Bewegungsmelder timeout5 anzahl_Bewegungsmelder_gesamt emoji_πŸ‘ˆ uebnerschrift_nachrichten_Fenster anzahl_fenster_geschlossen uebnerschrift_nachrichten_Tueren anzahl_tueren_geschlossen emoji_🌑️ Temperaturen timeout8 liste_temperaturen_emojis speak_volume_instanz_0 Ansage_Button_Batterien_Status_eDP speak_volume_instanz_1 Ansage_Button_Batterien_Volt_eDP Ansage_Button_Steckdosen_eDP liste_Batterien_Status_aktiv nachrichten_ausgabe_Batterien_volt Ansage_Button_Lichter_eDP htmlText Batterien_Status_verwenden Anzahl_Batterien_Status_gesamt_eDP Ansage_Button_Bewegungsmelder_eDP liste_Steckdosen_aktiv Ansage_Button_Fenster_eDP liste_Lichter_aktiv Ansage_Button_Tueren_eDP liste_Bewegungsmelder_aktiv emoji_☝️ Ansage_Button_Temperaturen_eDP anzahl_fenster_gesamt Fenster anzahl_tueren_gesamt nachrichten_ausgabe_Temperaturen angesprochener_echo_instanz_0_neu angesprochener_echo_instanz_1_neu nachrichten_ausgabe_Batterien_Status liste_Batterien_Status_inaktiv Batterie_Volt Anzahl_Batterien_Status_aktiv_eDP Logmeldung_Batterien_Ansage_Status nachrichten_ausgabe_Steckdosen liste_Steckdosen_inaktiv nachrichten_ausgabe_Lichter liste_Lichter_inaktiv nachrichten_ausgabe_Bewegungsmelder liste_Bewegungsmelder_inaktiv emoji_πŸ₯… timeout6 liste_fenster_offen emoji_πŸšͺ Tueren timeout7 liste_tueren_offen temperaturen_suchen speak_volume_instanz_0_neu Ansagelautstaerke speak_volume_instanz_1_neu liste_Batterien_Status_aktiv_html Liste_Batterien_aktiv_emojis_Volt_eDP selektor_Batterien_Volt anlegen_in pfad_geraete_zaehlen Liste_Batterien_Status_aktiv_eDP Alexa_Ansage_verwenden Ansage_Einleitungssatz_Batterien_Status liste_Steckdosen_aktiv_html liste_Lichter_aktiv_html liste_Bewegungsmelder_aktiv_html liste_fenster_gekippt liste_tueren_gekippt Liste_Temperaturen_emojis_eDP selektor_Temperaturen eine einzahl_Batterie liste_Batterien_Status_inaktiv_html Anzahl_Batterien_volt_gesamt_eDP Liste_Batterien_Status_gesamt_eDP Batterien_volt_verwenden einzahl_Steckdose liste_Steckdosen_inaktiv_html ein einzahl_Licht liste_Lichter_inaktiv_html einzahl_Bewegungsmelder liste_Bewegungsmelder_inaktiv_html nachrichten_ausgabe_Fenster liste_fenster_geschlossen nachrichten_ausgabe_Tueren liste_tueren_geschlossen gesamte_Temperaturen_Liste_eDP Ansage_Einleitungssatz_Batterien_volt emoji_❗️ Liste_Batterien_Status_aktiv_emojis_eDP gesamte_Batterien_volt_Liste_eDP Liste_Batterien_Status_html_eDP Logmeldung_Batterie_Ansage_volt emoji_⚑️ Liste_Steckdosen_aktiv_emojis_eDP Liste_Lichter_aktiv_emojis_eDP Liste_Bewegungsmelder_aktiv_emojis_eDP Ansage_Einleitungssatz_Temperaturen liste_fenster_offen_gesamt liste_tueren_offen_gesamt Liste_Temperaturen_html_eDP mehrzahl_Batterien emoji_βœ… Ansage_Einleitungssatz_Steckdosen Logmeldung_Steckdosen_Ansage Batterien_Status_aktiv Ansage_Einleitungssatz_Lichter Logmeldung_Lichter_Ansage Liste_Batterien_volt_html_eDP pfad_geraete_ansagen Ansage_Einleitungssatz_Bewegungsmelder Logmeldung_Bewegungsmelder_Ansage Steckdosen_aktiv Ansage_Einleitungssatz_Fenster Logmeldung_Fenster_Ansage Lichter_aktiv Ansage_Einleitungssatz_Tueren Logmeldung_Tueren_Ansage Bewegungsmelder_aktiv Logmeldung_Temperaturen_Ansage liste_fenster_offen_html einzahl_Tuer liste_tueren_offen_html Anzahl_Steckdosen_aktiv_eDP selektor_Batterien_Status Batterien_Status_inaktiv Anzahl_Lichter_aktiv_eDP Steckdosen_verwenden Anzahl_Steckdosen_gesamt_eDP Anzahl_Bewegungsmelder_aktiv_eDP selektor_Steckdosen Steckdosen_inaktiv Anzahl_Fenster_geoeffnet_und_gekippt_gesamt_eDP selektor_Lichter Lichter_inaktiv Anzahl_Tueren_geoeffnet_und_gekippt_gesamt_eDP selektor_Bewegungsmelder Bewegungsmelder_inaktiv Anzahl_Fenster_offen_eDP Anzahl_Fenster_gekippt_eDP liste_fenster_gekippt_html Anzahl_Tueren_offen_eDP Anzahl_Tueren_gekippt_eDP liste_tueren_gekippt_html Liste_Steckdosen_aktiv_eDP Liste_Lichter_aktiv_eDP blockly_start_batterien_status_zaehlen_einlesen Liste_Bewegungsmelder_aktiv_eDP offene_gekippte_Fenster_Liste_eDP offene_gekippte_Tueren_Liste_eDP liste_fenster_geschlossen_html liste_tueren_geschlossen_html formatierte_ausgabe_batterien_status_zum_start blockly_start_batterien_volt_zaehlen_einlesen Anzahl_Lichter_gesamt_eDP Anzahl_Bewegungsmelder_gesamt_eDP formatierte_ausgabe_batterien_volt_zum_start Liste_Steckdosen_gesamt_eDP Lichter_verwenden fenster_offen pfad_geraete_benachrichtigungen tueren_offen Liste_Steckdosen_html_eDP selektor_Fenster fenster_gekippt selektor_Tueren tueren_gekippt wert fenster_geschlossen tueren_geschlossen Liste_Lichter_gesamt_eDP Bewegungsmelder_verwenden Liste_Bewegungsmelder_gesamt_eDP offene_gekippte_Fenster_Liste_emojis_eDP offene_gekippte_Tueren_Liste_emojis_eDP blockly_start_steckdosen_zaehlen_einlesen Liste_Lichter_html_eDP emoji_πŸ‘ emoji_πŸ‘ Liste_Bewegungsmelder_html_eDP formatierte_ausgabe_steckdosen_zum_start Fenster_verwenden Anzahl_Fenster_geschlossen_eDP Anzahl_Tueren_geschlossen_eDP blockly_start_lichter_zaehlen_einlesen Anzahl_Fenster_gesamt_eDP Anzahl_Tueren_gesamt_eDP formatierte_ausgabe_lichter_zum_start Tueren_verwenden Telegram_verwenden blockly_start_bwm_zaehlen_einlesen gesamte_Fenster_Liste_eDP Email_verwenden gesamte_Tueren_Liste_eDP formatierte_ausgabe_bwm_zum_start Liste_Fenster_html_eDP Liste_Tueren_html_eDP Temperaturen_verwenden telegram_versand_an_aus_Batterien_Status blockly_start_fenster_zaehlen_einlesen blockly_start_temperaturen_einlesen telegram_direkt_versenden_Batterien_Status telegram_versand_an_aus_Batterien_volt formatierte_ausgabe_fenster_zum_start formatierte_ausgabe_temperaturen_zum_start telegram_direkt_versenden_Batterien_volt telegram_versand_an_aus_Steckdosen telegram_direkt_versenden_Steckdosen telegram_versand_an_aus_Lichter blockly_start_tueren_zaehlen_einlesen telegram_direkt_versenden_Lichter telegram_versand_an_aus_Bewegungsmelder formatierte_ausgabe_tueren_zum_start Telegram_Empfaenger telegram_direkt_versenden_Bewegungsmelder telegram_versand_an_aus_Fenster telegram telegram_direkt_versenden_Fenster telegram_versand_an_aus_Tueren telegram8 telegram_direkt_versenden_Tueren telegram_versand_an_aus_Temperaturen telegram2 telegram_direkt_versenden_Temperaturen telegram3 email_versand_an_aus_Batterien_Status telegram4 email_direkt_versenden_Batterien_Status email_versand_an_aus_Batterien_volt EMail_Empfaenger telegram5 email_direkt_versenden_Batterien_volt email_versand_an_aus_Steckdosen telegram6 email_direkt_versenden_Steckdosen email_versand_an_aus_Lichter telegram7 Betreff email_direkt_versenden_Lichter email_versand_an_aus_Bewegungsmelder email_direkt_versenden_Bewegungsmelder email_versand_an_aus_Fenster email_direkt_versenden_Fenster email_versand_an_aus_Tueren email email_direkt_versenden_Tueren email_versand_an_aus_Temperaturen email8 email_direkt_versenden_Temperaturen email2 email3 email4 email5 emoji_❌ email6 email7 emoji_🧯 emoji_πŸ”” einzahl_Fenster mehrzahl_Fenster mehrzahl_Tueren mehrzahl_Steckdosen mehrzahl_Licht mehrzahl_Bewegungsmelder arry, trenner cmV0dXJuIGFycnkuam9pbih0cmVubmVyKTs= Beschreibe diese Funktion … EMail_Batterien_Status c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfQmF0dGVyaWVuX1N0YXR1cywKICAgICB0bzogRU1haWxfRW1wZmFlbmdlciwKICAgICBzdWJqZWN0OiBCZXRyZWZmCiAgfSk7 Beschreibe diese Funktion … getParentName aWYoZXhpc3RzT2JqZWN0KGlkKSkgcmV0dXJuIGdldE9iamVjdChpZCkuY29tbW9uLm5hbWU7DQoNCmVsc2UgcmV0dXJuICdHZXJhZXQgdW5iZWthbm50Jzs= Beschreibe diese Funktion … EMail_Batterien_volt c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfQmF0dGVyaWVuX3ZvbHQsCiAgICAgdG86IEVNYWlsX0VtcGZhZW5nZXIsCiAgICAgc3ViamVjdDogQmV0cmVmZgogIH0pOw== Beschreibe diese Funktion … Telegram_Batterien_Status c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9CYXR0ZXJpZW5fU3RhdHVzLAogICAgdXNlcjogVGVsZWdyYW1fRW1wZmFlbmdlciwKICAgIHBhcnNlX21vZGU6ICJNYXJrZG93biIsCn0pOw== Beschreibe diese Funktion … EMail_Steckdosen c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfU3RlY2tkb3NlbiwKICAgICB0bzogRU1haWxfRW1wZmFlbmdlciwKICAgICBzdWJqZWN0OiBCZXRyZWZmCiAgfSk7 Beschreibe diese Funktion … getParentName2 aWYoZXhpc3RzT2JqZWN0KGlkKSkgcmV0dXJuIGdldE9iamVjdChpZCkudmFsOw0KDQplbHNlIHJldHVybiAnR2VyYWV0IHVuYmVrYW5udCc7 Beschreibe diese Funktion … Telegram_Batterien_volt c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9CYXR0ZXJpZW5fdm9sdCwKICAgIHVzZXI6IFRlbGVncmFtX0VtcGZhZW5nZXIsCiAgICBwYXJzZV9tb2RlOiAiTWFya2Rvd24iLAp9KTs= Beschreibe diese Funktion … EMail_Lichter c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfTGljaHRlciwKICAgICB0bzogRU1haWxfRW1wZmFlbmdlciwKICAgICBzdWJqZWN0OiBCZXRyZWZmCiAgfSk7 Beschreibe diese Funktion … Batterien_Status_alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa_instanz_0 alexa2.0.History.serialNumber any default alexa_instanz_0 angesprochener_echo_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume any default Ansage_Button_Batterien_Status_eDP AND EQ angesprochener_echo_instanz_0 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_0_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_0_neu TRUE EQ val Anzahl_Batterien_Status_aktiv_eDP 0 Ansage_Einleitungssatz_Batterien_Status , alle mehrzahl_Batterien sind voll. NEQ val Anzahl_Batterien_Status_aktiv_eDP 0 Ansage_Einleitungssatz_Batterien_Status val Liste_Batterien_Status_aktiv_eDP , alle anderen mehrzahl_Batterien sind voll. 0 log Logmeldung_Batterien_Ansage_Status FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… Telegram_Steckdosen c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9TdGVja2Rvc2VuLAogICAgdXNlcjogVGVsZWdyYW1fRW1wZmFlbmdlciwKICAgIHBhcnNlX21vZGU6ICJNYXJrZG93biIsCn0pOw== Beschreibe diese Funktion … EMail_BWM c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfQmV3ZWd1bmdzbWVsZGVyLAogICAgIHRvOiBFTWFpbF9FbXBmYWVuZ2VyLAogICAgIHN1YmplY3Q6IEJldHJlZmYKICB9KTs= Beschreibe diese Funktion … Batterien_voll_leer_alexa2_adapter_instanz_1 Beschreibe diese Funktion … alexa_instanz_1 alexa2.1.History.serialNumber any default alexa_instanz_1 angesprochener_echo_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume any default Ansage_Button_Batterien_Status_eDP AND EQ angesprochener_echo_instanz_1 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_1_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_1_neu TRUE EQ val Anzahl_Batterien_Status_aktiv_eDP 0 Ansage_Einleitungssatz_Batterien_Status , alle mehrzahl_Batterien sind voll. NEQ val Anzahl_Batterien_Status_aktiv_eDP 0 Ansage_Einleitungssatz_Batterien_Status val Liste_Batterien_Status_aktiv_eDP , alle anderen mehrzahl_Batterien sind voll. 0 log Logmeldung_Batterien_Ansage_Status FIRST FROM_END angesprochener_echo_instanz_1_neu 15 ausgefΓΌhrt βœ… stateText Ly9pZihnZXRPYmplY3QoaWQpLmNvbW1vbi5zdGF0ZXMpIHJldHVybiBnZXRPYmplY3QoaWQpLmNvbW1vbi5zdGF0ZXNbdmFsXTsKLy9yZXR1cm4gaWQgKyAnIGhhdCBrZWluZW4gWnVzdGFuZHN0ZXh0JzsKaWYoZ2V0T2JqZWN0KGlkKS5jb21tb24uc3RhdGVzKSByZXR1cm4gKGdldE9iamVjdChpZCkuY29tbW9uLnN0YXRlc1t2YWxdKTsKZWxzZSAKcmV0dXJuIGdldFN0YXRlKGlkKS52YWw7 Beschreibe diese Funktion … Batterien_volt_alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa_instanz_0 alexa2.0.History.serialNumber any default alexa_instanz_0 angesprochener_echo_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume any default Ansage_Button_Batterien_Volt_eDP AND EQ angesprochener_echo_instanz_0 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_0_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_0_neu TRUE Ansage_Einleitungssatz_Batterien_volt Es werden val Anzahl_Batterien_volt_gesamt_eDP Batterien angesagt; val gesamte_Batterien_volt_Liste_eDP ; das wΓ€re dann alles. 0 log Logmeldung_Batterie_Ansage_volt FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… Telegram_Lichter c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9MaWNodGVyLAogICAgdXNlcjogVGVsZWdyYW1fRW1wZmFlbmdlciwKICAgIHBhcnNlX21vZGU6ICJNYXJrZG93biIsCn0pOw== Beschreibe diese Funktion … EMail_Fenster c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfRmVuc3RlciwKICAgICB0bzogRU1haWxfRW1wZmFlbmdlciwKICAgICBzdWJqZWN0OiBCZXRyZWZmCiAgfSk7 Beschreibe diese Funktion … Batterien_volt_alexa2_adapter_instanz_1 Beschreibe diese Funktion … alexa_instanz_1 alexa2.1.History.serialNumber any default alexa_instanz_1 angesprochener_echo_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume any default Ansage_Button_Batterien_Volt_eDP AND EQ angesprochener_echo_instanz_1 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_1_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_1_neu TRUE Ansage_Einleitungssatz_Batterien_volt Es werden val Anzahl_Batterien_volt_gesamt_eDP Batterien angesagt; val gesamte_Batterien_volt_Liste_eDP ; das wΓ€re dann alles. 0 log Logmeldung_Batterie_Ansage_volt FIRST FROM_END angesprochener_echo_instanz_1_neu 15 ausgefΓΌhrt βœ… Batterien_Status_vor_versand_pruefen Beschreibe diese Funktion … ueberschrift_nachrichten_Batterien_Status emoji_πŸ”‹ * Batterien status * \n timeout timeout 1000 ms EQ anzahl_Batterien_Status_aktiv 1 nachrichten_ausgabe_Batterien_Status ueberschrift_nachrichten_Batterien_Status Es ist eine einzahl_Batterie leer emoji_❗️ \n \n TEXT 1 liste_Batterien_Status_aktiv \n GT anzahl_Batterien_Status_aktiv 1 nachrichten_ausgabe_Batterien_Status ueberschrift_nachrichten_Batterien_Status Es sind anzahl_Batterien_Status_aktiv Batterien leer emoji_❗️ \n \n TEXT 1 liste_Batterien_Status_aktiv \n EQ anzahl_Batterien_Status_aktiv 0 nachrichten_ausgabe_Batterien_Status ueberschrift_nachrichten_Batterien_Status Aktuell gibt es keine leeren Batterien emoji_βœ… true FALSE Object ID Liste_Batterien_Status_aktiv_emojis_eDP TRUE nachrichten_ausgabe_Batterien_Status 0 Steckdosen_alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa_instanz_0 alexa2.0.History.serialNumber any default alexa_instanz_0 angesprochener_echo_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume any default Ansage_Button_Steckdosen_eDP AND EQ angesprochener_echo_instanz_0 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_0_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_0_neu TRUE EQ val Anzahl_Steckdosen_aktiv_eDP 0 Ansage_Einleitungssatz_Steckdosen , alle Steckdosen sind ausgeschaltet. NEQ val Anzahl_Steckdosen_aktiv_eDP 0 Ansage_Einleitungssatz_Steckdosen val Liste_Steckdosen_aktiv_eDP , alle anderen Steckdosen sind ausgeschaltet. 0 log Logmeldung_Steckdosen_Ansage FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… Telegram_BWM c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9CZXdlZ3VuZ3NtZWxkZXIsCiAgICB1c2VyOiBUZWxlZ3JhbV9FbXBmYWVuZ2VyLAogICAgcGFyc2VfbW9kZTogIk1hcmtkb3duIiwKfSk7 Beschreibe diese Funktion … EMail_Tueren c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfVHVlcmVuLAogICAgIHRvOiBFTWFpbF9FbXBmYWVuZ2VyLAogICAgIHN1YmplY3Q6IEJldHJlZmYKICB9KTs= Beschreibe diese Funktion … Batterien_Status_zaehlen Beschreibe diese Funktion … anzahl_Batterien_Status_aktiv 0 anzahl_Batterien_Status_inaktiv 0 anzahl_Batterien_Status_gesamt 0 liste_Batterien_Status_aktiv liste_Batterien_Status_inaktiv liste_Batterien_Status_aktiv_html liste_Batterien_Status_inaktiv_html htmlText <!DOCTYPE html><html lang="de"><head><title> Batterien </title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body> <p style="color:#0000FF; font-family:Helvetica; font-weight: bold"> Batterien status etage </p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γ„nderung: custom TT.MM.JJJJ SS:mm:ss </p> <table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);"> <tr style="color:#0000FF"; font-weight: bold"><td> Batterien etage &ensp;&ensp;&ensp;</td><td>Status</td></tr> <tr><td> Batterien_Status_aktiv selektor_Batterien_Status anzahl_Batterien_Status_gesamt 1 OR val Batterien_Status_aktiv GT val Batterien_Status_aktiv 0 anzahl_Batterien_Status_aktiv 1 INSERT LAST liste_Batterien_Status_aktiv Batterien_Status_aktiv leer INSERT LAST liste_Batterien_Status_aktiv_html Batterien_Status_aktiv <td><span style="color:#FF0000"> leer emoji_❗️ </span> Batterien_Status_inaktiv selektor_Batterien_Status OR val Batterien_Status_inaktiv EQ val Batterien_Status_inaktiv 0 anzahl_Batterien_Status_inaktiv 1 INSERT LAST liste_Batterien_Status_inaktiv Batterien_Status_inaktiv voll INSERT LAST liste_Batterien_Status_inaktiv_html Batterien_Status_inaktiv <td> voll emoji_βœ… true FALSE Object ID Anzahl_Batterien_Status_gesamt_eDP TRUE anzahl_Batterien_Status_gesamt 0 true FALSE Object ID Anzahl_Batterien_Status_aktiv_eDP TRUE anzahl_Batterien_Status_aktiv 0 EQ anzahl_Batterien_Status_aktiv 0 true FALSE Object ID Liste_Batterien_Status_aktiv_eDP TRUE Batterien Aktuell gibt es keine leeren Batterien 0 true FALSE Object ID Liste_Batterien_Status_gesamt_eDP TRUE TEXT 1 liste_Batterien_Status_inaktiv , 0 true FALSE Object ID Liste_Batterien_Status_html_eDP TRUE htmlText TEXT 1 liste_Batterien_Status_inaktiv_html <tr><td> </table></body> 0 true FALSE Object ID Liste_Batterien_Status_aktiv_eDP TRUE GT ADD 1 abc TEXT 1 liste_Batterien_Status_aktiv ; 1 abc Ansage_Einleitungssatz_Batterien_Status , alle anderen mehrzahl_Batterien sind voll. 250 TEXT 1 liste_Batterien_Status_aktiv ; TEXT 1 liste_Batterien_Status_aktiv , 0 true FALSE Object ID Liste_Batterien_Status_gesamt_eDP TRUE TEXT 1 liste_Batterien_Status_aktiv , , TEXT 1 liste_Batterien_Status_inaktiv , 0 true FALSE Object ID Liste_Batterien_Status_html_eDP TRUE EQ anzahl_Batterien_Status_aktiv anzahl_Batterien_Status_gesamt htmlText TEXT 1 liste_Batterien_Status_aktiv_html <tr><td> </table></body> htmlText TEXT 1 liste_Batterien_Status_aktiv_html <tr><td> <tr><td> TEXT 1 liste_Batterien_Status_inaktiv_html <tr><td> </table></body> 0 Steckdosen_alexa2_adapter_instanz_1 Beschreibe diese Funktion … alexa_instanz_1 alexa2.1.History.serialNumber any default alexa_instanz_1 angesprochener_echo_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume any default Ansage_Button_Steckdosen_eDP AND EQ angesprochener_echo_instanz_1 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_1_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_1_neu TRUE EQ val Anzahl_Steckdosen_aktiv_eDP 0 Ansage_Einleitungssatz_Steckdosen , alle Steckdosen sind ausgeschaltet. NEQ val Anzahl_Steckdosen_aktiv_eDP 0 Ansage_Einleitungssatz_Steckdosen val Liste_Steckdosen_aktiv_eDP , alle anderen Steckdosen sind ausgeschaltet. 0 log Logmeldung_Batterien_Ansage_Status FIRST FROM_END angesprochener_echo_instanz_1_neu 15 ausgefΓΌhrt βœ… existiert_DP cmV0dXJuIGV4aXN0c1N0YXRlKGlkKTs= Beschreibe diese Funktion … Batterien_volt_vor_versand_pruefen Beschreibe diese Funktion … uebnerschrift_nachrichten_Batterien_volt emoji_πŸ”‹ * etage Batterien volt Status * \n timeout2 timeout2 1000 ms nachrichten_ausgabe_Batterien_volt GT anzahl_Batterien_volt_gesamt 1 uebnerschrift_nachrichten_Batterien_volt Es gibt anzahl_Batterien_volt_gesamt Batterien \n \n TEXT 1 liste_Batterien_volt_gesamt_text \n uebnerschrift_nachrichten_Batterien_volt Es gibt eine Batterien \n \n TEXT 1 liste_Batterien_volt_gesamt_text \n true FALSE Object ID Liste_Batterien_aktiv_emojis_Volt_eDP TRUE nachrichten_ausgabe_Batterien_volt 0 Lichter_alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa_instanz_0 alexa2.0.History.serialNumber any default alexa_instanz_0 angesprochener_echo_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume any default Ansage_Button_Lichter_eDP AND EQ angesprochener_echo_instanz_0 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_0_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_0_neu TRUE EQ val Anzahl_Lichter_aktiv_eDP 0 Ansage_Einleitungssatz_Lichter , alle Licht sind ausgeschaltet. NEQ val Anzahl_Lichter_aktiv_eDP 0 Ansage_Einleitungssatz_Lichter val Liste_Lichter_aktiv_eDP ,alle anderen Licht sind ausgeschaltet. 0 log Logmeldung_Lichter_Ansage FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… Telegram_Fenster c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9GZW5zdGVyLAogICAgdXNlcjogVGVsZWdyYW1fRW1wZmFlbmdlciwKICAgIHBhcnNlX21vZGU6ICJNYXJrZG93biIsCn0pOw== Beschreibe diese Funktion … EMail_Temperaturen c2VuZFRvKCJlbWFpbCIsICJzZW5kIiwgewogICAgIHRleHQ6IG5hY2hyaWNodGVuX2F1c2dhYmVfVGVtcGVyYXR1cmVuLAogICAgIHRvOiBFTWFpbF9FbXBmYWVuZ2VyLAogICAgIHN1YmplY3Q6IEJldHJlZmYKICB9KTs= Beschreibe diese Funktion … Batterien_volt_zaehlen Beschreibe diese Funktion … anzahl_Batterien_volt_gesamt 0 liste_Batterien_volt_gesamt_text liste_Batterien_volt_html htmlText <!DOCTYPE html><html lang="de"><head><title> Batterien </title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body> <p style="color:#0000FF; font-family:Helvetica; font-weight: bold"> Batterien status etage </p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γ„nderung: custom TT.MM.JJJJ SS:mm:ss </p> <table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);"> <tr style="color:#0000FF"; font-weight: bold"><td> Status &ensp;&ensp;&ensp;</td><td> Batterien etage </td></tr> <tr><td> Batterie_Volt selektor_Batterien_Volt anzahl_Batterien_volt_gesamt 1 INSERT LAST liste_Batterien_volt_gesamt_text Batterie_Volt val Batterie_Volt Volt Batterie_Volt INSERT LAST liste_Batterien_volt_html Batterie_Volt val Batterie_Volt Volt </span><td> Batterie_Volt true FALSE Object ID Anzahl_Batterien_volt_gesamt_eDP TRUE anzahl_Batterien_volt_gesamt 0 true FALSE Object ID gesamte_Batterien_volt_Liste_eDP TRUE TEXT 1 liste_Batterien_volt_gesamt_text ; 0 true FALSE Object ID Liste_Batterien_volt_html_eDP TRUE htmlText TEXT 1 liste_Batterien_volt_html <tr><td> </table></body> 0 Lichter_alexa2_adapter_instanz_1 Beschreibe diese Funktion … alexa_instanz_1 alexa2.1.History.serialNumber any default alexa_instanz_1 angesprochener_echo_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume any default Ansage_Button_Lichter_eDP AND EQ angesprochener_echo_instanz_1 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_1_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_1_neu TRUE EQ val Anzahl_Lichter_aktiv_eDP 0 Ansage_Einleitungssatz_Lichter , alle Licht sind ausgeschaltet. NEQ val Anzahl_Lichter_aktiv_eDP 0 Ansage_Einleitungssatz_Lichter val Liste_Lichter_aktiv_eDP ,alle anderen Licht sind ausgeschaltet. 0 log Logmeldung_Lichter_Ansage FIRST FROM_END angesprochener_echo_instanz_1_neu 15 ausgefΓΌhrt βœ… main Beschreibe diese Funktion … main Batterien voll leer Batterien_Status_verwenden Anzahl_Batterien_Status_gesamt_eDP anlegen_in pfad_geraete_zaehlen Batterien _Status. etage Anzahl_ Batterien _gesamt Anzahl_Batterien_Status_aktiv_eDP anlegen_in pfad_geraete_zaehlen Batterien _Status. etage Anzahl_ Batterien _aktiv Liste_Batterien_Status_aktiv_eDP anlegen_in pfad_geraete_zaehlen Batterien _Status. etage aktive_ Batterien _Liste Liste_Batterien_Status_gesamt_eDP anlegen_in pfad_geraete_zaehlen Batterien _Status. etage gesamte_ Batterien _Liste Liste_Batterien_Status_html_eDP anlegen_in pfad_geraete_zaehlen Batterien _Status. etage html_ Batterien _Liste Liste_Batterien_Status_aktiv_emojis_eDP anlegen_in pfad_geraete_zaehlen Batterien _Status. etage aktive_ Batterien _Liste_mit_Emojis ne default selektor_Batterien_Status blockly_start_batterien_status_zaehlen_einlesen 2 sec formatierte_ausgabe_batterien_status_zum_start 4 sec AND Batterien_Status_verwenden Alexa_Ansage_verwenden Logmeldung_Batterien_Ansage_Status Die etage Batterien ansage wurde vom ECHO Ansage_Einleitungssatz_Batterien_Status Hier der etage Batterien status fΓΌr Dich. Ansage_Button_Batterien_Status_eDP anlegen_in pfad_geraete_ansagen Ansagen. etage Batterien statusansage Batterien Volt Batterien_volt_verwenden Anzahl_Batterien_volt_gesamt_eDP anlegen_in pfad_geraete_zaehlen Batterien _Volt. etage Anzahl_ Batterien _gesamt gesamte_Batterien_volt_Liste_eDP anlegen_in pfad_geraete_zaehlen Batterien _Volt. etage gesamte_ Batterien _Liste Liste_Batterien_volt_html_eDP anlegen_in pfad_geraete_zaehlen Batterien _Volt. etage html_ Batterien _Liste Liste_Batterien_aktiv_emojis_Volt_eDP anlegen_in pfad_geraete_zaehlen Batterien _Volt. etage aktive_ Batterien _Liste_mit_Emojis ne default selektor_Batterien_Volt blockly_start_batterien_volt_zaehlen_einlesen 2 sec formatierte_ausgabe_batterien_volt_zum_start 4 sec AND Batterien_volt_verwenden Alexa_Ansage_verwenden Logmeldung_Batterie_Ansage_volt Die etage Batterien voltansage wurde vom ECHO Ansage_Einleitungssatz_Batterien_volt Hier der etage Batterien Volt Status fΓΌr Dich. Ansage_Button_Batterien_Volt_eDP anlegen_in pfad_geraete_ansagen Ansagen. etage Batterien voltansage Steckdosen Steckdosen_verwenden Anzahl_Steckdosen_gesamt_eDP anlegen_in pfad_geraete_zaehlen Steckdosen etage .Anzahl_ Steckdosen _gesamt Anzahl_Steckdosen_aktiv_eDP anlegen_in pfad_geraete_zaehlen Steckdosen etage .Anzahl_ Steckdosen _aktiv Liste_Steckdosen_aktiv_eDP anlegen_in pfad_geraete_zaehlen Steckdosen etage .aktive_ Steckdosen _Liste Liste_Steckdosen_gesamt_eDP anlegen_in pfad_geraete_zaehlen Steckdosen etage .gesamte_ Steckdosen _Liste Liste_Steckdosen_html_eDP anlegen_in pfad_geraete_zaehlen Steckdosen etage .html_ Steckdosen _Liste Liste_Steckdosen_aktiv_emojis_eDP anlegen_in pfad_geraete_zaehlen Steckdosen etage .aktive_ Steckdosen _Liste_mit_Emojis ne default selektor_Steckdosen blockly_start_steckdosen_zaehlen_einlesen 2 sec formatierte_ausgabe_steckdosen_zum_start 4 sec AND Steckdosen_verwenden Alexa_Ansage_verwenden Logmeldung_Steckdosen_Ansage Die etage Steckdosen ansage wurde vom ECHO Ansage_Einleitungssatz_Steckdosen Hier der etage Steckdosen status fΓΌr Dich. Ansage_Button_Steckdosen_eDP anlegen_in pfad_geraete_ansagen Ansagen. etage Steckdosen ansage Licht Lichter_verwenden Anzahl_Lichter_gesamt_eDP anlegen_in pfad_geraete_zaehlen Licht etage .Anzahl_ Licht _gesamt Anzahl_Lichter_aktiv_eDP anlegen_in pfad_geraete_zaehlen Licht etage .Anzahl_ Licht _aktiv Liste_Lichter_aktiv_eDP anlegen_in pfad_geraete_zaehlen Licht etage .aktive_ Licht _Liste Liste_Lichter_gesamt_eDP anlegen_in pfad_geraete_zaehlen Licht etage .gesamte_ Licht _Liste Liste_Lichter_html_eDP anlegen_in pfad_geraete_zaehlen Licht etage .html_ Licht _Liste Liste_Lichter_aktiv_emojis_eDP anlegen_in pfad_geraete_zaehlen Licht etage .aktive_ Licht _Liste_mit_Emojis ne default selektor_Lichter blockly_start_lichter_zaehlen_einlesen 2 sec formatierte_ausgabe_lichter_zum_start 4 sec AND Lichter_verwenden Alexa_Ansage_verwenden Logmeldung_Lichter_Ansage Die etage Licht ansage wurde vom ECHO Ansage_Einleitungssatz_Lichter Hier der etage Licht status fΓΌr Dich. Ansage_Button_Lichter_eDP anlegen_in pfad_geraete_ansagen Ansagen. etage Licht ansage Bewegungsmelder Bewegungsmelder_verwenden Anzahl_Bewegungsmelder_gesamt_eDP anlegen_in pfad_geraete_zaehlen Bewegungsmelder etage .Anzahl_ Bewegungsmelder _gesamt Anzahl_Bewegungsmelder_aktiv_eDP anlegen_in pfad_geraete_zaehlen Bewegungsmelder etage .Anzahl_ Bewegungsmelder _aktiv Liste_Bewegungsmelder_aktiv_eDP anlegen_in pfad_geraete_zaehlen Bewegungsmelder etage .aktive_ Bewegungsmelder _Liste Liste_Bewegungsmelder_gesamt_eDP anlegen_in pfad_geraete_zaehlen Bewegungsmelder etage .gesamte_ Bewegungsmelder _Liste Liste_Bewegungsmelder_html_eDP anlegen_in pfad_geraete_zaehlen Bewegungsmelder etage .html_ Bewegungsmelder _Liste Liste_Bewegungsmelder_aktiv_emojis_eDP anlegen_in pfad_geraete_zaehlen Bewegungsmelder etage .aktive_ Bewegungsmelder _Liste_mit_Emojis ne default selektor_Bewegungsmelder blockly_start_bwm_zaehlen_einlesen 2 sec formatierte_ausgabe_bwm_zum_start 4 sec AND Bewegungsmelder_verwenden Alexa_Ansage_verwenden Logmeldung_Bewegungsmelder_Ansage Die etage Bewegungsmelder ansage wurde vom ECHO Ansage_Einleitungssatz_Bewegungsmelder Hier der etage Bewegungsmelder status fΓΌr Dich. Ansage_Button_Bewegungsmelder_eDP anlegen_in pfad_geraete_ansagen Ansagen. etage Bewegungsmelder ansage Fenster Fenster_verwenden Anzahl_Fenster_gekippt_eDP anlegen_in pfad_geraete_zaehlen Fenster etage .Anzahl_ Fenster _gekippt Anzahl_Fenster_offen_eDP anlegen_in pfad_geraete_zaehlen Fenster etage .Anzahl_ Fenster _offen Anzahl_Fenster_geschlossen_eDP anlegen_in pfad_geraete_zaehlen Fenster etage .Anzahl_ Fenster _geschlossen Anzahl_Fenster_gesamt_eDP anlegen_in pfad_geraete_zaehlen Fenster etage .Anzahl_ Fenster _gesamt Anzahl_Fenster_geoeffnet_und_gekippt_gesamt_eDP anlegen_in pfad_geraete_zaehlen Fenster etage .Anzahl_ Fenster _geoeffnet_und_gekippt_gesamt offene_gekippte_Fenster_Liste_eDP anlegen_in pfad_geraete_zaehlen Fenster etage .offene_gekippte_ Fenster _Liste gesamte_Fenster_Liste_eDP anlegen_in pfad_geraete_zaehlen Fenster etage .gesamte_ Fenster _Liste Liste_Fenster_html_eDP anlegen_in pfad_geraete_zaehlen Fenster etage .html_ Fenster _Liste offene_gekippte_Fenster_Liste_emojis_eDP anlegen_in pfad_geraete_zaehlen Fenster etage .offene_gekippte_ Fenster _Liste_mit_Emojis ne default selektor_Fenster blockly_start_fenster_zaehlen_einlesen 2 sec formatierte_ausgabe_fenster_zum_start 4 sec AND Fenster_verwenden Alexa_Ansage_verwenden Logmeldung_Fenster_Ansage Die etage Fenster ansage wurde vom ECHO Ansage_Einleitungssatz_Fenster Hier der etage Fenster status fΓΌr Dich. Ansage_Button_Fenster_eDP anlegen_in pfad_geraete_ansagen Ansagen. etage Fenster ansage Tueren Tueren_verwenden Anzahl_Tueren_gekippt_eDP anlegen_in pfad_geraete_zaehlen Tueren etage .Anzahl_ Tueren _gekippt Anzahl_Tueren_offen_eDP anlegen_in pfad_geraete_zaehlen Tueren etage .Anzahl_ Tueren _offen Anzahl_Tueren_geschlossen_eDP anlegen_in pfad_geraete_zaehlen Tueren etage .Anzahl_ Tueren _geschlossen Anzahl_Tueren_gesamt_eDP anlegen_in pfad_geraete_zaehlen Tueren etage .Anzahl_ Tueren _gesamt Anzahl_Tueren_geoeffnet_und_gekippt_gesamt_eDP anlegen_in pfad_geraete_zaehlen Tueren etage .Anzahl_ Tueren _geoeffnet_und_gekippt_gesamt offene_gekippte_Tueren_Liste_eDP anlegen_in pfad_geraete_zaehlen Tueren etage .offene_gekippte_ Tueren _Liste gesamte_Tueren_Liste_eDP anlegen_in pfad_geraete_zaehlen Tueren etage .gesamte_ Tueren _Liste Liste_Tueren_html_eDP anlegen_in pfad_geraete_zaehlen Tueren etage .html_ Tueren _Liste offene_gekippte_Tueren_Liste_emojis_eDP anlegen_in pfad_geraete_zaehlen Tueren etage .offene_gekippte_ Tueren _Liste_mit_Emojis ne default selektor_Tueren blockly_start_tueren_zaehlen_einlesen 2 sec formatierte_ausgabe_tueren_zum_start 4 sec AND Tueren_verwenden Alexa_Ansage_verwenden Logmeldung_Tueren_Ansage Die etage Tueren ansage wurde vom ECHO Ansage_Einleitungssatz_Tueren Hier der etage Tueren status fΓΌr Dich. Ansage_Button_Tueren_eDP anlegen_in pfad_geraete_ansagen Ansagen. etage Tueren ansage Temperaturen Temperaturen_verwenden gesamte_Temperaturen_Liste_eDP anlegen_in pfad_geraete_zaehlen Temperaturen etage .gesamte_ Temperaturen _Liste Liste_Temperaturen_html_eDP anlegen_in pfad_geraete_zaehlen Temperaturen etage .html_ Temperaturen _Liste Liste_Temperaturen_emojis_eDP anlegen_in pfad_geraete_zaehlen Temperaturen etage .aktive_ Temperaturen _Liste_mit_Emojis ne default selektor_Temperaturen blockly_start_temperaturen_einlesen 2 sec formatierte_ausgabe_temperaturen_zum_start 4 sec AND Temperaturen_verwenden Alexa_Ansage_verwenden Logmeldung_Temperaturen_Ansage Die etage Temperaturen ansage wurde vom ECHO Ansage_Einleitungssatz_Temperaturen Hier der etage Temperaturen status fΓΌr Dich. Ansage_Button_Temperaturen_eDP anlegen_in pfad_geraete_ansagen Ansagen. etage Temperaturen ansage Telegram AND Batterien_Status_verwenden Telegram_verwenden telegram_versand_an_aus_Batterien_Status anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Batterien statusversand telegram_direkt_versenden_Batterien_Status anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Batterien status ne default Anzahl_Batterien_Status_aktiv_eDP val telegram_versand_an_aus_Batterien_Status telegram telegram 1 sec nachrichten_ausgabe_Batterien_Status Telegram_Empfaenger any default telegram_direkt_versenden_Batterien_Status nachrichten_ausgabe_Batterien_Status Telegram_Empfaenger AND Batterien_volt_verwenden Telegram_verwenden telegram_versand_an_aus_Batterien_volt anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Batterien voltversand telegram_direkt_versenden_Batterien_volt anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Batterien voltstatus ne default Liste_Batterien_volt_html_eDP val telegram_versand_an_aus_Batterien_volt telegram8 telegram8 1 sec nachrichten_ausgabe_Batterien_volt Telegram_Empfaenger any default telegram_direkt_versenden_Batterien_volt nachrichten_ausgabe_Batterien_volt Telegram_Empfaenger AND Steckdosen_verwenden Telegram_verwenden telegram_versand_an_aus_Steckdosen anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Steckdosen versand telegram_direkt_versenden_Steckdosen anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Steckdosen status ne default Anzahl_Steckdosen_aktiv_eDP val telegram_versand_an_aus_Steckdosen telegram2 telegram2 1 sec nachrichten_ausgabe_Steckdosen Telegram_Empfaenger any default telegram_direkt_versenden_Steckdosen nachrichten_ausgabe_Steckdosen Telegram_Empfaenger AND Lichter_verwenden Telegram_verwenden telegram_versand_an_aus_Lichter anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Licht versand telegram_direkt_versenden_Lichter anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Licht status ne default Anzahl_Lichter_aktiv_eDP val telegram_versand_an_aus_Lichter telegram3 telegram3 1 sec nachrichten_ausgabe_Lichter Telegram_Empfaenger any default telegram_direkt_versenden_Lichter nachrichten_ausgabe_Lichter Telegram_Empfaenger AND Bewegungsmelder_verwenden Telegram_verwenden telegram_versand_an_aus_Bewegungsmelder anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Bewegungsmelder versand telegram_direkt_versenden_Bewegungsmelder anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Bewegungsmelder status ne default Anzahl_Bewegungsmelder_aktiv_eDP val telegram_versand_an_aus_Bewegungsmelder telegram4 telegram4 1 sec nachrichten_ausgabe_Bewegungsmelder Telegram_Empfaenger any default telegram_direkt_versenden_Bewegungsmelder nachrichten_ausgabe_Bewegungsmelder Telegram_Empfaenger AND Fenster_verwenden Telegram_verwenden telegram_versand_an_aus_Fenster anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Fenster versand telegram_direkt_versenden_Fenster anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Fenster status ne default Anzahl_Fenster_geoeffnet_und_gekippt_gesamt_eDP val telegram_versand_an_aus_Fenster telegram5 telegram5 1 sec nachrichten_ausgabe_Fenster Telegram_Empfaenger any default telegram_direkt_versenden_Fenster nachrichten_ausgabe_Fenster Telegram_Empfaenger AND Tueren_verwenden Telegram_verwenden telegram_versand_an_aus_Tueren anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Tueren versand telegram_direkt_versenden_Tueren anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Tueren status ne default Anzahl_Tueren_geoeffnet_und_gekippt_gesamt_eDP val telegram_versand_an_aus_Tueren telegram6 telegram6 1 sec nachrichten_ausgabe_Tueren Telegram_Empfaenger any default telegram_direkt_versenden_Tueren nachrichten_ausgabe_Tueren Telegram_Empfaenger AND Temperaturen_verwenden Telegram_verwenden telegram_versand_an_aus_Temperaturen anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Temperaturen versand telegram_direkt_versenden_Temperaturen anlegen_in pfad_geraete_benachrichtigungen Telegram.TVersand_ etage Temperaturen status ne default gesamte_Temperaturen_Liste_eDP val telegram_versand_an_aus_Temperaturen telegram7 telegram7 1 sec nachrichten_ausgabe_Temperaturen Telegram_Empfaenger any default telegram_direkt_versenden_Temperaturen nachrichten_ausgabe_Temperaturen Telegram_Empfaenger EMail AND Batterien_Status_verwenden Email_verwenden email_versand_an_aus_Batterien_Status anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Batterien statusversand email_direkt_versenden_Batterien_Status anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Batterien status ne default Anzahl_Batterien_Status_aktiv_eDP EQ val email_versand_an_aus_Batterien_Status TRUE Betreff etage Batterien Status email email 1 sec nachrichten_ausgabe_Batterien_Status EMail_Empfaenger Betreff any default email_direkt_versenden_Batterien_Status Betreff etage Batterien Status nachrichten_ausgabe_Batterien_Status EMail_Empfaenger Betreff AND Batterien_volt_verwenden Email_verwenden email_versand_an_aus_Batterien_volt anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Batterien voltversand email_direkt_versenden_Batterien_volt anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Batterien voltstatus ne default Liste_Batterien_volt_html_eDP EQ val email_versand_an_aus_Batterien_volt TRUE Betreff etage Batterien Voltstatus email8 email8 1 sec nachrichten_ausgabe_Batterien_volt EMail_Empfaenger Betreff any default email_direkt_versenden_Batterien_volt Betreff etage Batterien Voltstatus nachrichten_ausgabe_Batterien_volt EMail_Empfaenger Betreff AND Steckdosen_verwenden Email_verwenden email_versand_an_aus_Steckdosen anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Steckdosen versand email_direkt_versenden_Steckdosen anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Steckdosen status ne default Anzahl_Steckdosen_aktiv_eDP EQ val email_versand_an_aus_Steckdosen TRUE Betreff etage Steckdosen Status email2 email2 1 sec nachrichten_ausgabe_Steckdosen EMail_Empfaenger Betreff any default email_direkt_versenden_Steckdosen Betreff etage Steckdosen Status nachrichten_ausgabe_Steckdosen EMail_Empfaenger Betreff AND Lichter_verwenden Email_verwenden email_versand_an_aus_Lichter anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Licht versand email_direkt_versenden_Lichter anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Licht status ne default Anzahl_Lichter_aktiv_eDP EQ val email_versand_an_aus_Lichter TRUE Betreff etage Licht Status email3 email3 1 sec nachrichten_ausgabe_Lichter EMail_Empfaenger Betreff any default email_direkt_versenden_Lichter Betreff etage Licht Status nachrichten_ausgabe_Lichter EMail_Empfaenger Betreff AND Bewegungsmelder_verwenden Email_verwenden email_versand_an_aus_Bewegungsmelder anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Bewegungsmelder versand email_direkt_versenden_Bewegungsmelder anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Bewegungsmelder status ne default Anzahl_Bewegungsmelder_aktiv_eDP EQ val email_versand_an_aus_Bewegungsmelder TRUE Betreff etage Bewegungsmelder Status email4 email4 1 sec nachrichten_ausgabe_Bewegungsmelder EMail_Empfaenger Betreff any default email_direkt_versenden_Bewegungsmelder Betreff etage Bewegungsmelder Status nachrichten_ausgabe_Bewegungsmelder EMail_Empfaenger Betreff AND Fenster_verwenden Email_verwenden email_versand_an_aus_Fenster anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Fenster versand email_direkt_versenden_Fenster anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Fenster status ne default Anzahl_Fenster_geoeffnet_und_gekippt_gesamt_eDP EQ val email_versand_an_aus_Fenster TRUE Betreff etage Fenster Status email5 email5 1 sec nachrichten_ausgabe_Fenster EMail_Empfaenger Betreff any default email_direkt_versenden_Fenster Betreff etage Fenster Status nachrichten_ausgabe_Fenster EMail_Empfaenger Betreff AND Tueren_verwenden Email_verwenden email_versand_an_aus_Tueren anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Tueren versand email_direkt_versenden_Tueren anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Tueren status ne default Anzahl_Tueren_geoeffnet_und_gekippt_gesamt_eDP EQ val email_versand_an_aus_Tueren TRUE Betreff etage Tueren Status email6 email6 1 sec nachrichten_ausgabe_Tueren EMail_Empfaenger Betreff any default email_direkt_versenden_Tueren Betreff etage Tueren Status nachrichten_ausgabe_Tueren EMail_Empfaenger Betreff AND Temperaturen_verwenden Email_verwenden email_versand_an_aus_Temperaturen anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Temperaturen versand email_direkt_versenden_Temperaturen anlegen_in pfad_geraete_benachrichtigungen EMail.EVersand_ etage Temperaturen status ne default gesamte_Temperaturen_Liste_eDP EQ val email_versand_an_aus_Temperaturen TRUE Betreff etage Temperaturen Status email7 email7 1 sec nachrichten_ausgabe_Temperaturen EMail_Empfaenger Betreff any default email_direkt_versenden_Temperaturen Betreff etage Temperaturen Status nachrichten_ausgabe_Temperaturen EMail_Empfaenger Betreff Steckdosen_vor_versand_pruefen Beschreibe diese Funktion … uebnerschrift_nachrichten_Steckdosen emoji_πŸ”Œ * etage Steckdosen status * \n timeout3 timeout3 1000 ms EQ anzahl_Steckdosen_aktiv 1 nachrichten_ausgabe_Steckdosen uebnerschrift_nachrichten_Steckdosen Es ist eine einzahl_Steckdose an emoji_⚑️ \n \n TEXT 1 liste_Steckdosen_aktiv \n GT anzahl_Steckdosen_aktiv 1 nachrichten_ausgabe_Steckdosen uebnerschrift_nachrichten_Steckdosen Es sind anzahl_Steckdosen_aktiv Steckdosen an emoji_⚑️ \n \n TEXT 1 liste_Steckdosen_aktiv \n EQ anzahl_Steckdosen_aktiv 0 nachrichten_ausgabe_Steckdosen uebnerschrift_nachrichten_Steckdosen Alle Steckdosen sind ausgeschaltet emoji_βœ… true FALSE Object ID Liste_Steckdosen_aktiv_emojis_eDP TRUE nachrichten_ausgabe_Steckdosen 0 Bewegungsmelder_alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa_instanz_0 alexa2.0.History.serialNumber any default alexa_instanz_0 angesprochener_echo_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume any default Ansage_Button_Bewegungsmelder_eDP AND EQ angesprochener_echo_instanz_0 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_0_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_0_neu TRUE EQ val Anzahl_Bewegungsmelder_aktiv_eDP 0 Ansage_Einleitungssatz_Bewegungsmelder , alle Bewegungsmelder sind inaktiv. NEQ val Anzahl_Bewegungsmelder_aktiv_eDP 0 Ansage_Einleitungssatz_Bewegungsmelder val Liste_Bewegungsmelder_aktiv_eDP , alle anderen Bewegungsmelder sind inaktiv. 0 log Logmeldung_Bewegungsmelder_Ansage FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… Telegram_Tueren c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9UdWVyZW4sCiAgICB1c2VyOiBUZWxlZ3JhbV9FbXBmYWVuZ2VyLAogICAgcGFyc2VfbW9kZTogIk1hcmtkb3duIiwKfSk7 Beschreibe diese Funktion … Steckdosen_zaehlen Beschreibe diese Funktion … anzahl_Steckdosen_aktiv 0 anzahl_Steckdosen_inaktiv 0 anzahl_Steckdosen_gesamt 0 liste_Steckdosen_aktiv liste_Steckdosen_inaktiv liste_Steckdosen_aktiv_html liste_Steckdosen_inaktiv_html htmlText <!DOCTYPE html><html lang="de"><head><title> Steckdosen </title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body> <p style="color:#0000FF; font-family:Helvetica; font-weight: bold"> Steckdosen status etage </p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γ„nderung: custom TT.MM.JJJJ SS:mm:ss </p> <table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);"> <tr style="color:#0000FF"; font-weight: bold"><td> Steckdosen etage &ensp;&ensp;&ensp;</td><td>Status</td></tr> <tr><td> Steckdosen_aktiv selektor_Steckdosen anzahl_Steckdosen_gesamt 1 OR val Steckdosen_aktiv GT val Steckdosen_aktiv 0 anzahl_Steckdosen_aktiv 1 INSERT LAST liste_Steckdosen_aktiv Steckdosen_aktiv eingeschaltet INSERT LAST liste_Steckdosen_aktiv_html Steckdosen_aktiv <td><span style="color:#FF0000"> emoji_πŸ”Œ an </span> Steckdosen_inaktiv selektor_Steckdosen OR val Steckdosen_inaktiv EQ val Steckdosen_inaktiv 0 anzahl_Steckdosen_inaktiv 1 INSERT LAST liste_Steckdosen_inaktiv Steckdosen_inaktiv ausgeschaltet INSERT LAST liste_Steckdosen_inaktiv_html Steckdosen_inaktiv <td> aus emoji_βœ… true FALSE Object ID Anzahl_Steckdosen_gesamt_eDP TRUE anzahl_Steckdosen_gesamt 0 true FALSE Object ID Anzahl_Steckdosen_aktiv_eDP TRUE anzahl_Steckdosen_aktiv 0 EQ anzahl_Steckdosen_aktiv 0 true FALSE Object ID Liste_Steckdosen_aktiv_eDP TRUE Steckdosen Aktuell sind alle Steckdosen ausgeschaltet emoji_βœ… 0 true FALSE Object ID Liste_Steckdosen_gesamt_eDP TRUE TEXT 1 liste_Steckdosen_inaktiv , 0 true FALSE Object ID Liste_Steckdosen_html_eDP TRUE htmlText TEXT 1 liste_Steckdosen_inaktiv_html <tr><td> </table></body> 0 true FALSE Object ID Liste_Steckdosen_aktiv_eDP TRUE GT ADD 1 abc TEXT 1 liste_Steckdosen_aktiv ; 1 abc Ansage_Einleitungssatz_Steckdosen , alle anderen Steckdosen sind ausgeschaltet. 250 TEXT 1 liste_Steckdosen_aktiv ; TEXT 1 liste_Steckdosen_aktiv , 0 true FALSE Object ID Liste_Steckdosen_gesamt_eDP TRUE TEXT 1 liste_Steckdosen_aktiv , , TEXT 1 liste_Steckdosen_inaktiv , 0 true FALSE Object ID Liste_Steckdosen_html_eDP TRUE EQ anzahl_Steckdosen_aktiv anzahl_Steckdosen_gesamt htmlText TEXT 1 liste_Steckdosen_aktiv_html <tr><td> </table></body> htmlText TEXT 1 liste_Steckdosen_aktiv_html <tr><td> <tr><td> TEXT 1 liste_Steckdosen_inaktiv_html <tr><td> </table></body> 0 Bewegungsmelder_alexa2_adapter_instanz_1 Beschreibe diese Funktion … alexa_instanz_1 alexa2.1.History.serialNumber any default alexa_instanz_1 angesprochener_echo_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume any default Ansage_Button_Bewegungsmelder_eDP AND EQ angesprochener_echo_instanz_1 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_1_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_1_neu TRUE EQ val Anzahl_Bewegungsmelder_aktiv_eDP 0 Ansage_Einleitungssatz_Bewegungsmelder , alle Bewegungsmelder sind inaktiv. NEQ val Anzahl_Bewegungsmelder_aktiv_eDP 0 Ansage_Einleitungssatz_Bewegungsmelder val Liste_Bewegungsmelder_aktiv_eDP , alle anderen Bewegungsmelder sind inaktiv. 0 log Logmeldung_Bewegungsmelder_Ansage FIRST FROM_END angesprochener_echo_instanz_1_neu 15 ausgefΓΌhrt βœ… echo_name aWYoZXhpc3RzT2JqZWN0KGlkKSkgcmV0dXJuIGdldE9iamVjdChpZCkuY29tbW9uLm5hbWU7 Beschreibe diese Funktion … Lichter_vor_versand_pruefen Beschreibe diese Funktion … uebnerschrift_nachrichten_Lichter emoji_πŸ’‘ * etage Licht status * \n timeout4 timeout4 1000 ms EQ anzahl_Lichter_aktiv 1 nachrichten_ausgabe_Lichter uebnerschrift_nachrichten_Lichter Es ist ein einzahl_Licht an emoji_πŸ’‘ \n \n TEXT 1 liste_Lichter_aktiv \n GT anzahl_Lichter_aktiv 1 nachrichten_ausgabe_Lichter uebnerschrift_nachrichten_Lichter Es sind anzahl_Lichter_aktiv Licht an emoji_πŸ’‘ \n \n TEXT 1 liste_Lichter_aktiv \n EQ anzahl_Lichter_aktiv 0 nachrichten_ausgabe_Lichter uebnerschrift_nachrichten_Lichter Alle Licht sind ausgeschaltet emoji_βœ… true FALSE Object ID Liste_Lichter_aktiv_emojis_eDP TRUE nachrichten_ausgabe_Lichter 0 Fenster_alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa_instanz_0 alexa2.0.History.serialNumber any default alexa_instanz_0 angesprochener_echo_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume any default Ansage_Button_Fenster_eDP AND EQ angesprochener_echo_instanz_0 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_0_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_0_neu TRUE EQ val Anzahl_Fenster_geoeffnet_und_gekippt_gesamt_eDP 0 Ansage_Einleitungssatz_Fenster , alle Fenster sind geschlossen. NEQ val Anzahl_Fenster_geoeffnet_und_gekippt_gesamt_eDP 0 Ansage_Einleitungssatz_Fenster val offene_gekippte_Fenster_Liste_eDP , alle anderen Fenster sind geschlossen. 0 log Logmeldung_Fenster_Ansage FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… Telegram_Temperaturen c2VuZFRvKCJ0ZWxlZ3JhbSIsICJzZW5kIiwgewogICAgdGV4dDogbmFjaHJpY2h0ZW5fYXVzZ2FiZV9UZW1wZXJhdHVyZW4sCiAgICB1c2VyOiBUZWxlZ3JhbV9FbXBmYWVuZ2VyLAogICAgcGFyc2VfbW9kZTogIk1hcmtkb3duIiwKfSk7 Beschreibe diese Funktion … Lichter_zaehlen Beschreibe diese Funktion … anzahl_Lichter_aktiv 0 anzahl_Lichter_inaktiv 0 anzahl_Lichter_gesamt 0 liste_Lichter_aktiv liste_Lichter_inaktiv liste_Lichter_aktiv_html liste_Lichter_inaktiv_html htmlText <!DOCTYPE html><html lang="de"><head><title> Licht </title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body> <p style="color:#0000FF; font-family:Helvetica; font-weight: bold"> Licht status etage </p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γ„nderung: custom TT.MM.JJJJ SS:mm:ss </p> <table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);"> <tr style="color:#0000FF"; font-weight: bold"><td> Licht etage &ensp;&ensp;&ensp;</td><td>Status</td></tr> <tr><td> Lichter_aktiv selektor_Lichter anzahl_Lichter_gesamt 1 OR val Lichter_aktiv GT val Lichter_aktiv 0 anzahl_Lichter_aktiv 1 INSERT LAST liste_Lichter_aktiv Lichter_aktiv ist eingeschaltet INSERT LAST liste_Lichter_aktiv_html Lichter_aktiv <td><span style="color:#FF0000"> emoji_πŸ’‘ an </span> Lichter_inaktiv selektor_Lichter OR val Lichter_inaktiv EQ val Lichter_inaktiv 0 anzahl_Lichter_inaktiv 1 INSERT LAST liste_Lichter_inaktiv Lichter_inaktiv ist ausgeschaltet INSERT LAST liste_Lichter_inaktiv_html Lichter_inaktiv <td> aus emoji_πŸ‘ true FALSE Object ID Anzahl_Lichter_gesamt_eDP TRUE anzahl_Lichter_gesamt 0 true FALSE Object ID Anzahl_Lichter_aktiv_eDP TRUE anzahl_Lichter_aktiv 0 EQ anzahl_Lichter_aktiv 0 true FALSE Object ID Liste_Lichter_aktiv_eDP TRUE Licht Aktuell sind alle Licht ausgeschaltet 0 true FALSE Object ID Liste_Lichter_gesamt_eDP TRUE TEXT 1 liste_Lichter_inaktiv , 0 true FALSE Object ID Liste_Lichter_html_eDP TRUE htmlText TEXT 1 liste_Lichter_inaktiv_html <tr><td> </table></body> 0 true FALSE Object ID Liste_Lichter_aktiv_eDP TRUE GT ADD 1 abc TEXT 1 liste_Lichter_aktiv ; 1 abc Ansage_Einleitungssatz_Lichter ,alle anderen Licht sind ausgeschaltet. 250 TEXT 1 liste_Lichter_aktiv ; TEXT 1 liste_Lichter_aktiv , 0 true FALSE Object ID Liste_Lichter_gesamt_eDP TRUE TEXT 1 liste_Lichter_aktiv , , TEXT 1 liste_Lichter_inaktiv , 0 true FALSE Object ID Liste_Lichter_html_eDP TRUE EQ anzahl_Lichter_aktiv anzahl_Lichter_gesamt htmlText TEXT 1 liste_Lichter_aktiv_html <tr><td> </table></body> htmlText TEXT 1 liste_Lichter_aktiv_html <tr><td> <tr><td> TEXT 1 liste_Lichter_inaktiv_html <tr><td> </table></body> 0 Fenster_alexa2_adapter_instanz_1 Beschreibe diese Funktion … alexa_instanz_1 alexa2.1.History.serialNumber any default alexa_instanz_1 angesprochener_echo_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume any default Ansage_Button_Fenster_eDP AND EQ angesprochener_echo_instanz_1 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_1_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_1_neu TRUE EQ val Anzahl_Fenster_geoeffnet_und_gekippt_gesamt_eDP 0 Ansage_Einleitungssatz_Fenster , alle Fenster sind geschlossen. NEQ val Anzahl_Fenster_geoeffnet_und_gekippt_gesamt_eDP 0 Ansage_Einleitungssatz_Fenster val offene_gekippte_Fenster_Liste_eDP , alle anderen Fenster sind geschlossen. 0 log Logmeldung_Fenster_Ansage FIRST FROM_END angesprochener_echo_instanz_1_neu 15 ausgefΓΌhrt βœ… Bewegungsmelder_vor_versand_pruefen Beschreibe diese Funktion … uebnerschrift_nachrichten_Bewegungsmelder emoji_πŸ‘€ * etage Bewegungsmelder status * \n timeout5 timeout5 1000 ms EQ anzahl_Bewegungsmelder_aktiv 1 nachrichten_ausgabe_Bewegungsmelder uebnerschrift_nachrichten_Bewegungsmelder Es ist ein einzahl_Bewegungsmelder aktiv emoji_πŸ‘€ \n \n TEXT 1 liste_Bewegungsmelder_aktiv \n GT anzahl_Bewegungsmelder_aktiv 1 nachrichten_ausgabe_Bewegungsmelder uebnerschrift_nachrichten_Bewegungsmelder Es sind anzahl_Bewegungsmelder_aktiv Bewegungsmelder an emoji_πŸ‘€ \n \n TEXT 1 liste_Bewegungsmelder_aktiv \n EQ anzahl_Bewegungsmelder_aktiv 0 nachrichten_ausgabe_Bewegungsmelder uebnerschrift_nachrichten_Bewegungsmelder Alle Bewegungsmelder sind inaktiv emoji_βœ… true FALSE Object ID Liste_Bewegungsmelder_aktiv_emojis_eDP TRUE nachrichten_ausgabe_Bewegungsmelder 0 Tueren_alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa_instanz_0 alexa2.0.History.serialNumber any default alexa_instanz_0 angesprochener_echo_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume any default Ansage_Button_Tueren_eDP AND EQ angesprochener_echo_instanz_0 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_0_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_0_neu TRUE EQ val Anzahl_Tueren_geoeffnet_und_gekippt_gesamt_eDP 0 Ansage_Einleitungssatz_Tueren , alle Tueren sind geschlossen. NEQ val Anzahl_Tueren_geoeffnet_und_gekippt_gesamt_eDP 0 Ansage_Einleitungssatz_Tueren val offene_gekippte_Tueren_Liste_eDP , alle anderen Tueren sind geschlossen. 0 log Logmeldung_Tueren_Ansage FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… Bewegungsmelder_zaehlen Beschreibe diese Funktion … anzahl_Bewegungsmelder_aktiv 0 anzahl_Bewegungsmelder_inaktiv 0 anzahl_Bewegungsmelder_gesamt 0 liste_Bewegungsmelder_aktiv liste_Bewegungsmelder_inaktiv liste_Bewegungsmelder_aktiv_html liste_Bewegungsmelder_inaktiv_html htmlText <!DOCTYPE html><html lang="de"><head><title> Bewegungsmelder </title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body> <p style="color:#0000FF; font-family:Helvetica; font-weight: bold"> Bewegungsmelder status etage </p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γ„nderung: custom TT.MM.JJJJ SS:mm:ss </p> <table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);"> <tr style="color:#0000FF"; font-weight: bold"><td> Bewegungsmelder etage &ensp;&ensp;&ensp;</td><td>Status</td></tr> <tr><td> Bewegungsmelder_aktiv selektor_Bewegungsmelder anzahl_Bewegungsmelder_gesamt 1 OR val Bewegungsmelder_aktiv GT val Bewegungsmelder_aktiv 0 anzahl_Bewegungsmelder_aktiv 1 INSERT LAST liste_Bewegungsmelder_aktiv Bewegungsmelder_aktiv aktiv INSERT LAST liste_Bewegungsmelder_aktiv_html Bewegungsmelder_aktiv <td><span style="color:#FF0000"> emoji_πŸ‘€ aktiv </span> Bewegungsmelder_inaktiv selektor_Bewegungsmelder OR val Bewegungsmelder_inaktiv EQ val Bewegungsmelder_inaktiv 0 anzahl_Bewegungsmelder_inaktiv 1 INSERT LAST liste_Bewegungsmelder_inaktiv Bewegungsmelder_inaktiv inaktiv INSERT LAST liste_Bewegungsmelder_inaktiv_html Bewegungsmelder_inaktiv <td> inaktiv emoji_πŸ‘ true FALSE Object ID Anzahl_Bewegungsmelder_gesamt_eDP TRUE anzahl_Bewegungsmelder_gesamt 0 true FALSE Object ID Anzahl_Bewegungsmelder_aktiv_eDP TRUE anzahl_Bewegungsmelder_aktiv 0 EQ anzahl_Bewegungsmelder_aktiv 0 true FALSE Object ID Liste_Bewegungsmelder_aktiv_eDP TRUE Bewegungsmelder Aktuell sind alle Bewegungsmelder inaktiv 0 true FALSE Object ID Liste_Bewegungsmelder_gesamt_eDP TRUE TEXT 1 liste_Bewegungsmelder_inaktiv , 0 true FALSE Object ID Liste_Bewegungsmelder_html_eDP TRUE htmlText TEXT 1 liste_Bewegungsmelder_inaktiv_html <tr><td> </table></body> 0 true FALSE Object ID Liste_Bewegungsmelder_aktiv_eDP TRUE GT ADD 1 abc Ansage_Einleitungssatz_Bewegungsmelder , alle anderen Bewegungsmelder sind inaktiv. 1 abc TEXT 1 liste_Bewegungsmelder_inaktiv , 250 TEXT 1 liste_Bewegungsmelder_inaktiv ; TEXT 1 liste_Bewegungsmelder_inaktiv , 0 true FALSE Object ID Liste_Bewegungsmelder_gesamt_eDP TRUE TEXT 1 liste_Bewegungsmelder_aktiv , , TEXT 1 liste_Bewegungsmelder_inaktiv , 0 true FALSE Object ID Liste_Bewegungsmelder_html_eDP TRUE EQ anzahl_Bewegungsmelder_aktiv anzahl_Bewegungsmelder_gesamt htmlText TEXT 1 liste_Bewegungsmelder_aktiv_html <tr><td> </table></body> htmlText TEXT 1 liste_Bewegungsmelder_aktiv_html <tr><td> <tr><td> TEXT 1 liste_Bewegungsmelder_inaktiv_html <tr><td> </table></body> 0 Datenpunkte_anlegen LyoqDQogKiBDcmVhdGUgc3RhdGVzIHVuZGVyIDBfdXNlcmRhdGEuMCBvciBqYXZhc2NyaXB0LngNCiAqIEN1cnJlbnQgVmVyc2lvbjogICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzDQogKiBTdXBwb3J0OiAgICAgICAgICAgICBodHRwczovL2ZvcnVtLmlvYnJva2VyLm5ldC90b3BpYy8yNjgzOS8NCiAqIEF1dG9yOiAgICAgICAgICAgICAgIE1pYyAoaW9Ccm9rZXIpIHwgTWljLU0gKGdpdGh1YikNCiAqIFZlcnNpb246ICAgICAgICAgICAgIDEuMSAoMjYgSmFudWFyeSAyMDIwKQ0KICogRXhhbXBsZTogICAgICAgICAgICAgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9NaWMtTS9pb2Jyb2tlci5jcmVhdGVVc2VyU3RhdGVzI2JlaXNwaWVsDQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogUExFQVNFIE5PVEU6IFBlciBodHRwczovL2dpdGh1Yi5jb20vaW9Ccm9rZXIvaW9Ccm9rZXIuamF2YXNjcmlwdC9pc3N1ZXMvNDc0LCB0aGUgdXNlZCBmdW5jdGlvbiBzZXRPYmplY3QoKSANCiAqICAgICAgICAgICAgICBleGVjdXRlcyB0aGUgY2FsbGJhY2sgUFJJT1IgdG8gY29tcGxldGluZyB0aGUgc3RhdGUgY3JlYXRpb24uIFRoZXJlZm9yZSwgd2UgdXNlIGEgc2V0VGltZW91dCBhbmQgY291bnRlci4gDQogKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KICogQHBhcmFtIHtzdHJpbmd9IHdoZXJlICAgICAgICAgIFdoZXJlIHRvIGNyZWF0ZSB0aGUgc3RhdGU6ICcwX3VzZXJkYXRhLjAnIG9yICdqYXZhc2NyaXB0LngnLg0KICogQHBhcmFtIHtib29sZWFufSBmb3JjZSAgICAgICAgIEZvcmNlIHN0YXRlIGNyZWF0aW9uIChvdmVyd3JpdGUpLCBpZiBzdGF0ZSBpcyBleGlzdGluZy4NCiAqIEBwYXJhbSB7YXJyYXl9IHN0YXRlc1RvQ3JlYXRlICBTdGF0ZShzKSB0byBjcmVhdGUuIHNpbmdsZSBhcnJheSBvciBhcnJheSBvZiBhcnJheXMNCiAqIEBwYXJhbSB7b2JqZWN0fSBbY2FsbGJhY2tdICAgICBPcHRpb25hbDogYSBjYWxsYmFjayBmdW5jdGlvbiAtLSBUaGlzIHByb3ZpZGVkIGZ1bmN0aW9uIHdpbGwgYmUgZXhlY3V0ZWQgYWZ0ZXIgYWxsIHN0YXRlcyBhcmUgY3JlYXRlZC4NCiAqLw0KDQoNCmZ1bmN0aW9uIGNyZWF0ZVVzZXJTdGF0ZXMod2hlcmUsIGZvcmNlLCBzdGF0ZXNUb0NyZWF0ZSwgY2FsbGJhY2sgPSB1bmRlZmluZWQpIHsNCiANCiAgICBjb25zdCBXQVJOID0gZmFsc2U7IC8vIE9ubHkgZm9yIDBfdXNlcmRhdGEuMDogVGhyb3dzIHdhcm5pbmcgaW4gbG9nLCBpZiBzdGF0ZSBpcyBhbHJlYWR5IGV4aXN0aW5nIGFuZCBmb3JjZT1mYWxzZS4gRGVmYXVsdCBpcyBmYWxzZSwgc28gbm8gd2FybmluZyBpbiBsb2csIGlmIHN0YXRlIGV4aXN0cy4NCiAgICBjb25zdCBMT0dfREVCVUcgPSBmYWxzZTsgLy8gVG8gZGVidWcgdGhpcyBmdW5jdGlvbiwgc2V0IHRvIHRydWUNCiAgICAvLyBQZXIgaXNzdWUgIzQ3NCAoaHR0cHM6Ly9naXRodWIuY29tL2lvQnJva2VyL2lvQnJva2VyLmphdmFzY3JpcHQvaXNzdWVzLzQ3NCksIHRoZSB1c2VkIGZ1bmN0aW9uIHNldE9iamVjdCgpIGV4ZWN1dGVzIHRoZSBjYWxsYmFjayANCiAgICAvLyBiZWZvcmUgdGhlIHN0YXRlIGlzIGFjdHVhbCBjcmVhdGVkLiBUaGVyZWZvcmUsIHdlIHVzZSBhIHNldFRpbWVvdXQgYW5kIGNvdW50ZXIgYXMgYSB3b3JrYXJvdW5kLg0KICAgIGNvbnN0IERFTEFZID0gNTA7IC8vIERlbGF5IGluIG1pbGxpc2Vjb25kcyAobXMpLiBJbmNyZWFzZSB0aGlzIHRvIDEwMCwgaWYgaXQgaXMgbm90IHdvcmtpbmcuDQoNCiAgICAvLyBWYWxpZGF0ZSAid2hlcmUiDQogICAgaWYgKHdoZXJlLmVuZHNXaXRoKCcuJykpIHdoZXJlID0gd2hlcmUuc2xpY2UoMCwgLTEpOyAvLyBSZW1vdmUgdHJhaWxpbmcgZG90DQogICAgaWYgKCAod2hlcmUubWF0Y2goL14oKGphdmFzY3JpcHRcLihbMS05XVswLTldfFswLTldKSkkfDBfdXNlcmRhdGFcLjAkKS8pID09IG51bGwpICkgew0KICAgICAgICBsb2coJ1RoaXMgc2NyaXB0IGRvZXMgbm90IHN1cHBvcnQgdG8gY3JlYXRlIHN0YXRlcyB1bmRlciBbJyArIHdoZXJlICsgJ10nLCAnZXJyb3InKTsNCiAgICAgICAgcmV0dXJuOw0KICAgIH0NCg0KICAgIC8vIFByZXBhcmUgInN0YXRlc1RvQ3JlYXRlIiBzaW5jZSB3ZSBhbHNvIGFsbG93IGEgc2luZ2xlIHN0YXRlIHRvIGNyZWF0ZQ0KICAgIGlmKCFBcnJheS5pc0FycmF5KHN0YXRlc1RvQ3JlYXRlWzBdKSkgc3RhdGVzVG9DcmVhdGUgPSBbc3RhdGVzVG9DcmVhdGVdOyAvLyB3cmFwIGludG8gYXJyYXksIGlmIGp1c3Qgb25lIGFycmF5IGFuZCBub3QgaW5zaWRlIGFuIGFycmF5DQoNCiAgICAvLyBBZGQgIndoZXJlIiB0byBTVEFURVNfVE9fQ1JFQVRFDQogICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7IGkrKykgew0KICAgICAgICBsZXQgbHBQYXRoID0gc3RhdGVzVG9DcmVhdGVbaV1bMF0ucmVwbGFjZSgvXC4qXC4vZywgJy4nKTsgLy8gcmVwbGFjZSBhbGwgbXVsdGlwbGUgZG90cyBsaWtlICcuLicsICcuLi4nIHdpdGggYSBzaW5nbGUgJy4nDQogICAgICAgIGxwUGF0aCA9IGxwUGF0aC5yZXBsYWNlKC9eKChqYXZhc2NyaXB0XC4oWzEtOV1bMC05XXxbMC05XSlcLil8MF91c2VyZGF0YVwuMFwuKS8sJycpIC8vIHJlbW92ZSBhbnkgamF2YXNjcmlwdC54LiAvIDBfdXNlcmRhdGEuMC4gZnJvbSBiZWdpbm5pbmcNCiAgICAgICAgbHBQYXRoID0gd2hlcmUgKyAnLicgKyBscFBhdGg7IC8vIGFkZCB3aGVyZSB0byBiZWdpbm5pbmcgb2Ygc3RyaW5nDQogICAgICAgIHN0YXRlc1RvQ3JlYXRlW2ldWzBdID0gbHBQYXRoOw0KICAgIH0NCg0KICAgIGlmICh3aGVyZSAhPSAnMF91c2VyZGF0YS4wJykgew0KICAgICAgICAvLyBDcmVhdGUgU3RhdGVzIHVuZGVyIGphdmFzY3JpcHQueA0KICAgICAgICBsZXQgbnVtU3RhdGVzID0gc3RhdGVzVG9DcmVhdGUubGVuZ3RoOw0KICAgICAgICBzdGF0ZXNUb0NyZWF0ZS5mb3JFYWNoKGZ1bmN0aW9uKGxvb3BQYXJhbSkgew0KICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIE5vdyB3ZSBhcmUgY3JlYXRpbmcgbmV3IHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10nKTsNCiAgICAgICAgICAgIGxldCBsb29wSW5pdCA9IChsb29wUGFyYW1bMV1bJ2RlZiddID09IHVuZGVmaW5lZCkgPyBudWxsIDogbG9vcFBhcmFtWzFdWydkZWYnXTsgLy8gbWltaWMgc2FtZSBiZWhhdmlvciBhcyBjcmVhdGVTdGF0ZSBpZiBubyBpbml0IHZhbHVlIGlzIHByb3ZpZGVkDQogICAgICAgICAgICBjcmVhdGVTdGF0ZShsb29wUGFyYW1bMF0sIGxvb3BJbml0LCBmb3JjZSwgbG9vcFBhcmFtWzFdLCBmdW5jdGlvbigpIHsNCiAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsNCiAgICAgICAgICAgICAgICBpZiAobnVtU3RhdGVzID09PSAwKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHByb2Nlc3NlZC4nKTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjaw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEZ1bmN0aW9uIHRvIGNhbGxiYWNrIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOw0KICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfSk7DQogICAgICAgIH0pOw0KICAgIH0gZWxzZSB7DQogICAgICAgIC8vIENyZWF0ZSBTdGF0ZXMgdW5kZXIgMF91c2VyZGF0YS4wDQogICAgICAgIGxldCBudW1TdGF0ZXMgPSBzdGF0ZXNUb0NyZWF0ZS5sZW5ndGg7DQogICAgICAgIGxldCBjb3VudGVyID0gLTE7DQogICAgICAgIHN0YXRlc1RvQ3JlYXRlLmZvckVhY2goZnVuY3Rpb24obG9vcFBhcmFtKSB7DQogICAgICAgICAgICBjb3VudGVyICs9IDE7DQogICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2cgKCdbRGVidWddIEN1cnJlbnRseSBwcm9jZXNzaW5nIGZvbGxvd2luZyBzdGF0ZTogWycgKyBsb29wUGFyYW1bMF0gKyAnXScpOw0KICAgICAgICAgICAgaWYoICgkKGxvb3BQYXJhbVswXSkubGVuZ3RoID4gMCkgJiYgKGV4aXN0c1N0YXRlKGxvb3BQYXJhbVswXSkpICkgeyAvLyBXb3JrYXJvdW5kIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vaW9Ccm9rZXIvaW9Ccm9rZXIuamF2YXNjcmlwdC9pc3N1ZXMvNDc4DQogICAgICAgICAgICAgICAgLy8gU3RhdGUgaXMgZXhpc3RpbmcuDQogICAgICAgICAgICAgICAgaWYgKFdBUk4gJiYgIWZvcmNlKSBsb2coJ1N0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ10gaXMgYWxyZWFkeSBleGlzdGluZyBhbmQgd2lsbCBubyBsb25nZXIgYmUgY3JlYXRlZC4nLCAnd2FybicpOw0KICAgICAgICAgICAgICAgIGlmICghV0FSTiAmJiBMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBTdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddIGlzIGFscmVhZHkgZXhpc3RpbmcuIE9wdGlvbiBmb3JjZSAoPW92ZXJ3cml0ZSkgaXMgc2V0IHRvIFsnICsgZm9yY2UgKyAnXS4nKTsNCiAgICAgICAgICAgICAgICBpZighZm9yY2UpIHsNCiAgICAgICAgICAgICAgICAgICAgLy8gU3RhdGUgZXhpc3RzIGFuZCBzaGFsbCBub3QgYmUgb3ZlcndyaXR0ZW4gc2luY2UgZm9yY2U9ZmFsc2UNCiAgICAgICAgICAgICAgICAgICAgLy8gU28sIHdlIGRvIG5vdCBwcm9jZWVkLg0KICAgICAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsNCiAgICAgICAgICAgICAgICAgICAgaWYgKG51bVN0YXRlcyA9PT0gMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEFsbCBzdGF0ZXMgc3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCEnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHsgLy8gZXhlY3V0ZSBpZiBhIGZ1bmN0aW9uIHdhcyBwcm92aWRlZCB0byBwYXJhbWV0ZXIgY2FsbGJhY2sNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTE9HX0RFQlVHKSBsb2coJ1tEZWJ1Z10gQW4gb3B0aW9uYWwgY2FsbGJhY2sgZnVuY3Rpb24gd2FzIHByb3ZpZGVkLCB3aGljaCB3ZSBhcmUgZ29pbmcgdG8gZXhlY3V0ZSBub3cuJyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKCk7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBuZWVkIHRvIGdvIG91dCBhbmQgY29udGludWUgd2l0aCBuZXh0IGVsZW1lbnQgaW4gbG9vcC4NCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTg0NTI5MjAvY29udGludWUtaW4tY3Vyc29yLWZvcmVhY2gNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gLy8gaWYoIWZvcmNlKQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAvLyBTdGF0ZSBpcyBub3QgZXhpc3Rpbmcgb3IgZm9yY2UgPSB0cnVlLCBzbyB3ZSBhcmUgY29udGludWluZyB0byBjcmVhdGUgdGhlIHN0YXRlIHRocm91Z2ggc2V0T2JqZWN0KCkuDQogICAgICAgICAgICBsZXQgb2JqID0ge307DQogICAgICAgICAgICBvYmoudHlwZSA9ICdzdGF0ZSc7DQogICAgICAgICAgICBvYmoubmF0aXZlID0ge307DQogICAgICAgICAgICBvYmouY29tbW9uID0gbG9vcFBhcmFtWzFdOw0KICAgICAgICAgICAgc2V0T2JqZWN0KGxvb3BQYXJhbVswXSwgb2JqLCBmdW5jdGlvbiAoZXJyKSB7DQogICAgICAgICAgICAgICAgaWYgKGVycikgew0KICAgICAgICAgICAgICAgICAgICBsb2coJ0Nhbm5vdCB3cml0ZSBvYmplY3QgZm9yIHN0YXRlIFsnICsgbG9vcFBhcmFtWzBdICsgJ106ICcgKyBlcnIpOw0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBOb3cgd2UgYXJlIGNyZWF0aW5nIG5ldyBzdGF0ZSBbJyArIGxvb3BQYXJhbVswXSArICddJykNCiAgICAgICAgICAgICAgICAgICAgbGV0IGluaXQgPSBudWxsOw0KICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0uZGVmID09PSB1bmRlZmluZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGxvb3BQYXJhbVsxXS50eXBlID09PSAnbnVtYmVyJykgaW5pdCA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ2Jvb2xlYW4nKSBpbml0ID0gZmFsc2U7DQogICAgICAgICAgICAgICAgICAgICAgICBpZihsb29wUGFyYW1bMV0udHlwZSA9PT0gJ3N0cmluZycpIGluaXQgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGluaXQgPSBsb29wUGFyYW1bMV0uZGVmOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBzZXRTdGF0ZShsb29wUGFyYW1bMF0sIGluaXQsIHRydWUsIGZ1bmN0aW9uKCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBzZXRTdGF0ZSBkdXJjaGdlZsO8aHJ0OiAnICsgbG9vcFBhcmFtWzBdKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1TdGF0ZXMtLTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobnVtU3RhdGVzID09PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChMT0dfREVCVUcpIGxvZygnW0RlYnVnXSBBbGwgc3RhdGVzIHByb2Nlc3NlZC4nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykgeyAvLyBleGVjdXRlIGlmIGEgZnVuY3Rpb24gd2FzIHByb3ZpZGVkIHRvIHBhcmFtZXRlciBjYWxsYmFjaw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKExPR19ERUJVRykgbG9nKCdbRGVidWddIEZ1bmN0aW9uIHRvIGNhbGxiYWNrIHBhcmFtZXRlciB3YXMgcHJvdmlkZWQnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICAgICAgIH0sIERFTEFZICsgKDIwICogY291bnRlcikgKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9KTsNCiAgICAgICAgfSk7DQogICAgfQ0KfQ0KDQovL1N0aW1tZW4gZnVlciBBbGV4YSBzc21sIEFuc2FnZSBhbmxlZ2VuDQovKmlmIChBbGV4YV9BbnNhZ2VfdmVyd2VuZGVuID09IHRydWUpew0KbGV0IHN0YXRlc1RvQ3JlYXRlID0gWw0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkFsZXhhX0Fuc2FnZW4uU3RpbW1lbi5BbGV4YScsIHsnbmFtZSc6J0FsZXhhJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzp0cnVlLCAic21hcnROYW1lIjogeyJkZSI6ICJBbGV4YSIsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifX1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkFsZXhhX0Fuc2FnZW4uU3RpbW1lbi5IYW5zJywgeyduYW1lJzonSGFucycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkhhbnMiLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQWxleGFfQW5zYWdlbi5TdGltbWVuLlZpY2tpJywgeyduYW1lJzonVmlja2knLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJWaWNraSIsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5BbGV4YV9BbnNhZ2VuLlN0aW1tZW4uQ29uY2hpdGEnLCB7J25hbWUnOidDb25jaGl0YScsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkNvbmNoaXRhIiwic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkFsZXhhX0Fuc2FnZW4uU3RpbW1lbi5BbGV4YV9zc21sJywgeyduYW1lJzonQWxleGFfc3NtbCcsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6JzxzcGVhaz48dm9pY2UgbmFtZT0iQWxleGEiPicgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQWxleGFfQW5zYWdlbi5TdGltbWVuLkhhbnNfc3NtbCcsIHsnbmFtZSc6J0hhbnNfc3NtbCcsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6JzxzcGVhaz48dm9pY2UgbmFtZT0iSGFucyI+JyB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5BbGV4YV9BbnNhZ2VuLlN0aW1tZW4uVmlja2lfc3NtbCcsIHsnbmFtZSc6J1ZpY2tpX3NzbWwnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOic8c3BlYWs+PHZvaWNlIG5hbWU9IlZpY2tpIj4nIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkFsZXhhX0Fuc2FnZW4uU3RpbW1lbi5Db25jaGl0YV9zc21sJywgeyduYW1lJzonQ29uY2hpdGFfc3NtbCcsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6JzxzcGVhaz48dm9pY2UgbmFtZT0iQ29uY2hpdGEiPicgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQWxleGFfQW5zYWdlbi5TdGltbWVuLnNzbWxfZW5kZScsIHsnbmFtZSc6J3NzbWxfZW5kZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6Jzwvdm9pY2U+PC9zcGVhaz4nIH1dLA0KXTsNCmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsNCg0KKi8NCg0KLy9GZW5zdGVyDQovL0Fuc2FnZSBCdXR0b24gRmVuc3RlcmFuc2FnZSBhbmxlZ2VuDQppZiAoQWxleGFfQW5zYWdlX3ZlcndlbmRlbiA9PSB0cnVlICYmIEZlbnN0ZXJfdmVyd2VuZGVuID09IHRydWUpew0KbGV0IHN0YXRlc1RvQ3JlYXRlID0gWw0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkFsZXhhX0Fuc2FnZW4uQW5zYWdlbi4nK1tGZW5zdGVyXSsnYW5zYWdlJywgeyduYW1lJzogW0ZlbnN0ZXJdKydhbnNhZ2UnLCd0eXBlJzogJ2Jvb2xlYW4nLCAncmVhZCc6IHRydWUsICd3cml0ZSc6IHRydWUsICdyb2xlJzogJ2J1dHRvbicsJ2RlZic6dHJ1ZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAnJytbRmVuc3Rlcl0rJycrJ2Fuc2FnZScsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgDQpdOw0KY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9Ow0KDQovL0ZlbnN0ZXIgemFlaGxlbiBEYXRlbnB1bmt0ZSBhbmxlZ2VuICAgIA0KaWYgKEZlbnN0ZXJfdmVyd2VuZGVuID09IHRydWUpew0KbGV0IHN0YXRlc1RvQ3JlYXRlID0gWw0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbRmVuc3Rlcl0rJy5BbnphaGxfJytbRmVuc3Rlcl0rJ19nZWtpcHB0JywgeyduYW1lJzonQW56YWhsXycrW0ZlbnN0ZXJdKydfZ2VraXBwdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW0ZlbnN0ZXJdKycnLCAnZGVmJzowIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbRmVuc3Rlcl0rJy5BbnphaGxfJytbRmVuc3Rlcl0rJ19vZmZlbicsIHsnbmFtZSc6J0FuemFobF8nK1tGZW5zdGVyXSsnX29mZmVuJywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbRmVuc3Rlcl0rJycsICdkZWYnOjAgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tGZW5zdGVyXSsnLkFuemFobF8nK1tGZW5zdGVyXSsnX2dlc2NobG9zc2VuJywgeyduYW1lJzonQW56YWhsXycrW0ZlbnN0ZXJdKydfZ2VzY2hsb3NzZW4nLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tGZW5zdGVyXSsnJywgJ2RlZic6MCB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLicrW0ZlbnN0ZXJdKycuQW56YWhsXycrW0ZlbnN0ZXJdKydfZ2VzYW10JywgeyduYW1lJzonQW56YWhsXycrW0ZlbnN0ZXJdKydfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbRmVuc3Rlcl0rJycsICdkZWYnOjAgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tGZW5zdGVyXSsnLkFuemFobF8nK1tGZW5zdGVyXSsnX2dlb2VmZm5ldF91bmRfZ2VraXBwdF9nZXNhbXQnLCB7J25hbWUnOidBbnphaGxfJytbRmVuc3Rlcl0rJ19nZW9lZmZuZXRfdW5kX2dla2lwcHRfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbRmVuc3Rlcl0rJycsICdkZWYnOjAgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tGZW5zdGVyXSsnLm9mZmVuZV9nZWtpcHB0ZV8nK1tGZW5zdGVyXSsnX0xpc3RlJywgeyduYW1lJzonb2ZmZW5lX2dla2lwcHRlXycrW0ZlbnN0ZXJdKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbRmVuc3Rlcl0rJy5nZXNhbXRlXycrW0ZlbnN0ZXJdKydfTGlzdGUnLCB7J25hbWUnOidnZXNhbXRlXycrW0ZlbnN0ZXJdKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbRmVuc3Rlcl0rJy5odG1sXycrW0ZlbnN0ZXJdKydfTGlzdGUnLCB7J25hbWUnOidodG1sXycrW0ZlbnN0ZXJdKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbRmVuc3Rlcl0rJy5vZmZlbmVfZ2VraXBwdGVfJytbRmVuc3Rlcl0rJ19MaXN0ZV9taXRfRW1vamlzJywgeyduYW1lJzonb2ZmZW5lX2dla2lwcHRlXycrW0ZlbnN0ZXJdKydfTGlzdGVfbWl0X0Vtb2ppcycsICd0eXBlJzonbWl4ZWQnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidtaXhlZCcsICdkZWYnOidub2NoIGxlZXInIH1dLCAgIA0KXTsNCmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsNCg0KLy9UZWxlZ3JhbSBGZW5zdGVyIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuDQppZiAoRmVuc3Rlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBUZWxlZ3JhbV92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7DQpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbICAgIA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkJlbmFjaHJpY2h0aWd1bmdlbi5UZWxlZ3JhbS5UVmVyc2FuZF8nK1tGZW5zdGVyXSsndmVyc2FuZCcsIHsnbmFtZSc6J1RlbGVncmFtXycrW0ZlbnN0ZXJdKydfVmVyc2FuZF9hbl9hdXMnLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkJlbmFjaHJpY2h0aWd1bmdlbi5UZWxlZ3JhbS5UVmVyc2FuZF8nK1tGZW5zdGVyXSsnc3RhdHVzJywgeyduYW1lJzonVGVsZWdyYW1fJytbRmVuc3Rlcl0rJ3N0YXR1c19zZW5kZW4nLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2J1dHRvbicsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJUZWxlZ3JhbSAiK1tGZW5zdGVyXSsnJysnc3RhdHVzJywic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLCANCl07DQpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07DQogICAgDQovL0UtTWFpbCBGZW5zdGVyIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuDQppZiAoRmVuc3Rlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBFbWFpbF92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7DQpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbICAgDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQmVuYWNocmljaHRpZ3VuZ2VuLkVNYWlsLkVWZXJzYW5kXycrW0ZlbnN0ZXJdKyd2ZXJzYW5kJywgeyduYW1lJzonRU1haWxfJytbRmVuc3Rlcl0rJ19WZXJzYW5kX2FuX2F1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQmVuYWNocmljaHRpZ3VuZ2VuLkVNYWlsLkVWZXJzYW5kXycrW0ZlbnN0ZXJdKydzdGF0dXMnLCB7J25hbWUnOidFTWFpbF8nK1tGZW5zdGVyXSsnc3RhdHVzX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkVNYWlsICIrW0ZlbnN0ZXJdKycnKydzdGF0dXMnLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sDQpdOw0KDQpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07DQoNCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQovL1R1ZXJlbg0KLy9BbnNhZ2UgQnV0dG9uIFR1ZXJlbmFuc2FnZSBhbmxlZ2VuDQppZiAoQWxleGFfQW5zYWdlX3ZlcndlbmRlbiA9PSB0cnVlICYmIFR1ZXJlbl92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7DQpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbICAgIA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkFsZXhhX0Fuc2FnZW4uQW5zYWdlbi4nK1tUdWVyZW5dKydhbnNhZ2UnLCB7J25hbWUnOiBbVHVlcmVuXSsnYW5zYWdlJywndHlwZSc6ICdib29sZWFuJywgJ3JlYWQnOiB0cnVlLCAnd3JpdGUnOiB0cnVlLCAncm9sZSc6ICdidXR0b24nLCdkZWYnOnRydWUsICJzbWFydE5hbWUiOiB7ImRlIjogJycrW1R1ZXJlbl0rJycrJ2Fuc2FnZScsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgDQpdOw0KY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9OyAgIA0KDQovL1R1ZXJlbiB6YWVobGVuIERhdGVucHVua3RlIGFubGVnZW4NCmlmIChUdWVyZW5fdmVyd2VuZGVuID09IHRydWUpew0KbGV0IHN0YXRlc1RvQ3JlYXRlID0gWyANCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLicrW1R1ZXJlbl0rJy5BbnphaGxfJytbVHVlcmVuXSsnX2dla2lwcHQnLCB7J25hbWUnOidBbnphaGxfJytbVHVlcmVuXSsnX2dla2lwcHQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tUdWVyZW5dKycnLCAnZGVmJzowIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbVHVlcmVuXSsnLkFuemFobF8nK1tUdWVyZW5dKydfb2ZmZW4nLCB7J25hbWUnOidBbnphaGxfJytbVHVlcmVuXSsnX29mZmVuJywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbVHVlcmVuXSsnJywgJ2RlZic6MCB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLicrW1R1ZXJlbl0rJy5BbnphaGxfJytbVHVlcmVuXSsnX2dlc2NobG9zc2VuJywgeyduYW1lJzonQW56YWhsXycrW1R1ZXJlbl0rJ19nZXNjaGxvc3NlbicsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW1R1ZXJlbl0rJycsICdkZWYnOjAgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tUdWVyZW5dKycuQW56YWhsXycrW1R1ZXJlbl0rJ19nZXNhbXQnLCB7J25hbWUnOidBbnphaGxfJytbVHVlcmVuXSsnX2dlc2FtdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW1R1ZXJlbl0rJycsICdkZWYnOjAgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tUdWVyZW5dKycuQW56YWhsXycrW1R1ZXJlbl0rJ19nZW9lZmZuZXRfdW5kX2dla2lwcHRfZ2VzYW10JywgeyduYW1lJzonQW56YWhsXycrW1R1ZXJlbl0rJ19nZW9lZmZuZXRfdW5kX2dla2lwcHRfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbVHVlcmVuXSsnJywgJ2RlZic6MCB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLicrW1R1ZXJlbl0rJy5vZmZlbmVfZ2VraXBwdGVfJytbVHVlcmVuXSsnX0xpc3RlJywgeyduYW1lJzonb2ZmZW5lX2dla2lwcHRlXycrW1R1ZXJlbl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tUdWVyZW5dKycuZ2VzYW10ZV8nK1tUdWVyZW5dKydfTGlzdGUnLCB7J25hbWUnOidnZXNhbXRlXycrW1R1ZXJlbl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tUdWVyZW5dKycuaHRtbF8nK1tUdWVyZW5dKydfTGlzdGUnLCB7J25hbWUnOidodG1sXycrW1R1ZXJlbl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tUdWVyZW5dKycub2ZmZW5lX2dla2lwcHRlXycrW1R1ZXJlbl0rJ19MaXN0ZV9taXRfRW1vamlzJywgeyduYW1lJzonb2ZmZW5lX2dla2lwcHRlXycrW1R1ZXJlbl0rJ19MaXN0ZV9taXRfRW1vamlzJywgJ3R5cGUnOidtaXhlZCcsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J21peGVkJywgJ2RlZic6J25vY2ggbGVlcicgfV0sICAgDQpdOw0KY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9Ow0KDQovL1RlbGVncmFtIFR1ZXJlbiAgTmFjaHJpY2h0ZW52ZXJzYW5kIGFubGVnZW4NCmlmIChUdWVyZW5fdmVyd2VuZGVuID09IHRydWUgJiYgVGVsZWdyYW1fdmVyd2VuZGVuID09IHRydWUpew0KbGV0IHN0YXRlc1RvQ3JlYXRlID0gWyANCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5CZW5hY2hyaWNodGlndW5nZW4uVGVsZWdyYW0uVFZlcnNhbmRfJytbVHVlcmVuXSsndmVyc2FuZCcsIHsnbmFtZSc6J1RlbGVncmFtXycrW1R1ZXJlbl0rJ19WZXJzYW5kX2FuX2F1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQmVuYWNocmljaHRpZ3VuZ2VuLlRlbGVncmFtLlRWZXJzYW5kXycrW1R1ZXJlbl0rJ3N0YXR1cycsIHsnbmFtZSc6J1RlbGVncmFtXycrW1R1ZXJlbl0rJ3N0YXR1c19zZW5kZW4nLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2J1dHRvbicsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJUZWxlZ3JhbSAiK1tUdWVyZW5dKycnKydzdGF0dXMnLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIA0KXTsNCmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsNCg0KLy9FLU1haWwgVHVlcmVuIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuDQppZiAoVHVlcmVuX3ZlcndlbmRlbiA9PSB0cnVlICYmIEVtYWlsX3ZlcndlbmRlbiA9PSB0cnVlKXsNCmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsgICAgDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQmVuYWNocmljaHRpZ3VuZ2VuLkVNYWlsLkVWZXJzYW5kXycrW1R1ZXJlbl0rJ3ZlcnNhbmQnLCB7J25hbWUnOidFTWFpbF8nK1tUdWVyZW5dKydfVmVyc2FuZF9hbl9hdXMnLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkJlbmFjaHJpY2h0aWd1bmdlbi5FTWFpbC5FVmVyc2FuZF8nK1tUdWVyZW5dKydzdGF0dXMnLCB7J25hbWUnOidFTWFpbF8nK1tUdWVyZW5dKydzdGF0dXNfc2VuZGVuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOididXR0b24nLCAnZGVmJzpmYWxzZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAiRU1haWwgIitbVHVlcmVuXSsnJysnc3RhdHVzJywic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLA0KXTsNCmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsNCg0KLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCi8vU3RlY2tkb3Nlbg0KLy9BbnNhZ2UgQnV0dG9uIFN0ZWNrZG9zZW5hbnNhZ2UgYW5sZWdlbg0KaWYgKEFsZXhhX0Fuc2FnZV92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBTdGVja2Rvc2VuX3ZlcndlbmRlbiA9PSB0cnVlKXsNCmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5BbGV4YV9BbnNhZ2VuLkFuc2FnZW4uJytbU3RlY2tkb3Nlbl0rJ2Fuc2FnZScsIHsnbmFtZSc6IFtTdGVja2Rvc2VuXSsnYW5zYWdlJywndHlwZSc6ICdib29sZWFuJywgJ3JlYWQnOiB0cnVlLCAnd3JpdGUnOiB0cnVlLCAncm9sZSc6ICdidXR0b24nLCdkZWYnOnRydWUsICJzbWFydE5hbWUiOiB7ImRlIjogJycrW1N0ZWNrZG9zZW5dKycnKydhbnNhZ2UnLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIA0KXTsNCmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsNCg0KLy9TdGVja2Rvc2VuIHphZWhsZW4gRGF0ZW5wdW5rdGUgYW5sZWdlbg0KaWYgKFN0ZWNrZG9zZW5fdmVyd2VuZGVuID09IHRydWUpew0KbGV0IHN0YXRlc1RvQ3JlYXRlID0gWyAgICAgICAgDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tTdGVja2Rvc2VuXSsnLkFuemFobF8nK1tTdGVja2Rvc2VuXSsnX2dlc2FtdCcsIHsnbmFtZSc6J0FuemFobF8nK1tTdGVja2Rvc2VuXSsnX2dlc2FtdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW1N0ZWNrZG9zZW5dKycnLCAnZGVmJzowIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbU3RlY2tkb3Nlbl0rJy5BbnphaGxfJytbU3RlY2tkb3Nlbl0rJ19ha3RpdicsIHsnbmFtZSc6J0FuemFobF8nK1tTdGVja2Rvc2VuXSsnX2FrdGl2JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbU3RlY2tkb3Nlbl0rJycsICdkZWYnOjAgfV0sICAgIA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbU3RlY2tkb3Nlbl0rJy5ha3RpdmVfJytbU3RlY2tkb3Nlbl0rJ19MaXN0ZScsIHsnbmFtZSc6J2FrdGl2ZV8nK1tTdGVja2Rvc2VuXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLicrW1N0ZWNrZG9zZW5dKycuZ2VzYW10ZV8nK1tTdGVja2Rvc2VuXSsnX0xpc3RlJywgeyduYW1lJzonZ2VzYW10ZV8nK1tTdGVja2Rvc2VuXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLicrW1N0ZWNrZG9zZW5dKycuaHRtbF8nK1tTdGVja2Rvc2VuXSsnX0xpc3RlJywgeyduYW1lJzonaHRtbF8nK1tTdGVja2Rvc2VuXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLicrW1N0ZWNrZG9zZW5dKycuYWt0aXZlXycrW1N0ZWNrZG9zZW5dKydfTGlzdGVfbWl0X0Vtb2ppcycsIHsnbmFtZSc6J2FrdGl2ZV8nK1tTdGVja2Rvc2VuXSsnX0xpc3RlX21pdF9FbW9qaXMnLCAndHlwZSc6J21peGVkJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbWl4ZWQnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwgICANCl07DQpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07DQogICAgDQovL1RlbGVncmFtIFN0ZWNrZG9zZW4gIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuDQppZiAoU3RlY2tkb3Nlbl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBUZWxlZ3JhbV92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7DQpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbIA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkJlbmFjaHJpY2h0aWd1bmdlbi5UZWxlZ3JhbS5UVmVyc2FuZF8nK1tTdGVja2Rvc2VuXSsndmVyc2FuZCcsIHsnbmFtZSc6J1RlbGVncmFtXycrW1N0ZWNrZG9zZW5dKydfVmVyc2FuZF9hbl9hdXMnLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkJlbmFjaHJpY2h0aWd1bmdlbi5UZWxlZ3JhbS5UVmVyc2FuZF8nK1tTdGVja2Rvc2VuXSsnc3RhdHVzJywgeyduYW1lJzonVGVsZWdyYW1fJytbU3RlY2tkb3Nlbl0rJ3N0YXR1c19zZW5kZW4nLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2J1dHRvbicsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJUZWxlZ3JhbSAiK1tTdGVja2Rvc2VuXSsnJysnc3RhdHVzJywic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLCANCl07DQpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07DQoNCi8vRS1NYWlsIFN0ZWNrZG9zZW4gTmFjaHJpY2h0ZW52ZXJzYW5kIGFubGVnZW4NCmlmIChTdGVja2Rvc2VuX3ZlcndlbmRlbiA9PSB0cnVlICYmIEVtYWlsX3ZlcndlbmRlbiA9PSB0cnVlKXsNCmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsgICANCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5CZW5hY2hyaWNodGlndW5nZW4uRU1haWwuRVZlcnNhbmRfJytbU3RlY2tkb3Nlbl0rJ3ZlcnNhbmQnLCB7J25hbWUnOidFTWFpbF8nK1tTdGVja2Rvc2VuXSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5CZW5hY2hyaWNodGlndW5nZW4uRU1haWwuRVZlcnNhbmRfJytbU3RlY2tkb3Nlbl0rJ3N0YXR1cycsIHsnbmFtZSc6J0VNYWlsXycrW1N0ZWNrZG9zZW5dKydzdGF0dXNfc2VuZGVuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOididXR0b24nLCAnZGVmJzpmYWxzZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAiRU1haWwgIitbU3RlY2tkb3Nlbl0rJycrJ3N0YXR1cycsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwNCl07DQpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07DQoNCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQovL0xpY2h0ZXINCi8vQW5zYWdlIEJ1dHRvbiBMaWNodGVyYW5zYWdlIGFubGVnZW4NCmlmIChBbGV4YV9BbnNhZ2VfdmVyd2VuZGVuID09IHRydWUgJiYgTGljaHRlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7DQpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQWxleGFfQW5zYWdlbi5BbnNhZ2VuLicrW0xpY2h0XSsnYW5zYWdlJywgeyduYW1lJzogW0xpY2h0XSsnYW5zYWdlJywndHlwZSc6ICdib29sZWFuJywgJ3JlYWQnOiB0cnVlLCAnd3JpdGUnOiB0cnVlLCAncm9sZSc6ICdidXR0b24nLCdkZWYnOnRydWUsICJzbWFydE5hbWUiOiB7ImRlIjogJycrW0xpY2h0XSsnJysnYW5zYWdlJywic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLCANCl07DQpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07DQoNCi8vTGljaHRlciB6YWVobGVuIERhdGVucHVua3RlIGFubGVnZW4NCmlmIChMaWNodGVyX3ZlcndlbmRlbiA9PSB0cnVlKXsNCmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLicrW0xpY2h0XSsnLkFuemFobF8nK1tMaWNodF0rJ19nZXNhbXQnLCB7J25hbWUnOidBbnphaGxfJytbTGljaHRdKydfZ2VzYW10JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbTGljaHRdKycnLCAnZGVmJzowIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbTGljaHRdKycuQW56YWhsXycrW0xpY2h0XSsnX2FrdGl2JywgeyduYW1lJzonQW56YWhsXycrW0xpY2h0XSsnX2FrdGl2JywgJ3R5cGUnOidudW1iZXInLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidudW1iZXInLCd1bml0JzonJytbTGljaHRdKycnLCAnZGVmJzowIH1dLCAgICANCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLicrW0xpY2h0XSsnLmFrdGl2ZV8nK1tMaWNodF0rJ19MaXN0ZScsIHsnbmFtZSc6J2FrdGl2ZV8nK1tMaWNodF0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tMaWNodF0rJy5nZXNhbXRlXycrW0xpY2h0XSsnX0xpc3RlJywgeyduYW1lJzonZ2VzYW10ZV8nK1tMaWNodF0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tMaWNodF0rJy5odG1sXycrW0xpY2h0XSsnX0xpc3RlJywgeyduYW1lJzonaHRtbF8nK1tMaWNodF0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tMaWNodF0rJy5ha3RpdmVfJytbTGljaHRdKydfTGlzdGVfbWl0X0Vtb2ppcycsIHsnbmFtZSc6J2FrdGl2ZV8nK1tMaWNodF0rJ19MaXN0ZV9taXRfRW1vamlzJywgJ3R5cGUnOidtaXhlZCcsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J21peGVkJywgJ2RlZic6J25vY2ggbGVlcicgfV0sICAgDQpdOw0KY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9Ow0KDQovL1RlbGVncmFtIExpY2h0ZXIgIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuDQppZiAoTGljaHRlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBUZWxlZ3JhbV92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7DQpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQmVuYWNocmljaHRpZ3VuZ2VuLlRlbGVncmFtLlRWZXJzYW5kXycrW0xpY2h0XSsndmVyc2FuZCcsIHsnbmFtZSc6J1RlbGVncmFtXycrW0xpY2h0XSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5CZW5hY2hyaWNodGlndW5nZW4uVGVsZWdyYW0uVFZlcnNhbmRfJytbTGljaHRdKydzdGF0dXMnLCB7J25hbWUnOidUZWxlZ3JhbV8nK1tMaWNodF0rJ3N0YXR1c19zZW5kZW4nLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2J1dHRvbicsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJUZWxlZ3JhbSAiK1tMaWNodF0rJycrJ3N0YXR1cycsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgDQpdOw0KY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9Ow0KDQovL0UtTWFpbCBMaWNodGVyIE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuDQppZiAoTGljaHRlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBFbWFpbF92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7DQpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQmVuYWNocmljaHRpZ3VuZ2VuLkVNYWlsLkVWZXJzYW5kXycrW0xpY2h0XSsndmVyc2FuZCcsIHsnbmFtZSc6J0VNYWlsXycrW0xpY2h0XSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5CZW5hY2hyaWNodGlndW5nZW4uRU1haWwuRVZlcnNhbmRfJytbTGljaHRdKydzdGF0dXMnLCB7J25hbWUnOidFTWFpbF8nK1tMaWNodF0rJ3N0YXR1c19zZW5kZW4nLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2J1dHRvbicsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJFTWFpbCAiK1tMaWNodF0rJycrJ3N0YXR1cycsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwNCl07DQpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07DQoNCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQovL0Jld2VndW5nc21lbGRlcg0KLy9BbnNhZ2UgQnV0dG9uIEJld2VndW5nc21lbGRlcmFuc2FnZSBhbmxlZ2VuDQppZiAoQWxleGFfQW5zYWdlX3ZlcndlbmRlbiA9PSB0cnVlICYmIEJld2VndW5nc21lbGRlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7DQpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQWxleGFfQW5zYWdlbi5BbnNhZ2VuLicrW0Jld2VndW5nc21lbGRlcl0rJ2Fuc2FnZScsIHsnbmFtZSc6IFtCZXdlZ3VuZ3NtZWxkZXJdKydhbnNhZ2UnLCd0eXBlJzogJ2Jvb2xlYW4nLCAncmVhZCc6IHRydWUsICd3cml0ZSc6IHRydWUsICdyb2xlJzogJ2J1dHRvbicsJ2RlZic6dHJ1ZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAnJytbQmV3ZWd1bmdzbWVsZGVyXSsnJysnYW5zYWdlJywic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLCANCl07DQpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07DQoNCi8vQmV3ZWd1bmdzbWVsZGVyIHphZWhsZW4gRGF0ZW5wdW5rdGUgYW5sZWdlbg0KaWYgKEJld2VndW5nc21lbGRlcl92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7DQpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tCZXdlZ3VuZ3NtZWxkZXJdKycuQW56YWhsXycrW0Jld2VndW5nc21lbGRlcl0rJ19nZXNhbXQnLCB7J25hbWUnOidBbnphaGxfJytbQmV3ZWd1bmdzbWVsZGVyXSsnX2dlc2FtdCcsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW0Jld2VndW5nc21lbGRlcl0rJycsICdkZWYnOjAgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tCZXdlZ3VuZ3NtZWxkZXJdKycuQW56YWhsXycrW0Jld2VndW5nc21lbGRlcl0rJ19ha3RpdicsIHsnbmFtZSc6J0FuemFobF8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfYWt0aXYnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tCZXdlZ3VuZ3NtZWxkZXJdKycnLCAnZGVmJzowIH1dLCAgICANCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLicrW0Jld2VndW5nc21lbGRlcl0rJy5ha3RpdmVfJytbQmV3ZWd1bmdzbWVsZGVyXSsnX0xpc3RlJywgeyduYW1lJzonYWt0aXZlXycrW0Jld2VndW5nc21lbGRlcl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tCZXdlZ3VuZ3NtZWxkZXJdKycuZ2VzYW10ZV8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfTGlzdGUnLCB7J25hbWUnOidnZXNhbXRlXycrW0Jld2VndW5nc21lbGRlcl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tCZXdlZ3VuZ3NtZWxkZXJdKycuaHRtbF8nK1tCZXdlZ3VuZ3NtZWxkZXJdKydfTGlzdGUnLCB7J25hbWUnOidodG1sXycrW0Jld2VndW5nc21lbGRlcl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tCZXdlZ3VuZ3NtZWxkZXJdKycuYWt0aXZlXycrW0Jld2VndW5nc21lbGRlcl0rJ19MaXN0ZV9taXRfRW1vamlzJywgeyduYW1lJzonYWt0aXZlXycrW0Jld2VndW5nc21lbGRlcl0rJ19MaXN0ZV9taXRfRW1vamlzJywgJ3R5cGUnOidtaXhlZCcsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J21peGVkJywgJ2RlZic6J25vY2ggbGVlcicgfV0sICAgDQpdOw0KY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9Ow0KDQovL1RlbGVncmFtIEJld2VndW5nc21lbGRlciAgTmFjaHJpY2h0ZW52ZXJzYW5kIGFubGVnZW4NCmlmIChCZXdlZ3VuZ3NtZWxkZXJfdmVyd2VuZGVuID09IHRydWUgJiYgVGVsZWdyYW1fdmVyd2VuZGVuID09IHRydWUpew0KbGV0IHN0YXRlc1RvQ3JlYXRlID0gWw0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkJlbmFjaHJpY2h0aWd1bmdlbi5UZWxlZ3JhbS5UVmVyc2FuZF8nK1tCZXdlZ3VuZ3NtZWxkZXJdKyd2ZXJzYW5kJywgeyduYW1lJzonVGVsZWdyYW1fJytbQmV3ZWd1bmdzbWVsZGVyXSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5CZW5hY2hyaWNodGlndW5nZW4uVGVsZWdyYW0uVFZlcnNhbmRfJytbQmV3ZWd1bmdzbWVsZGVyXSsnc3RhdHVzJywgeyduYW1lJzonVGVsZWdyYW1fJytbQmV3ZWd1bmdzbWVsZGVyXSsnc3RhdHVzX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIlRlbGVncmFtICIrW0Jld2VndW5nc21lbGRlcl0rJycrJ3N0YXR1cycsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgDQpdOw0KY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9Ow0KDQovL0UtTWFpbCBCZXdlZ3VuZ3NtZWxkZXIgTmFjaHJpY2h0ZW52ZXJzYW5kIGFubGVnZW4NCmlmIChCZXdlZ3VuZ3NtZWxkZXJfdmVyd2VuZGVuID09IHRydWUgJiYgRW1haWxfdmVyd2VuZGVuID09IHRydWUpew0KbGV0IHN0YXRlc1RvQ3JlYXRlID0gWw0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkJlbmFjaHJpY2h0aWd1bmdlbi5FTWFpbC5FVmVyc2FuZF8nK1tCZXdlZ3VuZ3NtZWxkZXJdKyd2ZXJzYW5kJywgeyduYW1lJzonRU1haWxfJytbQmV3ZWd1bmdzbWVsZGVyXSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5CZW5hY2hyaWNodGlndW5nZW4uRU1haWwuRVZlcnNhbmRfJytbQmV3ZWd1bmdzbWVsZGVyXSsnc3RhdHVzJywgeyduYW1lJzonRU1haWxfJytbQmV3ZWd1bmdzbWVsZGVyXSsnc3RhdHVzX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkVNYWlsICIrW0Jld2VndW5nc21lbGRlcl0rJycrJ3N0YXR1cycsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwNCl07DQpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07DQoNCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQovL0JhdHRlcmllbg0KLy9BbnNhZ2UgQnV0dG9uIEJhdHRlcmllbmFuc2FnZSBhbmxlZ2VuDQppZiAoQWxleGFfQW5zYWdlX3ZlcndlbmRlbiA9PSB0cnVlICYmIEJhdHRlcmllbl9TdGF0dXNfdmVyd2VuZGVuID09IHRydWUpew0KbGV0IHN0YXRlc1RvQ3JlYXRlID0gWw0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkFsZXhhX0Fuc2FnZW4uQW5zYWdlbi4nK1tCYXR0ZXJpZW5dKydzdGF0dXNhbnNhZ2UnLCB7J25hbWUnOiBbQmF0dGVyaWVuXSsnc3RhdHVzYW5zYWdlJywndHlwZSc6ICdib29sZWFuJywgJ3JlYWQnOiB0cnVlLCAnd3JpdGUnOiB0cnVlLCAncm9sZSc6ICdidXR0b24nLCdkZWYnOnRydWUsICJzbWFydE5hbWUiOiB7ImRlIjogJycrW0JhdHRlcmllbl0rJycrJ3N0YXR1c2Fuc2FnZScsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgDQpdOw0KY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9Ow0KDQovL0JhdHRlcmllbiBTdGF0dXMgemFlaGxlbiBEYXRlbnB1bmt0ZSBhbmxlZ2VuDQppZiAoQmF0dGVyaWVuX1N0YXR1c192ZXJ3ZW5kZW4gPT0gdHJ1ZSl7DQpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tCYXR0ZXJpZW5dKydfU3RhdHVzLkFuemFobF8nK1tCYXR0ZXJpZW5dKydfZ2VzYW10JywgeyduYW1lJzonQW56YWhsXycrW0JhdHRlcmllbl0rJ19nZXNhbXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tCYXR0ZXJpZW5dKycnLCAnZGVmJzowIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbQmF0dGVyaWVuXSsnX1N0YXR1cy5BbnphaGxfJytbQmF0dGVyaWVuXSsnX2FrdGl2JywgeyduYW1lJzonQW56YWhsXycrW0JhdHRlcmllbl0rJ19ha3RpdicsICd0eXBlJzonbnVtYmVyJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbnVtYmVyJywndW5pdCc6JycrW0JhdHRlcmllbl0rJycsICdkZWYnOjAgfV0sICAgIA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbQmF0dGVyaWVuXSsnX1N0YXR1cy5ha3RpdmVfJytbQmF0dGVyaWVuXSsnX0xpc3RlJywgeyduYW1lJzonYWt0aXZlXycrW0JhdHRlcmllbl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tCYXR0ZXJpZW5dKydfU3RhdHVzLmdlc2FtdGVfJytbQmF0dGVyaWVuXSsnX0xpc3RlJywgeyduYW1lJzonZ2VzYW10ZV8nK1tCYXR0ZXJpZW5dKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbQmF0dGVyaWVuXSsnX1N0YXR1cy5odG1sXycrW0JhdHRlcmllbl0rJ19MaXN0ZScsIHsnbmFtZSc6J2h0bWxfJytbQmF0dGVyaWVuXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLicrW0JhdHRlcmllbl0rJ19TdGF0dXMuYWt0aXZlXycrW0JhdHRlcmllbl0rJ19MaXN0ZV9taXRfRW1vamlzJywgeyduYW1lJzonYWt0aXZlXycrW0JhdHRlcmllbl0rJ19MaXN0ZV9taXRfRW1vamlzJywgJ3R5cGUnOidtaXhlZCcsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J21peGVkJywgJ2RlZic6J25vY2ggbGVlcicgfV0sICAgDQpdOw0KY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9Ow0KDQovL1RlbGVncmFtIEJhdHRlcmllbiBTdGF0dXMgTmFjaHJpY2h0ZW52ZXJzYW5kIGFubGVnZW4NCmlmIChCYXR0ZXJpZW5fU3RhdHVzX3ZlcndlbmRlbiA9PSB0cnVlICYmIFRlbGVncmFtX3ZlcndlbmRlbiA9PSB0cnVlKXsNCmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5CZW5hY2hyaWNodGlndW5nZW4uVGVsZWdyYW0uVFZlcnNhbmRfJytbQmF0dGVyaWVuXSsnc3RhdHVzdmVyc2FuZCcsIHsnbmFtZSc6J1RlbGVncmFtXycrW0JhdHRlcmllbl0rJ19WZXJzYW5kX2FuX2F1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQmVuYWNocmljaHRpZ3VuZ2VuLlRlbGVncmFtLlRWZXJzYW5kXycrW0JhdHRlcmllbl0rJ3N0YXR1cycsIHsnbmFtZSc6J1RlbGVncmFtXycrW0JhdHRlcmllbl0rJ3N0YXR1c19zZW5kZW4nLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2J1dHRvbicsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJUZWxlZ3JhbSAiK1tCYXR0ZXJpZW5dKycnKydzdGF0dXMnLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIA0KXTsNCmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsNCg0KLy9FLU1haWwgQmF0dGVyaWVuIFN0YXR1cyBOYWNocmljaHRlbnZlcnNhbmQgYW5sZWdlbg0KaWYgKEJhdHRlcmllbl9TdGF0dXNfdmVyd2VuZGVuID09IHRydWUgJiYgRW1haWxfdmVyd2VuZGVuID09IHRydWUpew0KbGV0IHN0YXRlc1RvQ3JlYXRlID0gWw0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkJlbmFjaHJpY2h0aWd1bmdlbi5FTWFpbC5FVmVyc2FuZF8nK1tCYXR0ZXJpZW5dKydzdGF0dXN2ZXJzYW5kJywgeyduYW1lJzonRU1haWxfJytbQmF0dGVyaWVuXSsnX1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5CZW5hY2hyaWNodGlndW5nZW4uRU1haWwuRVZlcnNhbmRfJytbQmF0dGVyaWVuXSsnc3RhdHVzJywgeyduYW1lJzonRU1haWxfJytbQmF0dGVyaWVuXSsnc3RhdHVzX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkVNYWlsICIrW0JhdHRlcmllbl0rJycrJ3N0YXR1cycsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwNCl07DQpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07DQoNCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KLy9CYXR0ZXJpZW4gVm9sdA0KLy9BbnNhZ2UgQnV0dG9uIEJhdHRlcmllbmFuc2FnZSBWb2x0IGFubGVnZW4NCmlmIChBbGV4YV9BbnNhZ2VfdmVyd2VuZGVuID09IHRydWUgJiYgQmF0dGVyaWVuX3ZvbHRfdmVyd2VuZGVuID09IHRydWUpew0KbGV0IHN0YXRlc1RvQ3JlYXRlID0gWw0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkFsZXhhX0Fuc2FnZW4uQW5zYWdlbi4nK1tCYXR0ZXJpZW5dKyd2b2x0YW5zYWdlJywgeyduYW1lJzogW0JhdHRlcmllbl0rJ3ZvbHRhbnNhZ2UnLCd0eXBlJzogJ2Jvb2xlYW4nLCAncmVhZCc6IHRydWUsICd3cml0ZSc6IHRydWUsICdyb2xlJzogJ2J1dHRvbicsJ2RlZic6dHJ1ZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAnJytbQmF0dGVyaWVuXSsnJysndm9sdGFuc2FnZScsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwgDQpdOw0KY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9Ow0KDQovL0JhdHRlcmllbiB2b2x0IHphZWhsZW4gRGF0ZW5wdW5rdGUgYW5sZWdlbg0KaWYgKEJhdHRlcmllbl92b2x0X3ZlcndlbmRlbiA9PSB0cnVlKXsNCmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLicrW0JhdHRlcmllbl0rJ19Wb2x0LkFuemFobF8nK1tCYXR0ZXJpZW5dKydfZ2VzYW10JywgeyduYW1lJzonQW56YWhsXycrW0JhdHRlcmllbl0rJ19nZXNhbXQnLCAndHlwZSc6J251bWJlcicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J251bWJlcicsJ3VuaXQnOicnK1tCYXR0ZXJpZW5dKycnLCAnZGVmJzowIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbQmF0dGVyaWVuXSsnX1ZvbHQuZ2VzYW10ZV8nK1tCYXR0ZXJpZW5dKydfTGlzdGUnLCB7J25hbWUnOidnZXNhbXRlXycrW0JhdHRlcmllbl0rJ19MaXN0ZScsICd0eXBlJzonc3RyaW5nJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonc3RyaW5nJywgJ2RlZic6J25vY2ggbGVlcicgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuR2VyYWV0ZS4nK1tCYXR0ZXJpZW5dKydfVm9sdC5odG1sXycrW0JhdHRlcmllbl0rJ19MaXN0ZScsIHsnbmFtZSc6J2h0bWxfJytbQmF0dGVyaWVuXSsnX0xpc3RlJywgJ3R5cGUnOidzdHJpbmcnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidzdHJpbmcnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLicrW0JhdHRlcmllbl0rJ19Wb2x0LmFrdGl2ZV8nK1tCYXR0ZXJpZW5dKydfTGlzdGVfbWl0X0Vtb2ppcycsIHsnbmFtZSc6J2FrdGl2ZV8nK1tCYXR0ZXJpZW5dKydfTGlzdGVfbWl0X0Vtb2ppcycsICd0eXBlJzonbWl4ZWQnLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzpmYWxzZSwgJ3JvbGUnOidtaXhlZCcsICdkZWYnOidub2NoIGxlZXInIH1dLCAgIA0KXTsNCmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsNCg0KLy9UZWxlZ3JhbSBCYXR0ZXJpZW4gdm9sdCBOYWNocmljaHRlbnZlcnNhbmQgYW5sZWdlbg0KaWYgKEJhdHRlcmllbl92b2x0X3ZlcndlbmRlbiA9PSB0cnVlICYmIFRlbGVncmFtX3ZlcndlbmRlbiA9PSB0cnVlKXsNCmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5CZW5hY2hyaWNodGlndW5nZW4uVGVsZWdyYW0uVFZlcnNhbmRfJytbQmF0dGVyaWVuXSsndm9sdHZlcnNhbmQnLCB7J25hbWUnOidUZWxlZ3JhbV8nK1tCYXR0ZXJpZW5dKydfVm9sdF9WZXJzYW5kX2FuX2F1cycsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonc3dpdGNoJywgJ2RlZic6ZmFsc2UgfV0sDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQmVuYWNocmljaHRpZ3VuZ2VuLlRlbGVncmFtLlRWZXJzYW5kXycrW0JhdHRlcmllbl0rJ3ZvbHRzdGF0dXMnLCB7J25hbWUnOidUZWxlZ3JhbV8nK1tCYXR0ZXJpZW5dKydWb2x0X3N0YXR1c19zZW5kZW4nLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J2J1dHRvbicsICdkZWYnOmZhbHNlLCAic21hcnROYW1lIjogeyJkZSI6ICJUZWxlZ3JhbSAiK1tCYXR0ZXJpZW5dKycnKyd2b2x0c3RhdHVzJywic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLCANCl07DQpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07DQoNCi8vRS1NYWlsIEJhdHRlcmllbiB2b2x0IE5hY2hyaWNodGVudmVyc2FuZCBhbmxlZ2VuDQppZiAoQmF0dGVyaWVuX3ZvbHRfdmVyd2VuZGVuID09IHRydWUgJiYgRW1haWxfdmVyd2VuZGVuID09IHRydWUpew0KbGV0IHN0YXRlc1RvQ3JlYXRlID0gWw0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkJlbmFjaHJpY2h0aWd1bmdlbi5FTWFpbC5FVmVyc2FuZF8nK1tCYXR0ZXJpZW5dKyd2b2x0dmVyc2FuZCcsIHsnbmFtZSc6J0VNYWlsXycrW0JhdHRlcmllbl0rJ19Wb2x0X1ZlcnNhbmRfYW5fYXVzJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOidzd2l0Y2gnLCAnZGVmJzpmYWxzZSB9XSwNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5CZW5hY2hyaWNodGlndW5nZW4uRU1haWwuRVZlcnNhbmRfJytbQmF0dGVyaWVuXSsndm9sdHN0YXR1cycsIHsnbmFtZSc6J0VNYWlsXycrW0JhdHRlcmllbl0rJ1ZvbHRfc3RhdHVzX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkVNYWlsICIrW0JhdHRlcmllbl0rJycrJ3ZvbHRzdGF0dXMnLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sDQpdOw0KY3JlYXRlVXNlclN0YXRlcyhhbmxlZ2VuX2luLGZhbHNlLCBzdGF0ZXNUb0NyZWF0ZSl9Ow0KDQovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCi8vVGVtcGVyYXR1cmVuDQovL0Fuc2FnZSBCdXR0b24gVGVtcGVyYXR1cmVuYW5zYWdlIGFubGVnZW4NCmlmIChBbGV4YV9BbnNhZ2VfdmVyd2VuZGVuID09IHRydWUgJiYgVGVtcGVyYXR1cmVuX3ZlcndlbmRlbiA9PSB0cnVlKXsNCmxldCBzdGF0ZXNUb0NyZWF0ZSA9IFsNCiAgICBbJ0VpZ2VuZV9EYXRlbnB1bmt0ZS5BbGV4YV9BbnNhZ2VuLkFuc2FnZW4uJytbVGVtcGVyYXR1cmVuXSsnYW5zYWdlJywgeyduYW1lJzogW1RlbXBlcmF0dXJlbl0rJ2Fuc2FnZScsJ3R5cGUnOiAnYm9vbGVhbicsICdyZWFkJzogdHJ1ZSwgJ3dyaXRlJzogdHJ1ZSwgJ3JvbGUnOiAnYnV0dG9uJywnZGVmJzp0cnVlLCAic21hcnROYW1lIjogeyJkZSI6ICcnK1tUZW1wZXJhdHVyZW5dKycnKydhbnNhZ2UnLCJzbWFydFR5cGUiOiAiU1dJVENIIn0gfV0sIA0KXTsNCmNyZWF0ZVVzZXJTdGF0ZXMoYW5sZWdlbl9pbixmYWxzZSwgc3RhdGVzVG9DcmVhdGUpfTsNCg0KLy9UZW1wZXJhdHVyZW4gIERhdGVucHVua3RlIGFubGVnZW4NCmlmIChUZW1wZXJhdHVyZW5fdmVyd2VuZGVuID09IHRydWUpew0KbGV0IHN0YXRlc1RvQ3JlYXRlID0gWw0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbVGVtcGVyYXR1cmVuXSsnLmdlc2FtdGVfJytbVGVtcGVyYXR1cmVuXSsnX0xpc3RlJywgeyduYW1lJzonZ2VzYW10ZV8nK1tUZW1wZXJhdHVyZW5dKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbVGVtcGVyYXR1cmVuXSsnLmh0bWxfJytbVGVtcGVyYXR1cmVuXSsnX0xpc3RlJywgeyduYW1lJzonaHRtbF8nK1tUZW1wZXJhdHVyZW5dKydfTGlzdGUnLCAndHlwZSc6J3N0cmluZycsICdyZWFkJzp0cnVlLCAnd3JpdGUnOmZhbHNlLCAncm9sZSc6J3N0cmluZycsICdkZWYnOidub2NoIGxlZXInIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuJytbVGVtcGVyYXR1cmVuXSsnLmFrdGl2ZV8nK1tUZW1wZXJhdHVyZW5dKydfTGlzdGVfbWl0X0Vtb2ppcycsIHsnbmFtZSc6J2FrdGl2ZV8nICtbVGVtcGVyYXR1cmVuXSsnX0xpc3RlX21pdF9FbW9qaXMnLCAndHlwZSc6J21peGVkJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6ZmFsc2UsICdyb2xlJzonbWl4ZWQnLCAnZGVmJzonbm9jaCBsZWVyJyB9XSwgICANCl07DQpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07DQoNCi8vVGVsZWdyYW0gVGVtcGVyYXR1cmVuICBOYWNocmljaHRlbnZlcnNhbmQgYW5sZWdlbg0KaWYgKFRlbXBlcmF0dXJlbl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBUZWxlZ3JhbV92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7DQpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQmVuYWNocmljaHRpZ3VuZ2VuLlRlbGVncmFtLlRWZXJzYW5kXycrW1RlbXBlcmF0dXJlbl0rJ3ZlcnNhbmQnLCB7J25hbWUnOidUZWxlZ3JhbV8nK1tUZW1wZXJhdHVyZW5dKydfVmVyc2FuZF9hbl9hdXMnLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkJlbmFjaHJpY2h0aWd1bmdlbi5UZWxlZ3JhbS5UVmVyc2FuZF8nK1tUZW1wZXJhdHVyZW5dKydzdGF0dXMnLCB7J25hbWUnOidUZWxlZ3JhbV8nK1tUZW1wZXJhdHVyZW5dKydzdGF0dXNfc2VuZGVuJywgJ3R5cGUnOidib29sZWFuJywgJ3JlYWQnOnRydWUsICd3cml0ZSc6dHJ1ZSwgJ3JvbGUnOididXR0b24nLCAnZGVmJzpmYWxzZSwgInNtYXJ0TmFtZSI6IHsiZGUiOiAiVGVsZWdyYW0gIitbVGVtcGVyYXR1cmVuXSsnJysnc3RhdHVzJywic21hcnRUeXBlIjogIlNXSVRDSCJ9IH1dLCANCl07DQpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07DQoNCi8vRS1NYWlsIFRlbXBlcmF0dXJlbiBOYWNocmljaHRlbnZlcnNhbmQgYW5sZWdlbg0KaWYgKFRlbXBlcmF0dXJlbl92ZXJ3ZW5kZW4gPT0gdHJ1ZSAmJiBFbWFpbF92ZXJ3ZW5kZW4gPT0gdHJ1ZSl7DQpsZXQgc3RhdGVzVG9DcmVhdGUgPSBbDQogICAgWydFaWdlbmVfRGF0ZW5wdW5rdGUuQmVuYWNocmljaHRpZ3VuZ2VuLkVNYWlsLkVWZXJzYW5kXycrW1RlbXBlcmF0dXJlbl0rJ3ZlcnNhbmQnLCB7J25hbWUnOidFTWFpbF8nK1tUZW1wZXJhdHVyZW5dKydfVmVyc2FuZF9hbl9hdXMnLCAndHlwZSc6J2Jvb2xlYW4nLCAncmVhZCc6dHJ1ZSwgJ3dyaXRlJzp0cnVlLCAncm9sZSc6J3N3aXRjaCcsICdkZWYnOmZhbHNlIH1dLA0KICAgIFsnRWlnZW5lX0RhdGVucHVua3RlLkJlbmFjaHJpY2h0aWd1bmdlbi5FTWFpbC5FVmVyc2FuZF8nK1tUZW1wZXJhdHVyZW5dKydzdGF0dXMnLCB7J25hbWUnOidFTWFpbF8nK1tUZW1wZXJhdHVyZW5dKydfc3RhdHVzX3NlbmRlbicsICd0eXBlJzonYm9vbGVhbicsICdyZWFkJzp0cnVlLCAnd3JpdGUnOnRydWUsICdyb2xlJzonYnV0dG9uJywgJ2RlZic6ZmFsc2UsICJzbWFydE5hbWUiOiB7ImRlIjogIkVNYWlsICIrW1RlbXBlcmF0dXJlbl0rJycrJ3N0YXR1cycsInNtYXJ0VHlwZSI6ICJTV0lUQ0gifSB9XSwNCl07DQpjcmVhdGVVc2VyU3RhdGVzKGFubGVnZW5faW4sZmFsc2UsIHN0YXRlc1RvQ3JlYXRlKX07DQoNCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQovL0FiIGhpZXIgRGF0ZW5wdW5rdGUgbMO2c2NoZW4NCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQovKmlmICghQWxleGFfQW5zYWdlX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsNCmNvbnN0IGlkc2pzID0gJCgnamF2YXNjcmlwdC4qLiouU3RpbW1lbi4qJyk7ICANCmlkc2pzLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsNCiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQuc3Vic3RyaW5nKDEzKSk7DQp9KX07DQoNCmlmICghQWxleGFfQW5zYWdlX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsNCmNvbnN0IGlkc3VkID0gJCgnMF91c2VyZGF0YS4wLiouKi5TdGltbWVuLionKTsgIA0KaWRzdWQuZWFjaChmdW5jdGlvbihpZCwgaSkgew0KICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZCk7DQp9KX07DQoNCiovDQoNCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQppZiAoIUFsZXhhX0Fuc2FnZV92ZXJ3ZW5kZW4gJiYgYW5sZWdlbl9pbi5zbGljZSgwLCAxMCkgPT0gJ2phdmFzY3JpcHQnKSB7DQpjb25zdCBpZHNqcyA9ICQoJ2phdmFzY3JpcHQuKi4qLkFuc2FnZW4nKTsgIA0KaWRzanMuZWFjaChmdW5jdGlvbihpZCwgaSkgew0KICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZC5zdWJzdHJpbmcoMTMpKTsNCn0pfTsNCg0KaWYgKCFBbGV4YV9BbnNhZ2VfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICcwX3VzZXJkYXRhJykgew0KY29uc3QgaWRzdWQgPSAkKCcwX3VzZXJkYXRhLjAuKi4qLkFuc2FnZW4nKTsgIA0KaWRzdWQuZWFjaChmdW5jdGlvbihpZCwgaSkgew0KICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZCk7DQp9KX07DQoNCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQppZiAoIVRlbGVncmFtX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsNCmNvbnN0IGlkc2pzID0gJCgnamF2YXNjcmlwdC4qLiouVGVsZWdyYW0qJyk7IA0KaWRzanMuZWFjaChmdW5jdGlvbihpZCwgaSkgew0KICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZC5zdWJzdHJpbmcoMTMpKTsNCn0pfTsNCg0KaWYgKCFUZWxlZ3JhbV92ZXJ3ZW5kZW4gJiYgYW5sZWdlbl9pbi5zbGljZSgwLCAxMCkgPT0gJzBfdXNlcmRhdGEnKSB7DQpjb25zdCBpZHN1ZCA9ICQoJzBfdXNlcmRhdGEuMC4qLiouVGVsZWdyYW0qJyk7IA0KaWRzdWQuZWFjaChmdW5jdGlvbihpZCwgaSkgew0KICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZCk7DQp9KX07DQoNCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQppZiAoIUVtYWlsX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsNCmNvbnN0IGlkc2pzID0gJCgnamF2YXNjcmlwdC4qLiouRU1haWwqJyk7IA0KaWRzanMuZWFjaChmdW5jdGlvbihpZCwgaSkgew0KICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZC5zdWJzdHJpbmcoMTMpKTsNCn0pfTsNCg0KaWYgKCFFbWFpbF92ZXJ3ZW5kZW4gJiYgYW5sZWdlbl9pbi5zbGljZSgwLCAxMCkgPT0gJzBfdXNlcmRhdGEnKSB7DQpjb25zdCBpZHN1ZCA9ICQoJzBfdXNlcmRhdGEuMC4qLiouRU1haWwqJyk7IA0KaWRzdWQuZWFjaChmdW5jdGlvbihpZCwgaSkgew0KICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZCk7DQp9KX07DQoNCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQppZiAoIUZlbnN0ZXJfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICdqYXZhc2NyaXB0Jykgew0KY29uc3QgaWRzanMgPSAkKCdqYXZhc2NyaXB0LiouKi5GZW5zdGVyLionKTsgDQppZHNqcy5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7DQogICBpZihleGlzdHNTdGF0ZShpZCkpIGRlbGV0ZVN0YXRlKGlkLnN1YnN0cmluZygxMykpOw0KfSl9Ow0KDQppZiAoIUZlbnN0ZXJfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICcwX3VzZXJkYXRhJykgew0KY29uc3QgaWRzdWQgPSAkKCcwX3VzZXJkYXRhLjAuKi4qLkZlbnN0ZXIuKicpOyANCmlkc3VkLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsNCiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQpOw0KfSl9Ow0KDQovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KaWYgKCFUdWVyZW5fdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICdqYXZhc2NyaXB0Jykgew0KY29uc3QgaWRzanMgPSAkKCdqYXZhc2NyaXB0LiouKi5UdWVyZW4uKicpOyANCmlkc2pzLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsNCiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQuc3Vic3RyaW5nKDEzKSk7DQp9KX07DQoNCmlmICghVHVlcmVuX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsNCmNvbnN0IGlkc3VkID0gJCgnMF91c2VyZGF0YS4wLiouKi5UdWVyZW4uKicpOyANCmlkc3VkLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsNCiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQpOw0KfSl9Ow0KDQovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KaWYgKCFTdGVja2Rvc2VuX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsNCmNvbnN0IGlkc2pzID0gJCgnamF2YXNjcmlwdC4qLiouU3RlY2tkb3Nlbi4qJyk7IA0KaWRzanMuZWFjaChmdW5jdGlvbihpZCwgaSkgew0KICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZC5zdWJzdHJpbmcoMTMpKTsNCn0pfTsNCg0KaWYgKCFTdGVja2Rvc2VuX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsNCmNvbnN0IGlkc3VkID0gJCgnMF91c2VyZGF0YS4wLiouKi5TdGVja2Rvc2VuLionKTsgDQppZHN1ZC5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7DQogICBpZihleGlzdHNTdGF0ZShpZCkpIGRlbGV0ZVN0YXRlKGlkKTsNCn0pfTsNCg0KLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCmlmICghTGljaHRlcl92ZXJ3ZW5kZW4gJiYgYW5sZWdlbl9pbi5zbGljZSgwLCAxMCkgPT0gJ2phdmFzY3JpcHQnKSB7DQpjb25zdCBpZHNqcyA9ICQoJ2phdmFzY3JpcHQuKi4qLkxpY2h0ZXIuKicpOyANCmlkc2pzLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsNCiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQuc3Vic3RyaW5nKDEzKSk7DQp9KX07DQoNCmlmICghTGljaHRlcl92ZXJ3ZW5kZW4gJiYgYW5sZWdlbl9pbi5zbGljZSgwLCAxMCkgPT0gJzBfdXNlcmRhdGEnKSB7DQpjb25zdCBpZHN1ZCA9ICQoJzBfdXNlcmRhdGEuMC4qLiouTGljaHRlci4qJyk7IA0KaWRzdWQuZWFjaChmdW5jdGlvbihpZCwgaSkgew0KICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZCk7DQp9KX07DQoNCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQppZiAoIUJld2VndW5nc21lbGRlcl92ZXJ3ZW5kZW4gJiYgYW5sZWdlbl9pbi5zbGljZSgwLCAxMCkgPT0gJ2phdmFzY3JpcHQnKSB7DQpjb25zdCBpZHNqcyA9ICQoJ2phdmFzY3JpcHQuKi4qLkJld2VndW5nc21lbGRlci4qJyk7IA0KaWRzanMuZWFjaChmdW5jdGlvbihpZCwgaSkgew0KICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZC5zdWJzdHJpbmcoMTMpKTsNCn0pfTsNCg0KaWYgKCFCZXdlZ3VuZ3NtZWxkZXJfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICcwX3VzZXJkYXRhJykgew0KY29uc3QgaWRzdWQgPSAkKCcwX3VzZXJkYXRhLjAuKi4qLkJld2VndW5nc21lbGRlci4qJyk7IA0KaWRzdWQuZWFjaChmdW5jdGlvbihpZCwgaSkgew0KICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZCk7DQp9KX07DQoNCi8vIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQppZiAoIUJhdHRlcmllbl9TdGF0dXNfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICdqYXZhc2NyaXB0Jykgew0KY29uc3QgaWRzanMgPSAkKCdqYXZhc2NyaXB0LipHZXJhZXRlLkJhdHRlcmllbl9TdGF0dXMuKicpOw0KaWRzanMuZWFjaChmdW5jdGlvbihpZCwgaSkgew0KICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZC5zdWJzdHJpbmcoMTMpKTsNCn0pfTsNCg0KaWYgKCFCYXR0ZXJpZW5fU3RhdHVzX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsNCmNvbnN0IGlkc3VkID0gJCgnMF91c2VyZGF0YS4wLkVpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLkJhdHRlcmllbl9TdGF0dXMuKicpOw0KaWRzdWQuZWFjaChmdW5jdGlvbihpZCwgaSkgew0KICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZCk7DQp9KX07DQovLyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KaWYgKCFCYXR0ZXJpZW5fdm9sdF92ZXJ3ZW5kZW4gJiYgYW5sZWdlbl9pbi5zbGljZSgwLCAxMCkgPT0gJ2phdmFzY3JpcHQnKSB7DQpjb25zdCBpZHNqcyA9ICQoJ2phdmFzY3JpcHQuKi5HZXJhZXRlLkJhdHRlcmllbl9Wb2x0LionKTsNCmlkc2pzLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsNCiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQuc3Vic3RyaW5nKDEzKSk7DQp9KX07DQoNCmlmICghQmF0dGVyaWVuX3ZvbHRfdmVyd2VuZGVuICYmIGFubGVnZW5faW4uc2xpY2UoMCwgMTApID09ICcwX3VzZXJkYXRhJykgew0KY29uc3QgaWRzdWQgPSAkKCcwX3VzZXJkYXRhLjAuRWlnZW5lX0RhdGVucHVua3RlLkdlcmFldGUuQmF0dGVyaWVuX1ZvbHQuKicpOw0KaWRzdWQuZWFjaChmdW5jdGlvbihpZCwgaSkgew0KICAgaWYoZXhpc3RzU3RhdGUoaWQpKSBkZWxldGVTdGF0ZShpZCk7DQp9KX07DQoNCg0KLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCmlmICghVGVtcGVyYXR1cmVuX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnamF2YXNjcmlwdCcpIHsNCmNvbnN0IGlkc2pzID0gJCgnamF2YXNjcmlwdC4qLkdlcmFldGUuVGVtcGVyYXR1cmVuLionKTsNCmlkc2pzLmVhY2goZnVuY3Rpb24oaWQsIGkpIHsNCiAgIGlmKGV4aXN0c1N0YXRlKGlkKSkgZGVsZXRlU3RhdGUoaWQuc3Vic3RyaW5nKDEzKSk7DQp9KX07DQoNCmlmICghVGVtcGVyYXR1cmVuX3ZlcndlbmRlbiAmJiBhbmxlZ2VuX2luLnNsaWNlKDAsIDEwKSA9PSAnMF91c2VyZGF0YScpIHsNCmNvbnN0IGlkc3VkID0gJCgnMF91c2VyZGF0YS4wLkVpZ2VuZV9EYXRlbnB1bmt0ZS5HZXJhZXRlLlRlbXBlcmF0dXJlbi4qJyk7DQppZHN1ZC5lYWNoKGZ1bmN0aW9uKGlkLCBpKSB7DQogICBpZihleGlzdHNTdGF0ZShpZCkpIGRlbGV0ZVN0YXRlKGlkKTsNCn0pfTsNCg0KLy8jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoNCi8vRnVua3Rpb24gbWFpbiBtaXQgVmVyesO2Z2VydW5nIGF1ZnJ1ZmVuDQp0aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7DQogIG1haW4oKTsNCn0sIDUwMDApOw0KLy9tYWluKCk7DQoNCg== Beschreibe diese Funktion … Tueren_alexa2_adapter_instanz_1 Beschreibe diese Funktion … alexa_instanz_1 alexa2.1.History.serialNumber any default alexa_instanz_1 angesprochener_echo_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume any default Ansage_Button_Tueren_eDP AND EQ angesprochener_echo_instanz_1 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_1_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_1_neu TRUE EQ val Anzahl_Tueren_geoeffnet_und_gekippt_gesamt_eDP 0 Ansage_Einleitungssatz_Tueren , alle Tueren sind geschlossen. NEQ val Anzahl_Tueren_geoeffnet_und_gekippt_gesamt_eDP 0 Ansage_Einleitungssatz_Tueren val offene_gekippte_Tueren_Liste_eDP , alle anderen Tueren sind geschlossen. 0 log Logmeldung_Tueren_Ansage FIRST FROM_END angesprochener_echo_instanz_1_neu 15 ausgefΓΌhrt βœ… Fenster_vor_versand_pruefen Beschreibe diese Funktion … gekippt gekippt emoji_πŸ‘ˆ geoffnet geΓΆffnet emoji_☝️ uebnerschrift_nachrichten_Fenster emoji_πŸ₯… * etage Fenster status * \n timeout6 timeout6 1000 ms AND EQ val Anzahl_Fenster_offen_eDP 1 EQ val Anzahl_Fenster_gekippt_eDP 0 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es ist ein Fenster geoffnet \n \n TEXT 1 liste_fenster_offen \n AND EQ val Anzahl_Fenster_offen_eDP 0 EQ val Anzahl_Fenster_gekippt_eDP 1 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es ist ein Fenster gekippt \n \n TEXT 1 liste_fenster_gekippt \n AND EQ val Anzahl_Fenster_offen_eDP 1 EQ val Anzahl_Fenster_gekippt_eDP 1 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es ist ein Fenster geoffnet \n Es ist ein Fenster gekippt \n \n TEXT 1 liste_fenster_offen \n \n TEXT 1 liste_fenster_gekippt \n AND EQ val Anzahl_Fenster_offen_eDP 0 GT val Anzahl_Fenster_gekippt_eDP 1 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es sind val Anzahl_Fenster_gekippt_eDP Fenster gekippt \n \n TEXT 1 liste_fenster_gekippt \n AND GT val Anzahl_Fenster_offen_eDP 1 EQ val Anzahl_Fenster_gekippt_eDP 0 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es sind val Anzahl_Fenster_offen_eDP Fenster geoffnet \n \n TEXT 1 liste_fenster_offen \n AND GT val Anzahl_Fenster_offen_eDP 1 EQ val Anzahl_Fenster_gekippt_eDP 1 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es sind val Anzahl_Fenster_offen_eDP Fenster geoffnet \n Es ist ein Fenster gekippt \n \n TEXT 1 liste_fenster_offen \n \n TEXT 1 liste_fenster_gekippt \n AND EQ val Anzahl_Fenster_offen_eDP 1 GT val Anzahl_Fenster_gekippt_eDP 1 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es ist ein Fenster geoffnet \n Es sind val Anzahl_Fenster_gekippt_eDP Fenster gekippt \n \n TEXT 1 liste_fenster_offen \n \n TEXT 1 liste_fenster_gekippt \n AND GT val Anzahl_Fenster_offen_eDP 1 GT val Anzahl_Fenster_gekippt_eDP 1 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Es sind val Anzahl_Fenster_offen_eDP Fenster geoffnet \n Es sind val Anzahl_Fenster_gekippt_eDP Fenster gekippt \n \n TEXT 1 liste_fenster_offen \n \n TEXT 1 liste_fenster_gekippt \n AND EQ val Anzahl_Fenster_offen_eDP 0 EQ val Anzahl_Fenster_gekippt_eDP 0 nachrichten_ausgabe_Fenster uebnerschrift_nachrichten_Fenster Alle Fenster sind geschlossen emoji_βœ… true FALSE Object ID offene_gekippte_Fenster_Liste_emojis_eDP TRUE nachrichten_ausgabe_Fenster 0 Temperaturen_alexa2_adapter_instanz_0 Beschreibe diese Funktion … alexa_instanz_0 alexa2.0.History.serialNumber any default alexa_instanz_0 angesprochener_echo_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0 AND EQ FIRST FROM_START alexa_instanz_0 8 alexa2.0 FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume angesprochener_echo_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak speak_volume_instanz_0_neu FIRST FROM_START alexa_instanz_0 8 .Echo-Devices. val alexa_instanz_0 .Commands.speak-volume any default Ansage_Button_Temperaturen_eDP AND EQ angesprochener_echo_instanz_0 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_0_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_0_neu TRUE Ansage_Einleitungssatz_Temperaturen val gesamte_Temperaturen_Liste_eDP , das wΓ€re dann alles. 0 log Logmeldung_Temperaturen_Ansage FIRST FROM_END angesprochener_echo_instanz_0_neu 15 ausgefΓΌhrt βœ… Fenster_zaehlen Beschreibe diese Funktion … anzahl_fenster_gekippt 0 anzahl_fenster_offen 0 anzahl_fenster_geschlossen 0 anzahl_fenster_gesamt 0 liste_fenster_offen liste_fenster_gekippt liste_fenster_geschlossen liste_fenster_offen_gesamt liste_fenster_offen_html liste_fenster_gekippt_html liste_fenster_geschlossen_html htmlText <!DOCTYPE html><html lang="de"><head><title> Fenster </title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body> <p style="color:#0000FF; font-family:Helvetica; font-weight: bold"> Fenster status etage </p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γ„nderung: custom TT.MM.JJJJ SS:mm:ss </p> <table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);"> <tr style="color:#0000FF"; font-weight: bold"><td> Fenster etage &ensp;&ensp;&ensp;</td><td>Status</td></tr> <tr><td> fenster_offen selektor_Fenster anzahl_fenster_gesamt 1 wert val fenster_offen OR EQ fenster_offen wert geΓΆffnet EQ fenster_offen wert TRUE anzahl_fenster_offen 1 INSERT LAST liste_fenster_offen fenster_offen geΓΆffnet INSERT LAST liste_fenster_offen_html fenster_offen <td><span style="color:#FF0000"> geΓΆffnet </span> fenster_gekippt selektor_Fenster wert val fenster_gekippt EQ fenster_gekippt wert gekippt anzahl_fenster_gekippt 1 INSERT LAST liste_fenster_gekippt fenster_gekippt gekippt INSERT LAST liste_fenster_gekippt_html fenster_gekippt <td><span style="color:#0000FF"> gekippt </span> fenster_geschlossen selektor_Fenster wert val fenster_geschlossen OR EQ fenster_geschlossen wert geschlossen EQ fenster_geschlossen wert FALSE anzahl_fenster_geschlossen 1 INSERT LAST liste_fenster_geschlossen fenster_geschlossen geschlossen INSERT LAST liste_fenster_geschlossen_html fenster_geschlossen <td>geschlossen true FALSE Object ID Anzahl_Fenster_gekippt_eDP TRUE anzahl_fenster_gekippt 0 true FALSE Object ID Anzahl_Fenster_offen_eDP TRUE anzahl_fenster_offen 0 true FALSE Object ID Anzahl_Fenster_geschlossen_eDP TRUE anzahl_fenster_geschlossen 0 true FALSE Object ID Anzahl_Fenster_gesamt_eDP TRUE anzahl_fenster_gesamt 0 true FALSE Object ID Anzahl_Fenster_geoeffnet_und_gekippt_gesamt_eDP TRUE ADD 1 anzahl_fenster_gekippt 1 anzahl_fenster_offen 0 AND EQ anzahl_fenster_offen 0 EQ anzahl_fenster_gekippt 0 true FALSE Object ID offene_gekippte_Fenster_Liste_eDP TRUE Alle Fenster sind geschlossen. 0 true FALSE Object ID offene_gekippte_Fenster_Liste_eDP TRUE GT ADD 1 abc TEXT 1 liste_fenster_offen ; ; TEXT 1 liste_fenster_gekippt ; 1 abc Ansage_Einleitungssatz_Fenster , alle anderen Fenster sind geschlossen. 250 AND NEQ anzahl_fenster_offen 0 NEQ anzahl_fenster_gekippt 0 TEXT 1 liste_fenster_offen ; ; TEXT 1 liste_fenster_gekippt ; AND EQ anzahl_fenster_offen 0 NEQ anzahl_fenster_gekippt 0 TEXT 1 liste_fenster_gekippt ; AND NEQ anzahl_fenster_offen 0 EQ anzahl_fenster_gekippt 0 TEXT 1 liste_fenster_offen ; AND NEQ anzahl_fenster_offen 0 NEQ anzahl_fenster_gekippt 0 TEXT 1 liste_fenster_offen , , TEXT 1 liste_fenster_gekippt , AND EQ anzahl_fenster_offen 0 NEQ anzahl_fenster_gekippt 0 TEXT 1 liste_fenster_gekippt , AND NEQ anzahl_fenster_offen 0 EQ anzahl_fenster_gekippt 0 TEXT 1 liste_fenster_offen , 0 true FALSE Object ID gesamte_Fenster_Liste_eDP TRUE AND EQ anzahl_fenster_gekippt 0 EQ anzahl_fenster_offen 0 TEXT 1 liste_fenster_geschlossen , EQ anzahl_fenster_gesamt anzahl_fenster_offen TEXT 1 liste_fenster_offen , EQ anzahl_fenster_gesamt anzahl_fenster_gekippt TEXT 1 liste_fenster_gekippt , AND GT anzahl_fenster_offen 0 AND LT anzahl_fenster_offen anzahl_fenster_gesamt EQ anzahl_fenster_gekippt 0 TEXT 1 liste_fenster_offen , , TEXT 1 liste_fenster_geschlossen , AND GT anzahl_fenster_gekippt 0 AND LT anzahl_fenster_gekippt anzahl_fenster_gesamt EQ anzahl_fenster_offen 0 TEXT 1 liste_fenster_gekippt , , TEXT 1 liste_fenster_geschlossen , AND LT ADD 1 anzahl_fenster_gekippt 1 anzahl_fenster_offen anzahl_fenster_gesamt AND GT anzahl_fenster_gekippt 0 GT anzahl_fenster_gekippt 0 TEXT 1 liste_fenster_offen , , TEXT 1 liste_fenster_gekippt , , TEXT 1 liste_fenster_geschlossen , AND LT anzahl_fenster_gekippt anzahl_fenster_gesamt AND LT anzahl_fenster_offen anzahl_fenster_gesamt AND AND GT anzahl_fenster_gekippt 0 GT anzahl_fenster_offen 0 EQ ADD 1 anzahl_fenster_gekippt 1 anzahl_fenster_offen anzahl_fenster_gesamt TEXT 1 liste_fenster_offen , , TEXT 1 liste_fenster_gekippt , 0 true FALSE Object ID Liste_Fenster_html_eDP TRUE AND EQ anzahl_fenster_gekippt 0 EQ anzahl_fenster_offen 0 htmlText TEXT 1 liste_fenster_geschlossen_html <tr><td> </table></body> EQ anzahl_fenster_gesamt anzahl_fenster_offen htmlText TEXT 1 liste_fenster_offen_html <tr><td> </table></body> EQ anzahl_fenster_gesamt anzahl_fenster_gekippt htmlText TEXT 1 liste_fenster_gekippt_html <tr><td> </table></body> AND GT anzahl_fenster_offen 0 AND LT anzahl_fenster_offen anzahl_fenster_gesamt EQ anzahl_fenster_gekippt 0 htmlText TEXT 1 liste_fenster_offen_html <tr><td> <tr><td> TEXT 1 liste_fenster_geschlossen_html <tr><td> </table></body> AND GT anzahl_fenster_gekippt 0 AND LT anzahl_fenster_gekippt anzahl_fenster_gesamt EQ anzahl_fenster_offen 0 htmlText TEXT 1 liste_fenster_gekippt_html <tr><td> <tr><td> TEXT 1 liste_fenster_geschlossen_html <tr><td> </table></body> AND LT ADD 1 anzahl_fenster_gekippt 1 anzahl_fenster_offen anzahl_fenster_gesamt AND GT anzahl_fenster_gekippt 0 GT anzahl_fenster_offen 0 htmlText TEXT 1 liste_fenster_offen_html <tr><td> <tr><td> TEXT 1 liste_fenster_gekippt_html <tr><td> <tr><td> TEXT 1 liste_fenster_geschlossen_html <tr><td> </table></body> AND LT anzahl_fenster_gekippt anzahl_fenster_gesamt AND LT anzahl_fenster_offen anzahl_fenster_gesamt AND AND GT anzahl_fenster_gekippt 0 GT anzahl_fenster_offen 0 EQ ADD 1 anzahl_fenster_gekippt 1 anzahl_fenster_offen anzahl_fenster_gesamt htmlText TEXT 1 liste_fenster_offen_html <tr><td> <tr><td> TEXT 1 liste_fenster_gekippt_html <tr><td> </table></body> 0 Temperaturen_alexa2_adapter_instanz_1 Beschreibe diese Funktion … alexa_instanz_1 alexa2.1.History.serialNumber any default alexa_instanz_1 angesprochener_echo_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1 AND EQ FIRST FROM_START alexa_instanz_1 8 alexa2.1 FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume angesprochener_echo_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak speak_volume_instanz_1_neu FIRST FROM_START alexa_instanz_1 8 .Echo-Devices. val alexa_instanz_1 .Commands.speak-volume any default Ansage_Button_Temperaturen_eDP AND EQ angesprochener_echo_instanz_1 TRUE EQ state.from system.adapter.iot.0 false FALSE Object ID speak_volume_instanz_1_neu TRUE Ansagelautstaerke 0 false FALSE Object ID angesprochener_echo_instanz_1_neu TRUE Ansage_Einleitungssatz_Temperaturen val gesamte_Temperaturen_Liste_eDP , das wΓ€re dann alles. 0 log Logmeldung_Temperaturen_Ansage FIRST FROM_END angesprochener_echo_instanz_1_neu 15 ausgefΓΌhrt βœ… Tueren_vor_versand_pruefen Beschreibe diese Funktion … gekippt gekippt emoji_πŸ‘ˆ geoffnet geΓΆffnet emoji_☝️ uebnerschrift_nachrichten_Tueren emoji_πŸšͺ * etage Tueren status * \n timeout7 timeout7 1000 ms AND EQ val Anzahl_Tueren_offen_eDP 1 EQ val Anzahl_Tueren_gekippt_eDP 0 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es ist eine einzahl_Tuer geoffnet \n \n TEXT 1 liste_tueren_offen \n AND EQ val Anzahl_Tueren_offen_eDP 0 EQ val Anzahl_Tueren_gekippt_eDP 1 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es ist eine einzahl_Tuer gekippt \n \n TEXT 1 liste_tueren_gekippt \n AND EQ val Anzahl_Tueren_offen_eDP 1 EQ val Anzahl_Tueren_gekippt_eDP 1 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es ist eine einzahl_Tuer geoffnet \n Es ist eine einzahl_Tuer gekippt \n \n TEXT 1 liste_tueren_offen \n \n TEXT 1 liste_tueren_gekippt \n AND EQ val Anzahl_Tueren_offen_eDP 0 GT val Anzahl_Tueren_gekippt_eDP 1 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es sind val Anzahl_Tueren_gekippt_eDP Tueren gekippt \n \n TEXT 1 liste_tueren_gekippt \n AND GT val Anzahl_Tueren_offen_eDP 1 EQ val Anzahl_Tueren_gekippt_eDP 0 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es sind val Anzahl_Tueren_offen_eDP Tueren geoffnet \n \n TEXT 1 liste_tueren_offen \n AND GT val Anzahl_Tueren_offen_eDP 1 EQ val Anzahl_Tueren_gekippt_eDP 1 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es sind val Anzahl_Tueren_offen_eDP Tueren geoffnet \n Es ist eine einzahl_Tuer gekippt \n \n TEXT 1 liste_tueren_offen \n \n TEXT 1 liste_tueren_gekippt \n AND EQ val Anzahl_Tueren_offen_eDP 1 GT val Anzahl_Tueren_gekippt_eDP 1 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es ist eine einzahl_Tuer geoffnet \n Es sind val Anzahl_Tueren_gekippt_eDP Tueren gekippt \n \n TEXT 1 liste_tueren_offen \n \n TEXT 1 liste_tueren_gekippt \n AND GT val Anzahl_Tueren_offen_eDP 1 GT val Anzahl_Tueren_gekippt_eDP 1 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Es sind val Anzahl_Tueren_offen_eDP Tueren geoffnet \n Es sind val Anzahl_Tueren_gekippt_eDP Tueren gekippt \n \n TEXT 1 liste_tueren_offen \n \n TEXT 1 liste_tueren_gekippt \n AND EQ val Anzahl_Tueren_offen_eDP 0 EQ val Anzahl_Tueren_gekippt_eDP 0 nachrichten_ausgabe_Tueren uebnerschrift_nachrichten_Tueren Alle Tueren sind geschlossen emoji_βœ… true FALSE Object ID offene_gekippte_Tueren_Liste_emojis_eDP TRUE nachrichten_ausgabe_Tueren 0 Version speak-alias 0.6 erstellt von @dslraser im Juni 2020 Forum Link: https://forum.iobroker.net/post/273896 Fenster Fenster Tueren TΓΌren Steckdosen Steckdosen Licht Lichter Bewegungsmelder Bewegungsmelder Batterien Batterien Temperaturen Temperaturen pfad_geraete_zaehlen .Eigene_Datenpunkte.Geraete. pfad_geraete_ansagen .Eigene_Datenpunkte.Alexa_Ansagen. pfad_geraete_benachrichtigungen .Eigene_Datenpunkte.Benachrichtigungen. Bei Nutzung der Instanzen javascript.x muss das Blockly in der gleichen Instanz laufen wo die Datenpunkte angelegt werden anlegen_in 0_userdata.0 etage Haus auf wahr stellen was benutzt werden soll und auch vorhanden ist. Alexa_Ansage_verwenden TRUE Telegram_verwenden TRUE Email_verwenden TRUE Batterien_Status_verwenden TRUE Batterien_volt_verwenden TRUE Steckdosen_verwenden TRUE Lichter_verwenden TRUE Bewegungsmelder_verwenden TRUE Fenster_verwenden TRUE Tueren_verwenden TRUE Temperaturen_verwenden TRUE Ansagelautstaerke Alexa bis 100 auswaehlen Ansagelautstaerke 35 Telegram Empfaenger eintragen Telegram_Empfaenger Ralf E-Mail Empfaenger eintragen leere Felder fΓΌr weitere Benutzer mit Semikolon trennen EMail_Empfaenger service@marxen.com.de Selektoren an die eigene Aufzaehlung anpassen selektor_Batterien_Status (functions='batterien_status_alias') selektor_Batterien_Volt (functions='batterien_volt_alias') selektor_Steckdosen (functions='steckdosen_alias') selektor_Lichter (functions='licht_alias') selektor_Bewegungsmelder (functions='bewegungsmelder_alias') selektor_Fenster (functions='fenster_alias') selektor_Tueren (functions='tueren_alias') selektor_Temperaturen (functions='temperaturen_alias') emoji_βœ… βœ… emoji_❌ ❌ emoji_❗️ ❗️ emoji_πŸ‘ πŸ‘ emoji_☝️ ☝️ emoji_πŸ‘ˆ πŸ‘ˆ emoji_πŸ’‘ πŸ’‘ emoji_⚑️ ⚑️ emoji_πŸ”Œ πŸ”Œ emoji_πŸ‘€ πŸ‘€ emoji_πŸ‘ πŸ‘ emoji_🧯 🧯 emoji_πŸ”” πŸ”” emoji_πŸšͺ πŸšͺ emoji_πŸ”‹ πŸ”‹ emoji_🌑️ 🌑️ emoji_πŸ₯… πŸ₯… ein ein eine eine einzahl_Fenster Fenster mehrzahl_Fenster Fenster einzahl_Tuer TΓΌr mehrzahl_Tueren TΓΌren einzahl_Steckdose Steckdose mehrzahl_Steckdosen Steckdosen einzahl_Licht Licht mehrzahl_Licht Lichter einzahl_Bewegungsmelder Bewegungsmelder mehrzahl_Bewegungsmelder Bewegungsmelder einzahl_Batterie Batterie mehrzahl_Batterien Batterien Tueren_zaehlen Beschreibe diese Funktion … anzahl_tueren_gekippt 0 anzahl_tueren_offen 0 anzahl_tueren_geschlossen 0 anzahl_tueren_gesamt 0 liste_tueren_offen liste_tueren_gekippt liste_tueren_geschlossen liste_tueren_offen_gesamt liste_tueren_offen_html liste_tueren_gekippt_html liste_tueren_geschlossen_html htmlText <!DOCTYPE html><html lang="de"><head><title> Tueren </title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body> <p style="color:#0000FF; font-family:Helvetica; font-weight: bold"> Tueren status etage </p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γ„nderung: custom TT.MM.JJJJ SS:mm:ss </p> <table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);"> <tr style="color:#0000FF"; font-weight: bold"><td> Tueren etage &ensp;&ensp;&ensp;</td><td>Status</td></tr> <tr><td> tueren_offen selektor_Tueren anzahl_tueren_gesamt 1 wert val tueren_offen OR EQ tueren_offen wert geΓΆffnet EQ tueren_offen wert TRUE anzahl_tueren_offen 1 INSERT LAST liste_tueren_offen tueren_offen geΓΆffnet INSERT LAST liste_tueren_offen_html tueren_offen <td><span style="color:#FF0000"> geΓΆffnet </span> tueren_gekippt selektor_Tueren wert val tueren_gekippt EQ tueren_gekippt wert gekippt anzahl_tueren_gekippt 1 INSERT LAST liste_tueren_gekippt tueren_gekippt gekippt INSERT LAST liste_tueren_gekippt_html tueren_gekippt <td><span style="color:#0000FF"> gekippt </span> tueren_geschlossen selektor_Tueren wert val tueren_geschlossen OR EQ tueren_geschlossen wert geschlossen EQ tueren_geschlossen wert FALSE anzahl_tueren_geschlossen 1 INSERT LAST liste_tueren_geschlossen tueren_geschlossen geschlossen INSERT LAST liste_tueren_geschlossen_html tueren_geschlossen <td>geschlossen true FALSE Object ID Anzahl_Tueren_gekippt_eDP TRUE anzahl_tueren_gekippt 0 true FALSE Object ID Anzahl_Tueren_offen_eDP TRUE anzahl_tueren_offen 0 true FALSE Object ID Anzahl_Tueren_geschlossen_eDP TRUE anzahl_tueren_geschlossen 0 true FALSE Object ID Anzahl_Tueren_gesamt_eDP TRUE anzahl_tueren_gesamt 0 true FALSE Object ID Anzahl_Tueren_geoeffnet_und_gekippt_gesamt_eDP TRUE ADD 1 anzahl_tueren_gekippt 1 anzahl_tueren_offen 0 AND EQ anzahl_tueren_offen 0 EQ anzahl_tueren_gekippt 0 true FALSE Object ID offene_gekippte_Tueren_Liste_eDP TRUE Alle Tueren sind geschlossen. 0 true FALSE Object ID offene_gekippte_Tueren_Liste_eDP TRUE GT ADD 1 abc TEXT 1 liste_tueren_offen ; ; TEXT 1 liste_tueren_gekippt ; 1 abc Ansage_Einleitungssatz_Tueren , alle anderen Tueren sind geschlossen. 250 AND NEQ anzahl_tueren_offen 0 NEQ anzahl_tueren_gekippt 0 TEXT 1 liste_tueren_offen ; ; TEXT 1 liste_tueren_gekippt ; AND EQ anzahl_tueren_offen 0 NEQ anzahl_tueren_gekippt 0 TEXT 1 liste_tueren_gekippt ; AND NEQ anzahl_tueren_offen 0 EQ anzahl_tueren_gekippt 0 TEXT 1 liste_tueren_offen ; AND NEQ anzahl_tueren_offen 0 NEQ anzahl_tueren_gekippt 0 TEXT 1 liste_tueren_offen , , TEXT 1 liste_tueren_gekippt , AND EQ anzahl_tueren_offen 0 NEQ anzahl_tueren_gekippt 0 TEXT 1 liste_tueren_gekippt , AND NEQ anzahl_tueren_offen 0 EQ anzahl_tueren_gekippt 0 TEXT 1 liste_tueren_offen , 0 true FALSE Object ID gesamte_Tueren_Liste_eDP TRUE AND EQ anzahl_tueren_gekippt 0 EQ anzahl_tueren_offen 0 TEXT 1 liste_tueren_geschlossen , EQ anzahl_tueren_gesamt anzahl_tueren_offen TEXT 1 liste_tueren_offen , EQ anzahl_tueren_gesamt anzahl_tueren_gekippt TEXT 1 liste_tueren_gekippt , AND GT anzahl_tueren_offen 0 AND LT anzahl_tueren_offen anzahl_tueren_gesamt EQ anzahl_tueren_gekippt 0 TEXT 1 liste_tueren_offen , , TEXT 1 liste_tueren_geschlossen , AND GT anzahl_tueren_gekippt 0 AND LT anzahl_tueren_gekippt anzahl_tueren_gesamt EQ anzahl_tueren_offen 0 TEXT 1 liste_tueren_gekippt , , TEXT 1 liste_tueren_geschlossen , AND LT ADD 1 anzahl_tueren_gekippt 1 anzahl_tueren_offen anzahl_tueren_gesamt AND GT anzahl_tueren_gekippt 0 GT anzahl_tueren_offen 0 TEXT 1 liste_tueren_offen , , TEXT 1 liste_tueren_gekippt , , TEXT 1 liste_tueren_geschlossen , AND LT anzahl_tueren_gekippt anzahl_tueren_gesamt AND LT anzahl_tueren_offen anzahl_tueren_gesamt AND AND GT anzahl_tueren_gekippt 0 GT anzahl_tueren_offen 0 EQ ADD 1 anzahl_tueren_gekippt 1 anzahl_tueren_offen anzahl_tueren_gesamt TEXT 1 liste_tueren_offen , , TEXT 1 liste_tueren_gekippt , 0 true FALSE Object ID Liste_Tueren_html_eDP TRUE AND EQ anzahl_tueren_gekippt 0 EQ anzahl_tueren_offen 0 htmlText TEXT 1 liste_tueren_geschlossen_html <tr><td> </table></body> EQ anzahl_tueren_gesamt anzahl_tueren_offen htmlText TEXT 1 liste_tueren_offen_html <tr><td> </table></body> EQ anzahl_tueren_gesamt anzahl_tueren_gekippt htmlText TEXT 1 liste_tueren_gekippt_html <tr><td> </table></body> AND GT anzahl_tueren_offen 0 AND LT anzahl_tueren_offen anzahl_tueren_gesamt EQ anzahl_tueren_gekippt 0 htmlText TEXT 1 liste_tueren_offen_html <tr><td> <tr><td> TEXT 1 liste_tueren_geschlossen_html <tr><td> </table></body> AND GT anzahl_tueren_gekippt 0 AND LT anzahl_tueren_gekippt anzahl_tueren_gesamt EQ anzahl_tueren_offen 0 htmlText TEXT 1 liste_tueren_gekippt_html <tr><td> <tr><td> TEXT 1 liste_tueren_geschlossen_html <tr><td> </table></body> AND LT ADD 1 anzahl_tueren_gekippt 1 anzahl_tueren_offen anzahl_tueren_gesamt AND GT anzahl_tueren_gekippt 0 GT anzahl_tueren_offen 0 htmlText TEXT 1 liste_tueren_offen_html <tr><td> <tr><td> TEXT 1 liste_tueren_gekippt_html <tr><td> <tr><td> TEXT 1 liste_tueren_geschlossen_html <tr><td> </table></body> AND LT anzahl_tueren_gekippt anzahl_tueren_gesamt AND LT anzahl_tueren_offen anzahl_tueren_gesamt AND AND GT anzahl_tueren_gekippt 0 GT anzahl_tueren_offen 0 EQ ADD 1 anzahl_tueren_gekippt 1 anzahl_tueren_offen anzahl_tueren_gesamt htmlText TEXT 1 liste_tueren_offen_html <tr><td> <tr><td> TEXT 1 liste_tueren_gekippt_html <tr><td> </table></body> 0 Temperaturen_vor_versand_pruefen Beschreibe diese Funktion … uebnerschrift_nachrichten_Temperaturen emoji_🌑️ * etage Temperaturen status * \n timeout8 timeout8 1000 ms nachrichten_ausgabe_Temperaturen uebnerschrift_nachrichten_Temperaturen \n TEXT 1 liste_temperaturen_emojis \n true FALSE Object ID Liste_Temperaturen_emojis_eDP TRUE nachrichten_ausgabe_Temperaturen 0 Temperaturen_zaehlen Beschreibe diese Funktion … liste_temperaturen_gesamt liste_temperaturen_html liste_temperaturen_emojis htmlText <!DOCTYPE html><html lang="de"><head><title> Temperaturen </title><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body> <p style="color:#0000FF; font-family:Helvetica; font-weight: bold"> Temperaturen status etage </p> <p style="color:#ff0000; font-family:Helvetica; font-weight: bold">letze Γ„nderung: custom TT.MM.JJJJ SS:mm:ss </p> <table border="8" cellspacing="10" cellpadding="20" style="color:black; font-family:Helvetica;background-image: linear-gradient(42deg,transparent,lightblue);"> <tr style="color:#0000FF"; font-weight: bold"><td> Temperaturen etage &ensp;&ensp;&ensp;</td><td>Status</td></tr> <tr><td> temperaturen_suchen selektor_Temperaturen INSERT LAST liste_temperaturen_gesamt temperaturen_suchen val temperaturen_suchen Grad INSERT LAST liste_temperaturen_html temperaturen_suchen <td><span style="color:#0000FF"> val temperaturen_suchen Β°C </span> INSERT LAST liste_temperaturen_emojis temperaturen_suchen val temperaturen_suchen Β°C true FALSE Object ID gesamte_Temperaturen_Liste_eDP TRUE GT abc Ansage_Einleitungssatz_Temperaturen val gesamte_Temperaturen_Liste_eDP ;das wΓ€re dann alles. 250 TEXT 1 liste_temperaturen_gesamt ; TEXT 1 liste_temperaturen_gesamt , 0 true FALSE Object ID Liste_Temperaturen_html_eDP TRUE htmlText TEXT 1 liste_temperaturen_html <tr><td> </table></body> 0