Matter add option to disable bridge mode (#18992)

This commit is contained in:
s-hadinger 2023-06-28 14:49:47 +02:00 committed by GitHub
parent 504b51a9b4
commit 952811b4eb
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 4971 additions and 4919 deletions

View File

@ -6,6 +6,7 @@ All notable changes to this project will be documented in this file.
## [13.0.0.1] ## [13.0.0.1]
### Added ### Added
- Command ``Delay -1`` to wait until next second (#18984) - Command ``Delay -1`` to wait until next second (#18984)
- Matter add option to disable bridge mode
### Breaking Changed ### Breaking Changed
- Berry `bool( [] )` and `bool( {} )` now evaluate as `false` (#18986) - Berry `bool( [] )` and `bool( {} )` now evaluate as `false` (#18986)

View File

@ -63,6 +63,7 @@ class Matter_Device
var root_discriminator # as `int` var root_discriminator # as `int`
var root_passcode # as `int` var root_passcode # as `int`
var ipv4only # advertize only IPv4 addresses (no IPv6) var ipv4only # advertize only IPv4 addresses (no IPv6)
var disable_bridge_mode # default is bridge mode, this flag disables this mode for some non-compliant controllers
var next_ep # next endpoint to be allocated for bridge, start at 1 var next_ep # next endpoint to be allocated for bridge, start at 1
# context for PBKDF # context for PBKDF
var root_iterations # PBKDF number of iterations var root_iterations # PBKDF number of iterations
@ -92,6 +93,7 @@ class Matter_Device
self.next_ep = 1 # start at endpoint 1 for dynamically allocated endpoints self.next_ep = 1 # start at endpoint 1 for dynamically allocated endpoints
self.root_salt = crypto.random(16) self.root_salt = crypto.random(16)
self.ipv4only = false self.ipv4only = false
self.disable_bridge_mode = false
self.load_param() self.load_param()
self.sessions = matter.Session_Store(self) self.sessions = matter.Session_Store(self)
@ -628,7 +630,7 @@ class Matter_Device
import json import json
self.update_remotes_info() # update self.plugins_config_remotes self.update_remotes_info() # update self.plugins_config_remotes
var j = format('{"distinguish":%i,"passcode":%i,"ipv4only":%s,"nextep":%i', self.root_discriminator, self.root_passcode, self.ipv4only ? 'true':'false', self.next_ep) var j = format('{"distinguish":%i,"passcode":%i,"ipv4only":%s,"disable_bridge_mode":%s,"nextep":%i', self.root_discriminator, self.root_passcode, self.ipv4only ? 'true':'false', self.disable_bridge_mode ? 'true':'false', self.next_ep)
if self.plugins_persist if self.plugins_persist
j += ',"config":' j += ',"config":'
j += json.dump(self.plugins_config) j += json.dump(self.plugins_config)
@ -693,6 +695,7 @@ class Matter_Device
self.root_discriminator = j.find("distinguish", self.root_discriminator) self.root_discriminator = j.find("distinguish", self.root_discriminator)
self.root_passcode = j.find("passcode", self.root_passcode) self.root_passcode = j.find("passcode", self.root_passcode)
self.ipv4only = bool(j.find("ipv4only", false)) self.ipv4only = bool(j.find("ipv4only", false))
self.disable_bridge_mode = bool(j.find("disable_bridge_mode", false))
self.next_ep = j.find("nextep", self.next_ep) self.next_ep = j.find("nextep", self.next_ep)
self.plugins_config = j.find("config") self.plugins_config = j.find("config")
if self.plugins_config != nil if self.plugins_config != nil

View File

@ -104,7 +104,7 @@ class Matter_Plugin_Device : Matter_Plugin
d1.add_TLV(1, TLV.U2, types[dt]) # Revision d1.add_TLV(1, TLV.U2, types[dt]) # Revision
end end
# if fabric is not Alexa # if fabric is not Alexa
if self.NON_BRIDGE_VENDOR.find(session.get_admin_vendor()) == nil if (self.NON_BRIDGE_VENDOR.find(session.get_admin_vendor()) == nil) && (!self.device.disable_bridge_mode)
var d1 = dtl.add_struct() var d1 = dtl.add_struct()
d1.add_TLV(0, TLV.U2, 0x0013) # DeviceType d1.add_TLV(0, TLV.U2, 0x0013) # DeviceType
d1.add_TLV(1, TLV.U2, 1) # Revision d1.add_TLV(1, TLV.U2, 1) # Revision

View File

@ -197,6 +197,8 @@ class Matter_UI
webserver.content_send(f"<input type='number' min='0' max='4095' name='discriminator' value='{self.device.root_discriminator:i}'>") webserver.content_send(f"<input type='number' min='0' max='4095' name='discriminator' value='{self.device.root_discriminator:i}'>")
var ipv4only_checked = self.device.ipv4only ? " checked" : "" var ipv4only_checked = self.device.ipv4only ? " checked" : ""
webserver.content_send(f"<p><input type='checkbox' name='ipv4'{ipv4only_checked}>IPv4 only</p>") webserver.content_send(f"<p><input type='checkbox' name='ipv4'{ipv4only_checked}>IPv4 only</p>")
var disable_bridge_mode_checked = self.device.disable_bridge_mode ? " checked" : ""
webserver.content_send(f"<p><input type='checkbox' name='nobridge'{disable_bridge_mode_checked}>Disable bridge mode (not recommended)</p>")
webserver.content_send("<p></p><button name='passcode' class='button bgrn'>Change</button></form></p>" webserver.content_send("<p></p><button name='passcode' class='button bgrn'>Change</button></form></p>"
"<p></p></fieldset><p></p>") "<p></p></fieldset><p></p>")
@ -755,6 +757,7 @@ class Matter_UI
self.device.root_discriminator = int(webserver.arg("discriminator")) self.device.root_discriminator = int(webserver.arg("discriminator"))
end end
self.device.ipv4only = webserver.arg("ipv4") == 'on' self.device.ipv4only = webserver.arg("ipv4") == 'on'
self.device.disable_bridge_mode = webserver.arg("nobridge") == 'on'
self.device.save_param() self.device.save_param()
#- and force restart -# #- and force restart -#

View File

@ -210,7 +210,7 @@ be_local_closure(Matter_Plugin_Device_read_attribute, /* name */
0, /* has sup protos */ 0, /* has sup protos */
NULL, /* no sub protos */ NULL, /* no sub protos */
1, /* has constants */ 1, /* has constants */
( &(const bvalue[35]) { /* constants */ ( &(const bvalue[37]) { /* constants */
/* K0 */ be_nested_str_weak(matter), /* K0 */ be_nested_str_weak(matter),
/* K1 */ be_nested_str_weak(TLV), /* K1 */ be_nested_str_weak(TLV),
/* K2 */ be_nested_str_weak(cluster), /* K2 */ be_nested_str_weak(cluster),
@ -231,25 +231,27 @@ be_local_closure(Matter_Plugin_Device_read_attribute, /* name */
/* K17 */ be_nested_str_weak(NON_BRIDGE_VENDOR), /* K17 */ be_nested_str_weak(NON_BRIDGE_VENDOR),
/* K18 */ be_nested_str_weak(find), /* K18 */ be_nested_str_weak(find),
/* K19 */ be_nested_str_weak(get_admin_vendor), /* K19 */ be_nested_str_weak(get_admin_vendor),
/* K20 */ be_nested_str_weak(read_attribute), /* K20 */ be_nested_str_weak(device),
/* K21 */ be_nested_str_weak(string), /* K21 */ be_nested_str_weak(disable_bridge_mode),
/* K22 */ be_nested_str_weak(UTF1), /* K22 */ be_nested_str_weak(read_attribute),
/* K23 */ be_nested_str_weak(tasmota), /* K23 */ be_nested_str_weak(string),
/* K24 */ be_nested_str_weak(cmd), /* K24 */ be_nested_str_weak(UTF1),
/* K25 */ be_nested_str_weak(DeviceName), /* K25 */ be_nested_str_weak(tasmota),
/* K26 */ be_nested_str_weak(get_name), /* K26 */ be_nested_str_weak(cmd),
/* K27 */ be_nested_str_weak(Status_X202), /* K27 */ be_nested_str_weak(DeviceName),
/* K28 */ be_nested_str_weak(StatusFWR), /* K28 */ be_nested_str_weak(get_name),
/* K29 */ be_nested_str_weak(Version), /* K29 */ be_nested_str_weak(Status_X202),
/* K30 */ be_nested_str_weak(_X28), /* K30 */ be_nested_str_weak(StatusFWR),
/* K31 */ be_nested_str_weak(wifi), /* K31 */ be_nested_str_weak(Version),
/* K32 */ be_nested_str_weak(mac), /* K32 */ be_nested_str_weak(_X28),
/* K33 */ be_nested_str_weak(), /* K33 */ be_nested_str_weak(wifi),
/* K34 */ be_nested_str_weak(BOOL), /* K34 */ be_nested_str_weak(mac),
/* K35 */ be_nested_str_weak(),
/* K36 */ be_nested_str_weak(BOOL),
}), }),
be_str_weak(read_attribute), be_str_weak(read_attribute),
&be_const_str_solidified, &be_const_str_solidified,
( &(const binstruction[258]) { /* code */ ( &(const binstruction[261]) { /* code */
0xB80E0000, // 0000 GETNGBL R3 K0 0xB80E0000, // 0000 GETNGBL R3 K0
0x880C0701, // 0001 GETMBR R3 R3 K1 0x880C0701, // 0001 GETMBR R3 R3 K1
0x88100502, // 0002 GETMBR R4 R2 K2 0x88100502, // 0002 GETMBR R4 R2 K2
@ -289,7 +291,7 @@ be_local_closure(Matter_Plugin_Device_read_attribute, /* name */
0x54260003, // 0024 LDINT R9 4 0x54260003, // 0024 LDINT R9 4
0x7C180600, // 0025 CALL R6 3 0x7C180600, // 0025 CALL R6 3
0x80040C00, // 0026 RET 1 R6 0x80040C00, // 0026 RET 1 R6
0x700200D8, // 0027 JMP #0101 0x700200DB, // 0027 JMP #0104
0x541A0003, // 0028 LDINT R6 4 0x541A0003, // 0028 LDINT R6 4
0x1C180806, // 0029 EQ R6 R4 R6 0x1C180806, // 0029 EQ R6 R4 R6
0x781A0016, // 002A JMPF R6 #0042 0x781A0016, // 002A JMPF R6 #0042
@ -315,7 +317,7 @@ be_local_closure(Matter_Plugin_Device_read_attribute, /* name */
0x54260003, // 003E LDINT R9 4 0x54260003, // 003E LDINT R9 4
0x7C180600, // 003F CALL R6 3 0x7C180600, // 003F CALL R6 3
0x80040C00, // 0040 RET 1 R6 0x80040C00, // 0040 RET 1 R6
0x700200BE, // 0041 JMP #0101 0x700200C1, // 0041 JMP #0104
0x541A0004, // 0042 LDINT R6 5 0x541A0004, // 0042 LDINT R6 5
0x1C180806, // 0043 EQ R6 R4 R6 0x1C180806, // 0043 EQ R6 R4 R6
0x781A0011, // 0044 JMPF R6 #0057 0x781A0011, // 0044 JMPF R6 #0057
@ -336,12 +338,12 @@ be_local_closure(Matter_Plugin_Device_read_attribute, /* name */
0x54260003, // 0053 LDINT R9 4 0x54260003, // 0053 LDINT R9 4
0x7C180600, // 0054 CALL R6 3 0x7C180600, // 0054 CALL R6 3
0x80040C00, // 0055 RET 1 R6 0x80040C00, // 0055 RET 1 R6
0x700200A9, // 0056 JMP #0101 0x700200AC, // 0056 JMP #0104
0x541A001C, // 0057 LDINT R6 29 0x541A001C, // 0057 LDINT R6 29
0x1C180806, // 0058 EQ R6 R4 R6 0x1C180806, // 0058 EQ R6 R4 R6
0x781A003A, // 0059 JMPF R6 #0095 0x781A003D, // 0059 JMPF R6 #0098
0x1C180B05, // 005A EQ R6 R5 K5 0x1C180B05, // 005A EQ R6 R5 K5
0x781A002F, // 005B JMPF R6 #008C 0x781A0032, // 005B JMPF R6 #008F
0x8C18070B, // 005C GETMET R6 R3 K11 0x8C18070B, // 005C GETMET R6 R3 K11
0x7C180200, // 005D CALL R6 1 0x7C180200, // 005D CALL R6 1
0x881C010C, // 005E GETMBR R7 R0 K12 0x881C010C, // 005E GETMBR R7 R0 K12
@ -375,139 +377,142 @@ be_local_closure(Matter_Plugin_Device_read_attribute, /* name */
0x7C200400, // 007A CALL R8 2 0x7C200400, // 007A CALL R8 2
0x4C240000, // 007B LDNIL R9 0x4C240000, // 007B LDNIL R9
0x1C201009, // 007C EQ R8 R8 R9 0x1C201009, // 007C EQ R8 R8 R9
0x7822000B, // 007D JMPF R8 #008A 0x7822000E, // 007D JMPF R8 #008D
0x8C200D0E, // 007E GETMET R8 R6 K14 0x88200114, // 007E GETMBR R8 R0 K20
0x7C200200, // 007F CALL R8 1 0x88201115, // 007F GETMBR R8 R8 K21
0x8C24110F, // 0080 GETMET R9 R8 K15 0x7422000B, // 0080 JMPT R8 #008D
0x582C0005, // 0081 LDCONST R11 K5 0x8C200D0E, // 0081 GETMET R8 R6 K14
0x88300707, // 0082 GETMBR R12 R3 K7 0x7C200200, // 0082 CALL R8 1
0x54360012, // 0083 LDINT R13 19 0x8C24110F, // 0083 GETMET R9 R8 K15
0x7C240800, // 0084 CALL R9 4 0x582C0005, // 0084 LDCONST R11 K5
0x8C24110F, // 0085 GETMET R9 R8 K15 0x88300707, // 0085 GETMBR R12 R3 K7
0x582C0008, // 0086 LDCONST R11 K8 0x54360012, // 0086 LDINT R13 19
0x88300707, // 0087 GETMBR R12 R3 K7 0x7C240800, // 0087 CALL R9 4
0x58340008, // 0088 LDCONST R13 K8 0x8C24110F, // 0088 GETMET R9 R8 K15
0x7C240800, // 0089 CALL R9 4 0x582C0008, // 0089 LDCONST R11 K8
0x80040C00, // 008A RET 1 R6 0x88300707, // 008A GETMBR R12 R3 K7
0x70020007, // 008B JMP #0094 0x58340008, // 008B LDCONST R13 K8
0x60180003, // 008C GETGBL R6 G3 0x7C240800, // 008C CALL R9 4
0x5C1C0000, // 008D MOVE R7 R0 0x80040C00, // 008D RET 1 R6
0x7C180200, // 008E CALL R6 1 0x70020007, // 008E JMP #0097
0x8C180D14, // 008F GETMET R6 R6 K20 0x60180003, // 008F GETGBL R6 G3
0x5C200200, // 0090 MOVE R8 R1 0x5C1C0000, // 0090 MOVE R7 R0
0x5C240400, // 0091 MOVE R9 R2 0x7C180200, // 0091 CALL R6 1
0x7C180600, // 0092 CALL R6 3 0x8C180D16, // 0092 GETMET R6 R6 K22
0x80040C00, // 0093 RET 1 R6 0x5C200200, // 0093 MOVE R8 R1
0x7002006B, // 0094 JMP #0101 0x5C240400, // 0094 MOVE R9 R2
0x541A0038, // 0095 LDINT R6 57 0x7C180600, // 0095 CALL R6 3
0x1C180806, // 0096 EQ R6 R4 R6 0x80040C00, // 0096 RET 1 R6
0x781A0060, // 0097 JMPF R6 #00F9 0x7002006B, // 0097 JMP #0104
0xA41A2A00, // 0098 IMPORT R6 K21 0x541A0038, // 0098 LDINT R6 57
0x1C1C0B04, // 0099 EQ R7 R5 K4 0x1C180806, // 0099 EQ R6 R4 R6
0x781E000A, // 009A JMPF R7 #00A6 0x781A0060, // 009A JMPF R6 #00FC
0x8C1C0706, // 009B GETMET R7 R3 K6 0xA41A2E00, // 009B IMPORT R6 K23
0x88240716, // 009C GETMBR R9 R3 K22 0x1C1C0B04, // 009C EQ R7 R5 K4
0xB82A2E00, // 009D GETNGBL R10 K23 0x781E000A, // 009D JMPF R7 #00A9
0x8C281518, // 009E GETMET R10 R10 K24 0x8C1C0706, // 009E GETMET R7 R3 K6
0x58300019, // 009F LDCONST R12 K25 0x88240718, // 009F GETMBR R9 R3 K24
0x50340200, // 00A0 LDBOOL R13 1 0 0xB82A3200, // 00A0 GETNGBL R10 K25
0x7C280600, // 00A1 CALL R10 3 0x8C28151A, // 00A1 GETMET R10 R10 K26
0x94281519, // 00A2 GETIDX R10 R10 K25 0x5830001B, // 00A2 LDCONST R12 K27
0x7C1C0600, // 00A3 CALL R7 3 0x50340200, // 00A3 LDBOOL R13 1 0
0x80040E00, // 00A4 RET 1 R7 0x7C280600, // 00A4 CALL R10 3
0x70020051, // 00A5 JMP #00F8 0x9428151B, // 00A5 GETIDX R10 R10 K27
0x541E0004, // 00A6 LDINT R7 5 0x7C1C0600, // 00A6 CALL R7 3
0x1C1C0A07, // 00A7 EQ R7 R5 R7 0x80040E00, // 00A7 RET 1 R7
0x781E0006, // 00A8 JMPF R7 #00B0 0x70020051, // 00A8 JMP #00FB
0x8C1C0706, // 00A9 GETMET R7 R3 K6 0x541E0004, // 00A9 LDINT R7 5
0x88240716, // 00AA GETMBR R9 R3 K22 0x1C1C0A07, // 00AA EQ R7 R5 R7
0x8C28011A, // 00AB GETMET R10 R0 K26 0x781E0006, // 00AB JMPF R7 #00B3
0x7C280200, // 00AC CALL R10 1 0x8C1C0706, // 00AC GETMET R7 R3 K6
0x7C1C0600, // 00AD CALL R7 3 0x88240718, // 00AD GETMBR R9 R3 K24
0x80040E00, // 00AE RET 1 R7 0x8C28011C, // 00AE GETMET R10 R0 K28
0x70020047, // 00AF JMP #00F8 0x7C280200, // 00AF CALL R10 1
0x541E0009, // 00B0 LDINT R7 10 0x7C1C0600, // 00B0 CALL R7 3
0x1C1C0A07, // 00B1 EQ R7 R5 R7 0x80040E00, // 00B1 RET 1 R7
0x781E0015, // 00B2 JMPF R7 #00C9 0x70020047, // 00B2 JMP #00FB
0xB81E2E00, // 00B3 GETNGBL R7 K23 0x541E0009, // 00B3 LDINT R7 10
0x8C1C0F18, // 00B4 GETMET R7 R7 K24 0x1C1C0A07, // 00B4 EQ R7 R5 R7
0x5824001B, // 00B5 LDCONST R9 K27 0x781E0015, // 00B5 JMPF R7 #00CC
0x50280200, // 00B6 LDBOOL R10 1 0 0xB81E3200, // 00B6 GETNGBL R7 K25
0x7C1C0600, // 00B7 CALL R7 3 0x8C1C0F1A, // 00B7 GETMET R7 R7 K26
0x941C0F1C, // 00B8 GETIDX R7 R7 K28 0x5824001D, // 00B8 LDCONST R9 K29
0x941C0F1D, // 00B9 GETIDX R7 R7 K29 0x50280200, // 00B9 LDBOOL R10 1 0
0x8C200D12, // 00BA GETMET R8 R6 K18 0x7C1C0600, // 00BA CALL R7 3
0x5C280E00, // 00BB MOVE R10 R7 0x941C0F1E, // 00BB GETIDX R7 R7 K30
0x582C001E, // 00BC LDCONST R11 K30 0x941C0F1F, // 00BC GETIDX R7 R7 K31
0x7C200600, // 00BD CALL R8 3 0x8C200D12, // 00BD GETMET R8 R6 K18
0x24241105, // 00BE GT R9 R8 K5 0x5C280E00, // 00BE MOVE R10 R7
0x78260002, // 00BF JMPF R9 #00C3 0x582C0020, // 00BF LDCONST R11 K32
0x04241108, // 00C0 SUB R9 R8 K8 0x7C200600, // 00C0 CALL R8 3
0x40260A09, // 00C1 CONNECT R9 K5 R9 0x24241105, // 00C1 GT R9 R8 K5
0x941C0E09, // 00C2 GETIDX R7 R7 R9 0x78260002, // 00C2 JMPF R9 #00C6
0x8C240706, // 00C3 GETMET R9 R3 K6 0x04241108, // 00C3 SUB R9 R8 K8
0x882C0716, // 00C4 GETMBR R11 R3 K22 0x40260A09, // 00C4 CONNECT R9 K5 R9
0x5C300E00, // 00C5 MOVE R12 R7 0x941C0E09, // 00C5 GETIDX R7 R7 R9
0x7C240600, // 00C6 CALL R9 3 0x8C240706, // 00C6 GETMET R9 R3 K6
0x80041200, // 00C7 RET 1 R9 0x882C0718, // 00C7 GETMBR R11 R3 K24
0x7002002E, // 00C8 JMP #00F8 0x5C300E00, // 00C8 MOVE R12 R7
0x541E000E, // 00C9 LDINT R7 15 0x7C240600, // 00C9 CALL R9 3
0x1C1C0A07, // 00CA EQ R7 R5 R7 0x80041200, // 00CA RET 1 R9
0x781E000B, // 00CB JMPF R7 #00D8 0x7002002E, // 00CB JMP #00FB
0x8C1C0706, // 00CC GETMET R7 R3 K6 0x541E000E, // 00CC LDINT R7 15
0x88240716, // 00CD GETMBR R9 R3 K22 0x1C1C0A07, // 00CD EQ R7 R5 R7
0xB82A2E00, // 00CE GETNGBL R10 K23 0x781E000B, // 00CE JMPF R7 #00DB
0x8C28151F, // 00CF GETMET R10 R10 K31 0x8C1C0706, // 00CF GETMET R7 R3 K6
0x7C280200, // 00D0 CALL R10 1 0x88240718, // 00D0 GETMBR R9 R3 K24
0x8C281512, // 00D1 GETMET R10 R10 K18 0xB82A3200, // 00D1 GETNGBL R10 K25
0x58300020, // 00D2 LDCONST R12 K32 0x8C281521, // 00D2 GETMET R10 R10 K33
0x58340021, // 00D3 LDCONST R13 K33 0x7C280200, // 00D3 CALL R10 1
0x7C280600, // 00D4 CALL R10 3 0x8C281512, // 00D4 GETMET R10 R10 K18
0x7C1C0600, // 00D5 CALL R7 3 0x58300022, // 00D5 LDCONST R12 K34
0x80040E00, // 00D6 RET 1 R7 0x58340023, // 00D6 LDCONST R13 K35
0x7002001F, // 00D7 JMP #00F8 0x7C280600, // 00D7 CALL R10 3
0x541E0010, // 00D8 LDINT R7 17 0x7C1C0600, // 00D8 CALL R7 3
0x1C1C0A07, // 00D9 EQ R7 R5 R7 0x80040E00, // 00D9 RET 1 R7
0x781E0005, // 00DA JMPF R7 #00E1 0x7002001F, // 00DA JMP #00FB
0x8C1C0706, // 00DB GETMET R7 R3 K6 0x541E0010, // 00DB LDINT R7 17
0x88240722, // 00DC GETMBR R9 R3 K34 0x1C1C0A07, // 00DC EQ R7 R5 R7
0x58280008, // 00DD LDCONST R10 K8 0x781E0005, // 00DD JMPF R7 #00E4
0x7C1C0600, // 00DE CALL R7 3 0x8C1C0706, // 00DE GETMET R7 R3 K6
0x80040E00, // 00DF RET 1 R7 0x88240724, // 00DF GETMBR R9 R3 K36
0x70020016, // 00E0 JMP #00F8 0x58280008, // 00E0 LDCONST R10 K8
0x541E0011, // 00E1 LDINT R7 18 0x7C1C0600, // 00E1 CALL R7 3
0x1C1C0A07, // 00E2 EQ R7 R5 R7 0x80040E00, // 00E2 RET 1 R7
0x781E000B, // 00E3 JMPF R7 #00F0 0x70020016, // 00E3 JMP #00FB
0x8C1C0706, // 00E4 GETMET R7 R3 K6 0x541E0011, // 00E4 LDINT R7 18
0x88240716, // 00E5 GETMBR R9 R3 K22 0x1C1C0A07, // 00E5 EQ R7 R5 R7
0xB82A2E00, // 00E6 GETNGBL R10 K23 0x781E000B, // 00E6 JMPF R7 #00F3
0x8C28151F, // 00E7 GETMET R10 R10 K31 0x8C1C0706, // 00E7 GETMET R7 R3 K6
0x7C280200, // 00E8 CALL R10 1 0x88240718, // 00E8 GETMBR R9 R3 K24
0x8C281512, // 00E9 GETMET R10 R10 K18 0xB82A3200, // 00E9 GETNGBL R10 K25
0x58300020, // 00EA LDCONST R12 K32 0x8C281521, // 00EA GETMET R10 R10 K33
0x58340021, // 00EB LDCONST R13 K33 0x7C280200, // 00EB CALL R10 1
0x7C280600, // 00EC CALL R10 3 0x8C281512, // 00EC GETMET R10 R10 K18
0x7C1C0600, // 00ED CALL R7 3 0x58300022, // 00ED LDCONST R12 K34
0x80040E00, // 00EE RET 1 R7 0x58340023, // 00EE LDCONST R13 K35
0x70020007, // 00EF JMP #00F8 0x7C280600, // 00EF CALL R10 3
0x601C0003, // 00F0 GETGBL R7 G3 0x7C1C0600, // 00F0 CALL R7 3
0x5C200000, // 00F1 MOVE R8 R0 0x80040E00, // 00F1 RET 1 R7
0x7C1C0200, // 00F2 CALL R7 1 0x70020007, // 00F2 JMP #00FB
0x8C1C0F14, // 00F3 GETMET R7 R7 K20 0x601C0003, // 00F3 GETGBL R7 G3
0x5C240200, // 00F4 MOVE R9 R1 0x5C200000, // 00F4 MOVE R8 R0
0x5C280400, // 00F5 MOVE R10 R2 0x7C1C0200, // 00F5 CALL R7 1
0x7C1C0600, // 00F6 CALL R7 3 0x8C1C0F16, // 00F6 GETMET R7 R7 K22
0x80040E00, // 00F7 RET 1 R7 0x5C240200, // 00F7 MOVE R9 R1
0x70020007, // 00F8 JMP #0101 0x5C280400, // 00F8 MOVE R10 R2
0x60180003, // 00F9 GETGBL R6 G3 0x7C1C0600, // 00F9 CALL R7 3
0x5C1C0000, // 00FA MOVE R7 R0 0x80040E00, // 00FA RET 1 R7
0x7C180200, // 00FB CALL R6 1 0x70020007, // 00FB JMP #0104
0x8C180D14, // 00FC GETMET R6 R6 K20 0x60180003, // 00FC GETGBL R6 G3
0x5C200200, // 00FD MOVE R8 R1 0x5C1C0000, // 00FD MOVE R7 R0
0x5C240400, // 00FE MOVE R9 R2 0x7C180200, // 00FE CALL R6 1
0x7C180600, // 00FF CALL R6 3 0x8C180D16, // 00FF GETMET R6 R6 K22
0x80040C00, // 0100 RET 1 R6 0x5C200200, // 0100 MOVE R8 R1
0x80000000, // 0101 RET 0 0x5C240400, // 0101 MOVE R9 R2
0x7C180600, // 0102 CALL R6 3
0x80040C00, // 0103 RET 1 R6
0x80000000, // 0104 RET 0
}) })
) )
); );

File diff suppressed because it is too large Load Diff