No installed extension.")
+ end
+
+ webserver.content_send("
")
+
+ webserver.content_send("
Online Store"
+ "
"
+ " (This feature requires an internet connection)"
+ "
")
+ # "
(This feature requires an internet connection)
")
+
+ webserver.content_send("
[ Loading from Store... ]")
+
+ webserver.content_button(webserver.BUTTON_MANAGEMENT) #- button back to management page -#
+ webserver.content_stop()
+ end
+
+ #####################################################################################################
+ # Extension Store
+ #####################################################################################################
+ def page_extensions_store()
+ import webserver
+ import string
+ import json
+
+ webserver.content_open(200, "text/html")
+ # read manifest from ota.tasmota.com
+ var item_jsonl
+ try
+ item_jsonl = self.load_manifest()
+ except .. as e, m
+ webserver.content_send("
[ Error loading manifest. ]")
+ webserver.content_send(f"
{webserver.html_escape(m)}
")
+ webserver.content_close()
+ return
+ end
+ var item_json_count = string.count(item_jsonl, '"name":')
+
+ webserver.content_send("
")
+ webserver.content_close()
+ end
+
+ #####################################################################################################
+ # Load manifest from ota.tasmota.com
+ #####################################################################################################
+ def load_manifest()
+ try
+ var arch = tasmota.arch() # architecture, ex: "esp32" - not used currently but might be useful
+ var version = f"0x{tasmota.version():08X}"
+
+ var url = f"{self.EXT_REPO}{self.EXT_REPO_MANIFEST}?a={arch}&v={version}"
+ log(f"EXT: fetching extensions manifest '{url}'", 3)
+ # Add architeture and version information
+ # They are not used for now but may be interesting in the future to serve
+ # different content based on architecture (Ex: ESP32) and version (ex: 0x0E060001 for 14.6.0.1)
+ # load the template
+ var cl = webclient()
+ cl.begin(url)
+ var r = cl.GET()
+ if r != 200
+ tasmota.log(f"EXT: error fetching manifest {r}", 2)
+ raise "webclient_error", f"Error fetching manifest code={r}"
+ end
+ var s = cl.get_string()
+ cl.close()
+ return s
+ except .. as e, m
+ tasmota.log(format("EXT: exception '%s' - '%s'", e, m), 2)
+ raise e, m
+ end
+ end
+
+ #####################################################################################################
+ # Web controller
+ #
+ # Applies the changes and restart
+ #####################################################################################################
+ # This HTTP POST manager handles the submitted web form data
+ def page_extensions_ctl()
+ import webserver
+ import path
+ import string
+ if !webserver.check_privileged_access() return nil end
+
+ try
+ # log(f">>> {webserver.arg_name(0)=} {webserver.arg(0)=} {webserver.arg_size()=}")
+ # var redirect_to_store = false # add suffix to redirect to store
+
+ var btn_name = webserver.arg_name(0)
+ var action = btn_name[0] # first character
+ var action_path = btn_name[1..] # remove first character
+
+ if (action == "r") # button "Run"
+ if (action_path != "")
+ # log(f"EXT: run '{action_path}'")
+ tasmota.load(action_path)
+ end
+ elif (action == "s") # button "Stop"
+ # log(f"EXT: stop '{action_path}'")
+ tasmota.unload_extension(action_path)
+ elif (action == "a") || (action == "A") # button "Autorun", "A" enable, "a" disable
+ var new_name
+ if (action == "a") && string.endswith(action_path, ".tapp") # Autorun is enabled, disable it
+ new_name = action_path[0..-5] + "tapp_"
+ elif (action == "A") && string.endswith(action_path, ".tapp_")
+ new_name = action_path[0..-6] + "tapp"
+ end
+ if new_name
+ var success = path.rename(action_path, new_name)
+ # log(f"EXT: rename '{action_path}' to '{new_name} {success=}", 3)
+ if (success) # update any running extension with its new name
+ if tasmota._ext.contains(action_path)
+ tasmota._ext[new_name] = tasmota._ext[action_path]
+ tasmota._ext.remove(action_path)
+ end
+ end
+ else
+ log(f"EXT: wrong action '{btn_name}'", 3)
+ end
+ elif (action == 'd') # button "Delete"
+ if (action_path != "")
+ # first stop if it was running
+ tasmota.unload_extension(action_path)
+ # then delete file
+ var success = path.remove(action_path)
+ # log(f"EXT: delete '{action_path}' {success=}", 3)
+ end
+
+ # Now try the store commands
+ elif (action == 'u') # Upgrade ext
+ # log(f"EXT: upgrade '{action_path}'", 3)
+ # first stop the app if it's running
+ tasmota.unload_extension(action_path)
+ self.install_from_store(self.tapp_name(action_path))
+ # redirect_to_store = true
+ elif (action == 'i') # Install ext
+ # log(f"EXT: install '{action_path}'", 3)
+ self.install_from_store(self.tapp_name(action_path))
+ # redirect_to_store = true
+ end
+
+ # var redirect_suffix = redirect_to_store ? "store=" : ""
+ # webserver.redirect(f"/ext?{redirect_suffix}")
+ webserver.redirect(f"/ext")
+ except .. as e, m
+ log(f"CFG: Exception> '{e}' - {m}", 2)
+ #- display error page -#
+ webserver.content_start("Parameter error") #- title of the web page -#
+ webserver.content_send_style() #- send standard Tasmota styles -#
+
+ webserver.content_send(f"
Exception:
'{webserver.html_escape(e)}'
{webserver.html_escape(m)}
")
+
+ webserver.content_button(webserver.BUTTON_CONFIGURATION) #- button back to management page -#
+ webserver.content_stop() #- end of web page -#
+ end
+ end
+
+ # Add HTTP POST and GET handlers
+ def web_add_handler()
+ import webserver
+ webserver.on('/ext', / -> self.page_extensions_mgr_dispatcher(), webserver.HTTP_GET)
+ webserver.on('/ext', / -> self.page_extensions_ctl(), webserver.HTTP_POST)
+ end
+end
+
+extension_manager.Extension_manager = Extension_manager
+extension_manager.init = def (m)
+ return m.Extension_manager() # return an instance of this class
+end
diff --git a/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be b/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be
index 7c9ad8f7a..25bff1e81 100644
--- a/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be
+++ b/lib/libesp32/berry_tasmota/src/embedded/tasmota_class.be
@@ -599,8 +599,8 @@ class Tasmota
# Ex: f_name = '/app.zip#autoexec'
# if ends with ".tapp", add "#autoexec"
- # there's a trick here, since actual prefix may be ".tapp" or "._tapp" (the later for no-autp-run)
- if string.endswith(f_name, 'tapp')
+ # prefix may be ".tapp" or ".tapp_"
+ if string.endswith(f_name, '.tapp') || string.endswith(f_name, '.tapp_')
f_name += "#autoexec"
end
@@ -845,6 +845,95 @@ class Tasmota
end
end
+ ######################################################################
+ # add_extension
+ #
+ # Add an instance to the dispatchin of Berry events
+ #
+ # Args:
+ # - `d`: instance (or driver)
+ # The events will be dispatched to this instance whenever
+ # it has a method with the same name of the instance
+ # - `ext_path`: the path of the extension, usually a '.tapp' file
+ ######################################################################
+ def add_extension(d, ext_path) # add ext
+ if (ext_path == nil)
+ ext_path = tasmota.wd
+ end
+
+ if (type(d) != 'instance') || (type(ext_path) != 'string')
+ raise "value_error", "instance and name required"
+ end
+ if (ext_path != nil)
+ import string
+ # initialize self._ext if it does not exist
+ if self._ext == nil
+ self._ext = sortedmap()
+ end
+ if string.endswith(ext_path, '#')
+ ext_path = ext_path[0..-2] # remove trailing '#''
+ end
+ if self._ext.contains(ext_path)
+ log(f"BRY: Extension '{ext_path}' already registered", 3)
+ else
+ self._ext[ext_path] = d
+ end
+ end
+ end
+
+ ######################################################################
+ # read_extension_manifest
+ #
+ # Read and parse the 'manifest.json' file in the 'wd' (working dir)
+ #
+ # Args:
+ # - `wd`: (string) working dir indicating which .tapp file to read
+ # ex: 'Partition_Wizard.tapp#'
+ # Returns: map of values from JSON, or `nil` if an error occured
+ #
+ # Returned map is eitner `nil` if failed or a map with guaranteed content:
+ # - name (string)
+ # - description (string), default ""
+ # - version (int), default 0
+ # - min_tasmota(int), default 0
+ #
+ ######################################################################
+ def read_extension_manifest(wd_or_instance)
+ var f
+ var wd = wd_or_instance
+ try
+ import json
+ import string
+
+ if (wd == nil) wd = tasmota.wd end # if 'wd' is nil, use the current `tasmota.wd`
+
+ var delimiter = ((size(wd) > 0) && (wd[-1] != '/') && (wd[-1] != '#')) ? '#' : '' # add '#' delimiter if filename
+ f = open(wd + delimiter + 'manifest.json')
+ var s = f.read()
+ f.close()
+ var j = json.load(s)
+ # check if valid, 'name' is mandatory
+ var name = j.find('name')
+ if name
+ # convert version numbers if present
+ j['name'] = str(j['name'])
+ j['description'] = str(j.find('description', ''))
+ j['version'] = int(j.find('version', 0))
+ j['min_tasmota'] = int(j.find('min_tasmota', 0))
+ j['autorun'] = string.endswith(wd, ".tapp")
+ return j
+ else
+ return nil
+ end
+ except .. as e, m
+ log(f"BRY: error {e} {m} when reading 'manifest.json' in '{wd}'")
+ if (f != nil)
+ f.close()
+ end
+ return nil
+ end
+ end
+
def remove_driver(d)
if self._drivers
var idx = self._drivers.find(d)
@@ -852,6 +941,31 @@ class Tasmota
self._drivers.pop(idx)
end
end
+ # remove ext
+ if self._ext
+ self._ext.remove_by_value(d)
+ end
+ end
+
+ def unload_extension(name_or_instance)
+ if (self._ext == nil) return end
+ var d = name_or_instance # d = driver
+
+ if type(name_or_instance) == 'string'
+ d = self._ext.find(name_or_instance)
+ end
+ if type(d) == 'instance'
+ import introspect
+
+ if introspect.contains(d, "unload")
+ d.unload()
+ end
+ self.remove_driver(d)
+ end
+ # force gc of instance
+ name_or_instance = nil
+ d = nil
+ tasmota.gc()
end
# cmd high-level function
diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_extension_manager.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_extension_manager.h
new file mode 100644
index 000000000..73b862b96
--- /dev/null
+++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_extension_manager.h
@@ -0,0 +1,1563 @@
+/* Solidification of extension_manager.h */
+/********************************************************************\
+* Generated code, don't edit *
+\********************************************************************/
+#include "be_constobj.h"
+extern const bclass be_class_Extension_manager;
+// compact class 'Extension_manager' ktab size: 157, total: 254 (saved 776 bytes)
+static const bvalue be_ktab_class_Extension_manager[157] = {
+ /* K0 */ be_nested_str(tasmota),
+ /* K1 */ be_nested_str(arch),
+ /* K2 */ be_nested_str(0x_X2508X),
+ /* K3 */ be_nested_str(version),
+ /* K4 */ be_nested_str(_X25s_X25s_X3Fa_X3D_X25s_X26v_X3D_X25s),
+ /* K5 */ be_nested_str(EXT_REPO),
+ /* K6 */ be_nested_str(EXT_REPO_MANIFEST),
+ /* K7 */ be_nested_str(log),
+ /* K8 */ be_nested_str(EXT_X3A_X20fetching_X20extensions_X20manifest_X20_X27_X25s_X27),
+ /* K9 */ be_const_int(3),
+ /* K10 */ be_nested_str(webclient),
+ /* K11 */ be_nested_str(begin),
+ /* K12 */ be_nested_str(GET),
+ /* K13 */ be_nested_str(EXT_X3A_X20error_X20fetching_X20manifest_X20_X25s),
+ /* K14 */ be_const_int(2),
+ /* K15 */ be_nested_str(Error_X20fetching_X20manifest_X20code_X3D_X25s),
+ /* K16 */ be_nested_str(webclient_error),
+ /* K17 */ be_nested_str(get_string),
+ /* K18 */ be_nested_str(close),
+ /* K19 */ be_nested_str(EXT_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27),
+ /* K20 */ be_const_class(be_class_Extension_manager),
+ /* K21 */ be_nested_str(string),
+ /* K22 */ be_const_int(0),
+ /* K23 */ be_const_int(1),
+ /* K24 */ be_nested_str(_X23),
+ /* K25 */ be_nested_str(_),
+ /* K26 */ be_nested_str(find),
+ /* K27 */ be_nested_str(_X2Etapp),
+ /* K28 */ be_nested_str(_X2F),
+ /* K29 */ be_nested_str(webserver),
+ /* K30 */ be_nested_str(content_start),
+ /* K31 */ be_nested_str(Extensions_X20Manager),
+ /* K32 */ be_nested_str(content_send_style),
+ /* K33 */ be_nested_str(content_send),
+ /* K34 */ be_nested_str(_X3Cdiv_X20style_X3D_X27padding_X3A0px_X205px_X3Btext_X2Dalign_X3Acenter_X3B_X27_X3E_X3Ch3_X3E_X3Chr_X3EExtension_X20Manager_X3Chr_X3E_X3C_X2Fh3_X3E_X3C_X2Fdiv_X3E),
+ /* K35 */ be_nested_str_long(_X3Cscript_X3Efunction_X20loadext_X28_X29_X20_X7Beb_X28_X27store_X27_X29_X2Edisabled_X3Dtrue_X3Bx_X3Dnew_X20XMLHttpRequest_X28_X29_X3Bx_X2Etimeout_X3D4000_X3Bx_X2Eonreadystatechange_X20_X3D_X20_X28_X29_X20_X3D_X3E_X20_X7Bif_X28x_X2EreadyState_X3D_X3D4_X29_X7Bif_X28x_X2Estatus_X3D_X3D200_X29_X7Beb_X28_X27inet_X27_X29_X2Estyle_X2Edisplay_X3D_X27none_X27_X3Beb_X28_X27store_X27_X29_X2EouterHTML_X3Dx_X2EresponseText_X3B_X7D_X7D_X7D_X3Bx_X2Eopen_X28_X27GET_X27_X2C_X27_X3Fstore_X3D_X27_X29_X3Bx_X2Esend_X28_X29_X3B_X7Dwindow_X2Eonload_X3Dfunction_X28_X29_X7Bloadext_X28_X29_X3B_X7D_X3Bfunction_X20toggleDesc_X28id_X29_X20_X7Bvar_X20desc_X20_X3D_X20document_X2EgetElementById_X28_X27desc_X2D_X27_X20_X2B_X20id_X29_X3Bvar_X20arrow_X20_X3D_X20document_X2EgetElementById_X28_X27arrow_X2D_X27_X20_X2B_X20id_X29_X3Bif_X20_X28desc_X2Estyle_X2Edisplay_X20_X3D_X3D_X3D_X20_X27none_X27_X20_X7C_X7C_X20desc_X2Estyle_X2Edisplay_X20_X3D_X3D_X3D_X20_X27_X27_X29_X20_X7Bdesc_X2Estyle_X2Edisplay_X20_X3D_X20_X27block_X27_X3Barrow_X2EinnerHTML_X20_X3D_X20_X27_XE2_X96_XBC_X27_X3B_X7D_X20else_X20_X7Bdesc_X2Estyle_X2Edisplay_X20_X3D_X20_X27none_X27_X3Barrow_X2EinnerHTML_X20_X3D_X20_X27_XE2_X96_XB6_X27_X3B_X7D_X7Dfunction_X20filterExtensions_X28query_X29_X20_X7Bvar_X20items_X20_X3D_X20document_X2EgetElementsByClassName_X28_X27ext_X2Dstore_X2Ditem_X27_X29_X3Bquery_X20_X3D_X20query_X2EtoLowerCase_X28_X29_X3Bfor_X20_X28var_X20i_X20_X3D_X200_X3B_X20i_X20_X3C_X20items_X2Elength_X3B_X20i_X2B_X2B_X29_X20_X7Bvar_X20name_X20_X3D_X20items_X5Bi_X5D_X2EgetElementsByClassName_X28_X27ext_X2Dname_X27_X29_X5B0_X5D_X2EtextContent_X2EtoLowerCase_X28_X29_X3Bvar_X20desc_X20_X3D_X20items_X5Bi_X5D_X2EgetElementsByClassName_X28_X27ext_X2Ddesc_X27_X29_X5B0_X5D_X2EtextContent_X2EtoLowerCase_X28_X29_X3Bif_X20_X28name_X2Eincludes_X28query_X29_X20_X7C_X7C_X20desc_X2Eincludes_X28query_X29_X29_X20_X7Bitems_X5Bi_X5D_X2Estyle_X2Edisplay_X20_X3D_X20_X27block_X27_X3B_X7D_X20else_X20_X7Bitems_X5Bi_X5D_X2Estyle_X2Edisplay_X20_X3D_X20_X27none_X27_X3B_X7D_X7D_X7D_X3C_X2Fscript_X3E),
+ /* K36 */ be_nested_str_long(_X3Cfieldset_X20style_X3D_X27padding_X3A0_X205px_X3B_X27_X3E_X3Cstyle_X3E_X2Eext_X2Ditem_X7Bwidth_X3Amin_X2Dcontent_X3Bmin_X2Dwidth_X3A100_X25_X3B_X7D_X2Eext_X2Ditem_X20small_X7Bdisplay_X3Ablock_X3Bword_X2Dwrap_X3Abreak_X2Dword_X3Boverflow_X2Dwrap_X3Abreak_X2Dword_X3Bwhite_X2Dspace_X3Anormal_X3Bpadding_X2Dright_X3A5px_X3Bpadding_X2Dtop_X3A2px_X3B_X7D_X2Eext_X2Dcontrols_X7Bdisplay_X3Aflex_X3Bgap_X3A8px_X3Balign_X2Ditems_X3Acenter_X3Bmargin_X2Dtop_X3A4px_X3Bpadding_X3A0px_X7D_X2Ebtn_X2Dsmall_X7Bpadding_X3A0_X206px_X3Bline_X2Dheight_X3A1_X2E8rem_X3Bfont_X2Dsize_X3A0_X2E9rem_X3Bmin_X2Dwidth_X3Aauto_X3Bwidth_X3Aauto_X3Bflex_X2Dshrink_X3A0_X3B_X7Dform_X7Bpadding_X2Dtop_X3A0px_X3Bpadding_X2Dbottom_X3A0px_X3B_X7D_X2Erunning_X2Dindicator_X7Bdisplay_X3Ainline_X2Dblock_X3Bwidth_X3A8px_X3Bheight_X3A8px_X3Bborder_X2Dradius_X3A50_X25_X3Bmargin_X2Dright_X3A8px_X3Bbackground_X3Avar_X28_X2D_X2Dc_btnsvhvr_X29_X3Banimation_X3Apulse_X201_X2E5s_X20infinite_X3B_X7D_X40keyframes_X20pulse_X7B0_X25_X7Bopacity_X3A1_X3B_X7D50_X25_X7Bopacity_X3A0_X2E5_X3B_X7D100_X25_X7Bopacity_X3A1_X3B_X7D_X7D_X2Estore_X2Dheader_X7Bdisplay_X3Aflex_X3Bjustify_X2Dcontent_X3Aspace_X2Dbetween_X3Balign_X2Ditems_X3Acenter_X3Bmargin_X2Dbottom_X3A10px_X3B_X7D_X2Estore_X2Dstats_X7Bfont_X2Dsize_X3A0_X2E9em_X3Bcolor_X3Avar_X28_X2D_X2Dc_in_X29_X3B_X7D_X2Eext_X2Dstore_X2Ditem_X7Bbackground_X3Avar_X28_X2D_X2Dc_bg_X29_X3Bborder_X2Dradius_X3A0_X2E3em_X3Bmargin_X2Dbottom_X3A5px_X3Bpadding_X3A4px_X3B_X7D_X2Eext_X2Dheader_X7Bdisplay_X3Aflex_X3Bjustify_X2Dcontent_X3Aspace_X2Dbetween_X3Balign_X2Ditems_X3Acenter_X3Bcursor_X3Apointer_X3Buser_X2Dselect_X3Anone_X3Bpadding_X3A5px_X3B_X7D_X2Eext_X2Dtitle_X7Bdisplay_X3Aflex_X3Balign_X2Ditems_X3Acenter_X3Bgap_X3A6px_X3Bflex_X3A1_X3Bpadding_X3A0_X3B_X7D_X2Eext_X2Dname_X7Bfont_X2Dweight_X3Abold_X3B_X7D_X2Eext_X2Dversion_X7Bfont_X2Dsize_X3A0_X2E8em_X3B_X7D_X2Eext_X2Darrow_X7Bcolor_X3Avar_X28_X2D_X2Dc_in_X29_X3Bfont_X2Dsize_X3A0_X2E8em_X3B_X7D_X2Eext_X2Dbadges_X7Bpadding_X3A0_X3B_X7D_X2Eext_X2Ddetails_X7Bwidth_X3Amin_X2Dcontent_X3Bmin_X2Dwidth_X3A100_X25_X3Bpadding_X3A0_X3Bdisplay_X3Anone_X3B_X7D_X2Eext_X2Ddesc_X7Bcolor_X3Avar_X28_X2D_X2Dc_in_X29_X3Bfont_X2Dsize_X3A0_X2E8em_X3Bline_X2Dheight_X3A1_X2E4_X3Bdisplay_X3Ablock_X3Bword_X2Dwrap_X3Abreak_X2Dword_X3Boverflow_X2Dwrap_X3Abreak_X2Dword_X3Bwhite_X2Dspace_X3Anormal_X3Bpadding_X3A0_X205px_X3B_X7D_X2Eext_X2Dactions_X7Bdisplay_X3Aflex_X3Bgap_X3A8px_X3Bpadding_X3A5px_X3B_X7D_X2Ebtn_X2Daction_X7Bpadding_X3A0_X2012px_X3Bline_X2Dheight_X3A1_X2E8em_X3Bfont_X2Dsize_X3A0_X2E9em_X3Bflex_X3A1_X3B_X7D_X2Einstalled_X2Dbadge_X7Bborder_X2Dcolor_X3Avar_X28_X2D_X2Dc_btnhvr_X29_X3Bpadding_X3A0px_X204px_X3Bborder_X2Dradius_X3A4px_X3Bfont_X2Dsize_X3A0_X2E7em_X3Bborder_X2Dwidth_X3A2px_X3Bborder_X2Dstyle_X3Asolid_X3Bmargin_X2Dright_X3A3px_X3B_X7D_X2Eupdate_X2Dbadge_X7Bbackground_X3Avar_X28_X2D_X2Dc_btnhvr_X29_X3Bpadding_X3A2px_X206px_X3Bborder_X2Dradius_X3A4px_X3Bfont_X2Dsize_X3A0_X2E7em_X3Bmargin_X2Dright_X3A3px_X3Banimation_X3Apulse_X202s_X20infinite_X3B_X7D_X40keyframes_X20pulse_X7B0_X25_X7Bopacity_X3A1_X3B_X7D50_X25_X7Bopacity_X3A0_X2E7_X3B_X7D100_X25_X7Bopacity_X3A1_X3B_X7D_X7D_X3C_X2Fstyle_X3E_X3Clegend_X3E_X3Cb_X20title_X3D_X27Running_X20extensions_X27_X3E_X26nbsp_X3BInstalled_X20extensions_X3C_X2Fb_X3E_X3C_X2Flegend_X3E),
+ /* K37 */ be_nested_str(list_extensions_in_fs),
+ /* K38 */ be_nested_str(_X3Chr_X20style_X3D_X27margin_X3A2px_X200_X200_X200_X3B_X27_X3E),
+ /* K39 */ be_nested_str(get_by_index),
+ /* K40 */ be_nested_str(html_escape),
+ /* K41 */ be_nested_str(read_extension_manifest),
+ /* K42 */ be_nested_str(_ext),
+ /* K43 */ be_nested_str(contains),
+ /* K44 */ be_nested_str(_X20_X3Cspan_X20class_X3D_X27running_X2Dindicator_X27_X20title_X3D_X27Running_X27_X3E_X3C_X2Fspan_X3E),
+ /* K45 */ be_nested_str(),
+ /* K46 */ be_nested_str(autorun),
+ /* K47 */ be_nested_str(style_X3D_X27background_X3Avar_X28_X2D_X2Dc_btnsvhvr_X29_X3B_X27),
+ /* K48 */ be_nested_str(style_X3D_X27background_X3Avar_X28_X2D_X2Dc_btnoff_X29_X3B_X27),
+ /* K49 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Ditem_X27_X3E),
+ /* K50 */ be_nested_str(_X3Cspan_X20title_X3D_X27path_X3A_X20_X25s_X27_X3E_X3Cb_X3E_X25s_X3C_X2Fb_X3E_X25s_X3C_X2Fspan_X3E_X3Cbr_X3E),
+ /* K51 */ be_nested_str(name),
+ /* K52 */ be_nested_str(_X3Csmall_X3E_X25s_X3C_X2Fsmall_X3E),
+ /* K53 */ be_nested_str(description),
+ /* K54 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Dcontrols_X27_X20style_X3D_X27padding_X2Dtop_X3A0px_X3Bpadding_X2Dbottom_X3A0px_X3B_X27_X3E),
+ /* K55 */ be_nested_str(_X3Cform_X20action_X3D_X27_X2Fext_X27_X20method_X3D_X27post_X27_X20class_X3D_X27ext_X2Dcontrols_X27_X3E),
+ /* K56 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Dsmall_X27_X20_X25s_X20name_X3D_X27_X25s_X25s_X27_X3E_X25s_X3C_X2Fbutton_X3E),
+ /* K57 */ be_nested_str(s),
+ /* K58 */ be_nested_str(r),
+ /* K59 */ be_nested_str(Running),
+ /* K60 */ be_nested_str(Stopped),
+ /* K61 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Dsmall_X27_X20_X25s_X20name_X3D_X27_X25s_X25s_X27_X3EAuto_X2Drun_X3A_X20_X25s_X3C_X2Fbutton_X3E),
+ /* K62 */ be_nested_str(a),
+ /* K63 */ be_nested_str(A),
+ /* K64 */ be_nested_str(ON),
+ /* K65 */ be_nested_str(OFF),
+ /* K66 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Dsmall_X20bred_X27_X20name_X3D_X27d_X25s_X27_X20onclick_X3D_X27return_X20confirm_X28_X22Confirm_X20deletion_X20of_X20_X25s_X22_X29_X27_X3EUninstall_X3C_X2Fbutton_X3E),
+ /* K67 */ be_nested_str(_X3C_X2Fform_X3E_X3C_X2Fdiv_X3E_X3C_X2Fdiv_X3E),
+ /* K68 */ be_nested_str(_X3Cdiv_X3E_X3Csmall_X3E_X3Ci_X3ENo_X20installed_X20extension_X2E_X3C_X2Fi_X3E_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E),
+ /* K69 */ be_nested_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3C_X2Ffieldset_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
+ /* K70 */ be_nested_str(_X3Cdiv_X20style_X3D_X27padding_X3A0px_X205px_X3Btext_X2Dalign_X3Acenter_X3B_X27_X3E_X3Ch3_X3E_X3Chr_X3EOnline_X20Store_X3Chr_X20style_X3D_X27margin_X2Dbottom_X3A0_X3B_X27_X3E_X3Cspan_X20id_X3D_X27inet_X27_X20style_X3D_X27font_X2Dsize_X3Asmall_X3Bfont_X2Dweight_X3Anormal_X3B_X27_X27_X3E_X26nbsp_X3B_X28This_X20feature_X20requires_X20an_X20internet_X20connection_X29_X3C_X2Fspan_X3E_X3C_X2Fh3_X3E_X3C_X2Fdiv_X3E),
+ /* K71 */ be_nested_str(_X3Cb_X20id_X3D_X27store_X27_X3E_X5B_X20_X3Cspan_X20style_X3D_X27color_X3Avar_X28_X2D_X2Dc_btnsv_X29_X3B_X27_X3ELoading_X20from_X20Store_X2E_X2E_X2E_X3C_X2Fspan_X3E_X20_X5D_X3C_X2Fb_X3E),
+ /* K72 */ be_nested_str(content_button),
+ /* K73 */ be_nested_str(BUTTON_MANAGEMENT),
+ /* K74 */ be_nested_str(content_stop),
+ /* K75 */ be_nested_str(tapp_name),
+ /* K76 */ be_nested_str(endswith),
+ /* K77 */ be_nested_str(_X25s_X25s_X25s),
+ /* K78 */ be_nested_str(EXT_REPO_FOLDER),
+ /* K79 */ be_nested_str(EXT_X3A_X20installing_X20from_X20_X27_X25s_X27),
+ /* K80 */ be_nested_str(_X25s_X25s),
+ /* K81 */ be_nested_str(EXT_FOLDER),
+ /* K82 */ be_nested_str(EXT_X3A_X20return_code_X3D_X25s),
+ /* K83 */ be_nested_str(write_file),
+ /* K84 */ be_nested_str(CFG_X3A_X20exception_X20_X27_X25s_X27_X20_X2D_X20_X27_X25s_X27),
+ /* K85 */ be_nested_str(_X3Cp_X3E_X3C_X2Fp_X3E_X3Cform_X20id_X3Dbut_part_mgr_X20style_X3D_X27display_X3A_X20block_X3B_X27_X20action_X3D_X27ext_X27_X20method_X3D_X27get_X27_X3E_X3Cbutton_X3EExtension_X20Manager_X3C_X2Fbutton_X3E_X3C_X2Fform_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
+ /* K86 */ be_nested_str(list_extensions),
+ /* K87 */ be_nested_str(stop_iteration),
+ /* K88 */ be_nested_str(path),
+ /* K89 */ be_nested_str(listdir),
+ /* K90 */ be_nested_str(_X2Etapp_),
+ /* K91 */ be_nested_str(push),
+ /* K92 */ be_nested_str(check_privileged_access),
+ /* K93 */ be_nested_str(arg_name),
+ /* K94 */ be_const_int(2147483647),
+ /* K95 */ be_nested_str(load),
+ /* K96 */ be_nested_str(unload_extension),
+ /* K97 */ be_nested_str(tapp_),
+ /* K98 */ be_nested_str(tapp),
+ /* K99 */ be_nested_str(rename),
+ /* K100 */ be_nested_str(remove),
+ /* K101 */ be_nested_str(EXT_X3A_X20wrong_X20action_X20_X27_X25s_X27),
+ /* K102 */ be_nested_str(d),
+ /* K103 */ be_nested_str(u),
+ /* K104 */ be_nested_str(install_from_store),
+ /* K105 */ be_nested_str(i),
+ /* K106 */ be_nested_str(redirect),
+ /* K107 */ be_nested_str(_X2Fext),
+ /* K108 */ be_nested_str(CFG_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s),
+ /* K109 */ be_nested_str(Parameter_X20error),
+ /* K110 */ be_nested_str(_X3Cp_X20style_X3D_X27width_X3A340px_X3B_X27_X3E_X3Cb_X3EException_X3A_X3C_X2Fb_X3E_X3Cbr_X3E_X27_X25s_X27_X3Cbr_X3E_X25s_X3C_X2Fp_X3E),
+ /* K111 */ be_nested_str(BUTTON_CONFIGURATION),
+ /* K112 */ be_nested_str(on),
+ /* K113 */ be_nested_str(HTTP_GET),
+ /* K114 */ be_nested_str(HTTP_POST),
+ /* K115 */ be_nested_str(sortedmap),
+ /* K116 */ be_nested_str(EXT_X3A_X20unable_X20to_X20read_X20details_X20from_X20_X27_X25s_X27),
+ /* K117 */ be_nested_str(add_driver),
+ /* K118 */ be_nested_str(json),
+ /* K119 */ be_nested_str(content_open),
+ /* K120 */ be_nested_str(text_X2Fhtml),
+ /* K121 */ be_nested_str(load_manifest),
+ /* K122 */ be_nested_str(_X3Cb_X20id_X3D_X27store_X27_X3E_X5B_X20_X3Cspan_X20style_X3D_X27color_X3Avar_X28_X2D_X2Dc_btnrst_X29_X3B_X27_X3EError_X20loading_X20manifest_X2E_X3C_X2Fspan_X3E_X20_X5D_X3C_X2Fb_X3E),
+ /* K123 */ be_nested_str(_X3Cp_X3E_X3Csmall_X3E_X25s_X3C_X2Fsmall_X3E_X3C_X2Fp_X3E),
+ /* K124 */ be_nested_str(content_close),
+ /* K125 */ be_nested_str(count),
+ /* K126 */ be_nested_str(_X22name_X22_X3A),
+ /* K127 */ be_nested_str(_X3Cfieldset_X20id_X3D_X27store_X27_X3E),
+ /* K128 */ be_nested_str(_X3Cdiv_X20class_X3D_X27store_X2Dheader_X27_X3E_X3Cspan_X3EBrowse_X20Extensions_X3C_X2Fspan_X3E_X3Cspan_X20class_X3D_X27store_X2Dstats_X27_X3E_X25s_X20available_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E),
+ /* K129 */ be_nested_str(_X3Cinput_X20type_X3D_X27text_X27_X20placeholder_X3D_X27Search_X20extensions_X2E_X2E_X2E_X27_X20onkeyup_X3D_X27filterExtensions_X28this_X2Evalue_X29_X27_X3E_X3Cp_X3E_X3C_X2Fp_X3E),
+ /* K130 */ be_nested_str(list_installed_ext),
+ /* K131 */ be_nested_str(_X0A),
+ /* K132 */ be_nested_str(manifest_decode),
+ /* K133 */ be_nested_str(version_string),
+ /* K134 */ be_nested_str(file),
+ /* K135 */ be_nested_str(replace),
+ /* K136 */ be_nested_str(_X5Cn),
+ /* K137 */ be_nested_str(_X3Cbr_X3E),
+ /* K138 */ be_nested_str(author),
+ /* K139 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Dstore_X2Ditem_X27_X3E_X3Cdiv_X20class_X3D_X27ext_X2Dheader_X27_X20onclick_X3D_X27toggleDesc_X28_X22_X25s_X22_X29_X27_X3E_X3Cdiv_X20class_X3D_X27ext_X2Dtitle_X27_X3E_X3Cspan_X20class_X3D_X27ext_X2Dname_X27_X3E_X25s_X3C_X2Fspan_X3E_X3Cspan_X20class_X3D_X27ext_X2Dversion_X27_X3E_X3Csmall_X3E_X25s_X3C_X2Fsmall_X3E_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E),
+ /* K140 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Dbadges_X27_X3E_X3Cspan_X20class_X3D_X27update_X2Dbadge_X27_X3EUpgrade_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E),
+ /* K141 */ be_nested_str(_X3Cdiv_X20class_X3D_X27ext_X2Dbadges_X27_X3E_X3Cspan_X20class_X3D_X27installed_X2Dbadge_X27_X3EInstalled_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E),
+ /* K142 */ be_nested_str(_X3Cspan_X20id_X3D_X27arrow_X2D_X25s_X27_X20class_X3D_X27ext_X2Darrow_X27_X3E_XE2_X96_XB6_X3C_X2Fspan_X3E_X3C_X2Fdiv_X3E_X3Cdiv_X20id_X3D_X27desc_X2D_X25s_X27_X20class_X3D_X27ext_X2Ddetails_X27_X3E_X3Cdiv_X20class_X3D_X27ext_X2Ddesc_X27_X3E_X25s),
+ /* K143 */ be_nested_str(_X3Cbr_X3E_X25s_X20_XE2_X86_X92_X20_X25s),
+ /* K144 */ be_nested_str(_X3C_X2Fdiv_X3E_X3Cform_X20action_X3D_X27_X2Fext_X27_X20method_X3D_X27post_X27_X20class_X3D_X27ext_X2Dactions_X27_X3E_X3Cdiv_X20style_X3D_X27width_X3A30_X25_X27_X3E_X3C_X2Fdiv_X3E),
+ /* K145 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X27_X20name_X3D_X27u_X25s_X27_X20onclick_X3D_X27return_X20confirm_X28_X22Confirm_X20upgrade_X20of_X20_X25s_X22_X29_X27_X3EUpgrade_X3C_X2Fbutton_X3E),
+ /* K146 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X27_X20style_X3D_X27visibility_X3Ahidden_X3B_X27_X3E_X3C_X2Fbutton_X3E),
+ /* K147 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X20bred_X27_X20name_X3D_X27d_X25s_X27_X20onclick_X3D_X27return_X20confirm_X28_X22Confirm_X20deletion_X20of_X20_X25s_X22_X29_X27_X3EUninstall_X3C_X2Fbutton_X3E),
+ /* K148 */ be_nested_str(_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X27_X20style_X3D_X27visibility_X3Ahidden_X3B_X27_X3E_X3C_X2Fbutton_X3E_X3Cbutton_X20type_X3D_X27submit_X27_X20class_X3D_X27btn_X2Daction_X20bgrn_X27_X20name_X3D_X27i_X25s_X27_X20onclick_X3D_X27return_X20confirm_X28_X22Confirm_X20installation_X20of_X20_X25s_X22_X29_X27_X3EInstall_X3C_X2Fbutton_X3E),
+ /* K149 */ be_nested_str(v_X25s_X2E_X25s_X2E_X25s_X2E_X25s),
+ /* K150 */ be_nested_str(has_arg),
+ /* K151 */ be_nested_str(store),
+ /* K152 */ be_nested_str(page_extensions_store),
+ /* K153 */ be_nested_str(page_extensions_mgr),
+ /* K154 */ be_nested_str(EXT_X3A_X20unable_X20to_X20parse_X20manifest_X20line_X20_X27_X25s_X27),
+ /* K155 */ be_nested_str(EXT_X3A_X20manifest_X20is_X20missing_X20_X27name_X2Ffile_X2Fversion_X27_X20in_X20map_X20_X27_X25s_X27),
+ /* K156 */ be_nested_str(_X5Bno_X20description_X5D),
+};
+
+
+extern const bclass be_class_Extension_manager;
+
+/********************************************************************
+** Solidified function: load_manifest
+********************************************************************/
+be_local_closure(class_Extension_manager_load_manifest, /* name */
+ be_nested_proto(
+ 11, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_load_manifest,
+ &be_const_str_solidified,
+ ( &(const binstruction[70]) { /* code */
+ 0xA8020035, // 0000 EXBLK 0 #0037
+ 0xB8060000, // 0001 GETNGBL R1 K0
+ 0x8C040301, // 0002 GETMET R1 R1 K1
+ 0x7C040200, // 0003 CALL R1 1
+ 0x60080018, // 0004 GETGBL R2 G24
+ 0x580C0002, // 0005 LDCONST R3 K2
+ 0xB8120000, // 0006 GETNGBL R4 K0
+ 0x8C100903, // 0007 GETMET R4 R4 K3
+ 0x7C100200, // 0008 CALL R4 1
+ 0x7C080400, // 0009 CALL R2 2
+ 0x600C0018, // 000A GETGBL R3 G24
+ 0x58100004, // 000B LDCONST R4 K4
+ 0x88140105, // 000C GETMBR R5 R0 K5
+ 0x88180106, // 000D GETMBR R6 R0 K6
+ 0x5C1C0200, // 000E MOVE R7 R1
+ 0x5C200400, // 000F MOVE R8 R2
+ 0x7C0C0A00, // 0010 CALL R3 5
+ 0xB8120E00, // 0011 GETNGBL R4 K7
+ 0x60140018, // 0012 GETGBL R5 G24
+ 0x58180008, // 0013 LDCONST R6 K8
+ 0x5C1C0600, // 0014 MOVE R7 R3
+ 0x7C140400, // 0015 CALL R5 2
+ 0x58180009, // 0016 LDCONST R6 K9
+ 0x7C100400, // 0017 CALL R4 2
+ 0xB8121400, // 0018 GETNGBL R4 K10
+ 0x7C100000, // 0019 CALL R4 0
+ 0x8C14090B, // 001A GETMET R5 R4 K11
+ 0x5C1C0600, // 001B MOVE R7 R3
+ 0x7C140400, // 001C CALL R5 2
+ 0x8C14090C, // 001D GETMET R5 R4 K12
+ 0x7C140200, // 001E CALL R5 1
+ 0x541A00C7, // 001F LDINT R6 200
+ 0x20180A06, // 0020 NE R6 R5 R6
+ 0x781A000C, // 0021 JMPF R6 #002F
+ 0xB81A0000, // 0022 GETNGBL R6 K0
+ 0x8C180D07, // 0023 GETMET R6 R6 K7
+ 0x60200018, // 0024 GETGBL R8 G24
+ 0x5824000D, // 0025 LDCONST R9 K13
+ 0x5C280A00, // 0026 MOVE R10 R5
+ 0x7C200400, // 0027 CALL R8 2
+ 0x5824000E, // 0028 LDCONST R9 K14
+ 0x7C180600, // 0029 CALL R6 3
+ 0x60180018, // 002A GETGBL R6 G24
+ 0x581C000F, // 002B LDCONST R7 K15
+ 0x5C200A00, // 002C MOVE R8 R5
+ 0x7C180400, // 002D CALL R6 2
+ 0xB0062006, // 002E RAISE 1 K16 R6
+ 0x8C180911, // 002F GETMET R6 R4 K17
+ 0x7C180200, // 0030 CALL R6 1
+ 0x8C1C0912, // 0031 GETMET R7 R4 K18
+ 0x7C1C0200, // 0032 CALL R7 1
+ 0xA8040001, // 0033 EXBLK 1 1
+ 0x80040C00, // 0034 RET 1 R6
+ 0xA8040001, // 0035 EXBLK 1 1
+ 0x7002000D, // 0036 JMP #0045
+ 0xAC040002, // 0037 CATCH R1 0 2
+ 0x7002000A, // 0038 JMP #0044
+ 0xB80E0000, // 0039 GETNGBL R3 K0
+ 0x8C0C0707, // 003A GETMET R3 R3 K7
+ 0x60140018, // 003B GETGBL R5 G24
+ 0x58180013, // 003C LDCONST R6 K19
+ 0x5C1C0200, // 003D MOVE R7 R1
+ 0x5C200400, // 003E MOVE R8 R2
+ 0x7C140600, // 003F CALL R5 3
+ 0x5818000E, // 0040 LDCONST R6 K14
+ 0x7C0C0600, // 0041 CALL R3 3
+ 0xB0040202, // 0042 RAISE 1 R1 R2
+ 0x70020000, // 0043 JMP #0045
+ 0xB0080000, // 0044 RAISE 2 R0 R0
+ 0x80000000, // 0045 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: tapp_name
+********************************************************************/
+be_local_closure(class_Extension_manager_tapp_name, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 1, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_tapp_name,
+ &be_const_str_solidified,
+ ( &(const binstruction[44]) { /* code */
+ 0x58040014, // 0000 LDCONST R1 K20
+ 0xA40A2A00, // 0001 IMPORT R2 K21
+ 0x580C0016, // 0002 LDCONST R3 K22
+ 0x6010000C, // 0003 GETGBL R4 G12
+ 0x5C140000, // 0004 MOVE R5 R0
+ 0x7C100200, // 0005 CALL R4 1
+ 0x04100917, // 0006 SUB R4 R4 K23
+ 0x94140004, // 0007 GETIDX R5 R0 R4
+ 0x1C140B18, // 0008 EQ R5 R5 K24
+ 0x74160002, // 0009 JMPT R5 #000D
+ 0x94140004, // 000A GETIDX R5 R0 R4
+ 0x1C140B19, // 000B EQ R5 R5 K25
+ 0x78160000, // 000C JMPF R5 #000E
+ 0x04100917, // 000D SUB R4 R4 K23
+ 0x8C14051A, // 000E GETMET R5 R2 K26
+ 0x5C1C0000, // 000F MOVE R7 R0
+ 0x5820001B, // 0010 LDCONST R8 K27
+ 0x00240917, // 0011 ADD R9 R4 K23
+ 0x6028000C, // 0012 GETGBL R10 G12
+ 0x582C001B, // 0013 LDCONST R11 K27
+ 0x7C280200, // 0014 CALL R10 1
+ 0x0424120A, // 0015 SUB R9 R9 R10
+ 0x7C140800, // 0016 CALL R5 4
+ 0x28140B16, // 0017 GE R5 R5 K22
+ 0x78160003, // 0018 JMPF R5 #001D
+ 0x6014000C, // 0019 GETGBL R5 G12
+ 0x5818001B, // 001A LDCONST R6 K27
+ 0x7C140200, // 001B CALL R5 1
+ 0x04100805, // 001C SUB R4 R4 R5
+ 0x4C140000, // 001D LDNIL R5
+ 0x8C18051A, // 001E GETMET R6 R2 K26
+ 0x5C200000, // 001F MOVE R8 R0
+ 0x5824001C, // 0020 LDCONST R9 K28
+ 0x5C280600, // 0021 MOVE R10 R3
+ 0x7C180800, // 0022 CALL R6 4
+ 0x5C140C00, // 0023 MOVE R5 R6
+ 0x28180D16, // 0024 GE R6 R6 K22
+ 0x781A0002, // 0025 JMPF R6 #0029
+ 0x00180B17, // 0026 ADD R6 R5 K23
+ 0x5C0C0C00, // 0027 MOVE R3 R6
+ 0x7001FFF4, // 0028 JMP #001E
+ 0x40180604, // 0029 CONNECT R6 R3 R4
+ 0x94180006, // 002A GETIDX R6 R0 R6
+ 0x80040C00, // 002B RET 1 R6
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: page_extensions_mgr
+********************************************************************/
+be_local_closure(class_Extension_manager_page_extensions_mgr, /* name */
+ be_nested_proto(
+ 21, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_page_extensions_mgr,
+ &be_const_str_solidified,
+ ( &(const binstruction[161]) { /* code */
+ 0xA4063A00, // 0000 IMPORT R1 K29
+ 0xA40A2A00, // 0001 IMPORT R2 K21
+ 0x8C0C031E, // 0002 GETMET R3 R1 K30
+ 0x5814001F, // 0003 LDCONST R5 K31
+ 0x7C0C0400, // 0004 CALL R3 2
+ 0x8C0C0320, // 0005 GETMET R3 R1 K32
+ 0x7C0C0200, // 0006 CALL R3 1
+ 0x8C0C0321, // 0007 GETMET R3 R1 K33
+ 0x58140022, // 0008 LDCONST R5 K34
+ 0x7C0C0400, // 0009 CALL R3 2
+ 0x8C0C0321, // 000A GETMET R3 R1 K33
+ 0x58140023, // 000B LDCONST R5 K35
+ 0x7C0C0400, // 000C CALL R3 2
+ 0x8C0C0321, // 000D GETMET R3 R1 K33
+ 0x58140024, // 000E LDCONST R5 K36
+ 0x7C0C0400, // 000F CALL R3 2
+ 0x8C0C0125, // 0010 GETMET R3 R0 K37
+ 0x50140200, // 0011 LDBOOL R5 1 0
+ 0x7C0C0400, // 0012 CALL R3 2
+ 0x6010000C, // 0013 GETGBL R4 G12
+ 0x5C140600, // 0014 MOVE R5 R3
+ 0x7C100200, // 0015 CALL R4 1
+ 0x24100916, // 0016 GT R4 R4 K22
+ 0x78120076, // 0017 JMPF R4 #008F
+ 0x58100016, // 0018 LDCONST R4 K22
+ 0x6014000C, // 0019 GETGBL R5 G12
+ 0x5C180600, // 001A MOVE R6 R3
+ 0x7C140200, // 001B CALL R5 1
+ 0x14140805, // 001C LT R5 R4 R5
+ 0x7816006F, // 001D JMPF R5 #008E
+ 0x24140916, // 001E GT R5 R4 K22
+ 0x78160002, // 001F JMPF R5 #0023
+ 0x8C140321, // 0020 GETMET R5 R1 K33
+ 0x581C0026, // 0021 LDCONST R7 K38
+ 0x7C140400, // 0022 CALL R5 2
+ 0x8C140727, // 0023 GETMET R5 R3 K39
+ 0x5C1C0800, // 0024 MOVE R7 R4
+ 0x7C140400, // 0025 CALL R5 2
+ 0x8C180328, // 0026 GETMET R6 R1 K40
+ 0x5C200A00, // 0027 MOVE R8 R5
+ 0x7C180400, // 0028 CALL R6 2
+ 0xB81E0000, // 0029 GETNGBL R7 K0
+ 0x8C1C0F29, // 002A GETMET R7 R7 K41
+ 0x5C240A00, // 002B MOVE R9 R5
+ 0x7C1C0400, // 002C CALL R7 2
+ 0xB8220000, // 002D GETNGBL R8 K0
+ 0x8820112A, // 002E GETMBR R8 R8 K42
+ 0x78220005, // 002F JMPF R8 #0036
+ 0xB8220000, // 0030 GETNGBL R8 K0
+ 0x8820112A, // 0031 GETMBR R8 R8 K42
+ 0x8C20112B, // 0032 GETMET R8 R8 K43
+ 0x5C280A00, // 0033 MOVE R10 R5
+ 0x7C200400, // 0034 CALL R8 2
+ 0x70020000, // 0035 JMP #0037
+ 0x50200000, // 0036 LDBOOL R8 0 0
+ 0x78220001, // 0037 JMPF R8 #003A
+ 0x5824002C, // 0038 LDCONST R9 K44
+ 0x70020000, // 0039 JMP #003B
+ 0x5824002D, // 003A LDCONST R9 K45
+ 0x8C280F1A, // 003B GETMET R10 R7 K26
+ 0x5830002E, // 003C LDCONST R12 K46
+ 0x50340000, // 003D LDBOOL R13 0 0
+ 0x7C280600, // 003E CALL R10 3
+ 0x582C002F, // 003F LDCONST R11 K47
+ 0x58300030, // 0040 LDCONST R12 K48
+ 0x8C340321, // 0041 GETMET R13 R1 K33
+ 0x583C0031, // 0042 LDCONST R15 K49
+ 0x7C340400, // 0043 CALL R13 2
+ 0x8C340321, // 0044 GETMET R13 R1 K33
+ 0x603C0018, // 0045 GETGBL R15 G24
+ 0x58400032, // 0046 LDCONST R16 K50
+ 0x5C440C00, // 0047 MOVE R17 R6
+ 0x8C480328, // 0048 GETMET R18 R1 K40
+ 0x94500F33, // 0049 GETIDX R20 R7 K51
+ 0x7C480400, // 004A CALL R18 2
+ 0x5C4C1200, // 004B MOVE R19 R9
+ 0x7C3C0800, // 004C CALL R15 4
+ 0x7C340400, // 004D CALL R13 2
+ 0x8C340321, // 004E GETMET R13 R1 K33
+ 0x603C0018, // 004F GETGBL R15 G24
+ 0x58400034, // 0050 LDCONST R16 K52
+ 0x8C440328, // 0051 GETMET R17 R1 K40
+ 0x944C0F35, // 0052 GETIDX R19 R7 K53
+ 0x7C440400, // 0053 CALL R17 2
+ 0x7C3C0400, // 0054 CALL R15 2
+ 0x7C340400, // 0055 CALL R13 2
+ 0x8C340321, // 0056 GETMET R13 R1 K33
+ 0x583C0036, // 0057 LDCONST R15 K54
+ 0x7C340400, // 0058 CALL R13 2
+ 0x8C340321, // 0059 GETMET R13 R1 K33
+ 0x583C0037, // 005A LDCONST R15 K55
+ 0x7C340400, // 005B CALL R13 2
+ 0x8C340321, // 005C GETMET R13 R1 K33
+ 0x603C0018, // 005D GETGBL R15 G24
+ 0x58400038, // 005E LDCONST R16 K56
+ 0x78220001, // 005F JMPF R8 #0062
+ 0x5C441600, // 0060 MOVE R17 R11
+ 0x70020000, // 0061 JMP #0063
+ 0x5C441800, // 0062 MOVE R17 R12
+ 0x78220001, // 0063 JMPF R8 #0066
+ 0x58480039, // 0064 LDCONST R18 K57
+ 0x70020000, // 0065 JMP #0067
+ 0x5848003A, // 0066 LDCONST R18 K58
+ 0x5C4C0C00, // 0067 MOVE R19 R6
+ 0x78220001, // 0068 JMPF R8 #006B
+ 0x5850003B, // 0069 LDCONST R20 K59
+ 0x70020000, // 006A JMP #006C
+ 0x5850003C, // 006B LDCONST R20 K60
+ 0x7C3C0A00, // 006C CALL R15 5
+ 0x7C340400, // 006D CALL R13 2
+ 0x8C340321, // 006E GETMET R13 R1 K33
+ 0x603C0018, // 006F GETGBL R15 G24
+ 0x5840003D, // 0070 LDCONST R16 K61
+ 0x782A0001, // 0071 JMPF R10 #0074
+ 0x5844002D, // 0072 LDCONST R17 K45
+ 0x70020000, // 0073 JMP #0075
+ 0x5C441800, // 0074 MOVE R17 R12
+ 0x782A0001, // 0075 JMPF R10 #0078
+ 0x5848003E, // 0076 LDCONST R18 K62
+ 0x70020000, // 0077 JMP #0079
+ 0x5848003F, // 0078 LDCONST R18 K63
+ 0x5C4C0C00, // 0079 MOVE R19 R6
+ 0x782A0001, // 007A JMPF R10 #007D
+ 0x58500040, // 007B LDCONST R20 K64
+ 0x70020000, // 007C JMP #007E
+ 0x58500041, // 007D LDCONST R20 K65
+ 0x7C3C0A00, // 007E CALL R15 5
+ 0x7C340400, // 007F CALL R13 2
+ 0x8C340321, // 0080 GETMET R13 R1 K33
+ 0x603C0018, // 0081 GETGBL R15 G24
+ 0x58400042, // 0082 LDCONST R16 K66
+ 0x5C440C00, // 0083 MOVE R17 R6
+ 0x8C480328, // 0084 GETMET R18 R1 K40
+ 0x5C500A00, // 0085 MOVE R20 R5
+ 0x7C480400, // 0086 CALL R18 2
+ 0x7C3C0600, // 0087 CALL R15 3
+ 0x7C340400, // 0088 CALL R13 2
+ 0x8C340321, // 0089 GETMET R13 R1 K33
+ 0x583C0043, // 008A LDCONST R15 K67
+ 0x7C340400, // 008B CALL R13 2
+ 0x00100917, // 008C ADD R4 R4 K23
+ 0x7001FF8A, // 008D JMP #0019
+ 0x70020002, // 008E JMP #0092
+ 0x8C100321, // 008F GETMET R4 R1 K33
+ 0x58180044, // 0090 LDCONST R6 K68
+ 0x7C100400, // 0091 CALL R4 2
+ 0x8C100321, // 0092 GETMET R4 R1 K33
+ 0x58180045, // 0093 LDCONST R6 K69
+ 0x7C100400, // 0094 CALL R4 2
+ 0x8C100321, // 0095 GETMET R4 R1 K33
+ 0x58180046, // 0096 LDCONST R6 K70
+ 0x7C100400, // 0097 CALL R4 2
+ 0x8C100321, // 0098 GETMET R4 R1 K33
+ 0x58180047, // 0099 LDCONST R6 K71
+ 0x7C100400, // 009A CALL R4 2
+ 0x8C100348, // 009B GETMET R4 R1 K72
+ 0x88180349, // 009C GETMBR R6 R1 K73
+ 0x7C100400, // 009D CALL R4 2
+ 0x8C10034A, // 009E GETMET R4 R1 K74
+ 0x7C100200, // 009F CALL R4 1
+ 0x80000000, // 00A0 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: install_from_store
+********************************************************************/
+be_local_closure(class_Extension_manager_install_from_store, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_install_from_store,
+ &be_const_str_solidified,
+ ( &(const binstruction[72]) { /* code */
+ 0xA40A2A00, // 0000 IMPORT R2 K21
+ 0x8C0C014B, // 0001 GETMET R3 R0 K75
+ 0x5C140200, // 0002 MOVE R5 R1
+ 0x7C0C0400, // 0003 CALL R3 2
+ 0x5C040600, // 0004 MOVE R1 R3
+ 0x8C0C054C, // 0005 GETMET R3 R2 K76
+ 0x5C140200, // 0006 MOVE R5 R1
+ 0x5818001B, // 0007 LDCONST R6 K27
+ 0x7C0C0600, // 0008 CALL R3 3
+ 0x740E0000, // 0009 JMPT R3 #000B
+ 0x0004031B, // 000A ADD R1 R1 K27
+ 0x600C0018, // 000B GETGBL R3 G24
+ 0x5810004D, // 000C LDCONST R4 K77
+ 0x88140105, // 000D GETMBR R5 R0 K5
+ 0x8818014E, // 000E GETMBR R6 R0 K78
+ 0x5C1C0200, // 000F MOVE R7 R1
+ 0x7C0C0800, // 0010 CALL R3 4
+ 0xB8120E00, // 0011 GETNGBL R4 K7
+ 0x60140018, // 0012 GETGBL R5 G24
+ 0x5818004F, // 0013 LDCONST R6 K79
+ 0x5C1C0600, // 0014 MOVE R7 R3
+ 0x7C140400, // 0015 CALL R5 2
+ 0x58180009, // 0016 LDCONST R6 K9
+ 0x7C100400, // 0017 CALL R4 2
+ 0xA802001E, // 0018 EXBLK 0 #0038
+ 0x60100018, // 0019 GETGBL R4 G24
+ 0x58140050, // 001A LDCONST R5 K80
+ 0x88180151, // 001B GETMBR R6 R0 K81
+ 0x5C1C0200, // 001C MOVE R7 R1
+ 0x7C100600, // 001D CALL R4 3
+ 0xB8161400, // 001E GETNGBL R5 K10
+ 0x7C140000, // 001F CALL R5 0
+ 0x8C180B0B, // 0020 GETMET R6 R5 K11
+ 0x5C200600, // 0021 MOVE R8 R3
+ 0x7C180400, // 0022 CALL R6 2
+ 0x8C180B0C, // 0023 GETMET R6 R5 K12
+ 0x7C180200, // 0024 CALL R6 1
+ 0x541E00C7, // 0025 LDINT R7 200
+ 0x201C0C07, // 0026 NE R7 R6 R7
+ 0x781E0008, // 0027 JMPF R7 #0031
+ 0xB81E0E00, // 0028 GETNGBL R7 K7
+ 0x60200018, // 0029 GETGBL R8 G24
+ 0x58240052, // 002A LDCONST R9 K82
+ 0x5C280C00, // 002B MOVE R10 R6
+ 0x7C200400, // 002C CALL R8 2
+ 0x5824000E, // 002D LDCONST R9 K14
+ 0x7C1C0400, // 002E CALL R7 2
+ 0xA8040001, // 002F EXBLK 1 1
+ 0x80000E00, // 0030 RET 0
+ 0x8C1C0B53, // 0031 GETMET R7 R5 K83
+ 0x5C240800, // 0032 MOVE R9 R4
+ 0x7C1C0400, // 0033 CALL R7 2
+ 0x8C1C0B12, // 0034 GETMET R7 R5 K18
+ 0x7C1C0200, // 0035 CALL R7 1
+ 0xA8040001, // 0036 EXBLK 1 1
+ 0x7002000E, // 0037 JMP #0047
+ 0xAC100002, // 0038 CATCH R4 0 2
+ 0x7002000B, // 0039 JMP #0046
+ 0xB81A0000, // 003A GETNGBL R6 K0
+ 0x8C180D07, // 003B GETMET R6 R6 K7
+ 0x60200018, // 003C GETGBL R8 G24
+ 0x58240054, // 003D LDCONST R9 K84
+ 0x5C280800, // 003E MOVE R10 R4
+ 0x5C2C0A00, // 003F MOVE R11 R5
+ 0x7C200600, // 0040 CALL R8 3
+ 0x5824000E, // 0041 LDCONST R9 K14
+ 0x7C180600, // 0042 CALL R6 3
+ 0x4C180000, // 0043 LDNIL R6
+ 0x80040C00, // 0044 RET 1 R6
+ 0x70020000, // 0045 JMP #0047
+ 0xB0080000, // 0046 RAISE 2 R0 R0
+ 0x80000000, // 0047 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: web_add_button
+********************************************************************/
+be_local_closure(class_Extension_manager_web_add_button, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_web_add_button,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0xA4063A00, // 0000 IMPORT R1 K29
+ 0x8C080321, // 0001 GETMET R2 R1 K33
+ 0x58100055, // 0002 LDCONST R4 K85
+ 0x7C080400, // 0003 CALL R2 2
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: list_installed_ext
+********************************************************************/
+be_local_closure(class_Extension_manager_list_installed_ext, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 0, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_list_installed_ext,
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0x58000014, // 0000 LDCONST R0 K20
+ 0x60040013, // 0001 GETGBL R1 G19
+ 0x7C040000, // 0002 CALL R1 0
+ 0x60080010, // 0003 GETGBL R2 G16
+ 0x8C0C0156, // 0004 GETMET R3 R0 K86
+ 0x7C0C0200, // 0005 CALL R3 1
+ 0x7C080200, // 0006 CALL R2 1
+ 0xA8020006, // 0007 EXBLK 0 #000F
+ 0x5C0C0400, // 0008 MOVE R3 R2
+ 0x7C0C0000, // 0009 CALL R3 0
+ 0x8C10014B, // 000A GETMET R4 R0 K75
+ 0x5C180600, // 000B MOVE R6 R3
+ 0x7C100400, // 000C CALL R4 2
+ 0x98040803, // 000D SETIDX R1 R4 R3
+ 0x7001FFF8, // 000E JMP #0008
+ 0x58080057, // 000F LDCONST R2 K87
+ 0xAC080200, // 0010 CATCH R2 1 0
+ 0xB0080000, // 0011 RAISE 2 R0 R0
+ 0x80040200, // 0012 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: list_extensions
+********************************************************************/
+be_local_closure(class_Extension_manager_list_extensions, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 0, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_list_extensions,
+ &be_const_str_solidified,
+ ( &(const binstruction[32]) { /* code */
+ 0x58000014, // 0000 LDCONST R0 K20
+ 0xA406B000, // 0001 IMPORT R1 K88
+ 0xA40A2A00, // 0002 IMPORT R2 K21
+ 0x600C0012, // 0003 GETGBL R3 G18
+ 0x7C0C0000, // 0004 CALL R3 0
+ 0x60100010, // 0005 GETGBL R4 G16
+ 0x8C140359, // 0006 GETMET R5 R1 K89
+ 0x881C0151, // 0007 GETMBR R7 R0 K81
+ 0x7C140400, // 0008 CALL R5 2
+ 0x7C100200, // 0009 CALL R4 1
+ 0xA8020010, // 000A EXBLK 0 #001C
+ 0x5C140800, // 000B MOVE R5 R4
+ 0x7C140000, // 000C CALL R5 0
+ 0x8C18054C, // 000D GETMET R6 R2 K76
+ 0x5C200A00, // 000E MOVE R8 R5
+ 0x5824001B, // 000F LDCONST R9 K27
+ 0x7C180600, // 0010 CALL R6 3
+ 0x741A0004, // 0011 JMPT R6 #0017
+ 0x8C18054C, // 0012 GETMET R6 R2 K76
+ 0x5C200A00, // 0013 MOVE R8 R5
+ 0x5824005A, // 0014 LDCONST R9 K90
+ 0x7C180600, // 0015 CALL R6 3
+ 0x781A0003, // 0016 JMPF R6 #001B
+ 0x8C18075B, // 0017 GETMET R6 R3 K91
+ 0x88200151, // 0018 GETMBR R8 R0 K81
+ 0x00201005, // 0019 ADD R8 R8 R5
+ 0x7C180400, // 001A CALL R6 2
+ 0x7001FFEE, // 001B JMP #000B
+ 0x58100057, // 001C LDCONST R4 K87
+ 0xAC100200, // 001D CATCH R4 1 0
+ 0xB0080000, // 001E RAISE 2 R0 R0
+ 0x80040600, // 001F RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: page_extensions_ctl
+********************************************************************/
+be_local_closure(class_Extension_manager_page_extensions_ctl, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_page_extensions_ctl,
+ &be_const_str_solidified,
+ ( &(const binstruction[165]) { /* code */
+ 0xA4063A00, // 0000 IMPORT R1 K29
+ 0xA40AB000, // 0001 IMPORT R2 K88
+ 0xA40E2A00, // 0002 IMPORT R3 K21
+ 0x8C10035C, // 0003 GETMET R4 R1 K92
+ 0x7C100200, // 0004 CALL R4 1
+ 0x74120001, // 0005 JMPT R4 #0008
+ 0x4C100000, // 0006 LDNIL R4
+ 0x80040800, // 0007 RET 1 R4
+ 0xA8020079, // 0008 EXBLK 0 #0083
+ 0x8C10035D, // 0009 GETMET R4 R1 K93
+ 0x58180016, // 000A LDCONST R6 K22
+ 0x7C100400, // 000B CALL R4 2
+ 0x94140916, // 000C GETIDX R5 R4 K22
+ 0x401A2F5E, // 000D CONNECT R6 K23 K94
+ 0x94180806, // 000E GETIDX R6 R4 R6
+ 0x1C1C0B3A, // 000F EQ R7 R5 K58
+ 0x781E0006, // 0010 JMPF R7 #0018
+ 0x201C0D2D, // 0011 NE R7 R6 K45
+ 0x781E0003, // 0012 JMPF R7 #0017
+ 0xB81E0000, // 0013 GETNGBL R7 K0
+ 0x8C1C0F5F, // 0014 GETMET R7 R7 K95
+ 0x5C240C00, // 0015 MOVE R9 R6
+ 0x7C1C0400, // 0016 CALL R7 2
+ 0x70020063, // 0017 JMP #007C
+ 0x1C1C0B39, // 0018 EQ R7 R5 K57
+ 0x781E0004, // 0019 JMPF R7 #001F
+ 0xB81E0000, // 001A GETNGBL R7 K0
+ 0x8C1C0F60, // 001B GETMET R7 R7 K96
+ 0x5C240C00, // 001C MOVE R9 R6
+ 0x7C1C0400, // 001D CALL R7 2
+ 0x7002005C, // 001E JMP #007C
+ 0x1C1C0B3E, // 001F EQ R7 R5 K62
+ 0x741E0001, // 0020 JMPT R7 #0023
+ 0x1C1C0B3F, // 0021 EQ R7 R5 K63
+ 0x781E0039, // 0022 JMPF R7 #005D
+ 0x4C1C0000, // 0023 LDNIL R7
+ 0x1C200B3E, // 0024 EQ R8 R5 K62
+ 0x7822000A, // 0025 JMPF R8 #0031
+ 0x8C20074C, // 0026 GETMET R8 R3 K76
+ 0x5C280C00, // 0027 MOVE R10 R6
+ 0x582C001B, // 0028 LDCONST R11 K27
+ 0x7C200600, // 0029 CALL R8 3
+ 0x78220005, // 002A JMPF R8 #0031
+ 0x5421FFFA, // 002B LDINT R8 -5
+ 0x40222C08, // 002C CONNECT R8 K22 R8
+ 0x94200C08, // 002D GETIDX R8 R6 R8
+ 0x00201161, // 002E ADD R8 R8 K97
+ 0x5C1C1000, // 002F MOVE R7 R8
+ 0x7002000B, // 0030 JMP #003D
+ 0x1C200B3F, // 0031 EQ R8 R5 K63
+ 0x78220009, // 0032 JMPF R8 #003D
+ 0x8C20074C, // 0033 GETMET R8 R3 K76
+ 0x5C280C00, // 0034 MOVE R10 R6
+ 0x582C005A, // 0035 LDCONST R11 K90
+ 0x7C200600, // 0036 CALL R8 3
+ 0x78220004, // 0037 JMPF R8 #003D
+ 0x5421FFF9, // 0038 LDINT R8 -6
+ 0x40222C08, // 0039 CONNECT R8 K22 R8
+ 0x94200C08, // 003A GETIDX R8 R6 R8
+ 0x00201162, // 003B ADD R8 R8 K98
+ 0x5C1C1000, // 003C MOVE R7 R8
+ 0x781E0016, // 003D JMPF R7 #0055
+ 0x8C200563, // 003E GETMET R8 R2 K99
+ 0x5C280C00, // 003F MOVE R10 R6
+ 0x5C2C0E00, // 0040 MOVE R11 R7
+ 0x7C200600, // 0041 CALL R8 3
+ 0x78220010, // 0042 JMPF R8 #0054
+ 0xB8260000, // 0043 GETNGBL R9 K0
+ 0x8824132A, // 0044 GETMBR R9 R9 K42
+ 0x8C24132B, // 0045 GETMET R9 R9 K43
+ 0x5C2C0C00, // 0046 MOVE R11 R6
+ 0x7C240400, // 0047 CALL R9 2
+ 0x7826000A, // 0048 JMPF R9 #0054
+ 0xB8260000, // 0049 GETNGBL R9 K0
+ 0x8824132A, // 004A GETMBR R9 R9 K42
+ 0xB82A0000, // 004B GETNGBL R10 K0
+ 0x8828152A, // 004C GETMBR R10 R10 K42
+ 0x94281406, // 004D GETIDX R10 R10 R6
+ 0x98240E0A, // 004E SETIDX R9 R7 R10
+ 0xB8260000, // 004F GETNGBL R9 K0
+ 0x8824132A, // 0050 GETMBR R9 R9 K42
+ 0x8C241364, // 0051 GETMET R9 R9 K100
+ 0x5C2C0C00, // 0052 MOVE R11 R6
+ 0x7C240400, // 0053 CALL R9 2
+ 0x70020006, // 0054 JMP #005C
+ 0xB8220E00, // 0055 GETNGBL R8 K7
+ 0x60240018, // 0056 GETGBL R9 G24
+ 0x58280065, // 0057 LDCONST R10 K101
+ 0x5C2C0800, // 0058 MOVE R11 R4
+ 0x7C240400, // 0059 CALL R9 2
+ 0x58280009, // 005A LDCONST R10 K9
+ 0x7C200400, // 005B CALL R8 2
+ 0x7002001E, // 005C JMP #007C
+ 0x1C1C0B66, // 005D EQ R7 R5 K102
+ 0x781E0009, // 005E JMPF R7 #0069
+ 0x201C0D2D, // 005F NE R7 R6 K45
+ 0x781E0006, // 0060 JMPF R7 #0068
+ 0xB81E0000, // 0061 GETNGBL R7 K0
+ 0x8C1C0F60, // 0062 GETMET R7 R7 K96
+ 0x5C240C00, // 0063 MOVE R9 R6
+ 0x7C1C0400, // 0064 CALL R7 2
+ 0x8C1C0564, // 0065 GETMET R7 R2 K100
+ 0x5C240C00, // 0066 MOVE R9 R6
+ 0x7C1C0400, // 0067 CALL R7 2
+ 0x70020012, // 0068 JMP #007C
+ 0x1C1C0B67, // 0069 EQ R7 R5 K103
+ 0x781E0009, // 006A JMPF R7 #0075
+ 0xB81E0000, // 006B GETNGBL R7 K0
+ 0x8C1C0F60, // 006C GETMET R7 R7 K96
+ 0x5C240C00, // 006D MOVE R9 R6
+ 0x7C1C0400, // 006E CALL R7 2
+ 0x8C1C0168, // 006F GETMET R7 R0 K104
+ 0x8C24014B, // 0070 GETMET R9 R0 K75
+ 0x5C2C0C00, // 0071 MOVE R11 R6
+ 0x7C240400, // 0072 CALL R9 2
+ 0x7C1C0400, // 0073 CALL R7 2
+ 0x70020006, // 0074 JMP #007C
+ 0x1C1C0B69, // 0075 EQ R7 R5 K105
+ 0x781E0004, // 0076 JMPF R7 #007C
+ 0x8C1C0168, // 0077 GETMET R7 R0 K104
+ 0x8C24014B, // 0078 GETMET R9 R0 K75
+ 0x5C2C0C00, // 0079 MOVE R11 R6
+ 0x7C240400, // 007A CALL R9 2
+ 0x7C1C0400, // 007B CALL R7 2
+ 0x8C1C036A, // 007C GETMET R7 R1 K106
+ 0x60240018, // 007D GETGBL R9 G24
+ 0x5828006B, // 007E LDCONST R10 K107
+ 0x7C240200, // 007F CALL R9 1
+ 0x7C1C0400, // 0080 CALL R7 2
+ 0xA8040001, // 0081 EXBLK 1 1
+ 0x70020020, // 0082 JMP #00A4
+ 0xAC100002, // 0083 CATCH R4 0 2
+ 0x7002001D, // 0084 JMP #00A3
+ 0xB81A0E00, // 0085 GETNGBL R6 K7
+ 0x601C0018, // 0086 GETGBL R7 G24
+ 0x5820006C, // 0087 LDCONST R8 K108
+ 0x5C240800, // 0088 MOVE R9 R4
+ 0x5C280A00, // 0089 MOVE R10 R5
+ 0x7C1C0600, // 008A CALL R7 3
+ 0x5820000E, // 008B LDCONST R8 K14
+ 0x7C180400, // 008C CALL R6 2
+ 0x8C18031E, // 008D GETMET R6 R1 K30
+ 0x5820006D, // 008E LDCONST R8 K109
+ 0x7C180400, // 008F CALL R6 2
+ 0x8C180320, // 0090 GETMET R6 R1 K32
+ 0x7C180200, // 0091 CALL R6 1
+ 0x8C180321, // 0092 GETMET R6 R1 K33
+ 0x60200018, // 0093 GETGBL R8 G24
+ 0x5824006E, // 0094 LDCONST R9 K110
+ 0x8C280328, // 0095 GETMET R10 R1 K40
+ 0x5C300800, // 0096 MOVE R12 R4
+ 0x7C280400, // 0097 CALL R10 2
+ 0x8C2C0328, // 0098 GETMET R11 R1 K40
+ 0x5C340A00, // 0099 MOVE R13 R5
+ 0x7C2C0400, // 009A CALL R11 2
+ 0x7C200600, // 009B CALL R8 3
+ 0x7C180400, // 009C CALL R6 2
+ 0x8C180348, // 009D GETMET R6 R1 K72
+ 0x8820036F, // 009E GETMBR R8 R1 K111
+ 0x7C180400, // 009F CALL R6 2
+ 0x8C18034A, // 00A0 GETMET R6 R1 K74
+ 0x7C180200, // 00A1 CALL R6 1
+ 0x70020000, // 00A2 JMP #00A4
+ 0xB0080000, // 00A3 RAISE 2 R0 R0
+ 0x80000000, // 00A4 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: web_add_handler
+********************************************************************/
+be_local_closure(class_Extension_manager_web_add_handler, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 1, /* has sup protos */
+ ( &(const struct bproto*[ 2]) {
+ be_nested_proto(
+ 2, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str(page_extensions_mgr_dispatcher),
+ }),
+ &be_const_str__X3Clambda_X3E,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x7C000200, // 0002 CALL R0 1
+ 0x80040000, // 0003 RET 1 R0
+ })
+ ),
+ be_nested_proto(
+ 2, /* nstack */
+ 0, /* argc */
+ 0, /* varg */
+ 1, /* has upvals */
+ ( &(const bupvaldesc[ 1]) { /* upvals */
+ be_local_const_upval(1, 0),
+ }),
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str(page_extensions_ctl),
+ }),
+ &be_const_str__X3Clambda_X3E,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 4]) { /* code */
+ 0x68000000, // 0000 GETUPV R0 U0
+ 0x8C000100, // 0001 GETMET R0 R0 K0
+ 0x7C000200, // 0002 CALL R0 1
+ 0x80040000, // 0003 RET 1 R0
+ })
+ ),
+ }),
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_web_add_handler,
+ &be_const_str_solidified,
+ ( &(const binstruction[13]) { /* code */
+ 0xA4063A00, // 0000 IMPORT R1 K29
+ 0x8C080370, // 0001 GETMET R2 R1 K112
+ 0x5810006B, // 0002 LDCONST R4 K107
+ 0x84140000, // 0003 CLOSURE R5 P0
+ 0x88180371, // 0004 GETMBR R6 R1 K113
+ 0x7C080800, // 0005 CALL R2 4
+ 0x8C080370, // 0006 GETMET R2 R1 K112
+ 0x5810006B, // 0007 LDCONST R4 K107
+ 0x84140001, // 0008 CLOSURE R5 P1
+ 0x88180372, // 0009 GETMBR R6 R1 K114
+ 0x7C080800, // 000A CALL R2 4
+ 0xA0000000, // 000B CLOSE R0
+ 0x80000000, // 000C RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: list_extensions_in_fs
+********************************************************************/
+be_local_closure(class_Extension_manager_list_extensions_in_fs, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 0, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_list_extensions_in_fs,
+ &be_const_str_solidified,
+ ( &(const binstruction[36]) { /* code */
+ 0x58000014, // 0000 LDCONST R0 K20
+ 0xA4062A00, // 0001 IMPORT R1 K21
+ 0xB80AE600, // 0002 GETNGBL R2 K115
+ 0x7C080000, // 0003 CALL R2 0
+ 0x600C0010, // 0004 GETGBL R3 G16
+ 0x8C100156, // 0005 GETMET R4 R0 K86
+ 0x7C100200, // 0006 CALL R4 1
+ 0x7C0C0200, // 0007 CALL R3 1
+ 0xA8020016, // 0008 EXBLK 0 #0020
+ 0x5C100600, // 0009 MOVE R4 R3
+ 0x7C100000, // 000A CALL R4 0
+ 0xB8160000, // 000B GETNGBL R5 K0
+ 0x8C140B29, // 000C GETMET R5 R5 K41
+ 0x5C1C0800, // 000D MOVE R7 R4
+ 0x7C140400, // 000E CALL R5 2
+ 0x4C180000, // 000F LDNIL R6
+ 0x20180A06, // 0010 NE R6 R5 R6
+ 0x781A0005, // 0011 JMPF R6 #0018
+ 0x8C180B1A, // 0012 GETMET R6 R5 K26
+ 0x58200033, // 0013 LDCONST R8 K51
+ 0x7C180400, // 0014 CALL R6 2
+ 0x781A0000, // 0015 JMPF R6 #0017
+ 0x98080C04, // 0016 SETIDX R2 R6 R4
+ 0x70020006, // 0017 JMP #001F
+ 0xB81A0E00, // 0018 GETNGBL R6 K7
+ 0x601C0018, // 0019 GETGBL R7 G24
+ 0x58200074, // 001A LDCONST R8 K116
+ 0x5C240800, // 001B MOVE R9 R4
+ 0x7C1C0400, // 001C CALL R7 2
+ 0x58200009, // 001D LDCONST R8 K9
+ 0x7C180400, // 001E CALL R6 2
+ 0x7001FFE8, // 001F JMP #0009
+ 0x580C0057, // 0020 LDCONST R3 K87
+ 0xAC0C0200, // 0021 CATCH R3 1 0
+ 0xB0080000, // 0022 RAISE 2 R0 R0
+ 0x80040400, // 0023 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: init
+********************************************************************/
+be_local_closure(class_Extension_manager_init, /* name */
+ be_nested_proto(
+ 4, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_init,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0xB8060000, // 0000 GETNGBL R1 K0
+ 0x8C040375, // 0001 GETMET R1 R1 K117
+ 0x5C0C0000, // 0002 MOVE R3 R0
+ 0x7C040400, // 0003 CALL R1 2
+ 0x80000000, // 0004 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: page_extensions_store
+********************************************************************/
+be_local_closure(class_Extension_manager_page_extensions_store, /* name */
+ be_nested_proto(
+ 33, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_page_extensions_store,
+ &be_const_str_solidified,
+ ( &(const binstruction[210]) { /* code */
+ 0xA4063A00, // 0000 IMPORT R1 K29
+ 0xA40A2A00, // 0001 IMPORT R2 K21
+ 0xA40EEC00, // 0002 IMPORT R3 K118
+ 0x8C100377, // 0003 GETMET R4 R1 K119
+ 0x541A00C7, // 0004 LDINT R6 200
+ 0x581C0078, // 0005 LDCONST R7 K120
+ 0x7C100600, // 0006 CALL R4 3
+ 0x4C100000, // 0007 LDNIL R4
+ 0xA8020004, // 0008 EXBLK 0 #000E
+ 0x8C140179, // 0009 GETMET R5 R0 K121
+ 0x7C140200, // 000A CALL R5 1
+ 0x5C100A00, // 000B MOVE R4 R5
+ 0xA8040001, // 000C EXBLK 1 1
+ 0x70020011, // 000D JMP #0020
+ 0xAC140002, // 000E CATCH R5 0 2
+ 0x7002000E, // 000F JMP #001F
+ 0x8C1C0321, // 0010 GETMET R7 R1 K33
+ 0x5824007A, // 0011 LDCONST R9 K122
+ 0x7C1C0400, // 0012 CALL R7 2
+ 0x8C1C0321, // 0013 GETMET R7 R1 K33
+ 0x60240018, // 0014 GETGBL R9 G24
+ 0x5828007B, // 0015 LDCONST R10 K123
+ 0x8C2C0328, // 0016 GETMET R11 R1 K40
+ 0x5C340C00, // 0017 MOVE R13 R6
+ 0x7C2C0400, // 0018 CALL R11 2
+ 0x7C240400, // 0019 CALL R9 2
+ 0x7C1C0400, // 001A CALL R7 2
+ 0x8C1C037C, // 001B GETMET R7 R1 K124
+ 0x7C1C0200, // 001C CALL R7 1
+ 0x80000E00, // 001D RET 0
+ 0x70020000, // 001E JMP #0020
+ 0xB0080000, // 001F RAISE 2 R0 R0
+ 0x8C14057D, // 0020 GETMET R5 R2 K125
+ 0x5C1C0800, // 0021 MOVE R7 R4
+ 0x5820007E, // 0022 LDCONST R8 K126
+ 0x7C140600, // 0023 CALL R5 3
+ 0x8C180321, // 0024 GETMET R6 R1 K33
+ 0x5820007F, // 0025 LDCONST R8 K127
+ 0x7C180400, // 0026 CALL R6 2
+ 0x8C180321, // 0027 GETMET R6 R1 K33
+ 0x60200018, // 0028 GETGBL R8 G24
+ 0x58240080, // 0029 LDCONST R9 K128
+ 0x5C280A00, // 002A MOVE R10 R5
+ 0x7C200400, // 002B CALL R8 2
+ 0x7C180400, // 002C CALL R6 2
+ 0x8C180321, // 002D GETMET R6 R1 K33
+ 0x58200081, // 002E LDCONST R8 K129
+ 0x7C180400, // 002F CALL R6 2
+ 0x8C180182, // 0030 GETMET R6 R0 K130
+ 0x7C180200, // 0031 CALL R6 1
+ 0x581C0017, // 0032 LDCONST R7 K23
+ 0x58200016, // 0033 LDCONST R8 K22
+ 0x6024000C, // 0034 GETGBL R9 G12
+ 0x5C280800, // 0035 MOVE R10 R4
+ 0x7C240200, // 0036 CALL R9 1
+ 0x14241009, // 0037 LT R9 R8 R9
+ 0x78260092, // 0038 JMPF R9 #00CC
+ 0x8C24051A, // 0039 GETMET R9 R2 K26
+ 0x5C2C0800, // 003A MOVE R11 R4
+ 0x58300083, // 003B LDCONST R12 K131
+ 0x5C341000, // 003C MOVE R13 R8
+ 0x7C240800, // 003D CALL R9 4
+ 0x14281316, // 003E LT R10 R9 K22
+ 0x782A0003, // 003F JMPF R10 #0044
+ 0x6028000C, // 0040 GETGBL R10 G12
+ 0x5C2C0800, // 0041 MOVE R11 R4
+ 0x7C280200, // 0042 CALL R10 1
+ 0x5C241400, // 0043 MOVE R9 R10
+ 0x40281009, // 0044 CONNECT R10 R8 R9
+ 0x9428080A, // 0045 GETIDX R10 R4 R10
+ 0x8C2C0184, // 0046 GETMET R11 R0 K132
+ 0x5C341400, // 0047 MOVE R13 R10
+ 0x7C2C0400, // 0048 CALL R11 2
+ 0x4C300000, // 0049 LDNIL R12
+ 0x2030160C, // 004A NE R12 R11 R12
+ 0x7832007C, // 004B JMPF R12 #00C9
+ 0x94301703, // 004C GETIDX R12 R11 K3
+ 0x8C340185, // 004D GETMET R13 R0 K133
+ 0x5C3C1800, // 004E MOVE R15 R12
+ 0x7C340400, // 004F CALL R13 2
+ 0x8C380328, // 0050 GETMET R14 R1 K40
+ 0x94401733, // 0051 GETIDX R16 R11 K51
+ 0x7C380400, // 0052 CALL R14 2
+ 0x943C1786, // 0053 GETIDX R15 R11 K134
+ 0x8C400587, // 0054 GETMET R16 R2 K135
+ 0x8C480328, // 0055 GETMET R18 R1 K40
+ 0x94501735, // 0056 GETIDX R20 R11 K53
+ 0x7C480400, // 0057 CALL R18 2
+ 0x584C0088, // 0058 LDCONST R19 K136
+ 0x58500089, // 0059 LDCONST R20 K137
+ 0x7C400800, // 005A CALL R16 4
+ 0x9444178A, // 005B GETIDX R17 R11 K138
+ 0x50480000, // 005C LDBOOL R18 0 0
+ 0x4C4C0000, // 005D LDNIL R19
+ 0x4C500000, // 005E LDNIL R20
+ 0x8C54014B, // 005F GETMET R21 R0 K75
+ 0x945C1786, // 0060 GETIDX R23 R11 K134
+ 0x7C540400, // 0061 CALL R21 2
+ 0x5C502A00, // 0062 MOVE R20 R21
+ 0x8C540328, // 0063 GETMET R21 R1 K40
+ 0x5C5C2800, // 0064 MOVE R23 R20
+ 0x7C540400, // 0065 CALL R21 2
+ 0x8C580D2B, // 0066 GETMET R22 R6 K43
+ 0x5C602800, // 0067 MOVE R24 R20
+ 0x7C580400, // 0068 CALL R22 2
+ 0x5C482C00, // 0069 MOVE R18 R22
+ 0x4C580000, // 006A LDNIL R22
+ 0x784A000F, // 006B JMPF R18 #007C
+ 0x945C0C14, // 006C GETIDX R23 R6 R20
+ 0x8C600328, // 006D GETMET R24 R1 K40
+ 0x5C682E00, // 006E MOVE R26 R23
+ 0x7C600400, // 006F CALL R24 2
+ 0x5C583000, // 0070 MOVE R22 R24
+ 0xB8620000, // 0071 GETNGBL R24 K0
+ 0x8C603129, // 0072 GETMET R24 R24 K41
+ 0x5C682E00, // 0073 MOVE R26 R23
+ 0x7C600400, // 0074 CALL R24 2
+ 0x60640009, // 0075 GETGBL R25 G9
+ 0x8C68311A, // 0076 GETMET R26 R24 K26
+ 0x58700003, // 0077 LDCONST R28 K3
+ 0x58740016, // 0078 LDCONST R29 K22
+ 0x7C680600, // 0079 CALL R26 3
+ 0x7C640200, // 007A CALL R25 1
+ 0x5C4C3200, // 007B MOVE R19 R25
+ 0x784A0001, // 007C JMPF R18 #007F
+ 0x145C260C, // 007D LT R23 R19 R12
+ 0x745E0000, // 007E JMPT R23 #0080
+ 0x505C0001, // 007F LDBOOL R23 0 1
+ 0x505C0200, // 0080 LDBOOL R23 1 0
+ 0x8C600321, // 0081 GETMET R24 R1 K33
+ 0x60680018, // 0082 GETGBL R26 G24
+ 0x586C008B, // 0083 LDCONST R27 K139
+ 0x5C700E00, // 0084 MOVE R28 R7
+ 0x5C741C00, // 0085 MOVE R29 R14
+ 0x8C780185, // 0086 GETMET R30 R0 K133
+ 0x5C801800, // 0087 MOVE R32 R12
+ 0x7C780400, // 0088 CALL R30 2
+ 0x7C680800, // 0089 CALL R26 4
+ 0x7C600400, // 008A CALL R24 2
+ 0x785E0003, // 008B JMPF R23 #0090
+ 0x8C600321, // 008C GETMET R24 R1 K33
+ 0x5868008C, // 008D LDCONST R26 K140
+ 0x7C600400, // 008E CALL R24 2
+ 0x70020003, // 008F JMP #0094
+ 0x784A0002, // 0090 JMPF R18 #0094
+ 0x8C600321, // 0091 GETMET R24 R1 K33
+ 0x5868008D, // 0092 LDCONST R26 K141
+ 0x7C600400, // 0093 CALL R24 2
+ 0x8C600321, // 0094 GETMET R24 R1 K33
+ 0x60680018, // 0095 GETGBL R26 G24
+ 0x586C008E, // 0096 LDCONST R27 K142
+ 0x5C700E00, // 0097 MOVE R28 R7
+ 0x5C740E00, // 0098 MOVE R29 R7
+ 0x5C782000, // 0099 MOVE R30 R16
+ 0x7C680800, // 009A CALL R26 4
+ 0x7C600400, // 009B CALL R24 2
+ 0x785E0008, // 009C JMPF R23 #00A6
+ 0x8C600321, // 009D GETMET R24 R1 K33
+ 0x60680018, // 009E GETGBL R26 G24
+ 0x586C008F, // 009F LDCONST R27 K143
+ 0x8C700185, // 00A0 GETMET R28 R0 K133
+ 0x5C782600, // 00A1 MOVE R30 R19
+ 0x7C700400, // 00A2 CALL R28 2
+ 0x5C741A00, // 00A3 MOVE R29 R13
+ 0x7C680600, // 00A4 CALL R26 3
+ 0x7C600400, // 00A5 CALL R24 2
+ 0x8C600321, // 00A6 GETMET R24 R1 K33
+ 0x58680090, // 00A7 LDCONST R26 K144
+ 0x7C600400, // 00A8 CALL R24 2
+ 0x784A0013, // 00A9 JMPF R18 #00BE
+ 0x785E0007, // 00AA JMPF R23 #00B3
+ 0x8C600321, // 00AB GETMET R24 R1 K33
+ 0x60680018, // 00AC GETGBL R26 G24
+ 0x586C0091, // 00AD LDCONST R27 K145
+ 0x5C702C00, // 00AE MOVE R28 R22
+ 0x5C742C00, // 00AF MOVE R29 R22
+ 0x7C680600, // 00B0 CALL R26 3
+ 0x7C600400, // 00B1 CALL R24 2
+ 0x70020002, // 00B2 JMP #00B6
+ 0x8C600321, // 00B3 GETMET R24 R1 K33
+ 0x58680092, // 00B4 LDCONST R26 K146
+ 0x7C600400, // 00B5 CALL R24 2
+ 0x8C600321, // 00B6 GETMET R24 R1 K33
+ 0x60680018, // 00B7 GETGBL R26 G24
+ 0x586C0093, // 00B8 LDCONST R27 K147
+ 0x5C702C00, // 00B9 MOVE R28 R22
+ 0x5C742C00, // 00BA MOVE R29 R22
+ 0x7C680600, // 00BB CALL R26 3
+ 0x7C600400, // 00BC CALL R24 2
+ 0x70020006, // 00BD JMP #00C5
+ 0x8C600321, // 00BE GETMET R24 R1 K33
+ 0x60680018, // 00BF GETGBL R26 G24
+ 0x586C0094, // 00C0 LDCONST R27 K148
+ 0x5C702A00, // 00C1 MOVE R28 R21
+ 0x5C741C00, // 00C2 MOVE R29 R14
+ 0x7C680600, // 00C3 CALL R26 3
+ 0x7C600400, // 00C4 CALL R24 2
+ 0x8C600321, // 00C5 GETMET R24 R1 K33
+ 0x58680043, // 00C6 LDCONST R26 K67
+ 0x7C600400, // 00C7 CALL R24 2
+ 0x001C0F17, // 00C8 ADD R7 R7 K23
+ 0x00301317, // 00C9 ADD R12 R9 K23
+ 0x5C201800, // 00CA MOVE R8 R12
+ 0x7001FF67, // 00CB JMP #0034
+ 0x8C240321, // 00CC GETMET R9 R1 K33
+ 0x582C0045, // 00CD LDCONST R11 K69
+ 0x7C240400, // 00CE CALL R9 2
+ 0x8C24037C, // 00CF GETMET R9 R1 K124
+ 0x7C240200, // 00D0 CALL R9 1
+ 0x80000000, // 00D1 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: version_string
+********************************************************************/
+be_local_closure(class_Extension_manager_version_string, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 1, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_version_string,
+ &be_const_str_solidified,
+ ( &(const binstruction[19]) { /* code */
+ 0x58040014, // 0000 LDCONST R1 K20
+ 0x60080018, // 0001 GETGBL R2 G24
+ 0x580C0095, // 0002 LDCONST R3 K149
+ 0x54120017, // 0003 LDINT R4 24
+ 0x3C100004, // 0004 SHR R4 R0 R4
+ 0x541600FE, // 0005 LDINT R5 255
+ 0x2C100805, // 0006 AND R4 R4 R5
+ 0x5416000F, // 0007 LDINT R5 16
+ 0x3C140005, // 0008 SHR R5 R0 R5
+ 0x541A00FE, // 0009 LDINT R6 255
+ 0x2C140A06, // 000A AND R5 R5 R6
+ 0x541A0007, // 000B LDINT R6 8
+ 0x3C180006, // 000C SHR R6 R0 R6
+ 0x541E00FE, // 000D LDINT R7 255
+ 0x2C180C07, // 000E AND R6 R6 R7
+ 0x541E00FE, // 000F LDINT R7 255
+ 0x2C1C0007, // 0010 AND R7 R0 R7
+ 0x7C080A00, // 0011 CALL R2 5
+ 0x80040400, // 0012 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: page_extensions_mgr_dispatcher
+********************************************************************/
+be_local_closure(class_Extension_manager_page_extensions_mgr_dispatcher, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_page_extensions_mgr_dispatcher,
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0xA4063A00, // 0000 IMPORT R1 K29
+ 0x8C08035C, // 0001 GETMET R2 R1 K92
+ 0x7C080200, // 0002 CALL R2 1
+ 0x740A0001, // 0003 JMPT R2 #0006
+ 0x4C080000, // 0004 LDNIL R2
+ 0x80040400, // 0005 RET 1 R2
+ 0x8C080396, // 0006 GETMET R2 R1 K150
+ 0x58100097, // 0007 LDCONST R4 K151
+ 0x7C080400, // 0008 CALL R2 2
+ 0x780A0003, // 0009 JMPF R2 #000E
+ 0x8C080198, // 000A GETMET R2 R0 K152
+ 0x7C080200, // 000B CALL R2 1
+ 0x80040400, // 000C RET 1 R2
+ 0x70020002, // 000D JMP #0011
+ 0x8C080199, // 000E GETMET R2 R0 K153
+ 0x7C080200, // 000F CALL R2 1
+ 0x80040400, // 0010 RET 1 R2
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: manifest_decode
+********************************************************************/
+be_local_closure(class_Extension_manager_manifest_decode, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 12, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Extension_manager, /* shared constants */
+ &be_const_str_manifest_decode,
+ &be_const_str_solidified,
+ ( &(const binstruction[58]) { /* code */
+ 0x58040014, // 0000 LDCONST R1 K20
+ 0xA40AEC00, // 0001 IMPORT R2 K118
+ 0x8C0C055F, // 0002 GETMET R3 R2 K95
+ 0x5C140000, // 0003 MOVE R5 R0
+ 0x7C0C0400, // 0004 CALL R3 2
+ 0x4C100000, // 0005 LDNIL R4
+ 0x1C100604, // 0006 EQ R4 R3 R4
+ 0x78120008, // 0007 JMPF R4 #0011
+ 0xB8120E00, // 0008 GETNGBL R4 K7
+ 0x60140018, // 0009 GETGBL R5 G24
+ 0x5818009A, // 000A LDCONST R6 K154
+ 0x5C1C0000, // 000B MOVE R7 R0
+ 0x7C140400, // 000C CALL R5 2
+ 0x58180009, // 000D LDCONST R6 K9
+ 0x7C100400, // 000E CALL R4 2
+ 0x4C100000, // 000F LDNIL R4
+ 0x80040800, // 0010 RET 1 R4
+ 0x8C10072B, // 0011 GETMET R4 R3 K43
+ 0x58180033, // 0012 LDCONST R6 K51
+ 0x7C100400, // 0013 CALL R4 2
+ 0x78120007, // 0014 JMPF R4 #001D
+ 0x8C10072B, // 0015 GETMET R4 R3 K43
+ 0x58180086, // 0016 LDCONST R6 K134
+ 0x7C100400, // 0017 CALL R4 2
+ 0x78120003, // 0018 JMPF R4 #001D
+ 0x8C10072B, // 0019 GETMET R4 R3 K43
+ 0x58180003, // 001A LDCONST R6 K3
+ 0x7C100400, // 001B CALL R4 2
+ 0x74120007, // 001C JMPT R4 #0025
+ 0xB8120E00, // 001D GETNGBL R4 K7
+ 0x60140018, // 001E GETGBL R5 G24
+ 0x5818009B, // 001F LDCONST R6 K155
+ 0x5C1C0600, // 0020 MOVE R7 R3
+ 0x7C140400, // 0021 CALL R5 2
+ 0x7C100200, // 0022 CALL R4 1
+ 0x4C100000, // 0023 LDNIL R4
+ 0x80040800, // 0024 RET 1 R4
+ 0x60100013, // 0025 GETGBL R4 G19
+ 0x7C100000, // 0026 CALL R4 0
+ 0x94140733, // 0027 GETIDX R5 R3 K51
+ 0x98126605, // 0028 SETIDX R4 K51 R5
+ 0x94140786, // 0029 GETIDX R5 R3 K134
+ 0x98130C05, // 002A SETIDX R4 K134 R5
+ 0x60140009, // 002B GETGBL R5 G9
+ 0x94180703, // 002C GETIDX R6 R3 K3
+ 0x7C140200, // 002D CALL R5 1
+ 0x98120605, // 002E SETIDX R4 K3 R5
+ 0x8C14071A, // 002F GETMET R5 R3 K26
+ 0x581C0035, // 0030 LDCONST R7 K53
+ 0x5820009C, // 0031 LDCONST R8 K156
+ 0x7C140600, // 0032 CALL R5 3
+ 0x98126A05, // 0033 SETIDX R4 K53 R5
+ 0x8C14071A, // 0034 GETMET R5 R3 K26
+ 0x581C008A, // 0035 LDCONST R7 K138
+ 0x5820002D, // 0036 LDCONST R8 K45
+ 0x7C140600, // 0037 CALL R5 3
+ 0x98131405, // 0038 SETIDX R4 K138 R5
+ 0x80040800, // 0039 RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified class: Extension_manager
+********************************************************************/
+be_local_class(Extension_manager,
+ 0,
+ NULL,
+ be_nested_map(19,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key(EXT_FOLDER, -1), be_nested_str(_X2F_X2Eextensions_X2F) },
+ { be_const_key(EXT_REPO_FOLDER, -1), be_nested_str(tapp_X2F) },
+ { be_const_key(tapp_name, 6), be_const_static_closure(class_Extension_manager_tapp_name_closure) },
+ { be_const_key(page_extensions_mgr, -1), be_const_closure(class_Extension_manager_page_extensions_mgr_closure) },
+ { be_const_key(install_from_store, -1), be_const_closure(class_Extension_manager_install_from_store_closure) },
+ { be_const_key(list_extensions, -1), be_const_static_closure(class_Extension_manager_list_extensions_closure) },
+ { be_const_key(version_string, -1), be_const_static_closure(class_Extension_manager_version_string_closure) },
+ { be_const_key(load_manifest, 1), be_const_closure(class_Extension_manager_load_manifest_closure) },
+ { be_const_key(web_add_button, 5), be_const_closure(class_Extension_manager_web_add_button_closure) },
+ { be_const_key(page_extensions_store, 16), be_const_closure(class_Extension_manager_page_extensions_store_closure) },
+ { be_const_key(web_add_handler, -1), be_const_closure(class_Extension_manager_web_add_handler_closure) },
+ { be_const_key(EXT_REPO, -1), be_nested_str(https_X3A_X2F_X2Fota_X2Etasmota_X2Ecom_X2Fextensions_X2F) },
+ { be_const_key(page_extensions_ctl, 11), be_const_closure(class_Extension_manager_page_extensions_ctl_closure) },
+ { be_const_key(init, -1), be_const_closure(class_Extension_manager_init_closure) },
+ { be_const_key(EXT_REPO_MANIFEST, -1), be_nested_str(extensions_X2Ejsonl) },
+ { be_const_key(list_installed_ext, 9), be_const_static_closure(class_Extension_manager_list_installed_ext_closure) },
+ { be_const_key(list_extensions_in_fs, -1), be_const_static_closure(class_Extension_manager_list_extensions_in_fs_closure) },
+ { be_const_key(page_extensions_mgr_dispatcher, -1), be_const_closure(class_Extension_manager_page_extensions_mgr_dispatcher_closure) },
+ { be_const_key(manifest_decode, -1), be_const_static_closure(class_Extension_manager_manifest_decode_closure) },
+ })),
+ (bstring*) &be_const_str_Extension_manager
+);
+
+/********************************************************************
+** Solidified function: _anonymous_
+********************************************************************/
+be_local_closure(_anonymous_, /* name */
+ be_nested_proto(
+ 3, /* nstack */
+ 1, /* argc */
+ 0, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ ( &(const bvalue[ 1]) { /* constants */
+ /* K0 */ be_nested_str(Extension_manager),
+ }),
+ &be_const_str__anonymous_,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 3]) { /* code */
+ 0x8C040100, // 0000 GETMET R1 R0 K0
+ 0x7C040200, // 0001 CALL R1 1
+ 0x80040200, // 0002 RET 1 R1
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified module: extension_manager
+********************************************************************/
+be_local_module(extension_manager,
+ "extension_manager",
+ be_nested_map(2,
+ ( (struct bmapnode*) &(const bmapnode[]) {
+ { be_const_key(Extension_manager, -1), be_const_class(be_class_Extension_manager) },
+ { be_const_key(init, -1), be_const_closure(_anonymous__closure) },
+ }))
+);
+BE_EXPORT_VARIABLE be_define_const_native_module(extension_manager);
+/********************************************************************/
+/********************************************************************/
+/* End of solidification */
diff --git a/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h b/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h
index 52abc7b0e..31ce38310 100644
--- a/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h
+++ b/lib/libesp32/berry_tasmota/src/solidify/solidified_tasmota_class.h
@@ -4,186 +4,202 @@
\********************************************************************/
#include "be_constobj.h"
extern const bclass be_class_Tasmota;
-// compact class 'Tasmota' ktab size: 167, total: 321 (saved 1232 bytes)
-static const bvalue be_ktab_class_Tasmota[167] = {
- /* K0 */ be_nested_str(_crons),
- /* K1 */ be_const_int(0),
- /* K2 */ be_nested_str(size),
- /* K3 */ be_nested_str(id),
- /* K4 */ be_nested_str(trig),
- /* K5 */ be_const_int(1),
- /* K6 */ be_const_class(be_class_Tasmota),
- /* K7 */ be_nested_str(tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29),
- /* K8 */ be_nested_str(light),
- /* K9 */ be_nested_str(get),
- /* K10 */ be_nested_str(tasmota),
- /* K11 */ be_nested_str(wifi),
- /* K12 */ be_nested_str(up),
- /* K13 */ be_nested_str(eth),
- /* K14 */ be_nested_str(match),
- /* K15 */ be_nested_str(trigger),
- /* K16 */ be_nested_str(_defer),
- /* K17 */ be_nested_str(push),
- /* K18 */ be_nested_str(global),
- /* K19 */ be_nested_str(deferred_ready),
- /* K20 */ be_nested_str(_rules),
- /* K21 */ be_nested_str(rule),
- /* K22 */ be_nested_str(remove),
- /* K23 */ be_nested_str(scale_uint),
- /* K24 */ be_const_int(2),
- /* K25 */ be_const_int(3),
- /* K26 */ be_nested_str(instance),
- /* K27 */ be_nested_str(value_error),
- /* K28 */ be_nested_str(instance_X20required),
- /* K29 */ be_nested_str(_drivers),
- /* K30 */ be_nested_str(find),
- /* K31 */ be_nested_str(cmd_res),
- /* K32 */ be_nested_str(json),
- /* K33 */ be_nested_str(load),
- /* K34 */ be_nested_str(log),
- /* K35 */ be_nested_str(BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20),
- /* K36 */ be_nested_str(try_rule),
- /* K37 */ be_nested_str(f),
- /* K38 */ be_nested_str(o),
- /* K39 */ be_nested_str(check_not_method),
- /* K40 */ be_nested_str(_timers),
- /* K41 */ be_nested_str(Trigger),
- /* K42 */ be_nested_str(millis),
- /* K43 */ be_nested_str(ctypes_bytes_dyn),
- /* K44 */ be_nested_str(_global_addr),
- /* K45 */ be_nested_str(_global_def),
- /* K46 */ be_nested_str(introspect),
- /* K47 */ be_nested_str(_settings_ptr),
- /* K48 */ be_nested_str(settings),
- /* K49 */ be_nested_str(toptr),
- /* K50 */ be_nested_str(_settings_def),
- /* K51 */ be_nested_str(wd),
- /* K52 */ be_nested_str(),
- /* K53 */ be_nested_str(_debug_present),
- /* K54 */ be_nested_str(contains),
- /* K55 */ be_nested_str(debug),
- /* K56 */ be_nested_str(add_cmd),
- /* K57 */ be_nested_str(UrlFetch),
- /* K58 */ be_nested_str(pop),
- /* K59 */ be_nested_str(string),
- /* K60 */ be_nested_str(endswith),
- /* K61 */ be_nested_str(_X2Ebe),
- /* K62 */ be_nested_str(BRY_X3A_X20file_X20_X27_X25s_X27_X20does_X20not_X20have_X20_X27_X2Ebe_X27_X20extension),
- /* K63 */ be_nested_str(_X23),
- /* K64 */ be_nested_str(BRY_X3A_X20cannot_X20compile_X20file_X20in_X20read_X2Donly_X20archive),
- /* K65 */ be_nested_str(file),
- /* K66 */ be_nested_str(BRY_X3A_X20empty_X20compiled_X20file),
- /* K67 */ be_nested_str(BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X20_X2D_X20_X25s_X29),
- /* K68 */ be_nested_str(c),
- /* K69 */ be_nested_str(save),
- /* K70 */ be_nested_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29),
- /* K71 */ be_nested_str(_ccmd),
- /* K72 */ be_nested_str(function),
- /* K73 */ be_nested_str(the_X20second_X20argument_X20is_X20not_X20a_X20function),
- /* K74 */ be_nested_str(run_deferred),
- /* K75 */ be_nested_str(time_reached),
- /* K76 */ be_nested_str(_fl),
- /* K77 */ be_nested_str(toupper),
- /* K78 */ be_nested_str(keys),
- /* K79 */ be_nested_str(_X3F),
- /* K80 */ be_nested_str(stop_iteration),
- /* K81 */ be_nested_str(type_error),
- /* K82 */ be_nested_str(BRY_X3A_X20argument_X20must_X20be_X20a_X20function),
- /* K83 */ be_nested_str(ismethod),
- /* K84 */ be_nested_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27),
- /* K85 */ be_nested_str(is_network_up),
- /* K86 */ be_nested_str(_wnu),
- /* K87 */ be_nested_str(add_rule),
- /* K88 */ be_nested_str(find_key_i),
- /* K89 */ be_nested_str(resolvecmnd),
- /* K90 */ be_nested_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29),
- /* K91 */ be_nested_str(set),
- /* K92 */ be_nested_str(ccronexpr),
- /* K93 */ be_nested_str(now),
- /* K94 */ be_nested_str(next),
- /* K95 */ be_nested_str(maxlog_level),
- /* K96 */ be_nested_str(_cmd),
- /* K97 */ be_nested_str(time_dump),
- /* K98 */ be_nested_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d),
- /* K99 */ be_nested_str(year),
- /* K100 */ be_nested_str(month),
- /* K101 */ be_nested_str(day),
- /* K102 */ be_nested_str(hour),
- /* K103 */ be_nested_str(min),
- /* K104 */ be_nested_str(sec),
- /* K105 */ be_nested_str(every_50ms),
- /* K106 */ be_nested_str(run_network_up),
- /* K107 */ be_nested_str(run_timers),
- /* K108 */ be_nested_str(every_250ms),
- /* K109 */ be_nested_str(run_cron),
- /* K110 */ be_nested_str(mqtt_data),
- /* K111 */ be_nested_str(cmd),
- /* K112 */ be_nested_str(exec_cmd),
- /* K113 */ be_nested_str(tele),
- /* K114 */ be_nested_str(exec_tele),
- /* K115 */ be_nested_str(exec_rules),
- /* K116 */ be_nested_str(gc),
- /* K117 */ be_nested_str(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s),
- /* K118 */ be_nested_str(traceback),
- /* K119 */ be_nested_str(save_before_restart),
- /* K120 */ be_nested_str(persist),
- /* K121 */ be_nested_str(i2c_enabled),
- /* K122 */ be_nested_str(wire1),
- /* K123 */ be_nested_str(enabled),
- /* K124 */ be_nested_str(detect),
- /* K125 */ be_nested_str(wire2),
- /* K126 */ be_nested_str(Tele),
- /* K127 */ be_nested_str(remove_rule),
- /* K128 */ be_nested_str(Rule_Matcher),
- /* K129 */ be_nested_str(parse),
- /* K130 */ be_nested_str(argument_X20must_X20be_X20a_X20function),
- /* K131 */ be_nested_str(fast_loop_enabled),
- /* K132 */ be_nested_str(collect),
- /* K133 */ be_nested_str(allocated),
- /* K134 */ be_nested_str(_find_op),
- /* K135 */ be_const_int(2147483647),
- /* K136 */ be_nested_str(path),
- /* K137 */ be_nested_str(startswith),
- /* K138 */ be_nested_str(_X2F),
- /* K139 */ be_nested_str(tapp),
- /* K140 */ be_nested_str(_X23autoexec),
- /* K141 */ be_nested_str(_X2E),
- /* K142 */ be_nested_str(_X2Ebec),
- /* K143 */ be_nested_str(BRY_X3A_X20file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20nor_X20_X27_X2Ebec_X27),
- /* K144 */ be_nested_str(exists),
- /* K145 */ be_nested_str(BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27),
- /* K146 */ be_nested_str(BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25s_X29),
- /* K147 */ be_nested_str(split),
- /* K148 */ be_nested_str(index_X2Ehtml),
- /* K149 */ be_nested_str(webclient),
- /* K150 */ be_nested_str(set_follow_redirects),
- /* K151 */ be_nested_str(begin),
- /* K152 */ be_nested_str(GET),
- /* K153 */ be_nested_str(status_X3A_X20),
- /* K154 */ be_nested_str(connection_error),
- /* K155 */ be_nested_str(write_file),
- /* K156 */ be_nested_str(close),
- /* K157 */ be_nested_str(BRY_X3A_X20Fetched_X20),
- /* K158 */ be_nested_str(cb),
- /* K159 */ be_nested_str(gen_cb),
- /* K160 */ be_nested_str(BRY_X3A_X20Exception_X3E_X20run_network_up_X20_X27_X25s_X27_X20_X2D_X20_X25s),
- /* K161 */ be_nested_str(http),
- /* K162 */ be_nested_str(resp_cmnd_str),
- /* K163 */ be_nested_str(URL_X20must_X20start_X20with_X20_X27http_X28s_X29_X27),
- /* K164 */ be_nested_str(urlfetch),
- /* K165 */ be_nested_str(resp_cmnd_failed),
- /* K166 */ be_nested_str(resp_cmnd_done),
+// compact class 'Tasmota' ktab size: 183, total: 371 (saved 1504 bytes)
+static const bvalue be_ktab_class_Tasmota[183] = {
+ /* K0 */ be_nested_str(json),
+ /* K1 */ be_nested_str(string),
+ /* K2 */ be_nested_str(tasmota),
+ /* K3 */ be_nested_str(wd),
+ /* K4 */ be_const_int(0),
+ /* K5 */ be_nested_str(_X2F),
+ /* K6 */ be_nested_str(_X23),
+ /* K7 */ be_nested_str(),
+ /* K8 */ be_nested_str(manifest_X2Ejson),
+ /* K9 */ be_nested_str(read),
+ /* K10 */ be_nested_str(close),
+ /* K11 */ be_nested_str(load),
+ /* K12 */ be_nested_str(find),
+ /* K13 */ be_nested_str(name),
+ /* K14 */ be_nested_str(description),
+ /* K15 */ be_nested_str(version),
+ /* K16 */ be_nested_str(min_tasmota),
+ /* K17 */ be_nested_str(autorun),
+ /* K18 */ be_nested_str(endswith),
+ /* K19 */ be_nested_str(_X2Etapp),
+ /* K20 */ be_nested_str(log),
+ /* K21 */ be_nested_str(BRY_X3A_X20error_X20_X25s_X20_X25s_X20when_X20reading_X20_X27manifest_X2Ejson_X27_X20in_X20_X27_X25s_X27),
+ /* K22 */ be_nested_str(_ccmd),
+ /* K23 */ be_nested_str(find_key_i),
+ /* K24 */ be_nested_str(resolvecmnd),
+ /* K25 */ be_const_class(be_class_Tasmota),
+ /* K26 */ be_nested_str(check_not_method),
+ /* K27 */ be_nested_str(is_network_up),
+ /* K28 */ be_nested_str(_wnu),
+ /* K29 */ be_nested_str(push),
+ /* K30 */ be_nested_str(_X2Ebe),
+ /* K31 */ be_nested_str(BRY_X3A_X20file_X20_X27_X25s_X27_X20does_X20not_X20have_X20_X27_X2Ebe_X27_X20extension),
+ /* K32 */ be_nested_str(BRY_X3A_X20cannot_X20compile_X20file_X20in_X20read_X2Donly_X20archive),
+ /* K33 */ be_nested_str(file),
+ /* K34 */ be_nested_str(BRY_X3A_X20empty_X20compiled_X20file),
+ /* K35 */ be_nested_str(BRY_X3A_X20failed_X20to_X20load_X20_X27_X25s_X27_X20_X28_X25s_X20_X2D_X20_X25s_X29),
+ /* K36 */ be_nested_str(c),
+ /* K37 */ be_nested_str(save),
+ /* K38 */ be_nested_str(BRY_X3A_X20could_X20not_X20save_X20compiled_X20file_X20_X25s_X20_X28_X25s_X29),
+ /* K39 */ be_nested_str(_fl),
+ /* K40 */ be_nested_str(function),
+ /* K41 */ be_nested_str(value_error),
+ /* K42 */ be_nested_str(argument_X20must_X20be_X20a_X20function),
+ /* K43 */ be_nested_str(global),
+ /* K44 */ be_nested_str(fast_loop_enabled),
+ /* K45 */ be_const_int(1),
+ /* K46 */ be_nested_str(_timers),
+ /* K47 */ be_nested_str(size),
+ /* K48 */ be_nested_str(id),
+ /* K49 */ be_nested_str(remove),
+ /* K50 */ be_nested_str(wifi),
+ /* K51 */ be_nested_str(up),
+ /* K52 */ be_nested_str(eth),
+ /* K53 */ be_nested_str(toupper),
+ /* K54 */ be_nested_str(tasmota_X2Eset_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eset_X28_X29),
+ /* K55 */ be_nested_str(light),
+ /* K56 */ be_nested_str(set),
+ /* K57 */ be_nested_str(_crons),
+ /* K58 */ be_nested_str(ccronexpr),
+ /* K59 */ be_nested_str(now),
+ /* K60 */ be_nested_str(trig),
+ /* K61 */ be_nested_str(next),
+ /* K62 */ be_nested_str(time_reached),
+ /* K63 */ be_nested_str(f),
+ /* K64 */ be_nested_str(cmd_res),
+ /* K65 */ be_nested_str(maxlog_level),
+ /* K66 */ be_const_int(2),
+ /* K67 */ be_nested_str(_cmd),
+ /* K68 */ be_nested_str(keys),
+ /* K69 */ be_nested_str(_X3F),
+ /* K70 */ be_nested_str(stop_iteration),
+ /* K71 */ be_nested_str(_rules),
+ /* K72 */ be_nested_str(rule),
+ /* K73 */ be_nested_str(_drivers),
+ /* K74 */ be_nested_str(pop),
+ /* K75 */ be_nested_str(_ext),
+ /* K76 */ be_nested_str(remove_by_value),
+ /* K77 */ be_nested_str(the_X20second_X20argument_X20is_X20not_X20a_X20function),
+ /* K78 */ be_nested_str(Trigger),
+ /* K79 */ be_nested_str(BRY_X3A_X20ERROR_X2C_X20bad_X20json_X3A_X20),
+ /* K80 */ be_const_int(3),
+ /* K81 */ be_nested_str(Tele),
+ /* K82 */ be_nested_str(try_rule),
+ /* K83 */ be_nested_str(cb),
+ /* K84 */ be_nested_str(gen_cb),
+ /* K85 */ be_nested_str(BRY_X3A_X20Exception_X3E_X20run_network_up_X20_X27_X25s_X27_X20_X2D_X20_X25s),
+ /* K86 */ be_nested_str(run_deferred),
+ /* K87 */ be_nested_str(instance),
+ /* K88 */ be_nested_str(instance_X20and_X20name_X20required),
+ /* K89 */ be_nested_str(sortedmap),
+ /* K90 */ be_nested_str(contains),
+ /* K91 */ be_nested_str(BRY_X3A_X20Extension_X20_X27_X25s_X27_X20already_X20registered),
+ /* K92 */ be_nested_str(i2c_enabled),
+ /* K93 */ be_nested_str(wire1),
+ /* K94 */ be_nested_str(enabled),
+ /* K95 */ be_nested_str(detect),
+ /* K96 */ be_nested_str(wire2),
+ /* K97 */ be_nested_str(split),
+ /* K98 */ be_nested_str(index_X2Ehtml),
+ /* K99 */ be_nested_str(webclient),
+ /* K100 */ be_nested_str(set_follow_redirects),
+ /* K101 */ be_nested_str(begin),
+ /* K102 */ be_nested_str(GET),
+ /* K103 */ be_nested_str(status_X3A_X20),
+ /* K104 */ be_nested_str(connection_error),
+ /* K105 */ be_nested_str(write_file),
+ /* K106 */ be_nested_str(BRY_X3A_X20Fetched_X20),
+ /* K107 */ be_nested_str(_defer),
+ /* K108 */ be_nested_str(deferred_ready),
+ /* K109 */ be_nested_str(ctypes_bytes_dyn),
+ /* K110 */ be_nested_str(_global_addr),
+ /* K111 */ be_nested_str(_global_def),
+ /* K112 */ be_nested_str(introspect),
+ /* K113 */ be_nested_str(_settings_ptr),
+ /* K114 */ be_nested_str(get),
+ /* K115 */ be_nested_str(settings),
+ /* K116 */ be_nested_str(toptr),
+ /* K117 */ be_nested_str(_settings_def),
+ /* K118 */ be_nested_str(_debug_present),
+ /* K119 */ be_nested_str(debug),
+ /* K120 */ be_nested_str(add_cmd),
+ /* K121 */ be_nested_str(UrlFetch),
+ /* K122 */ be_nested_str(unload),
+ /* K123 */ be_nested_str(remove_driver),
+ /* K124 */ be_nested_str(gc),
+ /* K125 */ be_nested_str(tasmota_X2Eget_light_X28_X29_X20is_X20deprecated_X2C_X20use_X20light_X2Eget_X28_X29),
+ /* K126 */ be_nested_str(path),
+ /* K127 */ be_nested_str(startswith),
+ /* K128 */ be_nested_str(_X2Etapp_),
+ /* K129 */ be_nested_str(_X23autoexec),
+ /* K130 */ be_const_int(2147483647),
+ /* K131 */ be_nested_str(_X2E),
+ /* K132 */ be_nested_str(_X2Ebec),
+ /* K133 */ be_nested_str(BRY_X3A_X20file_X20extension_X20is_X20not_X20_X27_X2Ebe_X27_X20nor_X20_X27_X2Ebec_X27),
+ /* K134 */ be_nested_str(exists),
+ /* K135 */ be_nested_str(BRY_X3A_X20corrupt_X20bytecode_X20_X27_X25s_X27),
+ /* K136 */ be_nested_str(BRY_X3A_X20bytecode_X20has_X20wrong_X20version_X20_X27_X25s_X27_X20_X28_X25s_X29),
+ /* K137 */ be_nested_str(remove_rule),
+ /* K138 */ be_nested_str(Rule_Matcher),
+ /* K139 */ be_nested_str(parse),
+ /* K140 */ be_nested_str(type_error),
+ /* K141 */ be_nested_str(BRY_X3A_X20argument_X20must_X20be_X20a_X20function),
+ /* K142 */ be_nested_str(ismethod),
+ /* K143 */ be_nested_str(BRY_X3A_X20method_X20not_X20allowed_X2C_X20use_X20a_X20closure_X20like_X20_X27_X2F_X20args_X20_X2D_X3E_X20obj_X2Efunc_X28args_X29_X27),
+ /* K144 */ be_nested_str(add_rule),
+ /* K145 */ be_nested_str(o),
+ /* K146 */ be_nested_str(millis),
+ /* K147 */ be_nested_str(collect),
+ /* K148 */ be_nested_str(allocated),
+ /* K149 */ be_nested_str(_find_op),
+ /* K150 */ be_nested_str(http),
+ /* K151 */ be_nested_str(resp_cmnd_str),
+ /* K152 */ be_nested_str(URL_X20must_X20start_X20with_X20_X27http_X28s_X29_X27),
+ /* K153 */ be_nested_str(urlfetch),
+ /* K154 */ be_nested_str(resp_cmnd_failed),
+ /* K155 */ be_nested_str(resp_cmnd_done),
+ /* K156 */ be_nested_str(scale_uint),
+ /* K157 */ be_nested_str(time_dump),
+ /* K158 */ be_nested_str(_X2504d_X2D_X2502d_X2D_X2502dT_X2502d_X3A_X2502d_X3A_X2502d),
+ /* K159 */ be_nested_str(year),
+ /* K160 */ be_nested_str(month),
+ /* K161 */ be_nested_str(day),
+ /* K162 */ be_nested_str(hour),
+ /* K163 */ be_nested_str(min),
+ /* K164 */ be_nested_str(sec),
+ /* K165 */ be_nested_str(match),
+ /* K166 */ be_nested_str(trigger),
+ /* K167 */ be_nested_str(every_50ms),
+ /* K168 */ be_nested_str(run_network_up),
+ /* K169 */ be_nested_str(run_timers),
+ /* K170 */ be_nested_str(every_250ms),
+ /* K171 */ be_nested_str(run_cron),
+ /* K172 */ be_nested_str(mqtt_data),
+ /* K173 */ be_nested_str(cmd),
+ /* K174 */ be_nested_str(exec_cmd),
+ /* K175 */ be_nested_str(tele),
+ /* K176 */ be_nested_str(exec_tele),
+ /* K177 */ be_nested_str(exec_rules),
+ /* K178 */ be_nested_str(BRY_X3A_X20Exception_X3E_X20_X27_X25s_X27_X20_X2D_X20_X25s),
+ /* K179 */ be_nested_str(traceback),
+ /* K180 */ be_nested_str(save_before_restart),
+ /* K181 */ be_nested_str(persist),
+ /* K182 */ be_nested_str(instance_X20required),
};
extern const bclass be_class_Tasmota;
/********************************************************************
-** Solidified function: next_cron
+** Solidified function: read_extension_manifest
********************************************************************/
-be_local_closure(class_Tasmota_next_cron, /* name */
+be_local_closure(class_Tasmota_read_extension_manifest, /* name */
be_nested_proto(
- 6, /* nstack */
+ 15, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -192,26 +208,159 @@ be_local_closure(class_Tasmota_next_cron, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_next_cron,
+ &be_const_str_read_extension_manifest,
&be_const_str_solidified,
- ( &(const binstruction[17]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x780A000D, // 0001 JMPF R2 #0010
- 0x580C0001, // 0002 LDCONST R3 K1
- 0x8C100502, // 0003 GETMET R4 R2 K2
- 0x7C100200, // 0004 CALL R4 1
- 0x14100604, // 0005 LT R4 R3 R4
- 0x78120008, // 0006 JMPF R4 #0010
- 0x94100403, // 0007 GETIDX R4 R2 R3
- 0x88100903, // 0008 GETMBR R4 R4 K3
- 0x1C100801, // 0009 EQ R4 R4 R1
- 0x78120002, // 000A JMPF R4 #000E
- 0x94100403, // 000B GETIDX R4 R2 R3
- 0x88100904, // 000C GETMBR R4 R4 K4
- 0x80040800, // 000D RET 1 R4
- 0x000C0705, // 000E ADD R3 R3 K5
- 0x7001FFF2, // 000F JMP #0003
- 0x80000000, // 0010 RET 0
+ ( &(const binstruction[100]) { /* code */
+ 0x4C080000, // 0000 LDNIL R2
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0xA802004C, // 0002 EXBLK 0 #0050
+ 0xA4120000, // 0003 IMPORT R4 K0
+ 0xA4160200, // 0004 IMPORT R5 K1
+ 0x4C180000, // 0005 LDNIL R6
+ 0x1C180606, // 0006 EQ R6 R3 R6
+ 0x781A0001, // 0007 JMPF R6 #000A
+ 0xB81A0400, // 0008 GETNGBL R6 K2
+ 0x880C0D03, // 0009 GETMBR R3 R6 K3
+ 0x6018000C, // 000A GETGBL R6 G12
+ 0x5C1C0600, // 000B MOVE R7 R3
+ 0x7C180200, // 000C CALL R6 1
+ 0x24180D04, // 000D GT R6 R6 K4
+ 0x781A0009, // 000E JMPF R6 #0019
+ 0x5419FFFE, // 000F LDINT R6 -1
+ 0x94180606, // 0010 GETIDX R6 R3 R6
+ 0x20180D05, // 0011 NE R6 R6 K5
+ 0x781A0005, // 0012 JMPF R6 #0019
+ 0x5419FFFE, // 0013 LDINT R6 -1
+ 0x94180606, // 0014 GETIDX R6 R3 R6
+ 0x20180D06, // 0015 NE R6 R6 K6
+ 0x781A0001, // 0016 JMPF R6 #0019
+ 0x58180006, // 0017 LDCONST R6 K6
+ 0x70020000, // 0018 JMP #001A
+ 0x58180007, // 0019 LDCONST R6 K7
+ 0x601C0011, // 001A GETGBL R7 G17
+ 0x00200606, // 001B ADD R8 R3 R6
+ 0x00201108, // 001C ADD R8 R8 K8
+ 0x7C1C0200, // 001D CALL R7 1
+ 0x5C080E00, // 001E MOVE R2 R7
+ 0x8C1C0509, // 001F GETMET R7 R2 K9
+ 0x7C1C0200, // 0020 CALL R7 1
+ 0x8C20050A, // 0021 GETMET R8 R2 K10
+ 0x7C200200, // 0022 CALL R8 1
+ 0x8C20090B, // 0023 GETMET R8 R4 K11
+ 0x5C280E00, // 0024 MOVE R10 R7
+ 0x7C200400, // 0025 CALL R8 2
+ 0x8C24110C, // 0026 GETMET R9 R8 K12
+ 0x582C000D, // 0027 LDCONST R11 K13
+ 0x7C240400, // 0028 CALL R9 2
+ 0x78260020, // 0029 JMPF R9 #004B
+ 0x60280008, // 002A GETGBL R10 G8
+ 0x942C110D, // 002B GETIDX R11 R8 K13
+ 0x7C280200, // 002C CALL R10 1
+ 0x98221A0A, // 002D SETIDX R8 K13 R10
+ 0x60280008, // 002E GETGBL R10 G8
+ 0x8C2C110C, // 002F GETMET R11 R8 K12
+ 0x5834000E, // 0030 LDCONST R13 K14
+ 0x58380007, // 0031 LDCONST R14 K7
+ 0x7C2C0600, // 0032 CALL R11 3
+ 0x7C280200, // 0033 CALL R10 1
+ 0x98221C0A, // 0034 SETIDX R8 K14 R10
+ 0x60280009, // 0035 GETGBL R10 G9
+ 0x8C2C110C, // 0036 GETMET R11 R8 K12
+ 0x5834000F, // 0037 LDCONST R13 K15
+ 0x58380004, // 0038 LDCONST R14 K4
+ 0x7C2C0600, // 0039 CALL R11 3
+ 0x7C280200, // 003A CALL R10 1
+ 0x98221E0A, // 003B SETIDX R8 K15 R10
+ 0x60280009, // 003C GETGBL R10 G9
+ 0x8C2C110C, // 003D GETMET R11 R8 K12
+ 0x58340010, // 003E LDCONST R13 K16
+ 0x58380004, // 003F LDCONST R14 K4
+ 0x7C2C0600, // 0040 CALL R11 3
+ 0x7C280200, // 0041 CALL R10 1
+ 0x9822200A, // 0042 SETIDX R8 K16 R10
+ 0x8C280B12, // 0043 GETMET R10 R5 K18
+ 0x5C300600, // 0044 MOVE R12 R3
+ 0x58340013, // 0045 LDCONST R13 K19
+ 0x7C280600, // 0046 CALL R10 3
+ 0x9822220A, // 0047 SETIDX R8 K17 R10
+ 0xA8040001, // 0048 EXBLK 1 1
+ 0x80041000, // 0049 RET 1 R8
+ 0x70020002, // 004A JMP #004E
+ 0x4C280000, // 004B LDNIL R10
+ 0xA8040001, // 004C EXBLK 1 1
+ 0x80041400, // 004D RET 1 R10
+ 0xA8040001, // 004E EXBLK 1 1
+ 0x70020012, // 004F JMP #0063
+ 0xAC100002, // 0050 CATCH R4 0 2
+ 0x7002000F, // 0051 JMP #0062
+ 0xB81A2800, // 0052 GETNGBL R6 K20
+ 0x601C0018, // 0053 GETGBL R7 G24
+ 0x58200015, // 0054 LDCONST R8 K21
+ 0x5C240800, // 0055 MOVE R9 R4
+ 0x5C280A00, // 0056 MOVE R10 R5
+ 0x5C2C0600, // 0057 MOVE R11 R3
+ 0x7C1C0800, // 0058 CALL R7 4
+ 0x7C180200, // 0059 CALL R6 1
+ 0x4C180000, // 005A LDNIL R6
+ 0x20180406, // 005B NE R6 R2 R6
+ 0x781A0001, // 005C JMPF R6 #005F
+ 0x8C18050A, // 005D GETMET R6 R2 K10
+ 0x7C180200, // 005E CALL R6 1
+ 0x4C180000, // 005F LDNIL R6
+ 0x80040C00, // 0060 RET 1 R6
+ 0x70020000, // 0061 JMP #0063
+ 0xB0080000, // 0062 RAISE 2 R0 R0
+ 0x80000000, // 0063 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: exec_cmd
+********************************************************************/
+be_local_closure(class_Tasmota_exec_cmd, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_exec_cmd,
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0x88100116, // 0000 GETMBR R4 R0 K22
+ 0x78120016, // 0001 JMPF R4 #0019
+ 0x8C100117, // 0002 GETMET R4 R0 K23
+ 0x88180116, // 0003 GETMBR R6 R0 K22
+ 0x5C1C0200, // 0004 MOVE R7 R1
+ 0x7C100600, // 0005 CALL R4 3
+ 0x4C140000, // 0006 LDNIL R5
+ 0x20140805, // 0007 NE R5 R4 R5
+ 0x7816000F, // 0008 JMPF R5 #0019
+ 0xA4160000, // 0009 IMPORT R5 K0
+ 0x8C180B0B, // 000A GETMET R6 R5 K11
+ 0x5C200600, // 000B MOVE R8 R3
+ 0x7C180400, // 000C CALL R6 2
+ 0x8C1C0118, // 000D GETMET R7 R0 K24
+ 0x5C240800, // 000E MOVE R9 R4
+ 0x7C1C0400, // 000F CALL R7 2
+ 0x881C0116, // 0010 GETMBR R7 R0 K22
+ 0x941C0E04, // 0011 GETIDX R7 R7 R4
+ 0x5C200800, // 0012 MOVE R8 R4
+ 0x5C240400, // 0013 MOVE R9 R2
+ 0x5C280600, // 0014 MOVE R10 R3
+ 0x5C2C0C00, // 0015 MOVE R11 R6
+ 0x7C1C0800, // 0016 CALL R7 4
+ 0x501C0200, // 0017 LDBOOL R7 1 0
+ 0x80040E00, // 0018 RET 1 R7
+ 0x50100000, // 0019 LDBOOL R4 0 0
+ 0x80040800, // 001A RET 1 R4
})
)
);
@@ -235,7 +384,7 @@ be_local_closure(class_Tasmota_int, /* name */
&be_const_str_int,
&be_const_str_solidified,
( &(const binstruction[46]) { /* code */
- 0x580C0006, // 0000 LDCONST R3 K6
+ 0x580C0019, // 0000 LDCONST R3 K25
0x60100009, // 0001 GETGBL R4 G9
0x5C140000, // 0002 MOVE R5 R0
0x7C100200, // 0003 CALL R4 1
@@ -288,11 +437,11 @@ be_local_closure(class_Tasmota_int, /* name */
/********************************************************************
-** Solidified function: get_light
+** Solidified function: when_network_up
********************************************************************/
-be_local_closure(class_Tasmota_get_light, /* name */
+be_local_closure(class_Tasmota_when_network_up, /* name */
be_nested_proto(
- 6, /* nstack */
+ 5, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -301,25 +450,227 @@ be_local_closure(class_Tasmota_get_light, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_get_light,
+ &be_const_str_when_network_up,
&be_const_str_solidified,
- ( &(const binstruction[16]) { /* code */
- 0x60080001, // 0000 GETGBL R2 G1
- 0x580C0007, // 0001 LDCONST R3 K7
- 0x7C080200, // 0002 CALL R2 1
- 0xA40A1000, // 0003 IMPORT R2 K8
+ ( &(const binstruction[23]) { /* code */
+ 0x8C08011A, // 0000 GETMET R2 R0 K26
+ 0x5C100200, // 0001 MOVE R4 R1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x8C08011B, // 0003 GETMET R2 R0 K27
+ 0x7C080200, // 0004 CALL R2 1
+ 0x780A0002, // 0005 JMPF R2 #0009
+ 0x5C080200, // 0006 MOVE R2 R1
+ 0x7C080000, // 0007 CALL R2 0
+ 0x7002000C, // 0008 JMP #0016
+ 0x8808011C, // 0009 GETMBR R2 R0 K28
+ 0x4C0C0000, // 000A LDNIL R3
+ 0x1C080403, // 000B EQ R2 R2 R3
+ 0x780A0004, // 000C JMPF R2 #0012
+ 0x60080012, // 000D GETGBL R2 G18
+ 0x7C080000, // 000E CALL R2 0
+ 0x400C0401, // 000F CONNECT R3 R2 R1
+ 0x90023802, // 0010 SETMBR R0 K28 R2
+ 0x70020003, // 0011 JMP #0016
+ 0x8808011C, // 0012 GETMBR R2 R0 K28
+ 0x8C08051D, // 0013 GETMET R2 R2 K29
+ 0x5C100200, // 0014 MOVE R4 R1
+ 0x7C080400, // 0015 CALL R2 2
+ 0x80000000, // 0016 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: compile
+********************************************************************/
+be_local_closure(class_Tasmota_compile, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_compile,
+ &be_const_str_solidified,
+ ( &(const binstruction[85]) { /* code */
+ 0xA40A0200, // 0000 IMPORT R2 K1
+ 0x8C0C0512, // 0001 GETMET R3 R2 K18
+ 0x5C140200, // 0002 MOVE R5 R1
+ 0x5818001E, // 0003 LDCONST R6 K30
+ 0x7C0C0600, // 0004 CALL R3 3
+ 0x740E0007, // 0005 JMPT R3 #000E
+ 0x600C0001, // 0006 GETGBL R3 G1
+ 0x60100018, // 0007 GETGBL R4 G24
+ 0x5814001F, // 0008 LDCONST R5 K31
+ 0x5C180200, // 0009 MOVE R6 R1
+ 0x7C100400, // 000A CALL R4 2
+ 0x7C0C0200, // 000B CALL R3 1
+ 0x500C0000, // 000C LDBOOL R3 0 0
+ 0x80040600, // 000D RET 1 R3
+ 0x8C0C050C, // 000E GETMET R3 R2 K12
+ 0x5C140200, // 000F MOVE R5 R1
+ 0x58180006, // 0010 LDCONST R6 K6
+ 0x7C0C0600, // 0011 CALL R3 3
+ 0x240C0704, // 0012 GT R3 R3 K4
+ 0x780E0006, // 0013 JMPF R3 #001B
+ 0x600C0001, // 0014 GETGBL R3 G1
+ 0x60100018, // 0015 GETGBL R4 G24
+ 0x58140020, // 0016 LDCONST R5 K32
+ 0x7C100200, // 0017 CALL R4 1
+ 0x7C0C0200, // 0018 CALL R3 1
+ 0x500C0000, // 0019 LDBOOL R3 0 0
+ 0x80040600, // 001A RET 1 R3
+ 0x4C0C0000, // 001B LDNIL R3
+ 0xA8020012, // 001C EXBLK 0 #0030
+ 0x6010000D, // 001D GETGBL R4 G13
+ 0x5C140200, // 001E MOVE R5 R1
+ 0x58180021, // 001F LDCONST R6 K33
+ 0x501C0200, // 0020 LDBOOL R7 1 0
+ 0x7C100600, // 0021 CALL R4 3
+ 0x5C0C0800, // 0022 MOVE R3 R4
+ 0x4C100000, // 0023 LDNIL R4
+ 0x1C100604, // 0024 EQ R4 R3 R4
+ 0x78120007, // 0025 JMPF R4 #002E
+ 0x60100001, // 0026 GETGBL R4 G1
+ 0x60140018, // 0027 GETGBL R5 G24
+ 0x58180022, // 0028 LDCONST R6 K34
+ 0x7C140200, // 0029 CALL R5 1
+ 0x7C100200, // 002A CALL R4 1
+ 0x50100000, // 002B LDBOOL R4 0 0
+ 0xA8040001, // 002C EXBLK 1 1
+ 0x80040800, // 002D RET 1 R4
+ 0xA8040001, // 002E EXBLK 1 1
+ 0x7002000D, // 002F JMP #003E
+ 0xAC100002, // 0030 CATCH R4 0 2
+ 0x7002000A, // 0031 JMP #003D
+ 0x60180001, // 0032 GETGBL R6 G1
+ 0x601C0018, // 0033 GETGBL R7 G24
+ 0x58200023, // 0034 LDCONST R8 K35
+ 0x5C240200, // 0035 MOVE R9 R1
+ 0x5C280800, // 0036 MOVE R10 R4
+ 0x5C2C0A00, // 0037 MOVE R11 R5
+ 0x7C1C0800, // 0038 CALL R7 4
+ 0x7C180200, // 0039 CALL R6 1
+ 0x50180000, // 003A LDBOOL R6 0 0
+ 0x80040C00, // 003B RET 1 R6
+ 0x70020000, // 003C JMP #003E
+ 0xB0080000, // 003D RAISE 2 R0 R0
+ 0x00100324, // 003E ADD R4 R1 K36
+ 0xA8020005, // 003F EXBLK 0 #0046
+ 0x8C140125, // 0040 GETMET R5 R0 K37
+ 0x5C1C0800, // 0041 MOVE R7 R4
+ 0x5C200600, // 0042 MOVE R8 R3
+ 0x7C140600, // 0043 CALL R5 3
+ 0xA8040001, // 0044 EXBLK 1 1
+ 0x7002000C, // 0045 JMP #0053
+ 0xAC140001, // 0046 CATCH R5 0 1
+ 0x70020009, // 0047 JMP #0052
+ 0x60180001, // 0048 GETGBL R6 G1
+ 0x601C0018, // 0049 GETGBL R7 G24
+ 0x58200026, // 004A LDCONST R8 K38
+ 0x5C240800, // 004B MOVE R9 R4
+ 0x5C280A00, // 004C MOVE R10 R5
+ 0x7C1C0600, // 004D CALL R7 3
+ 0x7C180200, // 004E CALL R6 1
+ 0x50180000, // 004F LDBOOL R6 0 0
+ 0x80040C00, // 0050 RET 1 R6
+ 0x70020000, // 0051 JMP #0053
+ 0xB0080000, // 0052 RAISE 2 R0 R0
+ 0x50140200, // 0053 LDBOOL R5 1 0
+ 0x80040A00, // 0054 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: add_fast_loop
+********************************************************************/
+be_local_closure(class_Tasmota_add_fast_loop, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_add_fast_loop,
+ &be_const_str_solidified,
+ ( &(const binstruction[23]) { /* code */
+ 0x8C08011A, // 0000 GETMET R2 R0 K26
+ 0x5C100200, // 0001 MOVE R4 R1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x88080127, // 0003 GETMBR R2 R0 K39
0x4C0C0000, // 0004 LDNIL R3
- 0x200C0203, // 0005 NE R3 R1 R3
- 0x780E0004, // 0006 JMPF R3 #000C
- 0x8C0C0509, // 0007 GETMET R3 R2 K9
- 0x5C140200, // 0008 MOVE R5 R1
- 0x7C0C0400, // 0009 CALL R3 2
- 0x80040600, // 000A RET 1 R3
- 0x70020002, // 000B JMP #000F
- 0x8C0C0509, // 000C GETMET R3 R2 K9
- 0x7C0C0200, // 000D CALL R3 1
- 0x80040600, // 000E RET 1 R3
- 0x80000000, // 000F RET 0
+ 0x1C080403, // 0005 EQ R2 R2 R3
+ 0x780A0002, // 0006 JMPF R2 #000A
+ 0x60080012, // 0007 GETGBL R2 G18
+ 0x7C080000, // 0008 CALL R2 0
+ 0x90024E02, // 0009 SETMBR R0 K39 R2
+ 0x60080004, // 000A GETGBL R2 G4
+ 0x5C0C0200, // 000B MOVE R3 R1
+ 0x7C080200, // 000C CALL R2 1
+ 0x20080528, // 000D NE R2 R2 K40
+ 0x780A0000, // 000E JMPF R2 #0010
+ 0xB006532A, // 000F RAISE 1 K41 K42
+ 0x8808012B, // 0010 GETMBR R2 R0 K43
+ 0x900A592D, // 0011 SETMBR R2 K44 K45
+ 0x88080127, // 0012 GETMBR R2 R0 K39
+ 0x8C08051D, // 0013 GETMET R2 R2 K29
+ 0x5C100200, // 0014 MOVE R4 R1
+ 0x7C080400, // 0015 CALL R2 2
+ 0x80000000, // 0016 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_timer
+********************************************************************/
+be_local_closure(class_Tasmota_remove_timer, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_remove_timer,
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x8808012E, // 0000 GETMBR R2 R0 K46
+ 0x780A000E, // 0001 JMPF R2 #0011
+ 0x580C0004, // 0002 LDCONST R3 K4
+ 0x8C10052F, // 0003 GETMET R4 R2 K47
+ 0x7C100200, // 0004 CALL R4 1
+ 0x14100604, // 0005 LT R4 R3 R4
+ 0x78120009, // 0006 JMPF R4 #0011
+ 0x94100403, // 0007 GETIDX R4 R2 R3
+ 0x88100930, // 0008 GETMBR R4 R4 K48
+ 0x1C100801, // 0009 EQ R4 R4 R1
+ 0x78120003, // 000A JMPF R4 #000F
+ 0x8C100531, // 000B GETMET R4 R2 K49
+ 0x5C180600, // 000C MOVE R6 R3
+ 0x7C100400, // 000D CALL R4 2
+ 0x70020000, // 000E JMP #0010
+ 0x000C072D, // 000F ADD R3 R3 K45
+ 0x7001FFF1, // 0010 JMP #0003
+ 0x80000000, // 0011 RET 0
})
)
);
@@ -343,15 +694,15 @@ be_local_closure(class_Tasmota_is_network_up, /* name */
&be_const_str_is_network_up,
&be_const_str_solidified,
( &(const binstruction[13]) { /* code */
- 0xB8061400, // 0000 GETNGBL R1 K10
- 0x8C04030B, // 0001 GETMET R1 R1 K11
+ 0xB8060400, // 0000 GETNGBL R1 K2
+ 0x8C040332, // 0001 GETMET R1 R1 K50
0x7C040200, // 0002 CALL R1 1
- 0x9404030C, // 0003 GETIDX R1 R1 K12
+ 0x94040333, // 0003 GETIDX R1 R1 K51
0x74060005, // 0004 JMPT R1 #000B
- 0xB8061400, // 0005 GETNGBL R1 K10
- 0x8C04030D, // 0006 GETMET R1 R1 K13
+ 0xB8060400, // 0005 GETNGBL R1 K2
+ 0x8C040334, // 0006 GETMET R1 R1 K52
0x7C040200, // 0007 CALL R1 1
- 0x9404030C, // 0008 GETIDX R1 R1 K12
+ 0x94040333, // 0008 GETIDX R1 R1 K51
0x74060000, // 0009 JMPT R1 #000B
0x50040001, // 000A LDBOOL R1 0 1
0x50040200, // 000B LDBOOL R1 1 0
@@ -363,12 +714,12 @@ be_local_closure(class_Tasmota_is_network_up, /* name */
/********************************************************************
-** Solidified function: try_rule
+** Solidified function: find_list_i
********************************************************************/
-be_local_closure(class_Tasmota_try_rule, /* name */
+be_local_closure(class_Tasmota_find_list_i, /* name */
be_nested_proto(
9, /* nstack */
- 4, /* argc */
+ 3, /* argc */
10, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -376,27 +727,29 @@ be_local_closure(class_Tasmota_try_rule, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_try_rule,
+ &be_const_str_find_list_i,
&be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x8C10050E, // 0000 GETMET R4 R2 K14
- 0x5C180200, // 0001 MOVE R6 R1
- 0x7C100400, // 0002 CALL R4 2
- 0x4C140000, // 0003 LDNIL R5
- 0x20140805, // 0004 NE R5 R4 R5
- 0x78160009, // 0005 JMPF R5 #0010
- 0x4C140000, // 0006 LDNIL R5
- 0x20140605, // 0007 NE R5 R3 R5
- 0x78160004, // 0008 JMPF R5 #000E
- 0x5C140600, // 0009 MOVE R5 R3
- 0x5C180800, // 000A MOVE R6 R4
- 0x881C050F, // 000B GETMBR R7 R2 K15
- 0x5C200200, // 000C MOVE R8 R1
- 0x7C140600, // 000D CALL R5 3
- 0x50140200, // 000E LDBOOL R5 1 0
- 0x80040A00, // 000F RET 1 R5
- 0x50140000, // 0010 LDBOOL R5 0 0
- 0x80040A00, // 0011 RET 1 R5
+ ( &(const binstruction[20]) { /* code */
+ 0xA40E0200, // 0000 IMPORT R3 K1
+ 0x58100004, // 0001 LDCONST R4 K4
+ 0x8C140735, // 0002 GETMET R5 R3 K53
+ 0x5C1C0400, // 0003 MOVE R7 R2
+ 0x7C140400, // 0004 CALL R5 2
+ 0x6018000C, // 0005 GETGBL R6 G12
+ 0x5C1C0200, // 0006 MOVE R7 R1
+ 0x7C180200, // 0007 CALL R6 1
+ 0x14180806, // 0008 LT R6 R4 R6
+ 0x781A0007, // 0009 JMPF R6 #0012
+ 0x8C180735, // 000A GETMET R6 R3 K53
+ 0x94200204, // 000B GETIDX R8 R1 R4
+ 0x7C180400, // 000C CALL R6 2
+ 0x1C180C05, // 000D EQ R6 R6 R5
+ 0x781A0000, // 000E JMPF R6 #0010
+ 0x80040800, // 000F RET 1 R4
+ 0x0010092D, // 0010 ADD R4 R4 K45
+ 0x7001FFF2, // 0011 JMP #0005
+ 0x4C180000, // 0012 LDNIL R6
+ 0x80040C00, // 0013 RET 1 R6
})
)
);
@@ -404,11 +757,109 @@ be_local_closure(class_Tasmota_try_rule, /* name */
/********************************************************************
-** Solidified function: defer
+** Solidified function: set_light
********************************************************************/
-be_local_closure(class_Tasmota_defer, /* name */
+be_local_closure(class_Tasmota_set_light, /* name */
be_nested_proto(
- 5, /* nstack */
+ 8, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_set_light,
+ &be_const_str_solidified,
+ ( &(const binstruction[18]) { /* code */
+ 0x600C0001, // 0000 GETGBL R3 G1
+ 0x58100036, // 0001 LDCONST R4 K54
+ 0x7C0C0200, // 0002 CALL R3 1
+ 0xA40E6E00, // 0003 IMPORT R3 K55
+ 0x4C100000, // 0004 LDNIL R4
+ 0x20100404, // 0005 NE R4 R2 R4
+ 0x78120005, // 0006 JMPF R4 #000D
+ 0x8C100738, // 0007 GETMET R4 R3 K56
+ 0x5C180200, // 0008 MOVE R6 R1
+ 0x5C1C0400, // 0009 MOVE R7 R2
+ 0x7C100600, // 000A CALL R4 3
+ 0x80040800, // 000B RET 1 R4
+ 0x70020003, // 000C JMP #0011
+ 0x8C100738, // 000D GETMET R4 R3 K56
+ 0x5C180200, // 000E MOVE R6 R1
+ 0x7C100400, // 000F CALL R4 2
+ 0x80040800, // 0010 RET 1 R4
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: run_cron
+********************************************************************/
+be_local_closure(class_Tasmota_run_cron, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_run_cron,
+ &be_const_str_solidified,
+ ( &(const binstruction[34]) { /* code */
+ 0x88040139, // 0000 GETMBR R1 R0 K57
+ 0x7806001E, // 0001 JMPF R1 #0021
+ 0x58040004, // 0002 LDCONST R1 K4
+ 0xB80A7400, // 0003 GETNGBL R2 K58
+ 0x8C08053B, // 0004 GETMET R2 R2 K59
+ 0x7C080200, // 0005 CALL R2 1
+ 0x880C0139, // 0006 GETMBR R3 R0 K57
+ 0x8C0C072F, // 0007 GETMET R3 R3 K47
+ 0x7C0C0200, // 0008 CALL R3 1
+ 0x140C0203, // 0009 LT R3 R1 R3
+ 0x780E0015, // 000A JMPF R3 #0021
+ 0x880C0139, // 000B GETMBR R3 R0 K57
+ 0x940C0601, // 000C GETIDX R3 R3 R1
+ 0x8810073C, // 000D GETMBR R4 R3 K60
+ 0x1C100904, // 000E EQ R4 R4 K4
+ 0x78120003, // 000F JMPF R4 #0014
+ 0x8C10073D, // 0010 GETMET R4 R3 K61
+ 0x7C100200, // 0011 CALL R4 1
+ 0x900E7804, // 0012 SETMBR R3 K60 R4
+ 0x7002000A, // 0013 JMP #001F
+ 0x8C10073E, // 0014 GETMET R4 R3 K62
+ 0x7C100200, // 0015 CALL R4 1
+ 0x78120007, // 0016 JMPF R4 #001F
+ 0x8810073F, // 0017 GETMBR R4 R3 K63
+ 0x8C14073D, // 0018 GETMET R5 R3 K61
+ 0x7C140200, // 0019 CALL R5 1
+ 0x900E7805, // 001A SETMBR R3 K60 R5
+ 0x5C180800, // 001B MOVE R6 R4
+ 0x5C1C0400, // 001C MOVE R7 R2
+ 0x5C200A00, // 001D MOVE R8 R5
+ 0x7C180400, // 001E CALL R6 2
+ 0x0004032D, // 001F ADD R1 R1 K45
+ 0x7001FFE4, // 0020 JMP #0006
+ 0x80000000, // 0021 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_cron
+********************************************************************/
+be_local_closure(class_Tasmota_remove_cron, /* name */
+ be_nested_proto(
+ 7, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -417,24 +868,130 @@ be_local_closure(class_Tasmota_defer, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_defer,
+ &be_const_str_remove_cron,
&be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0x88080110, // 0000 GETMBR R2 R0 K16
- 0x4C0C0000, // 0001 LDNIL R3
- 0x1C080403, // 0002 EQ R2 R2 R3
- 0x780A0002, // 0003 JMPF R2 #0007
- 0x60080012, // 0004 GETGBL R2 G18
- 0x7C080000, // 0005 CALL R2 0
- 0x90022002, // 0006 SETMBR R0 K16 R2
- 0x88080110, // 0007 GETMBR R2 R0 K16
- 0x8C080511, // 0008 GETMET R2 R2 K17
- 0x5C100200, // 0009 MOVE R4 R1
- 0x7C080400, // 000A CALL R2 2
- 0xB80A1400, // 000B GETNGBL R2 K10
- 0x88080512, // 000C GETMBR R2 R2 K18
- 0x900A2705, // 000D SETMBR R2 K19 K5
- 0x80000000, // 000E RET 0
+ ( &(const binstruction[18]) { /* code */
+ 0x88080139, // 0000 GETMBR R2 R0 K57
+ 0x780A000E, // 0001 JMPF R2 #0011
+ 0x580C0004, // 0002 LDCONST R3 K4
+ 0x8C10052F, // 0003 GETMET R4 R2 K47
+ 0x7C100200, // 0004 CALL R4 1
+ 0x14100604, // 0005 LT R4 R3 R4
+ 0x78120009, // 0006 JMPF R4 #0011
+ 0x94100403, // 0007 GETIDX R4 R2 R3
+ 0x88100930, // 0008 GETMBR R4 R4 K48
+ 0x1C100801, // 0009 EQ R4 R4 R1
+ 0x78120003, // 000A JMPF R4 #000F
+ 0x8C100531, // 000B GETMET R4 R2 K49
+ 0x5C180600, // 000C MOVE R6 R3
+ 0x7C100400, // 000D CALL R4 2
+ 0x70020000, // 000E JMP #0010
+ 0x000C072D, // 000F ADD R3 R3 K45
+ 0x7001FFF1, // 0010 JMP #0003
+ 0x80000000, // 0011 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: cmd
+********************************************************************/
+be_local_closure(class_Tasmota_cmd, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_cmd,
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0x880C0140, // 0000 GETMBR R3 R0 K64
+ 0x50100200, // 0001 LDBOOL R4 1 0
+ 0x90028004, // 0002 SETMBR R0 K64 R4
+ 0xB8120400, // 0003 GETNGBL R4 K2
+ 0x8810092B, // 0004 GETMBR R4 R4 K43
+ 0x88100941, // 0005 GETMBR R4 R4 K65
+ 0x780A0004, // 0006 JMPF R2 #000C
+ 0x28140942, // 0007 GE R5 R4 K66
+ 0x78160002, // 0008 JMPF R5 #000C
+ 0xB8160400, // 0009 GETNGBL R5 K2
+ 0x88140B2B, // 000A GETMBR R5 R5 K43
+ 0x9016832D, // 000B SETMBR R5 K65 K45
+ 0x8C140143, // 000C GETMET R5 R0 K67
+ 0x5C1C0200, // 000D MOVE R7 R1
+ 0x7C140400, // 000E CALL R5 2
+ 0x4C140000, // 000F LDNIL R5
+ 0x88180140, // 0010 GETMBR R6 R0 K64
+ 0x501C0200, // 0011 LDBOOL R7 1 0
+ 0x20180C07, // 0012 NE R6 R6 R7
+ 0x781A0000, // 0013 JMPF R6 #0015
+ 0x88140140, // 0014 GETMBR R5 R0 K64
+ 0x90028003, // 0015 SETMBR R0 K64 R3
+ 0x780A0002, // 0016 JMPF R2 #001A
+ 0xB81A0400, // 0017 GETNGBL R6 K2
+ 0x88180D2B, // 0018 GETMBR R6 R6 K43
+ 0x901A8204, // 0019 SETMBR R6 K65 R4
+ 0x80040A00, // 001A RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: find_key_i
+********************************************************************/
+be_local_closure(class_Tasmota_find_key_i, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_find_key_i,
+ &be_const_str_solidified,
+ ( &(const binstruction[30]) { /* code */
+ 0xA40E0200, // 0000 IMPORT R3 K1
+ 0x8C100735, // 0001 GETMET R4 R3 K53
+ 0x5C180400, // 0002 MOVE R6 R2
+ 0x7C100400, // 0003 CALL R4 2
+ 0x6014000F, // 0004 GETGBL R5 G15
+ 0x5C180200, // 0005 MOVE R6 R1
+ 0x601C0013, // 0006 GETGBL R7 G19
+ 0x7C140400, // 0007 CALL R5 2
+ 0x78160013, // 0008 JMPF R5 #001D
+ 0x60140010, // 0009 GETGBL R5 G16
+ 0x8C180344, // 000A GETMET R6 R1 K68
+ 0x7C180200, // 000B CALL R6 1
+ 0x7C140200, // 000C CALL R5 1
+ 0xA802000B, // 000D EXBLK 0 #001A
+ 0x5C180A00, // 000E MOVE R6 R5
+ 0x7C180000, // 000F CALL R6 0
+ 0x8C1C0735, // 0010 GETMET R7 R3 K53
+ 0x5C240C00, // 0011 MOVE R9 R6
+ 0x7C1C0400, // 0012 CALL R7 2
+ 0x1C1C0E04, // 0013 EQ R7 R7 R4
+ 0x741E0001, // 0014 JMPT R7 #0017
+ 0x1C1C0545, // 0015 EQ R7 R2 K69
+ 0x781E0001, // 0016 JMPF R7 #0019
+ 0xA8040001, // 0017 EXBLK 1 1
+ 0x80040C00, // 0018 RET 1 R6
+ 0x7001FFF3, // 0019 JMP #000E
+ 0x58140046, // 001A LDCONST R5 K70
+ 0xAC140200, // 001B CATCH R5 1 0
+ 0xB0080000, // 001C RAISE 2 R0 R0
+ 0x80000000, // 001D RET 0
})
)
);
@@ -458,31 +1015,31 @@ be_local_closure(class_Tasmota_remove_rule, /* name */
&be_const_str_remove_rule,
&be_const_str_solidified,
( &(const binstruction[27]) { /* code */
- 0x880C0114, // 0000 GETMBR R3 R0 K20
+ 0x880C0147, // 0000 GETMBR R3 R0 K71
0x780E0017, // 0001 JMPF R3 #001A
- 0x580C0001, // 0002 LDCONST R3 K1
+ 0x580C0004, // 0002 LDCONST R3 K4
0x6010000C, // 0003 GETGBL R4 G12
- 0x88140114, // 0004 GETMBR R5 R0 K20
+ 0x88140147, // 0004 GETMBR R5 R0 K71
0x7C100200, // 0005 CALL R4 1
0x14100604, // 0006 LT R4 R3 R4
0x78120011, // 0007 JMPF R4 #001A
- 0x88100114, // 0008 GETMBR R4 R0 K20
+ 0x88100147, // 0008 GETMBR R4 R0 K71
0x94100803, // 0009 GETIDX R4 R4 R3
- 0x88100904, // 000A GETMBR R4 R4 K4
- 0x88100915, // 000B GETMBR R4 R4 K21
+ 0x8810093C, // 000A GETMBR R4 R4 K60
+ 0x88100948, // 000B GETMBR R4 R4 K72
0x1C100801, // 000C EQ R4 R4 R1
0x78120009, // 000D JMPF R4 #0018
- 0x88100114, // 000E GETMBR R4 R0 K20
+ 0x88100147, // 000E GETMBR R4 R0 K71
0x94100803, // 000F GETIDX R4 R4 R3
- 0x88100903, // 0010 GETMBR R4 R4 K3
+ 0x88100930, // 0010 GETMBR R4 R4 K48
0x1C100802, // 0011 EQ R4 R4 R2
0x78120004, // 0012 JMPF R4 #0018
- 0x88100114, // 0013 GETMBR R4 R0 K20
- 0x8C100916, // 0014 GETMET R4 R4 K22
+ 0x88100147, // 0013 GETMBR R4 R0 K71
+ 0x8C100931, // 0014 GETMET R4 R4 K49
0x5C180600, // 0015 MOVE R6 R3
0x7C100400, // 0016 CALL R4 2
0x70020000, // 0017 JMP #0019
- 0x000C0705, // 0018 ADD R3 R3 K5
+ 0x000C072D, // 0018 ADD R3 R3 K45
0x7001FFE8, // 0019 JMP #0003
0x80000000, // 001A RET 0
})
@@ -492,102 +1049,11 @@ be_local_closure(class_Tasmota_remove_rule, /* name */
/********************************************************************
-** Solidified function: hs2rgb
+** Solidified function: remove_driver
********************************************************************/
-be_local_closure(class_Tasmota_hs2rgb, /* name */
+be_local_closure(class_Tasmota_remove_driver, /* name */
be_nested_proto(
- 17, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_hs2rgb,
- &be_const_str_solidified,
- ( &(const binstruction[68]) { /* code */
- 0x4C0C0000, // 0000 LDNIL R3
- 0x1C0C0403, // 0001 EQ R3 R2 R3
- 0x780E0000, // 0002 JMPF R3 #0004
- 0x540A00FE, // 0003 LDINT R2 255
- 0x540E00FE, // 0004 LDINT R3 255
- 0x541200FE, // 0005 LDINT R4 255
- 0x541600FE, // 0006 LDINT R5 255
- 0x541A0167, // 0007 LDINT R6 360
- 0x10040206, // 0008 MOD R1 R1 R6
- 0x24180501, // 0009 GT R6 R2 K1
- 0x781A0031, // 000A JMPF R6 #003D
- 0x541A003B, // 000B LDINT R6 60
- 0x0C180206, // 000C DIV R6 R1 R6
- 0x541E003B, // 000D LDINT R7 60
- 0x101C0207, // 000E MOD R7 R1 R7
- 0x542200FE, // 000F LDINT R8 255
- 0x04201002, // 0010 SUB R8 R8 R2
- 0xB8261400, // 0011 GETNGBL R9 K10
- 0x8C241317, // 0012 GETMET R9 R9 K23
- 0x5C2C0E00, // 0013 MOVE R11 R7
- 0x58300001, // 0014 LDCONST R12 K1
- 0x5436003B, // 0015 LDINT R13 60
- 0x543A00FE, // 0016 LDINT R14 255
- 0x5C3C1000, // 0017 MOVE R15 R8
- 0x7C240C00, // 0018 CALL R9 6
- 0xB82A1400, // 0019 GETNGBL R10 K10
- 0x8C281517, // 001A GETMET R10 R10 K23
- 0x5C300E00, // 001B MOVE R12 R7
- 0x58340001, // 001C LDCONST R13 K1
- 0x543A003B, // 001D LDINT R14 60
- 0x5C3C1000, // 001E MOVE R15 R8
- 0x544200FE, // 001F LDINT R16 255
- 0x7C280C00, // 0020 CALL R10 6
- 0x1C2C0D01, // 0021 EQ R11 R6 K1
- 0x782E0002, // 0022 JMPF R11 #0026
- 0x5C141400, // 0023 MOVE R5 R10
- 0x5C101000, // 0024 MOVE R4 R8
- 0x70020016, // 0025 JMP #003D
- 0x1C2C0D05, // 0026 EQ R11 R6 K5
- 0x782E0002, // 0027 JMPF R11 #002B
- 0x5C0C1200, // 0028 MOVE R3 R9
- 0x5C101000, // 0029 MOVE R4 R8
- 0x70020011, // 002A JMP #003D
- 0x1C2C0D18, // 002B EQ R11 R6 K24
- 0x782E0002, // 002C JMPF R11 #0030
- 0x5C0C1000, // 002D MOVE R3 R8
- 0x5C101400, // 002E MOVE R4 R10
- 0x7002000C, // 002F JMP #003D
- 0x1C2C0D19, // 0030 EQ R11 R6 K25
- 0x782E0002, // 0031 JMPF R11 #0035
- 0x5C0C1000, // 0032 MOVE R3 R8
- 0x5C141200, // 0033 MOVE R5 R9
- 0x70020007, // 0034 JMP #003D
- 0x542E0003, // 0035 LDINT R11 4
- 0x1C2C0C0B, // 0036 EQ R11 R6 R11
- 0x782E0002, // 0037 JMPF R11 #003B
- 0x5C0C1400, // 0038 MOVE R3 R10
- 0x5C141000, // 0039 MOVE R5 R8
- 0x70020001, // 003A JMP #003D
- 0x5C141000, // 003B MOVE R5 R8
- 0x5C101200, // 003C MOVE R4 R9
- 0x541A000F, // 003D LDINT R6 16
- 0x38180606, // 003E SHL R6 R3 R6
- 0x541E0007, // 003F LDINT R7 8
- 0x381C0A07, // 0040 SHL R7 R5 R7
- 0x30180C07, // 0041 OR R6 R6 R7
- 0x30180C04, // 0042 OR R6 R6 R4
- 0x80040C00, // 0043 RET 1 R6
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_driver
-********************************************************************/
-be_local_closure(class_Tasmota_add_driver, /* name */
- be_nested_proto(
- 5, /* nstack */
+ 6, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -596,34 +1062,29 @@ be_local_closure(class_Tasmota_add_driver, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_add_driver,
+ &be_const_str_remove_driver,
&be_const_str_solidified,
- ( &(const binstruction[25]) { /* code */
- 0x60080004, // 0000 GETGBL R2 G4
- 0x5C0C0200, // 0001 MOVE R3 R1
- 0x7C080200, // 0002 CALL R2 1
- 0x2008051A, // 0003 NE R2 R2 K26
- 0x780A0000, // 0004 JMPF R2 #0006
- 0xB006371C, // 0005 RAISE 1 K27 K28
- 0x8808011D, // 0006 GETMBR R2 R0 K29
- 0x780A000B, // 0007 JMPF R2 #0014
- 0x8808011D, // 0008 GETMBR R2 R0 K29
- 0x8C08051E, // 0009 GETMET R2 R2 K30
- 0x5C100200, // 000A MOVE R4 R1
- 0x7C080400, // 000B CALL R2 2
- 0x4C0C0000, // 000C LDNIL R3
- 0x1C080403, // 000D EQ R2 R2 R3
+ ( &(const binstruction[20]) { /* code */
+ 0x88080149, // 0000 GETMBR R2 R0 K73
+ 0x780A000A, // 0001 JMPF R2 #000D
+ 0x88080149, // 0002 GETMBR R2 R0 K73
+ 0x8C08050C, // 0003 GETMET R2 R2 K12
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x4C0C0000, // 0006 LDNIL R3
+ 0x200C0403, // 0007 NE R3 R2 R3
+ 0x780E0003, // 0008 JMPF R3 #000D
+ 0x880C0149, // 0009 GETMBR R3 R0 K73
+ 0x8C0C074A, // 000A GETMET R3 R3 K74
+ 0x5C140400, // 000B MOVE R5 R2
+ 0x7C0C0400, // 000C CALL R3 2
+ 0x8808014B, // 000D GETMBR R2 R0 K75
0x780A0003, // 000E JMPF R2 #0013
- 0x8808011D, // 000F GETMBR R2 R0 K29
- 0x8C080511, // 0010 GETMET R2 R2 K17
+ 0x8808014B, // 000F GETMBR R2 R0 K75
+ 0x8C08054C, // 0010 GETMET R2 R2 K76
0x5C100200, // 0011 MOVE R4 R1
0x7C080400, // 0012 CALL R2 2
- 0x70020003, // 0013 JMP #0018
- 0x60080012, // 0014 GETGBL R2 G18
- 0x7C080000, // 0015 CALL R2 0
- 0x400C0401, // 0016 CONNECT R3 R2 R1
- 0x90023A02, // 0017 SETMBR R0 K29 R2
- 0x80000000, // 0018 RET 0
+ 0x80000000, // 0013 RET 0
})
)
);
@@ -631,11 +1092,11 @@ be_local_closure(class_Tasmota_add_driver, /* name */
/********************************************************************
-** Solidified function: exec_rules
+** Solidified function: add_cmd
********************************************************************/
-be_local_closure(class_Tasmota_exec_rules, /* name */
+be_local_closure(class_Tasmota_add_cmd, /* name */
be_nested_proto(
- 14, /* nstack */
+ 6, /* nstack */
3, /* argc */
10, /* varg */
0, /* has upvals */
@@ -644,69 +1105,29 @@ be_local_closure(class_Tasmota_exec_rules, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_exec_rules,
+ &be_const_str_add_cmd,
&be_const_str_solidified,
- ( &(const binstruction[60]) { /* code */
- 0x880C011F, // 0000 GETMBR R3 R0 K31
- 0x88100114, // 0001 GETMBR R4 R0 K20
- 0x74120002, // 0002 JMPT R4 #0006
- 0x4C100000, // 0003 LDNIL R4
- 0x20100604, // 0004 NE R4 R3 R4
- 0x78120033, // 0005 JMPF R4 #003A
- 0xA4124000, // 0006 IMPORT R4 K32
- 0x4C140000, // 0007 LDNIL R5
- 0x90023E05, // 0008 SETMBR R0 K31 R5
- 0x50140000, // 0009 LDBOOL R5 0 0
- 0x8C180921, // 000A GETMET R6 R4 K33
- 0x5C200200, // 000B MOVE R8 R1
- 0x7C180400, // 000C CALL R6 2
- 0x4C1C0000, // 000D LDNIL R7
- 0x1C1C0C07, // 000E EQ R7 R6 R7
- 0x781E0004, // 000F JMPF R7 #0015
- 0x8C1C0122, // 0010 GETMET R7 R0 K34
- 0x00264601, // 0011 ADD R9 K35 R1
- 0x58280019, // 0012 LDCONST R10 K25
- 0x7C1C0600, // 0013 CALL R7 3
- 0x5C180200, // 0014 MOVE R6 R1
- 0x780A001E, // 0015 JMPF R2 #0035
- 0x881C0114, // 0016 GETMBR R7 R0 K20
- 0x781E001C, // 0017 JMPF R7 #0035
- 0x581C0001, // 0018 LDCONST R7 K1
- 0x6020000C, // 0019 GETGBL R8 G12
- 0x88240114, // 001A GETMBR R9 R0 K20
- 0x7C200200, // 001B CALL R8 1
- 0x14200E08, // 001C LT R8 R7 R8
- 0x78220016, // 001D JMPF R8 #0035
- 0x88200114, // 001E GETMBR R8 R0 K20
- 0x94201007, // 001F GETIDX R8 R8 R7
- 0x8C240124, // 0020 GETMET R9 R0 K36
- 0x5C2C0C00, // 0021 MOVE R11 R6
- 0x88301104, // 0022 GETMBR R12 R8 K4
- 0x88341125, // 0023 GETMBR R13 R8 K37
- 0x7C240800, // 0024 CALL R9 4
- 0x74160001, // 0025 JMPT R5 #0028
- 0x74260000, // 0026 JMPT R9 #0028
- 0x50140001, // 0027 LDBOOL R5 0 1
- 0x50140200, // 0028 LDBOOL R5 1 0
- 0x78260008, // 0029 JMPF R9 #0033
- 0x88281126, // 002A GETMBR R10 R8 K38
- 0x502C0200, // 002B LDBOOL R11 1 0
- 0x1C28140B, // 002C EQ R10 R10 R11
- 0x782A0004, // 002D JMPF R10 #0033
- 0x88280114, // 002E GETMBR R10 R0 K20
- 0x8C281516, // 002F GETMET R10 R10 K22
- 0x5C300E00, // 0030 MOVE R12 R7
- 0x7C280400, // 0031 CALL R10 2
- 0x70020000, // 0032 JMP #0034
- 0x001C0F05, // 0033 ADD R7 R7 K5
- 0x7001FFE3, // 0034 JMP #0019
- 0x4C1C0000, // 0035 LDNIL R7
- 0x201C0607, // 0036 NE R7 R3 R7
- 0x781E0000, // 0037 JMPF R7 #0039
- 0x90023E06, // 0038 SETMBR R0 K31 R6
- 0x80040A00, // 0039 RET 1 R5
- 0x50100000, // 003A LDBOOL R4 0 0
- 0x80040800, // 003B RET 1 R4
+ ( &(const binstruction[20]) { /* code */
+ 0x8C0C011A, // 0000 GETMET R3 R0 K26
+ 0x5C140400, // 0001 MOVE R5 R2
+ 0x7C0C0400, // 0002 CALL R3 2
+ 0x880C0116, // 0003 GETMBR R3 R0 K22
+ 0x4C100000, // 0004 LDNIL R4
+ 0x1C0C0604, // 0005 EQ R3 R3 R4
+ 0x780E0002, // 0006 JMPF R3 #000A
+ 0x600C0013, // 0007 GETGBL R3 G19
+ 0x7C0C0000, // 0008 CALL R3 0
+ 0x90022C03, // 0009 SETMBR R0 K22 R3
+ 0x600C0004, // 000A GETGBL R3 G4
+ 0x5C100400, // 000B MOVE R4 R2
+ 0x7C0C0200, // 000C CALL R3 1
+ 0x1C0C0728, // 000D EQ R3 R3 K40
+ 0x780E0002, // 000E JMPF R3 #0012
+ 0x880C0116, // 000F GETMBR R3 R0 K22
+ 0x980C0202, // 0010 SETIDX R3 R1 R2
+ 0x70020000, // 0011 JMP #0013
+ 0xB006534D, // 0012 RAISE 1 K41 K77
+ 0x80000000, // 0013 RET 0
})
)
);
@@ -714,11 +1135,49 @@ be_local_closure(class_Tasmota_exec_rules, /* name */
/********************************************************************
-** Solidified function: set_timer
+** Solidified function: remove_fast_loop
********************************************************************/
-be_local_closure(class_Tasmota_set_timer, /* name */
+be_local_closure(class_Tasmota_remove_fast_loop, /* name */
be_nested_proto(
- 10, /* nstack */
+ 6, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_remove_fast_loop,
+ &be_const_str_solidified,
+ ( &(const binstruction[15]) { /* code */
+ 0x88080127, // 0000 GETMBR R2 R0 K39
+ 0x740A0000, // 0001 JMPT R2 #0003
+ 0x80000400, // 0002 RET 0
+ 0x88080127, // 0003 GETMBR R2 R0 K39
+ 0x8C08050C, // 0004 GETMET R2 R2 K12
+ 0x5C100200, // 0005 MOVE R4 R1
+ 0x7C080400, // 0006 CALL R2 2
+ 0x4C0C0000, // 0007 LDNIL R3
+ 0x200C0403, // 0008 NE R3 R2 R3
+ 0x780E0003, // 0009 JMPF R3 #000E
+ 0x880C0127, // 000A GETMBR R3 R0 K39
+ 0x8C0C0731, // 000B GETMET R3 R3 K49
+ 0x5C140400, // 000C MOVE R5 R2
+ 0x7C0C0400, // 000D CALL R3 2
+ 0x80000000, // 000E RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: add_cron
+********************************************************************/
+be_local_closure(class_Tasmota_add_cron, /* name */
+ be_nested_proto(
+ 13, /* nstack */
4, /* argc */
10, /* varg */
0, /* has upvals */
@@ -727,30 +1186,490 @@ be_local_closure(class_Tasmota_set_timer, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_set_timer,
+ &be_const_str_add_cron,
&be_const_str_solidified,
- ( &(const binstruction[21]) { /* code */
- 0x8C100127, // 0000 GETMET R4 R0 K39
+ ( &(const binstruction[27]) { /* code */
+ 0x8C10011A, // 0000 GETMET R4 R0 K26
0x5C180400, // 0001 MOVE R6 R2
0x7C100400, // 0002 CALL R4 2
- 0x88100128, // 0003 GETMBR R4 R0 K40
+ 0x88100139, // 0003 GETMBR R4 R0 K57
0x4C140000, // 0004 LDNIL R5
0x1C100805, // 0005 EQ R4 R4 R5
0x78120002, // 0006 JMPF R4 #000A
0x60100012, // 0007 GETGBL R4 G18
0x7C100000, // 0008 CALL R4 0
- 0x90025004, // 0009 SETMBR R0 K40 R4
- 0x88100128, // 000A GETMBR R4 R0 K40
- 0x8C100911, // 000B GETMET R4 R4 K17
- 0xB81A5200, // 000C GETNGBL R6 K41
- 0x8C1C012A, // 000D GETMET R7 R0 K42
- 0x5C240200, // 000E MOVE R9 R1
- 0x7C1C0400, // 000F CALL R7 2
- 0x5C200400, // 0010 MOVE R8 R2
- 0x5C240600, // 0011 MOVE R9 R3
- 0x7C180600, // 0012 CALL R6 3
- 0x7C100400, // 0013 CALL R4 2
- 0x80000000, // 0014 RET 0
+ 0x90027204, // 0009 SETMBR R0 K57 R4
+ 0xB8127400, // 000A GETNGBL R4 K58
+ 0x60140008, // 000B GETGBL R5 G8
+ 0x5C180200, // 000C MOVE R6 R1
+ 0x7C140200, // 000D CALL R5 1
+ 0x7C100200, // 000E CALL R4 1
+ 0x8C14093D, // 000F GETMET R5 R4 K61
+ 0x7C140200, // 0010 CALL R5 1
+ 0x88180139, // 0011 GETMBR R6 R0 K57
+ 0x8C180D1D, // 0012 GETMET R6 R6 K29
+ 0xB8229C00, // 0013 GETNGBL R8 K78
+ 0x5C240A00, // 0014 MOVE R9 R5
+ 0x5C280400, // 0015 MOVE R10 R2
+ 0x5C2C0600, // 0016 MOVE R11 R3
+ 0x5C300800, // 0017 MOVE R12 R4
+ 0x7C200800, // 0018 CALL R8 4
+ 0x7C180400, // 0019 CALL R6 2
+ 0x80000000, // 001A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: exec_tele
+********************************************************************/
+be_local_closure(class_Tasmota_exec_tele, /* name */
+ be_nested_proto(
+ 12, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_exec_tele,
+ &be_const_str_solidified,
+ ( &(const binstruction[41]) { /* code */
+ 0x88080147, // 0000 GETMBR R2 R0 K71
+ 0x780A0024, // 0001 JMPF R2 #0027
+ 0xA40A0000, // 0002 IMPORT R2 K0
+ 0x8C0C050B, // 0003 GETMET R3 R2 K11
+ 0x5C140200, // 0004 MOVE R5 R1
+ 0x7C0C0400, // 0005 CALL R3 2
+ 0x50100000, // 0006 LDBOOL R4 0 0
+ 0x4C140000, // 0007 LDNIL R5
+ 0x1C140605, // 0008 EQ R5 R3 R5
+ 0x78160004, // 0009 JMPF R5 #000F
+ 0x8C140114, // 000A GETMET R5 R0 K20
+ 0x001E9E01, // 000B ADD R7 K79 R1
+ 0x58200050, // 000C LDCONST R8 K80
+ 0x7C140600, // 000D CALL R5 3
+ 0x5C0C0200, // 000E MOVE R3 R1
+ 0x60140013, // 000F GETGBL R5 G19
+ 0x7C140000, // 0010 CALL R5 0
+ 0x9816A203, // 0011 SETIDX R5 K81 R3
+ 0x5C0C0A00, // 0012 MOVE R3 R5
+ 0x58140004, // 0013 LDCONST R5 K4
+ 0x6018000C, // 0014 GETGBL R6 G12
+ 0x881C0147, // 0015 GETMBR R7 R0 K71
+ 0x7C180200, // 0016 CALL R6 1
+ 0x14180A06, // 0017 LT R6 R5 R6
+ 0x781A000C, // 0018 JMPF R6 #0026
+ 0x88180147, // 0019 GETMBR R6 R0 K71
+ 0x94180C05, // 001A GETIDX R6 R6 R5
+ 0x8C1C0152, // 001B GETMET R7 R0 K82
+ 0x5C240600, // 001C MOVE R9 R3
+ 0x88280D3C, // 001D GETMBR R10 R6 K60
+ 0x882C0D3F, // 001E GETMBR R11 R6 K63
+ 0x7C1C0800, // 001F CALL R7 4
+ 0x741E0001, // 0020 JMPT R7 #0023
+ 0x74120000, // 0021 JMPT R4 #0023
+ 0x50100001, // 0022 LDBOOL R4 0 1
+ 0x50100200, // 0023 LDBOOL R4 1 0
+ 0x00140B2D, // 0024 ADD R5 R5 K45
+ 0x7001FFED, // 0025 JMP #0014
+ 0x80040800, // 0026 RET 1 R4
+ 0x50080000, // 0027 LDBOOL R2 0 0
+ 0x80040400, // 0028 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: gen_cb
+********************************************************************/
+be_local_closure(class_Tasmota_gen_cb, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_gen_cb,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 5]) { /* code */
+ 0xA40AA600, // 0000 IMPORT R2 K83
+ 0x8C0C0554, // 0001 GETMET R3 R2 K84
+ 0x5C140200, // 0002 MOVE R5 R1
+ 0x7C0C0400, // 0003 CALL R3 2
+ 0x80040600, // 0004 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: run_network_up
+********************************************************************/
+be_local_closure(class_Tasmota_run_network_up, /* name */
+ be_nested_proto(
+ 9, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_run_network_up,
+ &be_const_str_solidified,
+ ( &(const binstruction[39]) { /* code */
+ 0x8804011C, // 0000 GETMBR R1 R0 K28
+ 0x4C080000, // 0001 LDNIL R2
+ 0x1C040202, // 0002 EQ R1 R1 R2
+ 0x78060000, // 0003 JMPF R1 #0005
+ 0x80000200, // 0004 RET 0
+ 0x8C04011B, // 0005 GETMET R1 R0 K27
+ 0x7C040200, // 0006 CALL R1 1
+ 0x7806001D, // 0007 JMPF R1 #0026
+ 0x6004000C, // 0008 GETGBL R1 G12
+ 0x8808011C, // 0009 GETMBR R2 R0 K28
+ 0x7C040200, // 000A CALL R1 1
+ 0x24040304, // 000B GT R1 R1 K4
+ 0x78060016, // 000C JMPF R1 #0024
+ 0x8804011C, // 000D GETMBR R1 R0 K28
+ 0x94040304, // 000E GETIDX R1 R1 K4
+ 0x8808011C, // 000F GETMBR R2 R0 K28
+ 0x8C080531, // 0010 GETMET R2 R2 K49
+ 0x58100004, // 0011 LDCONST R4 K4
+ 0x7C080400, // 0012 CALL R2 2
+ 0xA8020003, // 0013 EXBLK 0 #0018
+ 0x5C080200, // 0014 MOVE R2 R1
+ 0x7C080000, // 0015 CALL R2 0
+ 0xA8040001, // 0016 EXBLK 1 1
+ 0x7002000A, // 0017 JMP #0023
+ 0xAC080002, // 0018 CATCH R2 0 2
+ 0x70020007, // 0019 JMP #0022
+ 0x60100001, // 001A GETGBL R4 G1
+ 0x60140018, // 001B GETGBL R5 G24
+ 0x58180055, // 001C LDCONST R6 K85
+ 0x5C1C0400, // 001D MOVE R7 R2
+ 0x5C200600, // 001E MOVE R8 R3
+ 0x7C140600, // 001F CALL R5 3
+ 0x7C100200, // 0020 CALL R4 1
+ 0x70020000, // 0021 JMP #0023
+ 0xB0080000, // 0022 RAISE 2 R0 R0
+ 0x7001FFE3, // 0023 JMP #0008
+ 0x4C040000, // 0024 LDNIL R1
+ 0x90023801, // 0025 SETMBR R0 K28 R1
+ 0x80000000, // 0026 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: run_timers
+********************************************************************/
+be_local_closure(class_Tasmota_run_timers, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_run_timers,
+ &be_const_str_solidified,
+ ( &(const binstruction[27]) { /* code */
+ 0x8C040156, // 0000 GETMET R1 R0 K86
+ 0x7C040200, // 0001 CALL R1 1
+ 0x8804012E, // 0002 GETMBR R1 R0 K46
+ 0x78060015, // 0003 JMPF R1 #001A
+ 0x58040004, // 0004 LDCONST R1 K4
+ 0x8808012E, // 0005 GETMBR R2 R0 K46
+ 0x8C08052F, // 0006 GETMET R2 R2 K47
+ 0x7C080200, // 0007 CALL R2 1
+ 0x14080202, // 0008 LT R2 R1 R2
+ 0x780A000F, // 0009 JMPF R2 #001A
+ 0x8808012E, // 000A GETMBR R2 R0 K46
+ 0x94080401, // 000B GETIDX R2 R2 R1
+ 0x8C0C013E, // 000C GETMET R3 R0 K62
+ 0x8814053C, // 000D GETMBR R5 R2 K60
+ 0x7C0C0400, // 000E CALL R3 2
+ 0x780E0007, // 000F JMPF R3 #0018
+ 0x880C053F, // 0010 GETMBR R3 R2 K63
+ 0x8810012E, // 0011 GETMBR R4 R0 K46
+ 0x8C100931, // 0012 GETMET R4 R4 K49
+ 0x5C180200, // 0013 MOVE R6 R1
+ 0x7C100400, // 0014 CALL R4 2
+ 0x5C100600, // 0015 MOVE R4 R3
+ 0x7C100000, // 0016 CALL R4 0
+ 0x70020000, // 0017 JMP #0019
+ 0x0004032D, // 0018 ADD R1 R1 K45
+ 0x7001FFEA, // 0019 JMP #0005
+ 0x80000000, // 001A RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: add_extension
+********************************************************************/
+be_local_closure(class_Tasmota_add_extension, /* name */
+ be_nested_proto(
+ 8, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_add_extension,
+ &be_const_str_solidified,
+ ( &(const binstruction[51]) { /* code */
+ 0x4C0C0000, // 0000 LDNIL R3
+ 0x1C0C0403, // 0001 EQ R3 R2 R3
+ 0x780E0001, // 0002 JMPF R3 #0005
+ 0xB80E0400, // 0003 GETNGBL R3 K2
+ 0x88080703, // 0004 GETMBR R2 R3 K3
+ 0x600C0004, // 0005 GETGBL R3 G4
+ 0x5C100200, // 0006 MOVE R4 R1
+ 0x7C0C0200, // 0007 CALL R3 1
+ 0x200C0757, // 0008 NE R3 R3 K87
+ 0x740E0004, // 0009 JMPT R3 #000F
+ 0x600C0004, // 000A GETGBL R3 G4
+ 0x5C100400, // 000B MOVE R4 R2
+ 0x7C0C0200, // 000C CALL R3 1
+ 0x200C0701, // 000D NE R3 R3 K1
+ 0x780E0000, // 000E JMPF R3 #0010
+ 0xB0065358, // 000F RAISE 1 K41 K88
+ 0x4C0C0000, // 0010 LDNIL R3
+ 0x200C0403, // 0011 NE R3 R2 R3
+ 0x780E001E, // 0012 JMPF R3 #0032
+ 0xA40E0200, // 0013 IMPORT R3 K1
+ 0x8810014B, // 0014 GETMBR R4 R0 K75
+ 0x4C140000, // 0015 LDNIL R5
+ 0x1C100805, // 0016 EQ R4 R4 R5
+ 0x78120002, // 0017 JMPF R4 #001B
+ 0xB812B200, // 0018 GETNGBL R4 K89
+ 0x7C100000, // 0019 CALL R4 0
+ 0x90029604, // 001A SETMBR R0 K75 R4
+ 0x8C100712, // 001B GETMET R4 R3 K18
+ 0x5C180400, // 001C MOVE R6 R2
+ 0x581C0006, // 001D LDCONST R7 K6
+ 0x7C100600, // 001E CALL R4 3
+ 0x78120002, // 001F JMPF R4 #0023
+ 0x5411FFFD, // 0020 LDINT R4 -2
+ 0x40120804, // 0021 CONNECT R4 K4 R4
+ 0x94080404, // 0022 GETIDX R2 R2 R4
+ 0x8810014B, // 0023 GETMBR R4 R0 K75
+ 0x8C10095A, // 0024 GETMET R4 R4 K90
+ 0x5C180400, // 0025 MOVE R6 R2
+ 0x7C100400, // 0026 CALL R4 2
+ 0x78120007, // 0027 JMPF R4 #0030
+ 0xB8122800, // 0028 GETNGBL R4 K20
+ 0x60140018, // 0029 GETGBL R5 G24
+ 0x5818005B, // 002A LDCONST R6 K91
+ 0x5C1C0400, // 002B MOVE R7 R2
+ 0x7C140400, // 002C CALL R5 2
+ 0x58180050, // 002D LDCONST R6 K80
+ 0x7C100400, // 002E CALL R4 2
+ 0x70020001, // 002F JMP #0032
+ 0x8810014B, // 0030 GETMBR R4 R0 K75
+ 0x98100401, // 0031 SETIDX R4 R2 R1
+ 0x80000000, // 0032 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: wire_scan
+********************************************************************/
+be_local_closure(class_Tasmota_wire_scan, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_wire_scan,
+ &be_const_str_solidified,
+ ( &(const binstruction[33]) { /* code */
+ 0x4C0C0000, // 0000 LDNIL R3
+ 0x200C0403, // 0001 NE R3 R2 R3
+ 0x780E0005, // 0002 JMPF R3 #0009
+ 0x8C0C015C, // 0003 GETMET R3 R0 K92
+ 0x5C140400, // 0004 MOVE R5 R2
+ 0x7C0C0400, // 0005 CALL R3 2
+ 0x740E0001, // 0006 JMPT R3 #0009
+ 0x4C0C0000, // 0007 LDNIL R3
+ 0x80040600, // 0008 RET 1 R3
+ 0x880C015D, // 0009 GETMBR R3 R0 K93
+ 0x8C0C075E, // 000A GETMET R3 R3 K94
+ 0x7C0C0200, // 000B CALL R3 1
+ 0x780E0006, // 000C JMPF R3 #0014
+ 0x880C015D, // 000D GETMBR R3 R0 K93
+ 0x8C0C075F, // 000E GETMET R3 R3 K95
+ 0x5C140200, // 000F MOVE R5 R1
+ 0x7C0C0400, // 0010 CALL R3 2
+ 0x780E0001, // 0011 JMPF R3 #0014
+ 0x880C015D, // 0012 GETMBR R3 R0 K93
+ 0x80040600, // 0013 RET 1 R3
+ 0x880C0160, // 0014 GETMBR R3 R0 K96
+ 0x8C0C075E, // 0015 GETMET R3 R3 K94
+ 0x7C0C0200, // 0016 CALL R3 1
+ 0x780E0006, // 0017 JMPF R3 #001F
+ 0x880C0160, // 0018 GETMBR R3 R0 K96
+ 0x8C0C075F, // 0019 GETMET R3 R3 K95
+ 0x5C140200, // 001A MOVE R5 R1
+ 0x7C0C0400, // 001B CALL R3 2
+ 0x780E0001, // 001C JMPF R3 #001F
+ 0x880C0160, // 001D GETMBR R3 R0 K96
+ 0x80040600, // 001E RET 1 R3
+ 0x4C0C0000, // 001F LDNIL R3
+ 0x80040600, // 0020 RET 1 R3
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: urlfetch
+********************************************************************/
+be_local_closure(class_Tasmota_urlfetch, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_urlfetch,
+ &be_const_str_solidified,
+ ( &(const binstruction[48]) { /* code */
+ 0x4C0C0000, // 0000 LDNIL R3
+ 0x1C0C0403, // 0001 EQ R3 R2 R3
+ 0x780E000D, // 0002 JMPF R3 #0011
+ 0xA40E0200, // 0003 IMPORT R3 K1
+ 0x8C100761, // 0004 GETMET R4 R3 K97
+ 0x5C180200, // 0005 MOVE R6 R1
+ 0x581C0005, // 0006 LDCONST R7 K5
+ 0x7C100600, // 0007 CALL R4 3
+ 0x8C10094A, // 0008 GETMET R4 R4 K74
+ 0x7C100200, // 0009 CALL R4 1
+ 0x5C080800, // 000A MOVE R2 R4
+ 0x6010000C, // 000B GETGBL R4 G12
+ 0x5C140400, // 000C MOVE R5 R2
+ 0x7C100200, // 000D CALL R4 1
+ 0x1C100904, // 000E EQ R4 R4 K4
+ 0x78120000, // 000F JMPF R4 #0011
+ 0x58080062, // 0010 LDCONST R2 K98
+ 0xB80EC600, // 0011 GETNGBL R3 K99
+ 0x7C0C0000, // 0012 CALL R3 0
+ 0x8C100764, // 0013 GETMET R4 R3 K100
+ 0x50180200, // 0014 LDBOOL R6 1 0
+ 0x7C100400, // 0015 CALL R4 2
+ 0x8C100765, // 0016 GETMET R4 R3 K101
+ 0x5C180200, // 0017 MOVE R6 R1
+ 0x7C100400, // 0018 CALL R4 2
+ 0x8C100766, // 0019 GETMET R4 R3 K102
+ 0x7C100200, // 001A CALL R4 1
+ 0x541600C7, // 001B LDINT R5 200
+ 0x20140805, // 001C NE R5 R4 R5
+ 0x78160004, // 001D JMPF R5 #0023
+ 0x60140008, // 001E GETGBL R5 G8
+ 0x5C180800, // 001F MOVE R6 R4
+ 0x7C140200, // 0020 CALL R5 1
+ 0x0016CE05, // 0021 ADD R5 K103 R5
+ 0xB006D005, // 0022 RAISE 1 K104 R5
+ 0x8C140769, // 0023 GETMET R5 R3 K105
+ 0x5C1C0400, // 0024 MOVE R7 R2
+ 0x7C140400, // 0025 CALL R5 2
+ 0x8C18070A, // 0026 GETMET R6 R3 K10
+ 0x7C180200, // 0027 CALL R6 1
+ 0x8C180114, // 0028 GETMET R6 R0 K20
+ 0x60200008, // 0029 GETGBL R8 G8
+ 0x5C240A00, // 002A MOVE R9 R5
+ 0x7C200200, // 002B CALL R8 1
+ 0x0022D408, // 002C ADD R8 K106 R8
+ 0x58240050, // 002D LDCONST R9 K80
+ 0x7C180600, // 002E CALL R6 3
+ 0x80040800, // 002F RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: run_deferred
+********************************************************************/
+be_local_closure(class_Tasmota_run_deferred, /* name */
+ be_nested_proto(
+ 6, /* nstack */
+ 1, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_run_deferred,
+ &be_const_str_solidified,
+ ( &(const binstruction[26]) { /* code */
+ 0x8804016B, // 0000 GETMBR R1 R0 K107
+ 0x78060016, // 0001 JMPF R1 #0019
+ 0x6004000C, // 0002 GETGBL R1 G12
+ 0x8808016B, // 0003 GETMBR R2 R0 K107
+ 0x7C040200, // 0004 CALL R1 1
+ 0x24080304, // 0005 GT R2 R1 K4
+ 0x780A0009, // 0006 JMPF R2 #0011
+ 0x8808016B, // 0007 GETMBR R2 R0 K107
+ 0x94080504, // 0008 GETIDX R2 R2 K4
+ 0x880C016B, // 0009 GETMBR R3 R0 K107
+ 0x8C0C0731, // 000A GETMET R3 R3 K49
+ 0x58140004, // 000B LDCONST R5 K4
+ 0x7C0C0400, // 000C CALL R3 2
+ 0x0404032D, // 000D SUB R1 R1 K45
+ 0x5C0C0400, // 000E MOVE R3 R2
+ 0x7C0C0000, // 000F CALL R3 0
+ 0x7001FFF3, // 0010 JMP #0005
+ 0x6008000C, // 0011 GETGBL R2 G12
+ 0x880C016B, // 0012 GETMBR R3 R0 K107
+ 0x7C080200, // 0013 CALL R2 1
+ 0x1C080504, // 0014 EQ R2 R2 K4
+ 0x780A0002, // 0015 JMPF R2 #0019
+ 0xB80A0400, // 0016 GETNGBL R2 K2
+ 0x8808052B, // 0017 GETMBR R2 R2 K43
+ 0x900AD904, // 0018 SETMBR R2 K108 K4
+ 0x80000000, // 0019 RET 0
})
)
);
@@ -802,36 +1721,36 @@ be_local_closure(class_Tasmota_init, /* name */
&be_const_str_init,
&be_const_str_solidified,
( &(const binstruction[34]) { /* code */
- 0xB8065600, // 0000 GETNGBL R1 K43
- 0x8808012C, // 0001 GETMBR R2 R0 K44
- 0x880C012D, // 0002 GETMBR R3 R0 K45
+ 0xB806DA00, // 0000 GETNGBL R1 K109
+ 0x8808016E, // 0001 GETMBR R2 R0 K110
+ 0x880C016F, // 0002 GETMBR R3 R0 K111
0x7C040400, // 0003 CALL R1 2
- 0x90022401, // 0004 SETMBR R0 K18 R1
- 0xA4065C00, // 0005 IMPORT R1 K46
+ 0x90025601, // 0004 SETMBR R0 K43 R1
+ 0xA406E000, // 0005 IMPORT R1 K112
0x60080015, // 0006 GETGBL R2 G21
- 0x880C012F, // 0007 GETMBR R3 R0 K47
+ 0x880C0171, // 0007 GETMBR R3 R0 K113
0x54120003, // 0008 LDINT R4 4
0x7C080400, // 0009 CALL R2 2
- 0x8C080509, // 000A GETMET R2 R2 K9
- 0x58100001, // 000B LDCONST R4 K1
+ 0x8C080572, // 000A GETMET R2 R2 K114
+ 0x58100004, // 000B LDCONST R4 K4
0x54160003, // 000C LDINT R5 4
0x7C080600, // 000D CALL R2 3
0x780A0006, // 000E JMPF R2 #0016
- 0xB80E5600, // 000F GETNGBL R3 K43
- 0x8C100331, // 0010 GETMET R4 R1 K49
+ 0xB80EDA00, // 000F GETNGBL R3 K109
+ 0x8C100374, // 0010 GETMET R4 R1 K116
0x5C180400, // 0011 MOVE R6 R2
0x7C100400, // 0012 CALL R4 2
- 0x88140132, // 0013 GETMBR R5 R0 K50
+ 0x88140175, // 0013 GETMBR R5 R0 K117
0x7C0C0400, // 0014 CALL R3 2
- 0x90026003, // 0015 SETMBR R0 K48 R3
- 0x90026734, // 0016 SETMBR R0 K51 K52
- 0xB80E2400, // 0017 GETNGBL R3 K18
- 0x8C0C0736, // 0018 GETMET R3 R3 K54
- 0x58140037, // 0019 LDCONST R5 K55
+ 0x9002E603, // 0015 SETMBR R0 K115 R3
+ 0x90020707, // 0016 SETMBR R0 K3 K7
+ 0xB80E5600, // 0017 GETNGBL R3 K43
+ 0x8C0C075A, // 0018 GETMET R3 R3 K90
+ 0x58140077, // 0019 LDCONST R5 K119
0x7C0C0400, // 001A CALL R3 2
- 0x90026A03, // 001B SETMBR R0 K53 R3
- 0x8C0C0138, // 001C GETMET R3 R0 K56
- 0x58140039, // 001D LDCONST R5 K57
+ 0x9002EC03, // 001B SETMBR R0 K118 R3
+ 0x8C0C0178, // 001C GETMET R3 R0 K120
+ 0x58140079, // 001D LDCONST R5 K121
0x84180000, // 001E CLOSURE R6 P0
0x7C0C0600, // 001F CALL R3 3
0xA0000000, // 0020 CLOSE R0
@@ -843,247 +1762,9 @@ be_local_closure(class_Tasmota_init, /* name */
/********************************************************************
-** Solidified function: remove_driver
+** Solidified function: defer
********************************************************************/
-be_local_closure(class_Tasmota_remove_driver, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_remove_driver,
- &be_const_str_solidified,
- ( &(const binstruction[14]) { /* code */
- 0x8808011D, // 0000 GETMBR R2 R0 K29
- 0x780A000A, // 0001 JMPF R2 #000D
- 0x8808011D, // 0002 GETMBR R2 R0 K29
- 0x8C08051E, // 0003 GETMET R2 R2 K30
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x4C0C0000, // 0006 LDNIL R3
- 0x200C0403, // 0007 NE R3 R2 R3
- 0x780E0003, // 0008 JMPF R3 #000D
- 0x880C011D, // 0009 GETMBR R3 R0 K29
- 0x8C0C073A, // 000A GETMET R3 R3 K58
- 0x5C140400, // 000B MOVE R5 R2
- 0x7C0C0400, // 000C CALL R3 2
- 0x80000000, // 000D RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: compile
-********************************************************************/
-be_local_closure(class_Tasmota_compile, /* name */
- be_nested_proto(
- 12, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_compile,
- &be_const_str_solidified,
- ( &(const binstruction[85]) { /* code */
- 0xA40A7600, // 0000 IMPORT R2 K59
- 0x8C0C053C, // 0001 GETMET R3 R2 K60
- 0x5C140200, // 0002 MOVE R5 R1
- 0x5818003D, // 0003 LDCONST R6 K61
- 0x7C0C0600, // 0004 CALL R3 3
- 0x740E0007, // 0005 JMPT R3 #000E
- 0x600C0001, // 0006 GETGBL R3 G1
- 0x60100018, // 0007 GETGBL R4 G24
- 0x5814003E, // 0008 LDCONST R5 K62
- 0x5C180200, // 0009 MOVE R6 R1
- 0x7C100400, // 000A CALL R4 2
- 0x7C0C0200, // 000B CALL R3 1
- 0x500C0000, // 000C LDBOOL R3 0 0
- 0x80040600, // 000D RET 1 R3
- 0x8C0C051E, // 000E GETMET R3 R2 K30
- 0x5C140200, // 000F MOVE R5 R1
- 0x5818003F, // 0010 LDCONST R6 K63
- 0x7C0C0600, // 0011 CALL R3 3
- 0x240C0701, // 0012 GT R3 R3 K1
- 0x780E0006, // 0013 JMPF R3 #001B
- 0x600C0001, // 0014 GETGBL R3 G1
- 0x60100018, // 0015 GETGBL R4 G24
- 0x58140040, // 0016 LDCONST R5 K64
- 0x7C100200, // 0017 CALL R4 1
- 0x7C0C0200, // 0018 CALL R3 1
- 0x500C0000, // 0019 LDBOOL R3 0 0
- 0x80040600, // 001A RET 1 R3
- 0x4C0C0000, // 001B LDNIL R3
- 0xA8020012, // 001C EXBLK 0 #0030
- 0x6010000D, // 001D GETGBL R4 G13
- 0x5C140200, // 001E MOVE R5 R1
- 0x58180041, // 001F LDCONST R6 K65
- 0x501C0200, // 0020 LDBOOL R7 1 0
- 0x7C100600, // 0021 CALL R4 3
- 0x5C0C0800, // 0022 MOVE R3 R4
- 0x4C100000, // 0023 LDNIL R4
- 0x1C100604, // 0024 EQ R4 R3 R4
- 0x78120007, // 0025 JMPF R4 #002E
- 0x60100001, // 0026 GETGBL R4 G1
- 0x60140018, // 0027 GETGBL R5 G24
- 0x58180042, // 0028 LDCONST R6 K66
- 0x7C140200, // 0029 CALL R5 1
- 0x7C100200, // 002A CALL R4 1
- 0x50100000, // 002B LDBOOL R4 0 0
- 0xA8040001, // 002C EXBLK 1 1
- 0x80040800, // 002D RET 1 R4
- 0xA8040001, // 002E EXBLK 1 1
- 0x7002000D, // 002F JMP #003E
- 0xAC100002, // 0030 CATCH R4 0 2
- 0x7002000A, // 0031 JMP #003D
- 0x60180001, // 0032 GETGBL R6 G1
- 0x601C0018, // 0033 GETGBL R7 G24
- 0x58200043, // 0034 LDCONST R8 K67
- 0x5C240200, // 0035 MOVE R9 R1
- 0x5C280800, // 0036 MOVE R10 R4
- 0x5C2C0A00, // 0037 MOVE R11 R5
- 0x7C1C0800, // 0038 CALL R7 4
- 0x7C180200, // 0039 CALL R6 1
- 0x50180000, // 003A LDBOOL R6 0 0
- 0x80040C00, // 003B RET 1 R6
- 0x70020000, // 003C JMP #003E
- 0xB0080000, // 003D RAISE 2 R0 R0
- 0x00100344, // 003E ADD R4 R1 K68
- 0xA8020005, // 003F EXBLK 0 #0046
- 0x8C140145, // 0040 GETMET R5 R0 K69
- 0x5C1C0800, // 0041 MOVE R7 R4
- 0x5C200600, // 0042 MOVE R8 R3
- 0x7C140600, // 0043 CALL R5 3
- 0xA8040001, // 0044 EXBLK 1 1
- 0x7002000C, // 0045 JMP #0053
- 0xAC140001, // 0046 CATCH R5 0 1
- 0x70020009, // 0047 JMP #0052
- 0x60180001, // 0048 GETGBL R6 G1
- 0x601C0018, // 0049 GETGBL R7 G24
- 0x58200046, // 004A LDCONST R8 K70
- 0x5C240800, // 004B MOVE R9 R4
- 0x5C280A00, // 004C MOVE R10 R5
- 0x7C1C0600, // 004D CALL R7 3
- 0x7C180200, // 004E CALL R6 1
- 0x50180000, // 004F LDBOOL R6 0 0
- 0x80040C00, // 0050 RET 1 R6
- 0x70020000, // 0051 JMP #0053
- 0xB0080000, // 0052 RAISE 2 R0 R0
- 0x50140200, // 0053 LDBOOL R5 1 0
- 0x80040A00, // 0054 RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_cmd
-********************************************************************/
-be_local_closure(class_Tasmota_add_cmd, /* name */
- be_nested_proto(
- 6, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_add_cmd,
- &be_const_str_solidified,
- ( &(const binstruction[20]) { /* code */
- 0x8C0C0127, // 0000 GETMET R3 R0 K39
- 0x5C140400, // 0001 MOVE R5 R2
- 0x7C0C0400, // 0002 CALL R3 2
- 0x880C0147, // 0003 GETMBR R3 R0 K71
- 0x4C100000, // 0004 LDNIL R4
- 0x1C0C0604, // 0005 EQ R3 R3 R4
- 0x780E0002, // 0006 JMPF R3 #000A
- 0x600C0013, // 0007 GETGBL R3 G19
- 0x7C0C0000, // 0008 CALL R3 0
- 0x90028E03, // 0009 SETMBR R0 K71 R3
- 0x600C0004, // 000A GETGBL R3 G4
- 0x5C100400, // 000B MOVE R4 R2
- 0x7C0C0200, // 000C CALL R3 1
- 0x1C0C0748, // 000D EQ R3 R3 K72
- 0x780E0002, // 000E JMPF R3 #0012
- 0x880C0147, // 000F GETMBR R3 R0 K71
- 0x980C0202, // 0010 SETIDX R3 R1 R2
- 0x70020000, // 0011 JMP #0013
- 0xB0063749, // 0012 RAISE 1 K27 K73
- 0x80000000, // 0013 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: run_timers
-********************************************************************/
-be_local_closure(class_Tasmota_run_timers, /* name */
- be_nested_proto(
- 7, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_run_timers,
- &be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0x8C04014A, // 0000 GETMET R1 R0 K74
- 0x7C040200, // 0001 CALL R1 1
- 0x88040128, // 0002 GETMBR R1 R0 K40
- 0x78060015, // 0003 JMPF R1 #001A
- 0x58040001, // 0004 LDCONST R1 K1
- 0x88080128, // 0005 GETMBR R2 R0 K40
- 0x8C080502, // 0006 GETMET R2 R2 K2
- 0x7C080200, // 0007 CALL R2 1
- 0x14080202, // 0008 LT R2 R1 R2
- 0x780A000F, // 0009 JMPF R2 #001A
- 0x88080128, // 000A GETMBR R2 R0 K40
- 0x94080401, // 000B GETIDX R2 R2 R1
- 0x8C0C014B, // 000C GETMET R3 R0 K75
- 0x88140504, // 000D GETMBR R5 R2 K4
- 0x7C0C0400, // 000E CALL R3 2
- 0x780E0007, // 000F JMPF R3 #0018
- 0x880C0525, // 0010 GETMBR R3 R2 K37
- 0x88100128, // 0011 GETMBR R4 R0 K40
- 0x8C100916, // 0012 GETMET R4 R4 K22
- 0x5C180200, // 0013 MOVE R6 R1
- 0x7C100400, // 0014 CALL R4 2
- 0x5C100600, // 0015 MOVE R4 R3
- 0x7C100000, // 0016 CALL R4 0
- 0x70020000, // 0017 JMP #0019
- 0x00040305, // 0018 ADD R1 R1 K5
- 0x7001FFEA, // 0019 JMP #0005
- 0x80000000, // 001A RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: remove_cmd
-********************************************************************/
-be_local_closure(class_Tasmota_remove_cmd, /* name */
+be_local_closure(class_Tasmota_defer, /* name */
be_nested_proto(
5, /* nstack */
2, /* argc */
@@ -1094,16 +1775,24 @@ be_local_closure(class_Tasmota_remove_cmd, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_remove_cmd,
+ &be_const_str_defer,
&be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x88080147, // 0000 GETMBR R2 R0 K71
- 0x780A0003, // 0001 JMPF R2 #0006
- 0x88080147, // 0002 GETMBR R2 R0 K71
- 0x8C080516, // 0003 GETMET R2 R2 K22
- 0x5C100200, // 0004 MOVE R4 R1
- 0x7C080400, // 0005 CALL R2 2
- 0x80000000, // 0006 RET 0
+ ( &(const binstruction[15]) { /* code */
+ 0x8808016B, // 0000 GETMBR R2 R0 K107
+ 0x4C0C0000, // 0001 LDNIL R3
+ 0x1C080403, // 0002 EQ R2 R2 R3
+ 0x780A0002, // 0003 JMPF R2 #0007
+ 0x60080012, // 0004 GETGBL R2 G18
+ 0x7C080000, // 0005 CALL R2 0
+ 0x9002D602, // 0006 SETMBR R0 K107 R2
+ 0x8808016B, // 0007 GETMBR R2 R0 K107
+ 0x8C08051D, // 0008 GETMET R2 R2 K29
+ 0x5C100200, // 0009 MOVE R4 R1
+ 0x7C080400, // 000A CALL R2 2
+ 0xB80A0400, // 000B GETNGBL R2 K2
+ 0x8808052B, // 000C GETMBR R2 R2 K43
+ 0x900AD92D, // 000D SETMBR R2 K108 K45
+ 0x80000000, // 000E RET 0
})
)
);
@@ -1111,11 +1800,11 @@ be_local_closure(class_Tasmota_remove_cmd, /* name */
/********************************************************************
-** Solidified function: remove_cron
+** Solidified function: next_cron
********************************************************************/
-be_local_closure(class_Tasmota_remove_cron, /* name */
+be_local_closure(class_Tasmota_next_cron, /* name */
be_nested_proto(
- 7, /* nstack */
+ 6, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -1124,323 +1813,26 @@ be_local_closure(class_Tasmota_remove_cron, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_remove_cron,
+ &be_const_str_next_cron,
&be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x88080100, // 0000 GETMBR R2 R0 K0
- 0x780A000E, // 0001 JMPF R2 #0011
- 0x580C0001, // 0002 LDCONST R3 K1
- 0x8C100502, // 0003 GETMET R4 R2 K2
+ ( &(const binstruction[17]) { /* code */
+ 0x88080139, // 0000 GETMBR R2 R0 K57
+ 0x780A000D, // 0001 JMPF R2 #0010
+ 0x580C0004, // 0002 LDCONST R3 K4
+ 0x8C10052F, // 0003 GETMET R4 R2 K47
0x7C100200, // 0004 CALL R4 1
0x14100604, // 0005 LT R4 R3 R4
- 0x78120009, // 0006 JMPF R4 #0011
+ 0x78120008, // 0006 JMPF R4 #0010
0x94100403, // 0007 GETIDX R4 R2 R3
- 0x88100903, // 0008 GETMBR R4 R4 K3
+ 0x88100930, // 0008 GETMBR R4 R4 K48
0x1C100801, // 0009 EQ R4 R4 R1
- 0x78120003, // 000A JMPF R4 #000F
- 0x8C100516, // 000B GETMET R4 R2 K22
- 0x5C180600, // 000C MOVE R6 R3
- 0x7C100400, // 000D CALL R4 2
- 0x70020000, // 000E JMP #0010
- 0x000C0705, // 000F ADD R3 R3 K5
- 0x7001FFF1, // 0010 JMP #0003
- 0x80000000, // 0011 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: remove_fast_loop
-********************************************************************/
-be_local_closure(class_Tasmota_remove_fast_loop, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_remove_fast_loop,
- &be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0x8808014C, // 0000 GETMBR R2 R0 K76
- 0x740A0000, // 0001 JMPT R2 #0003
- 0x80000400, // 0002 RET 0
- 0x8808014C, // 0003 GETMBR R2 R0 K76
- 0x8C08051E, // 0004 GETMET R2 R2 K30
- 0x5C100200, // 0005 MOVE R4 R1
- 0x7C080400, // 0006 CALL R2 2
- 0x4C0C0000, // 0007 LDNIL R3
- 0x200C0403, // 0008 NE R3 R2 R3
- 0x780E0003, // 0009 JMPF R3 #000E
- 0x880C014C, // 000A GETMBR R3 R0 K76
- 0x8C0C0716, // 000B GETMET R3 R3 K22
- 0x5C140400, // 000C MOVE R5 R2
- 0x7C0C0400, // 000D CALL R3 2
- 0x80000000, // 000E RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: find_key_i
-********************************************************************/
-be_local_closure(class_Tasmota_find_key_i, /* name */
- be_nested_proto(
- 10, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_find_key_i,
- &be_const_str_solidified,
- ( &(const binstruction[30]) { /* code */
- 0xA40E7600, // 0000 IMPORT R3 K59
- 0x8C10074D, // 0001 GETMET R4 R3 K77
- 0x5C180400, // 0002 MOVE R6 R2
- 0x7C100400, // 0003 CALL R4 2
- 0x6014000F, // 0004 GETGBL R5 G15
- 0x5C180200, // 0005 MOVE R6 R1
- 0x601C0013, // 0006 GETGBL R7 G19
- 0x7C140400, // 0007 CALL R5 2
- 0x78160013, // 0008 JMPF R5 #001D
- 0x60140010, // 0009 GETGBL R5 G16
- 0x8C18034E, // 000A GETMET R6 R1 K78
- 0x7C180200, // 000B CALL R6 1
- 0x7C140200, // 000C CALL R5 1
- 0xA802000B, // 000D EXBLK 0 #001A
- 0x5C180A00, // 000E MOVE R6 R5
- 0x7C180000, // 000F CALL R6 0
- 0x8C1C074D, // 0010 GETMET R7 R3 K77
- 0x5C240C00, // 0011 MOVE R9 R6
- 0x7C1C0400, // 0012 CALL R7 2
- 0x1C1C0E04, // 0013 EQ R7 R7 R4
- 0x741E0001, // 0014 JMPT R7 #0017
- 0x1C1C054F, // 0015 EQ R7 R2 K79
- 0x781E0001, // 0016 JMPF R7 #0019
- 0xA8040001, // 0017 EXBLK 1 1
- 0x80040C00, // 0018 RET 1 R6
- 0x7001FFF3, // 0019 JMP #000E
- 0x58140050, // 001A LDCONST R5 K80
- 0xAC140200, // 001B CATCH R5 1 0
- 0xB0080000, // 001C RAISE 2 R0 R0
- 0x80000000, // 001D RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: check_not_method
-********************************************************************/
-be_local_closure(class_Tasmota_check_not_method, /* name */
- be_nested_proto(
- 6, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_check_not_method,
- &be_const_str_solidified,
- ( &(const binstruction[15]) { /* code */
- 0xA40A5C00, // 0000 IMPORT R2 K46
- 0x600C0004, // 0001 GETGBL R3 G4
- 0x5C100200, // 0002 MOVE R4 R1
- 0x7C0C0200, // 0003 CALL R3 1
- 0x200C0748, // 0004 NE R3 R3 K72
- 0x780E0000, // 0005 JMPF R3 #0007
- 0xB006A352, // 0006 RAISE 1 K81 K82
- 0x8C0C0553, // 0007 GETMET R3 R2 K83
- 0x5C140200, // 0008 MOVE R5 R1
- 0x7C0C0400, // 0009 CALL R3 2
- 0x50100200, // 000A LDBOOL R4 1 0
- 0x1C0C0604, // 000B EQ R3 R3 R4
- 0x780E0000, // 000C JMPF R3 #000E
- 0xB006A354, // 000D RAISE 1 K81 K84
- 0x80000000, // 000E RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: when_network_up
-********************************************************************/
-be_local_closure(class_Tasmota_when_network_up, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_when_network_up,
- &be_const_str_solidified,
- ( &(const binstruction[23]) { /* code */
- 0x8C080127, // 0000 GETMET R2 R0 K39
- 0x5C100200, // 0001 MOVE R4 R1
- 0x7C080400, // 0002 CALL R2 2
- 0x8C080155, // 0003 GETMET R2 R0 K85
- 0x7C080200, // 0004 CALL R2 1
- 0x780A0002, // 0005 JMPF R2 #0009
- 0x5C080200, // 0006 MOVE R2 R1
- 0x7C080000, // 0007 CALL R2 0
- 0x7002000C, // 0008 JMP #0016
- 0x88080156, // 0009 GETMBR R2 R0 K86
- 0x4C0C0000, // 000A LDNIL R3
- 0x1C080403, // 000B EQ R2 R2 R3
- 0x780A0004, // 000C JMPF R2 #0012
- 0x60080012, // 000D GETGBL R2 G18
- 0x7C080000, // 000E CALL R2 0
- 0x400C0401, // 000F CONNECT R3 R2 R1
- 0x9002AC02, // 0010 SETMBR R0 K86 R2
- 0x70020003, // 0011 JMP #0016
- 0x88080156, // 0012 GETMBR R2 R0 K86
- 0x8C080511, // 0013 GETMET R2 R2 K17
- 0x5C100200, // 0014 MOVE R4 R1
- 0x7C080400, // 0015 CALL R2 2
- 0x80000000, // 0016 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_rule_once
-********************************************************************/
-be_local_closure(class_Tasmota_add_rule_once, /* name */
- be_nested_proto(
- 10, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_add_rule_once,
- &be_const_str_solidified,
- ( &(const binstruction[ 7]) { /* code */
- 0x8C100157, // 0000 GETMET R4 R0 K87
- 0x5C180200, // 0001 MOVE R6 R1
- 0x5C1C0400, // 0002 MOVE R7 R2
- 0x5C200600, // 0003 MOVE R8 R3
- 0x50240200, // 0004 LDBOOL R9 1 0
- 0x7C100A00, // 0005 CALL R4 5
- 0x80000000, // 0006 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: exec_cmd
-********************************************************************/
-be_local_closure(class_Tasmota_exec_cmd, /* name */
- be_nested_proto(
- 12, /* nstack */
- 4, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_exec_cmd,
- &be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0x88100147, // 0000 GETMBR R4 R0 K71
- 0x78120016, // 0001 JMPF R4 #0019
- 0x8C100158, // 0002 GETMET R4 R0 K88
- 0x88180147, // 0003 GETMBR R6 R0 K71
- 0x5C1C0200, // 0004 MOVE R7 R1
- 0x7C100600, // 0005 CALL R4 3
- 0x4C140000, // 0006 LDNIL R5
- 0x20140805, // 0007 NE R5 R4 R5
- 0x7816000F, // 0008 JMPF R5 #0019
- 0xA4164000, // 0009 IMPORT R5 K32
- 0x8C180B21, // 000A GETMET R6 R5 K33
- 0x5C200600, // 000B MOVE R8 R3
- 0x7C180400, // 000C CALL R6 2
- 0x8C1C0159, // 000D GETMET R7 R0 K89
- 0x5C240800, // 000E MOVE R9 R4
- 0x7C1C0400, // 000F CALL R7 2
- 0x881C0147, // 0010 GETMBR R7 R0 K71
- 0x941C0E04, // 0011 GETIDX R7 R7 R4
- 0x5C200800, // 0012 MOVE R8 R4
- 0x5C240400, // 0013 MOVE R9 R2
- 0x5C280600, // 0014 MOVE R10 R3
- 0x5C2C0C00, // 0015 MOVE R11 R6
- 0x7C1C0800, // 0016 CALL R7 4
- 0x501C0200, // 0017 LDBOOL R7 1 0
- 0x80040E00, // 0018 RET 1 R7
- 0x50100000, // 0019 LDBOOL R4 0 0
- 0x80040800, // 001A RET 1 R4
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: set_light
-********************************************************************/
-be_local_closure(class_Tasmota_set_light, /* name */
- be_nested_proto(
- 8, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_set_light,
- &be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x600C0001, // 0000 GETGBL R3 G1
- 0x5810005A, // 0001 LDCONST R4 K90
- 0x7C0C0200, // 0002 CALL R3 1
- 0xA40E1000, // 0003 IMPORT R3 K8
- 0x4C100000, // 0004 LDNIL R4
- 0x20100404, // 0005 NE R4 R2 R4
- 0x78120005, // 0006 JMPF R4 #000D
- 0x8C10075B, // 0007 GETMET R4 R3 K91
- 0x5C180200, // 0008 MOVE R6 R1
- 0x5C1C0400, // 0009 MOVE R7 R2
- 0x7C100600, // 000A CALL R4 3
- 0x80040800, // 000B RET 1 R4
- 0x70020003, // 000C JMP #0011
- 0x8C10075B, // 000D GETMET R4 R3 K91
- 0x5C180200, // 000E MOVE R6 R1
- 0x7C100400, // 000F CALL R4 2
- 0x80040800, // 0010 RET 1 R4
- 0x80000000, // 0011 RET 0
+ 0x78120002, // 000A JMPF R4 #000E
+ 0x94100403, // 000B GETIDX R4 R2 R3
+ 0x8810093C, // 000C GETMBR R4 R4 K60
+ 0x80040800, // 000D RET 1 R4
+ 0x000C072D, // 000E ADD R3 R3 K45
+ 0x7001FFF2, // 000F JMP #0003
+ 0x80000000, // 0010 RET 0
})
)
);
@@ -1464,11 +1856,11 @@ be_local_closure(class_Tasmota_fast_loop, /* name */
&be_const_str_fast_loop,
&be_const_str_solidified,
( &(const binstruction[15]) { /* code */
- 0x8804014C, // 0000 GETMBR R1 R0 K76
+ 0x88040127, // 0000 GETMBR R1 R0 K39
0x5C080200, // 0001 MOVE R2 R1
0x740A0000, // 0002 JMPT R2 #0004
0x80000400, // 0003 RET 0
- 0x58080001, // 0004 LDCONST R2 K1
+ 0x58080004, // 0004 LDCONST R2 K4
0x600C000C, // 0005 GETGBL R3 G12
0x5C100200, // 0006 MOVE R4 R1
0x7C0C0200, // 0007 CALL R3 1
@@ -1476,7 +1868,7 @@ be_local_closure(class_Tasmota_fast_loop, /* name */
0x780E0003, // 0009 JMPF R3 #000E
0x940C0202, // 000A GETIDX R3 R1 R2
0x7C0C0000, // 000B CALL R3 0
- 0x00080505, // 000C ADD R2 R2 K5
+ 0x0008052D, // 000C ADD R2 R2 K45
0x7001FFF6, // 000D JMP #0005
0x80000000, // 000E RET 0
})
@@ -1486,118 +1878,11 @@ be_local_closure(class_Tasmota_fast_loop, /* name */
/********************************************************************
-** Solidified function: run_cron
+** Solidified function: unload_extension
********************************************************************/
-be_local_closure(class_Tasmota_run_cron, /* name */
- be_nested_proto(
- 9, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_run_cron,
- &be_const_str_solidified,
- ( &(const binstruction[34]) { /* code */
- 0x88040100, // 0000 GETMBR R1 R0 K0
- 0x7806001E, // 0001 JMPF R1 #0021
- 0x58040001, // 0002 LDCONST R1 K1
- 0xB80AB800, // 0003 GETNGBL R2 K92
- 0x8C08055D, // 0004 GETMET R2 R2 K93
- 0x7C080200, // 0005 CALL R2 1
- 0x880C0100, // 0006 GETMBR R3 R0 K0
- 0x8C0C0702, // 0007 GETMET R3 R3 K2
- 0x7C0C0200, // 0008 CALL R3 1
- 0x140C0203, // 0009 LT R3 R1 R3
- 0x780E0015, // 000A JMPF R3 #0021
- 0x880C0100, // 000B GETMBR R3 R0 K0
- 0x940C0601, // 000C GETIDX R3 R3 R1
- 0x88100704, // 000D GETMBR R4 R3 K4
- 0x1C100901, // 000E EQ R4 R4 K1
- 0x78120003, // 000F JMPF R4 #0014
- 0x8C10075E, // 0010 GETMET R4 R3 K94
- 0x7C100200, // 0011 CALL R4 1
- 0x900E0804, // 0012 SETMBR R3 K4 R4
- 0x7002000A, // 0013 JMP #001F
- 0x8C10074B, // 0014 GETMET R4 R3 K75
- 0x7C100200, // 0015 CALL R4 1
- 0x78120007, // 0016 JMPF R4 #001F
- 0x88100725, // 0017 GETMBR R4 R3 K37
- 0x8C14075E, // 0018 GETMET R5 R3 K94
- 0x7C140200, // 0019 CALL R5 1
- 0x900E0805, // 001A SETMBR R3 K4 R5
- 0x5C180800, // 001B MOVE R6 R4
- 0x5C1C0400, // 001C MOVE R7 R2
- 0x5C200A00, // 001D MOVE R8 R5
- 0x7C180400, // 001E CALL R6 2
- 0x00040305, // 001F ADD R1 R1 K5
- 0x7001FFE4, // 0020 JMP #0006
- 0x80000000, // 0021 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: cmd
-********************************************************************/
-be_local_closure(class_Tasmota_cmd, /* name */
+be_local_closure(class_Tasmota_unload_extension, /* name */
be_nested_proto(
8, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_cmd,
- &be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0x880C011F, // 0000 GETMBR R3 R0 K31
- 0x50100200, // 0001 LDBOOL R4 1 0
- 0x90023E04, // 0002 SETMBR R0 K31 R4
- 0xB8121400, // 0003 GETNGBL R4 K10
- 0x88100912, // 0004 GETMBR R4 R4 K18
- 0x8810095F, // 0005 GETMBR R4 R4 K95
- 0x780A0004, // 0006 JMPF R2 #000C
- 0x28140918, // 0007 GE R5 R4 K24
- 0x78160002, // 0008 JMPF R5 #000C
- 0xB8161400, // 0009 GETNGBL R5 K10
- 0x88140B12, // 000A GETMBR R5 R5 K18
- 0x9016BF05, // 000B SETMBR R5 K95 K5
- 0x8C140160, // 000C GETMET R5 R0 K96
- 0x5C1C0200, // 000D MOVE R7 R1
- 0x7C140400, // 000E CALL R5 2
- 0x4C140000, // 000F LDNIL R5
- 0x8818011F, // 0010 GETMBR R6 R0 K31
- 0x501C0200, // 0011 LDBOOL R7 1 0
- 0x20180C07, // 0012 NE R6 R6 R7
- 0x781A0000, // 0013 JMPF R6 #0015
- 0x8814011F, // 0014 GETMBR R5 R0 K31
- 0x90023E03, // 0015 SETMBR R0 K31 R3
- 0x780A0002, // 0016 JMPF R2 #001A
- 0xB81A1400, // 0017 GETNGBL R6 K10
- 0x88180D12, // 0018 GETMBR R6 R6 K18
- 0x901ABE04, // 0019 SETMBR R6 K95 R4
- 0x80040A00, // 001A RET 1 R5
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: time_str
-********************************************************************/
-be_local_closure(class_Tasmota_time_str, /* name */
- be_nested_proto(
- 11, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -1606,22 +1891,47 @@ be_local_closure(class_Tasmota_time_str, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_time_str,
+ &be_const_str_unload_extension,
&be_const_str_solidified,
- ( &(const binstruction[13]) { /* code */
- 0x8C080161, // 0000 GETMET R2 R0 K97
- 0x5C100200, // 0001 MOVE R4 R1
- 0x7C080400, // 0002 CALL R2 2
- 0x600C0018, // 0003 GETGBL R3 G24
- 0x58100062, // 0004 LDCONST R4 K98
- 0x94140563, // 0005 GETIDX R5 R2 K99
- 0x94180564, // 0006 GETIDX R6 R2 K100
- 0x941C0565, // 0007 GETIDX R7 R2 K101
- 0x94200566, // 0008 GETIDX R8 R2 K102
- 0x94240567, // 0009 GETIDX R9 R2 K103
- 0x94280568, // 000A GETIDX R10 R2 K104
- 0x7C0C0E00, // 000B CALL R3 7
- 0x80040600, // 000C RET 1 R3
+ ( &(const binstruction[38]) { /* code */
+ 0x8808014B, // 0000 GETMBR R2 R0 K75
+ 0x4C0C0000, // 0001 LDNIL R3
+ 0x1C080403, // 0002 EQ R2 R2 R3
+ 0x780A0000, // 0003 JMPF R2 #0005
+ 0x80000400, // 0004 RET 0
+ 0x5C080200, // 0005 MOVE R2 R1
+ 0x600C0004, // 0006 GETGBL R3 G4
+ 0x5C100200, // 0007 MOVE R4 R1
+ 0x7C0C0200, // 0008 CALL R3 1
+ 0x1C0C0701, // 0009 EQ R3 R3 K1
+ 0x780E0004, // 000A JMPF R3 #0010
+ 0x880C014B, // 000B GETMBR R3 R0 K75
+ 0x8C0C070C, // 000C GETMET R3 R3 K12
+ 0x5C140200, // 000D MOVE R5 R1
+ 0x7C0C0400, // 000E CALL R3 2
+ 0x5C080600, // 000F MOVE R2 R3
+ 0x600C0004, // 0010 GETGBL R3 G4
+ 0x5C100400, // 0011 MOVE R4 R2
+ 0x7C0C0200, // 0012 CALL R3 1
+ 0x1C0C0757, // 0013 EQ R3 R3 K87
+ 0x780E000A, // 0014 JMPF R3 #0020
+ 0xA40EE000, // 0015 IMPORT R3 K112
+ 0x8C10075A, // 0016 GETMET R4 R3 K90
+ 0x5C180400, // 0017 MOVE R6 R2
+ 0x581C007A, // 0018 LDCONST R7 K122
+ 0x7C100600, // 0019 CALL R4 3
+ 0x78120001, // 001A JMPF R4 #001D
+ 0x8C10057A, // 001B GETMET R4 R2 K122
+ 0x7C100200, // 001C CALL R4 1
+ 0x8C10017B, // 001D GETMET R4 R0 K123
+ 0x5C180400, // 001E MOVE R6 R2
+ 0x7C100400, // 001F CALL R4 2
+ 0x4C040000, // 0020 LDNIL R1
+ 0x4C080000, // 0021 LDNIL R2
+ 0xB80E0400, // 0022 GETNGBL R3 K2
+ 0x8C0C077C, // 0023 GETMET R3 R3 K124
+ 0x7C0C0200, // 0024 CALL R3 1
+ 0x80000000, // 0025 RET 0
})
)
);
@@ -1629,202 +1939,11 @@ be_local_closure(class_Tasmota_time_str, /* name */
/********************************************************************
-** Solidified function: event
+** Solidified function: get_light
********************************************************************/
-be_local_closure(class_Tasmota_event, /* name */
- be_nested_proto(
- 19, /* nstack */
- 6, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_event,
- &be_const_str_solidified,
- ( &(const binstruction[112]) { /* code */
- 0x1C180369, // 0000 EQ R6 R1 K105
- 0x781A0005, // 0001 JMPF R6 #0008
- 0x88180156, // 0002 GETMBR R6 R0 K86
- 0x781A0001, // 0003 JMPF R6 #0006
- 0x8C18016A, // 0004 GETMET R6 R0 K106
- 0x7C180200, // 0005 CALL R6 1
- 0x8C18016B, // 0006 GETMET R6 R0 K107
- 0x7C180200, // 0007 CALL R6 1
- 0x1C18036C, // 0008 EQ R6 R1 K108
- 0x781A0001, // 0009 JMPF R6 #000C
- 0x8C18016D, // 000A GETMET R6 R0 K109
- 0x7C180200, // 000B CALL R6 1
- 0x50180000, // 000C LDBOOL R6 0 0
- 0x501C0000, // 000D LDBOOL R7 0 0
- 0x1C20036E, // 000E EQ R8 R1 K110
- 0x78220000, // 000F JMPF R8 #0011
- 0x501C0200, // 0010 LDBOOL R7 1 0
- 0x1C20036F, // 0011 EQ R8 R1 K111
- 0x78220006, // 0012 JMPF R8 #001A
- 0x8C200170, // 0013 GETMET R8 R0 K112
- 0x5C280400, // 0014 MOVE R10 R2
- 0x5C2C0600, // 0015 MOVE R11 R3
- 0x5C300800, // 0016 MOVE R12 R4
- 0x7C200800, // 0017 CALL R8 4
- 0x80041000, // 0018 RET 1 R8
- 0x7002004F, // 0019 JMP #006A
- 0x1C200371, // 001A EQ R8 R1 K113
- 0x78220004, // 001B JMPF R8 #0021
- 0x8C200172, // 001C GETMET R8 R0 K114
- 0x5C280800, // 001D MOVE R10 R4
- 0x7C200400, // 001E CALL R8 2
- 0x80041000, // 001F RET 1 R8
- 0x70020048, // 0020 JMP #006A
- 0x1C200315, // 0021 EQ R8 R1 K21
- 0x78220007, // 0022 JMPF R8 #002B
- 0x8C200173, // 0023 GETMET R8 R0 K115
- 0x5C280800, // 0024 MOVE R10 R4
- 0x602C0017, // 0025 GETGBL R11 G23
- 0x5C300600, // 0026 MOVE R12 R3
- 0x7C2C0200, // 0027 CALL R11 1
- 0x7C200600, // 0028 CALL R8 3
- 0x80041000, // 0029 RET 1 R8
- 0x7002003E, // 002A JMP #006A
- 0x1C200374, // 002B EQ R8 R1 K116
- 0x78220003, // 002C JMPF R8 #0031
- 0x8C200174, // 002D GETMET R8 R0 K116
- 0x7C200200, // 002E CALL R8 1
- 0x80041000, // 002F RET 1 R8
- 0x70020038, // 0030 JMP #006A
- 0x8820011D, // 0031 GETMBR R8 R0 K29
- 0x78220036, // 0032 JMPF R8 #006A
- 0xA4225C00, // 0033 IMPORT R8 K46
- 0x58240001, // 0034 LDCONST R9 K1
- 0x6028000C, // 0035 GETGBL R10 G12
- 0x882C011D, // 0036 GETMBR R11 R0 K29
- 0x7C280200, // 0037 CALL R10 1
- 0x1428120A, // 0038 LT R10 R9 R10
- 0x782A002F, // 0039 JMPF R10 #006A
- 0x8828011D, // 003A GETMBR R10 R0 K29
- 0x94281409, // 003B GETIDX R10 R10 R9
- 0x8C2C1109, // 003C GETMET R11 R8 K9
- 0x5C341400, // 003D MOVE R13 R10
- 0x5C380200, // 003E MOVE R14 R1
- 0x7C2C0600, // 003F CALL R11 3
- 0x60300004, // 0040 GETGBL R12 G4
- 0x5C341600, // 0041 MOVE R13 R11
- 0x7C300200, // 0042 CALL R12 1
- 0x1C301948, // 0043 EQ R12 R12 K72
- 0x78320022, // 0044 JMPF R12 #0068
- 0xA8020011, // 0045 EXBLK 0 #0058
- 0x5C301600, // 0046 MOVE R12 R11
- 0x5C341400, // 0047 MOVE R13 R10
- 0x5C380400, // 0048 MOVE R14 R2
- 0x5C3C0600, // 0049 MOVE R15 R3
- 0x5C400800, // 004A MOVE R16 R4
- 0x5C440A00, // 004B MOVE R17 R5
- 0x7C300A00, // 004C CALL R12 5
- 0x74320001, // 004D JMPT R12 #0050
- 0x741A0000, // 004E JMPT R6 #0050
- 0x50180001, // 004F LDBOOL R6 0 1
- 0x50180200, // 0050 LDBOOL R6 1 0
- 0x781A0003, // 0051 JMPF R6 #0056
- 0x5C300E00, // 0052 MOVE R12 R7
- 0x74320001, // 0053 JMPT R12 #0056
- 0xA8040001, // 0054 EXBLK 1 1
- 0x70020013, // 0055 JMP #006A
- 0xA8040001, // 0056 EXBLK 1 1
- 0x7002000F, // 0057 JMP #0068
- 0xAC300002, // 0058 CATCH R12 0 2
- 0x7002000C, // 0059 JMP #0067
- 0x60380001, // 005A GETGBL R14 G1
- 0x603C0018, // 005B GETGBL R15 G24
- 0x58400075, // 005C LDCONST R16 K117
- 0x5C441800, // 005D MOVE R17 R12
- 0x5C481A00, // 005E MOVE R18 R13
- 0x7C3C0600, // 005F CALL R15 3
- 0x7C380200, // 0060 CALL R14 1
- 0x88380135, // 0061 GETMBR R14 R0 K53
- 0x783A0002, // 0062 JMPF R14 #0066
- 0xA43A6E00, // 0063 IMPORT R14 K55
- 0x8C3C1D76, // 0064 GETMET R15 R14 K118
- 0x7C3C0200, // 0065 CALL R15 1
- 0x70020000, // 0066 JMP #0068
- 0xB0080000, // 0067 RAISE 2 R0 R0
- 0x00241305, // 0068 ADD R9 R9 K5
- 0x7001FFCA, // 0069 JMP #0035
- 0x1C200377, // 006A EQ R8 R1 K119
- 0x78220002, // 006B JMPF R8 #006F
- 0xA422F000, // 006C IMPORT R8 K120
- 0x8C241145, // 006D GETMET R9 R8 K69
- 0x7C240200, // 006E CALL R9 1
- 0x80040C00, // 006F RET 1 R6
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: wire_scan
-********************************************************************/
-be_local_closure(class_Tasmota_wire_scan, /* name */
+be_local_closure(class_Tasmota_get_light, /* name */
be_nested_proto(
6, /* nstack */
- 3, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_wire_scan,
- &be_const_str_solidified,
- ( &(const binstruction[33]) { /* code */
- 0x4C0C0000, // 0000 LDNIL R3
- 0x200C0403, // 0001 NE R3 R2 R3
- 0x780E0005, // 0002 JMPF R3 #0009
- 0x8C0C0179, // 0003 GETMET R3 R0 K121
- 0x5C140400, // 0004 MOVE R5 R2
- 0x7C0C0400, // 0005 CALL R3 2
- 0x740E0001, // 0006 JMPT R3 #0009
- 0x4C0C0000, // 0007 LDNIL R3
- 0x80040600, // 0008 RET 1 R3
- 0x880C017A, // 0009 GETMBR R3 R0 K122
- 0x8C0C077B, // 000A GETMET R3 R3 K123
- 0x7C0C0200, // 000B CALL R3 1
- 0x780E0006, // 000C JMPF R3 #0014
- 0x880C017A, // 000D GETMBR R3 R0 K122
- 0x8C0C077C, // 000E GETMET R3 R3 K124
- 0x5C140200, // 000F MOVE R5 R1
- 0x7C0C0400, // 0010 CALL R3 2
- 0x780E0001, // 0011 JMPF R3 #0014
- 0x880C017A, // 0012 GETMBR R3 R0 K122
- 0x80040600, // 0013 RET 1 R3
- 0x880C017D, // 0014 GETMBR R3 R0 K125
- 0x8C0C077B, // 0015 GETMET R3 R3 K123
- 0x7C0C0200, // 0016 CALL R3 1
- 0x780E0006, // 0017 JMPF R3 #001F
- 0x880C017D, // 0018 GETMBR R3 R0 K125
- 0x8C0C077C, // 0019 GETMET R3 R3 K124
- 0x5C140200, // 001A MOVE R5 R1
- 0x7C0C0400, // 001B CALL R3 2
- 0x780E0001, // 001C JMPF R3 #001F
- 0x880C017D, // 001D GETMBR R3 R0 K125
- 0x80040600, // 001E RET 1 R3
- 0x4C0C0000, // 001F LDNIL R3
- 0x80040600, // 0020 RET 1 R3
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: exec_tele
-********************************************************************/
-be_local_closure(class_Tasmota_exec_tele, /* name */
- be_nested_proto(
- 12, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -1833,239 +1952,25 @@ be_local_closure(class_Tasmota_exec_tele, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_exec_tele,
+ &be_const_str_get_light,
&be_const_str_solidified,
- ( &(const binstruction[41]) { /* code */
- 0x88080114, // 0000 GETMBR R2 R0 K20
- 0x780A0024, // 0001 JMPF R2 #0027
- 0xA40A4000, // 0002 IMPORT R2 K32
- 0x8C0C0521, // 0003 GETMET R3 R2 K33
- 0x5C140200, // 0004 MOVE R5 R1
- 0x7C0C0400, // 0005 CALL R3 2
- 0x50100000, // 0006 LDBOOL R4 0 0
- 0x4C140000, // 0007 LDNIL R5
- 0x1C140605, // 0008 EQ R5 R3 R5
- 0x78160004, // 0009 JMPF R5 #000F
- 0x8C140122, // 000A GETMET R5 R0 K34
- 0x001E4601, // 000B ADD R7 K35 R1
- 0x58200019, // 000C LDCONST R8 K25
- 0x7C140600, // 000D CALL R5 3
- 0x5C0C0200, // 000E MOVE R3 R1
- 0x60140013, // 000F GETGBL R5 G19
- 0x7C140000, // 0010 CALL R5 0
- 0x9816FC03, // 0011 SETIDX R5 K126 R3
- 0x5C0C0A00, // 0012 MOVE R3 R5
- 0x58140001, // 0013 LDCONST R5 K1
- 0x6018000C, // 0014 GETGBL R6 G12
- 0x881C0114, // 0015 GETMBR R7 R0 K20
- 0x7C180200, // 0016 CALL R6 1
- 0x14180A06, // 0017 LT R6 R5 R6
- 0x781A000C, // 0018 JMPF R6 #0026
- 0x88180114, // 0019 GETMBR R6 R0 K20
- 0x94180C05, // 001A GETIDX R6 R6 R5
- 0x8C1C0124, // 001B GETMET R7 R0 K36
- 0x5C240600, // 001C MOVE R9 R3
- 0x88280D04, // 001D GETMBR R10 R6 K4
- 0x882C0D25, // 001E GETMBR R11 R6 K37
- 0x7C1C0800, // 001F CALL R7 4
- 0x741E0001, // 0020 JMPT R7 #0023
- 0x74120000, // 0021 JMPT R4 #0023
- 0x50100001, // 0022 LDBOOL R4 0 1
- 0x50100200, // 0023 LDBOOL R4 1 0
- 0x00140B05, // 0024 ADD R5 R5 K5
- 0x7001FFED, // 0025 JMP #0014
- 0x80040800, // 0026 RET 1 R4
- 0x50080000, // 0027 LDBOOL R2 0 0
- 0x80040400, // 0028 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_rule
-********************************************************************/
-be_local_closure(class_Tasmota_add_rule, /* name */
- be_nested_proto(
- 12, /* nstack */
- 5, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_add_rule,
- &be_const_str_solidified,
- ( &(const binstruction[37]) { /* code */
- 0x8C140127, // 0000 GETMET R5 R0 K39
- 0x5C1C0400, // 0001 MOVE R7 R2
- 0x7C140400, // 0002 CALL R5 2
- 0x88140114, // 0003 GETMBR R5 R0 K20
- 0x4C180000, // 0004 LDNIL R6
- 0x1C140A06, // 0005 EQ R5 R5 R6
- 0x78160002, // 0006 JMPF R5 #000A
- 0x60140012, // 0007 GETGBL R5 G18
- 0x7C140000, // 0008 CALL R5 0
- 0x90022805, // 0009 SETMBR R0 K20 R5
- 0x60140004, // 000A GETGBL R5 G4
- 0x5C180400, // 000B MOVE R6 R2
- 0x7C140200, // 000C CALL R5 1
- 0x1C140B48, // 000D EQ R5 R5 K72
- 0x78160013, // 000E JMPF R5 #0023
- 0x4C140000, // 000F LDNIL R5
- 0x20140605, // 0010 NE R5 R3 R5
- 0x78160003, // 0011 JMPF R5 #0016
- 0x8C14017F, // 0012 GETMET R5 R0 K127
- 0x5C1C0200, // 0013 MOVE R7 R1
- 0x5C200600, // 0014 MOVE R8 R3
- 0x7C140600, // 0015 CALL R5 3
- 0x88140114, // 0016 GETMBR R5 R0 K20
- 0x8C140B11, // 0017 GETMET R5 R5 K17
- 0xB81E5200, // 0018 GETNGBL R7 K41
- 0x88200180, // 0019 GETMBR R8 R0 K128
- 0x8C201181, // 001A GETMET R8 R8 K129
- 0x5C280200, // 001B MOVE R10 R1
- 0x7C200400, // 001C CALL R8 2
- 0x5C240400, // 001D MOVE R9 R2
- 0x5C280600, // 001E MOVE R10 R3
- 0x5C2C0800, // 001F MOVE R11 R4
- 0x7C1C0800, // 0020 CALL R7 4
- 0x7C140400, // 0021 CALL R5 2
- 0x70020000, // 0022 JMP #0024
- 0xB0063749, // 0023 RAISE 1 K27 K73
- 0x80000000, // 0024 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_fast_loop
-********************************************************************/
-be_local_closure(class_Tasmota_add_fast_loop, /* name */
- be_nested_proto(
- 5, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_add_fast_loop,
- &be_const_str_solidified,
- ( &(const binstruction[23]) { /* code */
- 0x8C080127, // 0000 GETMET R2 R0 K39
- 0x5C100200, // 0001 MOVE R4 R1
- 0x7C080400, // 0002 CALL R2 2
- 0x8808014C, // 0003 GETMBR R2 R0 K76
- 0x4C0C0000, // 0004 LDNIL R3
- 0x1C080403, // 0005 EQ R2 R2 R3
- 0x780A0002, // 0006 JMPF R2 #000A
- 0x60080012, // 0007 GETGBL R2 G18
- 0x7C080000, // 0008 CALL R2 0
- 0x90029802, // 0009 SETMBR R0 K76 R2
- 0x60080004, // 000A GETGBL R2 G4
- 0x5C0C0200, // 000B MOVE R3 R1
- 0x7C080200, // 000C CALL R2 1
- 0x20080548, // 000D NE R2 R2 K72
- 0x780A0000, // 000E JMPF R2 #0010
- 0xB0063782, // 000F RAISE 1 K27 K130
- 0x88080112, // 0010 GETMBR R2 R0 K18
- 0x900B0705, // 0011 SETMBR R2 K131 K5
- 0x8808014C, // 0012 GETMBR R2 R0 K76
- 0x8C080511, // 0013 GETMET R2 R2 K17
- 0x5C100200, // 0014 MOVE R4 R1
- 0x7C080400, // 0015 CALL R2 2
- 0x80000000, // 0016 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: gc
-********************************************************************/
-be_local_closure(class_Tasmota_gc, /* name */
- be_nested_proto(
- 4, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_gc,
- &be_const_str_solidified,
- ( &(const binstruction[ 6]) { /* code */
- 0xA406E800, // 0000 IMPORT R1 K116
- 0x8C080384, // 0001 GETMET R2 R1 K132
+ ( &(const binstruction[16]) { /* code */
+ 0x60080001, // 0000 GETGBL R2 G1
+ 0x580C007D, // 0001 LDCONST R3 K125
0x7C080200, // 0002 CALL R2 1
- 0x8C080385, // 0003 GETMET R2 R1 K133
- 0x7C080200, // 0004 CALL R2 1
- 0x80040400, // 0005 RET 1 R2
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: find_op
-********************************************************************/
-be_local_closure(class_Tasmota_find_op, /* name */
- be_nested_proto(
- 7, /* nstack */
- 2, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_find_op,
- &be_const_str_solidified,
- ( &(const binstruction[31]) { /* code */
- 0x8C080186, // 0000 GETMET R2 R0 K134
- 0x5C100200, // 0001 MOVE R4 R1
- 0x7C080400, // 0002 CALL R2 2
- 0x280C0501, // 0003 GE R3 R2 K1
- 0x780E0011, // 0004 JMPF R3 #0017
- 0x540E7FFE, // 0005 LDINT R3 32767
- 0x2C0C0403, // 0006 AND R3 R2 R3
- 0x5412000F, // 0007 LDINT R4 16
- 0x3C100404, // 0008 SHR R4 R2 R4
- 0x60140012, // 0009 GETGBL R5 G18
- 0x7C140000, // 000A CALL R5 0
- 0x04180705, // 000B SUB R6 R3 K5
- 0x401A0206, // 000C CONNECT R6 K1 R6
- 0x94180206, // 000D GETIDX R6 R1 R6
- 0x40180A06, // 000E CONNECT R6 R5 R6
- 0x04180905, // 000F SUB R6 R4 K5
- 0x40180606, // 0010 CONNECT R6 R3 R6
- 0x94180206, // 0011 GETIDX R6 R1 R6
- 0x40180A06, // 0012 CONNECT R6 R5 R6
- 0x40180987, // 0013 CONNECT R6 R4 K135
- 0x94180206, // 0014 GETIDX R6 R1 R6
- 0x40180A06, // 0015 CONNECT R6 R5 R6
- 0x80040A00, // 0016 RET 1 R5
- 0x600C0012, // 0017 GETGBL R3 G18
- 0x7C0C0000, // 0018 CALL R3 0
- 0x40100601, // 0019 CONNECT R4 R3 R1
- 0x4C100000, // 001A LDNIL R4
- 0x40100604, // 001B CONNECT R4 R3 R4
- 0x4C100000, // 001C LDNIL R4
- 0x40100604, // 001D CONNECT R4 R3 R4
- 0x80040600, // 001E RET 1 R3
+ 0xA40A6E00, // 0003 IMPORT R2 K55
+ 0x4C0C0000, // 0004 LDNIL R3
+ 0x200C0203, // 0005 NE R3 R1 R3
+ 0x780E0004, // 0006 JMPF R3 #000C
+ 0x8C0C0572, // 0007 GETMET R3 R2 K114
+ 0x5C140200, // 0008 MOVE R5 R1
+ 0x7C0C0400, // 0009 CALL R3 2
+ 0x80040600, // 000A RET 1 R3
+ 0x70020002, // 000B JMP #000F
+ 0x8C0C0572, // 000C GETMET R3 R2 K114
+ 0x7C0C0200, // 000D CALL R3 1
+ 0x80040600, // 000E RET 1 R3
+ 0x80000000, // 000F RET 0
})
)
);
@@ -2348,178 +2253,183 @@ be_local_closure(class_Tasmota_load, /* name */
&be_ktab_class_Tasmota, /* shared constants */
&be_const_str_load,
&be_const_str_solidified,
- ( &(const binstruction[171]) { /* code */
+ ( &(const binstruction[176]) { /* code */
0x84080000, // 0000 CLOSURE R2 P0
0x840C0001, // 0001 CLOSURE R3 P1
0x84100002, // 0002 CLOSURE R4 P2
0x84140003, // 0003 CLOSURE R5 P3
0x84180004, // 0004 CLOSURE R6 P4
0x841C0005, // 0005 CLOSURE R7 P5
- 0xA4227600, // 0006 IMPORT R8 K59
- 0xA4271000, // 0007 IMPORT R9 K136
+ 0xA4220200, // 0006 IMPORT R8 K1
+ 0xA426FC00, // 0007 IMPORT R9 K126
0x6028000C, // 0008 GETGBL R10 G12
0x5C2C0200, // 0009 MOVE R11 R1
0x7C280200, // 000A CALL R10 1
- 0x1C281501, // 000B EQ R10 R10 K1
+ 0x1C281504, // 000B EQ R10 R10 K4
0x782A0002, // 000C JMPF R10 #0010
0x50280000, // 000D LDBOOL R10 0 0
0xA0000000, // 000E CLOSE R0
0x80041400, // 000F RET 1 R10
- 0x8C281189, // 0010 GETMET R10 R8 K137
+ 0x8C28117F, // 0010 GETMET R10 R8 K127
0x5C300200, // 0011 MOVE R12 R1
- 0x5834008A, // 0012 LDCONST R13 K138
+ 0x58340005, // 0012 LDCONST R13 K5
0x7C280600, // 0013 CALL R10 3
0x742A0000, // 0014 JMPT R10 #0016
- 0x00071401, // 0015 ADD R1 K138 R1
- 0x8C28113C, // 0016 GETMET R10 R8 K60
+ 0x00060A01, // 0015 ADD R1 K5 R1
+ 0x8C281112, // 0016 GETMET R10 R8 K18
0x5C300200, // 0017 MOVE R12 R1
- 0x5834008B, // 0018 LDCONST R13 K139
+ 0x58340013, // 0018 LDCONST R13 K19
0x7C280600, // 0019 CALL R10 3
- 0x782A0000, // 001A JMPF R10 #001C
- 0x0004038C, // 001B ADD R1 R1 K140
- 0x8C28111E, // 001C GETMET R10 R8 K30
- 0x5C300200, // 001D MOVE R12 R1
- 0x5834003F, // 001E LDCONST R13 K63
- 0x7C280600, // 001F CALL R10 3
- 0x242C1501, // 0020 GT R11 R10 K1
- 0x782E0003, // 0021 JMPF R11 #0026
- 0x04301505, // 0022 SUB R12 R10 K5
- 0x4032020C, // 0023 CONNECT R12 K1 R12
- 0x9430020C, // 0024 GETIDX R12 R1 R12
- 0x70020000, // 0025 JMP #0027
- 0x5C300200, // 0026 MOVE R12 R1
- 0x782E0003, // 0027 JMPF R11 #002C
- 0x00341505, // 0028 ADD R13 R10 K5
- 0x40341B87, // 0029 CONNECT R13 R13 K135
- 0x9434020D, // 002A GETIDX R13 R1 R13
- 0x70020000, // 002B JMP #002D
- 0x5C340200, // 002C MOVE R13 R1
- 0x8C38111E, // 002D GETMET R14 R8 K30
- 0x5C401A00, // 002E MOVE R16 R13
- 0x5844008D, // 002F LDCONST R17 K141
- 0x7C380600, // 0030 CALL R14 3
- 0x14381D01, // 0031 LT R14 R14 K1
- 0x783A0001, // 0032 JMPF R14 #0035
- 0x0004033D, // 0033 ADD R1 R1 K61
- 0x00341B3D, // 0034 ADD R13 R13 K61
- 0x8C38113C, // 0035 GETMET R14 R8 K60
- 0x5C401A00, // 0036 MOVE R16 R13
- 0x5844003D, // 0037 LDCONST R17 K61
- 0x7C380600, // 0038 CALL R14 3
- 0x8C3C113C, // 0039 GETMET R15 R8 K60
- 0x5C441A00, // 003A MOVE R17 R13
- 0x5848008E, // 003B LDCONST R18 K142
- 0x7C3C0600, // 003C CALL R15 3
- 0x783E0001, // 003D JMPF R15 #0040
- 0x5C400200, // 003E MOVE R16 R1
- 0x70020000, // 003F JMP #0041
- 0x00400344, // 0040 ADD R16 R1 K68
- 0x5C441C00, // 0041 MOVE R17 R14
- 0x74460007, // 0042 JMPT R17 #004B
- 0x5C441E00, // 0043 MOVE R17 R15
- 0x74460005, // 0044 JMPT R17 #004B
- 0x60440001, // 0045 GETGBL R17 G1
- 0x5848008F, // 0046 LDCONST R18 K143
- 0x7C440200, // 0047 CALL R17 1
- 0x50440000, // 0048 LDBOOL R17 0 0
- 0xA0000000, // 0049 CLOSE R0
- 0x80042200, // 004A RET 1 R17
- 0x50440000, // 004B LDBOOL R17 0 0
- 0x783E0008, // 004C JMPF R15 #0056
- 0x8C481390, // 004D GETMET R18 R9 K144
- 0x5C502000, // 004E MOVE R20 R16
- 0x7C480400, // 004F CALL R18 2
- 0x744A0002, // 0050 JMPT R18 #0054
- 0x50480000, // 0051 LDBOOL R18 0 0
- 0xA0000000, // 0052 CLOSE R0
- 0x80042400, // 0053 RET 1 R18
- 0x50440200, // 0054 LDBOOL R17 1 0
- 0x70020014, // 0055 JMP #006B
- 0x8C481390, // 0056 GETMET R18 R9 K144
- 0x5C500200, // 0057 MOVE R20 R1
- 0x7C480400, // 0058 CALL R18 2
- 0x784A0007, // 0059 JMPF R18 #0062
- 0x8C481390, // 005A GETMET R18 R9 K144
- 0x5C502000, // 005B MOVE R20 R16
- 0x7C480400, // 005C CALL R18 2
- 0x784A0002, // 005D JMPF R18 #0061
- 0x5C480A00, // 005E MOVE R18 R5
- 0x5C4C2000, // 005F MOVE R19 R16
- 0x7C480200, // 0060 CALL R18 1
- 0x70020008, // 0061 JMP #006B
- 0x8C481390, // 0062 GETMET R18 R9 K144
- 0x5C502000, // 0063 MOVE R20 R16
- 0x7C480400, // 0064 CALL R18 2
- 0x784A0001, // 0065 JMPF R18 #0068
- 0x50440200, // 0066 LDBOOL R17 1 0
- 0x70020002, // 0067 JMP #006B
- 0x50480000, // 0068 LDBOOL R18 0 0
- 0xA0000000, // 0069 CLOSE R0
- 0x80042400, // 006A RET 1 R18
- 0x782E0005, // 006B JMPF R11 #0072
- 0x0048193F, // 006C ADD R18 R12 K63
- 0x90026612, // 006D SETMBR R0 K51 R18
- 0x5C480400, // 006E MOVE R18 R2
- 0x884C0133, // 006F GETMBR R19 R0 K51
- 0x7C480200, // 0070 CALL R18 1
- 0x70020000, // 0071 JMP #0073
- 0x90026734, // 0072 SETMBR R0 K51 K52
- 0x4C480000, // 0073 LDNIL R18
- 0x78460025, // 0074 JMPF R17 #009B
- 0x5C4C0800, // 0075 MOVE R19 R4
- 0x5C502000, // 0076 MOVE R20 R16
- 0x7C4C0200, // 0077 CALL R19 1
- 0x50500200, // 0078 LDBOOL R20 1 0
- 0x4C540000, // 0079 LDNIL R21
- 0x1C542615, // 007A EQ R21 R19 R21
- 0x78560007, // 007B JMPF R21 #0084
- 0x60540001, // 007C GETGBL R21 G1
- 0x60580018, // 007D GETGBL R22 G24
- 0x585C0091, // 007E LDCONST R23 K145
- 0x5C602000, // 007F MOVE R24 R16
- 0x7C580400, // 0080 CALL R22 2
- 0x7C540200, // 0081 CALL R21 1
- 0x50500000, // 0082 LDBOOL R20 0 0
- 0x7002000A, // 0083 JMP #008F
- 0x54560003, // 0084 LDINT R21 4
- 0x20542615, // 0085 NE R21 R19 R21
- 0x78560007, // 0086 JMPF R21 #008F
- 0x60540001, // 0087 GETGBL R21 G1
- 0x60580018, // 0088 GETGBL R22 G24
- 0x585C0092, // 0089 LDCONST R23 K146
- 0x5C602000, // 008A MOVE R24 R16
- 0x5C642600, // 008B MOVE R25 R19
- 0x7C580600, // 008C CALL R22 3
- 0x7C540200, // 008D CALL R21 1
- 0x50500000, // 008E LDBOOL R20 0 0
- 0x78520003, // 008F JMPF R20 #0094
- 0x5C540C00, // 0090 MOVE R21 R6
- 0x5C582000, // 0091 MOVE R22 R16
+ 0x742A0004, // 001A JMPT R10 #0020
+ 0x8C281112, // 001B GETMET R10 R8 K18
+ 0x5C300200, // 001C MOVE R12 R1
+ 0x58340080, // 001D LDCONST R13 K128
+ 0x7C280600, // 001E CALL R10 3
+ 0x782A0000, // 001F JMPF R10 #0021
+ 0x00040381, // 0020 ADD R1 R1 K129
+ 0x8C28110C, // 0021 GETMET R10 R8 K12
+ 0x5C300200, // 0022 MOVE R12 R1
+ 0x58340006, // 0023 LDCONST R13 K6
+ 0x7C280600, // 0024 CALL R10 3
+ 0x242C1504, // 0025 GT R11 R10 K4
+ 0x782E0003, // 0026 JMPF R11 #002B
+ 0x0430152D, // 0027 SUB R12 R10 K45
+ 0x4032080C, // 0028 CONNECT R12 K4 R12
+ 0x9430020C, // 0029 GETIDX R12 R1 R12
+ 0x70020000, // 002A JMP #002C
+ 0x5C300200, // 002B MOVE R12 R1
+ 0x782E0003, // 002C JMPF R11 #0031
+ 0x0034152D, // 002D ADD R13 R10 K45
+ 0x40341B82, // 002E CONNECT R13 R13 K130
+ 0x9434020D, // 002F GETIDX R13 R1 R13
+ 0x70020000, // 0030 JMP #0032
+ 0x5C340200, // 0031 MOVE R13 R1
+ 0x8C38110C, // 0032 GETMET R14 R8 K12
+ 0x5C401A00, // 0033 MOVE R16 R13
+ 0x58440083, // 0034 LDCONST R17 K131
+ 0x7C380600, // 0035 CALL R14 3
+ 0x14381D04, // 0036 LT R14 R14 K4
+ 0x783A0001, // 0037 JMPF R14 #003A
+ 0x0004031E, // 0038 ADD R1 R1 K30
+ 0x00341B1E, // 0039 ADD R13 R13 K30
+ 0x8C381112, // 003A GETMET R14 R8 K18
+ 0x5C401A00, // 003B MOVE R16 R13
+ 0x5844001E, // 003C LDCONST R17 K30
+ 0x7C380600, // 003D CALL R14 3
+ 0x8C3C1112, // 003E GETMET R15 R8 K18
+ 0x5C441A00, // 003F MOVE R17 R13
+ 0x58480084, // 0040 LDCONST R18 K132
+ 0x7C3C0600, // 0041 CALL R15 3
+ 0x783E0001, // 0042 JMPF R15 #0045
+ 0x5C400200, // 0043 MOVE R16 R1
+ 0x70020000, // 0044 JMP #0046
+ 0x00400324, // 0045 ADD R16 R1 K36
+ 0x5C441C00, // 0046 MOVE R17 R14
+ 0x74460007, // 0047 JMPT R17 #0050
+ 0x5C441E00, // 0048 MOVE R17 R15
+ 0x74460005, // 0049 JMPT R17 #0050
+ 0x60440001, // 004A GETGBL R17 G1
+ 0x58480085, // 004B LDCONST R18 K133
+ 0x7C440200, // 004C CALL R17 1
+ 0x50440000, // 004D LDBOOL R17 0 0
+ 0xA0000000, // 004E CLOSE R0
+ 0x80042200, // 004F RET 1 R17
+ 0x50440000, // 0050 LDBOOL R17 0 0
+ 0x783E0008, // 0051 JMPF R15 #005B
+ 0x8C481386, // 0052 GETMET R18 R9 K134
+ 0x5C502000, // 0053 MOVE R20 R16
+ 0x7C480400, // 0054 CALL R18 2
+ 0x744A0002, // 0055 JMPT R18 #0059
+ 0x50480000, // 0056 LDBOOL R18 0 0
+ 0xA0000000, // 0057 CLOSE R0
+ 0x80042400, // 0058 RET 1 R18
+ 0x50440200, // 0059 LDBOOL R17 1 0
+ 0x70020014, // 005A JMP #0070
+ 0x8C481386, // 005B GETMET R18 R9 K134
+ 0x5C500200, // 005C MOVE R20 R1
+ 0x7C480400, // 005D CALL R18 2
+ 0x784A0007, // 005E JMPF R18 #0067
+ 0x8C481386, // 005F GETMET R18 R9 K134
+ 0x5C502000, // 0060 MOVE R20 R16
+ 0x7C480400, // 0061 CALL R18 2
+ 0x784A0002, // 0062 JMPF R18 #0066
+ 0x5C480A00, // 0063 MOVE R18 R5
+ 0x5C4C2000, // 0064 MOVE R19 R16
+ 0x7C480200, // 0065 CALL R18 1
+ 0x70020008, // 0066 JMP #0070
+ 0x8C481386, // 0067 GETMET R18 R9 K134
+ 0x5C502000, // 0068 MOVE R20 R16
+ 0x7C480400, // 0069 CALL R18 2
+ 0x784A0001, // 006A JMPF R18 #006D
+ 0x50440200, // 006B LDBOOL R17 1 0
+ 0x70020002, // 006C JMP #0070
+ 0x50480000, // 006D LDBOOL R18 0 0
+ 0xA0000000, // 006E CLOSE R0
+ 0x80042400, // 006F RET 1 R18
+ 0x782E0005, // 0070 JMPF R11 #0077
+ 0x00481906, // 0071 ADD R18 R12 K6
+ 0x90020612, // 0072 SETMBR R0 K3 R18
+ 0x5C480400, // 0073 MOVE R18 R2
+ 0x884C0103, // 0074 GETMBR R19 R0 K3
+ 0x7C480200, // 0075 CALL R18 1
+ 0x70020000, // 0076 JMP #0078
+ 0x90020707, // 0077 SETMBR R0 K3 K7
+ 0x4C480000, // 0078 LDNIL R18
+ 0x78460025, // 0079 JMPF R17 #00A0
+ 0x5C4C0800, // 007A MOVE R19 R4
+ 0x5C502000, // 007B MOVE R20 R16
+ 0x7C4C0200, // 007C CALL R19 1
+ 0x50500200, // 007D LDBOOL R20 1 0
+ 0x4C540000, // 007E LDNIL R21
+ 0x1C542615, // 007F EQ R21 R19 R21
+ 0x78560007, // 0080 JMPF R21 #0089
+ 0x60540001, // 0081 GETGBL R21 G1
+ 0x60580018, // 0082 GETGBL R22 G24
+ 0x585C0087, // 0083 LDCONST R23 K135
+ 0x5C602000, // 0084 MOVE R24 R16
+ 0x7C580400, // 0085 CALL R22 2
+ 0x7C540200, // 0086 CALL R21 1
+ 0x50500000, // 0087 LDBOOL R20 0 0
+ 0x7002000A, // 0088 JMP #0094
+ 0x54560003, // 0089 LDINT R21 4
+ 0x20542615, // 008A NE R21 R19 R21
+ 0x78560007, // 008B JMPF R21 #0094
+ 0x60540001, // 008C GETGBL R21 G1
+ 0x60580018, // 008D GETGBL R22 G24
+ 0x585C0088, // 008E LDCONST R23 K136
+ 0x5C602000, // 008F MOVE R24 R16
+ 0x5C642600, // 0090 MOVE R25 R19
+ 0x7C580600, // 0091 CALL R22 3
0x7C540200, // 0092 CALL R21 1
- 0x5C482A00, // 0093 MOVE R18 R21
- 0x4C540000, // 0094 LDNIL R21
- 0x1C542415, // 0095 EQ R21 R18 R21
- 0x78560003, // 0096 JMPF R21 #009B
- 0x5C540A00, // 0097 MOVE R21 R5
- 0x5C582000, // 0098 MOVE R22 R16
- 0x7C540200, // 0099 CALL R21 1
- 0x50440000, // 009A LDBOOL R17 0 0
- 0x5C4C2200, // 009B MOVE R19 R17
- 0x744E0003, // 009C JMPT R19 #00A1
- 0x5C4C0C00, // 009D MOVE R19 R6
- 0x5C500200, // 009E MOVE R20 R1
- 0x7C4C0200, // 009F CALL R19 1
- 0x5C482600, // 00A0 MOVE R18 R19
- 0x5C4C0E00, // 00A1 MOVE R19 R7
- 0x5C502400, // 00A2 MOVE R20 R18
- 0x7C4C0200, // 00A3 CALL R19 1
- 0x782E0003, // 00A4 JMPF R11 #00A9
- 0x5C500600, // 00A5 MOVE R20 R3
- 0x0054193F, // 00A6 ADD R21 R12 K63
- 0x7C500200, // 00A7 CALL R20 1
- 0x90026734, // 00A8 SETMBR R0 K51 K52
- 0xA0000000, // 00A9 CLOSE R0
- 0x80042600, // 00AA RET 1 R19
+ 0x50500000, // 0093 LDBOOL R20 0 0
+ 0x78520003, // 0094 JMPF R20 #0099
+ 0x5C540C00, // 0095 MOVE R21 R6
+ 0x5C582000, // 0096 MOVE R22 R16
+ 0x7C540200, // 0097 CALL R21 1
+ 0x5C482A00, // 0098 MOVE R18 R21
+ 0x4C540000, // 0099 LDNIL R21
+ 0x1C542415, // 009A EQ R21 R18 R21
+ 0x78560003, // 009B JMPF R21 #00A0
+ 0x5C540A00, // 009C MOVE R21 R5
+ 0x5C582000, // 009D MOVE R22 R16
+ 0x7C540200, // 009E CALL R21 1
+ 0x50440000, // 009F LDBOOL R17 0 0
+ 0x5C4C2200, // 00A0 MOVE R19 R17
+ 0x744E0003, // 00A1 JMPT R19 #00A6
+ 0x5C4C0C00, // 00A2 MOVE R19 R6
+ 0x5C500200, // 00A3 MOVE R20 R1
+ 0x7C4C0200, // 00A4 CALL R19 1
+ 0x5C482600, // 00A5 MOVE R18 R19
+ 0x5C4C0E00, // 00A6 MOVE R19 R7
+ 0x5C502400, // 00A7 MOVE R20 R18
+ 0x7C4C0200, // 00A8 CALL R19 1
+ 0x782E0003, // 00A9 JMPF R11 #00AE
+ 0x5C500600, // 00AA MOVE R20 R3
+ 0x00541906, // 00AB ADD R21 R12 K6
+ 0x7C500200, // 00AC CALL R20 1
+ 0x90020707, // 00AD SETMBR R0 K3 K7
+ 0xA0000000, // 00AE CLOSE R0
+ 0x80042600, // 00AF RET 1 R19
})
)
);
@@ -2527,12 +2437,12 @@ be_local_closure(class_Tasmota_load, /* name */
/********************************************************************
-** Solidified function: urlfetch
+** Solidified function: add_rule
********************************************************************/
-be_local_closure(class_Tasmota_urlfetch, /* name */
+be_local_closure(class_Tasmota_add_rule, /* name */
be_nested_proto(
- 10, /* nstack */
- 3, /* argc */
+ 12, /* nstack */
+ 5, /* argc */
10, /* varg */
0, /* has upvals */
NULL, /* no upvals */
@@ -2540,57 +2450,46 @@ be_local_closure(class_Tasmota_urlfetch, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_urlfetch,
+ &be_const_str_add_rule,
&be_const_str_solidified,
- ( &(const binstruction[48]) { /* code */
- 0x4C0C0000, // 0000 LDNIL R3
- 0x1C0C0403, // 0001 EQ R3 R2 R3
- 0x780E000D, // 0002 JMPF R3 #0011
- 0xA40E7600, // 0003 IMPORT R3 K59
- 0x8C100793, // 0004 GETMET R4 R3 K147
- 0x5C180200, // 0005 MOVE R6 R1
- 0x581C008A, // 0006 LDCONST R7 K138
- 0x7C100600, // 0007 CALL R4 3
- 0x8C10093A, // 0008 GETMET R4 R4 K58
- 0x7C100200, // 0009 CALL R4 1
- 0x5C080800, // 000A MOVE R2 R4
- 0x6010000C, // 000B GETGBL R4 G12
- 0x5C140400, // 000C MOVE R5 R2
- 0x7C100200, // 000D CALL R4 1
- 0x1C100901, // 000E EQ R4 R4 K1
- 0x78120000, // 000F JMPF R4 #0011
- 0x58080094, // 0010 LDCONST R2 K148
- 0xB80F2A00, // 0011 GETNGBL R3 K149
- 0x7C0C0000, // 0012 CALL R3 0
- 0x8C100796, // 0013 GETMET R4 R3 K150
- 0x50180200, // 0014 LDBOOL R6 1 0
- 0x7C100400, // 0015 CALL R4 2
- 0x8C100797, // 0016 GETMET R4 R3 K151
- 0x5C180200, // 0017 MOVE R6 R1
- 0x7C100400, // 0018 CALL R4 2
- 0x8C100798, // 0019 GETMET R4 R3 K152
- 0x7C100200, // 001A CALL R4 1
- 0x541600C7, // 001B LDINT R5 200
- 0x20140805, // 001C NE R5 R4 R5
- 0x78160004, // 001D JMPF R5 #0023
- 0x60140008, // 001E GETGBL R5 G8
- 0x5C180800, // 001F MOVE R6 R4
- 0x7C140200, // 0020 CALL R5 1
- 0x00173205, // 0021 ADD R5 K153 R5
- 0xB0073405, // 0022 RAISE 1 K154 R5
- 0x8C14079B, // 0023 GETMET R5 R3 K155
- 0x5C1C0400, // 0024 MOVE R7 R2
- 0x7C140400, // 0025 CALL R5 2
- 0x8C18079C, // 0026 GETMET R6 R3 K156
- 0x7C180200, // 0027 CALL R6 1
- 0x8C180122, // 0028 GETMET R6 R0 K34
- 0x60200008, // 0029 GETGBL R8 G8
- 0x5C240A00, // 002A MOVE R9 R5
- 0x7C200200, // 002B CALL R8 1
- 0x00233A08, // 002C ADD R8 K157 R8
- 0x58240019, // 002D LDCONST R9 K25
- 0x7C180600, // 002E CALL R6 3
- 0x80040800, // 002F RET 1 R4
+ ( &(const binstruction[37]) { /* code */
+ 0x8C14011A, // 0000 GETMET R5 R0 K26
+ 0x5C1C0400, // 0001 MOVE R7 R2
+ 0x7C140400, // 0002 CALL R5 2
+ 0x88140147, // 0003 GETMBR R5 R0 K71
+ 0x4C180000, // 0004 LDNIL R6
+ 0x1C140A06, // 0005 EQ R5 R5 R6
+ 0x78160002, // 0006 JMPF R5 #000A
+ 0x60140012, // 0007 GETGBL R5 G18
+ 0x7C140000, // 0008 CALL R5 0
+ 0x90028E05, // 0009 SETMBR R0 K71 R5
+ 0x60140004, // 000A GETGBL R5 G4
+ 0x5C180400, // 000B MOVE R6 R2
+ 0x7C140200, // 000C CALL R5 1
+ 0x1C140B28, // 000D EQ R5 R5 K40
+ 0x78160013, // 000E JMPF R5 #0023
+ 0x4C140000, // 000F LDNIL R5
+ 0x20140605, // 0010 NE R5 R3 R5
+ 0x78160003, // 0011 JMPF R5 #0016
+ 0x8C140189, // 0012 GETMET R5 R0 K137
+ 0x5C1C0200, // 0013 MOVE R7 R1
+ 0x5C200600, // 0014 MOVE R8 R3
+ 0x7C140600, // 0015 CALL R5 3
+ 0x88140147, // 0016 GETMBR R5 R0 K71
+ 0x8C140B1D, // 0017 GETMET R5 R5 K29
+ 0xB81E9C00, // 0018 GETNGBL R7 K78
+ 0x8820018A, // 0019 GETMBR R8 R0 K138
+ 0x8C20118B, // 001A GETMET R8 R8 K139
+ 0x5C280200, // 001B MOVE R10 R1
+ 0x7C200400, // 001C CALL R8 2
+ 0x5C240400, // 001D MOVE R9 R2
+ 0x5C280600, // 001E MOVE R10 R3
+ 0x5C2C0800, // 001F MOVE R11 R4
+ 0x7C1C0800, // 0020 CALL R7 4
+ 0x7C140400, // 0021 CALL R5 2
+ 0x70020000, // 0022 JMP #0024
+ 0xB006534D, // 0023 RAISE 1 K41 K77
+ 0x80000000, // 0024 RET 0
})
)
);
@@ -2598,9 +2497,9 @@ be_local_closure(class_Tasmota_urlfetch, /* name */
/********************************************************************
-** Solidified function: gen_cb
+** Solidified function: check_not_method
********************************************************************/
-be_local_closure(class_Tasmota_gen_cb, /* name */
+be_local_closure(class_Tasmota_check_not_method, /* name */
be_nested_proto(
6, /* nstack */
2, /* argc */
@@ -2611,14 +2510,24 @@ be_local_closure(class_Tasmota_gen_cb, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_gen_cb,
+ &be_const_str_check_not_method,
&be_const_str_solidified,
- ( &(const binstruction[ 5]) { /* code */
- 0xA40B3C00, // 0000 IMPORT R2 K158
- 0x8C0C059F, // 0001 GETMET R3 R2 K159
- 0x5C140200, // 0002 MOVE R5 R1
- 0x7C0C0400, // 0003 CALL R3 2
- 0x80040600, // 0004 RET 1 R3
+ ( &(const binstruction[15]) { /* code */
+ 0xA40AE000, // 0000 IMPORT R2 K112
+ 0x600C0004, // 0001 GETGBL R3 G4
+ 0x5C100200, // 0002 MOVE R4 R1
+ 0x7C0C0200, // 0003 CALL R3 1
+ 0x200C0728, // 0004 NE R3 R3 K40
+ 0x780E0000, // 0005 JMPF R3 #0007
+ 0xB007198D, // 0006 RAISE 1 K140 K141
+ 0x8C0C058E, // 0007 GETMET R3 R2 K142
+ 0x5C140200, // 0008 MOVE R5 R1
+ 0x7C0C0400, // 0009 CALL R3 2
+ 0x50100200, // 000A LDBOOL R4 1 0
+ 0x1C0C0604, // 000B EQ R3 R3 R4
+ 0x780E0000, // 000C JMPF R3 #000E
+ 0xB007198F, // 000D RAISE 1 K140 K143
+ 0x80000000, // 000E RET 0
})
)
);
@@ -2626,11 +2535,168 @@ be_local_closure(class_Tasmota_gen_cb, /* name */
/********************************************************************
-** Solidified function: run_network_up
+** Solidified function: add_rule_once
********************************************************************/
-be_local_closure(class_Tasmota_run_network_up, /* name */
+be_local_closure(class_Tasmota_add_rule_once, /* name */
be_nested_proto(
- 9, /* nstack */
+ 10, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_add_rule_once,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x8C100190, // 0000 GETMET R4 R0 K144
+ 0x5C180200, // 0001 MOVE R6 R1
+ 0x5C1C0400, // 0002 MOVE R7 R2
+ 0x5C200600, // 0003 MOVE R8 R3
+ 0x50240200, // 0004 LDBOOL R9 1 0
+ 0x7C100A00, // 0005 CALL R4 5
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: exec_rules
+********************************************************************/
+be_local_closure(class_Tasmota_exec_rules, /* name */
+ be_nested_proto(
+ 14, /* nstack */
+ 3, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_exec_rules,
+ &be_const_str_solidified,
+ ( &(const binstruction[60]) { /* code */
+ 0x880C0140, // 0000 GETMBR R3 R0 K64
+ 0x88100147, // 0001 GETMBR R4 R0 K71
+ 0x74120002, // 0002 JMPT R4 #0006
+ 0x4C100000, // 0003 LDNIL R4
+ 0x20100604, // 0004 NE R4 R3 R4
+ 0x78120033, // 0005 JMPF R4 #003A
+ 0xA4120000, // 0006 IMPORT R4 K0
+ 0x4C140000, // 0007 LDNIL R5
+ 0x90028005, // 0008 SETMBR R0 K64 R5
+ 0x50140000, // 0009 LDBOOL R5 0 0
+ 0x8C18090B, // 000A GETMET R6 R4 K11
+ 0x5C200200, // 000B MOVE R8 R1
+ 0x7C180400, // 000C CALL R6 2
+ 0x4C1C0000, // 000D LDNIL R7
+ 0x1C1C0C07, // 000E EQ R7 R6 R7
+ 0x781E0004, // 000F JMPF R7 #0015
+ 0x8C1C0114, // 0010 GETMET R7 R0 K20
+ 0x00269E01, // 0011 ADD R9 K79 R1
+ 0x58280050, // 0012 LDCONST R10 K80
+ 0x7C1C0600, // 0013 CALL R7 3
+ 0x5C180200, // 0014 MOVE R6 R1
+ 0x780A001E, // 0015 JMPF R2 #0035
+ 0x881C0147, // 0016 GETMBR R7 R0 K71
+ 0x781E001C, // 0017 JMPF R7 #0035
+ 0x581C0004, // 0018 LDCONST R7 K4
+ 0x6020000C, // 0019 GETGBL R8 G12
+ 0x88240147, // 001A GETMBR R9 R0 K71
+ 0x7C200200, // 001B CALL R8 1
+ 0x14200E08, // 001C LT R8 R7 R8
+ 0x78220016, // 001D JMPF R8 #0035
+ 0x88200147, // 001E GETMBR R8 R0 K71
+ 0x94201007, // 001F GETIDX R8 R8 R7
+ 0x8C240152, // 0020 GETMET R9 R0 K82
+ 0x5C2C0C00, // 0021 MOVE R11 R6
+ 0x8830113C, // 0022 GETMBR R12 R8 K60
+ 0x8834113F, // 0023 GETMBR R13 R8 K63
+ 0x7C240800, // 0024 CALL R9 4
+ 0x74160001, // 0025 JMPT R5 #0028
+ 0x74260000, // 0026 JMPT R9 #0028
+ 0x50140001, // 0027 LDBOOL R5 0 1
+ 0x50140200, // 0028 LDBOOL R5 1 0
+ 0x78260008, // 0029 JMPF R9 #0033
+ 0x88281191, // 002A GETMBR R10 R8 K145
+ 0x502C0200, // 002B LDBOOL R11 1 0
+ 0x1C28140B, // 002C EQ R10 R10 R11
+ 0x782A0004, // 002D JMPF R10 #0033
+ 0x88280147, // 002E GETMBR R10 R0 K71
+ 0x8C281531, // 002F GETMET R10 R10 K49
+ 0x5C300E00, // 0030 MOVE R12 R7
+ 0x7C280400, // 0031 CALL R10 2
+ 0x70020000, // 0032 JMP #0034
+ 0x001C0F2D, // 0033 ADD R7 R7 K45
+ 0x7001FFE3, // 0034 JMP #0019
+ 0x4C1C0000, // 0035 LDNIL R7
+ 0x201C0607, // 0036 NE R7 R3 R7
+ 0x781E0000, // 0037 JMPF R7 #0039
+ 0x90028006, // 0038 SETMBR R0 K64 R6
+ 0x80040A00, // 0039 RET 1 R5
+ 0x50100000, // 003A LDBOOL R4 0 0
+ 0x80040800, // 003B RET 1 R4
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: set_timer
+********************************************************************/
+be_local_closure(class_Tasmota_set_timer, /* name */
+ be_nested_proto(
+ 10, /* nstack */
+ 4, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_set_timer,
+ &be_const_str_solidified,
+ ( &(const binstruction[21]) { /* code */
+ 0x8C10011A, // 0000 GETMET R4 R0 K26
+ 0x5C180400, // 0001 MOVE R6 R2
+ 0x7C100400, // 0002 CALL R4 2
+ 0x8810012E, // 0003 GETMBR R4 R0 K46
+ 0x4C140000, // 0004 LDNIL R5
+ 0x1C100805, // 0005 EQ R4 R4 R5
+ 0x78120002, // 0006 JMPF R4 #000A
+ 0x60100012, // 0007 GETGBL R4 G18
+ 0x7C100000, // 0008 CALL R4 0
+ 0x90025C04, // 0009 SETMBR R0 K46 R4
+ 0x8810012E, // 000A GETMBR R4 R0 K46
+ 0x8C10091D, // 000B GETMET R4 R4 K29
+ 0xB81A9C00, // 000C GETNGBL R6 K78
+ 0x8C1C0192, // 000D GETMET R7 R0 K146
+ 0x5C240200, // 000E MOVE R9 R1
+ 0x7C1C0400, // 000F CALL R7 2
+ 0x5C200400, // 0010 MOVE R8 R2
+ 0x5C240600, // 0011 MOVE R9 R3
+ 0x7C180600, // 0012 CALL R6 3
+ 0x7C100400, // 0013 CALL R4 2
+ 0x80000000, // 0014 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: gc
+********************************************************************/
+be_local_closure(class_Tasmota_gc, /* name */
+ be_nested_proto(
+ 4, /* nstack */
1, /* argc */
10, /* varg */
0, /* has upvals */
@@ -2639,48 +2705,69 @@ be_local_closure(class_Tasmota_run_network_up, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_run_network_up,
+ &be_const_str_gc,
&be_const_str_solidified,
- ( &(const binstruction[39]) { /* code */
- 0x88040156, // 0000 GETMBR R1 R0 K86
- 0x4C080000, // 0001 LDNIL R2
- 0x1C040202, // 0002 EQ R1 R1 R2
- 0x78060000, // 0003 JMPF R1 #0005
- 0x80000200, // 0004 RET 0
- 0x8C040155, // 0005 GETMET R1 R0 K85
- 0x7C040200, // 0006 CALL R1 1
- 0x7806001D, // 0007 JMPF R1 #0026
- 0x6004000C, // 0008 GETGBL R1 G12
- 0x88080156, // 0009 GETMBR R2 R0 K86
- 0x7C040200, // 000A CALL R1 1
- 0x24040301, // 000B GT R1 R1 K1
- 0x78060016, // 000C JMPF R1 #0024
- 0x88040156, // 000D GETMBR R1 R0 K86
- 0x94040301, // 000E GETIDX R1 R1 K1
- 0x88080156, // 000F GETMBR R2 R0 K86
- 0x8C080516, // 0010 GETMET R2 R2 K22
- 0x58100001, // 0011 LDCONST R4 K1
- 0x7C080400, // 0012 CALL R2 2
- 0xA8020003, // 0013 EXBLK 0 #0018
- 0x5C080200, // 0014 MOVE R2 R1
- 0x7C080000, // 0015 CALL R2 0
- 0xA8040001, // 0016 EXBLK 1 1
- 0x7002000A, // 0017 JMP #0023
- 0xAC080002, // 0018 CATCH R2 0 2
- 0x70020007, // 0019 JMP #0022
- 0x60100001, // 001A GETGBL R4 G1
- 0x60140018, // 001B GETGBL R5 G24
- 0x581800A0, // 001C LDCONST R6 K160
- 0x5C1C0400, // 001D MOVE R7 R2
- 0x5C200600, // 001E MOVE R8 R3
- 0x7C140600, // 001F CALL R5 3
- 0x7C100200, // 0020 CALL R4 1
- 0x70020000, // 0021 JMP #0023
- 0xB0080000, // 0022 RAISE 2 R0 R0
- 0x7001FFE3, // 0023 JMP #0008
- 0x4C040000, // 0024 LDNIL R1
- 0x9002AC01, // 0025 SETMBR R0 K86 R1
- 0x80000000, // 0026 RET 0
+ ( &(const binstruction[ 6]) { /* code */
+ 0xA406F800, // 0000 IMPORT R1 K124
+ 0x8C080393, // 0001 GETMET R2 R1 K147
+ 0x7C080200, // 0002 CALL R2 1
+ 0x8C080394, // 0003 GETMET R2 R1 K148
+ 0x7C080200, // 0004 CALL R2 1
+ 0x80040400, // 0005 RET 1 R2
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: find_op
+********************************************************************/
+be_local_closure(class_Tasmota_find_op, /* name */
+ be_nested_proto(
+ 7, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_find_op,
+ &be_const_str_solidified,
+ ( &(const binstruction[31]) { /* code */
+ 0x8C080195, // 0000 GETMET R2 R0 K149
+ 0x5C100200, // 0001 MOVE R4 R1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x280C0504, // 0003 GE R3 R2 K4
+ 0x780E0011, // 0004 JMPF R3 #0017
+ 0x540E7FFE, // 0005 LDINT R3 32767
+ 0x2C0C0403, // 0006 AND R3 R2 R3
+ 0x5412000F, // 0007 LDINT R4 16
+ 0x3C100404, // 0008 SHR R4 R2 R4
+ 0x60140012, // 0009 GETGBL R5 G18
+ 0x7C140000, // 000A CALL R5 0
+ 0x0418072D, // 000B SUB R6 R3 K45
+ 0x401A0806, // 000C CONNECT R6 K4 R6
+ 0x94180206, // 000D GETIDX R6 R1 R6
+ 0x40180A06, // 000E CONNECT R6 R5 R6
+ 0x0418092D, // 000F SUB R6 R4 K45
+ 0x40180606, // 0010 CONNECT R6 R3 R6
+ 0x94180206, // 0011 GETIDX R6 R1 R6
+ 0x40180A06, // 0012 CONNECT R6 R5 R6
+ 0x40180982, // 0013 CONNECT R6 R4 K130
+ 0x94180206, // 0014 GETIDX R6 R1 R6
+ 0x40180A06, // 0015 CONNECT R6 R5 R6
+ 0x80040A00, // 0016 RET 1 R5
+ 0x600C0012, // 0017 GETGBL R3 G18
+ 0x7C0C0000, // 0018 CALL R3 0
+ 0x40100601, // 0019 CONNECT R4 R3 R1
+ 0x4C100000, // 001A LDNIL R4
+ 0x40100604, // 001B CONNECT R4 R3 R4
+ 0x4C100000, // 001C LDNIL R4
+ 0x40100604, // 001D CONNECT R4 R3 R4
+ 0x80040600, // 001E RET 1 R3
})
)
);
@@ -2704,24 +2791,24 @@ be_local_closure(class_Tasmota_urlfetch_cmd, /* name */
&be_const_str_urlfetch_cmd,
&be_const_str_solidified,
( &(const binstruction[34]) { /* code */
- 0xA4167600, // 0000 IMPORT R5 K59
- 0x8C180B1E, // 0001 GETMET R6 R5 K30
+ 0xA4160200, // 0000 IMPORT R5 K1
+ 0x8C180B0C, // 0001 GETMET R6 R5 K12
0x5C200600, // 0002 MOVE R8 R3
- 0x582400A1, // 0003 LDCONST R9 K161
+ 0x58240096, // 0003 LDCONST R9 K150
0x7C180600, // 0004 CALL R6 3
- 0x20180D01, // 0005 NE R6 R6 K1
+ 0x20180D04, // 0005 NE R6 R6 K4
0x781A0003, // 0006 JMPF R6 #000B
- 0x8C1801A2, // 0007 GETMET R6 R0 K162
- 0x582000A3, // 0008 LDCONST R8 K163
+ 0x8C180197, // 0007 GETMET R6 R0 K151
+ 0x58200098, // 0008 LDCONST R8 K152
0x7C180400, // 0009 CALL R6 2
0x80000C00, // 000A RET 0
0xA802000A, // 000B EXBLK 0 #0017
- 0x8C1801A4, // 000C GETMET R6 R0 K164
+ 0x8C180199, // 000C GETMET R6 R0 K153
0x5C200600, // 000D MOVE R8 R3
0x7C180400, // 000E CALL R6 2
- 0x141C0D01, // 000F LT R7 R6 K1
+ 0x141C0D04, // 000F LT R7 R6 K4
0x781E0003, // 0010 JMPF R7 #0015
- 0x8C1C01A5, // 0011 GETMET R7 R0 K165
+ 0x8C1C019A, // 0011 GETMET R7 R0 K154
0x7C1C0200, // 0012 CALL R7 1
0xA8040001, // 0013 EXBLK 1 1
0x80000E00, // 0014 RET 0
@@ -2729,13 +2816,13 @@ be_local_closure(class_Tasmota_urlfetch_cmd, /* name */
0x70020006, // 0016 JMP #001E
0xAC180002, // 0017 CATCH R6 0 2
0x70020003, // 0018 JMP #001D
- 0x8C2001A5, // 0019 GETMET R8 R0 K165
+ 0x8C20019A, // 0019 GETMET R8 R0 K154
0x7C200200, // 001A CALL R8 1
0x80001000, // 001B RET 0
0x70020000, // 001C JMP #001E
0xB0080000, // 001D RAISE 2 R0 R0
- 0xB81A1400, // 001E GETNGBL R6 K10
- 0x8C180DA6, // 001F GETMET R6 R6 K166
+ 0xB81A0400, // 001E GETNGBL R6 K2
+ 0x8C180D9B, // 001F GETMET R6 R6 K155
0x7C180200, // 0020 CALL R6 1
0x80000000, // 0021 RET 0
})
@@ -2745,11 +2832,11 @@ be_local_closure(class_Tasmota_urlfetch_cmd, /* name */
/********************************************************************
-** Solidified function: find_list_i
+** Solidified function: hs2rgb
********************************************************************/
-be_local_closure(class_Tasmota_find_list_i, /* name */
+be_local_closure(class_Tasmota_hs2rgb, /* name */
be_nested_proto(
- 9, /* nstack */
+ 17, /* nstack */
3, /* argc */
10, /* varg */
0, /* has upvals */
@@ -2758,29 +2845,77 @@ be_local_closure(class_Tasmota_find_list_i, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_find_list_i,
+ &be_const_str_hs2rgb,
&be_const_str_solidified,
- ( &(const binstruction[20]) { /* code */
- 0xA40E7600, // 0000 IMPORT R3 K59
- 0x58100001, // 0001 LDCONST R4 K1
- 0x8C14074D, // 0002 GETMET R5 R3 K77
- 0x5C1C0400, // 0003 MOVE R7 R2
- 0x7C140400, // 0004 CALL R5 2
- 0x6018000C, // 0005 GETGBL R6 G12
- 0x5C1C0200, // 0006 MOVE R7 R1
- 0x7C180200, // 0007 CALL R6 1
- 0x14180806, // 0008 LT R6 R4 R6
- 0x781A0007, // 0009 JMPF R6 #0012
- 0x8C18074D, // 000A GETMET R6 R3 K77
- 0x94200204, // 000B GETIDX R8 R1 R4
- 0x7C180400, // 000C CALL R6 2
- 0x1C180C05, // 000D EQ R6 R6 R5
- 0x781A0000, // 000E JMPF R6 #0010
- 0x80040800, // 000F RET 1 R4
- 0x00100905, // 0010 ADD R4 R4 K5
- 0x7001FFF2, // 0011 JMP #0005
- 0x4C180000, // 0012 LDNIL R6
- 0x80040C00, // 0013 RET 1 R6
+ ( &(const binstruction[68]) { /* code */
+ 0x4C0C0000, // 0000 LDNIL R3
+ 0x1C0C0403, // 0001 EQ R3 R2 R3
+ 0x780E0000, // 0002 JMPF R3 #0004
+ 0x540A00FE, // 0003 LDINT R2 255
+ 0x540E00FE, // 0004 LDINT R3 255
+ 0x541200FE, // 0005 LDINT R4 255
+ 0x541600FE, // 0006 LDINT R5 255
+ 0x541A0167, // 0007 LDINT R6 360
+ 0x10040206, // 0008 MOD R1 R1 R6
+ 0x24180504, // 0009 GT R6 R2 K4
+ 0x781A0031, // 000A JMPF R6 #003D
+ 0x541A003B, // 000B LDINT R6 60
+ 0x0C180206, // 000C DIV R6 R1 R6
+ 0x541E003B, // 000D LDINT R7 60
+ 0x101C0207, // 000E MOD R7 R1 R7
+ 0x542200FE, // 000F LDINT R8 255
+ 0x04201002, // 0010 SUB R8 R8 R2
+ 0xB8260400, // 0011 GETNGBL R9 K2
+ 0x8C24139C, // 0012 GETMET R9 R9 K156
+ 0x5C2C0E00, // 0013 MOVE R11 R7
+ 0x58300004, // 0014 LDCONST R12 K4
+ 0x5436003B, // 0015 LDINT R13 60
+ 0x543A00FE, // 0016 LDINT R14 255
+ 0x5C3C1000, // 0017 MOVE R15 R8
+ 0x7C240C00, // 0018 CALL R9 6
+ 0xB82A0400, // 0019 GETNGBL R10 K2
+ 0x8C28159C, // 001A GETMET R10 R10 K156
+ 0x5C300E00, // 001B MOVE R12 R7
+ 0x58340004, // 001C LDCONST R13 K4
+ 0x543A003B, // 001D LDINT R14 60
+ 0x5C3C1000, // 001E MOVE R15 R8
+ 0x544200FE, // 001F LDINT R16 255
+ 0x7C280C00, // 0020 CALL R10 6
+ 0x1C2C0D04, // 0021 EQ R11 R6 K4
+ 0x782E0002, // 0022 JMPF R11 #0026
+ 0x5C141400, // 0023 MOVE R5 R10
+ 0x5C101000, // 0024 MOVE R4 R8
+ 0x70020016, // 0025 JMP #003D
+ 0x1C2C0D2D, // 0026 EQ R11 R6 K45
+ 0x782E0002, // 0027 JMPF R11 #002B
+ 0x5C0C1200, // 0028 MOVE R3 R9
+ 0x5C101000, // 0029 MOVE R4 R8
+ 0x70020011, // 002A JMP #003D
+ 0x1C2C0D42, // 002B EQ R11 R6 K66
+ 0x782E0002, // 002C JMPF R11 #0030
+ 0x5C0C1000, // 002D MOVE R3 R8
+ 0x5C101400, // 002E MOVE R4 R10
+ 0x7002000C, // 002F JMP #003D
+ 0x1C2C0D50, // 0030 EQ R11 R6 K80
+ 0x782E0002, // 0031 JMPF R11 #0035
+ 0x5C0C1000, // 0032 MOVE R3 R8
+ 0x5C141200, // 0033 MOVE R5 R9
+ 0x70020007, // 0034 JMP #003D
+ 0x542E0003, // 0035 LDINT R11 4
+ 0x1C2C0C0B, // 0036 EQ R11 R6 R11
+ 0x782E0002, // 0037 JMPF R11 #003B
+ 0x5C0C1400, // 0038 MOVE R3 R10
+ 0x5C141000, // 0039 MOVE R5 R8
+ 0x70020001, // 003A JMP #003D
+ 0x5C141000, // 003B MOVE R5 R8
+ 0x5C101200, // 003C MOVE R4 R9
+ 0x541A000F, // 003D LDINT R6 16
+ 0x38180606, // 003E SHL R6 R3 R6
+ 0x541E0007, // 003F LDINT R7 8
+ 0x381C0A07, // 0040 SHL R7 R5 R7
+ 0x30180C07, // 0041 OR R6 R6 R7
+ 0x30180C04, // 0042 OR R6 R6 R4
+ 0x80040C00, // 0043 RET 1 R6
})
)
);
@@ -2788,11 +2923,11 @@ be_local_closure(class_Tasmota_find_list_i, /* name */
/********************************************************************
-** Solidified function: remove_timer
+** Solidified function: time_str
********************************************************************/
-be_local_closure(class_Tasmota_remove_timer, /* name */
+be_local_closure(class_Tasmota_time_str, /* name */
be_nested_proto(
- 7, /* nstack */
+ 11, /* nstack */
2, /* argc */
10, /* varg */
0, /* has upvals */
@@ -2801,27 +2936,22 @@ be_local_closure(class_Tasmota_remove_timer, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_remove_timer,
+ &be_const_str_time_str,
&be_const_str_solidified,
- ( &(const binstruction[18]) { /* code */
- 0x88080128, // 0000 GETMBR R2 R0 K40
- 0x780A000E, // 0001 JMPF R2 #0011
- 0x580C0001, // 0002 LDCONST R3 K1
- 0x8C100502, // 0003 GETMET R4 R2 K2
- 0x7C100200, // 0004 CALL R4 1
- 0x14100604, // 0005 LT R4 R3 R4
- 0x78120009, // 0006 JMPF R4 #0011
- 0x94100403, // 0007 GETIDX R4 R2 R3
- 0x88100903, // 0008 GETMBR R4 R4 K3
- 0x1C100801, // 0009 EQ R4 R4 R1
- 0x78120003, // 000A JMPF R4 #000F
- 0x8C100516, // 000B GETMET R4 R2 K22
- 0x5C180600, // 000C MOVE R6 R3
- 0x7C100400, // 000D CALL R4 2
- 0x70020000, // 000E JMP #0010
- 0x000C0705, // 000F ADD R3 R3 K5
- 0x7001FFF1, // 0010 JMP #0003
- 0x80000000, // 0011 RET 0
+ ( &(const binstruction[13]) { /* code */
+ 0x8C08019D, // 0000 GETMET R2 R0 K157
+ 0x5C100200, // 0001 MOVE R4 R1
+ 0x7C080400, // 0002 CALL R2 2
+ 0x600C0018, // 0003 GETGBL R3 G24
+ 0x5810009E, // 0004 LDCONST R4 K158
+ 0x9414059F, // 0005 GETIDX R5 R2 K159
+ 0x941805A0, // 0006 GETIDX R6 R2 K160
+ 0x941C05A1, // 0007 GETIDX R7 R2 K161
+ 0x942005A2, // 0008 GETIDX R8 R2 K162
+ 0x942405A3, // 0009 GETIDX R9 R2 K163
+ 0x942805A4, // 000A GETIDX R10 R2 K164
+ 0x7C0C0E00, // 000B CALL R3 7
+ 0x80040600, // 000C RET 1 R3
})
)
);
@@ -2829,60 +2959,11 @@ be_local_closure(class_Tasmota_remove_timer, /* name */
/********************************************************************
-** Solidified function: run_deferred
+** Solidified function: try_rule
********************************************************************/
-be_local_closure(class_Tasmota_run_deferred, /* name */
+be_local_closure(class_Tasmota_try_rule, /* name */
be_nested_proto(
- 6, /* nstack */
- 1, /* argc */
- 10, /* varg */
- 0, /* has upvals */
- NULL, /* no upvals */
- 0, /* has sup protos */
- NULL, /* no sub protos */
- 1, /* has constants */
- &be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_run_deferred,
- &be_const_str_solidified,
- ( &(const binstruction[26]) { /* code */
- 0x88040110, // 0000 GETMBR R1 R0 K16
- 0x78060016, // 0001 JMPF R1 #0019
- 0x6004000C, // 0002 GETGBL R1 G12
- 0x88080110, // 0003 GETMBR R2 R0 K16
- 0x7C040200, // 0004 CALL R1 1
- 0x24080301, // 0005 GT R2 R1 K1
- 0x780A0009, // 0006 JMPF R2 #0011
- 0x88080110, // 0007 GETMBR R2 R0 K16
- 0x94080501, // 0008 GETIDX R2 R2 K1
- 0x880C0110, // 0009 GETMBR R3 R0 K16
- 0x8C0C0716, // 000A GETMET R3 R3 K22
- 0x58140001, // 000B LDCONST R5 K1
- 0x7C0C0400, // 000C CALL R3 2
- 0x04040305, // 000D SUB R1 R1 K5
- 0x5C0C0400, // 000E MOVE R3 R2
- 0x7C0C0000, // 000F CALL R3 0
- 0x7001FFF3, // 0010 JMP #0005
- 0x6008000C, // 0011 GETGBL R2 G12
- 0x880C0110, // 0012 GETMBR R3 R0 K16
- 0x7C080200, // 0013 CALL R2 1
- 0x1C080501, // 0014 EQ R2 R2 K1
- 0x780A0002, // 0015 JMPF R2 #0019
- 0xB80A1400, // 0016 GETNGBL R2 K10
- 0x88080512, // 0017 GETMBR R2 R2 K18
- 0x900A2701, // 0018 SETMBR R2 K19 K1
- 0x80000000, // 0019 RET 0
- })
- )
-);
-/*******************************************************************/
-
-
-/********************************************************************
-** Solidified function: add_cron
-********************************************************************/
-be_local_closure(class_Tasmota_add_cron, /* name */
- be_nested_proto(
- 13, /* nstack */
+ 9, /* nstack */
4, /* argc */
10, /* varg */
0, /* has upvals */
@@ -2891,36 +2972,240 @@ be_local_closure(class_Tasmota_add_cron, /* name */
NULL, /* no sub protos */
1, /* has constants */
&be_ktab_class_Tasmota, /* shared constants */
- &be_const_str_add_cron,
+ &be_const_str_try_rule,
&be_const_str_solidified,
- ( &(const binstruction[27]) { /* code */
- 0x8C100127, // 0000 GETMET R4 R0 K39
- 0x5C180400, // 0001 MOVE R6 R2
+ ( &(const binstruction[18]) { /* code */
+ 0x8C1005A5, // 0000 GETMET R4 R2 K165
+ 0x5C180200, // 0001 MOVE R6 R1
0x7C100400, // 0002 CALL R4 2
- 0x88100100, // 0003 GETMBR R4 R0 K0
- 0x4C140000, // 0004 LDNIL R5
- 0x1C100805, // 0005 EQ R4 R4 R5
- 0x78120002, // 0006 JMPF R4 #000A
- 0x60100012, // 0007 GETGBL R4 G18
- 0x7C100000, // 0008 CALL R4 0
- 0x90020004, // 0009 SETMBR R0 K0 R4
- 0xB812B800, // 000A GETNGBL R4 K92
- 0x60140008, // 000B GETGBL R5 G8
- 0x5C180200, // 000C MOVE R6 R1
- 0x7C140200, // 000D CALL R5 1
- 0x7C100200, // 000E CALL R4 1
- 0x8C14095E, // 000F GETMET R5 R4 K94
- 0x7C140200, // 0010 CALL R5 1
- 0x88180100, // 0011 GETMBR R6 R0 K0
- 0x8C180D11, // 0012 GETMET R6 R6 K17
- 0xB8225200, // 0013 GETNGBL R8 K41
- 0x5C240A00, // 0014 MOVE R9 R5
- 0x5C280400, // 0015 MOVE R10 R2
- 0x5C2C0600, // 0016 MOVE R11 R3
- 0x5C300800, // 0017 MOVE R12 R4
- 0x7C200800, // 0018 CALL R8 4
- 0x7C180400, // 0019 CALL R6 2
- 0x80000000, // 001A RET 0
+ 0x4C140000, // 0003 LDNIL R5
+ 0x20140805, // 0004 NE R5 R4 R5
+ 0x78160009, // 0005 JMPF R5 #0010
+ 0x4C140000, // 0006 LDNIL R5
+ 0x20140605, // 0007 NE R5 R3 R5
+ 0x78160004, // 0008 JMPF R5 #000E
+ 0x5C140600, // 0009 MOVE R5 R3
+ 0x5C180800, // 000A MOVE R6 R4
+ 0x881C05A6, // 000B GETMBR R7 R2 K166
+ 0x5C200200, // 000C MOVE R8 R1
+ 0x7C140600, // 000D CALL R5 3
+ 0x50140200, // 000E LDBOOL R5 1 0
+ 0x80040A00, // 000F RET 1 R5
+ 0x50140000, // 0010 LDBOOL R5 0 0
+ 0x80040A00, // 0011 RET 1 R5
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: event
+********************************************************************/
+be_local_closure(class_Tasmota_event, /* name */
+ be_nested_proto(
+ 19, /* nstack */
+ 6, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_event,
+ &be_const_str_solidified,
+ ( &(const binstruction[112]) { /* code */
+ 0x1C1803A7, // 0000 EQ R6 R1 K167
+ 0x781A0005, // 0001 JMPF R6 #0008
+ 0x8818011C, // 0002 GETMBR R6 R0 K28
+ 0x781A0001, // 0003 JMPF R6 #0006
+ 0x8C1801A8, // 0004 GETMET R6 R0 K168
+ 0x7C180200, // 0005 CALL R6 1
+ 0x8C1801A9, // 0006 GETMET R6 R0 K169
+ 0x7C180200, // 0007 CALL R6 1
+ 0x1C1803AA, // 0008 EQ R6 R1 K170
+ 0x781A0001, // 0009 JMPF R6 #000C
+ 0x8C1801AB, // 000A GETMET R6 R0 K171
+ 0x7C180200, // 000B CALL R6 1
+ 0x50180000, // 000C LDBOOL R6 0 0
+ 0x501C0000, // 000D LDBOOL R7 0 0
+ 0x1C2003AC, // 000E EQ R8 R1 K172
+ 0x78220000, // 000F JMPF R8 #0011
+ 0x501C0200, // 0010 LDBOOL R7 1 0
+ 0x1C2003AD, // 0011 EQ R8 R1 K173
+ 0x78220006, // 0012 JMPF R8 #001A
+ 0x8C2001AE, // 0013 GETMET R8 R0 K174
+ 0x5C280400, // 0014 MOVE R10 R2
+ 0x5C2C0600, // 0015 MOVE R11 R3
+ 0x5C300800, // 0016 MOVE R12 R4
+ 0x7C200800, // 0017 CALL R8 4
+ 0x80041000, // 0018 RET 1 R8
+ 0x7002004F, // 0019 JMP #006A
+ 0x1C2003AF, // 001A EQ R8 R1 K175
+ 0x78220004, // 001B JMPF R8 #0021
+ 0x8C2001B0, // 001C GETMET R8 R0 K176
+ 0x5C280800, // 001D MOVE R10 R4
+ 0x7C200400, // 001E CALL R8 2
+ 0x80041000, // 001F RET 1 R8
+ 0x70020048, // 0020 JMP #006A
+ 0x1C200348, // 0021 EQ R8 R1 K72
+ 0x78220007, // 0022 JMPF R8 #002B
+ 0x8C2001B1, // 0023 GETMET R8 R0 K177
+ 0x5C280800, // 0024 MOVE R10 R4
+ 0x602C0017, // 0025 GETGBL R11 G23
+ 0x5C300600, // 0026 MOVE R12 R3
+ 0x7C2C0200, // 0027 CALL R11 1
+ 0x7C200600, // 0028 CALL R8 3
+ 0x80041000, // 0029 RET 1 R8
+ 0x7002003E, // 002A JMP #006A
+ 0x1C20037C, // 002B EQ R8 R1 K124
+ 0x78220003, // 002C JMPF R8 #0031
+ 0x8C20017C, // 002D GETMET R8 R0 K124
+ 0x7C200200, // 002E CALL R8 1
+ 0x80041000, // 002F RET 1 R8
+ 0x70020038, // 0030 JMP #006A
+ 0x88200149, // 0031 GETMBR R8 R0 K73
+ 0x78220036, // 0032 JMPF R8 #006A
+ 0xA422E000, // 0033 IMPORT R8 K112
+ 0x58240004, // 0034 LDCONST R9 K4
+ 0x6028000C, // 0035 GETGBL R10 G12
+ 0x882C0149, // 0036 GETMBR R11 R0 K73
+ 0x7C280200, // 0037 CALL R10 1
+ 0x1428120A, // 0038 LT R10 R9 R10
+ 0x782A002F, // 0039 JMPF R10 #006A
+ 0x88280149, // 003A GETMBR R10 R0 K73
+ 0x94281409, // 003B GETIDX R10 R10 R9
+ 0x8C2C1172, // 003C GETMET R11 R8 K114
+ 0x5C341400, // 003D MOVE R13 R10
+ 0x5C380200, // 003E MOVE R14 R1
+ 0x7C2C0600, // 003F CALL R11 3
+ 0x60300004, // 0040 GETGBL R12 G4
+ 0x5C341600, // 0041 MOVE R13 R11
+ 0x7C300200, // 0042 CALL R12 1
+ 0x1C301928, // 0043 EQ R12 R12 K40
+ 0x78320022, // 0044 JMPF R12 #0068
+ 0xA8020011, // 0045 EXBLK 0 #0058
+ 0x5C301600, // 0046 MOVE R12 R11
+ 0x5C341400, // 0047 MOVE R13 R10
+ 0x5C380400, // 0048 MOVE R14 R2
+ 0x5C3C0600, // 0049 MOVE R15 R3
+ 0x5C400800, // 004A MOVE R16 R4
+ 0x5C440A00, // 004B MOVE R17 R5
+ 0x7C300A00, // 004C CALL R12 5
+ 0x74320001, // 004D JMPT R12 #0050
+ 0x741A0000, // 004E JMPT R6 #0050
+ 0x50180001, // 004F LDBOOL R6 0 1
+ 0x50180200, // 0050 LDBOOL R6 1 0
+ 0x781A0003, // 0051 JMPF R6 #0056
+ 0x5C300E00, // 0052 MOVE R12 R7
+ 0x74320001, // 0053 JMPT R12 #0056
+ 0xA8040001, // 0054 EXBLK 1 1
+ 0x70020013, // 0055 JMP #006A
+ 0xA8040001, // 0056 EXBLK 1 1
+ 0x7002000F, // 0057 JMP #0068
+ 0xAC300002, // 0058 CATCH R12 0 2
+ 0x7002000C, // 0059 JMP #0067
+ 0x60380001, // 005A GETGBL R14 G1
+ 0x603C0018, // 005B GETGBL R15 G24
+ 0x584000B2, // 005C LDCONST R16 K178
+ 0x5C441800, // 005D MOVE R17 R12
+ 0x5C481A00, // 005E MOVE R18 R13
+ 0x7C3C0600, // 005F CALL R15 3
+ 0x7C380200, // 0060 CALL R14 1
+ 0x88380176, // 0061 GETMBR R14 R0 K118
+ 0x783A0002, // 0062 JMPF R14 #0066
+ 0xA43AEE00, // 0063 IMPORT R14 K119
+ 0x8C3C1DB3, // 0064 GETMET R15 R14 K179
+ 0x7C3C0200, // 0065 CALL R15 1
+ 0x70020000, // 0066 JMP #0068
+ 0xB0080000, // 0067 RAISE 2 R0 R0
+ 0x0024132D, // 0068 ADD R9 R9 K45
+ 0x7001FFCA, // 0069 JMP #0035
+ 0x1C2003B4, // 006A EQ R8 R1 K180
+ 0x78220002, // 006B JMPF R8 #006F
+ 0xA4236A00, // 006C IMPORT R8 K181
+ 0x8C241125, // 006D GETMET R9 R8 K37
+ 0x7C240200, // 006E CALL R9 1
+ 0x80040C00, // 006F RET 1 R6
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: remove_cmd
+********************************************************************/
+be_local_closure(class_Tasmota_remove_cmd, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_remove_cmd,
+ &be_const_str_solidified,
+ ( &(const binstruction[ 7]) { /* code */
+ 0x88080116, // 0000 GETMBR R2 R0 K22
+ 0x780A0003, // 0001 JMPF R2 #0006
+ 0x88080116, // 0002 GETMBR R2 R0 K22
+ 0x8C080531, // 0003 GETMET R2 R2 K49
+ 0x5C100200, // 0004 MOVE R4 R1
+ 0x7C080400, // 0005 CALL R2 2
+ 0x80000000, // 0006 RET 0
+ })
+ )
+);
+/*******************************************************************/
+
+
+/********************************************************************
+** Solidified function: add_driver
+********************************************************************/
+be_local_closure(class_Tasmota_add_driver, /* name */
+ be_nested_proto(
+ 5, /* nstack */
+ 2, /* argc */
+ 10, /* varg */
+ 0, /* has upvals */
+ NULL, /* no upvals */
+ 0, /* has sup protos */
+ NULL, /* no sub protos */
+ 1, /* has constants */
+ &be_ktab_class_Tasmota, /* shared constants */
+ &be_const_str_add_driver,
+ &be_const_str_solidified,
+ ( &(const binstruction[25]) { /* code */
+ 0x60080004, // 0000 GETGBL R2 G4
+ 0x5C0C0200, // 0001 MOVE R3 R1
+ 0x7C080200, // 0002 CALL R2 1
+ 0x20080557, // 0003 NE R2 R2 K87
+ 0x780A0000, // 0004 JMPF R2 #0006
+ 0xB00653B6, // 0005 RAISE 1 K41 K182
+ 0x88080149, // 0006 GETMBR R2 R0 K73
+ 0x780A000B, // 0007 JMPF R2 #0014
+ 0x88080149, // 0008 GETMBR R2 R0 K73
+ 0x8C08050C, // 0009 GETMET R2 R2 K12
+ 0x5C100200, // 000A MOVE R4 R1
+ 0x7C080400, // 000B CALL R2 2
+ 0x4C0C0000, // 000C LDNIL R3
+ 0x1C080403, // 000D EQ R2 R2 R3
+ 0x780A0003, // 000E JMPF R2 #0013
+ 0x88080149, // 000F GETMBR R2 R0 K73
+ 0x8C08051D, // 0010 GETMET R2 R2 K29
+ 0x5C100200, // 0011 MOVE R4 R1
+ 0x7C080400, // 0012 CALL R2 2
+ 0x70020003, // 0013 JMP #0018
+ 0x60080012, // 0014 GETGBL R2 G18
+ 0x7C080000, // 0015 CALL R2 0
+ 0x400C0401, // 0016 CONNECT R3 R2 R1
+ 0x90029202, // 0017 SETMBR R0 K73 R2
+ 0x80000000, // 0018 RET 0
})
)
);
@@ -2933,68 +3218,71 @@ be_local_closure(class_Tasmota_add_cron, /* name */
be_local_class(Tasmota,
15,
NULL,
- be_nested_map(60,
+ be_nested_map(63,
( (struct bmapnode*) &(const bmapnode[]) {
- { be_const_key(wire1, -1), be_const_var(8) },
- { be_const_key(wd, 42), be_const_var(13) },
- { be_const_key(int, 48), be_const_static_closure(class_Tasmota_int_closure) },
- { be_const_key(add_cron, -1), be_const_closure(class_Tasmota_add_cron_closure) },
- { be_const_key(run_deferred, -1), be_const_closure(class_Tasmota_run_deferred_closure) },
- { be_const_key(try_rule, -1), be_const_closure(class_Tasmota_try_rule_closure) },
- { be_const_key(run_timers, -1), be_const_closure(class_Tasmota_run_timers_closure) },
- { be_const_key(defer, -1), be_const_closure(class_Tasmota_defer_closure) },
- { be_const_key(is_network_up, 31), be_const_closure(class_Tasmota_is_network_up_closure) },
- { be_const_key(hs2rgb, -1), be_const_closure(class_Tasmota_hs2rgb_closure) },
- { be_const_key(_defer, -1), be_const_var(3) },
- { be_const_key(add_driver, 36), be_const_closure(class_Tasmota_add_driver_closure) },
- { be_const_key(exec_rules, -1), be_const_closure(class_Tasmota_exec_rules_closure) },
- { be_const_key(set_timer, 6), be_const_closure(class_Tasmota_set_timer_closure) },
- { be_const_key(global, -1), be_const_var(11) },
- { be_const_key(init, -1), be_const_closure(class_Tasmota_init_closure) },
- { be_const_key(settings, 34), be_const_var(12) },
+ { be_const_key(read_extension_manifest, -1), be_const_closure(class_Tasmota_read_extension_manifest_closure) },
+ { be_const_key(add_driver, 58), be_const_closure(class_Tasmota_add_driver_closure) },
+ { be_const_key(int, -1), be_const_static_closure(class_Tasmota_int_closure) },
{ be_const_key(find_list_i, -1), be_const_closure(class_Tasmota_find_list_i_closure) },
- { be_const_key(compile, -1), be_const_closure(class_Tasmota_compile_closure) },
- { be_const_key(add_cmd, 30), be_const_closure(class_Tasmota_add_cmd_closure) },
- { be_const_key(_timers, -1), be_const_var(2) },
- { be_const_key(run_network_up, 52), be_const_closure(class_Tasmota_run_network_up_closure) },
- { be_const_key(remove_cmd, 47), be_const_closure(class_Tasmota_remove_cmd_closure) },
- { be_const_key(remove_fast_loop, -1), be_const_closure(class_Tasmota_remove_fast_loop_closure) },
{ be_const_key(when_network_up, -1), be_const_closure(class_Tasmota_when_network_up_closure) },
- { be_const_key(_drivers, 21), be_const_var(6) },
- { be_const_key(find_key_i, -1), be_const_closure(class_Tasmota_find_key_i_closure) },
- { be_const_key(check_not_method, -1), be_const_closure(class_Tasmota_check_not_method_closure) },
- { be_const_key(remove_driver, 24), be_const_closure(class_Tasmota_remove_driver_closure) },
- { be_const_key(add_rule_once, -1), be_const_closure(class_Tasmota_add_rule_once_closure) },
- { be_const_key(exec_cmd, -1), be_const_closure(class_Tasmota_exec_cmd_closure) },
- { be_const_key(remove_rule, -1), be_const_closure(class_Tasmota_remove_rule_closure) },
- { be_const_key(set_light, 44), be_const_closure(class_Tasmota_set_light_closure) },
- { be_const_key(_ccmd, -1), be_const_var(5) },
- { be_const_key(find_op, 20), be_const_closure(class_Tasmota_find_op_closure) },
- { be_const_key(run_cron, -1), be_const_closure(class_Tasmota_run_cron_closure) },
- { be_const_key(gc, -1), be_const_closure(class_Tasmota_gc_closure) },
- { be_const_key(time_str, -1), be_const_closure(class_Tasmota_time_str_closure) },
- { be_const_key(event, -1), be_const_closure(class_Tasmota_event_closure) },
- { be_const_key(cmd, 38), be_const_closure(class_Tasmota_cmd_closure) },
- { be_const_key(wire_scan, -1), be_const_closure(class_Tasmota_wire_scan_closure) },
- { be_const_key(exec_tele, -1), be_const_closure(class_Tasmota_exec_tele_closure) },
- { be_const_key(wire2, -1), be_const_var(9) },
- { be_const_key(add_rule, 17), be_const_closure(class_Tasmota_add_rule_closure) },
- { be_const_key(_fl, 37), be_const_var(0) },
- { be_const_key(_debug_present, -1), be_const_var(14) },
- { be_const_key(add_fast_loop, -1), be_const_closure(class_Tasmota_add_fast_loop_closure) },
- { be_const_key(cmd_res, 54), be_const_var(10) },
- { be_const_key(fast_loop, -1), be_const_closure(class_Tasmota_fast_loop_closure) },
- { be_const_key(load, -1), be_const_closure(class_Tasmota_load_closure) },
- { be_const_key(urlfetch, -1), be_const_closure(class_Tasmota_urlfetch_closure) },
- { be_const_key(gen_cb, -1), be_const_closure(class_Tasmota_gen_cb_closure) },
- { be_const_key(_rules, -1), be_const_var(1) },
- { be_const_key(urlfetch_cmd, -1), be_const_closure(class_Tasmota_urlfetch_cmd_closure) },
+ { be_const_key(wire1, 8), be_const_var(8) },
+ { be_const_key(compile, -1), be_const_closure(class_Tasmota_compile_closure) },
+ { be_const_key(add_fast_loop, 24), be_const_closure(class_Tasmota_add_fast_loop_closure) },
+ { be_const_key(is_network_up, -1), be_const_closure(class_Tasmota_is_network_up_closure) },
{ be_const_key(remove_cron, -1), be_const_closure(class_Tasmota_remove_cron_closure) },
- { be_const_key(remove_timer, -1), be_const_closure(class_Tasmota_remove_timer_closure) },
- { be_const_key(get_light, 4), be_const_closure(class_Tasmota_get_light_closure) },
- { be_const_key(next_cron, 3), be_const_closure(class_Tasmota_next_cron_closure) },
- { be_const_key(_wnu, 1), be_const_var(7) },
- { be_const_key(_crons, 0), be_const_var(4) },
+ { be_const_key(exec_cmd, 3), be_const_closure(class_Tasmota_exec_cmd_closure) },
+ { be_const_key(set_light, 12), be_const_closure(class_Tasmota_set_light_closure) },
+ { be_const_key(time_str, 57), be_const_closure(class_Tasmota_time_str_closure) },
+ { be_const_key(remove_timer, 20), be_const_closure(class_Tasmota_remove_timer_closure) },
+ { be_const_key(hs2rgb, 41), be_const_closure(class_Tasmota_hs2rgb_closure) },
+ { be_const_key(cmd, -1), be_const_closure(class_Tasmota_cmd_closure) },
+ { be_const_key(exec_tele, -1), be_const_closure(class_Tasmota_exec_tele_closure) },
+ { be_const_key(remove_rule, 30), be_const_closure(class_Tasmota_remove_rule_closure) },
+ { be_const_key(wd, -1), be_const_var(13) },
+ { be_const_key(add_cmd, -1), be_const_closure(class_Tasmota_add_cmd_closure) },
+ { be_const_key(find_op, 9), be_const_closure(class_Tasmota_find_op_closure) },
+ { be_const_key(add_cron, 37), be_const_closure(class_Tasmota_add_cron_closure) },
+ { be_const_key(_defer, -1), be_const_var(3) },
+ { be_const_key(global, 16), be_const_var(11) },
+ { be_const_key(settings, 54), be_const_var(12) },
+ { be_const_key(run_network_up, -1), be_const_closure(class_Tasmota_run_network_up_closure) },
+ { be_const_key(_rules, -1), be_const_var(1) },
+ { be_const_key(gen_cb, 14), be_const_closure(class_Tasmota_gen_cb_closure) },
+ { be_const_key(wire_scan, -1), be_const_closure(class_Tasmota_wire_scan_closure) },
+ { be_const_key(add_extension, -1), be_const_closure(class_Tasmota_add_extension_closure) },
+ { be_const_key(gc, -1), be_const_closure(class_Tasmota_gc_closure) },
+ { be_const_key(wire2, -1), be_const_var(9) },
+ { be_const_key(run_deferred, 48), be_const_closure(class_Tasmota_run_deferred_closure) },
+ { be_const_key(init, -1), be_const_closure(class_Tasmota_init_closure) },
+ { be_const_key(defer, -1), be_const_closure(class_Tasmota_defer_closure) },
+ { be_const_key(set_timer, -1), be_const_closure(class_Tasmota_set_timer_closure) },
+ { be_const_key(next_cron, -1), be_const_closure(class_Tasmota_next_cron_closure) },
+ { be_const_key(exec_rules, -1), be_const_closure(class_Tasmota_exec_rules_closure) },
+ { be_const_key(unload_extension, -1), be_const_closure(class_Tasmota_unload_extension_closure) },
+ { be_const_key(add_rule_once, 50), be_const_closure(class_Tasmota_add_rule_once_closure) },
+ { be_const_key(cmd_res, -1), be_const_var(10) },
+ { be_const_key(_ccmd, 29), be_const_var(5) },
+ { be_const_key(add_rule, -1), be_const_closure(class_Tasmota_add_rule_closure) },
+ { be_const_key(remove_driver, 42), be_const_closure(class_Tasmota_remove_driver_closure) },
+ { be_const_key(_fl, -1), be_const_var(0) },
+ { be_const_key(check_not_method, -1), be_const_closure(class_Tasmota_check_not_method_closure) },
+ { be_const_key(_drivers, -1), be_const_var(6) },
+ { be_const_key(find_key_i, 39), be_const_closure(class_Tasmota_find_key_i_closure) },
+ { be_const_key(get_light, -1), be_const_closure(class_Tasmota_get_light_closure) },
+ { be_const_key(load, 35), be_const_closure(class_Tasmota_load_closure) },
+ { be_const_key(fast_loop, 53), be_const_closure(class_Tasmota_fast_loop_closure) },
+ { be_const_key(_debug_present, -1), be_const_var(14) },
+ { be_const_key(run_timers, 26), be_const_closure(class_Tasmota_run_timers_closure) },
+ { be_const_key(urlfetch, -1), be_const_closure(class_Tasmota_urlfetch_closure) },
+ { be_const_key(_timers, -1), be_const_var(2) },
+ { be_const_key(_wnu, 18), be_const_var(7) },
+ { be_const_key(urlfetch_cmd, -1), be_const_closure(class_Tasmota_urlfetch_cmd_closure) },
+ { be_const_key(remove_fast_loop, -1), be_const_closure(class_Tasmota_remove_fast_loop_closure) },
+ { be_const_key(_crons, -1), be_const_var(4) },
+ { be_const_key(try_rule, -1), be_const_closure(class_Tasmota_try_rule_closure) },
+ { be_const_key(event, -1), be_const_closure(class_Tasmota_event_closure) },
+ { be_const_key(remove_cmd, -1), be_const_closure(class_Tasmota_remove_cmd_closure) },
+ { be_const_key(run_cron, 1), be_const_closure(class_Tasmota_run_cron_closure) },
})),
(bstring*) &be_const_str_Tasmota
);
diff --git a/tasmota/berry/extensions/Leds_Panel.tapp b/tasmota/berry/extensions/Leds_Panel.tapp
new file mode 100644
index 0000000000000000000000000000000000000000..cba48be17818fbddbeb9a644c8819f00ad46798e
GIT binary patch
literal 36944
zcmc(IOLH4Zk|t}bX3bh{eVfA`#@3?1=>}Luf)71fO^Iq#Nvx8#^x#s|R#!>YARY-4
zB_M%KBt=RZj@ewt#&*v$b6uO?F?-yf(APQc{(zm^?Dx5QL`Eh6O4U;JvbzKzBf`VO
z-NVDf-6L}E>yJOVw8X#k@Bi@Kum9~IfB#P(EiLiCpD+EzQu`zyCud2w*-4%r{A}st
ze_nfj{6F#E$=T1BKKkTeQR|aGN7H4OjogEzH*M{;(`4Ap+mp!+_j)jKYd^TPjcQT!
zdp+tQemo?wi2&;)alxpa4*JP7Z~ibHr
9I(Dat>y6WT
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.
+#
+
+# make sure we use `webserver_async` if it's already solidified
+if !global.contains("webserver_async") || type(global.webserver_async) != 'class'
+ class webserver_async
+ #############################################################
+ # class webserver_async_cnx
+ #
+ # This instance represents an active connection between
+ # the server and a client (TCP connection)
+ #############################################################
+ static class webserver_async_cnx
+ var server # link to server object
+ var cnx # holds the tcpclientasync instance
+ var close_after_send # if true, close after we finished sending the out_buffer
+ var fastloop_cb # cb for fastloop
+ var buf_in # incoming buffer
+ var buf_in_offset
+ var buf_out
+ var phase # parsing phase: 0/ status line, 1/ headers, 2/ payload
+ # request
+ var req_verb # verb for request (we support only GET)
+ var req_uri # URI for request
+ var req_version # HTTP version for request
+ var header_host # 'Host' header - useful for redirections
+ # response
+ var resp_headers # (string) aggregate headers
+ var chunked # if true enable chunked encoding (default true)
+ # conversion
+ static var CODE_TO_STRING = {
+ # 100: "Continue",
+ 200: "OK",
+ # 204: "No Content",
+ 301: "Moved Permanently",
+ # 400: "Bad Request",
+ # 401: "Unauthorized",
+ # 403: "Payment Required", # not sure it's useful in Tasmota context
+ 404: "Not Found",
+ 500: "Internal Server Error",
+ # 501: "Not Implemented"
+ }
+
+ #############################################################
+ # init
+ #
+ # Called when a new connection is received from a client
+ # Arg:
+ # - server : main instance of `webserver_async` server
+ # - cnx : instance of `tcpclientasync`
+ #
+ # By default:
+ # version is HTTP/1.1
+ # response is chunked-encoded
+ def init(server, cnx)
+ self.server = server
+ self.cnx = cnx
+ self.buf_in = ''
+ self.buf_in_offset = 0
+ self.buf_out = bytes()
+ self.phase = 0 # 0 = status line
+ # util
+ self.close_after_send = false
+ # response
+ self.resp_headers = ''
+ self.chunked = true
+ # register cb
+ self.fastloop_cb = def () self.loop() end # the closure needs to be kept, to allow removal of fast_loop later
+ tasmota.add_fast_loop(self.fastloop_cb)
+ end
+
+ #############################################################
+ # set_chunked: sets whether the response is chunked encoded
+ # true by default
+ #
+ def set_chunked(chunked)
+ self.chunked = bool(chunked)
+ end
+
+ #############################################################
+ # connected: returns `true` if the connection is still open
+ #
+ def connected()
+ return self.cnx ? self.cnx.connected() : false
+ end
+
+ #############################################################
+ # buf_out_empty: returns `true` if out buffer is empty,
+ # i.e. all content was sent to client
+ #
+ def buf_out_empty()
+ return size(self.buf_out) == 0
+ end
+
+ #############################################################
+ # _write: (internal method) write bytes
+ #
+ # Arg:
+ # v must be bytes()
+ #
+ def _write(v)
+ var sz_v = size(v)
+ if (sz_v == 0) return end # do nothing if empty content
+
+ var buf_out = self.buf_out # keep a copy of reference in local variable (avoids multiple dereferencing)
+ var buf_out_sz = size(buf_out)
+ buf_out.resize(buf_out_sz + sz_v)
+ buf_out.setbytes(buf_out_sz, v)
+
+ self._send() # try sending `self.buf_out` now
+ end
+
+ #############################################################
+ # close: close the connection to client
+ #
+ # Can be called multiple times
+ # Does nothing if connection is already closed
+ #
+ def close()
+ # log(f"WEB: closing cnx", 3)
+ if (self.cnx != nil) self.cnx.close() end
+ self.cnx = nil
+ end
+
+ #############################################################
+ # loop: called by fastloop every 5 ms
+ #
+ def loop()
+ if self.cnx == nil # if connection is closed, this instance is marked for deletion
+ tasmota.remove_fast_loop(self.fastloop_cb) # remove from fast_loop
+ self.fastloop_cb = nil # fastloop_cb can be garbage collected
+ return
+ end
+
+ self._send() # try sending any pending output data
+
+ var cnx = self.cnx # keep copy
+ if (cnx == nil) return end # it's possible that it was closed after _send()
+
+ # any new incoming data received?
+ if cnx.available() > 0
+ var buf_in_new = cnx.read() # read bytes() object
+ if (!self.buf_in) # use the same instance if none present
+ self.buf_in = buf_in_new
+ else # or append to current incoming buffer
+ self.buf_in += buf_in_new
+ end
+ end
+
+ # parse incoming data if any
+ if (self.buf_in)
+ self.parse()
+ end
+ end
+
+ #############################################################
+ # _send: (internal method) try sending pendin data out
+ #
+ # the content is in `self.buf_out`
+ #
+ def _send()
+ # any data waiting to go out?
+ var cnx = self.cnx
+ if (cnx == nil) return end # abort if connection is closed
+
+ var buf_out = self.buf_out # keep reference in local variable
+ if size(buf_out) > 0
+ if cnx.listening() # is the client ready to receive?
+ var sent = cnx.write(buf_out) # send the buffer, `sent` contains the number of bytes actually sent
+ if sent > 0 # did we succeed in sending anything?
+ # we did sent something
+ if sent >= size(buf_out) # the entire buffer was sent, clear it
+ # all sent
+ self.buf_out.clear()
+ else # buffer was sent partially, remove what was sent from `out_buf`
+ # remove the first bytes already sent
+ self.buf_out.setbytes(0, buf_out, sent) # copy to index 0 (start of buffer), content from the same buffer starting at offset 'sent'
+ self.buf_out.resize(size(buf_out) - sent) # shrink buffer
+ end
+ end
+ end
+ else
+ # empty buffer, do the cleaning
+ # self.buf_out.clear() # TODO not needed?
+ # self.buf_in_offset = 0 # TODO really useful?
+
+ if self.close_after_send # close connection if we have sent everything
+ self.close()
+ end
+ end
+ end
+
+ #############################################################
+ # parse incoming
+ #
+ # pre: self.buf_in is not empty
+ # post: self.buf_in has made progress (smaller or '')
+ def parse()
+ # log(f"WEB: incoming {bytes().fromstring(self.buf_in).tohex()}", 3)
+ if self.phase == 0
+ self.parse_http_req_line()
+ elif self.phase == 1
+ self.parse_http_headers()
+ elif self.phase == 2
+ self.parse_http_payload()
+ end
+ end
+
+ #############################################################
+ # parse incoming request
+ #
+ # pre: self.buf_in is not empty
+ # post: self.buf_in has made progress (smaller or '')
+ def parse_http_req_line()
+ var m = global._re_http_srv.match2(self.buf_in, self.buf_in_offset)
+ # Ex: "GET / HTTP/1.1\r\n"
+ if m
+ var offset = m[0]
+ self.req_verb = m[1] # GET/POST...
+ self.req_uri = m[2] # /
+ self.req_version = m[3] # "1.0" or "1.1"
+ self.phase = 1 # proceed to parsing headers
+ self.buf_in = self.buf_in[offset .. ] # remove what we parsed
+ if tasmota.loglevel(4)
+ log(f"WEB: HTTP verb: {self.req_verb} URI: '{self.req_uri}' Version:{self.req_version}", 4)
+ end
+ self.parse_http_headers()
+ elif size(self.buf_in) > 100 # if no match and we still have 100 bytes, then it fails
+ log("WEB: error invalid request", 4)
+ self.close()
+ self.buf_in = ''
+ end
+ end
+
+ #############################################################
+ # parse incoming headers
+ def parse_http_headers()
+ while true
+ # print("parse_http_headers", "self.buf_in_offset=", self.buf_in_offset)
+ var m = global._re_http_srv_header.match2(self.buf_in, self.buf_in_offset)
+ # print("m=", m)
+ # Ex: [32, 'Content-Type', 'application/json']
+ if m
+ self.event_http_header(m[1], m[2])
+ self.buf_in_offset += m[0]
+ else # no more headers
+ var m2 = global._re_http_srv_body.match2(self.buf_in, self.buf_in_offset)
+ if m2
+ # end of headers
+ # we keep \r\n which is used by pattern
+ self.buf_in = self.buf_in[self.buf_in_offset + m2[0] .. ] # truncate
+ self.buf_in_offset = 0
+
+ # self.event_http_headers_end() # no more headers
+ self.phase = 2
+ self.parse_http_payload() # continue to parsing payload
+ end
+ if size(self.buf_in) > 1024 # we don't accept a single header larger than 1KB
+ log("WEB: error header is bigger than 1KB", 4)
+ self.close()
+ self.buf_in = ''
+ end
+ return
+ end
+ end
+
+ end
+
+ #############################################################
+ # event_http_header: method called for each header received
+ #
+ # Default implementation only stores "Host" header
+ # and ignores all other headers
+ #
+ # Args:
+ # header_key: string
+ # header_value: string
+ #
+ def event_http_header(header_key, header_value)
+ # log(f"WEB: header key '{header_key}' = '{header_value}'")
+
+ if (header_key == "Host")
+ self.header_host = header_value
+ end
+ end
+
+ #############################################################
+ # event_http_headers_end: called afte all headers are received
+ #
+ # By default does nothing
+ #
+ # def event_http_headers_end()
+ # end
+
+ #############################################################
+ # parse incoming payload (if any)
+ #
+ # Calls the server's dispatcher with 'verb' and 'uri'
+ #
+ # Payload is in `self.buf_in`
+ #
+ def parse_http_payload()
+ # log(f"WEB: parsing payload '{bytes().fromstring(self.buf_in).tohex()}'")
+ # dispatch request before parsing payload
+ self.server.dispatch(self, self.req_uri, self.req_verb)
+ end
+
+
+ #############################################################
+ # Responses
+ #############################################################
+ # send_header: add header to the response
+ #
+ # Args:
+ # name: key of header
+ # value: value of header
+ # first: if 'true' prepend, or append if 'false'
+ def send_header(name, value, first)
+ if first
+ self.resp_headers = f"{name}: {value}\r\n{self.resp_headers}"
+ else
+ self.resp_headers = f"{self.resp_headers}{name}: {value}\r\n"
+ end
+ end
+
+ #############################################################
+ # send: send response to client
+ #
+ # Args
+ # code: (int) http code (ex: 200)
+ # content_type: (string, opt) MIME type, "text/html" if not specified
+ # content: (bytes or string, opt) first content to send to client (you can send more later)
+ #
+ def send(code, content_type, content)
+ var response = f"HTTP/1.1 {code} {self.CODE_TO_STRING.find(code, 'UNKNOWN')}\r\n"
+ self.send_header("Content-Type", content_type ? content_type : "text/html", true)
+
+ self.send_header("Accept-Ranges", "none")
+ # chunked encoding?
+ if self.chunked
+ self.send_header("Transfer-Encoding", "chunked")
+ end
+ # cors?
+ if self.server.cors
+ self.send_header("Access-Control-Allow-Origin", "*")
+ self.send_header("Access-Control-Allow-Methods", "*")
+ self.send_header("Access-Control-Allow-Headers", "*")
+ end
+ # others
+ self.send_header("Connection", "close")
+
+ response += self.resp_headers
+ response += "\r\n"
+ self.resp_headers = nil
+
+ # send status-line and headers
+ self.write_raw(response)
+
+ # send first part of content
+ if (content) self.write(content) end
+ end
+
+ #############################################################
+ # write: writes a bytes or string piece of content
+ #
+ # If chunked encoding is enabled, it is sent as a separate chunk
+ #
+ # If content is empty, it can be sent as an empty chunk
+ # which is an indicator of end-of-content
+ #
+ def write(v)
+ if type(v) == 'string' # if string, convert to bytes
+ v = bytes().fromstring(v)
+ end
+
+ # use chunk encoding
+ if self.chunked
+ var p1 = self.server.p1
+ p1.clear()
+ p1.append(f"{size(v):X}\r\n")
+ p1.append(v)
+ p1.append("\r\n")
+
+ # log(f"WEB: sending chunk '{p1.tohex()}'")
+ self._write(p1)
+ else
+ self._write(v)
+ end
+ end
+
+ #############################################################
+ # write_raw: low-level write of string or bytes (without chunk encoding)
+ #
+ # If content is empty, nothing is sent
+ #
+ def write_raw(v)
+ if (size(v) == 0) return end
+
+ if type(v) == 'string' # if string, convert to bytes
+ v = bytes().fromstring(v)
+ end
+
+ self._write(v)
+ end
+
+ #############################################################
+ # content_stop: signal that the response is finished
+ #
+ def content_stop()
+ self.write('') # send 'end-of-content' for chunked encoding
+ self.close_after_send = true # close connection when everything was sent to client
+ end
+ end
+
+ #######################################################################
+ # class webserver_async_dispatcher
+ #
+ # Pre-register callbacks triggered when a certain URL is accessed
+ #
+ # You can register either a pure function or a method and an instance
+ #
+ # Pure function:
+ # webserver_async_dispatcher(uri_prefix, nil, func, verb)
+ # will call:
+ # func(cnx, uri, verb)
+ #
+ # Instance and method:
+ # webserver_async_dispatcher(uri_prefix, instance, method, verb)
+ # will call:
+ # insatnce.method(cnx, uri, verb)
+ #
+ # Args in:
+ # uri_prefix: prefix string for matchin URI, must start with '/'
+ # cb_obj: 'nil' for pure function or instance from which we call a method
+ # cb_mth: pure function or method to call
+ # verb: verb to match, only supported: 'GET' or 'nil' for any
+ #
+ # Args of callback:
+ # cnx: instance of 'webserver_async_cnx' for the current connection
+ # uri: full uri of request
+ # verb: verb received (currently only GET is supported)
+ #######################################################################
+ static class webserver_async_dispatcher
+ var uri_prefix # prefix string, must start with '/'
+ var verb # verb to match, or nil for ANY
+ var cb_obj # callback object (sent as first argument if not 'nil')
+ var cb_mth # callback function
+
+ def init(uri_prefix, cb_obj, cb_mth, verb)
+ self.uri_prefix = uri_prefix
+ self.cb_obj = cb_obj
+ self.cb_mth = cb_mth
+ self.verb = verb
+ end
+
+ # return true if matched
+ def dispatch(cnx, uri, verb)
+ import string
+ if string.find(uri, self.uri_prefix) == 0
+ var match = false
+ if (self.verb == nil) || (self.verb == verb)
+ # method is valid
+ var cb_obj = self.cb_obj
+ if (cb_obj != nil)
+ self.cb_mth(self.cb_obj, cnx, uri, verb)
+ else
+ self.cb_mth(cnx, uri, verb)
+ end
+ return true
+ end
+ end
+ return false
+ end
+ end
+
+ #############################################################
+ # class webserver_async
+ #
+ # This is the main class to call
+ #############################################################
+ var local_port # listening port, 80 is already used by Tasmota
+ var server # instance of `tcpserver`
+ var fastloop_cb # closure used by fastloop
+ # var timeout # default timeout for tcp connection
+ var connections # list of active connections
+ # var auth # web authentication string (Basic Auth) or `nil`, in format `user:password` as bade64
+ # var cmd # GET url command
+ var dispatchers
+ # copied in each connection
+ var chunked # if true enable chunked encoding (default true)
+ var cors # if true send CORS headers (default false)
+ #
+ var p1 # temporary object bytes() to avoid reallocation
+
+ # static var TIMEOUT = 1000 # default timeout: 1000ms
+ # static var HTTP_REQ = "^(\\w+) (\\S+) HTTP\\/(\\d\\.\\d)\r\n"
+ # static var HTTP_HEADER_REGEX = "([A-Za-z0-9-]+): (.*?)\r\n" # extract a header with its 2 parts
+ # static var HTTP_BODY_REGEX = "\r\n" # end of headers
+
+ #############################################################
+ # init
+ def init(port, timeout)
+ # if (timeout == nil) timeout = self.TIMEOUT end
+ # if (timeout == nil) timeout = 1000 end
+ self.connections = []
+ self.dispatchers = []
+ self.server = tcpserver(port) # throws an exception if port is not available
+ self.chunked = true
+ self.cors = false
+ self.p1 = bytes(100) # reserve 100 bytes by default
+ # TODO what about max_clients ?
+ self.compile_re()
+ # register cb
+ tasmota.add_driver(self)
+ self.fastloop_cb = def () self.loop() end
+ tasmota.add_fast_loop(self.fastloop_cb)
+ end
+
+ #############################################################
+ # compile once for all the regex
+ def compile_re()
+ import re
+ if !global.contains("_re_http_srv")
+ # global._re_http_srv = re.compile(self.HTTP_REQ)
+ # global._re_http_srv_header = re.compile(self.HTTP_HEADER_REGEX)
+ # global._re_http_srv_body = re.compile(self.HTTP_BODY_REGEX)
+ global._re_http_srv = re.compile("^(\\w+) (\\S+) HTTP\\/(\\d\\.\\d)\r\n")
+ global._re_http_srv_header = re.compile("([A-Za-z0-9-]+): (.*?)\r\n")
+ global._re_http_srv_body = re.compile("\r\n")
+ end
+ end
+
+ #############################################################
+ # enable or disable chunked mode (enabled by default)
+ def set_chunked(chunked)
+ self.chunked = bool(chunked)
+ end
+
+ #############################################################
+ # enable or disable CORS mode (enabled by default)
+ def set_cors(cors)
+ self.cors = bool(cors)
+ end
+
+ #############################################################
+ # Helper function to encode integer as hex (uppercase)
+ static def bytes_format_hex(b, i, default)
+ b.clear()
+ if (i == nil) b .. default return end
+ # sanity check
+ if (i < 0) i = -i end
+ if (i < 0) return end # special case for MININT
+ if (i == 0) b.resize(1) b[0] = 0x30 return end # return bytes("30")
+
+ b.resize(8)
+ var len = 0
+ while i > 0
+ var digit = i & 0x0F
+ if (digit < 10)
+ b[len] = 0x30 + digit
+ else
+ b[len] = 0x37 + digit # 0x37 = 0x41 ('A') - 10
+ end
+ len += 1
+ i = (i >> 4)
+ end
+ # reverse order
+ b.resize(len)
+ b.reverse()
+ end
+
+ #############################################################
+ # Helper function to encode integer as int
+ static def bytes_append_int(b, i, default)
+ var sz = size(b)
+ if (i == 0) # just append '0'
+ b.resize(sz + 1)
+ b[sz] = 0x30
+ elif (i != nil) # we have a non-zero value
+ var negative = false
+ # sanity check
+ if (i < 0) i = -i negative = true end
+ if (i < 0) return b end # special case for MININT
+
+ if negative
+ b.resize(sz + 1)
+ b[sz] = 0x2D
+ sz += 1
+ end
+
+ var start = sz
+ while i > 0
+ var digit = i % 10
+ b.resize(sz + 1)
+ b[sz] = 0x30 + digit
+ sz += 1
+ i = (i / 10)
+ end
+ # reverse order starting where the integer is
+ b.reverse(start)
+
+ else # i is `nil`, append default
+ b.append(default)
+ end
+ return b
+ end
+
+ #############################################################
+ # closing web server
+ def close()
+ tasmota.remove_driver(self)
+ tasmota.remove_fast_loop(self.fastloop_cb)
+ self.fastloop_cb = nil
+ self.server.close()
+
+ # close all active connections
+ for cnx: self.connections
+ cnx.close()
+ end
+ self.connections = nil # and free memory
+ end
+
+ #############################################################
+ # clean connections
+ #
+ # Remove any connections that is closed or in error
+ def clean_connections()
+ var idx = 0
+ while idx < size(self.connections)
+ var cnx = self.connections[idx]
+ # remove if not connected
+ if !cnx.connected()
+ # log("WEB: does not appear to be connected")
+ cnx.close()
+ self.connections.remove(idx)
+ else
+ idx += 1
+ end
+ end
+ end
+
+ #############################################################
+ # called by fastloop
+ def loop()
+ self.clean_connections()
+ # check if any incoming connection
+ while self.server.hasclient()
+ # retrieve new client
+ var cnx = self.webserver_async_cnx(self, self.server.acceptasync())
+ cnx.set_chunked(self.chunked)
+ self.connections.push(cnx)
+ end
+ end
+
+ #############################################################
+ # add to dispatcher
+ def on(prefix, obj, mth, verb)
+ var dispatcher = self.webserver_async_dispatcher(prefix, obj, mth, verb)
+ self.dispatchers.push(dispatcher)
+ end
+
+ #############################################################
+ # add to dispatcher
+ def dispatch(cnx, uri, verb)
+ var idx = 0
+ while idx < size(self.dispatchers)
+ if (self.dispatchers[idx].dispatch(cnx, uri, verb))
+ return
+ end
+ idx += 1
+ end
+ # fallback unsupported request
+ cnx.send(500, "text/plain")
+ cnx.write("Unsupported")
+ cnx.content_stop()
+ end
+
+ end
+
+ # assign the class to a global
+ global.webserver_async = webserver_async
+end
+
+class leds_panel
+ var port
+ var web
+ var sampling_interval
+ var p1, p_leds
+ var strip # strip object
+ var h, w, cell_size, cell_space
+
+ static var EXT_NAME = "leds_panel"
+ static var SAMPLING = 100
+ static var PORT = 8886 # default port 8886
+ static var HTML_WIDTH = 290
+ static var HTML_HEAD1 =
+ ""
+ static var HTML_URL_F =
+ ""
+ static var HTML_HEAD2 =
+ ''
+ ''
+ ''
+ ''
+ static var HTML_CONTENT =
+ ''
+ ''
+ '| '
+ ''
+ ' |
'
+ ''
+ '
'
+ static var HTML_END =
+ ''
+ ''
+
+ def init(port)
+ import gpio
+ if !gpio.pin_used(gpio.WS2812, 0)
+ log("LED: no leds configured, can't start leds_panel", 3)
+ return
+ end
+ if (port == nil) port = self.PORT end
+ self.port = port
+
+ # start network part
+ if tasmota.is_network_up()
+ self.init_network()
+ else
+ tasmota.when_network_up(/ -> self.init_network())
+ end
+ end
+
+ def init_network()
+ self.web = global.webserver_async(self.port)
+ self.sampling_interval = self.SAMPLING
+
+ self.strip = Leds()
+ self.p1 = bytes(100)
+ self.p_leds = self.strip.pixels_buffer()
+
+ self.web.set_chunked(true)
+ self.web.set_cors(true)
+ self.web.on("/leds_feed", self, self.send_info_feed) # feed with leds values
+ self.web.on("/leds", self, self.send_info_page) # display leds page
+
+ tasmota.add_driver(self, self.EXT_NAME) # also register as `leds_panel` extension
+ end
+
+ #################################################################################
+ # unload
+ #
+ # Uninstall the extension and deallocate all resources
+ #################################################################################
+ def unload()
+ self.close() # stop server
+ tasmota.remove_driver(self) # remove driver, normally already done by tasmota.unload_ext
+ global.undef("webserver_async") # free `webserver_async` if it was loaded as part of this file
+ end
+
+ #################################################################################
+ # stop
+ #
+ # Stop server
+ #################################################################################
+ def close()
+ tasmota.remove_driver(self)
+ if self.web
+ self.web.close()
+ end
+ end
+
+ def update()
+ self.p_leds = self.strip.pixels_buffer(self.p_leds) # update buffer
+ self.h = tasmota.settings.light_pixels_height_1 + 1
+ self.w = self.strip.pixel_count() / (tasmota.settings.light_pixels_height_1 + 1)
+ self.cell_size = tasmota.int(self.HTML_WIDTH / self.w, 4, 25)
+ self.cell_space = (self.cell_size <= 6) ? 1 : 2
+ end
+
+ def send_info_page(cnx, uri, verb)
+ import string
+
+ self.update()
+ var host = cnx.header_host
+ var host_split = string.split(host, ':') # need to make it stronger
+ var ip = host_split[0]
+ var port = 80
+ if size(host_split) > 1
+ port = int(host_split[1])
+ end
+
+ cnx.send(200, "text/html")
+ cnx.write(self.HTML_HEAD1)
+ cnx.write(format(self.HTML_URL_F, ip, port))
+ cnx.write(self.HTML_HEAD2)
+ cnx.write(self.HTML_CONTENT)
+ cnx.write(self.HTML_END)
+
+ cnx.content_stop()
+ end
+
+ static class feeder
+ var app # overarching app (debug_panel)
+ var cnx # connection object
+
+ def init(app, cnx)
+ self.app = app
+ self.cnx = cnx
+ tasmota.add_driver(self)
+ end
+
+ def close()
+ tasmota.remove_driver(self)
+ end
+
+ def every_100ms()
+ self.send_feed()
+ end
+
+ def send_feed()
+ var cnx = self.cnx
+ if !cnx.connected()
+ self.close()
+ return
+ end
+
+ var server = self.cnx.server
+ if cnx.buf_out_empty()
+ # if out buffer is not empty, do not send any new information
+ var app = self.app
+ app.update()
+ var payload1 = app.p1
+ var p_leds = app.p_leds
+
+ payload1.clear()
+ payload1 .. "id:"
+ server.bytes_append_int(payload1, tasmota.millis())
+ payload1 .. "\r\nevent:leds\r\ndata:"
+
+ payload1 .. '{"w":'
+ server.bytes_append_int(payload1, app.w)
+ payload1 .. ',"h":'
+ server.bytes_append_int(payload1, app.h)
+ payload1 .. ',"clsz":'
+ server.bytes_append_int(payload1, app.cell_size)
+ payload1 .. ',"clsp":'
+ server.bytes_append_int(payload1, app.cell_space)
+ payload1 .. ',"rev":'
+ server.bytes_append_int(payload1, tasmota.settings.light_pixels_reverse)
+ payload1 .. ',"alt":'
+ server.bytes_append_int(payload1, tasmota.settings.light_pixels_alternate)
+ payload1 .. ',"hex":"'
+ payload1.appendhex(p_leds)
+ payload1 .. '"}\r\n\r\n'
+ cnx.write(payload1)
+ end
+ end
+
+ end
+
+ def send_info_feed(cnx, uri, verb)
+ cnx.set_chunked(false) # no chunking since we use EventSource
+ cnx.send(200, "text/event-stream")
+ #
+ var feed = feeder(self, cnx)
+ feed.send_feed() # send first values immediately
+ end
+
+ def web_add_main_button()
+ self.send_iframe_code()
+ end
+
+ def send_iframe_code()
+ import webserver
+ self.update()
+ var ip = tasmota.wifi().find('ip')
+ if (ip == nil)
+ ip = tasmota.eth().find('ip')
+ end
+ if (ip != nil)
+ var height = self.h * self.cell_size + 10
+ webserver.content_send(
+ f''
+ ''
+ )
+ webserver.content_send(
+ ''
+ )
+ end
+ end
+
+end
+
+return leds_panel()
diff --git a/tasmota/berry/extensions/Leds_Panel/manifest.json b/tasmota/berry/extensions/Leds_Panel/manifest.json
new file mode 100644
index 000000000..492701cd3
--- /dev/null
+++ b/tasmota/berry/extensions/Leds_Panel/manifest.json
@@ -0,0 +1,8 @@
+{
+ "name": "Leds Panel",
+ "version": "0x19090100",
+ "description": "Realtime display of the WS2812 leds in browser",
+ "author": "Stephan Hadinger",
+ "min_tasmota": "0x0F000100",
+ "features": ""
+}
\ No newline at end of file
diff --git a/tasmota/berry/extensions/Partition_Wizard.tapp b/tasmota/berry/extensions/Partition_Wizard.tapp
new file mode 100644
index 0000000000000000000000000000000000000000..8c5e88d4b62f681bfb9149c380c5055a42839960
GIT binary patch
literal 17906
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 self.do_safeboot_partitioning()) # delay by 5 s
+ tasmota.set_timer(5000, /-> self.do_safeboot_partitioning(), "partition_wizard_timer") # delay by 5 s
end
- tasmota.add_rule("Wifi#Connected=1", continue_after_5s, "parwiz_5s1")
- tasmota.add_rule("Wifi#Connected==1", continue_after_5s, "parwiz_5s2")
-
+ tasmota.when_network_up(continue_after_5s)
end
end
+ #- ---------------------------------------------------------------------- -#
+ # unload
+ #- ---------------------------------------------------------------------- -#
+ def unload()
+ import webserver
+ webserver.remove_route("/part_wiz", webserver.HTTP_GET)
+ webserver.remove_route("/part_wiz", webserver.HTTP_POST)
+ tasmota.remove_driver(self)
+ tasmota.remove_timer("partition_wizard_timer")
+ end
+
# ----------------------------------------------------------------------
- # Patch partition core since we can't chang the solidified code
+ # Patch partition core since we can't change the solidified code
# ----------------------------------------------------------------------
def patch_partition_core(p)
var otadata = p.otadata
@@ -881,26 +891,5 @@ class Partition_wizard_UI
webserver.on("/part_wiz", / -> self.page_part_ctl(), webserver.HTTP_POST)
end
end
-partition_wizard.Partition_wizard_UI = Partition_wizard_UI
-
-#- create and register driver in Tasmota -#
-if tasmota
- import partition_core
- var partition_wizard_ui = partition_wizard.Partition_wizard_UI()
- tasmota.add_driver(partition_wizard_ui)
- ## can be removed if put in 'autoexec.bat'
- partition_wizard_ui.web_add_handler()
-end
-
-return partition_wizard
-
-#- Example
-
-import partition
-
-# read
-p = partition.Partition()
-print(p)
-
--#
+return Partition_wizard_UI()
diff --git a/tasmota/berry/extensions/Partition_Wizard/partition_wizard.bec b/tasmota/berry/extensions/Partition_Wizard/partition_wizard.bec
new file mode 100644
index 0000000000000000000000000000000000000000..7aba7c7801a9374f1eccd085a1130808345fa217
GIT binary patch
literal 16704
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
K#D9{&*#80&<{3=@
literal 0
HcmV?d00001
diff --git a/tasmota/berry/extensions/Wifi_Memory_Sticker.tapp b/tasmota/berry/extensions/Wifi_Memory_Sticker.tapp
new file mode 100644
index 0000000000000000000000000000000000000000..aaa5ba624fce56af2602832b620683dd95d1716f
GIT binary patch
literal 3129
zcmcImUuz>(6i;ne*%aSI1Vs)BaS~|Kq_w+i(o_^HEvry%mt~j2?9I%X%~|3H(KkJJ{v@+$S{JMnCb_xi{LVS|{JZDi{_;w>WS;2T
zXOG|f?d#glOQn)|S4(e|*hmYUpwk-QgQMG}<
zd))pMLm|)XL(QG1C|jDvaSy)aF*Hx0*}jrz5n;Wcd?9^o6o#onl_?zHLe`K)+(V^X
zCrU(RSHP7|6)+s23p|1+u6P1Uz!5k)?sTF0klK`#c(g7BCFNfCUh-5LL_^ECcW`
z7E%*hOQB+PH0_--2@7n6eu1qO3U?G>-CDqCt$~&!Y$P^UArQ=klpO{mo!RCv$2SIO
zrb3}vi)^)VqA^ljMD+zy8)b~#^1(Fx`nzY3k58%x-@j5SnfG-H{{mQ^2|unM`#;e;
zp9$3)dCJu!jF6@iWa(6{(tfr!{#U*jgG3f+9%ABRP+DR%^eIf_qa-z;u0;$1dK!cW
zA)~;?Y>16=`9>@)3dyXVD}w()j}tJZ7A1O_GC*lY#gJs(-qF#4y|??pNA}^-qfd72
zhx;GzL!Wp6D%(n*1-Mg5|Ful0&&S-=ez$Wkp7ea=Ltm%sSSYS3jk*#8l6{I7If_Z=
zJf>8mg6Ot;Q$99OA{c4x4TN-2b~oY)6;i-mN@NyMtx%A3Mr=yv@{#IpwQKnf1+3|a
zK*%nYPQBT5Y)^)bnbLMtMa@Nz
z8VJ{QN@Ww#V&%J%WXih2z-tiERC
zBXGHj19p~lRUgw@HCa4T5b(%!HFMT64(xQ-HoLZoa(0fa>k@}TNe533SIy-nogvxc
z-qcGb-|N;Wwo*@k5ubuvj))lrT!-CZihsh#H$NM)PNf0OPB88Th3
zY`gpvlB(_}H-H72>j3-K=ZA;;P;+awHTnkk!_cDorn>E0)3O6oU2XH-vv!Jts5pUb
zLQT>3Iw`nJ+_;X|xsKR|G;gP(69tvE#LXtPu6v&M(-$KaaD8Sq))GIyn25yVJAG(w
zZNd9cNsXyM7b-7k!&JcC_J0&`?~(BZb)*Q2F=bdPv
z;@)}gtn@akTLw=35YcK}Jf((USSv=MQI{0DL_LzxqU(XmWp?44dGC+UcE0(Y1~~J+
zN*DffbJBF;GgIH(J%3ILD`xPikjo!ZEzMokNfatnie~&UJnc!l(@vh0?#WUn"
+ ".wifi{width:18px;height:18px;position:relative}"
+ ".arc{padding:0;position:absolute;border:2px solid transparent;border-radius:50%;border-top-color:var(--c_frm)}"
+ ".a0{width:2px;height:3px;top:10px;left:11px}"
+ ".a1{width:6px;height:6px;top:7px;left:9px}"
+ ".a2{width:12px;height:12px;top:4px;left:6px}"
+ ".a3{width:18px;height:18px;top:1px;left:3px}"
+ ".arc.active{border-top-color:var(--c_ttl)}"
+ ""
+
+ def init()
+
+ tasmota.add_driver(self)
+ end
+
+ def unload()
+ tasmota.remove_driver(self)
+ end
+
+ #################################################################################
+ # called when displaying the left status line
+ def web_status_line_left()
+ import webserver
+ # display wifi
+ if tasmota.wifi('up')
+ webserver.content_send(self.HTTP_HEAD_STYLE_WIFI)
+ var rssi = tasmota.wifi('rssi')
+ webserver.content_send(format("",
+ tasmota.wifi('quality'), rssi,
+ rssi >= -55 ? "active" : "",
+ rssi >= -70 ? "active" : "",
+ rssi >= -85 ? "active" : ""))
+ end
+ # display free heap
+ webserver.content_send(f" {tasmota.memory('heap_free')}k")
+ end
+end
+
+return Wifi_Memory_Sticker()
diff --git a/tasmota/berry/leds_panel/autoexec.be b/tasmota/berry/leds_panel/autoexec.be
new file mode 100644
index 000000000..94821fe81
--- /dev/null
+++ b/tasmota/berry/leds_panel/autoexec.be
@@ -0,0 +1,6 @@
+# Led panel web app
+do # embed in `do` so we don't add anything to global namespace
+ import introspect
+ var leds_panel = introspect.module('leds_panel', true) # load module but don't cache
+ tasmota.add_driver(leds_panel, "leds_panel")
+end
diff --git a/tasmota/berry/leds_panel/leds_panel.be b/tasmota/berry/leds_panel/leds_panel.be
index 45e4f29c3..d7fb031c1 100644
--- a/tasmota/berry/leds_panel/leds_panel.be
+++ b/tasmota/berry/leds_panel/leds_panel.be
@@ -705,6 +705,7 @@ class leds_panel
var strip # strip object
var h, w, cell_size, cell_space
+ static var EXT_NAME = "leds_panel"
static var SAMPLING = 100
static var PORT = 8886 # default port 8886
static var HTML_WIDTH = 290
@@ -826,9 +827,25 @@ class leds_panel
self.web.on("/leds_feed", self, self.send_info_feed) # feed with leds values
self.web.on("/leds", self, self.send_info_page) # display leds page
- tasmota.add_driver(self)
+ tasmota.add_driver(self, self.EXT_NAME) # also register as `leds_panel` extension
end
+ #################################################################################
+ # unload
+ #
+ # Uninstall the extension and deallocate all resources
+ #################################################################################
+ def unload()
+ self.close() # stop server
+ tasmota.remove_driver(self) # remove driver, normally already done by tasmota.unload_ext
+ global.undef("webserver_async") # free `webserver_async` if it was loaded as part of this file
+ end
+
+ #################################################################################
+ # stop
+ #
+ # Stop server
+ #################################################################################
def close()
tasmota.remove_driver(self)
self.web.close()
diff --git a/tasmota/berry/modules/Partition_Wizard.tapp b/tasmota/berry/modules/Partition_Wizard.tapp
index 0628cb2c1f7ca39d29f454ca4a4e309d6180e804..43bfb817b2c425d606e6b28c0b88cdade5cb2d4f 100644
GIT binary patch
delta 1037
zcmaJ=T}TvB6h8OP?Ck99&bsDkFU}D<0U%E)XvEl8Qp&!N@?af$rC_q+
zCgX_6XQk6-#u>NGVaEkv-wcE4t*iV>tckGA*40TF9M|#pcD!4mP>UG=lx3jW8V#s9
z%zhnYbwc=(@TodMKpT_Eo*j_XoC2|)JxrualGVy6#sxlzcokzIFnT~yC$s`=7;Wgs
zWB}?6(CAtu7|DTb;AIg!gZn5`I&QHbq-`(bWPG%ID>Iz(t(XQ@GHE6~XT?B48Y_|Z5EJHE$rCi@}v$kpV`?hB`
zXYe!t5JV-YCIoVKO0;eybcTvjRY5&WNw^ifDFhkYH+^RqpHv2E%kv%INx9~zGj4fF
z5n#WIy4m8n4Yt!_u*K@n(ZU8^P%`t!e5rXQ6?40xo?tQpo;{ozu}v?PrM}HpmAXVh
zh5A8wpZG)g|BALfKG;@6_+9#)va7*n&cn|MYYQCXqo?Z?ey^cgW((me_M&Qw6*cYf
zT(Co8@0uq0O!374U#kBRVDUPQ_nrSm_-xH<$`%4EJYHu@EU#CQAbY4cgbe(a2KJ%)&}PTNK;)nJ
bEo1>Kg#9ze>_OtBygRyY6E(_ULL~hQKr9Rx
delta 978
zcmZWoO-vI(6n-c{eHfE=Zn?Gsiuv@Ho-evKV6`N0NgA)
z9s`r?)o`+wmK=&(n(6{mABvCY+XVNp$x`Z7CnR+%Vi`kJH?cJT3}Zov{e&JTc5T&Z
zhn-e7BuqDy;pfVA?8y0TCj%cTer@_<|7g?&d;G{RhyA#`T(sAly9qA)y=<-G%Haw7
zlCMR=d(xVnI3`eRmsR_dyh<=tQH?^stB!(k5+#-DFL&Z7qvi
zN}&pS*fJhGTIkJ#lu_JDK?P5qdKbYW{SUl~zPMdk4-U+{_vU?h@6Gq+`3Cv0LF)N2
z3Sa;L0Vn{_1GKNvHYOxCLu6Y2)q$4Lx}wo~a*xmofV|Go*?u)7_oL;HC(m{zW$aSP
zio7+~DtbO%m%6k3`}m%?)Hy=283=gSaz*2C{tu*OX;6#dsw=aKH>W>{C{t4k{~80E)X$C
zeo%guT^CRFPefcBnP8%LxmV`Zo^Skk=uphEI}(30Tow1sy9%!l
z^P=2)K>33FQgrpXQf~(=AjeB~6kGGrKLHAr;+w`5EsMWs7WK*Ted7inzIeoU26JL(
e@HP=$$~nS6c6RgJ_&$HH<#2!I*5n#$jq5jaC+Fb+
delta 835
zcmZ8f%S%*I82`?>=RRi~ua%BXla|thm_<&B)Mz6VM%lu}fU^*8H|IzfoJV(VDl*`M
z$c>AUvx!y(u7Z#_Ep8!HP>cS6R&DfeDB4AR*GG(P&i91h<9r`i$+K0`Jh`L-^Z-B%
z;64B=0)++u-KGGT@5Q$m!@Qyuh(?=#Vi*nD)MB)Wdm&IQBoy-m4Nag6VAD+i>?v#=
zC~H8%3Qg6(+@1nvG%O{`jR+$|yyYYUgKb02^#d>PsugG6TXg->M&UB;193@Tm1D<#
z(nK8GTFt3@i`*%D6_Fl#Eq{!hBI0`Ipd9VLt%%+Hj;wZmCSqqaDKfcUVu*XWjM%t!~S)ta9{5+y(hc-zMUbo)Q=H?>63i5pG*j
xe4x)|rXxkfr_sfHi-bhW0Zvzaj-E!2mwa!I`*u6b^9N4Uc<5G2v)qrYgTHJA(HZ~%
diff --git a/tasmota/my_user_config.h b/tasmota/my_user_config.h
index f5ab109b2..87cbf296b 100644
--- a/tasmota/my_user_config.h
+++ b/tasmota/my_user_config.h
@@ -1220,7 +1220,8 @@
//#define USE_IBEACON_ESP32 // Add support for Bluetooth LE passive scan of iBeacon devices using the internal ESP32 Bluetooth module
//#define USE_WEBCAM // Add support for webcam
-#define USE_AUTOCONF // Enable Esp32 autoconf feature, requires USE_BERRY and USE_WEBCLIENT_HTTPS (12KB Flash)
+#define USE_AUTOCONF // Enable Esp32(x) autoconf feature, requires USE_BERRY and USE_WEBCLIENT_HTTPS (12KB Flash)
+// #define USE_EXTENSION_MANAGER // Enable Esp32(x) extensions manager, requires USE_BERRY and USE_WEBCLIENT_HTTPS (9KB Flash)
#define USE_BERRY // Enable Berry scripting language
#define USE_BERRY_PYTHON_COMPAT // Enable by default `import python_compat`
#define USE_BERRY_TIMEOUT 4000 // Timeout in ms, will raise an exception if running time exceeds this timeout
diff --git a/tasmota/tasmota_xdrv_driver/xdrv_52_7_berry_embedded.ino b/tasmota/tasmota_xdrv_driver/xdrv_52_7_berry_embedded.ino
index ef5c8cc97..c7f9c38ed 100644
--- a/tasmota/tasmota_xdrv_driver/xdrv_52_7_berry_embedded.ino
+++ b/tasmota/tasmota_xdrv_driver/xdrv_52_7_berry_embedded.ino
@@ -58,6 +58,10 @@ const char be_berry_init_code[] =
"do import autoconf end "
#endif // USE_AUTOCONF
+#ifdef USE_EXTENSION_MANAGER
+ "do import extension_manager end "
+#endif
+
#ifdef USE_LVGL
"import lv "
"import lv_tasmota "