diff --git a/CHANGELOG.md b/CHANGELOG.md index 489896af1..486b5ab7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,7 @@ All notable changes to this project will be documented in this file. ### Fixed - Berry C mapping, raise an error if too many arguments are sent (#20604) +- Matter fixed error when removing device from Google Home ### Removed diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Fabric.be b/lib/libesp32/berry_matter/src/embedded/Matter_Fabric.be index ec25bc7af..a2f3daa00 100644 --- a/lib/libesp32/berry_matter/src/embedded/Matter_Fabric.be +++ b/lib/libesp32/berry_matter/src/embedded/Matter_Fabric.be @@ -97,6 +97,17 @@ class Matter_Fabric : Matter_Expirable def get_ca() return self.root_ca_certificate end def get_fabric_index() return self.fabric_index end + def get_fabric_id_as_int64() + var i64 = int64() + i64.frombytes(self.fabric_id) + return i64 + end + def get_device_id_as_int64() + var i64 = int64() + i64.frombytes(self.device_id) + return i64 + end + def get_admin_vendor_name() var vnd = self.admin_vendor if vnd == nil return "" end diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_IM.be b/lib/libesp32/berry_matter/src/embedded/Matter_IM.be index 9f4c8613d..628ed5a3c 100644 --- a/lib/libesp32/berry_matter/src/embedded/Matter_IM.be +++ b/lib/libesp32/berry_matter/src/embedded/Matter_IM.be @@ -772,9 +772,10 @@ class Matter_IM attr_name = attr_name ? " (" + attr_name + ")" : "" if res != nil - var res_str = res.to_str_val() # get the value with anonymous tag before it is tagged, for logging if tasmota.loglevel(3) + var res_str = res.to_str_val() # get the value with anonymous tag before it is tagged, for logging tasmota.log(f"MTR: >Read_Attr1({msg.session.local_session_id:6i}) {ctx}{attr_name} - {res_str}", 3) + # tasmota.log(f"MTR: {res.tlv2raw().tohex()}", 3) end # if matter.profiler.active && tasmota.loglevel(3) # tasmota.log(f"MTR: {raw=}", 3) # TODO remove before flight diff --git a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_1_Root.be b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_1_Root.be index 5102dd062..19ab8eb22 100644 --- a/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_1_Root.be +++ b/lib/libesp32/berry_matter/src/embedded/Matter_Plugin_1_Root.be @@ -172,8 +172,8 @@ class Matter_Plugin_Root : Matter_Plugin var fab = fabrics.add_struct(nil) # encoding see p.303 fab.add_TLV(1, TLV.B2, root_ca_tlv.findsubval(9)) # RootPublicKey fab.add_TLV(2, TLV.U2, loc_fabric.get_admin_vendor()) # VendorID - fab.add_TLV(3, TLV.U8, loc_fabric.get_fabric_id()) # FabricID - fab.add_TLV(4, TLV.U8, loc_fabric.get_device_id()) # NodeID + fab.add_TLV(3, TLV.U8, loc_fabric.get_fabric_id_as_int64()) # FabricID + fab.add_TLV(4, TLV.U8, loc_fabric.get_device_id_as_int64()) # NodeID fab.add_TLV(5, TLV.UTF1, loc_fabric.get_fabric_label()) # Label fab.add_TLV(0xFE, TLV.U2, loc_fabric.get_fabric_index()) # idx end @@ -561,7 +561,7 @@ class Matter_Plugin_Root : Matter_Plugin # 2=DebugText (opt) var nocr = TLV.Matter_TLV_struct() nocr.add_TLV(0, TLV.U1, matter.SUCCESS) # Status - nocr.add_TLV(1, TLV.U1, 1) # fabric-index + nocr.add_TLV(1, TLV.U1, new_fabric.get_fabric_index()) # fabric-index ctx.command = 0x08 # NOCResponse return nocr @@ -582,7 +582,16 @@ class Matter_Plugin_Root : Matter_Plugin # defer actual removal to send a response fab.mark_for_deletion() # this should not appear anymore in the list tasmota.set_timer(2000, def () self.device.remove_fabric(fab) end) - return true # Ok + + # create NOCResponse + # 0=StatusCode + # 1=FabricIndex (1-254) (opt) + # 2=DebugText (opt) + var nocr = TLV.Matter_TLV_struct() + nocr.add_TLV(0, TLV.U1, matter.SUCCESS) # Status + nocr.add_TLV(1, TLV.U1, index) # fabric-index + ctx.command = 0x08 # NOCResponse + return nocr end end tasmota.log("MTR: RemoveFabric fabric("+str(index)+") not found", 2) diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Fabric.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Fabric.h index 26a0ed4a2..434360b2f 100644 --- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Fabric.h +++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Fabric.h @@ -6,6 +6,39 @@ extern const bclass be_class_Matter_Fabric; +/******************************************************************** +** Solidified function: get_device_id_as_int64 +********************************************************************/ +be_local_closure(Matter_Fabric_get_device_id_as_int64, /* name */ + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_str_weak(int64), + /* K1 */ be_nested_str_weak(frombytes), + /* K2 */ be_nested_str_weak(device_id), + }), + be_str_weak(get_device_id_as_int64), + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x7C040000, // 0001 CALL R1 0 + 0x8C080301, // 0002 GETMET R2 R1 K1 + 0x88100102, // 0003 GETMBR R4 R0 K2 + 0x7C080400, // 0004 CALL R2 2 + 0x80040200, // 0005 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: fabric_candidate ********************************************************************/ @@ -44,355 +77,6 @@ be_local_closure(Matter_Fabric_fabric_candidate, /* name */ /*******************************************************************/ -/******************************************************************** -** Solidified function: get_ca -********************************************************************/ -be_local_closure(Matter_Fabric_get_ca, /* name */ - be_nested_proto( - 2, /* nstack */ - 1, /* argc */ - 2, /* 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_weak(root_ca_certificate), - }), - be_str_weak(get_ca), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x80040200, // 0001 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_ipk_epoch_key -********************************************************************/ -be_local_closure(Matter_Fabric_get_ipk_epoch_key, /* name */ - be_nested_proto( - 2, /* nstack */ - 1, /* argc */ - 2, /* 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_weak(ipk_epoch_key), - }), - be_str_weak(get_ipk_epoch_key), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x80040200, // 0001 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_ca_pub -********************************************************************/ -be_local_closure(Matter_Fabric_get_ca_pub, /* name */ - be_nested_proto( - 6, /* nstack */ - 1, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 5]) { /* constants */ - /* K0 */ be_nested_str_weak(root_ca_certificate), - /* K1 */ be_nested_str_weak(matter), - /* K2 */ be_nested_str_weak(TLV), - /* K3 */ be_nested_str_weak(parse), - /* K4 */ be_nested_str_weak(findsubval), - }), - be_str_weak(get_ca_pub), - &be_const_str_solidified, - ( &(const binstruction[12]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x78060008, // 0001 JMPF R1 #000B - 0xB80A0200, // 0002 GETNGBL R2 K1 - 0x88080502, // 0003 GETMBR R2 R2 K2 - 0x8C080503, // 0004 GETMET R2 R2 K3 - 0x5C100200, // 0005 MOVE R4 R1 - 0x7C080400, // 0006 CALL R2 2 - 0x8C0C0504, // 0007 GETMET R3 R2 K4 - 0x54160008, // 0008 LDINT R5 9 - 0x7C0C0400, // 0009 CALL R3 2 - 0x80040600, // 000A RET 1 R3 - 0x80000000, // 000B RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_ipk_group_key -********************************************************************/ -be_local_closure(Matter_Fabric_get_ipk_group_key, /* name */ - be_nested_proto( - 10, /* nstack */ - 1, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 7]) { /* constants */ - /* K0 */ be_nested_str_weak(ipk_epoch_key), - /* K1 */ be_nested_str_weak(fabric_compressed), - /* K2 */ be_nested_str_weak(crypto), - /* K3 */ be_nested_str_weak(HKDF_SHA256), - /* K4 */ be_nested_str_weak(fromstring), - /* K5 */ be_nested_str_weak(_GROUP_KEY), - /* K6 */ be_nested_str_weak(derive), - }), - be_str_weak(get_ipk_group_key), - &be_const_str_solidified, - ( &(const binstruction[25]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x4C080000, // 0001 LDNIL R2 - 0x1C040202, // 0002 EQ R1 R1 R2 - 0x74060003, // 0003 JMPT R1 #0008 - 0x88040101, // 0004 GETMBR R1 R0 K1 - 0x4C080000, // 0005 LDNIL R2 - 0x1C040202, // 0006 EQ R1 R1 R2 - 0x78060001, // 0007 JMPF R1 #000A - 0x4C040000, // 0008 LDNIL R1 - 0x80040200, // 0009 RET 1 R1 - 0xA4060400, // 000A IMPORT R1 K2 - 0x8C080303, // 000B GETMET R2 R1 K3 - 0x7C080200, // 000C CALL R2 1 - 0x600C0015, // 000D GETGBL R3 G21 - 0x7C0C0000, // 000E CALL R3 0 - 0x8C0C0704, // 000F GETMET R3 R3 K4 - 0x88140105, // 0010 GETMBR R5 R0 K5 - 0x7C0C0400, // 0011 CALL R3 2 - 0x8C100506, // 0012 GETMET R4 R2 K6 - 0x88180100, // 0013 GETMBR R6 R0 K0 - 0x881C0101, // 0014 GETMBR R7 R0 K1 - 0x5C200600, // 0015 MOVE R8 R3 - 0x5426000F, // 0016 LDINT R9 16 - 0x7C100A00, // 0017 CALL R4 5 - 0x80040800, // 0018 RET 1 R4 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: set_ca -********************************************************************/ -be_local_closure(Matter_Fabric_set_ca, /* name */ - be_nested_proto( - 2, /* nstack */ - 2, /* argc */ - 2, /* 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_weak(root_ca_certificate), - }), - be_str_weak(set_ca), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x90020001, // 0000 SETMBR R0 K0 R1 - 0x80000000, // 0001 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_fabric_compressed -********************************************************************/ -be_local_closure(Matter_Fabric_get_fabric_compressed, /* name */ - be_nested_proto( - 2, /* nstack */ - 1, /* argc */ - 2, /* 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_weak(fabric_compressed), - }), - be_str_weak(get_fabric_compressed), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x80040200, // 0001 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_fabric_label -********************************************************************/ -be_local_closure(Matter_Fabric_get_fabric_label, /* name */ - be_nested_proto( - 2, /* nstack */ - 1, /* argc */ - 2, /* 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_weak(fabric_label), - }), - be_str_weak(get_fabric_label), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x80040200, // 0001 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: assign_fabric_index -********************************************************************/ -be_local_closure(Matter_Fabric_assign_fabric_index, /* name */ - be_nested_proto( - 5, /* nstack */ - 1, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 4]) { /* constants */ - /* K0 */ be_nested_str_weak(get_fabric_index), - /* K1 */ be_nested_str_weak(set_fabric_index), - /* K2 */ be_nested_str_weak(_store), - /* K3 */ be_nested_str_weak(next_fabric_idx), - }), - be_str_weak(assign_fabric_index), - &be_const_str_solidified, - ( &(const binstruction[11]) { /* code */ - 0x8C040100, // 0000 GETMET R1 R0 K0 - 0x7C040200, // 0001 CALL R1 1 - 0x4C080000, // 0002 LDNIL R2 - 0x1C040202, // 0003 EQ R1 R1 R2 - 0x78060004, // 0004 JMPF R1 #000A - 0x8C040101, // 0005 GETMET R1 R0 K1 - 0x880C0102, // 0006 GETMBR R3 R0 K2 - 0x8C0C0703, // 0007 GETMET R3 R3 K3 - 0x7C0C0200, // 0008 CALL R3 1 - 0x7C040400, // 0009 CALL R1 2 - 0x80000000, // 000A RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_noc -********************************************************************/ -be_local_closure(Matter_Fabric_get_noc, /* name */ - be_nested_proto( - 2, /* nstack */ - 1, /* argc */ - 2, /* 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_weak(noc), - }), - be_str_weak(get_noc), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x80040200, // 0001 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: log_new_fabric -********************************************************************/ -be_local_closure(Matter_Fabric_log_new_fabric, /* name */ - be_nested_proto( - 8, /* nstack */ - 1, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 9]) { /* constants */ - /* K0 */ be_nested_str_weak(tasmota), - /* K1 */ be_nested_str_weak(log), - /* K2 */ be_nested_str_weak(MTR_X3A_X20_X2BFabric_X20_X20_X20_X20fab_X3D_X27_X25s_X27_X20vendorid_X3D_X25s), - /* K3 */ be_nested_str_weak(get_fabric_id), - /* K4 */ be_nested_str_weak(copy), - /* K5 */ be_nested_str_weak(reverse), - /* K6 */ be_nested_str_weak(tohex), - /* K7 */ be_nested_str_weak(get_admin_vendor_name), - /* K8 */ be_const_int(3), - }), - be_str_weak(log_new_fabric), - &be_const_str_solidified, - ( &(const binstruction[18]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x600C0018, // 0002 GETGBL R3 G24 - 0x58100002, // 0003 LDCONST R4 K2 - 0x8C140103, // 0004 GETMET R5 R0 K3 - 0x7C140200, // 0005 CALL R5 1 - 0x8C140B04, // 0006 GETMET R5 R5 K4 - 0x7C140200, // 0007 CALL R5 1 - 0x8C140B05, // 0008 GETMET R5 R5 K5 - 0x7C140200, // 0009 CALL R5 1 - 0x8C140B06, // 000A GETMET R5 R5 K6 - 0x7C140200, // 000B CALL R5 1 - 0x8C180107, // 000C GETMET R6 R0 K7 - 0x7C180200, // 000D CALL R6 1 - 0x7C0C0600, // 000E CALL R3 3 - 0x58100008, // 000F LDCONST R4 K8 - 0x7C040600, // 0010 CALL R1 3 - 0x80000000, // 0011 RET 0 - }) - ) -); -/*******************************************************************/ - - /******************************************************************** ** Solidified function: set_pk ********************************************************************/ @@ -420,517 +104,6 @@ be_local_closure(Matter_Fabric_set_pk, /* name */ /*******************************************************************/ -/******************************************************************** -** Solidified function: mark_for_deletion -********************************************************************/ -be_local_closure(Matter_Fabric_mark_for_deletion, /* name */ - be_nested_proto( - 3, /* nstack */ - 1, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 3]) { /* constants */ - /* K0 */ be_nested_str_weak(deleted), - /* K1 */ be_nested_str_weak(tasmota), - /* K2 */ be_nested_str_weak(rtc_utc), - }), - be_str_weak(mark_for_deletion), - &be_const_str_solidified, - ( &(const binstruction[ 5]) { /* code */ - 0xB8060200, // 0000 GETNGBL R1 K1 - 0x8C040302, // 0001 GETMET R1 R1 K2 - 0x7C040200, // 0002 CALL R1 1 - 0x90020001, // 0003 SETMBR R0 K0 R1 - 0x80000000, // 0004 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: is_marked_for_deletion -********************************************************************/ -be_local_closure(Matter_Fabric_is_marked_for_deletion, /* name */ - be_nested_proto( - 3, /* nstack */ - 1, /* argc */ - 2, /* 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_weak(deleted), - }), - be_str_weak(is_marked_for_deletion), - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x4C080000, // 0001 LDNIL R2 - 0x20040202, // 0002 NE R1 R1 R2 - 0x80040200, // 0003 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: fabric_completed -********************************************************************/ -be_local_closure(Matter_Fabric_fabric_completed, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 5]) { /* constants */ - /* K0 */ be_nested_str_weak(set_no_expiration), - /* K1 */ be_nested_str_weak(set_persist), - /* K2 */ be_nested_str_weak(assign_fabric_index), - /* K3 */ be_nested_str_weak(_store), - /* K4 */ be_nested_str_weak(add_fabric), - }), - be_str_weak(fabric_completed), - &be_const_str_solidified, - ( &(const binstruction[12]) { /* code */ - 0x8C040100, // 0000 GETMET R1 R0 K0 - 0x7C040200, // 0001 CALL R1 1 - 0x8C040101, // 0002 GETMET R1 R0 K1 - 0x500C0200, // 0003 LDBOOL R3 1 0 - 0x7C040400, // 0004 CALL R1 2 - 0x8C040102, // 0005 GETMET R1 R0 K2 - 0x7C040200, // 0006 CALL R1 1 - 0x88040103, // 0007 GETMBR R1 R0 K3 - 0x8C040304, // 0008 GETMET R1 R1 K4 - 0x5C0C0000, // 0009 MOVE R3 R0 - 0x7C040400, // 000A CALL R1 2 - 0x80000000, // 000B RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: before_remove -********************************************************************/ -be_local_closure(Matter_Fabric_before_remove, /* name */ - be_nested_proto( - 7, /* nstack */ - 1, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 8]) { /* constants */ - /* K0 */ be_nested_str_weak(tasmota), - /* K1 */ be_nested_str_weak(log), - /* K2 */ be_nested_str_weak(MTR_X3A_X20_X2DFabric_X20_X20_X20_X20fab_X3D_X27_X25s_X27_X20_X28removed_X29), - /* K3 */ be_nested_str_weak(get_fabric_id), - /* K4 */ be_nested_str_weak(copy), - /* K5 */ be_nested_str_weak(reverse), - /* K6 */ be_nested_str_weak(tohex), - /* K7 */ be_const_int(3), - }), - be_str_weak(before_remove), - &be_const_str_solidified, - ( &(const binstruction[16]) { /* code */ - 0xB8060000, // 0000 GETNGBL R1 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x600C0018, // 0002 GETGBL R3 G24 - 0x58100002, // 0003 LDCONST R4 K2 - 0x8C140103, // 0004 GETMET R5 R0 K3 - 0x7C140200, // 0005 CALL R5 1 - 0x8C140B04, // 0006 GETMET R5 R5 K4 - 0x7C140200, // 0007 CALL R5 1 - 0x8C140B05, // 0008 GETMET R5 R5 K5 - 0x7C140200, // 0009 CALL R5 1 - 0x8C140B06, // 000A GETMET R5 R5 K6 - 0x7C140200, // 000B CALL R5 1 - 0x7C0C0400, // 000C CALL R3 2 - 0x58100007, // 000D LDCONST R4 K7 - 0x7C040600, // 000E CALL R1 3 - 0x80000000, // 000F RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_admin_vendor -********************************************************************/ -be_local_closure(Matter_Fabric_get_admin_vendor, /* name */ - be_nested_proto( - 2, /* nstack */ - 1, /* argc */ - 2, /* 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_weak(admin_vendor), - }), - be_str_weak(get_admin_vendor), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x80040200, // 0001 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_icac -********************************************************************/ -be_local_closure(Matter_Fabric_get_icac, /* name */ - be_nested_proto( - 2, /* nstack */ - 1, /* argc */ - 2, /* 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_weak(icac), - }), - be_str_weak(get_icac), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x80040200, // 0001 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: set_fabric_index -********************************************************************/ -be_local_closure(Matter_Fabric_set_fabric_index, /* name */ - be_nested_proto( - 2, /* nstack */ - 2, /* argc */ - 2, /* 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_weak(fabric_index), - }), - be_str_weak(set_fabric_index), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x90020001, // 0000 SETMBR R0 K0 R1 - 0x80000000, // 0001 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: init -********************************************************************/ -be_local_closure(Matter_Fabric_init, /* name */ - be_nested_proto( - 5, /* nstack */ - 2, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[17]) { /* constants */ - /* K0 */ be_nested_str_weak(crypto), - /* K1 */ be_nested_str_weak(_store), - /* K2 */ be_nested_str_weak(_sessions), - /* K3 */ be_nested_str_weak(matter), - /* K4 */ be_nested_str_weak(Expirable_list), - /* K5 */ be_nested_str_weak(fabric_label), - /* K6 */ be_nested_str_weak(), - /* K7 */ be_nested_str_weak(created), - /* K8 */ be_nested_str_weak(tasmota), - /* K9 */ be_nested_str_weak(rtc_utc), - /* K10 */ be_nested_str_weak(_counter_group_data_snd_impl), - /* K11 */ be_nested_str_weak(Counter), - /* K12 */ be_nested_str_weak(_counter_group_ctrl_snd_impl), - /* K13 */ be_nested_str_weak(counter_group_data_snd), - /* K14 */ be_nested_str_weak(next), - /* K15 */ be_nested_str_weak(_GROUP_SND_INCR), - /* K16 */ be_nested_str_weak(counter_group_ctrl_snd), - }), - be_str_weak(init), - &be_const_str_solidified, - ( &(const binstruction[32]) { /* code */ - 0xA40A0000, // 0000 IMPORT R2 K0 - 0x90020201, // 0001 SETMBR R0 K1 R1 - 0xB80E0600, // 0002 GETNGBL R3 K3 - 0x8C0C0704, // 0003 GETMET R3 R3 K4 - 0x7C0C0200, // 0004 CALL R3 1 - 0x90020403, // 0005 SETMBR R0 K2 R3 - 0x90020B06, // 0006 SETMBR R0 K5 K6 - 0xB80E1000, // 0007 GETNGBL R3 K8 - 0x8C0C0709, // 0008 GETMET R3 R3 K9 - 0x7C0C0200, // 0009 CALL R3 1 - 0x90020E03, // 000A SETMBR R0 K7 R3 - 0xB80E0600, // 000B GETNGBL R3 K3 - 0x8C0C070B, // 000C GETMET R3 R3 K11 - 0x7C0C0200, // 000D CALL R3 1 - 0x90021403, // 000E SETMBR R0 K10 R3 - 0xB80E0600, // 000F GETNGBL R3 K3 - 0x8C0C070B, // 0010 GETMET R3 R3 K11 - 0x7C0C0200, // 0011 CALL R3 1 - 0x90021803, // 0012 SETMBR R0 K12 R3 - 0x880C010A, // 0013 GETMBR R3 R0 K10 - 0x8C0C070E, // 0014 GETMET R3 R3 K14 - 0x7C0C0200, // 0015 CALL R3 1 - 0x8810010F, // 0016 GETMBR R4 R0 K15 - 0x000C0604, // 0017 ADD R3 R3 R4 - 0x90021A03, // 0018 SETMBR R0 K13 R3 - 0x880C010A, // 0019 GETMBR R3 R0 K10 - 0x8C0C070E, // 001A GETMET R3 R3 K14 - 0x7C0C0200, // 001B CALL R3 1 - 0x8810010F, // 001C GETMBR R4 R0 K15 - 0x000C0604, // 001D ADD R3 R3 R4 - 0x90022003, // 001E SETMBR R0 K16 R3 - 0x80000000, // 001F RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_old_recent_session -********************************************************************/ -be_local_closure(Matter_Fabric_get_old_recent_session, /* name */ - be_nested_proto( - 7, /* nstack */ - 2, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 4]) { /* constants */ - /* K0 */ be_nested_str_weak(_sessions), - /* K1 */ be_const_int(0), - /* K2 */ be_nested_str_weak(last_used), - /* K3 */ be_const_int(1), - }), - be_str_weak(get_old_recent_session), - &be_const_str_solidified, - ( &(const binstruction[30]) { /* code */ - 0x6008000C, // 0000 GETGBL R2 G12 - 0x880C0100, // 0001 GETMBR R3 R0 K0 - 0x7C080200, // 0002 CALL R2 1 - 0x1C080501, // 0003 EQ R2 R2 K1 - 0x780A0001, // 0004 JMPF R2 #0007 - 0x4C080000, // 0005 LDNIL R2 - 0x80040400, // 0006 RET 1 R2 - 0x88080100, // 0007 GETMBR R2 R0 K0 - 0x94080501, // 0008 GETIDX R2 R2 K1 - 0x880C0502, // 0009 GETMBR R3 R2 K2 - 0x58100003, // 000A LDCONST R4 K3 - 0x6014000C, // 000B GETGBL R5 G12 - 0x88180100, // 000C GETMBR R6 R0 K0 - 0x7C140200, // 000D CALL R5 1 - 0x14140805, // 000E LT R5 R4 R5 - 0x7816000C, // 000F JMPF R5 #001D - 0x88140100, // 0010 GETMBR R5 R0 K0 - 0x94140A04, // 0011 GETIDX R5 R5 R4 - 0x88140B02, // 0012 GETMBR R5 R5 K2 - 0x78060001, // 0013 JMPF R1 #0016 - 0x14180A03, // 0014 LT R6 R5 R3 - 0x70020000, // 0015 JMP #0017 - 0x24180A03, // 0016 GT R6 R5 R3 - 0x781A0002, // 0017 JMPF R6 #001B - 0x88180100, // 0018 GETMBR R6 R0 K0 - 0x94080C04, // 0019 GETIDX R2 R6 R4 - 0x5C0C0A00, // 001A MOVE R3 R5 - 0x00100903, // 001B ADD R4 R4 K3 - 0x7001FFED, // 001C JMP #000B - 0x80040400, // 001D RET 1 R2 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_newest_session -********************************************************************/ -be_local_closure(Matter_Fabric_get_newest_session, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 2, /* 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_weak(get_old_recent_session), - }), - be_str_weak(get_newest_session), - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x8C040100, // 0000 GETMET R1 R0 K0 - 0x500C0000, // 0001 LDBOOL R3 0 0 - 0x7C040400, // 0002 CALL R1 2 - 0x80040200, // 0003 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_pk -********************************************************************/ -be_local_closure(Matter_Fabric_get_pk, /* name */ - be_nested_proto( - 2, /* nstack */ - 1, /* argc */ - 2, /* 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_weak(no_private_key), - }), - be_str_weak(get_pk), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x80040200, // 0001 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: counter_group_ctrl_snd_next -********************************************************************/ -be_local_closure(Matter_Fabric_counter_group_ctrl_snd_next, /* name */ - be_nested_proto( - 7, /* nstack */ - 1, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[13]) { /* constants */ - /* K0 */ be_nested_str_weak(_counter_group_ctrl_snd_impl), - /* K1 */ be_nested_str_weak(next), - /* K2 */ be_nested_str_weak(tasmota), - /* K3 */ be_nested_str_weak(log), - /* K4 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Counter_group_ctrl_snd_X3D_X25i), - /* K5 */ be_const_int(3), - /* K6 */ be_nested_str_weak(matter), - /* K7 */ be_nested_str_weak(Counter), - /* K8 */ be_nested_str_weak(is_greater), - /* K9 */ be_nested_str_weak(counter_group_ctrl_snd), - /* K10 */ be_nested_str_weak(_GROUP_SND_INCR), - /* K11 */ be_nested_str_weak(does_persist), - /* K12 */ be_nested_str_weak(save), - }), - be_str_weak(counter_group_ctrl_snd_next), - &be_const_str_solidified, - ( &(const binstruction[27]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x7C040200, // 0002 CALL R1 1 - 0xB80A0400, // 0003 GETNGBL R2 K2 - 0x8C080503, // 0004 GETMET R2 R2 K3 - 0x60100018, // 0005 GETGBL R4 G24 - 0x58140004, // 0006 LDCONST R5 K4 - 0x5C180200, // 0007 MOVE R6 R1 - 0x7C100400, // 0008 CALL R4 2 - 0x58140005, // 0009 LDCONST R5 K5 - 0x7C080600, // 000A CALL R2 3 - 0xB80A0C00, // 000B GETNGBL R2 K6 - 0x88080507, // 000C GETMBR R2 R2 K7 - 0x8C080508, // 000D GETMET R2 R2 K8 - 0x5C100200, // 000E MOVE R4 R1 - 0x88140109, // 000F GETMBR R5 R0 K9 - 0x7C080600, // 0010 CALL R2 3 - 0x780A0007, // 0011 JMPF R2 #001A - 0x8808010A, // 0012 GETMBR R2 R0 K10 - 0x00080202, // 0013 ADD R2 R1 R2 - 0x90021202, // 0014 SETMBR R0 K9 R2 - 0x8C08010B, // 0015 GETMET R2 R0 K11 - 0x7C080200, // 0016 CALL R2 1 - 0x780A0001, // 0017 JMPF R2 #001A - 0x8C08010C, // 0018 GETMET R2 R0 K12 - 0x7C080200, // 0019 CALL R2 1 - 0x80040200, // 001A RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: set_noc_icac -********************************************************************/ -be_local_closure(Matter_Fabric_set_noc_icac, /* name */ - be_nested_proto( - 3, /* nstack */ - 3, /* argc */ - 2, /* varg */ - 0, /* has upvals */ - NULL, /* no upvals */ - 0, /* has sup protos */ - NULL, /* no sub protos */ - 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str_weak(noc), - /* K1 */ be_nested_str_weak(icac), - }), - be_str_weak(set_noc_icac), - &be_const_str_solidified, - ( &(const binstruction[ 3]) { /* code */ - 0x90020001, // 0000 SETMBR R0 K0 R1 - 0x90020202, // 0001 SETMBR R0 K1 R2 - 0x80000000, // 0002 RET 0 - }) - ) -); -/*******************************************************************/ - - /******************************************************************** ** Solidified function: add_session ********************************************************************/ @@ -996,9 +169,38 @@ be_local_closure(Matter_Fabric_add_session, /* name */ /******************************************************************** -** Solidified function: get_admin_subject +** Solidified function: get_oldest_session ********************************************************************/ -be_local_closure(Matter_Fabric_get_admin_subject, /* name */ +be_local_closure(Matter_Fabric_get_oldest_session, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 2, /* 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_weak(get_old_recent_session), + }), + be_str_weak(get_oldest_session), + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x500C0200, // 0001 LDBOOL R3 1 0 + 0x7C040400, // 0002 CALL R1 2 + 0x80040200, // 0003 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_ipk_epoch_key +********************************************************************/ +be_local_closure(Matter_Fabric_get_ipk_epoch_key, /* name */ be_nested_proto( 2, /* nstack */ 1, /* argc */ @@ -1009,9 +211,9 @@ be_local_closure(Matter_Fabric_get_admin_subject, /* name */ NULL, /* no sub protos */ 1, /* has constants */ ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str_weak(admin_subject), + /* K0 */ be_nested_str_weak(ipk_epoch_key), }), - be_str_weak(get_admin_subject), + be_str_weak(get_ipk_epoch_key), &be_const_str_solidified, ( &(const binstruction[ 2]) { /* code */ 0x88040100, // 0000 GETMBR R1 R0 K0 @@ -1023,11 +225,11 @@ be_local_closure(Matter_Fabric_get_admin_subject, /* name */ /******************************************************************** -** Solidified function: counter_group_data_snd_next +** Solidified function: get_noc ********************************************************************/ -be_local_closure(Matter_Fabric_counter_group_data_snd_next, /* name */ +be_local_closure(Matter_Fabric_get_noc, /* name */ be_nested_proto( - 7, /* nstack */ + 2, /* nstack */ 1, /* argc */ 2, /* varg */ 0, /* has upvals */ @@ -1035,51 +237,14 @@ be_local_closure(Matter_Fabric_counter_group_data_snd_next, /* name */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[13]) { /* constants */ - /* K0 */ be_nested_str_weak(_counter_group_data_snd_impl), - /* K1 */ be_nested_str_weak(next), - /* K2 */ be_nested_str_weak(tasmota), - /* K3 */ be_nested_str_weak(log), - /* K4 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Counter_group_data_snd_X3D_X25i), - /* K5 */ be_const_int(3), - /* K6 */ be_nested_str_weak(matter), - /* K7 */ be_nested_str_weak(Counter), - /* K8 */ be_nested_str_weak(is_greater), - /* K9 */ be_nested_str_weak(counter_group_data_snd), - /* K10 */ be_nested_str_weak(_GROUP_SND_INCR), - /* K11 */ be_nested_str_weak(does_persist), - /* K12 */ be_nested_str_weak(save), + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str_weak(noc), }), - be_str_weak(counter_group_data_snd_next), + be_str_weak(get_noc), &be_const_str_solidified, - ( &(const binstruction[27]) { /* code */ + ( &(const binstruction[ 2]) { /* code */ 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x7C040200, // 0002 CALL R1 1 - 0xB80A0400, // 0003 GETNGBL R2 K2 - 0x8C080503, // 0004 GETMET R2 R2 K3 - 0x60100018, // 0005 GETGBL R4 G24 - 0x58140004, // 0006 LDCONST R5 K4 - 0x5C180200, // 0007 MOVE R6 R1 - 0x7C100400, // 0008 CALL R4 2 - 0x58140005, // 0009 LDCONST R5 K5 - 0x7C080600, // 000A CALL R2 3 - 0xB80A0C00, // 000B GETNGBL R2 K6 - 0x88080507, // 000C GETMBR R2 R2 K7 - 0x8C080508, // 000D GETMET R2 R2 K8 - 0x5C100200, // 000E MOVE R4 R1 - 0x88140109, // 000F GETMBR R5 R0 K9 - 0x7C080600, // 0010 CALL R2 3 - 0x780A0007, // 0011 JMPF R2 #001A - 0x8808010A, // 0012 GETMBR R2 R0 K10 - 0x00080202, // 0013 ADD R2 R1 R2 - 0x90021202, // 0014 SETMBR R0 K9 R2 - 0x8C08010B, // 0015 GETMET R2 R0 K11 - 0x7C080200, // 0016 CALL R2 1 - 0x780A0001, // 0017 JMPF R2 #001A - 0x8C08010C, // 0018 GETMET R2 R0 K12 - 0x7C080200, // 0019 CALL R2 1 - 0x80040200, // 001A RET 1 R1 + 0x80040200, // 0001 RET 1 R1 }) ) ); @@ -1087,12 +252,93 @@ be_local_closure(Matter_Fabric_counter_group_data_snd_next, /* name */ /******************************************************************** -** Solidified function: set_fabric_device +** Solidified function: get_device_id ********************************************************************/ -be_local_closure(Matter_Fabric_set_fabric_device, /* name */ +be_local_closure(Matter_Fabric_get_device_id, /* name */ be_nested_proto( - 7, /* nstack */ - 5, /* argc */ + 2, /* nstack */ + 1, /* argc */ + 2, /* 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_weak(device_id), + }), + be_str_weak(get_device_id), + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_icac +********************************************************************/ +be_local_closure(Matter_Fabric_get_icac, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 2, /* 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_weak(icac), + }), + be_str_weak(get_icac), + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: set_fabric_index +********************************************************************/ +be_local_closure(Matter_Fabric_set_fabric_index, /* name */ + be_nested_proto( + 2, /* nstack */ + 2, /* argc */ + 2, /* 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_weak(fabric_index), + }), + be_str_weak(set_fabric_index), + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x90020001, // 0000 SETMBR R0 K0 R1 + 0x80000000, // 0001 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: fabric_completed +********************************************************************/ +be_local_closure(Matter_Fabric_fabric_completed, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ @@ -1100,26 +346,26 @@ be_local_closure(Matter_Fabric_set_fabric_device, /* name */ NULL, /* no sub protos */ 1, /* has constants */ ( &(const bvalue[ 5]) { /* constants */ - /* K0 */ be_nested_str_weak(fabric_id), - /* K1 */ be_nested_str_weak(device_id), - /* K2 */ be_nested_str_weak(fabric_compressed), - /* K3 */ be_nested_str_weak(fabric_parent), - /* K4 */ be_nested_str_weak(get_fabric_index), + /* K0 */ be_nested_str_weak(set_no_expiration), + /* K1 */ be_nested_str_weak(set_persist), + /* K2 */ be_nested_str_weak(assign_fabric_index), + /* K3 */ be_nested_str_weak(_store), + /* K4 */ be_nested_str_weak(add_fabric), }), - be_str_weak(set_fabric_device), + be_str_weak(fabric_completed), &be_const_str_solidified, ( &(const binstruction[12]) { /* code */ - 0x90020001, // 0000 SETMBR R0 K0 R1 - 0x90020202, // 0001 SETMBR R0 K1 R2 - 0x90020403, // 0002 SETMBR R0 K2 R3 - 0x4C140000, // 0003 LDNIL R5 - 0x20140805, // 0004 NE R5 R4 R5 - 0x78160002, // 0005 JMPF R5 #0009 - 0x8C140904, // 0006 GETMET R5 R4 K4 - 0x7C140200, // 0007 CALL R5 1 - 0x70020000, // 0008 JMP #000A - 0x4C140000, // 0009 LDNIL R5 - 0x90020605, // 000A SETMBR R0 K3 R5 + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x7C040200, // 0001 CALL R1 1 + 0x8C040101, // 0002 GETMET R1 R0 K1 + 0x500C0200, // 0003 LDBOOL R3 1 0 + 0x7C040400, // 0004 CALL R1 2 + 0x8C040102, // 0005 GETMET R1 R0 K2 + 0x7C040200, // 0006 CALL R1 1 + 0x88040103, // 0007 GETMBR R1 R0 K3 + 0x8C040304, // 0008 GETMET R1 R1 K4 + 0x5C0C0000, // 0009 MOVE R3 R0 + 0x7C040400, // 000A CALL R1 2 0x80000000, // 000B RET 0 }) ) @@ -1128,28 +374,106 @@ be_local_closure(Matter_Fabric_set_fabric_device, /* name */ /******************************************************************** -** Solidified function: set_admin_subject_vendor +** Solidified function: get_pk ********************************************************************/ -be_local_closure(Matter_Fabric_set_admin_subject_vendor, /* name */ +be_local_closure(Matter_Fabric_get_pk, /* name */ be_nested_proto( - 3, /* nstack */ - 3, /* argc */ + 2, /* nstack */ + 1, /* argc */ 2, /* varg */ 0, /* has upvals */ NULL, /* no upvals */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 2]) { /* constants */ - /* K0 */ be_nested_str_weak(admin_subject), - /* K1 */ be_nested_str_weak(admin_vendor), + ( &(const bvalue[ 1]) { /* constants */ + /* K0 */ be_nested_str_weak(no_private_key), }), - be_str_weak(set_admin_subject_vendor), + be_str_weak(get_pk), &be_const_str_solidified, - ( &(const binstruction[ 3]) { /* code */ - 0x90020001, // 0000 SETMBR R0 K0 R1 - 0x90020202, // 0001 SETMBR R0 K1 R2 - 0x80000000, // 0002 RET 0 + ( &(const binstruction[ 2]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: log_new_fabric +********************************************************************/ +be_local_closure(Matter_Fabric_log_new_fabric, /* name */ + be_nested_proto( + 8, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 9]) { /* constants */ + /* K0 */ be_nested_str_weak(tasmota), + /* K1 */ be_nested_str_weak(log), + /* K2 */ be_nested_str_weak(MTR_X3A_X20_X2BFabric_X20_X20_X20_X20fab_X3D_X27_X25s_X27_X20vendorid_X3D_X25s), + /* K3 */ be_nested_str_weak(get_fabric_id), + /* K4 */ be_nested_str_weak(copy), + /* K5 */ be_nested_str_weak(reverse), + /* K6 */ be_nested_str_weak(tohex), + /* K7 */ be_nested_str_weak(get_admin_vendor_name), + /* K8 */ be_const_int(3), + }), + be_str_weak(log_new_fabric), + &be_const_str_solidified, + ( &(const binstruction[18]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x600C0018, // 0002 GETGBL R3 G24 + 0x58100002, // 0003 LDCONST R4 K2 + 0x8C140103, // 0004 GETMET R5 R0 K3 + 0x7C140200, // 0005 CALL R5 1 + 0x8C140B04, // 0006 GETMET R5 R5 K4 + 0x7C140200, // 0007 CALL R5 1 + 0x8C140B05, // 0008 GETMET R5 R5 K5 + 0x7C140200, // 0009 CALL R5 1 + 0x8C140B06, // 000A GETMET R5 R5 K6 + 0x7C140200, // 000B CALL R5 1 + 0x8C180107, // 000C GETMET R6 R0 K7 + 0x7C180200, // 000D CALL R6 1 + 0x7C0C0600, // 000E CALL R3 3 + 0x58100008, // 000F LDCONST R4 K8 + 0x7C040600, // 0010 CALL R1 3 + 0x80000000, // 0011 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_newest_session +********************************************************************/ +be_local_closure(Matter_Fabric_get_newest_session, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 2, /* 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_weak(get_old_recent_session), + }), + be_str_weak(get_newest_session), + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x500C0000, // 0001 LDBOOL R3 0 0 + 0x7C040400, // 0002 CALL R1 2 + 0x80040200, // 0003 RET 1 R1 }) ) ); @@ -1327,11 +651,11 @@ be_local_closure(Matter_Fabric_tojson, /* name */ /******************************************************************** -** Solidified function: hydrate_post +** Solidified function: before_remove ********************************************************************/ -be_local_closure(Matter_Fabric_hydrate_post, /* name */ +be_local_closure(Matter_Fabric_before_remove, /* name */ be_nested_proto( - 4, /* nstack */ + 7, /* nstack */ 1, /* argc */ 2, /* varg */ 0, /* has upvals */ @@ -1339,117 +663,35 @@ be_local_closure(Matter_Fabric_hydrate_post, /* name */ 0, /* has sup protos */ NULL, /* no sub protos */ 1, /* has constants */ - ( &(const bvalue[ 6]) { /* constants */ - /* K0 */ be_nested_str_weak(_counter_group_data_snd_impl), - /* K1 */ be_nested_str_weak(reset), - /* K2 */ be_nested_str_weak(counter_group_data_snd), - /* K3 */ be_nested_str_weak(_counter_group_ctrl_snd_impl), - /* K4 */ be_nested_str_weak(counter_group_ctrl_snd), - /* K5 */ be_nested_str_weak(val), + ( &(const bvalue[ 8]) { /* constants */ + /* K0 */ be_nested_str_weak(tasmota), + /* K1 */ be_nested_str_weak(log), + /* K2 */ be_nested_str_weak(MTR_X3A_X20_X2DFabric_X20_X20_X20_X20fab_X3D_X27_X25s_X27_X20_X28removed_X29), + /* K3 */ be_nested_str_weak(get_fabric_id), + /* K4 */ be_nested_str_weak(copy), + /* K5 */ be_nested_str_weak(reverse), + /* K6 */ be_nested_str_weak(tohex), + /* K7 */ be_const_int(3), }), - be_str_weak(hydrate_post), + be_str_weak(before_remove), &be_const_str_solidified, - ( &(const binstruction[17]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 + ( &(const binstruction[16]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 0x8C040301, // 0001 GETMET R1 R1 K1 - 0x880C0102, // 0002 GETMBR R3 R0 K2 - 0x7C040400, // 0003 CALL R1 2 - 0x88040103, // 0004 GETMBR R1 R0 K3 - 0x8C040301, // 0005 GETMET R1 R1 K1 - 0x880C0104, // 0006 GETMBR R3 R0 K4 - 0x7C040400, // 0007 CALL R1 2 - 0x88040100, // 0008 GETMBR R1 R0 K0 - 0x8C040305, // 0009 GETMET R1 R1 K5 - 0x7C040200, // 000A CALL R1 1 - 0x90020401, // 000B SETMBR R0 K2 R1 - 0x88040103, // 000C GETMBR R1 R0 K3 - 0x8C040305, // 000D GETMET R1 R1 K5 - 0x7C040200, // 000E CALL R1 1 - 0x90020801, // 000F SETMBR R0 K4 R1 - 0x80000000, // 0010 RET 0 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_oldest_session -********************************************************************/ -be_local_closure(Matter_Fabric_get_oldest_session, /* name */ - be_nested_proto( - 4, /* nstack */ - 1, /* argc */ - 2, /* 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_weak(get_old_recent_session), - }), - be_str_weak(get_oldest_session), - &be_const_str_solidified, - ( &(const binstruction[ 4]) { /* code */ - 0x8C040100, // 0000 GETMET R1 R0 K0 - 0x500C0200, // 0001 LDBOOL R3 1 0 - 0x7C040400, // 0002 CALL R1 2 - 0x80040200, // 0003 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: get_device_id -********************************************************************/ -be_local_closure(Matter_Fabric_get_device_id, /* name */ - be_nested_proto( - 2, /* nstack */ - 1, /* argc */ - 2, /* 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_weak(device_id), - }), - be_str_weak(get_device_id), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x88040100, // 0000 GETMBR R1 R0 K0 - 0x80040200, // 0001 RET 1 R1 - }) - ) -); -/*******************************************************************/ - - -/******************************************************************** -** Solidified function: set_ipk_epoch_key -********************************************************************/ -be_local_closure(Matter_Fabric_set_ipk_epoch_key, /* name */ - be_nested_proto( - 2, /* nstack */ - 2, /* argc */ - 2, /* 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_weak(ipk_epoch_key), - }), - be_str_weak(set_ipk_epoch_key), - &be_const_str_solidified, - ( &(const binstruction[ 2]) { /* code */ - 0x90020001, // 0000 SETMBR R0 K0 R1 - 0x80000000, // 0001 RET 0 + 0x600C0018, // 0002 GETGBL R3 G24 + 0x58100002, // 0003 LDCONST R4 K2 + 0x8C140103, // 0004 GETMET R5 R0 K3 + 0x7C140200, // 0005 CALL R5 1 + 0x8C140B04, // 0006 GETMET R5 R5 K4 + 0x7C140200, // 0007 CALL R5 1 + 0x8C140B05, // 0008 GETMET R5 R5 K5 + 0x7C140200, // 0009 CALL R5 1 + 0x8C140B06, // 000A GETMET R5 R5 K6 + 0x7C140200, // 000B CALL R5 1 + 0x7C0C0400, // 000C CALL R3 2 + 0x58100007, // 000D LDCONST R4 K7 + 0x7C040600, // 000E CALL R1 3 + 0x80000000, // 000F RET 0 }) ) ); @@ -1575,9 +817,102 @@ be_local_closure(Matter_Fabric_fromjson, /* name */ /******************************************************************** -** Solidified function: get_fabric_index +** Solidified function: set_admin_subject_vendor ********************************************************************/ -be_local_closure(Matter_Fabric_get_fabric_index, /* name */ +be_local_closure(Matter_Fabric_set_admin_subject_vendor, /* name */ + be_nested_proto( + 3, /* nstack */ + 3, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str_weak(admin_subject), + /* K1 */ be_nested_str_weak(admin_vendor), + }), + be_str_weak(set_admin_subject_vendor), + &be_const_str_solidified, + ( &(const binstruction[ 3]) { /* code */ + 0x90020001, // 0000 SETMBR R0 K0 R1 + 0x90020202, // 0001 SETMBR R0 K1 R2 + 0x80000000, // 0002 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: counter_group_data_snd_next +********************************************************************/ +be_local_closure(Matter_Fabric_counter_group_data_snd_next, /* name */ + be_nested_proto( + 7, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[13]) { /* constants */ + /* K0 */ be_nested_str_weak(_counter_group_data_snd_impl), + /* K1 */ be_nested_str_weak(next), + /* K2 */ be_nested_str_weak(tasmota), + /* K3 */ be_nested_str_weak(log), + /* K4 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Counter_group_data_snd_X3D_X25i), + /* K5 */ be_const_int(3), + /* K6 */ be_nested_str_weak(matter), + /* K7 */ be_nested_str_weak(Counter), + /* K8 */ be_nested_str_weak(is_greater), + /* K9 */ be_nested_str_weak(counter_group_data_snd), + /* K10 */ be_nested_str_weak(_GROUP_SND_INCR), + /* K11 */ be_nested_str_weak(does_persist), + /* K12 */ be_nested_str_weak(save), + }), + be_str_weak(counter_group_data_snd_next), + &be_const_str_solidified, + ( &(const binstruction[27]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x7C040200, // 0002 CALL R1 1 + 0xB80A0400, // 0003 GETNGBL R2 K2 + 0x8C080503, // 0004 GETMET R2 R2 K3 + 0x60100018, // 0005 GETGBL R4 G24 + 0x58140004, // 0006 LDCONST R5 K4 + 0x5C180200, // 0007 MOVE R6 R1 + 0x7C100400, // 0008 CALL R4 2 + 0x58140005, // 0009 LDCONST R5 K5 + 0x7C080600, // 000A CALL R2 3 + 0xB80A0C00, // 000B GETNGBL R2 K6 + 0x88080507, // 000C GETMBR R2 R2 K7 + 0x8C080508, // 000D GETMET R2 R2 K8 + 0x5C100200, // 000E MOVE R4 R1 + 0x88140109, // 000F GETMBR R5 R0 K9 + 0x7C080600, // 0010 CALL R2 3 + 0x780A0007, // 0011 JMPF R2 #001A + 0x8808010A, // 0012 GETMBR R2 R0 K10 + 0x00080202, // 0013 ADD R2 R1 R2 + 0x90021202, // 0014 SETMBR R0 K9 R2 + 0x8C08010B, // 0015 GETMET R2 R0 K11 + 0x7C080200, // 0016 CALL R2 1 + 0x780A0001, // 0017 JMPF R2 #001A + 0x8C08010C, // 0018 GETMET R2 R0 K12 + 0x7C080200, // 0019 CALL R2 1 + 0x80040200, // 001A RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_fabric_compressed +********************************************************************/ +be_local_closure(Matter_Fabric_get_fabric_compressed, /* name */ be_nested_proto( 2, /* nstack */ 1, /* argc */ @@ -1588,9 +923,9 @@ be_local_closure(Matter_Fabric_get_fabric_index, /* name */ NULL, /* no sub protos */ 1, /* has constants */ ( &(const bvalue[ 1]) { /* constants */ - /* K0 */ be_nested_str_weak(fabric_index), + /* K0 */ be_nested_str_weak(fabric_compressed), }), - be_str_weak(get_fabric_index), + be_str_weak(get_fabric_compressed), &be_const_str_solidified, ( &(const binstruction[ 2]) { /* code */ 0x88040100, // 0000 GETMBR R1 R0 K0 @@ -1601,6 +936,389 @@ be_local_closure(Matter_Fabric_get_fabric_index, /* name */ /*******************************************************************/ +/******************************************************************** +** Solidified function: set_fabric_device +********************************************************************/ +be_local_closure(Matter_Fabric_set_fabric_device, /* name */ + be_nested_proto( + 7, /* nstack */ + 5, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_nested_str_weak(fabric_id), + /* K1 */ be_nested_str_weak(device_id), + /* K2 */ be_nested_str_weak(fabric_compressed), + /* K3 */ be_nested_str_weak(fabric_parent), + /* K4 */ be_nested_str_weak(get_fabric_index), + }), + be_str_weak(set_fabric_device), + &be_const_str_solidified, + ( &(const binstruction[12]) { /* code */ + 0x90020001, // 0000 SETMBR R0 K0 R1 + 0x90020202, // 0001 SETMBR R0 K1 R2 + 0x90020403, // 0002 SETMBR R0 K2 R3 + 0x4C140000, // 0003 LDNIL R5 + 0x20140805, // 0004 NE R5 R4 R5 + 0x78160002, // 0005 JMPF R5 #0009 + 0x8C140904, // 0006 GETMET R5 R4 K4 + 0x7C140200, // 0007 CALL R5 1 + 0x70020000, // 0008 JMP #000A + 0x4C140000, // 0009 LDNIL R5 + 0x90020605, // 000A SETMBR R0 K3 R5 + 0x80000000, // 000B RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: set_ipk_epoch_key +********************************************************************/ +be_local_closure(Matter_Fabric_set_ipk_epoch_key, /* name */ + be_nested_proto( + 2, /* nstack */ + 2, /* argc */ + 2, /* 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_weak(ipk_epoch_key), + }), + be_str_weak(set_ipk_epoch_key), + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x90020001, // 0000 SETMBR R0 K0 R1 + 0x80000000, // 0001 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_ipk_group_key +********************************************************************/ +be_local_closure(Matter_Fabric_get_ipk_group_key, /* name */ + be_nested_proto( + 10, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 7]) { /* constants */ + /* K0 */ be_nested_str_weak(ipk_epoch_key), + /* K1 */ be_nested_str_weak(fabric_compressed), + /* K2 */ be_nested_str_weak(crypto), + /* K3 */ be_nested_str_weak(HKDF_SHA256), + /* K4 */ be_nested_str_weak(fromstring), + /* K5 */ be_nested_str_weak(_GROUP_KEY), + /* K6 */ be_nested_str_weak(derive), + }), + be_str_weak(get_ipk_group_key), + &be_const_str_solidified, + ( &(const binstruction[25]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x4C080000, // 0001 LDNIL R2 + 0x1C040202, // 0002 EQ R1 R1 R2 + 0x74060003, // 0003 JMPT R1 #0008 + 0x88040101, // 0004 GETMBR R1 R0 K1 + 0x4C080000, // 0005 LDNIL R2 + 0x1C040202, // 0006 EQ R1 R1 R2 + 0x78060001, // 0007 JMPF R1 #000A + 0x4C040000, // 0008 LDNIL R1 + 0x80040200, // 0009 RET 1 R1 + 0xA4060400, // 000A IMPORT R1 K2 + 0x8C080303, // 000B GETMET R2 R1 K3 + 0x7C080200, // 000C CALL R2 1 + 0x600C0015, // 000D GETGBL R3 G21 + 0x7C0C0000, // 000E CALL R3 0 + 0x8C0C0704, // 000F GETMET R3 R3 K4 + 0x88140105, // 0010 GETMBR R5 R0 K5 + 0x7C0C0400, // 0011 CALL R3 2 + 0x8C100506, // 0012 GETMET R4 R2 K6 + 0x88180100, // 0013 GETMBR R6 R0 K0 + 0x881C0101, // 0014 GETMBR R7 R0 K1 + 0x5C200600, // 0015 MOVE R8 R3 + 0x5426000F, // 0016 LDINT R9 16 + 0x7C100A00, // 0017 CALL R4 5 + 0x80040800, // 0018 RET 1 R4 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_fabric_id_as_int64 +********************************************************************/ +be_local_closure(Matter_Fabric_get_fabric_id_as_int64, /* name */ + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_str_weak(int64), + /* K1 */ be_nested_str_weak(frombytes), + /* K2 */ be_nested_str_weak(fabric_id), + }), + be_str_weak(get_fabric_id_as_int64), + &be_const_str_solidified, + ( &(const binstruction[ 6]) { /* code */ + 0xB8060000, // 0000 GETNGBL R1 K0 + 0x7C040000, // 0001 CALL R1 0 + 0x8C080301, // 0002 GETMET R2 R1 K1 + 0x88100102, // 0003 GETMBR R4 R0 K2 + 0x7C080400, // 0004 CALL R2 2 + 0x80040200, // 0005 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_admin_vendor +********************************************************************/ +be_local_closure(Matter_Fabric_get_admin_vendor, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 2, /* 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_weak(admin_vendor), + }), + be_str_weak(get_admin_vendor), + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_ca_pub +********************************************************************/ +be_local_closure(Matter_Fabric_get_ca_pub, /* name */ + be_nested_proto( + 6, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 5]) { /* constants */ + /* K0 */ be_nested_str_weak(root_ca_certificate), + /* K1 */ be_nested_str_weak(matter), + /* K2 */ be_nested_str_weak(TLV), + /* K3 */ be_nested_str_weak(parse), + /* K4 */ be_nested_str_weak(findsubval), + }), + be_str_weak(get_ca_pub), + &be_const_str_solidified, + ( &(const binstruction[12]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x78060008, // 0001 JMPF R1 #000B + 0xB80A0200, // 0002 GETNGBL R2 K1 + 0x88080502, // 0003 GETMBR R2 R2 K2 + 0x8C080503, // 0004 GETMET R2 R2 K3 + 0x5C100200, // 0005 MOVE R4 R1 + 0x7C080400, // 0006 CALL R2 2 + 0x8C0C0504, // 0007 GETMET R3 R2 K4 + 0x54160008, // 0008 LDINT R5 9 + 0x7C0C0400, // 0009 CALL R3 2 + 0x80040600, // 000A RET 1 R3 + 0x80000000, // 000B RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: is_marked_for_deletion +********************************************************************/ +be_local_closure(Matter_Fabric_is_marked_for_deletion, /* name */ + be_nested_proto( + 3, /* nstack */ + 1, /* argc */ + 2, /* 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_weak(deleted), + }), + be_str_weak(is_marked_for_deletion), + &be_const_str_solidified, + ( &(const binstruction[ 4]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x4C080000, // 0001 LDNIL R2 + 0x20040202, // 0002 NE R1 R1 R2 + 0x80040200, // 0003 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: init +********************************************************************/ +be_local_closure(Matter_Fabric_init, /* name */ + be_nested_proto( + 5, /* nstack */ + 2, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[17]) { /* constants */ + /* K0 */ be_nested_str_weak(crypto), + /* K1 */ be_nested_str_weak(_store), + /* K2 */ be_nested_str_weak(_sessions), + /* K3 */ be_nested_str_weak(matter), + /* K4 */ be_nested_str_weak(Expirable_list), + /* K5 */ be_nested_str_weak(fabric_label), + /* K6 */ be_nested_str_weak(), + /* K7 */ be_nested_str_weak(created), + /* K8 */ be_nested_str_weak(tasmota), + /* K9 */ be_nested_str_weak(rtc_utc), + /* K10 */ be_nested_str_weak(_counter_group_data_snd_impl), + /* K11 */ be_nested_str_weak(Counter), + /* K12 */ be_nested_str_weak(_counter_group_ctrl_snd_impl), + /* K13 */ be_nested_str_weak(counter_group_data_snd), + /* K14 */ be_nested_str_weak(next), + /* K15 */ be_nested_str_weak(_GROUP_SND_INCR), + /* K16 */ be_nested_str_weak(counter_group_ctrl_snd), + }), + be_str_weak(init), + &be_const_str_solidified, + ( &(const binstruction[32]) { /* code */ + 0xA40A0000, // 0000 IMPORT R2 K0 + 0x90020201, // 0001 SETMBR R0 K1 R1 + 0xB80E0600, // 0002 GETNGBL R3 K3 + 0x8C0C0704, // 0003 GETMET R3 R3 K4 + 0x7C0C0200, // 0004 CALL R3 1 + 0x90020403, // 0005 SETMBR R0 K2 R3 + 0x90020B06, // 0006 SETMBR R0 K5 K6 + 0xB80E1000, // 0007 GETNGBL R3 K8 + 0x8C0C0709, // 0008 GETMET R3 R3 K9 + 0x7C0C0200, // 0009 CALL R3 1 + 0x90020E03, // 000A SETMBR R0 K7 R3 + 0xB80E0600, // 000B GETNGBL R3 K3 + 0x8C0C070B, // 000C GETMET R3 R3 K11 + 0x7C0C0200, // 000D CALL R3 1 + 0x90021403, // 000E SETMBR R0 K10 R3 + 0xB80E0600, // 000F GETNGBL R3 K3 + 0x8C0C070B, // 0010 GETMET R3 R3 K11 + 0x7C0C0200, // 0011 CALL R3 1 + 0x90021803, // 0012 SETMBR R0 K12 R3 + 0x880C010A, // 0013 GETMBR R3 R0 K10 + 0x8C0C070E, // 0014 GETMET R3 R3 K14 + 0x7C0C0200, // 0015 CALL R3 1 + 0x8810010F, // 0016 GETMBR R4 R0 K15 + 0x000C0604, // 0017 ADD R3 R3 R4 + 0x90021A03, // 0018 SETMBR R0 K13 R3 + 0x880C010A, // 0019 GETMBR R3 R0 K10 + 0x8C0C070E, // 001A GETMET R3 R3 K14 + 0x7C0C0200, // 001B CALL R3 1 + 0x8810010F, // 001C GETMBR R4 R0 K15 + 0x000C0604, // 001D ADD R3 R3 R4 + 0x90022003, // 001E SETMBR R0 K16 R3 + 0x80000000, // 001F RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: set_noc_icac +********************************************************************/ +be_local_closure(Matter_Fabric_set_noc_icac, /* name */ + be_nested_proto( + 3, /* nstack */ + 3, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 2]) { /* constants */ + /* K0 */ be_nested_str_weak(noc), + /* K1 */ be_nested_str_weak(icac), + }), + be_str_weak(set_noc_icac), + &be_const_str_solidified, + ( &(const binstruction[ 3]) { /* code */ + 0x90020001, // 0000 SETMBR R0 K0 R1 + 0x90020202, // 0001 SETMBR R0 K1 R2 + 0x80000000, // 0002 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: set_ca +********************************************************************/ +be_local_closure(Matter_Fabric_set_ca, /* name */ + be_nested_proto( + 2, /* nstack */ + 2, /* argc */ + 2, /* 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_weak(root_ca_certificate), + }), + be_str_weak(set_ca), + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x90020001, // 0000 SETMBR R0 K0 R1 + 0x80000000, // 0001 RET 0 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: get_admin_vendor_name ********************************************************************/ @@ -1650,6 +1368,243 @@ be_local_closure(Matter_Fabric_get_admin_vendor_name, /* name */ /*******************************************************************/ +/******************************************************************** +** Solidified function: assign_fabric_index +********************************************************************/ +be_local_closure(Matter_Fabric_assign_fabric_index, /* name */ + be_nested_proto( + 5, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_nested_str_weak(get_fabric_index), + /* K1 */ be_nested_str_weak(set_fabric_index), + /* K2 */ be_nested_str_weak(_store), + /* K3 */ be_nested_str_weak(next_fabric_idx), + }), + be_str_weak(assign_fabric_index), + &be_const_str_solidified, + ( &(const binstruction[11]) { /* code */ + 0x8C040100, // 0000 GETMET R1 R0 K0 + 0x7C040200, // 0001 CALL R1 1 + 0x4C080000, // 0002 LDNIL R2 + 0x1C040202, // 0003 EQ R1 R1 R2 + 0x78060004, // 0004 JMPF R1 #000A + 0x8C040101, // 0005 GETMET R1 R0 K1 + 0x880C0102, // 0006 GETMBR R3 R0 K2 + 0x8C0C0703, // 0007 GETMET R3 R3 K3 + 0x7C0C0200, // 0008 CALL R3 1 + 0x7C040400, // 0009 CALL R1 2 + 0x80000000, // 000A RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_admin_subject +********************************************************************/ +be_local_closure(Matter_Fabric_get_admin_subject, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 2, /* 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_weak(admin_subject), + }), + be_str_weak(get_admin_subject), + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_fabric_label +********************************************************************/ +be_local_closure(Matter_Fabric_get_fabric_label, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 2, /* 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_weak(fabric_label), + }), + be_str_weak(get_fabric_label), + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_old_recent_session +********************************************************************/ +be_local_closure(Matter_Fabric_get_old_recent_session, /* name */ + be_nested_proto( + 7, /* nstack */ + 2, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 4]) { /* constants */ + /* K0 */ be_nested_str_weak(_sessions), + /* K1 */ be_const_int(0), + /* K2 */ be_nested_str_weak(last_used), + /* K3 */ be_const_int(1), + }), + be_str_weak(get_old_recent_session), + &be_const_str_solidified, + ( &(const binstruction[30]) { /* code */ + 0x6008000C, // 0000 GETGBL R2 G12 + 0x880C0100, // 0001 GETMBR R3 R0 K0 + 0x7C080200, // 0002 CALL R2 1 + 0x1C080501, // 0003 EQ R2 R2 K1 + 0x780A0001, // 0004 JMPF R2 #0007 + 0x4C080000, // 0005 LDNIL R2 + 0x80040400, // 0006 RET 1 R2 + 0x88080100, // 0007 GETMBR R2 R0 K0 + 0x94080501, // 0008 GETIDX R2 R2 K1 + 0x880C0502, // 0009 GETMBR R3 R2 K2 + 0x58100003, // 000A LDCONST R4 K3 + 0x6014000C, // 000B GETGBL R5 G12 + 0x88180100, // 000C GETMBR R6 R0 K0 + 0x7C140200, // 000D CALL R5 1 + 0x14140805, // 000E LT R5 R4 R5 + 0x7816000C, // 000F JMPF R5 #001D + 0x88140100, // 0010 GETMBR R5 R0 K0 + 0x94140A04, // 0011 GETIDX R5 R5 R4 + 0x88140B02, // 0012 GETMBR R5 R5 K2 + 0x78060001, // 0013 JMPF R1 #0016 + 0x14180A03, // 0014 LT R6 R5 R3 + 0x70020000, // 0015 JMP #0017 + 0x24180A03, // 0016 GT R6 R5 R3 + 0x781A0002, // 0017 JMPF R6 #001B + 0x88180100, // 0018 GETMBR R6 R0 K0 + 0x94080C04, // 0019 GETIDX R2 R6 R4 + 0x5C0C0A00, // 001A MOVE R3 R5 + 0x00100903, // 001B ADD R4 R4 K3 + 0x7001FFED, // 001C JMP #000B + 0x80040400, // 001D RET 1 R2 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_ca +********************************************************************/ +be_local_closure(Matter_Fabric_get_ca, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 2, /* 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_weak(root_ca_certificate), + }), + be_str_weak(get_ca), + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: mark_for_deletion +********************************************************************/ +be_local_closure(Matter_Fabric_mark_for_deletion, /* name */ + be_nested_proto( + 3, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 3]) { /* constants */ + /* K0 */ be_nested_str_weak(deleted), + /* K1 */ be_nested_str_weak(tasmota), + /* K2 */ be_nested_str_weak(rtc_utc), + }), + be_str_weak(mark_for_deletion), + &be_const_str_solidified, + ( &(const binstruction[ 5]) { /* code */ + 0xB8060200, // 0000 GETNGBL R1 K1 + 0x8C040302, // 0001 GETMET R1 R1 K2 + 0x7C040200, // 0002 CALL R1 1 + 0x90020001, // 0003 SETMBR R0 K0 R1 + 0x80000000, // 0004 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: get_fabric_index +********************************************************************/ +be_local_closure(Matter_Fabric_get_fabric_index, /* name */ + be_nested_proto( + 2, /* nstack */ + 1, /* argc */ + 2, /* 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_weak(fabric_index), + }), + be_str_weak(get_fabric_index), + &be_const_str_solidified, + ( &(const binstruction[ 2]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x80040200, // 0001 RET 1 R1 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified function: get_fabric_id ********************************************************************/ @@ -1677,6 +1632,117 @@ be_local_closure(Matter_Fabric_get_fabric_id, /* name */ /*******************************************************************/ +/******************************************************************** +** Solidified function: hydrate_post +********************************************************************/ +be_local_closure(Matter_Fabric_hydrate_post, /* name */ + be_nested_proto( + 4, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[ 6]) { /* constants */ + /* K0 */ be_nested_str_weak(_counter_group_data_snd_impl), + /* K1 */ be_nested_str_weak(reset), + /* K2 */ be_nested_str_weak(counter_group_data_snd), + /* K3 */ be_nested_str_weak(_counter_group_ctrl_snd_impl), + /* K4 */ be_nested_str_weak(counter_group_ctrl_snd), + /* K5 */ be_nested_str_weak(val), + }), + be_str_weak(hydrate_post), + &be_const_str_solidified, + ( &(const binstruction[17]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x880C0102, // 0002 GETMBR R3 R0 K2 + 0x7C040400, // 0003 CALL R1 2 + 0x88040103, // 0004 GETMBR R1 R0 K3 + 0x8C040301, // 0005 GETMET R1 R1 K1 + 0x880C0104, // 0006 GETMBR R3 R0 K4 + 0x7C040400, // 0007 CALL R1 2 + 0x88040100, // 0008 GETMBR R1 R0 K0 + 0x8C040305, // 0009 GETMET R1 R1 K5 + 0x7C040200, // 000A CALL R1 1 + 0x90020401, // 000B SETMBR R0 K2 R1 + 0x88040103, // 000C GETMBR R1 R0 K3 + 0x8C040305, // 000D GETMET R1 R1 K5 + 0x7C040200, // 000E CALL R1 1 + 0x90020801, // 000F SETMBR R0 K4 R1 + 0x80000000, // 0010 RET 0 + }) + ) +); +/*******************************************************************/ + + +/******************************************************************** +** Solidified function: counter_group_ctrl_snd_next +********************************************************************/ +be_local_closure(Matter_Fabric_counter_group_ctrl_snd_next, /* name */ + be_nested_proto( + 7, /* nstack */ + 1, /* argc */ + 2, /* varg */ + 0, /* has upvals */ + NULL, /* no upvals */ + 0, /* has sup protos */ + NULL, /* no sub protos */ + 1, /* has constants */ + ( &(const bvalue[13]) { /* constants */ + /* K0 */ be_nested_str_weak(_counter_group_ctrl_snd_impl), + /* K1 */ be_nested_str_weak(next), + /* K2 */ be_nested_str_weak(tasmota), + /* K3 */ be_nested_str_weak(log), + /* K4 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Counter_group_ctrl_snd_X3D_X25i), + /* K5 */ be_const_int(3), + /* K6 */ be_nested_str_weak(matter), + /* K7 */ be_nested_str_weak(Counter), + /* K8 */ be_nested_str_weak(is_greater), + /* K9 */ be_nested_str_weak(counter_group_ctrl_snd), + /* K10 */ be_nested_str_weak(_GROUP_SND_INCR), + /* K11 */ be_nested_str_weak(does_persist), + /* K12 */ be_nested_str_weak(save), + }), + be_str_weak(counter_group_ctrl_snd_next), + &be_const_str_solidified, + ( &(const binstruction[27]) { /* code */ + 0x88040100, // 0000 GETMBR R1 R0 K0 + 0x8C040301, // 0001 GETMET R1 R1 K1 + 0x7C040200, // 0002 CALL R1 1 + 0xB80A0400, // 0003 GETNGBL R2 K2 + 0x8C080503, // 0004 GETMET R2 R2 K3 + 0x60100018, // 0005 GETGBL R4 G24 + 0x58140004, // 0006 LDCONST R5 K4 + 0x5C180200, // 0007 MOVE R6 R1 + 0x7C100400, // 0008 CALL R4 2 + 0x58140005, // 0009 LDCONST R5 K5 + 0x7C080600, // 000A CALL R2 3 + 0xB80A0C00, // 000B GETNGBL R2 K6 + 0x88080507, // 000C GETMBR R2 R2 K7 + 0x8C080508, // 000D GETMET R2 R2 K8 + 0x5C100200, // 000E MOVE R4 R1 + 0x88140109, // 000F GETMBR R5 R0 K9 + 0x7C080600, // 0010 CALL R2 3 + 0x780A0007, // 0011 JMPF R2 #001A + 0x8808010A, // 0012 GETMBR R2 R0 K10 + 0x00080202, // 0013 ADD R2 R1 R2 + 0x90021202, // 0014 SETMBR R0 K9 R2 + 0x8C08010B, // 0015 GETMET R2 R0 K11 + 0x7C080200, // 0016 CALL R2 1 + 0x780A0001, // 0017 JMPF R2 #001A + 0x8C08010C, // 0018 GETMET R2 R0 K12 + 0x7C080200, // 0019 CALL R2 1 + 0x80040200, // 001A RET 1 R1 + }) + ) +); +/*******************************************************************/ + + /******************************************************************** ** Solidified class: Matter_Fabric ********************************************************************/ @@ -1684,71 +1750,73 @@ extern const bclass be_class_Matter_Expirable; be_local_class(Matter_Fabric, 21, &be_class_Matter_Expirable, - be_nested_map(63, + be_nested_map(65, ( (struct bmapnode*) &(const bmapnode[]) { - { be_const_key_weak(_GROUP_KEY, -1), be_nested_str_weak(GroupKey_X20v1_X2E0) }, - { be_const_key_weak(counter_group_data_snd, -1), be_const_var(15) }, - { be_const_key_weak(get_ca, -1), be_const_closure(Matter_Fabric_get_ca_closure) }, - { be_const_key_weak(get_ipk_epoch_key, 28), be_const_closure(Matter_Fabric_get_ipk_epoch_key_closure) }, - { be_const_key_weak(device_id, -1), be_const_var(13) }, - { be_const_key_weak(_counter_group_data_snd_impl, -1), be_const_var(17) }, - { be_const_key_weak(fabric_index, 27), be_const_var(3) }, - { be_const_key_weak(no_private_key, 45), be_const_var(6) }, - { be_const_key_weak(get_ipk_group_key, -1), be_const_closure(Matter_Fabric_get_ipk_group_key_closure) }, - { be_const_key_weak(set_ca, -1), be_const_closure(Matter_Fabric_set_ca_closure) }, - { be_const_key_weak(get_fabric_compressed, 0), be_const_closure(Matter_Fabric_get_fabric_compressed_closure) }, - { be_const_key_weak(fabric_compressed, -1), be_const_var(12) }, - { be_const_key_weak(get_fabric_label, 48), be_const_closure(Matter_Fabric_get_fabric_label_closure) }, + { be_const_key_weak(get_device_id_as_int64, -1), be_const_closure(Matter_Fabric_get_device_id_as_int64_closure) }, { be_const_key_weak(admin_vendor, -1), be_const_var(20) }, - { be_const_key_weak(before_remove, -1), be_const_closure(Matter_Fabric_before_remove_closure) }, - { be_const_key_weak(noc, 31), be_const_var(8) }, - { be_const_key_weak(fromjson, -1), be_const_static_closure(Matter_Fabric_fromjson_closure) }, - { be_const_key_weak(log_new_fabric, 40), be_const_closure(Matter_Fabric_log_new_fabric_closure) }, - { be_const_key_weak(_counter_group_ctrl_snd_impl, -1), be_const_var(18) }, - { be_const_key_weak(created, 5), be_const_var(1) }, - { be_const_key_weak(set_pk, 16), be_const_closure(Matter_Fabric_set_pk_closure) }, - { be_const_key_weak(mark_for_deletion, -1), be_const_closure(Matter_Fabric_mark_for_deletion_closure) }, - { be_const_key_weak(_GROUP_SND_INCR, -1), be_const_int(32) }, - { be_const_key_weak(_store, 56), be_const_var(0) }, - { be_const_key_weak(fabric_completed, -1), be_const_closure(Matter_Fabric_fabric_completed_closure) }, - { be_const_key_weak(get_device_id, -1), be_const_closure(Matter_Fabric_get_device_id_closure) }, - { be_const_key_weak(get_noc, 14), be_const_closure(Matter_Fabric_get_noc_closure) }, - { be_const_key_weak(get_oldest_session, -1), be_const_closure(Matter_Fabric_get_oldest_session_closure) }, - { be_const_key_weak(get_icac, -1), be_const_closure(Matter_Fabric_get_icac_closure) }, - { be_const_key_weak(hydrate_post, -1), be_const_closure(Matter_Fabric_hydrate_post_closure) }, - { be_const_key_weak(admin_subject, -1), be_const_var(19) }, - { be_const_key_weak(fabric_id, -1), be_const_var(11) }, - { be_const_key_weak(set_admin_subject_vendor, -1), be_const_closure(Matter_Fabric_set_admin_subject_vendor_closure) }, - { be_const_key_weak(get_ca_pub, 52), be_const_closure(Matter_Fabric_get_ca_pub_closure) }, - { be_const_key_weak(root_ca_certificate, -1), be_const_var(7) }, - { be_const_key_weak(ipk_epoch_key, -1), be_const_var(10) }, - { be_const_key_weak(icac, -1), be_const_var(9) }, - { be_const_key_weak(get_old_recent_session, -1), be_const_closure(Matter_Fabric_get_old_recent_session_closure) }, { be_const_key_weak(counter_group_ctrl_snd_next, -1), be_const_closure(Matter_Fabric_counter_group_ctrl_snd_next_closure) }, - { be_const_key_weak(get_pk, 35), be_const_closure(Matter_Fabric_get_pk_closure) }, - { be_const_key_weak(counter_group_data_snd_next, 13), be_const_closure(Matter_Fabric_counter_group_data_snd_next_closure) }, - { be_const_key_weak(get_newest_session, 38), be_const_closure(Matter_Fabric_get_newest_session_closure) }, - { be_const_key_weak(set_noc_icac, -1), be_const_closure(Matter_Fabric_set_noc_icac_closure) }, + { be_const_key_weak(hydrate_post, 12), be_const_closure(Matter_Fabric_hydrate_post_closure) }, + { be_const_key_weak(admin_subject, 63), be_const_var(19) }, + { be_const_key_weak(fabric_compressed, 36), be_const_var(12) }, + { be_const_key_weak(noc, -1), be_const_var(8) }, { be_const_key_weak(add_session, -1), be_const_closure(Matter_Fabric_add_session_closure) }, - { be_const_key_weak(set_fabric_index, 46), be_const_closure(Matter_Fabric_set_fabric_index_closure) }, - { be_const_key_weak(get_admin_subject, 18), be_const_closure(Matter_Fabric_get_admin_subject_closure) }, - { be_const_key_weak(_MAX_CASE, -1), be_const_int(5) }, - { be_const_key_weak(set_fabric_device, -1), be_const_closure(Matter_Fabric_set_fabric_device_closure) }, - { be_const_key_weak(deleted, -1), be_const_var(2) }, - { be_const_key_weak(get_admin_vendor, 32), be_const_closure(Matter_Fabric_get_admin_vendor_closure) }, - { be_const_key_weak(tojson, -1), be_const_closure(Matter_Fabric_tojson_closure) }, - { be_const_key_weak(assign_fabric_index, 29), be_const_closure(Matter_Fabric_assign_fabric_index_closure) }, - { be_const_key_weak(init, -1), be_const_closure(Matter_Fabric_init_closure) }, - { be_const_key_weak(_sessions, 6), be_const_var(5) }, - { be_const_key_weak(fabric_candidate, 25), be_const_closure(Matter_Fabric_fabric_candidate_closure) }, - { be_const_key_weak(set_ipk_epoch_key, -1), be_const_closure(Matter_Fabric_set_ipk_epoch_key_closure) }, - { be_const_key_weak(fabric_label, 59), be_const_var(14) }, + { be_const_key_weak(get_oldest_session, 22), be_const_closure(Matter_Fabric_get_oldest_session_closure) }, + { be_const_key_weak(get_ipk_epoch_key, -1), be_const_closure(Matter_Fabric_get_ipk_epoch_key_closure) }, + { be_const_key_weak(log_new_fabric, -1), be_const_closure(Matter_Fabric_log_new_fabric_closure) }, + { be_const_key_weak(fromjson, 64), be_const_static_closure(Matter_Fabric_fromjson_closure) }, { be_const_key_weak(get_fabric_index, -1), be_const_closure(Matter_Fabric_get_fabric_index_closure) }, - { be_const_key_weak(get_admin_vendor_name, -1), be_const_closure(Matter_Fabric_get_admin_vendor_name_closure) }, - { be_const_key_weak(is_marked_for_deletion, 1), be_const_closure(Matter_Fabric_is_marked_for_deletion_closure) }, - { be_const_key_weak(fabric_parent, -1), be_const_var(4) }, + { be_const_key_weak(get_icac, -1), be_const_closure(Matter_Fabric_get_icac_closure) }, + { be_const_key_weak(set_fabric_index, -1), be_const_closure(Matter_Fabric_set_fabric_index_closure) }, { be_const_key_weak(counter_group_ctrl_snd, -1), be_const_var(16) }, + { be_const_key_weak(get_noc, 4), be_const_closure(Matter_Fabric_get_noc_closure) }, + { be_const_key_weak(_counter_group_data_snd_impl, -1), be_const_var(17) }, + { be_const_key_weak(fabric_completed, -1), be_const_closure(Matter_Fabric_fabric_completed_closure) }, + { be_const_key_weak(_sessions, -1), be_const_var(5) }, + { be_const_key_weak(get_pk, -1), be_const_closure(Matter_Fabric_get_pk_closure) }, + { be_const_key_weak(mark_for_deletion, -1), be_const_closure(Matter_Fabric_mark_for_deletion_closure) }, + { be_const_key_weak(_store, 47), be_const_var(0) }, + { be_const_key_weak(get_newest_session, 58), be_const_closure(Matter_Fabric_get_newest_session_closure) }, + { be_const_key_weak(get_fabric_compressed, -1), be_const_closure(Matter_Fabric_get_fabric_compressed_closure) }, + { be_const_key_weak(before_remove, -1), be_const_closure(Matter_Fabric_before_remove_closure) }, + { be_const_key_weak(set_pk, 11), be_const_closure(Matter_Fabric_set_pk_closure) }, + { be_const_key_weak(root_ca_certificate, 37), be_const_var(7) }, + { be_const_key_weak(set_admin_subject_vendor, 29), be_const_closure(Matter_Fabric_set_admin_subject_vendor_closure) }, + { be_const_key_weak(get_old_recent_session, 42), be_const_closure(Matter_Fabric_get_old_recent_session_closure) }, + { be_const_key_weak(get_fabric_label, 10), be_const_closure(Matter_Fabric_get_fabric_label_closure) }, + { be_const_key_weak(tojson, 57), be_const_closure(Matter_Fabric_tojson_closure) }, + { be_const_key_weak(fabric_id, -1), be_const_var(11) }, + { be_const_key_weak(device_id, 24), be_const_var(13) }, + { be_const_key_weak(_counter_group_ctrl_snd_impl, -1), be_const_var(18) }, + { be_const_key_weak(_GROUP_KEY, -1), be_nested_str_weak(GroupKey_X20v1_X2E0) }, + { be_const_key_weak(set_ipk_epoch_key, -1), be_const_closure(Matter_Fabric_set_ipk_epoch_key_closure) }, + { be_const_key_weak(fabric_label, -1), be_const_var(14) }, + { be_const_key_weak(get_ipk_group_key, 2), be_const_closure(Matter_Fabric_get_ipk_group_key_closure) }, + { be_const_key_weak(get_fabric_id_as_int64, -1), be_const_closure(Matter_Fabric_get_fabric_id_as_int64_closure) }, + { be_const_key_weak(no_private_key, -1), be_const_var(6) }, + { be_const_key_weak(get_admin_vendor, -1), be_const_closure(Matter_Fabric_get_admin_vendor_closure) }, + { be_const_key_weak(_MAX_CASE, -1), be_const_int(5) }, + { be_const_key_weak(is_marked_for_deletion, -1), be_const_closure(Matter_Fabric_is_marked_for_deletion_closure) }, + { be_const_key_weak(fabric_index, -1), be_const_var(3) }, + { be_const_key_weak(init, 21), be_const_closure(Matter_Fabric_init_closure) }, + { be_const_key_weak(get_admin_vendor_name, -1), be_const_closure(Matter_Fabric_get_admin_vendor_name_closure) }, + { be_const_key_weak(set_noc_icac, 55), be_const_closure(Matter_Fabric_set_noc_icac_closure) }, + { be_const_key_weak(set_ca, -1), be_const_closure(Matter_Fabric_set_ca_closure) }, + { be_const_key_weak(fabric_parent, -1), be_const_var(4) }, + { be_const_key_weak(fabric_candidate, 46), be_const_closure(Matter_Fabric_fabric_candidate_closure) }, + { be_const_key_weak(counter_group_data_snd, -1), be_const_var(15) }, + { be_const_key_weak(assign_fabric_index, -1), be_const_closure(Matter_Fabric_assign_fabric_index_closure) }, + { be_const_key_weak(get_admin_subject, -1), be_const_closure(Matter_Fabric_get_admin_subject_closure) }, + { be_const_key_weak(created, 30), be_const_var(1) }, + { be_const_key_weak(set_fabric_device, -1), be_const_closure(Matter_Fabric_set_fabric_device_closure) }, + { be_const_key_weak(get_ca, -1), be_const_closure(Matter_Fabric_get_ca_closure) }, + { be_const_key_weak(counter_group_data_snd_next, -1), be_const_closure(Matter_Fabric_counter_group_data_snd_next_closure) }, + { be_const_key_weak(ipk_epoch_key, -1), be_const_var(10) }, + { be_const_key_weak(get_ca_pub, 3), be_const_closure(Matter_Fabric_get_ca_pub_closure) }, + { be_const_key_weak(_GROUP_SND_INCR, -1), be_const_int(32) }, + { be_const_key_weak(deleted, -1), be_const_var(2) }, { be_const_key_weak(get_fabric_id, -1), be_const_closure(Matter_Fabric_get_fabric_id_closure) }, + { be_const_key_weak(get_device_id, -1), be_const_closure(Matter_Fabric_get_device_id_closure) }, + { be_const_key_weak(icac, -1), be_const_var(9) }, })), be_str_weak(Matter_Fabric) ); diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h index 64088807c..ffcbba55c 100644 --- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h +++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_IM.h @@ -3140,13 +3140,13 @@ be_local_closure(Matter_IM_process_read_request_solo, /* name */ 0x4C280000, // 00B3 LDNIL R10 0x2028080A, // 00B4 NE R10 R4 R10 0x782A0013, // 00B5 JMPF R10 #00CA - 0x8C280933, // 00B6 GETMET R10 R4 K51 - 0x7C280200, // 00B7 CALL R10 1 - 0xB82E2400, // 00B8 GETNGBL R11 K18 - 0x8C2C1726, // 00B9 GETMET R11 R11 K38 - 0x58340014, // 00BA LDCONST R13 K20 - 0x7C2C0400, // 00BB CALL R11 2 - 0x782E000B, // 00BC JMPF R11 #00C9 + 0xB82A2400, // 00B6 GETNGBL R10 K18 + 0x8C281526, // 00B7 GETMET R10 R10 K38 + 0x58300014, // 00B8 LDCONST R12 K20 + 0x7C280400, // 00B9 CALL R10 2 + 0x782A000D, // 00BA JMPF R10 #00C9 + 0x8C280933, // 00BB GETMET R10 R4 K51 + 0x7C280200, // 00BC CALL R10 1 0xB82E2400, // 00BD GETNGBL R11 K18 0x8C2C170B, // 00BE GETMET R11 R11 K11 0x60340018, // 00BF GETGBL R13 G24 diff --git a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_1_Root.h b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_1_Root.h index 3e8fdd204..fe73035b0 100644 --- a/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_1_Root.h +++ b/lib/libesp32/berry_matter/src/solidify/solidified_Matter_Plugin_1_Root.h @@ -88,8 +88,8 @@ be_local_closure(Matter_Plugin_Root_read_attribute, /* name */ /* K65 */ be_nested_str_weak(get_ca), /* K66 */ be_nested_str_weak(findsubval), /* K67 */ be_nested_str_weak(get_admin_vendor), - /* K68 */ be_nested_str_weak(get_fabric_id), - /* K69 */ be_nested_str_weak(get_device_id), + /* K68 */ be_nested_str_weak(get_fabric_id_as_int64), + /* K69 */ be_nested_str_weak(get_device_id_as_int64), /* K70 */ be_nested_str_weak(get_fabric_label), /* K71 */ be_nested_str_weak(Fabric), /* K72 */ be_nested_str_weak(_MAX_CASE), @@ -1224,7 +1224,7 @@ be_local_closure(Matter_Plugin_Root_write_attribute, /* name */ ********************************************************************/ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */ be_nested_proto( - 30, /* nstack */ + 31, /* nstack */ 4, /* argc */ 2, /* varg */ 0, /* has upvals */ @@ -1339,13 +1339,13 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */ /* K75 */ be_nested_str_weak(is_PASE), /* K76 */ be_nested_str_weak(set_expire_in_seconds), /* K77 */ be_nested_str_weak(log_new_fabric), - /* K78 */ be_nested_str_weak(set_fabric_label), - /* K79 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Update_X20fabric_X20_X27_X25s_X27_X20label_X3D_X27_X25s_X27), - /* K80 */ be_nested_str_weak(get_fabric_id), - /* K81 */ be_nested_str_weak(tohex), - /* K82 */ be_nested_str_weak(fabric_index_X3A), - /* K83 */ be_nested_str_weak(active_fabrics), - /* K84 */ be_nested_str_weak(get_fabric_index), + /* K78 */ be_nested_str_weak(get_fabric_index), + /* K79 */ be_nested_str_weak(set_fabric_label), + /* K80 */ be_nested_str_weak(MTR_X3A_X20_X2E_X20_X20_X20_X20_X20_X20_X20_X20_X20_X20Update_X20fabric_X20_X27_X25s_X27_X20label_X3D_X27_X25s_X27), + /* K81 */ be_nested_str_weak(get_fabric_id), + /* K82 */ be_nested_str_weak(tohex), + /* K83 */ be_nested_str_weak(fabric_index_X3A), + /* K84 */ be_nested_str_weak(active_fabrics), /* K85 */ be_nested_str_weak(mark_for_deletion), /* K86 */ be_nested_str_weak(set_timer), /* K87 */ be_nested_str_weak(stop_iteration), @@ -1365,7 +1365,7 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */ }), be_str_weak(invoke_request), &be_const_str_solidified, - ( &(const binstruction[714]) { /* code */ + ( &(const binstruction[729]) { /* code */ 0xA4120000, // 0000 IMPORT R4 K0 0xB8160200, // 0001 GETNGBL R5 K1 0x88140B02, // 0002 GETMBR R5 R5 K2 @@ -1466,10 +1466,10 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */ 0x80041000, // 0061 RET 1 R8 0x70020000, // 0062 JMP #0064 0xB0063119, // 0063 RAISE 1 K24 K25 - 0x70020262, // 0064 JMP #02C8 + 0x70020271, // 0064 JMP #02D7 0x5422003D, // 0065 LDINT R8 62 0x1C200C08, // 0066 EQ R8 R6 R8 - 0x782201C3, // 0067 JMPF R8 #022C + 0x782201D2, // 0067 JMPF R8 #023B 0x1C200F0E, // 0068 EQ R8 R7 K14 0x7822001D, // 0069 JMPF R8 #0088 0x8C200506, // 006A GETMET R8 R2 K6 @@ -1501,7 +1501,7 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */ 0x7C280800, // 0084 CALL R10 4 0x900E0910, // 0085 SETMBR R3 K4 K16 0x80041200, // 0086 RET 1 R9 - 0x700201A2, // 0087 JMP #022B + 0x700201B1, // 0087 JMP #023A 0x1C200F05, // 0088 EQ R8 R7 K5 0x7822003C, // 0089 JMPF R8 #00C7 0x8C200506, // 008A GETMET R8 R2 K6 @@ -1564,7 +1564,7 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */ 0x7C3C0800, // 00C3 CALL R15 4 0x900E0907, // 00C4 SETMBR R3 K4 K7 0x80041C00, // 00C5 RET 1 R14 - 0x70020163, // 00C6 JMP #022B + 0x70020172, // 00C6 JMP #023A 0x54220003, // 00C7 LDINT R8 4 0x1C200E08, // 00C8 EQ R8 R7 R8 0x7822003C, // 00C9 JMPF R8 #0107 @@ -1628,7 +1628,7 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */ 0x54420004, // 0103 LDINT R16 5 0x900E0810, // 0104 SETMBR R3 K4 R16 0x80041E00, // 0105 RET 1 R15 - 0x70020123, // 0106 JMP #022B + 0x70020132, // 0106 JMP #023A 0x5422000A, // 0107 LDINT R8 11 0x1C200E08, // 0108 EQ R8 R7 R8 0x7822000B, // 0109 JMPF R8 #0116 @@ -1643,10 +1643,10 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */ 0x900E3409, // 0112 SETMBR R3 K26 R9 0x4C240000, // 0113 LDNIL R9 0x80041200, // 0114 RET 1 R9 - 0x70020114, // 0115 JMP #022B + 0x70020123, // 0115 JMP #023A 0x54220005, // 0116 LDINT R8 6 0x1C200E08, // 0117 EQ R8 R7 R8 - 0x782200B8, // 0118 JMPF R8 #01D2 + 0x782200B9, // 0118 JMPF R8 #01D3 0xB8224400, // 0119 GETNGBL R8 K34 0x8C20112C, // 011A GETMET R8 R8 K44 0x60280008, // 011B GETGBL R10 G8 @@ -1826,260 +1826,275 @@ be_local_closure(Matter_Plugin_Root_invoke_request, /* name */ 0x8C64310A, // 01C9 GETMET R25 R24 K10 0x586C0007, // 01CA LDCONST R27 K7 0x88700B0B, // 01CB GETMBR R28 R5 K11 - 0x58740007, // 01CC LDCONST R29 K7 - 0x7C640800, // 01CD CALL R25 4 - 0x54660007, // 01CE LDINT R25 8 - 0x900E0819, // 01CF SETMBR R3 K4 R25 - 0x80043000, // 01D0 RET 1 R24 - 0x70020058, // 01D1 JMP #022B - 0x54220008, // 01D2 LDINT R8 9 - 0x1C200E08, // 01D3 EQ R8 R7 R8 - 0x7822001E, // 01D4 JMPF R8 #01F4 - 0x8C200506, // 01D5 GETMET R8 R2 K6 - 0x58280005, // 01D6 LDCONST R10 K5 - 0x7C200400, // 01D7 CALL R8 2 - 0x8C24034E, // 01D8 GETMET R9 R1 K78 - 0x5C2C1000, // 01D9 MOVE R11 R8 - 0x7C240400, // 01DA CALL R9 2 - 0xB8264400, // 01DB GETNGBL R9 K34 - 0x8C24132C, // 01DC GETMET R9 R9 K44 - 0x602C0018, // 01DD GETGBL R11 G24 - 0x5830004F, // 01DE LDCONST R12 K79 - 0x88340312, // 01DF GETMBR R13 R1 K18 - 0x8C341B50, // 01E0 GETMET R13 R13 K80 - 0x7C340200, // 01E1 CALL R13 1 - 0x8C341B44, // 01E2 GETMET R13 R13 K68 - 0x7C340200, // 01E3 CALL R13 1 - 0x8C341B45, // 01E4 GETMET R13 R13 K69 - 0x7C340200, // 01E5 CALL R13 1 - 0x8C341B51, // 01E6 GETMET R13 R13 K81 - 0x7C340200, // 01E7 CALL R13 1 - 0x60380008, // 01E8 GETGBL R14 G8 - 0x5C3C1000, // 01E9 MOVE R15 R8 - 0x7C380200, // 01EA CALL R14 1 - 0x7C2C0600, // 01EB CALL R11 3 - 0x58300010, // 01EC LDCONST R12 K16 - 0x7C240600, // 01ED CALL R9 3 - 0xB8260200, // 01EE GETNGBL R9 K1 - 0x8824132B, // 01EF GETMBR R9 R9 K43 - 0x900E3409, // 01F0 SETMBR R3 K26 R9 - 0x4C240000, // 01F1 LDNIL R9 - 0x80041200, // 01F2 RET 1 R9 - 0x70020036, // 01F3 JMP #022B - 0x54220009, // 01F4 LDINT R8 10 - 0x1C200E08, // 01F5 EQ R8 R7 R8 - 0x78220033, // 01F6 JMPF R8 #022B - 0x8C200506, // 01F7 GETMET R8 R2 K6 - 0x58280005, // 01F8 LDCONST R10 K5 - 0x7C200400, // 01F9 CALL R8 2 - 0x60240008, // 01FA GETGBL R9 G8 - 0x5C281000, // 01FB MOVE R10 R8 - 0x7C240200, // 01FC CALL R9 1 - 0x0026A409, // 01FD ADD R9 K82 R9 - 0x900E5809, // 01FE SETMBR R3 K44 R9 - 0x60240010, // 01FF GETGBL R9 G16 - 0x88280116, // 0200 GETMBR R10 R0 K22 - 0x88281530, // 0201 GETMBR R10 R10 K48 - 0x8C281553, // 0202 GETMET R10 R10 K83 - 0x7C280200, // 0203 CALL R10 1 - 0x7C240200, // 0204 CALL R9 1 - 0xA8020012, // 0205 EXBLK 0 #0219 - 0x5C281200, // 0206 MOVE R10 R9 - 0x7C280000, // 0207 CALL R10 0 - 0x8C2C1554, // 0208 GETMET R11 R10 K84 - 0x7C2C0200, // 0209 CALL R11 1 - 0x1C2C1608, // 020A EQ R11 R11 R8 - 0x782E000A, // 020B JMPF R11 #0217 - 0x8C2C1555, // 020C GETMET R11 R10 K85 - 0x7C2C0200, // 020D CALL R11 1 - 0xB82E4400, // 020E GETNGBL R11 K34 - 0x8C2C1756, // 020F GETMET R11 R11 K86 - 0x543607CF, // 0210 LDINT R13 2000 - 0x84380000, // 0211 CLOSURE R14 P0 - 0x7C2C0600, // 0212 CALL R11 3 - 0x502C0200, // 0213 LDBOOL R11 1 0 - 0xA0000000, // 0214 CLOSE R0 - 0xA8040001, // 0215 EXBLK 1 1 - 0x80041600, // 0216 RET 1 R11 - 0xA0240000, // 0217 CLOSE R9 - 0x7001FFEC, // 0218 JMP #0206 - 0x58240057, // 0219 LDCONST R9 K87 - 0xAC240200, // 021A CATCH R9 1 0 - 0xB0080000, // 021B RAISE 2 R0 R0 - 0xB8264400, // 021C GETNGBL R9 K34 - 0x8C24132C, // 021D GETMET R9 R9 K44 - 0x602C0008, // 021E GETGBL R11 G8 - 0x5C301000, // 021F MOVE R12 R8 - 0x7C2C0200, // 0220 CALL R11 1 - 0x002EB00B, // 0221 ADD R11 K88 R11 - 0x002C1759, // 0222 ADD R11 R11 K89 - 0x5830000E, // 0223 LDCONST R12 K14 - 0x7C240600, // 0224 CALL R9 3 - 0xB8260200, // 0225 GETNGBL R9 K1 - 0x8824135A, // 0226 GETMBR R9 R9 K90 - 0x900E3409, // 0227 SETMBR R3 K26 R9 - 0x4C240000, // 0228 LDNIL R9 - 0xA0000000, // 0229 CLOSE R0 - 0x80041200, // 022A RET 1 R9 - 0x7002009B, // 022B JMP #02C8 - 0x5422003B, // 022C LDINT R8 60 - 0x1C200C08, // 022D EQ R8 R6 R8 - 0x78220085, // 022E JMPF R8 #02B5 - 0x1C200F05, // 022F EQ R8 R7 K5 - 0x78220065, // 0230 JMPF R8 #0297 - 0x8C200506, // 0231 GETMET R8 R2 K6 - 0x58280005, // 0232 LDCONST R10 K5 - 0x7C200400, // 0233 CALL R8 2 - 0x8C240506, // 0234 GETMET R9 R2 K6 - 0x582C0007, // 0235 LDCONST R11 K7 - 0x7C240400, // 0236 CALL R9 2 - 0x8C280506, // 0237 GETMET R10 R2 K6 - 0x5830000E, // 0238 LDCONST R12 K14 - 0x7C280400, // 0239 CALL R10 2 - 0x8C2C0506, // 023A GETMET R11 R2 K6 - 0x58340010, // 023B LDCONST R13 K16 - 0x7C2C0400, // 023C CALL R11 2 - 0x8C300506, // 023D GETMET R12 R2 K6 - 0x543A0003, // 023E LDINT R14 4 - 0x7C300400, // 023F CALL R12 2 - 0xB8364400, // 0240 GETNGBL R13 K34 - 0x8C341B2C, // 0241 GETMET R13 R13 K44 - 0x603C0018, // 0242 GETGBL R15 G24 - 0x5840005B, // 0243 LDCONST R16 K91 - 0x5C441000, // 0244 MOVE R17 R8 - 0x8C481351, // 0245 GETMET R18 R9 K81 - 0x7C480200, // 0246 CALL R18 1 - 0x5C4C1400, // 0247 MOVE R19 R10 - 0x5C501600, // 0248 MOVE R20 R11 - 0x8C541951, // 0249 GETMET R21 R12 K81 - 0x7C540200, // 024A CALL R21 1 - 0x7C3C0C00, // 024B CALL R15 6 - 0x54420003, // 024C LDINT R16 4 - 0x7C340600, // 024D CALL R13 3 - 0x4C340000, // 024E LDNIL R13 - 0x1C34100D, // 024F EQ R13 R8 R13 - 0x7436000B, // 0250 JMPT R13 #025D - 0x4C340000, // 0251 LDNIL R13 - 0x1C34120D, // 0252 EQ R13 R9 R13 - 0x74360008, // 0253 JMPT R13 #025D - 0x4C340000, // 0254 LDNIL R13 - 0x1C34140D, // 0255 EQ R13 R10 R13 - 0x74360005, // 0256 JMPT R13 #025D - 0x4C340000, // 0257 LDNIL R13 - 0x1C34160D, // 0258 EQ R13 R11 R13 - 0x74360002, // 0259 JMPT R13 #025D - 0x4C340000, // 025A LDNIL R13 - 0x1C34180D, // 025B EQ R13 R12 R13 - 0x78360005, // 025C JMPF R13 #0263 - 0xB8360200, // 025D GETNGBL R13 K1 - 0x88341B5C, // 025E GETMBR R13 R13 K92 - 0x900E340D, // 025F SETMBR R3 K26 R13 + 0x8C741B4E, // 01CC GETMET R29 R13 K78 + 0x7C740200, // 01CD CALL R29 1 + 0x7C640800, // 01CE CALL R25 4 + 0x54660007, // 01CF LDINT R25 8 + 0x900E0819, // 01D0 SETMBR R3 K4 R25 + 0x80043000, // 01D1 RET 1 R24 + 0x70020066, // 01D2 JMP #023A + 0x54220008, // 01D3 LDINT R8 9 + 0x1C200E08, // 01D4 EQ R8 R7 R8 + 0x7822001E, // 01D5 JMPF R8 #01F5 + 0x8C200506, // 01D6 GETMET R8 R2 K6 + 0x58280005, // 01D7 LDCONST R10 K5 + 0x7C200400, // 01D8 CALL R8 2 + 0x8C24034F, // 01D9 GETMET R9 R1 K79 + 0x5C2C1000, // 01DA MOVE R11 R8 + 0x7C240400, // 01DB CALL R9 2 + 0xB8264400, // 01DC GETNGBL R9 K34 + 0x8C24132C, // 01DD GETMET R9 R9 K44 + 0x602C0018, // 01DE GETGBL R11 G24 + 0x58300050, // 01DF LDCONST R12 K80 + 0x88340312, // 01E0 GETMBR R13 R1 K18 + 0x8C341B51, // 01E1 GETMET R13 R13 K81 + 0x7C340200, // 01E2 CALL R13 1 + 0x8C341B44, // 01E3 GETMET R13 R13 K68 + 0x7C340200, // 01E4 CALL R13 1 + 0x8C341B45, // 01E5 GETMET R13 R13 K69 + 0x7C340200, // 01E6 CALL R13 1 + 0x8C341B52, // 01E7 GETMET R13 R13 K82 + 0x7C340200, // 01E8 CALL R13 1 + 0x60380008, // 01E9 GETGBL R14 G8 + 0x5C3C1000, // 01EA MOVE R15 R8 + 0x7C380200, // 01EB CALL R14 1 + 0x7C2C0600, // 01EC CALL R11 3 + 0x58300010, // 01ED LDCONST R12 K16 + 0x7C240600, // 01EE CALL R9 3 + 0xB8260200, // 01EF GETNGBL R9 K1 + 0x8824132B, // 01F0 GETMBR R9 R9 K43 + 0x900E3409, // 01F1 SETMBR R3 K26 R9 + 0x4C240000, // 01F2 LDNIL R9 + 0x80041200, // 01F3 RET 1 R9 + 0x70020044, // 01F4 JMP #023A + 0x54220009, // 01F5 LDINT R8 10 + 0x1C200E08, // 01F6 EQ R8 R7 R8 + 0x78220041, // 01F7 JMPF R8 #023A + 0x8C200506, // 01F8 GETMET R8 R2 K6 + 0x58280005, // 01F9 LDCONST R10 K5 + 0x7C200400, // 01FA CALL R8 2 + 0x60240008, // 01FB GETGBL R9 G8 + 0x5C281000, // 01FC MOVE R10 R8 + 0x7C240200, // 01FD CALL R9 1 + 0x0026A609, // 01FE ADD R9 K83 R9 + 0x900E5809, // 01FF SETMBR R3 K44 R9 + 0x60240010, // 0200 GETGBL R9 G16 + 0x88280116, // 0201 GETMBR R10 R0 K22 + 0x88281530, // 0202 GETMBR R10 R10 K48 + 0x8C281554, // 0203 GETMET R10 R10 K84 + 0x7C280200, // 0204 CALL R10 1 + 0x7C240200, // 0205 CALL R9 1 + 0xA8020020, // 0206 EXBLK 0 #0228 + 0x5C281200, // 0207 MOVE R10 R9 + 0x7C280000, // 0208 CALL R10 0 + 0x8C2C154E, // 0209 GETMET R11 R10 K78 + 0x7C2C0200, // 020A CALL R11 1 + 0x1C2C1608, // 020B EQ R11 R11 R8 + 0x782E0018, // 020C JMPF R11 #0226 + 0x8C2C1555, // 020D GETMET R11 R10 K85 + 0x7C2C0200, // 020E CALL R11 1 + 0xB82E4400, // 020F GETNGBL R11 K34 + 0x8C2C1756, // 0210 GETMET R11 R11 K86 + 0x543607CF, // 0211 LDINT R13 2000 + 0x84380000, // 0212 CLOSURE R14 P0 + 0x7C2C0600, // 0213 CALL R11 3 + 0x8C2C0B09, // 0214 GETMET R11 R5 K9 + 0x7C2C0200, // 0215 CALL R11 1 + 0x8C30170A, // 0216 GETMET R12 R11 K10 + 0x58380005, // 0217 LDCONST R14 K5 + 0x883C0B0B, // 0218 GETMBR R15 R5 K11 + 0xB8420200, // 0219 GETNGBL R16 K1 + 0x8840212B, // 021A GETMBR R16 R16 K43 + 0x7C300800, // 021B CALL R12 4 + 0x8C30170A, // 021C GETMET R12 R11 K10 + 0x58380007, // 021D LDCONST R14 K7 + 0x883C0B0B, // 021E GETMBR R15 R5 K11 + 0x5C401000, // 021F MOVE R16 R8 + 0x7C300800, // 0220 CALL R12 4 + 0x54320007, // 0221 LDINT R12 8 + 0x900E080C, // 0222 SETMBR R3 K4 R12 + 0xA0000000, // 0223 CLOSE R0 + 0xA8040001, // 0224 EXBLK 1 1 + 0x80041600, // 0225 RET 1 R11 + 0xA0240000, // 0226 CLOSE R9 + 0x7001FFDE, // 0227 JMP #0207 + 0x58240057, // 0228 LDCONST R9 K87 + 0xAC240200, // 0229 CATCH R9 1 0 + 0xB0080000, // 022A RAISE 2 R0 R0 + 0xB8264400, // 022B GETNGBL R9 K34 + 0x8C24132C, // 022C GETMET R9 R9 K44 + 0x602C0008, // 022D GETGBL R11 G8 + 0x5C301000, // 022E MOVE R12 R8 + 0x7C2C0200, // 022F CALL R11 1 + 0x002EB00B, // 0230 ADD R11 K88 R11 + 0x002C1759, // 0231 ADD R11 R11 K89 + 0x5830000E, // 0232 LDCONST R12 K14 + 0x7C240600, // 0233 CALL R9 3 + 0xB8260200, // 0234 GETNGBL R9 K1 + 0x8824135A, // 0235 GETMBR R9 R9 K90 + 0x900E3409, // 0236 SETMBR R3 K26 R9 + 0x4C240000, // 0237 LDNIL R9 + 0xA0000000, // 0238 CLOSE R0 + 0x80041200, // 0239 RET 1 R9 + 0x7002009B, // 023A JMP #02D7 + 0x5422003B, // 023B LDINT R8 60 + 0x1C200C08, // 023C EQ R8 R6 R8 + 0x78220085, // 023D JMPF R8 #02C4 + 0x1C200F05, // 023E EQ R8 R7 K5 + 0x78220065, // 023F JMPF R8 #02A6 + 0x8C200506, // 0240 GETMET R8 R2 K6 + 0x58280005, // 0241 LDCONST R10 K5 + 0x7C200400, // 0242 CALL R8 2 + 0x8C240506, // 0243 GETMET R9 R2 K6 + 0x582C0007, // 0244 LDCONST R11 K7 + 0x7C240400, // 0245 CALL R9 2 + 0x8C280506, // 0246 GETMET R10 R2 K6 + 0x5830000E, // 0247 LDCONST R12 K14 + 0x7C280400, // 0248 CALL R10 2 + 0x8C2C0506, // 0249 GETMET R11 R2 K6 + 0x58340010, // 024A LDCONST R13 K16 + 0x7C2C0400, // 024B CALL R11 2 + 0x8C300506, // 024C GETMET R12 R2 K6 + 0x543A0003, // 024D LDINT R14 4 + 0x7C300400, // 024E CALL R12 2 + 0xB8364400, // 024F GETNGBL R13 K34 + 0x8C341B2C, // 0250 GETMET R13 R13 K44 + 0x603C0018, // 0251 GETGBL R15 G24 + 0x5840005B, // 0252 LDCONST R16 K91 + 0x5C441000, // 0253 MOVE R17 R8 + 0x8C481352, // 0254 GETMET R18 R9 K82 + 0x7C480200, // 0255 CALL R18 1 + 0x5C4C1400, // 0256 MOVE R19 R10 + 0x5C501600, // 0257 MOVE R20 R11 + 0x8C541952, // 0258 GETMET R21 R12 K82 + 0x7C540200, // 0259 CALL R21 1 + 0x7C3C0C00, // 025A CALL R15 6 + 0x54420003, // 025B LDINT R16 4 + 0x7C340600, // 025C CALL R13 3 + 0x4C340000, // 025D LDNIL R13 + 0x1C34100D, // 025E EQ R13 R8 R13 + 0x7436000B, // 025F JMPT R13 #026C 0x4C340000, // 0260 LDNIL R13 - 0xA0000000, // 0261 CLOSE R0 - 0x80041A00, // 0262 RET 1 R13 - 0x6034000C, // 0263 GETGBL R13 G12 - 0x5C381200, // 0264 MOVE R14 R9 - 0x7C340200, // 0265 CALL R13 1 - 0x543A001F, // 0266 LDINT R14 32 - 0x543E0040, // 0267 LDINT R15 65 - 0x00381C0F, // 0268 ADD R14 R14 R15 - 0x20341A0E, // 0269 NE R13 R13 R14 - 0x7436000B, // 026A JMPT R13 #0277 - 0x6034000C, // 026B GETGBL R13 G12 - 0x5C381800, // 026C MOVE R14 R12 - 0x7C340200, // 026D CALL R13 1 - 0x543A000F, // 026E LDINT R14 16 - 0x14341A0E, // 026F LT R13 R13 R14 - 0x74360005, // 0270 JMPT R13 #0277 - 0x6034000C, // 0271 GETGBL R13 G12 - 0x5C381800, // 0272 MOVE R14 R12 - 0x7C340200, // 0273 CALL R13 1 - 0x543A001F, // 0274 LDINT R14 32 - 0x24341A0E, // 0275 GT R13 R13 R14 - 0x7836000A, // 0276 JMPF R13 #0282 - 0xB8364400, // 0277 GETNGBL R13 K34 - 0x8C341B2C, // 0278 GETMET R13 R13 K44 - 0x583C005D, // 0279 LDCONST R15 K93 - 0x5840000E, // 027A LDCONST R16 K14 - 0x7C340600, // 027B CALL R13 3 - 0xB8360200, // 027C GETNGBL R13 K1 - 0x88341B5E, // 027D GETMBR R13 R13 K94 - 0x900E340D, // 027E SETMBR R3 K26 R13 - 0x4C340000, // 027F LDNIL R13 - 0xA0000000, // 0280 CLOSE R0 - 0x80041A00, // 0281 RET 1 R13 - 0x5436001E, // 0282 LDINT R13 31 - 0x40360A0D, // 0283 CONNECT R13 K5 R13 - 0x9434120D, // 0284 GETIDX R13 R9 R13 - 0x543A001F, // 0285 LDINT R14 32 - 0x40381D40, // 0286 CONNECT R14 R14 K64 - 0x9438120E, // 0287 GETIDX R14 R9 R14 - 0x883C0116, // 0288 GETMBR R15 R0 K22 - 0x8C3C1F5F, // 0289 GETMET R15 R15 K95 - 0x5C441000, // 028A MOVE R17 R8 - 0x5C481600, // 028B MOVE R18 R11 - 0x5C4C1400, // 028C MOVE R19 R10 - 0x5C501800, // 028D MOVE R20 R12 - 0x5C541A00, // 028E MOVE R21 R13 - 0x5C581C00, // 028F MOVE R22 R14 - 0x8C5C0360, // 0290 GETMET R23 R1 K96 - 0x7C5C0200, // 0291 CALL R23 1 - 0x7C3C1000, // 0292 CALL R15 8 - 0x503C0200, // 0293 LDBOOL R15 1 0 - 0xA0000000, // 0294 CLOSE R0 - 0x80041E00, // 0295 RET 1 R15 - 0x7002001C, // 0296 JMP #02B4 - 0x1C200F07, // 0297 EQ R8 R7 K7 - 0x78220012, // 0298 JMPF R8 #02AC - 0x8C200506, // 0299 GETMET R8 R2 K6 - 0x58280005, // 029A LDCONST R10 K5 - 0x7C200400, // 029B CALL R8 2 - 0xB8264400, // 029C GETNGBL R9 K34 - 0x8C24132C, // 029D GETMET R9 R9 K44 - 0x602C0008, // 029E GETGBL R11 G8 - 0x5C301000, // 029F MOVE R12 R8 - 0x7C2C0200, // 02A0 CALL R11 1 - 0x002EC20B, // 02A1 ADD R11 K97 R11 - 0x58300010, // 02A2 LDCONST R12 K16 - 0x7C240600, // 02A3 CALL R9 3 - 0x88240116, // 02A4 GETMBR R9 R0 K22 - 0x8C241362, // 02A5 GETMET R9 R9 K98 - 0x5C2C1000, // 02A6 MOVE R11 R8 - 0x7C240400, // 02A7 CALL R9 2 - 0x50240200, // 02A8 LDBOOL R9 1 0 - 0xA0000000, // 02A9 CLOSE R0 - 0x80041200, // 02AA RET 1 R9 - 0x70020007, // 02AB JMP #02B4 - 0x1C200F0E, // 02AC EQ R8 R7 K14 - 0x78220005, // 02AD JMPF R8 #02B4 - 0x88200116, // 02AE GETMBR R8 R0 K22 - 0x8C201163, // 02AF GETMET R8 R8 K99 - 0x7C200200, // 02B0 CALL R8 1 - 0x50200200, // 02B1 LDBOOL R8 1 0 - 0xA0000000, // 02B2 CLOSE R0 - 0x80041000, // 02B3 RET 1 R8 - 0x70020012, // 02B4 JMP #02C8 - 0x54220029, // 02B5 LDINT R8 42 - 0x1C200C08, // 02B6 EQ R8 R6 R8 - 0x78220005, // 02B7 JMPF R8 #02BE - 0x1C200F05, // 02B8 EQ R8 R7 K5 - 0x78220002, // 02B9 JMPF R8 #02BD - 0x50200200, // 02BA LDBOOL R8 1 0 - 0xA0000000, // 02BB CLOSE R0 - 0x80041000, // 02BC RET 1 R8 - 0x70020009, // 02BD JMP #02C8 - 0x60200003, // 02BE GETGBL R8 G3 - 0x5C240000, // 02BF MOVE R9 R0 - 0x7C200200, // 02C0 CALL R8 1 - 0x8C201164, // 02C1 GETMET R8 R8 K100 - 0x5C280200, // 02C2 MOVE R10 R1 - 0x5C2C0400, // 02C3 MOVE R11 R2 - 0x5C300600, // 02C4 MOVE R12 R3 - 0x7C200800, // 02C5 CALL R8 4 - 0xA0000000, // 02C6 CLOSE R0 - 0x80041000, // 02C7 RET 1 R8 - 0xA0000000, // 02C8 CLOSE R0 - 0x80000000, // 02C9 RET 0 + 0x1C34120D, // 0261 EQ R13 R9 R13 + 0x74360008, // 0262 JMPT R13 #026C + 0x4C340000, // 0263 LDNIL R13 + 0x1C34140D, // 0264 EQ R13 R10 R13 + 0x74360005, // 0265 JMPT R13 #026C + 0x4C340000, // 0266 LDNIL R13 + 0x1C34160D, // 0267 EQ R13 R11 R13 + 0x74360002, // 0268 JMPT R13 #026C + 0x4C340000, // 0269 LDNIL R13 + 0x1C34180D, // 026A EQ R13 R12 R13 + 0x78360005, // 026B JMPF R13 #0272 + 0xB8360200, // 026C GETNGBL R13 K1 + 0x88341B5C, // 026D GETMBR R13 R13 K92 + 0x900E340D, // 026E SETMBR R3 K26 R13 + 0x4C340000, // 026F LDNIL R13 + 0xA0000000, // 0270 CLOSE R0 + 0x80041A00, // 0271 RET 1 R13 + 0x6034000C, // 0272 GETGBL R13 G12 + 0x5C381200, // 0273 MOVE R14 R9 + 0x7C340200, // 0274 CALL R13 1 + 0x543A001F, // 0275 LDINT R14 32 + 0x543E0040, // 0276 LDINT R15 65 + 0x00381C0F, // 0277 ADD R14 R14 R15 + 0x20341A0E, // 0278 NE R13 R13 R14 + 0x7436000B, // 0279 JMPT R13 #0286 + 0x6034000C, // 027A GETGBL R13 G12 + 0x5C381800, // 027B MOVE R14 R12 + 0x7C340200, // 027C CALL R13 1 + 0x543A000F, // 027D LDINT R14 16 + 0x14341A0E, // 027E LT R13 R13 R14 + 0x74360005, // 027F JMPT R13 #0286 + 0x6034000C, // 0280 GETGBL R13 G12 + 0x5C381800, // 0281 MOVE R14 R12 + 0x7C340200, // 0282 CALL R13 1 + 0x543A001F, // 0283 LDINT R14 32 + 0x24341A0E, // 0284 GT R13 R13 R14 + 0x7836000A, // 0285 JMPF R13 #0291 + 0xB8364400, // 0286 GETNGBL R13 K34 + 0x8C341B2C, // 0287 GETMET R13 R13 K44 + 0x583C005D, // 0288 LDCONST R15 K93 + 0x5840000E, // 0289 LDCONST R16 K14 + 0x7C340600, // 028A CALL R13 3 + 0xB8360200, // 028B GETNGBL R13 K1 + 0x88341B5E, // 028C GETMBR R13 R13 K94 + 0x900E340D, // 028D SETMBR R3 K26 R13 + 0x4C340000, // 028E LDNIL R13 + 0xA0000000, // 028F CLOSE R0 + 0x80041A00, // 0290 RET 1 R13 + 0x5436001E, // 0291 LDINT R13 31 + 0x40360A0D, // 0292 CONNECT R13 K5 R13 + 0x9434120D, // 0293 GETIDX R13 R9 R13 + 0x543A001F, // 0294 LDINT R14 32 + 0x40381D40, // 0295 CONNECT R14 R14 K64 + 0x9438120E, // 0296 GETIDX R14 R9 R14 + 0x883C0116, // 0297 GETMBR R15 R0 K22 + 0x8C3C1F5F, // 0298 GETMET R15 R15 K95 + 0x5C441000, // 0299 MOVE R17 R8 + 0x5C481600, // 029A MOVE R18 R11 + 0x5C4C1400, // 029B MOVE R19 R10 + 0x5C501800, // 029C MOVE R20 R12 + 0x5C541A00, // 029D MOVE R21 R13 + 0x5C581C00, // 029E MOVE R22 R14 + 0x8C5C0360, // 029F GETMET R23 R1 K96 + 0x7C5C0200, // 02A0 CALL R23 1 + 0x7C3C1000, // 02A1 CALL R15 8 + 0x503C0200, // 02A2 LDBOOL R15 1 0 + 0xA0000000, // 02A3 CLOSE R0 + 0x80041E00, // 02A4 RET 1 R15 + 0x7002001C, // 02A5 JMP #02C3 + 0x1C200F07, // 02A6 EQ R8 R7 K7 + 0x78220012, // 02A7 JMPF R8 #02BB + 0x8C200506, // 02A8 GETMET R8 R2 K6 + 0x58280005, // 02A9 LDCONST R10 K5 + 0x7C200400, // 02AA CALL R8 2 + 0xB8264400, // 02AB GETNGBL R9 K34 + 0x8C24132C, // 02AC GETMET R9 R9 K44 + 0x602C0008, // 02AD GETGBL R11 G8 + 0x5C301000, // 02AE MOVE R12 R8 + 0x7C2C0200, // 02AF CALL R11 1 + 0x002EC20B, // 02B0 ADD R11 K97 R11 + 0x58300010, // 02B1 LDCONST R12 K16 + 0x7C240600, // 02B2 CALL R9 3 + 0x88240116, // 02B3 GETMBR R9 R0 K22 + 0x8C241362, // 02B4 GETMET R9 R9 K98 + 0x5C2C1000, // 02B5 MOVE R11 R8 + 0x7C240400, // 02B6 CALL R9 2 + 0x50240200, // 02B7 LDBOOL R9 1 0 + 0xA0000000, // 02B8 CLOSE R0 + 0x80041200, // 02B9 RET 1 R9 + 0x70020007, // 02BA JMP #02C3 + 0x1C200F0E, // 02BB EQ R8 R7 K14 + 0x78220005, // 02BC JMPF R8 #02C3 + 0x88200116, // 02BD GETMBR R8 R0 K22 + 0x8C201163, // 02BE GETMET R8 R8 K99 + 0x7C200200, // 02BF CALL R8 1 + 0x50200200, // 02C0 LDBOOL R8 1 0 + 0xA0000000, // 02C1 CLOSE R0 + 0x80041000, // 02C2 RET 1 R8 + 0x70020012, // 02C3 JMP #02D7 + 0x54220029, // 02C4 LDINT R8 42 + 0x1C200C08, // 02C5 EQ R8 R6 R8 + 0x78220005, // 02C6 JMPF R8 #02CD + 0x1C200F05, // 02C7 EQ R8 R7 K5 + 0x78220002, // 02C8 JMPF R8 #02CC + 0x50200200, // 02C9 LDBOOL R8 1 0 + 0xA0000000, // 02CA CLOSE R0 + 0x80041000, // 02CB RET 1 R8 + 0x70020009, // 02CC JMP #02D7 + 0x60200003, // 02CD GETGBL R8 G3 + 0x5C240000, // 02CE MOVE R9 R0 + 0x7C200200, // 02CF CALL R8 1 + 0x8C201164, // 02D0 GETMET R8 R8 K100 + 0x5C280200, // 02D1 MOVE R10 R1 + 0x5C2C0400, // 02D2 MOVE R11 R2 + 0x5C300600, // 02D3 MOVE R12 R3 + 0x7C200800, // 02D4 CALL R8 4 + 0xA0000000, // 02D5 CLOSE R0 + 0x80041000, // 02D6 RET 1 R8 + 0xA0000000, // 02D7 CLOSE R0 + 0x80000000, // 02D8 RET 0 }) ) );