Re: [mh] mqtt_discovery
Dave Neudoerffer <[email protected]> Tue, 17 Feb 2026 18:55:51 -0500
| Newsgroups | gmane.comp.misc.misterhouse.user |
|---|---|
| Message-ID | <CAOFx8LMxmhx62N8z_BobrRKcNJcnemSFJLfkHgVYLODaTAZJjw@mail.gmail.com> |
--00000000000060c983064b0dd0ed
Content-Type: multipart/alternative; boundary="00000000000060c982064b0dd0eb"
--00000000000060c982064b0dd0eb
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
Hey Brian and Howard, et all,
So, Brian, I got your first 2 problems fixed. The set('3%') was a bug when
the state and brightness topics are the same -- fixed. The other problem
was that the simple template processing I put in didn't handle a template
of the form {{ <value_true> IF <condition> ELSE <value_false>}}. I added
some support for that specific template form.
Your sensor problem above is weird. The discovery message bills the door
sensor as a switch. That sort of makes sense -- would send ON and OFF when
the door is opened and closed. But the messages that get sent don't match
the discovery info at all. A quick search (thanx gemini) would indicate
that zwave JS is likely defining multiple mqtt devices for the sensor. I
think that the specific discovery message you sent is actually a
configuration object that you can use to control the behaviour of the LED
on device. There must be other discovery objects as well for the sensor.
It looks like -- door_state=3D22 means open and door_state=3D23 means close=
d --
and a web search confirms that. The *discovered device for door_state* sho=
uld
be able to handle the messages.
If not, you could use the new MQTT_RAWITEM that I just added to define a
binary_sensor to handle the messages using hand coded discovery info:
MQTT_RAWITEM, Downstairs_Hall_Closet_Sensor, mqtt_discovery2,
app/zwave-js-ui/config/binary_sensor/
Downstairs_Hall-Closet_Sensor/closet_door_sensor/config,
{"value_template":"{{ "ON" if value_json.value=3D=3D22 else "OFF" }}","
state_topic":"app/zwave-js-ui/
Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Access_Control/Door_s=
tate"}
(I have tried this definition with the messages above and they are
processed correctly into on/off for the binary_sensor, but again, if you
can find the discovery message for the actual door_state, it should work
too.)
*<IMPORTANT POINT>*
This conversation does raise an important point. Almost all mqtt discovery
stuff published by devices and other software, is specifically setup to be
consumed by Home Assistant. I HAVE NOT implemented the entire Home
Assistant discovery language in Misterhouse, nor do I intend to. I am sure
that Home Assistant would process these zwave JS discovery messages very
well. As per Howards comments earlier, if you were to setup Home
Assistant, the devices would show up there. You could then use the
HA_Item.pm module in Misterhouse to pull in the Home Assistant entities
that you want and run your misterhouse logic against those items. This is
actually easier to setup than it sounds.
I have attached the latest mqtt files. There are a lot of changes here,
because this is my working version for optionally supporting the new HA
device discovery variation of mqtt discovery. I am running this code on 4
MH instances, and all seems good so far. I will submit a pull request
soon. You need to replace all 3 in your installation (take backup copies
first :-). If you have any problems, give me a shout.
*<ASIDE>*
The reason I have implemented the HA device discovery variation of mqtt
discovery is that I have been trying out using the matter_bridge to expose
devices from HA to matter and thus to google (or alexa or apple). The
matter bridge works easiest if you can put a label on the HA devices that
you want exposed. However, you can't put labels on raw HA entities --
hence putting in the HA device support. Also, I still use Misterhouse for
hosting my Insteon devices because I find the MH support better than HA,
and I define all kinds of utility switches, scenes, and variables in
Misterhouse that I expose to HA using mqtt. Exposing those things as
devices allows me to then expose the HA devices to matter via the
matter_bridge and control them easily with Google home/assistant. It is an
alternative to the Google/Alexa support in Misterhouse or Home Assistant,
which is cloud based and a pain to setup.
Dave
On Sun, Feb 15, 2026 at 6:16=E2=80=AFPM Brian M <misterhouse-ng1@silverflas=
h.net>
wrote:
> Here's another one that might make more sense to you than to me. I'm usin=
g
> a Zooz ZSE41 door sensor. mqtt_discovery.pm produced the following code
> to define it:
>
> MQTT_DISCOVEREDITEM, Downstairs_Hall_Closet_Sensor, mqtt_discovery2,
> app/zwave-js-ui/config/switch/Downstairs_Hall-Closet_Sensor/config_switch=
_1/config,
> {"payload_off":"0","payload_on":"1","value_template":"{{ value_json.value
> }}","command_topic":"app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/config=
uration/endpoint_0/LED_Indicator/set","enabled_by_default":false,"entity_ca=
tegory":"config","state_topic":"app/zwave-js-ui/Downstairs_Hall/Closet_Sens=
or/configuration/endpoint_0/LED_Indicator","availability":[{"payload_availa=
ble":"true","payload_not_available":"false","topic":"app/zwave-js-ui/Downst=
airs_Hall/Closet_Sensor/status","value_template":"{{'true'
> if value_json.value else
> 'false'}}"},{"topic":"app/zwave-js-ui/_CLIENTS/ZWAVE_GATEWAY-zwave-js-ui/=
status","value_template":"{{'online'
> if value_json.value else
> 'offline'}}"},{"payload_available":"true","payload_not_available":"false"=
,"topic":"app/zwave-js-ui/driver/status"}],"availability_mode":"all","devic=
e":{"identifiers":["zwavejs2mqtt_0xc92945ec_node19"],"manufacturer":"Zooz",=
"model":"Open/Close
> XS Sensor
> (ZSE41)","name":"Downstairs_Hall-Closet_Sensor","sw_version":"2.30.0"},"n=
ame":"Downstairs_Hall_Closet_Sensor","unique_id":"zwavejs2mqtt_0xc92945ec_1=
9-112-0-1"}
>
>
> Here's a door open/door close sequence.
>
> # Initial state: door closed
>
> # Opening door.
> 2026-02-15 15:02:48 [MQTT D1]: mqttserver Rcv'd: R:0
> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive'
> M:'{"time":1771196567992,"value":1771196567992}'
> 2026-02-15 15:02:48 [MQTT D2]: UNHANDLED MESSAGE
> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
> {"time":1771196567992,"value":1771196567992}
> 2026-02-15 15:02:48 [MQTT D1]: mqttserver Rcv'd: R:0
> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/=
alarmType'
> M:'{"time":1771196567993,"value":0,"nodeName":"Closet_Sensor","nodeLocati=
on":"Downstairs_Hall"}'
> 2026-02-15 15:02:48 [MQTT D2]: UNHANDLED MESSAGE
> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/ala=
rmType
> --
> {"time":1771196567993,"value":0,"nodeName":"Closet_Sensor","nodeLocation"=
:"Downstairs_Hall"}
> 2026-02-15 15:02:48 [MQTT D1]: mqttserver Rcv'd: R:0
> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/=
alarmLevel'
> M:'{"time":1771196567994,"value":0,"nodeName":"Closet_Sensor","nodeLocati=
on":"Downstairs_Hall"}'
> 2026-02-15 15:02:48 [MQTT D2]: UNHANDLED MESSAGE
> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/ala=
rmLevel
> --
> {"time":1771196567994,"value":0,"nodeName":"Closet_Sensor","nodeLocation"=
:"Downstairs_Hall"}
> 2026-02-15 15:02:48 [MQTT D1]: mqttserver Rcv'd: R:0
> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/=
Access_Control/Door_state_simple'
> M:'{"time":1771196567995,"value":22,"nodeName":"Closet_Sensor","nodeLocat=
ion":"Downstairs_Hall"}'
> 2026-02-15 15:02:48 [MQTT D2]: UNHANDLED MESSAGE
> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Acc=
ess_Control/Door_state_simple
> --
> {"time":1771196567995,"value":22,"nodeName":"Closet_Sensor","nodeLocation=
":"Downstairs_Hall"}
> 2026-02-15 15:02:48 [MQTT D1]: mqttserver Rcv'd: R:0
> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/=
Access_Control/Door_state'
> M:'{"time":1771196567996,"value":22,"nodeName":"Closet_Sensor","nodeLocat=
ion":"Downstairs_Hall"}'
> 2026-02-15 15:02:48 [MQTT D2]: UNHANDLED MESSAGE
> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Acc=
ess_Control/Door_state
> --
> {"time":1771196567996,"value":22,"nodeName":"Closet_Sensor","nodeLocation=
":"Downstairs_Hall"}
> 2026-02-15 15:02:48 [MQTT D1]: mqttserver Rcv'd: R:0
> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive'
> M:'{"time":1771196568241,"value":1771196568016}'
> 2026-02-15 15:02:48 [MQTT D2]: UNHANDLED MESSAGE
> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
> {"time":1771196568241,"value":1771196568016}
>
> # Closing door.
> 2026-02-15 15:03:10 [MQTT D1]: mqttserver Rcv'd: R:0
> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive'
> M:'{"time":1771196590395,"value":1771196590395}'
> 2026-02-15 15:03:10 [MQTT D2]: UNHANDLED MESSAGE
> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
> {"time":1771196590395,"value":1771196590395}
> 2026-02-15 15:03:10 [MQTT D1]: mqttserver Rcv'd: R:0
> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/=
alarmType'
> M:'{"time":1771196590396,"value":0,"nodeName":"Closet_Sensor","nodeLocati=
on":"Downstairs_Hall"}'
> 2026-02-15 15:03:10 [MQTT D2]: UNHANDLED MESSAGE
> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/ala=
rmType
> --
> {"time":1771196590396,"value":0,"nodeName":"Closet_Sensor","nodeLocation"=
:"Downstairs_Hall"}
> 2026-02-15 15:03:10 [MQTT D1]: mqttserver Rcv'd: R:0
> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/=
alarmLevel'
> M:'{"time":1771196590397,"value":0,"nodeName":"Closet_Sensor","nodeLocati=
on":"Downstairs_Hall"}'
> 2026-02-15 15:03:10 [MQTT D2]: UNHANDLED MESSAGE
> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/ala=
rmLevel
> --
> {"time":1771196590397,"value":0,"nodeName":"Closet_Sensor","nodeLocation"=
:"Downstairs_Hall"}
> 2026-02-15 15:03:10 [MQTT D1]: mqttserver Rcv'd: R:0
> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/=
Access_Control/Door_state_simple'
> M:'{"time":1771196590398,"value":23,"nodeName":"Closet_Sensor","nodeLocat=
ion":"Downstairs_Hall"}'
> 2026-02-15 15:03:10 [MQTT D2]: UNHANDLED MESSAGE
> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Acc=
ess_Control/Door_state_simple
> --
> {"time":1771196590398,"value":23,"nodeName":"Closet_Sensor","nodeLocation=
":"Downstairs_Hall"}
> 2026-02-15 15:03:10 [MQTT D1]: mqttserver Rcv'd: R:0
> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/=
Access_Control/Door_state'
> M:'{"time":1771196590398,"value":23,"nodeName":"Closet_Sensor","nodeLocat=
ion":"Downstairs_Hall"}'
> 2026-02-15 15:03:10 [MQTT D2]: UNHANDLED MESSAGE
> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Acc=
ess_Control/Door_state
> --
> {"time":1771196590398,"value":23,"nodeName":"Closet_Sensor","nodeLocation=
":"Downstairs_Hall"}
> 2026-02-15 15:03:10 [MQTT D1]: mqttserver Rcv'd: R:0
> T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive'
> M:'{"time":1771196590646,"value":1771196590419}'
> 2026-02-15 15:03:10 [MQTT D2]: UNHANDLED MESSAGE
> app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
> {"time":1771196590646,"value":1771196590419}
>
> The fields that indicate the door status don't appear in the discovery
> data that I can see at all. The MH object always shows the state to be
> "on", regardless of the actual door open/closed status.
>
> -B.
>
>
>
>
>
> On 2/14/26 11:17, Brian M wrote:
>
> Thanks, Dave. That would be great.
>
> -B.
>
> On 2/14/26 10:42, Dave Neudoerffer wrote:
>
> Thanx for the trace Brian. The discovery topics and templates being used
> are slightly different from anything I have seen before. It shouldn't be
> too hard to enhance the MH discovery to handle this. The Jinja templates
> are a bit of a nuisance, but I will fudge something... It will take me a
> few days to get to this...
>
> Dave
>
> On Fri, Feb 13, 2026 at 7:01=E2=80=AFPM Brian M <misterhouse-ng1@silverfl=
ash.net>
> wrote:
>
>> Thanks, Dave. Mostly I'm in good shape, but I've got some edge cases.
>>
>> My primary problem at the moment seems to be that I can't set the
>> brightness for my ZWave dimmer switches via ZWave-JS-UI. The correct MQT=
T
>> string in one instance is:
>>
>>
>> app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/tar=
getValue/set
>>
>> Writing "3" to that MQTT topic (via MQTT-Explorer) causes the light to
>> come on at 3%, as expected. However, in MH setting it to 3, '3', or '3%'
>> results in the light being turned on 100%.
>>
>> I can't tell if this is a problem in with the discovery itself, or the
>> implementation of of setting the MQTT_DISCOVEREDITEM. Here are some
>> details:
>>
>> The MQTT discovered_item entry:
>>
>> MQTT_DISCOVEREDITEM, Upstairs_Landing_Stairs, mqtt_discovery2,
>> app/zwave-js-ui/config/light/Upstairs_Landing-Stairs/dimmer/config,
>> {"command_topic":"app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multile=
vel/endpoint_0/targetValue/set","state_topic":"app/zwave-js-ui/Upstairs_Lan=
ding/Stairs/switch_multilevel/endpoint_0/currentValue","state_value_templat=
e":"{{
>> \"OFF\" if value_json.value =3D=3D 0 else \"ON\"
>> }}","brightness_command_topic":"app/zwave-js-ui/Upstairs_Landing/Stairs/=
switch_multilevel/endpoint_0/targetValue/set","brightness_scale":99,"bright=
ness_state_topic":"app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multileve=
l/endpoint_0/currentValue","brightness_value_template":"{{
>> value_json.value
>> }}","on_command_type":"brightness","supported_color_modes":["brightness"=
],"availability":[{"payload_available":"true","payload_not_available":"fals=
e","topic":"app/zwave-js-ui/Upstairs_Landing/Stairs/status","value_template=
":"{{'true'
>> if value_json.value else
>> 'false'}}"},{"topic":"app/zwave-js-ui/_CLIENTS/ZWAVE_GATEWAY-zwave-js-ui=
/status","value_template":"{{'online'
>> if value_json.value else
>> 'offline'}}"},{"payload_available":"true","payload_not_available":"false=
","topic":"app/zwave-js-ui/driver/status"}],"availability_mode":"all","devi=
ce":{"identifiers":["zwavejs2mqtt_0xc92945ec_node259"],"manufacturer":"Zooz=
","model":"Dimmer
>> (ZEN72)","name":"Upstairs_Landing-Stairs","sw_version":"4.0.1"},"name":"=
Upstairs_Landing_Stairs","unique_id":"zwavejs2mqtt_0xc92945ec_259-38-0-curr=
entValue"}
>>
>> Relevant log messages (MQTT debug level 2):
>>
>> 2026-02-13 15:54:59 [MQTT D2]: Pending $Upstairs_Landing_Stairs-->set(
>> 3%, , ) cleared
>> 2026-02-13 15:54:59 [MQTT D1]: unable to process template
>> {{"OFF"ifvalue_json.value=3D=3D0else"ON"}}
>> 2026-02-13 15:54:59 [MQTT D2]: fishing template value out of json with
>> '$value =3D $value_json->{value}'
>> 2026-02-13 15:54:59 [MQTT D1]: remote item MQTT to MH
>> Upstairs_Landing_Stairs set(95%, '')
>> 2026-02-13 15:54:59 [MQTT D2]: remote item $Upstairs_Landing_Stairs
>> received message R:0
>> T:app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/c=
urrentValue
>> M:{"time":1771026899727,"value":95,"nodeName":"Stairs","nodeLocation":"U=
pstairs_Landing"}
>> 2026-02-13 15:54:59 [MQTT D1]: unable to process template
>> {{"OFF"ifvalue_json.value=3D=3D0else"ON"}}
>> 2026-02-13 15:54:59 [MQTT D2]: fishing template value out of json with
>> '$value =3D $value_json->{value}'
>> 2026-02-13 15:54:59 [MQTT D1]: remote item MQTT to MH
>> Upstairs_Landing_Stairs set(95%, 'mqtt')
>> 2026-02-13 15:54:59 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/=
duration'
>> M:'{"time":1771026899728,"value":{"value":0,"unit":"seconds"},"nodeName"=
:"Stairs","nodeLocation":"Upstairs_Landing"}'
>> 2026-02-13 15:54:59 [MQTT D2]: UNHANDLED MESSAGE
>> app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/dur=
ation
>> --
>> {"time":1771026899728,"value":{"value":0,"unit":"seconds"},"nodeName":"S=
tairs","nodeLocation":"Upstairs_Landing"}
>> 2026-02-13 15:54:59 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/=
targetValue'
>> M:'{"time":1771026899728,"value":95,"nodeName":"Stairs","nodeLocation":"=
Upstairs_Landing"}'
>> 2026-02-13 15:54:59 [MQTT D2]: UNHANDLED MESSAGE
>> app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/tar=
getValue
>> --
>> {"time":1771026899728,"value":95,"nodeName":"Stairs","nodeLocation":"Ups=
tairs_Landing"}
>> 2026-02-13 15:54:59 [MQTT D1]: mqttserver Rcv'd: R:0
>> T:'app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/=
currentValue'
>> M:'{"time":1771026899858,"value":95,"nodeName":"Stairs","nodeLocation":"=
Upstairs_Landing"}'
>> 2026-02-13 15:54:59 [MQTT D2]: remote item $Upstairs_Landing_Stairs
>> received message R:0
>> T:app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/c=
urrentValue
>> M:{"time":1771026899858,"value":95,"nodeName":"Stairs","nodeLocation":"U=
pstairs_Landing"}
>> 2026-02-13 15:54:59 [MQTT D1]: unable to process template
>> {{"OFF"ifvalue_json.value=3D=3D0else"ON"}}
>> 2026-02-13 15:54:59 [MQTT D2]: fishing template value out of json with
>> '$value =3D $value_json->{value}'
>> 2026-02-13 15:54:59 [MQTT D1]: remote item MQTT to MH
>> Upstairs_Landing_Stairs set(95%, 'mqtt')
>> 2026-02-13 15:54:59 [MQTT D2]: remote item $Upstairs_Landing_Stairs
>> received message R:0
>> T:app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/c=
urrentValue
>> M:{"time":1771026899858,"value":95,"nodeName":"Stairs","nodeLocation":"U=
pstairs_Landing"}
>> 2026-02-13 15:54:59 [MQTT D1]: unable to process template
>> {{"OFF"ifvalue_json.value=3D=3D0else"ON"}}
>> 2026-02-13 15:54:59 [MQTT D2]: fishing template value out of json with
>> '$value =3D $value_json->{value}'
>> 2026-02-13 15:54:59 [MQTT D1]: remote item MQTT to MH
>> Upstairs_Landing_Stairs set(95%, 'mqtt')
>>
>>
>> Clearly it's not happy, but I haven't been able to chase down the root
>> cause. BTW, the "95%" mentioned in the logs was the switch's existing
>> brightness level before I tried to change it.
>>
>> Hopefully, this is clearer to you than to me.
>>
>> -B.
>>
>>
>>
>>
>> On 2/13/26 15:08, Dave Neudoerffer wrote:
>>
>> You are correct Brian. HA_Item is about mirroring home assistant
>> entities. Howard uses HA to host most of his devices and MH for
>> automations using HA_Items. Without a HA service, HA_Item makes no sense=
.
>>
>> In implementing mqtt_items, I had a few different sources of mqtt
>> devices, but not a huge variety. No did not have any zwave2mqtt stuff. I
>> have used the zigbee2mqtt stuff. I am actually in the process of enhanc=
ing
>> the MH discovery stuff to handle the new HA device discovery methodology=
.
>> If there is something I can help with, let me know.
>>
>> Dave
>>
>>
>>
>
>
--00000000000060c982064b0dd0eb
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">Hey Brian and Howard, et all,<div><br></div><div>So, Brian=
, I got your first 2 problems fixed.=C2=A0 The set('3%') was a bug =
when the state and brightness topics are the same -- fixed.=C2=A0 The other=
problem was that the simple template processing I put in didn't handle=
a template of the form {{ <value_true> IF <condition> ELSE <=
;value_false>}}.=C2=A0 I added some support for that specific template f=
orm.=C2=A0=C2=A0</div><div><br></div><div>Your sensor problem above is weir=
d.=C2=A0 The discovery message bills the door sensor as a switch.=C2=A0 Tha=
t sort of makes sense -- would send ON and OFF when the door is opened and =
closed.=C2=A0 But the messages that get sent don't match the discovery =
info at all.=C2=A0 A quick search (thanx gemini) would indicate that zwave =
JS is likely defining multiple mqtt devices for the sensor.=C2=A0 I think t=
hat the specific discovery message you=C2=A0sent is actually a configuratio=
n object that you can use to control the behaviour of the LED on device.=C2=
=A0 There must be other discovery objects as well for the sensor.=C2=A0 It =
looks like -- door_state=3D22 means open and door_state=3D23 means closed -=
- and a web search confirms that.=C2=A0 The <b>discovered device for door_s=
tate</b>=C2=A0should be able to handle the messages.=C2=A0=C2=A0</div><div>=
<br></div><div>If not, you could use the new MQTT_RAWITEM that I just added=
to define a binary_sensor to handle the messages using hand coded discover=
y info:</div><div><span style=3D"font-family:monospace">MQTT_RAWITEM, Downs=
tairs_Hall_Closet_Sensor, mqtt_discovery2, app/zwave-js-ui/config/binary_se=
nsor/</span><span style=3D"font-family:monospace">Downstairs_Hall-Closet_Se=
nsor/closet_door_sensor</span><span style=3D"font-family:monospace">/config=
,=C2=A0</span></div><div><span style=3D"font-family:monospace">{</span><spa=
n style=3D"font-family:monospace">"value_template":"{{ "=
;ON" if value_json.value=3D=3D22 else "OFF" }}",</span>=
<span style=3D"font-family:monospace">"</span><span style=3D"font-fami=
ly:monospace">state_topic":"app/zwave-js-ui/</span><span style=3D=
"font-family:monospace">Downstairs_Hall/Closet_Sensor/notification/endpoint=
_0/Access_Control/Door_state"}</span></div><div>(I have tried this def=
inition with the messages above and they are processed correctly into on/of=
f for the binary_sensor, but again, if you can find the=C2=A0discovery mess=
age for the actual door_state, it should work too.)</div><div><br></div><di=
v><br></div><div><b><IMPORTANT POINT></b></div><div>This conversation=
does raise an important point.=C2=A0 Almost all mqtt discovery stuff publi=
shed by devices and other software, is specifically setup to be consumed by=
Home Assistant.=C2=A0 I HAVE NOT implemented the entire Home Assistant dis=
covery language in Misterhouse, nor do I intend to.=C2=A0 I am sure that Ho=
me Assistant would process these zwave JS discovery messages very well.=C2=
=A0 As per Howards comments earlier, if you were to setup Home Assistant, t=
he devices would show up there.=C2=A0 You could then use the HA_Item.pm mod=
ule in Misterhouse to pull in the Home Assistant entities that you want and=
run your misterhouse logic against those items.=C2=A0 =C2=A0This is actual=
ly easier to setup than it sounds.</div><div><br></div><div>I have attached=
the latest mqtt files.=C2=A0 There are a lot of changes here, because this=
is my working version for optionally supporting the new HA device discover=
y variation of mqtt discovery.=C2=A0 I am running this code on 4 MH instanc=
es, and all seems good so far.=C2=A0 I will submit a pull request soon.=C2=
=A0 =C2=A0You need to replace all 3 in your installation (take backup copie=
s first :-).=C2=A0 If you have any problems, give me a shout.</div><div><br=
></div><div><b><ASIDE></b></div><div>The reason I have implemented th=
e HA device discovery variation of mqtt discovery is that I have been tryin=
g out using the matter_bridge to expose devices from HA to matter and thus =
to google (or alexa or apple).=C2=A0 The matter bridge works easiest if you=
can put a label on the HA devices that you want exposed.=C2=A0 However, yo=
u can't put labels on raw HA entities -- hence putting in the HA device=
support.=C2=A0 Also, I still use Misterhouse for hosting my Insteon device=
s because I find the MH support better than HA, and I define all kinds of u=
tility switches, scenes, and variables in Misterhouse that I expose to HA u=
sing mqtt.=C2=A0 Exposing those things as devices allows me to then expose =
the HA devices to matter via the matter_bridge and control them easily with=
Google home/assistant.=C2=A0 It is an alternative to the Google/Alexa supp=
ort in Misterhouse or Home Assistant, which is cloud based and a pain to se=
tup.=C2=A0=C2=A0</div><div><br></div><div>Dave</div></div><br><div class=3D=
"gmail_quote gmail_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">O=
n Sun, Feb 15, 2026 at 6:16=E2=80=AFPM Brian M <<a href=3D"mailto:mister=
[email protected]">[email protected]</a>> wrote:<b=
r></div><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex=
;border-left:1px solid rgb(204,204,204);padding-left:1ex"><u></u>
=20
=20
=20
<div>
<div>Here's another one that might make more
sense to you than to me. I'm using a Zooz ZSE41 door sensor.
<a href=3D"http://mqtt_discovery.pm" target=3D"_blank">mqtt_discovery=
.pm</a> produced the following code to define it:</div>
<blockquote>
<div><font face=3D"monospace">MQTT_DISCOVEREDITEM,
Downstairs_Hall_Closet_Sensor, mqtt_discovery2,
app/zwave-js-ui/config/switch/Downstairs_Hall-Closet_Sensor/config_switch_1=
/config,
{"payload_off":"0","payload_on":&qu=
ot;1","value_template":"{{
value_json.value
}}","command_topic":"app/zwave-js-ui/Downstairs_Hall/Cl=
oset_Sensor/configuration/endpoint_0/LED_Indicator/set","enabled_=
by_default":false,"entity_category":"config","=
;state_topic":"app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/conf=
iguration/endpoint_0/LED_Indicator","availability":[{"p=
ayload_available":"true","payload_not_available":&=
quot;false","topic":"app/zwave-js-ui/Downstairs_Hall/Cl=
oset_Sensor/status","value_template":"{{'true'
if value_json.value else
'false'}}"},{"topic":"app/zwave-js-ui/_CLIENTS/=
ZWAVE_GATEWAY-zwave-js-ui/status","value_template":"{{&=
#39;online'
if value_json.value else
'offline'}}"},{"payload_available":"true",=
"payload_not_available":"false","topic":"=
;app/zwave-js-ui/driver/status"}],"availability_mode":"=
all","device":{"identifiers":["zwavejs2mqtt_0=
xc92945ec_node19"],"manufacturer":"Zooz","mod=
el":"Open/Close
XS Sensor
(ZSE41)","name":"Downstairs_Hall-Closet_Sensor",&q=
uot;sw_version":"2.30.0"},"name":"Downstairs_=
Hall_Closet_Sensor","unique_id":"zwavejs2mqtt_0xc92945e=
c_19-112-0-1"}<br>
</font></div>
</blockquote>
<div><br>
</div>
<div>Here's a door open/door close
sequence.=C2=A0</div>
<div><br>
</div>
<div>
<blockquote><font face=3D"monospace"># Initial state: door closed</fo=
nt><br>
<br>
<font face=3D"monospace"># Opening door.</font><br>
<font face=3D"monospace">2026-02-15 15:02:48 [MQTT D1]: mqttserver
Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActiv=
e</a>'
M:'{"time":1771196567992,"value":17711965=
67992}'</font><br>
<font face=3D"monospace">2026-02-15 15:02:48 [MQTT D2]: UNHANDLED
MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
{"time":1771196567992,"value":1771196567992}<=
/font><br>
<font face=3D"monospace">2026-02-15 15:02:48 [MQTT D1]: mqttserver
Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/alarmType</a>'
M:'{"time":1771196567993,"value":0,"nodeName&q=
uot;:"Closet_Sensor","nodeLocation":"Downstairs_Ha=
ll"}'</font><br>
<font face=3D"monospace">2026-02-15 15:02:48 [MQTT D2]: UNHANDLED
MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/alarm=
Type
--
{"time":1771196567993,"value":0,"nodeName":&q=
uot;Closet_Sensor","nodeLocation":"Downstairs_Hall"=
;}</font><br>
<font face=3D"monospace">2026-02-15 15:02:48 [MQTT D1]: mqttserver
Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/alarmLevel</a>'
M:'{"time":1771196567994,"value":0,"nodeName&q=
uot;:"Closet_Sensor","nodeLocation":"Downstairs_Ha=
ll"}'</font><br>
<font face=3D"monospace">2026-02-15 15:02:48 [MQTT D2]: UNHANDLED
MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/alarm=
Level
--
{"time":1771196567994,"value":0,"nodeName":&q=
uot;Closet_Sensor","nodeLocation":"Downstairs_Hall"=
;}</font><br>
<font face=3D"monospace">2026-02-15 15:02:48 [MQTT D1]: mqttserver
Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/Access_Control/Door_state_simple</a>'
M:'{"time":1771196567995,"value":22,"nodeName&=
quot;:"Closet_Sensor","nodeLocation":"Downstairs_H=
all"}'</font><br>
<font face=3D"monospace">2026-02-15 15:02:48 [MQTT D2]: UNHANDLED
MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Acces=
s_Control/Door_state_simple
--
{"time":1771196567995,"value":22,"nodeName":&=
quot;Closet_Sensor","nodeLocation":"Downstairs_Hall&quo=
t;}</font><br>
<font face=3D"monospace">2026-02-15 15:02:48 [MQTT D1]: mqttserver
Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/Access_Control/Door_state</a>'
M:'{"time":1771196567996,"value":22,"nodeName&=
quot;:"Closet_Sensor","nodeLocation":"Downstairs_H=
all"}'</font><br>
<font face=3D"monospace">2026-02-15 15:02:48 [MQTT D2]: UNHANDLED
MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Acces=
s_Control/Door_state
--
{"time":1771196567996,"value":22,"nodeName":&=
quot;Closet_Sensor","nodeLocation":"Downstairs_Hall&quo=
t;}</font><br>
<font face=3D"monospace">2026-02-15 15:02:48 [MQTT D1]: mqttserver
Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActiv=
e</a>'
M:'{"time":1771196568241,"value":17711965=
68016}'</font><br>
<font face=3D"monospace">2026-02-15 15:02:48 [MQTT D2]: UNHANDLED
MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
{"time":1771196568241,"value":1771196568016}<=
/font><br>
<br>
<font face=3D"monospace"># Closing door.</font><br>
<font face=3D"monospace">2026-02-15 15:03:10 [MQTT D1]: mqttserver
Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActiv=
e</a>'
M:'{"time":1771196590395,"value":17711965=
90395}'</font><br>
<font face=3D"monospace">2026-02-15 15:03:10 [MQTT D2]: UNHANDLED
MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
{"time":1771196590395,"value":1771196590395}<=
/font><br>
<font face=3D"monospace">2026-02-15 15:03:10 [MQTT D1]: mqttserver
Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/alarmType</a>'
M:'{"time":1771196590396,"value":0,"nodeName&q=
uot;:"Closet_Sensor","nodeLocation":"Downstairs_Ha=
ll"}'</font><br>
<font face=3D"monospace">2026-02-15 15:03:10 [MQTT D2]: UNHANDLED
MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/alarm=
Type
--
{"time":1771196590396,"value":0,"nodeName":&q=
uot;Closet_Sensor","nodeLocation":"Downstairs_Hall"=
;}</font><br>
<font face=3D"monospace">2026-02-15 15:03:10 [MQTT D1]: mqttserver
Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/alarmLevel</a>'
M:'{"time":1771196590397,"value":0,"nodeName&q=
uot;:"Closet_Sensor","nodeLocation":"Downstairs_Ha=
ll"}'</font><br>
<font face=3D"monospace">2026-02-15 15:03:10 [MQTT D2]: UNHANDLED
MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/alarm=
Level
--
{"time":1771196590397,"value":0,"nodeName":&q=
uot;Closet_Sensor","nodeLocation":"Downstairs_Hall"=
;}</font><br>
<font face=3D"monospace">2026-02-15 15:03:10 [MQTT D1]: mqttserver
Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/Access_Control/Door_state_simple</a>'
M:'{"time":1771196590398,"value":23,"nodeName&=
quot;:"Closet_Sensor","nodeLocation":"Downstairs_H=
all"}'</font><br>
<font face=3D"monospace">2026-02-15 15:03:10 [MQTT D2]: UNHANDLED
MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Acces=
s_Control/Door_state_simple
--
{"time":1771196590398,"value":23,"nodeName":&=
quot;Closet_Sensor","nodeLocation":"Downstairs_Hall&quo=
t;}</font><br>
<font face=3D"monospace">2026-02-15 15:03:10 [MQTT D1]: mqttserver
Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoi=
nt_0/Access_Control/Door_state</a>'
M:'{"time":1771196590398,"value":23,"nodeName&=
quot;:"Closet_Sensor","nodeLocation":"Downstairs_H=
all"}'</font><br>
<font face=3D"monospace">2026-02-15 15:03:10 [MQTT D2]: UNHANDLED
MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/notification/endpoint_0/Acces=
s_Control/Door_state
--
{"time":1771196590398,"value":23,"nodeName":&=
quot;Closet_Sensor","nodeLocation":"Downstairs_Hall&quo=
t;}</font><br>
<font face=3D"monospace">2026-02-15 15:03:10 [MQTT D1]: mqttserver
Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActiv=
e</a>'
M:'{"time":1771196590646,"value":17711965=
90419}'</font><br>
<font face=3D"monospace">2026-02-15 15:03:10 [MQTT D2]: UNHANDLED
MESSAGE
app/zwave-js-ui/Downstairs_Hall/Closet_Sensor/lastActive --
{"time":1771196590646,"value":1771196590419}<=
/font><br>
</blockquote>
The fields that indicate the door status don't appear in the
discovery data that I can see at all. The MH object always shows
the state to be "on", regardless of the actual door open/cl=
osed
status.=C2=A0</div>
<div><br>
</div>
<div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0-B.</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div><br>
</div>
<div>On 2/14/26 11:17, Brian M wrote:<br>
</div>
<blockquote type=3D"cite">
=20
<div>Thanks, Dave. That would be great.</div>
<div><br>
</div>
<div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0-B.</div>
<div><br>
</div>
<div>On 2/14/26 10:42, Dave Neudoerffer
wrote:<br>
</div>
<blockquote type=3D"cite">
=20
<div dir=3D"ltr">Thanx for the trace Brian.=C2=A0 The discovery top=
ics
and templates being used are slightly different from anything
I have seen before.=C2=A0 It shouldn't be too hard to enhance=
the
MH discovery to handle this.=C2=A0 The Jinja templates are a bit =
of
a nuisance, but I will fudge something...=C2=A0 It will take me a
few days to get to this...
<div><br>
</div>
<div>Dave</div>
</div>
<br>
<div class=3D"gmail_quote">
<div dir=3D"ltr" class=3D"gmail_attr">On Fri, Feb 13, 2026 at
7:01=E2=80=AFPM Brian M <<a href=3D"mailto:misterhouse-ng1@s=
ilverflash.net" target=3D"_blank">[email protected]</a>>
wrote:<br>
</div>
<blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8=
ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div>
<p>Thanks, Dave. Mostly I'm in good shape, but I've g=
ot
some edge cases.=C2=A0</p>
<p>My primary problem at the moment seems to be that I
can't set the brightness for my ZWave dimmer switches
via ZWave-JS-UI. The correct MQTT string in one instance
is:</p>
<p>=C2=A0 =C2=A0
app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/target=
Value/set</p>
<p>Writing "3" to that MQTT topic (via MQTT-Explore=
r)=C2=A0
causes the light to come on at 3%, as expected. However,
in MH setting it to 3, '3', or '3%' results=
in the light
being turned on 100%.</p>
<p>I can't tell if this is a problem in with the discover=
y
itself, or the implementation of of setting the
MQTT_DISCOVEREDITEM.=C2=A0 Here are some details:</p>
<p>The MQTT discovered_item entry:</p>
<blockquote>
<p><font face=3D"monospace">MQTT_DISCOVEREDITEM,
Upstairs_Landing_Stairs, mqtt_discovery2,
app/zwave-js-ui/config/light/Upstairs_Landing-Stairs/di=
mmer/config,
{"command_topic":"app/zwave-js-ui/Upstairs_Landing/Stairs/sw=
itch_multilevel/endpoint_0/targetValue/set","state_topic":&q=
uot;app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/cu=
rrentValue","state_value_template":"{{
\"OFF\" if value_json.value =3D=3D 0 else \&q=
uot;ON\"
}}","brightness_command_topic":"app/zwave-js-ui/Upstair=
s_Landing/Stairs/switch_multilevel/endpoint_0/targetValue/set","b=
rightness_scale":99,"brightness_state_topic":"app/zwave=
-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/currentValue&qu=
ot;,"brightness_value_template":"{{
value_json.value
}}","on_command_type":"brightness","supported=
_color_modes":["brightness"],"availability":[{&quo=
t;payload_available":"true","payload_not_available"=
;:"false","topic":"app/zwave-js-ui/Upstairs_Landin=
g/Stairs/status","value_template":"{{'true'
if value_json.value else
'false'}}"},{"topic":"app/zwave-js-ui/_CLIENTS/=
ZWAVE_GATEWAY-zwave-js-ui/status","value_template":"{{&=
#39;online'
if value_json.value else
'offline'}}"},{"payload_available":"true",=
"payload_not_available":"false","topic":"=
;app/zwave-js-ui/driver/status"}],"availability_mode":"=
all","device":{"identifiers":["zwavejs2mqtt_0=
xc92945ec_node259"],"manufacturer":"Zooz","mo=
del":"Dimmer
(ZEN72)","name":"Upstairs_Landing-Stairs","sw=
_version":"4.0.1"},"name":"Upstairs_Landing_S=
tairs","unique_id":"zwavejs2mqtt_0xc92945ec_259-38-0-cu=
rrentValue"}</font></p>
</blockquote>
<p>Relevant log messages (MQTT debug level 2):</p>
<blockquote>
<p><font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
Pending $Upstairs_Landing_Stairs-->set( 3%, ,=C2=A0 =
)
cleared</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
unable to process template
{{"OFF"ifvalue_json.value=3D=3D0else"ON&=
quot;}}</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
fishing template value out of json with '$value =3D
$value_json->{value}'</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
remote item MQTT to MH Upstairs_Landing_Stairs
set(95%, '')</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
remote item $Upstairs_Landing_Stairs received
message <a>R:0</a> <a>T:app/zwave-js-ui/Upstairs_Landin=
g/Stairs/switch_multilevel/endpoint_0/currentValue</a>=C2=A0
M:{"time":1771026899727,"value":95,"nodeName"=
:"Stairs","nodeLocation":"Upstairs_Landing"}<=
/font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
unable to process template
{{"OFF"ifvalue_json.value=3D=3D0else"ON&=
quot;}}</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
fishing template value out of json with '$value =3D
$value_json->{value}'</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
remote item MQTT to MH Upstairs_Landing_Stairs
set(95%, 'mqtt')</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
mqttserver Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Upstairs_Landing/Stairs/switc=
h_multilevel/endpoint_0/duration</a>'
M:'{"time":1771026899728,"value":{"value"=
:0,"unit":"seconds"},"nodeName":"Stairs&=
quot;,"nodeLocation":"Upstairs_Landing"}'</font><br=
>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
UNHANDLED MESSAGE
app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/durati=
on
--
{"time":1771026899728,"value":{"value":0,&quo=
t;unit":"seconds"},"nodeName":"Stairs",&=
quot;nodeLocation":"Upstairs_Landing"}</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
mqttserver Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Upstairs_Landing/Stairs/switc=
h_multilevel/endpoint_0/targetValue</a>'
M:'{"time":1771026899728,"value":95,"nodeName&=
quot;:"Stairs","nodeLocation":"Upstairs_Landing&qu=
ot;}'</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
UNHANDLED MESSAGE
app/zwave-js-ui/Upstairs_Landing/Stairs/switch_multilevel/endpoint_0/target=
Value
--
{"time":1771026899728,"value":95,"nodeName":&=
quot;Stairs","nodeLocation":"Upstairs_Landing"}</f=
ont><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
mqttserver Rcv'd: <a>R:0</a>
<a>T:'app/zwave-js-ui/Upstairs_Landing/Stairs/switc=
h_multilevel/endpoint_0/currentValue</a>'
M:'{"time":1771026899858,"value":95,"nodeName&=
quot;:"Stairs","nodeLocation":"Upstairs_Landing&qu=
ot;}'</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
remote item $Upstairs_Landing_Stairs received
message <a>R:0</a> <a>T:app/zwave-js-ui/Upstairs_Landin=
g/Stairs/switch_multilevel/endpoint_0/currentValue</a>=C2=A0
M:{"time":1771026899858,"value":95,"nodeName"=
:"Stairs","nodeLocation":"Upstairs_Landing"}<=
/font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
unable to process template
{{"OFF"ifvalue_json.value=3D=3D0else"ON&=
quot;}}</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
fishing template value out of json with '$value =3D
$value_json->{value}'</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
remote item MQTT to MH Upstairs_Landing_Stairs
set(95%, 'mqtt')</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
remote item $Upstairs_Landing_Stairs received
message <a>R:0</a> <a>T:app/zwave-js-ui/Upstairs_Landin=
g/Stairs/switch_multilevel/endpoint_0/currentValue</a>=C2=A0
M:{"time":1771026899858,"value":95,"nodeName"=
:"Stairs","nodeLocation":"Upstairs_Landing"}<=
/font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
unable to process template
{{"OFF"ifvalue_json.value=3D=3D0else"ON&=
quot;}}</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D2]:
fishing template value out of json with '$value =3D
$value_json->{value}'</font><br>
<font face=3D"monospace">2026-02-13 15:54:59 [MQTT D1]:
remote item MQTT to MH Upstairs_Landing_Stairs
set(95%, 'mqtt')</font></p>
</blockquote>
<p><br>
Clearly it's not happy, but I haven't been able to =
chase
down the root cause. BTW, the "95%" mentioned in =
the
logs was the switch's existing brightness level before =
I
tried to change it.</p>
<p>Hopefully, this is clearer to you than to me.</p>
<p>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 -B.</p>
<p><br>
</p>
<p><br>
</p>
<div><br>
</div>
<div>On 2/13/26 15:08, Dave Neudoerffer wrote:<br>
</div>
<blockquote type=3D"cite">
<div dir=3D"auto">
<div>You are correct Brian. HA_Item is about mirroring
home assistant entities.=C2=A0 Howard uses HA to host
most of his devices and MH for automations using
HA_Items. Without a HA service, HA_Item makes no
sense.=C2=A0</div>
<div dir=3D"auto"><br>
</div>
<div dir=3D"auto">In implementing mqtt_items, I had a
few different sources of mqtt devices, but not a
huge variety. No did not have any zwave2mqtt stuff.
I have used the zigbee2mqtt stuff.=C2=A0 I am actually =
in
the process of enhancing the MH discovery stuff to
handle the new HA device discovery methodology.=C2=A0 I=
f
there is something I can help with, let me know.=C2=A0<=
/div>
<div dir=3D"auto"><br>
</div>
<div dir=3D"auto">Dave</div>
</div>
</blockquote>
<br>
</div>
</blockquote>
</div>
</blockquote>
<p><br>
</p>
</blockquote>
<p><br>
</p>
</div>
</blockquote></div>
--00000000000060c982064b0dd0eb--
--00000000000060c983064b0dd0ed
Content-Type: application/octet-stream; name="mqtt.pm"
Content-Disposition: attachment; filename="mqtt.pm"
Content-Transfer-Encoding: base64
Content-ID: <f_mlr9g6gx0>
X-Attachment-Id: f_mlr9g6gx0
IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KPWJlZ2luIGNvbW1lbnQNCiAgICBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQA0KDQogICAgPWhlYWQxIEI8TVFUVF9EZXZpY2U+DQoNCiAgICBOZWlsIENo
ZXJyeSA8bmNoZXJyeUBsaW51eGhhLmNvbT4NCg0KICAgID1oZWFkMiBTWU5PUFNJUw0KDQogICAg
QSBNUVRUIEludGVyZmFjZSBhbmQgSXRlbSBtb2R1bGUgZm9yIE1pc3RlcmhvdXNlDQoNCiAgICA9
aGVhZDIgREVTQ1JJUFRJT04NCg0KICAgIE1pc3RlcmhvdXNlIE1RVFQgaW50ZXJmYWNlIGZvciB1
c2Ugd2l0aCBhbnkgTVFUVCBzZXJ2aWNlDQoNCiAgICBNUVRUIHdlYnNpdGU6IGh0dHA6Ly9tcXR0
Lm9yZy8NCiAgICBNUVRUIFRlc3Qgc2VydmljZTogaHR0cC8vdGVzdC5tb3NxdWl0dG8ub3JnLyAo
dGVzdC5tb3NxdWl0dG8ub3JnIHBvcnQgMTg4MykNCg0KRmlsZToNCiAgICBtcXR0LnBtDQoNCkRl
c2NyaXB0aW9uOg0KICAgIFRoaXMgaXMgdGhlIGJhc2UgaW50ZXJmYWNlIGNsYXNzIGZvciBNZXNz
YWdlIFF1ZXVlIFRlbGVtZXRyeSBUcmFuc3BvcnQNCiAgICAoTVFUVCkNCg0KICAgIEZvciBtb3Jl
IGluZm9ybWF0aW9uIGFib3V0IHRoZSBNUVRUIHByb3RvY29sOg0KICAgICAgICBodHRwOi8vbXF0
dC5vcmcNCg0KICAgIEF1dGhvcihzKToNCiAgICBOZWlsIENoZXJyeSA8bmNoZXJyeUBsaW51eGhh
LmNvbT4gDQoNCiAgICBCYXNlZCBsb29zZWx5IG9uIHRoZSBVUE1QSU0ucG0gYW5kIFNxdWVlemVD
TEkucG0gY29kZQ0KICAgIC0gSmFzb24gU2hhcnBlZSAoVVBCKQ0KICAgIC0gTGlldmVuIEhvbGxl
dm9ldCAoU3F1ZWV6ZUNMSSkNCg0KTGljZW5zZToNCiAgICBUaGlzIGZyZWUgc29mdHdhcmUgaXMg
bGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgcHVibGljIGxpY2Vuc2UuDQoNClVz
YWdlOg0KDQogICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KICAgIE5PVEU6ICBtcXR0X0l0ZW0g
YW5kIE1RVFRfREVWSUNFIGFyZSBvbGRlciB0ZWNobm9sb2d5LiAgVGhleSBpbXBsZW1lbnQgZXNz
ZW50aWFsbHkgYSAxLTENCiAgICAgICAgICAgb2JqZWN0IHRvIG1xdHQgbWVzc2FnZSBtb2RlbC4N
Cg0KCSAgIFNFRSBtcXR0X2l0ZW1zLnBtIGZvciBNSCBpdGVtIGltcGxlbWVudGF0aW9ucyB3aGVy
ZSB0aGUgTUggaXRlbSBoYW5kbGVzIGFsbCBtZXNzYWdlcw0KCSAgIGZvciBhbiBtcXR0IGRldmlj
ZS4gIG1xdHRfaXRlbXMucG0gdXNlcyB0aGUgc2FtZSBtcXR0IHNlcnZlciBvYmplY3QuICBTZWUg
ZG9jdW1lbnRhdGlvbg0KCSAgIGluIG1xdHRfaXRlbXMucG0uDQogICAgIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIw0KDQogICAgLm1odCBmaWxlOg0KDQogICAgICAgICMgTVFUVCBzdHVmZg0KICAgICAg
ICBDT0RFLCByZXF1aXJlIG1xdHQ7ICNub2xvb3ANCiAgICAgICAgIw0KICAgICAgICBDT0RFLCAk
bXF0dF8xID0gbmV3IG1xdHQoJ21xdHRfMScsICcxMjcuMC4wLjEnLCAxODgzLCAnaG9tZS9oYS8j
JywgIiIsICIiLCAxMjEsICd1c2VfaGFfZGV2aWNlX2Rpc2M9MScpOw0KICAgICAgICBDT0RFLCAk
bXF0dF8yID0gbmV3IG1xdHQoJ21xdHRfMicsICd0ZXN0Lm1vc3F1aXR0by5vcmcnLCAxODgzLCAn
aG9tZS90ZXN0LyMnLCAiIiwgIiIsIDEyMik7DQogICAgICAgIENPREUsICRtcXR0XzMgPSBuZXcg
bXF0dCgnbXF0dF8zJywgJzEyNy4wLjAuMScsIDE4ODMsICdob21lL25ldHdvcmsvIycsICIiLCAi
IiwgMTIyKTsgI25vbG9vcA0KICAgICAgICAjDQogICAgICAgIENPREUsICRDUl9UZW1wID0gbmV3
IG1xdHRfSXRlbSgkbXF0dF8xLCAiaG9tZS9oYS90ZXh0L3gxMC8xIik7DQogICAgICAgIENPREUs
ICRNMl9UZW1wID0gbmV3IG1xdHRfSXRlbSgkbXF0dF8yLCAidGVzdC5tb3NxdWl0dG8ub3JnL3Rl
c3QveDEwLzEiKTsNCiAgICAgICAgQ09ERSwgJE0zX1RlbXAgPSBuZXcgbXF0dF9JdGVtKCRtcXR0
XzMsICJob21lL25ldHdvcmsvdGVzdC94MTAvMSIpOw0KICAgICAgICAjDQogICAgICAgIENPREUs
ICRDUl9UZW1wLT5zZXQoIk9uIik7DQogICAgICAgIENPREUsICRNMl9UZW1wLT5zZXQoIk9mZiIp
Ow0KICAgICAgICBDT0RFLCAkTTNfVGVtcC0+c2V0KCJPbiIpOw0KDQogICAgYW5kIG15IG1xdHQu
cGwgaW4gbXkgY29kZSBkaXI6DQoNCiAgICAgICAgIw0KICAgICAgICBpZiAoJE5ld19NaW51dGUg
YW5kICEoJE1pbnV0ZSAlIDMwKSkgew0KICAgICAgICAgICAgbXkgJHN0YXRlID0gKCdvbicgZXEg
c3RhdGUgJE0yX1RlbXApID8gJ29mZicgOiAnb24nOw0KICAgICAgICAgICAgc2V0ICRNMl9UZW1w
ICRzdGF0ZTsNCiAgICAgICAgICAgIG15ICRyZW1hcmsgPSAiTTIgTGlnaHQgc2V0IHRvICRzdGF0
ZSI7DQogICAgICAgICAgICAmcHJpbnRfbG9nKCAiJHJlbWFyayIgKTsNCiAgICAgICAgfQ0KDQog
ICAgQ0xJIGdlbmVyYXRpb24gb2YgYSBjb21tYW5kIHRvIHRoZSBDUl9UZW1wDQoNCiAgICAgICAg
bW9zcXVpdHRvX3B1YiAtZCAtaCB0ZXN0Lm1vc3F1aXR0by5vcmcgLXEgMCAtdCB0ZXN0Lm1vc3F1
aXR0by5vcmcvdGVzdC94MTAvMSAtbSAiT2ZmIg0KDQpFeGFtcGxlIGluaXRpYWxpemF0aW9uOg0K
DQogICAgJG15TVFUVCA9IG5ldyBtcXR0KCJNUVRUIiw8aG9zdD4sPHBvcnQ+LDx0b3BpYz4sPHVz
ZXI+LDxwYXNzd29yZD4sPGtlZXBhbGl2ZT4sPG9wdGlvbnM+KTsNCg0KTm90ZXM6DQogICAgLSAN
Cg0KICAgIFNwZWNpYWwgVGhhbmtzIHRvOg0KICAgIEJydWNlIFdpbnRlciAtIE1IDQogICAgSmFz
b24gU2hhcnBlZSAtIE1IIFVQQiBwa2cNCiAgICBMaWV2ZW4gSG9sbGV2b2V0IC0gU3F1ZWV6ZUNM
SS5wbQ0KDQogICAgQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBADQoNCiAgICA9aGVhZDIgQjxO
b3Rlczo+DQoNCiAgICBUaGUgdGVzdC5tb3NxdWl0dG8ub3JnIHNlcnZlciBsaXN0ZW5zIG9uIHBv
cnRzIDE4ODMsIDg4ODMsIDg4ODQgYW5kDQogICAgODg4NS4gUG9ydCAxODgzIGlzIHRoZSBzdGFu
ZGFyZCB1bmVuY3J5cHRlZCBNUVRUIHBvcnQgYW5kIGNhbiBiZSB1c2VkDQogICAgd2l0aCBhbnkg
TVFUVCBjbGllbnQuIFBvcnRzIDg4ODMgYW5kIDg4ODQgdXNlIGNlcnRpZmljYXRlIGJhc2VkDQog
ICAgU1NML1RMUyBlbmNyeXB0aW9uIChUTFN2MS4yLCBUTFN2MS4xIG9yIFRMU3YxLjApIGFuZCBy
ZXF1aXJlIGNsaWVudA0KICAgIHN1cHBvcnQgdG8gY29ubmVjdC4NCg0KICAgIFdlYiBzb2NrZXRz
IGFyZSBub3Qgc3VwcG9ydGVkIGhlcmUgaW4gTUgNCg0KICAgIFRvcGljcyAoZXhhbXBsZXMpDQog
ICAgICAgICMNCiAgICAgICAgaGEvIw0KICAgICAgICBoYS9ob3VzZS9saXZpbmdyb29tL2xhbXAN
CiAgICAgICAgaGEvd2VhdGhlci90ZW1wDQogICAgICAgIGhhL3dlYXRoZXIvd2luZHNwZWVkDQoN
CiAgICBGb3Igbm93IHdlJ2xsIHVzZSB0aGUgd2lsZGNhcmQuIEknbGwgdGhpbmsgYWJvdXQgYSBy
ZXdyaXRlIGxhdGVyIHdpdGhvdXQgdGhlDQogICAgd2lsZCBjYXJkIHN1cHBvcnQuIEkgZG9uJ3Qg
cmVjb21tZW5kIHVzaW5nIHRoZSAnIycgaWYgdGhlIE1RVFQgaXMgdGVzdC5tcXR0Lm9yZw0KICAg
IFJhdGhlciBwaWNrIHNvbWV0aGluZyBhIGJpdCBtb3JlIHVuaXF1ZSBsaWtlIC91c2VybmFtZS9o
YS8jIGFuZCBwbGF5IGZyb20gdGhlcmUNCg0KICAgIEJlY2F1c2Ugb2YgdGhlIHdpbGRjYXJkIGl0
IHByb2JhYmx5IG1ha2VzIHNlbnNlIHRvIHN1cHBvcnQgbXVsdGlwbGUgbXF0dA0KICAgIGNvbm5l
Y3Rpb25zIG9uIDEgb3IgbW9yZSBzZXJ2ZXJzLiBUaGlzIHdvdWxkIGFsbG93IGZvcjoNCg0KICAg
ICAgICBob21lL2hhL3gxMC8jDQogICAgICAgIGhvbWUvaGEvei13YXZlLyMNCiAgICAgICAgaG9t
ZS9oYS96aWdiZWUvIw0KDQogICAgaW5zdGVhZCBvZjoNCg0KICAgICAgICBob21lLyMNCg0KICAg
IG9yDQoNCiAgICAgICAgIw0KDQogICAgV2hpY2ggY291bGQgY292ZXIgdGhpbmdzIGxpa2UgdGhp
czoNCg0KICAgICAgICBob21lL2VtYWlsLy4uLg0KICAgICAgICBob21lL3N0YXRpc3RpY3MvLi4u
DQogICAgICAgIG9mZnNpdGUvLi4uDQoNCiAgICBhbmQganVzdCBhYm91dCBldmVyeXRoaW5nIGVs
c2Ugb24gdGhpcyBzZXJ2ZXIgdG9vLiA6LSkNCg0KICAgIElmIHlvdSdyZSB1c2luZyBhIGhvbWUg
bXF0dCBzZXJ2ZXIgdGhlbiB0aGlzIG1pZ2h0IG5vdCBiZSBzdWNoIGFzIGlzc3VlLg0KICAgIEdp
dmUgdGhpcyBjb21tYW5kIGEgdHJ5IGFuZCBzZWUgdGhlIGFtb3VudCBvZiB0cmFmZmljIGdlbmVy
YXRlZDoNCg0KICAgICAgICBtb3NxdWl0dG9fc3ViIC1kIC1oIHRlc3QubW9zcXVpdHRvLm9yZyAt
dCAiIyINCg0KICAgIFRoZSBpbnRpYWwgZGV2aWNlIG5lZWRzIHNvbWUga2luZCBvZiB3YXkgdG8g
dGVsbCB0aGF0IGl0J3Mgc3RpbGwgY29ubmVjdGVkDQogICAgdG8gdGhlIE1RVFQgc2VydmVyIChN
UVRUIFBpbmcgY29tZXMgdG8gbWluZCkuDQoNCiAgICA9aGVhZDIgSU5IRVJJVFMNCg0KICAgIEI8
Tk9ORT4NCg0KICAgID1oZWFkMiBNRVRIT0RTDQoNCiAgICA9b3Zlcg0KDQogICAgPWl0ZW0gQjxV
bkRvYz4NCg0KICAgID1pdGVtIEI8VG9Ebz4NCg0KICAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiB0
aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGRvbmUuIFRoZXJlIGlzIGEgbGFjayBvZiBlcnJvcg0KICAg
IGNoZWNraW5nIGFuZCBjb25uZWN0aXZpdHkgY2hlY2tzIGFuZCByZXN0b3JhdGlvbi4gSSdtIHN1
cmUgdGhlcmUgYXJlIGEgaHVnZQ0KICAgIG51bWJlciBvZiBmZWF0dXJlcyB0aGF0IG5lZWQgdG8g
YmUgYWRkZWQuDQoNCiAgICBARklYTUU6IFRvcGljIGhhbmRsaW5nIG5lZWRzIHdvcmssIGlmIHRo
ZSBzYW1lIGhvc3Q6cG9ydCBpcyB1c2VkIHRoZSBmaXJzdA0KICAgICAgICAgICAgaW5zdGFuY2Ug
KHNhbWUgc29ja2V0KSBpcyB1c2VkIGJ1dCB0aGlzIGNhdXNlcyBpc3N1ZXMgYW5kIGF0DQogICAg
ICAgICAgICByZWNvbm5lY3Qgd2UgbmVlZCB0byByZXN1YnNjcmliZS4gVGhlcmUgaXMgbm8gd2F5
IHRvIGRvIHRoYXQgbm93DQogICAgICAgICAgICAod2UnbGwgbmVlZCB0byByZXN1YnNjcmliZSBh
bGwgdGhlIHNhbWUgc29ja2V0IHJlbGF0ZWQgc3Vic2NyaXB0aW9ucykNCiAgICBARklYTUU6IFdl
J3JlIHJlYWxseSBub3QgY2hlY2tpbmcgZm9yIENvbm5BY2sgb3IgU3ViQWNrLg0KICAgIEBGSVhN
RTogTm8gU1NMDQogICAgQEZJWE1FOiBMb3RzIG9mIGVycm9yIGNoZWNraW5nIG5lZWRzIHRvIGJl
IGRvbmUNCiAgICBARklYTUU6IFVzZSBvZiB1bmluaXRpYWxpemVkIHZhbHVlDQogICAgQFRPRE86
ICBDYWxsYmFja3MgdG8gaGFuZGxlIGRlY29kaW5nIG9mIHRoZSB0aW9waWMgbWVzc2FnZXMNCiAg
ICBAVE9ETzogIEFuYWxvZyBkZXZpY2UgYW5kIHN0cmluZyBkZXZpY2UgaGFuZGxpbmcNCg0KPWN1
dA0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KdXNlIGNvbnN0YW50IHsgVFJVRSA9PiAxLCBG
QUxTRSA9PiAwIH07DQoNCnBhY2thZ2UgbXF0dDsNCg0KQG1xdHQ6OklTQSA9ICgnR2VuZXJpY19J
dGVtJyk7DQoNCnVzZSBzdHJpY3Q7DQp1c2Ugd2FybmluZ3M7DQoNCnVzZSBOZXQ6Ok1RVFQ6OkNv
bnN0YW50cyBxdy86YWxsLzsNCnVzZSBOZXQ6Ok1RVFQ6Ok1lc3NhZ2U7DQoNCnVzZSBJTzo6U2Vs
ZWN0Ow0KdXNlIElPOjpTb2NrZXQ6OklORVQ7DQoNCnVzZSBUaW1lOjpIaVJlczsNCg0KdXNlIERh
dGE6OkR1bXBlcjsNCg0KZXZhbCAidXNlIGJ5dGVzIjsgICAgIyBOb3Qgb24gYWxsIGluc3RhbGxz
LCBzbyBldmFsIHRvIGF2b2lkIGVycm9ycw0KDQpldmFsICJ1c2UgRGlnZXN0OjpNRDUgcXcobWQ1
X2hleCkiOyAgICAjIE5vdCBzdXJlIGlmIHRoaXMgaXMgb24gYWxsIGluc3RhbGxzLCBzbyBldmFs
IHRvIGF2b2lkIGVycm9ycw0KDQojIE5lZWQgdG8gc2hhcmUgdGhpcyB3aXRoIHRoZSBvdXRzaWRl
IHdvcmxkDQpteSAkbXNnX2lkID0gMTsNCm15ICRibG9ja2luZ19yZWFkX3RpbWVvdXQgPSAuNTsN
Cg0KbXkgJU1RVFRfRGF0YTsNCm15ICRpbml0X2dsb2JhbF92X2NtZCA9IDA7DQoNCiMgJG1haW46
OkRlYnVne21xdHR9ID0gMDsNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBkdW1wKCkg
ew0KICAgICZtYWluOjpwcmludF9sb2coICIqKiogbXF0dCBEdW1wZXIgKE1RVFRfRGF0YSk6XG4i
IC4gRHVtcGVyKCBcJU1RVFRfRGF0YSApIC4gIioqKiIgKTsNCn0NCg0Kc3ViIGxvZyB7DQogICAg
bXkgKCRzZWxmLCAkc3RyLCAkcHJlZml4KSA9IEBfOw0KICAgIG15ICRtYXhsZW5ndGggPSAzMDA7
DQoNCiAgICAkcHJlZml4ID0gJHByZWZpeCB8fCAnW01RVFRdOiAnOw0KICAgIHdoaWxlKCBsZW5n
dGgoICRzdHIgKSA+ICRtYXhsZW5ndGggKSB7DQoJbXkgJGwgPSAwOw0KCW15ICRpOw0KCWZvcigg
JGk9MDsgJGk8bGVuZ3RoKCRzdHIpICYmICRsPCRtYXhsZW5ndGg7ICsrJGksKyskbCApIHsNCgkg
ICAgaWYoIHN1YnN0ciggJHN0ciwgJGksIDEgKSBlcSAiXG4iICkgew0KCQkkbCA9IDA7DQoJICAg
IH0NCgl9DQoJJm1haW46OnByaW50X2xvZyggJHByZWZpeCAuIHN1YnN0cigkc3RyLDAsJGkpICk7
DQoJJHN0ciA9IHN1YnN0ciggJHN0ciwgJGkgKTsNCg0KCSMgMjAyNC0xMjogQWZ0ZXIgZmlyc3Qg
cGFzcywgYWRkICcuLi4uICAnIG9uY2UgdG8gaW5kaWNhdGUgY29udC4gbGluZS4gS2VlcCB0aGUN
CgkjIG9yaWdpbmFsIHByZWZpeCBzbyBhbnkgbG9nIHNjYW5uaW5nIHByb2dyYW1zIGhhdmUgY29u
dGV4dC4gLUJQTQ0KCSRwcmVmaXggLj0gJy4uLi4gICcgaWYgKCRwcmVmaXggIX4gL1wuXC5cLlwu
ICAkLyk7DQogICAgfQ0KICAgICZtYWluOjpwcmludF9sb2coICRwcmVmaXggLiAkc3RyICk7DQp9
DQoNCnN1YiBkZWJ1ZyB7DQogICAgbXkoICRzZWxmLCAkbGV2ZWwsICRzdHIgKSA9IEBfOw0KICAg
IGlmKCAkbWFpbjo6RGVidWd7bXF0dH0gPj0gJGxldmVsICkgew0KCSRsZXZlbCA9ICdEJyBpZiAk
bGV2ZWwgPT0gMDsNCgkmbXF0dDo6bG9nKCAkc2VsZiwgJHN0ciwgIltNUVRUIEQkbGV2ZWxdOiAi
ICk7DQogICAgfQ0KfQ0KDQpzdWIgZXJyb3Igew0KICAgIG15ICgkc2VsZiwgJHN0ciwgJGxldmVs
ICkgPSBAXzsNCiAgICAmbXF0dDo6bG9nKCAkc2VsZiwgJHN0ciwgIltNUVRUIEVSUk9SXTogIiAp
Ow0KfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQo9aXRlbSA8bXF0dF9jb25uZWN0KCk+
DQo9Y3V0DQoNCnN1YiBtcXR0X2Nvbm5lY3QoKSB7DQogICAgbXkgKCRzZWxmKSA9IEBfOw0KDQog
ICAgJHNlbGYtPmxvZyggIiRzZWxmLT57aW5zdGFuY2V9IGNvbm5lY3RpbmcgdG8gKCQkc2VsZnto
b3N0fTokJHNlbGZ7cG9ydH0sJCRzZWxme2tlZXBfYWxpdmVfdGltZXJ9KSBUb3BpYyAoJCRzZWxm
e3RvcGljfSkgIik7DQoNCiAgICAjIyMgMSkgb3BlbiBhIHNvY2tldCAoaG9zdCwgcG9ydCBhbmQg
a2VlcGFsaXZlDQogICAgbXkgJHNvY2tldCA9IElPOjpTb2NrZXQ6OklORVQtPm5ldygNCiAgICAg
ICAgUGVlckFkZHIgPT4gJHNlbGYtPntob3N0fSAuICc6JyAuICRzZWxmLT57cG9ydH0sDQogICAg
ICAgIFRpbWVvdXQgPT4gMiwNCiAgICAgICAgIyBUaW1lb3V0ICA9PiAkc2VsZi0+e2tlZXBfYWxp
dmVfdGltZXJ9LA0KICAgICk7DQoNCiAgICAjIENhbid0IHVzZSB0aGlzIGF0IHRoaXMgdGltZQ0K
ICAgICMgJHNvY2tldCA9IG5ldyBtYWluOjpTb2NrZXRfSXRlbSh1bmRlZiwgdW5kZWYsICIkaG9z
dDokcG9ydCIsICRpbnN0YW5jZSk7DQoNCiAgICBpZiAoICFkZWZpbmVkKCRzb2NrZXQpICkgew0K
ICAgICAgICBpZiAoJCRzZWxme3JlY29uX3RpbWVyfS0+aW5hY3RpdmUpIHsNCiAgICAgICAgICAg
ICRzZWxmLT5kZWJ1ZyggMSwgIm1xdHQgY29ubmVjdGlvbiBmb3IgJCRzZWxme2luc3RhbmNlfSBm
YWlsZWQsIHdpbGwgdHJ5IHRvIHJlY29ubmVjdCBpbiAyMCBzZWNvbmRzIik7DQogICAgICAgICAg
ICBteSAkaW5zdCA9ICQkc2VsZntpbnN0YW5jZX07DQogICAgICAgICAgICAkJHNlbGZ7cmVjb25f
dGltZXJ9LT5zZXQoIDIwLCBzdWIgeyAkTVFUVF9EYXRheyRpbnN0fXtzZWxmfS0+bXF0dF9jb25u
ZWN0KCkgfSApOw0KICAgICAgICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgfQ0KDQogICAg
JHNlbGYtPntzb2NrZXR9ICAgICAgICAgICAgPSAkc29ja2V0Ow0KICAgICRzZWxmLT57Z290X3Bp
bmdfcmVzcG9uc2V9ID0gMTsNCiAgICAkc2VsZi0+e3BpbmdfbWlzc2VkX2NvdW50fSA9IDA7DQog
ICAgJHNlbGYtPntuZXh0X3Bpbmd9ICAgICAgICAgPSBUaW1lOjpIaVJlczo6dGltZSArICQkc2Vs
ZntrZWVwX2FsaXZlX3RpbWVyfTsNCiAgICAkc2VsZi0+e2J1Zn0JICAgICAgID0gJyc7DQoNCiAg
ICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgIyMjIDIpIFNlbmQgTVFUVF9DT05ORUNUDQogICAg
IyAyMC0xMi0yMDIwIGFkZGVkIHJlZ2lzdHJhdGlvbiBvZiBtcXR0IExhc3QgV2lsbCBhbmQgVGVz
dGFtZW50IGlmIGRlZmluZWQgaW4gbWguaW5pDQogICAgJHNlbGYtPnNlbmRfbXF0dF9tc2coDQog
ICAgICAgIG1lc3NhZ2VfdHlwZSAgICAgPT4gTVFUVF9DT05ORUNULA0KICAgICAgICBjbGllbnRf
aWQgICAgICAgID0+ICJtaXN0ZXJob3VzZV8kJCIsDQogICAgICAgIGtlZXBfYWxpdmVfdGltZXIg
PT4gJHNlbGYtPntrZWVwX2FsaXZlX3RpbWVyfSwNCgl1c2VyX25hbWUJID0+ICRzZWxmLT57dXNl
cl9uYW1lfSwNCglwYXNzd29yZAkgPT4gJHNlbGYtPntwYXNzd29yZH0sDQoJd2lsbF90b3BpYwkg
PT4gJDo6Y29uZmlnX3Bhcm1ze21xdHRfTFdUX3RvcGljfSwNCgl3aWxsX21lc3NhZ2UJID0+ICQ6
OmNvbmZpZ19wYXJtc3ttcXR0X0xXVF9wYXlsb2FkfQ0KICAgICk7DQoNCiAgICAjIyMgMykgQ2hl
Y2sgZm9yIEFDSyBvciBmYWlsDQogICAgJHNlbGYtPmRlYnVnKCAxLCAiJHNlbGYtPntpbnN0YW5j
ZX0gc29ja2V0IGNoZWNrICgkJHNlbGZ7a2VlcF9hbGl2ZV90aW1lcn0pOiAiIC4gKCAkc2VsZi0+
aXNDb25uZWN0ZWQoKSA/ICJDb25uZWN0ZWQiIDogIkZhaWxlZCBbICQhIF0iICkgKTsNCg0KICAg
IG15ICRtc2cgPSAkc2VsZi0+cmVhZF9tcXR0X21zZyggJGJsb2NraW5nX3JlYWRfdGltZW91dCAp
Ow0KICAgIGlmICggISRtc2cgKSB7DQogICAgICAgICRzZWxmLT5lcnJvcigibXF0dCAkJHNlbGZ7
aW5zdGFuY2V9IE5vIENvbm5BY2sgIik7DQoNCiAgICAgICAgI2V4aXQgMTsNCiAgICAgICAgcmV0
dXJuOw0KICAgIH0NCg0KICAgICMgV2Ugc2hvdWxkIGFjdHVhbGx5IGdldCBhIFN1YkFjayBidXQg
d2hvIGlzIGNoZWNraW5nICh5ZXMsIEkga25vdyBJIHNob3VsZCkNCiAgICAkc2VsZi0+ZGVidWco
IDEsICIkJHNlbGZ7aW5zdGFuY2V9IFJlY2VpdmVkOiAiIC4gJG1zZy0+c3RyaW5nICk7DQoNCiAg
ICAjIyMgNCkgU2VuZCBhIHN1YnNjcmliZSAnIycgKHdlJ2xsIGhhdmUgbWFueSBvZiB0aGVzZSwg
b25lIGZvciBlYWNoIGRldmljZSkNCiAgICAjIyMgICAgSSBkb24ndCBrbm93IGlmIHRoaXMgaXMg
YSBnb29kIGlkZWEgb3Igbm90IGJ1dCB0aGF0J3Mgd2hhdCBJIGludGVuZCB0byBkbyBmb3Igbm93
DQogICAgJHNlbGYtPnNlbmRfbXF0dF9tc2coDQogICAgICAgIG1lc3NhZ2VfdHlwZSA9PiBNUVRU
X1NVQlNDUklCRSwNCiAgICAgICAgbWVzc2FnZV9pZCAgID0+ICRtc2dfaWQrKywNCiAgICAgICAg
dG9waWNzICAgICAgID0+IFsgbWFwIHsgWyAkXyA9PiBNUVRUX1FPU19BVF9NT1NUX09OQ0UgXSB9
ICRzZWxmLT57dG9waWN9IF0NCiAgICApOw0KDQogICAgIyMjIDUpIENoZWNrIGZvciBBQ0sgb3Ig
ZmFpbA0KICAgICRtc2cgPSAkc2VsZi0+cmVhZF9tcXR0X21zZyggJGJsb2NraW5nX3JlYWRfdGlt
ZW91dCApOw0KICAgIGlmKCAhJG1zZyApIHsNCiAgICAgICAgJHNlbGYtPmxvZyggIiQkc2VsZntp
bnN0YW5jZX0gUmVjZWl2ZWQ6ICIgLiAiTm8gc3Vic2NyaXB0aW9uIEFjayIgKTsNCiAgICB9DQog
ICAgaWYgKCAkbWFpbjo6RGVidWd7bXF0dH0gKSB7DQogICAgICAgIG15ICRzID0NCiAgICAgICAg
ICBkZWZpbmVkKCAkJG1zZ3tzdHJpbmd9ICkNCiAgICAgICAgICA/ICIoJCRtc2d7c3RyaW5nfSki
DQogICAgICAgICAgOiAnKC0tTm8gJCRtc2d7c3RyaW5nfS0tKSc7DQogICAgICAgICMjIw0KICAg
ICAgICAjIyMgSUYgd2UncmUgbm90IGdldHRpbmcgJCRtc2d7c3RyaW5nfSB0aGVuIHdoYXQgYXJl
IHdlIGdldHRpbmcgPw0KICAgICAgICAjIyMNCiAgICAgICAgJHNlbGYtPmxvZyggIiQkc2VsZntp
bnN0YW5jZX0gU3Vic2NyaXB0aW9uIDEgKCQkc2VsZnt0b3BpY30pIGFja25vd2xlZGdlZDogIiAu
ICIkcyIgKTsgICAgIyBARklYTUU6IFVzZSBvZiB1bmluaXRpYWxpemVkIHZhbHVlDQogICAgfQ0K
DQogICAgIyMjIDYpIGNoZWNrIGZvciBkYXRhDQogICAgJHNlbGYtPmRlYnVnKCAxLCAiJCRzZWxm
e2luc3RhbmNlfSBJbml0aWFsaXppbmcgTVFUVCBjb25uZWN0aW9uIC4uLiIpOw0KDQogICAgJHNl
bGYtPnNldCggJ29uJywgJ21xdHQ6Om1xdHRfY29ubmVjdCcgKTsJIyAyMDI0LTEyOiBSZXBsYWNl
ZCBoZXggaGFzaCBhZGRyZXNzIHdpdGggZGVzY3JpcHRpdmUgdGV4dCBpbiAybmQgZmllbGQuLUJQ
TQ0KDQp9DQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCj1pdGVtIEM8aXNDb25uZWN0ZWQo
KT4NCj1jdXQNCg0Kc3ViIGlzQ29ubmVjdGVkIHsNCiAgICBteSAoJHNlbGYpID0gQF87DQogICAg
dW5sZXNzICggZGVmaW5lZCgkJHNlbGZ7c29ja2V0fSApICkgeyByZXR1cm4gMCB9DQogICAgcmV0
dXJuICQkc2VsZntzb2NrZXR9LT5jb25uZWN0ZWQ7DQp9DQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tDQoNCj1pdGVtIEM8aXNOb3RDb25uZWN0ZWQoKT4NCj1jdXQNCg0Kc3ViIGlzTm90Q29ubmVj
dGVkIHsNCiAgICBteSAoJHNlbGYpID0gQF87DQogICAgdW5sZXNzICggZGVmaW5lZCgkJHNlbGZ7
c29ja2V0fSApICkgeyByZXR1cm4gMSB9DQogICAgcmV0dXJuICEkJHNlbGZ7c29ja2V0fS0+Y29u
bmVjdGVkOw0KfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQo9aXRlbSBDPG5ldygpPg0K
DQogICAgVXNlZCB0byBzZW5kIGNvbW1hbmRzIHRvIHRoZSBpbnRlcmZhY2UuDQoNCj1jdXQNCg0K
c3ViIG5ldyB7DQogICAgbXkgKCAkY2xhc3MsICRpbnN0YW5jZSwgJGhvc3QsICRwb3J0LCAkdG9w
aWMsICR1c2VyLCAkcGFzc3dvcmQsICRrZWVwX2FsaXZlX3RpbWVyLCAkb3B0aW9ucyApID0gQF87
DQogICAgbXkgJHNlbGY7DQoNCiAgICBpZiggIWRlZmluZWQoICRtYWluOjpEZWJ1Z3ttcXR0fSAp
ICkgew0KCSRtYWluOjpEZWJ1Z3ttcXR0fSA9IDA7DQogICAgfQ0KDQogICAgIyAyMC0xMi0yMDIw
IGVkaXQgdG8gZW5hYmxlIE1IIHRvIG1vbml0b3IgYWxsIG1xdHQgdG9waWNzIGVzcGVjaWFsbHkg
Zm9yIHdpbGRjYXJkcyBlLmcuIExXVA0KICAgICR0b3BpYwkJPSAkdG9waWMgICAgfHwgJDo6Y29u
ZmlnX3Bhcm1ze21xdHRfdG9waWN9CXx8ICcjJzsNCiAgICAkaG9zdAkJPSAkaG9zdAkgICAgfHwg
JDo6Y29uZmlnX3Bhcm1ze21xdHRfaG9zdH0JfHwgJzEyNy4wLjAuMSc7DQogICAgJHBvcnQJCT0g
JHBvcnQJICAgIHx8ICQ6OmNvbmZpZ19wYXJtc3ttcXR0X3BvcnR9CXx8IDE4ODM7DQogICAgJHVz
ZXIJCT0gJHVzZXIJICAgIHx8ICQ6OmNvbmZpZ19wYXJtc3ttcXR0X3VzZXJuYW1lfQl8fCAnJzsN
CiAgICAkcGFzc3dvcmQJCT0gJHBhc3N3b3JkIHx8ICQ6OmNvbmZpZ19wYXJtc3ttcXR0X3Bhc3N3
b3JkfQl8fCAnJzsNCg0KICAgICRrZWVwX2FsaXZlX3RpbWVyID0gMTIwIGlmICFkZWZpbmVkKCAk
a2VlcF9hbGl2ZV90aW1lciApOyAgICAjIHJldGFpbiBhIHByb3ZpZGVkIDANCiAgIA0KICAgICMg
SWYgd2UgaGF2ZSBhbHJlYWR5IGNyZWF0ZWQgYSBzb2NrZXQgYW5kIGhhdmUgYW4gZXhpc3Rpbmcg
aW5zdGFuY2UgdGhlbg0KICAgICMgcmV0dXJuIHRoZSBleGlzdGluZyBpbnN0YW5jZS4gTVFUVCBk
b2Vzbid0IGxpa2UgaGF2aW5nIDIgc29ja2V0cyB0byB0aGUNCiAgICAjIHNhbWUgc2VydmVyIGFu
ZCB3aWxsIGNsb3NlIHRoZSBvbGQgc29ja2V0Lg0KICAgICMgQnV0IHdoYXQgc2hvdWxkIEkgZG8g
YWJvdXQgdGhlIG5ldyB0b3BpYy4gSSdsbCBuZWVkIHRvIHN1YnNjcmliZSB0byB0aGUNCiAgICAj
IHRvcGljIGJlZm9yZSByZXR1cm5pbmcgdGhlIGV4aXN0aW5nIGluc3RhbmNlDQogICAgZm9yZWFj
aCBteSAkaW5zdCAoIGtleXMgJU1RVFRfRGF0YSApIHsNCiAgICAgICAgaWYgKCAiJE1RVFRfRGF0
YXskaW5zdH17c2VsZn17aG9zdH0iIGVxICIkaG9zdCIgKSB7DQogICAgICAgICAgICBpZiAoICIk
TVFUVF9EYXRheyRpbnN0fXtzZWxmfXtwb3J0fSIgZXEgIiRwb3J0IiApIHsNCg0KICAgICAgICAg
ICAgICAgICMgc3Vic2NyaWJlIHRvIHRoZSB0b3BpYyBpZiBpdCBkb2Vzbid0IGFscmVhZHkgZXhp
c3QNCiAgICAgICAgICAgICAgICBpZiAoICIkTVFUVF9EYXRheyRpbnN0fXtzZWxmfXt0b3BpY30i
IG5lICIkdG9waWMiICkgew0KDQogICAgICAgICAgICAgICAgICAgICMgT2xkLCBleGlzdGluZyBp
bnN0YWNlIHdpdGggdGhlIHNhbWUgaG9zdCBhbmQgcG9ydCBpbmZvDQogICAgICAgICAgICAgICAg
ICAgICRzZWxmID0gJE1RVFRfRGF0YXskaW5zdH17c2VsZn07DQoNCiAgICAgICAgICAgICAgICAg
ICAgIyBTdWJzY3JpYmUgdG8gdGhlIG5ldyB0b3BpYw0KICAgICAgICAgICAgICAgICAgICBzZW5k
X21xdHRfbXNnKA0KICAgICAgICAgICAgICAgICAgICAgICAgJHNlbGYsDQogICAgICAgICAgICAg
ICAgICAgICAgICBtZXNzYWdlX3R5cGUgPT4gTVFUVF9TVUJTQ1JJQkUsDQogICAgICAgICAgICAg
ICAgICAgICAgICBtZXNzYWdlX2lkICAgPT4gJG1zZ19pZCsrLA0KICAgICAgICAgICAgICAgICAg
ICAgICAgdG9waWNzICAgICAgID0+IFsgbWFwIHsgWyAkXyA9PiBNUVRUX1FPU19BVF9NT1NUX09O
Q0UgXSB9ICR0b3BpYyBdDQogICAgICAgICAgICAgICAgICAgICk7DQoNCiAgICAgICAgICAgICAg
ICAgICAgIyMjIDUpIENoZWNrIGZvciBBQ0sgb3IgZmFpbA0KICAgICAgICAgICAgICAgICAgICAk
c2VsZi0+e2J1Zn0gPSAnJzsNCgkJICAgIG15ICRtc2cgPSAkc2VsZi0+cmVhZF9tcXR0X21zZygg
JGJsb2NraW5nX3JlYWRfdGltZW91dCApOw0KCQkgICAgaWYoICEkbXNnICkgew0KCQkJJHNlbGYt
PmxvZyggIiRpbnN0IFJlY2VpdmVkOiAiIC4gIk5vIFN1YnNjcmlwdGlvbiBBY2siICk7DQoJCSAg
ICB9IGVsc2Ugew0KCQkJJHNlbGYtPmxvZyggMSwgIiRpbnN0IFN1YnNjcmlwdGlvbiAyICgkdG9w
aWMpIGFja25vd2xlZGdlZDogIiAuICRtc2ctPnN0cmluZyApOw0KCQkgICAgfQ0KICAgICAgICAg
ICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICMgVGhpcyBpcyB0aGUgbGl0dGxlIG1lc3NhZ2Vz
IHRoYXQgYXBwZWFyIHdoZW4gTUggc3RhcnRzDQogICAgICAgICAgICAgICAgJm1xdHQ6OmxvZygg
dW5kZWYsICJSZXVzaW5nICRpbnN0IChpbnN0ZWFkIG9mICRpbnN0YW5jZSkgb24gJGhvc3Q6JHBv
cnQgJHRvcGljIik7DQoNCiAgICAgICAgICAgICAgICAjIyMNCiAgICAgICAgICAgICAgICAjIyMg
UmFuIGludG8gYW4gaXNzdWUgZG9pbmcgaXQgdGhpcyB3YXksIGl0IHJlbmFtZXMgdGhlIG9iamVj
dCB0byB0aGUgbGFzdA0KICAgICAgICAgICAgICAgICMjIyBvYmplY3QgbmFtZSBpdCBlbmNvdW50
ZXJzIDooDQogICAgICAgICAgICAgICAgIyMjIEkgZ3Vlc3Mgd2hhdCBJIG5lZWQgdG8gdG8gY3Jl
YXRlIGEgbmV3IG9iamVjdCBidXQgY29weSBldmVyeXRoaW5nIGZyb20gdGhlDQogICAgICAgICAg
ICAgICAgIyMjIHByZXZpb3VzIG9uZQ0KICAgICAgICAgICAgICAgICMjIw0KICAgICAgICAgICAg
ICAgIHJldHVybiAkTVFUVF9EYXRheyRpbnN0fXtzZWxmfTsNCiAgICAgICAgICAgIH0NCiAgICAg
ICAgfQ0KICAgIH0NCg0KICAgICRzZWxmID0ge307DQogICAgYmxlc3MgJHNlbGYsICRjbGFzczsN
Cg0KICAgICQkc2VsZntzdGF0ZX0JCT0gJ29mZic7DQogICAgJCRzZWxme3NhaWR9CQk9ICcnOw0K
ICAgICQkc2VsZntzdGF0ZV9ub3d9CQk9ICdvZmYnOw0KDQogICAgJHNlbGYtPntjb21tYW5kX3N0
YWNrfQk9IFtdOw0KICAgICRzZWxmLT57cmV0YWluZWRfdG9waWNzfQk9IHt9Ow0KDQogICAgJCRz
ZWxme2luc3RhbmNlfQkJPSAkaW5zdGFuY2U7DQogICAgJCRzZWxme3JlY29uX3RpbWVyfQkJPSA6
OlRpbWVyOjpuZXcoKTsNCiAgICAkJHNlbGZ7aG9zdH0JCT0gJGhvc3Q7DQogICAgJCRzZWxme3Bv
cnR9CQk9ICRwb3J0Ow0KICAgICQkc2VsZnt0b3BpY30JCT0gJHRvcGljOw0KICAgICQkc2VsZnt1
c2VyX25hbWV9CQk9ICR1c2VyOw0KICAgICQkc2VsZntwYXNzd29yZH0JCT0gJHBhc3N3b3JkOw0K
ICAgICQkc2VsZntrZWVwX2FsaXZlX3RpbWVyfQk9ICRrZWVwX2FsaXZlX3RpbWVyOw0KICAgICQk
c2VsZnt1c2VfaGFfZGV2aWNlX2Rpc2N9CT0gMDsNCiAgICBpZiAoZGVmaW5lZCAkb3B0aW9ucykg
ew0KCW15ICRzZXR0aW5nOw0KCW15IEBvcHRpb25fbGlzdCA9IHNwbGl0KCAnXHwnLCAkb3B0aW9u
cyApOw0KCWZvcmVhY2ggbXkgJG9wdGlvbiAoQG9wdGlvbl9saXN0KSB7DQoJICAgIGlmKCAkb3B0
aW9uIGVxICd1c2VfaGFfZGV2aWNlX2Rpc2MnICkgew0KCQkkc2VsZi0+e3VzZV9oYV9kZXZpY2Vf
ZGlzY30gPSAxOw0KCSAgICB9IGVsc2lmKCAoJHNldHRpbmcpID0gJG9wdGlvbiA9fiBtL3VzZV9o
YV9kZXZpY2VfZGlzY1xzKlw9XHMqKFxkKykvICkgew0KCQkkc2VsZi0+e3VzZV9oYV9kZXZpY2Vf
ZGlzY30gPSAkc2V0dGluZzsNCgkgICAgfSBlbHNpZiggKCRzZXR0aW5nKSA9ICRvcHRpb24gPX4g
bS90b3BpY19wcmVmaXhccypcPVxzKihbXlxzXSspLyApIHsNCgkJJHNlbGYtPnt0b3BpY19wcmVm
aXh9ID0gJHNldHRpbmc7DQoJICAgIH0gZWxzZSB7DQoJCSRzZWxmLT5lcnJvciggIkludmFsaWQg
TVFUVCBvcHRpb246ICckb3B0aW9uJy4gTVFUVCBzZXJ2ZXIgJGluc3RhbmNlIE5PVCBjcmVhdGVk
IiApOw0KCQlyZXR1cm47DQoJICAgIH0NCgl9DQogICAgfQ0KDQogICAgJCRzZWxme2luaXRfdl9j
bWR9CQk9IDA7DQogICAgJCRzZWxme25leHRfcGluZ30JCT0gMDsNCiAgICAkJHNlbGZ7Z290X3Bp
bmdfcmVzcG9uc2V9CT0gMTsgDQogICAgJCRzZWxme3BpbmdfbWlzc2VkX2NvdW50fQk9IDA7DQoN
Cg0KICAgICMgVGhpcyBpcyB0aGUgbGl0dGxlIG1lc3NhZ2VzIHRoYXQgYXBwZWFyIHdoZW4gTUgg
c3RhcnRzDQogICAgJHNlbGYtPmxvZygiQ3JlYXRpbmcgJGluc3RhbmNlIG9uICRob3N0OiRwb3J0
IHRvcGljOiR0b3BpYyIpOw0KDQogICAgJHNlbGYtPnNldF9zdGF0ZXMoICJvZmYiLCAib24iICk7
DQoNCiAgICAkTVFUVF9EYXRheyRpbnN0YW5jZX17c2VsZn0gPSAkc2VsZjsNCg0KICAgICRzZWxm
LT5kZWJ1ZygxLCAiT3BlbmluZyBNUVRUICgkaW5zdGFuY2UpIGNvbm5lY3Rpb24gdG8gJCRzZWxm
e2hvc3R9LyQkc2VsZntwb3J0fS8kJHNlbGZ7dG9waWN9Iik7DQogICAgJHNlbGYtPmRlYnVnKDEs
ICIgICAgSG9zdCAgICAgICA9ICQkc2VsZntob3N0fSIpOw0KICAgICRzZWxmLT5kZWJ1ZygxLCAi
ICAgIFBvcnQgICAgICAgPSAkJHNlbGZ7cG9ydH0iKTsNCiAgICAkc2VsZi0+ZGVidWcoMSwgIiAg
ICBUb3BpYyAgICAgID0gJCRzZWxme3RvcGljfSIpOw0KICAgICRzZWxmLT5kZWJ1ZygxLCAiICAg
IFVzZXIgICAgICAgPSAkJHNlbGZ7dXNlcl9uYW1lfSIpOw0KICAgICRzZWxmLT5kZWJ1ZygxLCAi
ICAgIFBhc3N3b3JkICAgPSAqKioiIC4NCiAgICAgICAgKA0KICAgICAgICAgICAgICBleGlzdHMo
JElOQ3snRGlnZXN0L01ENS5wbSd9KQ0KICAgICAgICAgICAgPyAiTUQ1OiIgLiBtZDVfaGV4KCQk
c2VsZntwYXNzd29yZH0pDQogICAgICAgICAgICA6ICdbbWFza2VkXScNCgkpDQogICAgKTsNCiAg
ICAkc2VsZi0+ZGVidWcoMSwgIiAgICBLZWVwIEFsaXZlICAgICAgICAgICAgID0gJCRzZWxme2tl
ZXBfYWxpdmVfdGltZXJ9Iik7DQogICAgJHNlbGYtPmRlYnVnKDEsICIgICAgT3B0aW9ucyAgICAg
ICAgICAgICAgICA9ICRvcHRpb25zIik7DQogICAgJHNlbGYtPmRlYnVnKDEsICIgICAgVXNlIEhB
IERldmljZSBEaXNjb3Zlcnk9ICQkc2VsZnt1c2VfaGFfZGV2aWNlX2Rpc2N9Iik7DQogICAgJHNl
bGYtPmRlYnVnKDEsICIgICAgVG9waWMgUHJlZml4ICAgICAgICAgICA9ICQkc2VsZnt0b3BpY19w
cmVmaXh9Iik7DQoNCiAgICAjIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgJHNlbGYtPm1xdHRfY29u
bmVjdCgpOw0KDQogICAgdW5sZXNzICgkc2VsZikgeyANCiAgICAJJHNlbGYtPmVycm9yKCJcbioq
KlxuKioqIEhtbSwgdGhpcyBpcyBub3QgZ29vZCEsIGNhbid0IGZpbmQgbXlzZWxmXG4qKipcbiIp
Ow0KICAgIAlyZXR1cm47DQogICAgfQ0KDQogICAgIyBIZXkgd2hhdCBoYXBwZW5zIHdoZW4gd2Ug
ZmFpbCA/DQogICAgIyRNUVRUX0RhdGF7JGluc3RhbmNlfXtzZWxmfSA9ICRzZWxmOw0KICAgIGlm
ICggMSA9PSBzY2FsYXIoIGtleXMgJU1RVFRfRGF0YSApICkgeyAgICAjIEFkZCBob29rcyBvbiBm
aXJzdCBjYWxsIG9ubHkNCiAgICAgICAgJHNlbGYtPmxvZygiYWRkZWQgTVFUVCBjaGVja19mb3Jf
ZGF0YSAuLi4iKTsNCiAgICAgICAgJjo6TWFpbkxvb3BfcHJlX2FkZF9ob29rKCBcJm1xdHQ6OmNo
ZWNrX2Zvcl9kYXRhLCAxICk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICAjJHNlbGYtPmxv
ZygiYWxyZWFkeSBhZGRlZCBNUVRUIHBvbGwgLi4uIiAuIHNjYWxhcihrZXlzICVNUVRUX0RhdGEp
ICk7DQogICAgICAgICMkc2VsZi0+bG9nKCJhbHJlYWR5IGFkZGVkIE1RVFQgcG9sbCAuLi4gYnV0
IHRoYXQncyBva2F5IiApOw0KICAgICAgICAjZXhpdCAxOw0KICAgIH0NCg0KICAgICMgICRzZWxm
LT5zZXQoICdvbicsICRzZWxmICk7DQoNCiAgICAmOjpSZWxvYWRfcG9zdF9hZGRfaG9vayggXCZt
cXR0OjpnZW5lcmF0ZV92b2ljZV9jb21tYW5kcywgMSwgJHNlbGYgKTsNCiAgICAmOjpSZWxvYWRf
cG9zdF9hZGRfaG9vayggXCZtcXR0OjpjcmVhdGVfZGlzY292ZXJ5X2RhdGEsIDEsICRzZWxmICk7
DQoNCiAgICByZXR1cm4gJHNlbGY7DQp9DQoNCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMg
SGFuZGxlIGRldmljZSBJL086IFJlYWQgYW5kIHdyaXRlIG1lc3NhZ2VzIG9uIHRoZSBidXMNCg0K
PWl0ZW0gQzxjaGVja19mb3JfZGF0YSgpPg0KDQogICAgQ2FsbGVkIGF0IHRoZSBzdGFydCBvZiBl
dmVyeSBsb29wLiBUaGlzIGNoZWNrcyBmb3IgbmV3IGRhdGEuDQoNCj1jdXQNCg0KbXkgQG91dHF1
ZXVlID0gKCk7ICAgICMgUXVldWUgb2YgbWVzc2FnZXMgdG8gYmUgc2VudA0KbXkgJGNoZWNrX2Zv
cl9kYXRhX2ZpcnN0ID0gMTsNCg0Kc3ViIGNoZWNrX2Zvcl9kYXRhIHsNCiAgICBpZiggJGNoZWNr
X2Zvcl9kYXRhX2ZpcnN0ICkgew0KCSRjaGVja19mb3JfZGF0YV9maXJzdCA9IDA7DQoJbXF0dC0+
bG9nKCAibm93IGNoZWNraW5nIGZvciBuZXcgZGF0YSIgKTsNCiAgICB9DQogICAgZm9yZWFjaCBt
eSAkaW5zdCAoIGtleXMgJU1RVFRfRGF0YSApIHsNCiAgICAgICAgbXkgJHNlbGYgPSAkTVFUVF9E
YXRheyRpbnN0fXtzZWxmfTsNCg0KICAgICAgICAjIyMgTVFUVCBzdHVmZiBiZWxvdw0KDQogICAg
ICAgICMgQ2hlY2sgZm9yIGNvbm5lY3Rpdml0eQ0KICAgICAgICBpZiAoICRzZWxmLT5pc05vdENv
bm5lY3RlZCgpICkgew0KICAgICAgICAgICAgIyMjDQogICAgICAgICAgICAjIyMgVGhpcyBuZWVk
cyBhIGxvdCBvZiB3b3JrDQogICAgICAgICAgICAjIyMNCiAgICAgICAgICAgICMjIyBARklYTUU6
IGZhaWxlZCBjb25uZWN0aW9uDQogICAgICAgICAgICBpZiAoICdvZmYnIG5lICRzZWxmLT57c3Rh
dGV9ICkgew0KCQlteSAkaW5zdCA9ICRzZWxmLT57aW5zdGFuY2V9Ow0KDQoJCWlmICgkJHNlbGZ7
cmVjb25fdGltZXJ9LT5pbmFjdGl2ZSkgew0KICAgICAgICAgICAgCQkkc2VsZi0+bG9nKCIkaW5z
dCBjb25uZWN0aW9uIGZhaWxlZCAoJCRzZWxme2hvc3R9LyQkc2VsZntwb3J0fS8kJHNlbGZ7dG9w
aWN9KSwgSSB3aWxsIHRyeSB0byByZWNvbm5lY3QgaW4gMjAgc2Vjb25kcyIpOw0KICAgICAgICAg
ICAgCQkkJHNlbGZ7cmVjb25fdGltZXJ9LT5zZXQoMjAsIHN1YiB7ICRNUVRUX0RhdGF7JGluc3R9
e3NlbGZ9LT5tcXR0X2Nvbm5lY3QoKSB9KTsNCgkJfQ0KDQogICAgICAgICAgICAgICAgIyBjaGVj
ayB0aGUgc3RhdGUgdG8gc2VlIGlmIGl0J3Mgb2ZmIGFscmVhZHkNCg0KICAgICAgICAgICAgICAg
ICRzZWxmLT5zZXQoICdvZmYnLCAnbXF0dDo6Y2hlY2tfZm9yX2RhdGEnICk7CSMgMjAyNC0xMjog
UmVwbGFjZWQgaGV4IG9iamVjdCBhZGRyZXNzIHdpdGggZGVzY3JpcHRpdmUgdGV4dCBpbiAybmQg
ZmllbGQuLUJQTQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFNraXAgaWYgd2UncmUg
bm90IGNvbm5lY3RlZA0KICAgICAgICAgICAgbmV4dDsNCiAgICAgICAgfQ0KDQogICAgICAgICMj
IyAtWyBJbnB1dCBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQ0KDQogICAgICAgICMgVGhpcyBvbmUgZG9lc24ndCBibG9jaw0KICAgICAg
ICBteSAkbXNnOw0KDQoJd2hpbGUoICRtc2cgPSAkc2VsZi0+cmVhZF9tcXR0X21zZyggMCApICkg
ew0KICAgICAgICAgICAgIyMjDQogICAgICAgICAgICAjIyMgT2theSB0aGlzIGlzIHRoZSBoYXJk
IHBhcnQNCiAgICAgICAgICAgICMjIyBGb3Igbm93IEknbSBvbmx5IHdvcnJpZWQgYWJvdXQgZGF0
YSB0aGF0IGZpdHMgaW50byAxIHJlYWQNCiAgICAgICAgICAgICMjIw0KICAgICAgICAgICAgIyMj
IEkndmUgZ290IGEgbWVzc2FnZSwgSSB0aGluayBpdCBoYXMNCiAgICAgICAgICAgICMjIyAgICAg
JG1zZy0+dG9waWMNCiAgICAgICAgICAgICMjIyAgICAgJG1zZy0+bWVzc2FnZQ0KICAgICAgICAg
ICAgIyMjIEkgbmVlZCB0byBtYXAgdGhpcyBpbnRvIHRoZSB1c2VyIGRldmljZQ0KICAgICAgICAg
ICAgIyMjIHRoZSB0b3AgaXMgdGhlIGFkZHJlc3MsIHRoZSBtZXNzYWdlIHRoZSB2YWx1ZQ0KICAg
ICAgICAgICAgIyMjDQogICAgICAgICAgICBpZiAoICRtc2ctPm1lc3NhZ2VfdHlwZSA9PSBNUVRU
X1BVQkxJU0ggKSB7DQogICAgICAgICAgICAgICAgIyMjDQogICAgICAgICAgICAgICAgIyMjIFNv
bWVvbmUgcHVibGlzaGVkIHNvbWV0aGluZywgZGVhbCB3aXRoIGl0DQogICAgICAgICAgICAgICAg
IyMjDQoJCSRzZWxmLT5kZWJ1ZyggMSwgIiRpbnN0IFJjdidkOiBSOiQkbXNne3JldGFpbn0gVDon
JCRtc2d7dG9waWN9JyBNOickJG1zZ3ttZXNzYWdlfSciICApOw0KCQkjICRzZWxmLT5kZWJ1Zygg
MSwgIiRpbnN0IFJjdidkOiBTOiciIC4gJG1zZy0+c3RyaW5nIC4gIiciLCAzICk7DQoNCiAgICAg
ICAgICAgICAgICAjIyMNCiAgICAgICAgICAgICAgICAjIyMgU28gd2Ugd2FudCB0aGUgdG9waWMg
YW5kIHRoZSBtZXNzYWdlDQogICAgICAgICAgICAgICAgIyMjICRtc2ctPnRvcGljICAgPSBhZGRy
ZXNzIG9yIGlkZW50aWZpZXIgb2YgdGhlIGRldmljZQ0KICAgICAgICAgICAgICAgICMjIyAkbXNn
LT5tZXNzYWdlID0gaXMgdGhlIHZhbHVlIG9mIHRoZSBkZXZpY2UNCiAgICAgICAgICAgICAgICAj
IyMNCiAgICAgICAgICAgICAgICAjIyMgV2UgYWxzbyBuZWVkIHRoZSBpbnN0YW5jZSB0byBrbm93
IHdobyBzZXQgdGhlIG9iag0KICAgICAgICAgICAgICAgICMjIw0KICAgICAgICAgICAgICAgICRz
ZWxmLT5wYXJzZV9kYXRhX3RvX29iaiggJG1zZywgJGluc3QsICRzZWxmICk7DQoNCiAgICAgICAg
ICAgIH0NCiAgICAgICAgICAgIGVsc2lmICggJG1zZy0+bWVzc2FnZV90eXBlID09IE1RVFRfUElO
R1JFU1AgKSB7DQogICAgICAgICAgICAgICAgJCRzZWxme2dvdF9waW5nX3Jlc3BvbnNlfSA9IDE7
DQogICAgICAgICAgICAgICAgJHNlbGYtPmRlYnVnKCAyLCAiJGluc3QgY2hlY2tfZm9yX2RhdGEg
UGluZyByY3ZkIiApOw0KICAgICAgICAgICAgICAgICRzZWxmLT5kZWJ1ZyggMywgIlBpbmcgbXNn
OiAiIC4gRHVtcGVyKCAkbXNnICkgKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ug
ew0KICAgICAgICAgICAgICAgICMgIiRtc2ctPnN0cmluZyINCiAgICAgICAgICAgICAgICAjIE5l
dDo6TVFUVDo6TWVzc2FnZTo6U3ViQWNrPUhBU0goMHgyZGE5NGUwKS0+c3RyaW5nDQogICAgICAg
ICAgICAgICAgJHNlbGYtPmRlYnVnKCAxLCAiJGluc3QgY2hlY2tfZm9yX2RhdGEgVU5IQU5ETEVE
IE1RVFQgTUVTU0FHRSBSZWNlaXZlZDogIiAuIER1bXBlciggJG1zZyApICk7DQogICAgICAgICAg
ICB9DQogICAgICAgIH0NCg0KICAgICAgICAjIyMgLVsgT3V0cHV0IF0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KPWJlZ2luIGNvbW1l
bnQNCgkjIFRoaXMgaXMgd2hlcmUgd2UgbmVlZCB0byBjaGVjayBmb3Igb3V0Z29pbmcNCgkjIEkg
dGhpbmsgd2UncmUgd3JpdGluZyBkaXJlY3RseSBhdCB0aGUgbW9tZW50LCBTbyBJIHByb2JhYmx5
IHdvbid0IG5lZWQNCgkjIHRoaXMuIE5vdCBzdXJlIHdoaWNoIGlzIGJldHRlcg0KCWlmICgkI291
dHF1ZXVlID49IDApIHsNCgkgICAgbXkgJG1yZWYgPSBzaGlmdCBAb3V0cXVldWU7DQoNCgkgICAg
IyMjDQoJICAgICMjIyBPa2F5IHRoaXMgaXMgdGhlIG90aGVyIGhhcmQgcGFydA0KCSAgICAjIyMg
DQoJICAgICNzZW5kX21xdHRfbXNnKCRtcmVmKSk7DQoJICAgICRzZWxmLT5kZWJ1ZyggMSwgIiRp
bnN0IGNoZWNrX2Zvcl9kYXRhIHNlbmRfbXF0dF9tc2cgJG1yZWYgIik7DQoJfQ0KPWN1dA0KDQog
ICAgICAgICMjIyAtWyBQaW5nIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogICAgICAgICMjIw0KICAgICAgICAjIyMgV2UgbmVl
ZCB0byBkZWFsIHdpdGggdGhlIG1xdHQgcGluZyBmb3IgZWFjaCBzb2NrZXQsIG5vdCAxIHBpbmcg
Zm9yIGFsbA0KICAgICAgICAjIyMNCiAgICAgICAgIyBQaW5nIGNoZWNrDQogICAgICAgIGlmICgg
VGltZTo6SGlSZXM6OnRpbWUgPiAkJHNlbGZ7bmV4dF9waW5nfSApIHsNCgkgICAgaWYoICRzZWxm
LT57Z290X3BpbmdfcmVzcG9uc2V9ICkgew0KCQkkc2VsZi0+e3BpbmdfbWlzc2VkX2NvdW50fSA9
IDA7DQoJICAgIH0gZWxzZSB7DQoJCSMjIw0KCQkjIyMgV2UndmUgZXhjZWVkZWQgdGhlIHBpbmcg
dGltZQ0KCQkjIyMNCgkJJHNlbGYtPntwaW5nX21pc3NlZF9jb3VudH0gKz0gMTsNCgkJJHNlbGYt
PmxvZygiJGluc3QgY2hlY2tfZm9yX2RhdGEgUGluZyBSZXNwb25zZSB0aW1lb3V0LiIpOw0KCQlp
ZiggJHNlbGYtPntwaW5nX21pc3NlZF9jb3VudH0gPj0gNCApIHsNCgkJICAgICRzZWxmLT5sb2co
IiRpbnN0IGNoZWNrX2Zvcl9kYXRhIFBpbmcgUmVzcG9uc2UgdGhyZXNob2xkIGV4Y2VlZGVkLiIp
Ow0KCQkgICAgc2h1dGRvd24oICRzZWxmLT57c29ja2V0fSwgMiApOw0KCQkgICAgJHNlbGYtPntz
b2NrZXR9ID0gdW5kZWY7DQoJCSAgICAjIGNoZWNrX2Zvcl9kYXRhIHdpbGwgcmVjb25uZWN0IHNv
Y2tldA0KCQl9DQoJICAgIH0NCg0KICAgICAgICAgICAgJHNlbGYtPmRlYnVnKCAyLCAiJGluc3Qg
cmVhZF9tcXR0X21zZyBQaW5nIFJlcXVlc3QiICk7DQogICAgICAgICAgICBzZW5kX21xdHRfbXNn
KCAkc2VsZiwgbWVzc2FnZV90eXBlID0+IE1RVFRfUElOR1JFUSApOw0KICAgICAgICAgICAgJCRz
ZWxme2dvdF9waW5nX3Jlc3BvbnNlfSA9IDA7DQogICAgICAgIH0NCiAgICB9ICAgICMgRW5kIG9m
IGZvcmVhY2ggJHNvY2tldA0KfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQo9aXRlbSBD
PChzZW5kX21xdHRfbXNnKT4NCj1jdXQNCg0Kc3ViIHNlbmRfbXF0dF9tc2cgew0KICAgIG15ICgg
JHNlbGYsICVwX29iamVjdHMgKSA9IEBfOw0KDQogICAgbXkgJG1zZyA9IE5ldDo6TVFUVDo6TWVz
c2FnZS0+bmV3KCVwX29iamVjdHMpOw0KICAgICRtc2cgPSAkbXNnLT5ieXRlczsNCg0KICAgICMg
cHJpbnQoICJ3cml0aW5nIHRvIG1xdHQgc29ja2V0ICckbXNnJ1xuIiApOw0KICAgICMgc3lzd3Jp
dGUgPw0KICAgIGlmKCAhZGVmaW5lZCAkJHNlbGZ7c29ja2V0fSApIHsNCglyZXR1cm47DQogICAg
fQ0KICAgIHN5c3dyaXRlICQkc2VsZntzb2NrZXR9LCAkbXNnLCBsZW5ndGggJG1zZzsNCg0KICAg
ICMgUmVzZXQgdGhlIG5leHRfcGluZyB0aW1lciAod2Ugc2VudCBzb21ldGhpbmcgc28gd2UgZG9u
J3QgbmVlZCBhbm90aGVyIHBpbmcNCiAgICAjIHVudGlsIG5vdytrZWVwX2FsaXZlX3RpbWVyDQog
ICAgJCRzZWxme25leHRfcGluZ30gPSBUaW1lOjpIaVJlczo6dGltZSArICQkc2VsZntrZWVwX2Fs
aXZlX3RpbWVyfTsNCn0NCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KPWl0ZW0gQzxyZWFk
X21xdHRfbXNnKCk+DQo9Y3V0DQoNCnN1YiByZWFkX21xdHRfbXNnIHsNCiAgICBteSAoJHNlbGYs
ICR0aW1lb3V0KSA9IEBfOw0KDQogICAgbXkgJHNlbGVjdCAgPSBJTzo6U2VsZWN0LT5uZXcoICQk
c2VsZntzb2NrZXR9ICk7DQogICAgaWYoICFkZWZpbmVkICR0aW1lb3V0ICkgew0KCSR0aW1lb3V0
ID0gMDsNCiAgICB9DQoNCiAgICBkbyB7DQogICAgICAgICMjIw0KICAgICAgICAjIyMgSSByZWFs
bHkgbmVlZCB0byBzaXQgZG93biBhbmQgZmlndXJlIHRoaXMgb3V0DQogICAgICAgICMjIw0KICAg
ICAgICBteSAkbXF0dCA9IE5ldDo6TVFUVDo6TWVzc2FnZS0+bmV3X2Zyb21fYnl0ZXMoICRzZWxm
LT57YnVmfSwgMSApOw0KICAgICAgICAjDQogICAgICAgICMgSSBhbSBhIGxpdHRsZSBjb25mdXNl
ZCBieSB0aGlzDQogICAgICAgICMNCglpZiggZGVmaW5lZCAkbXF0dCApIHsNCgkgICAgIyBwcmlu
dCggInJlYWRfbXF0dF9tc2cgJHNlbGYtPntpbnN0YW5jZX0gcmV0dXJuaW5nIGEgbWVzc2FnZSAt
LSByZW1haW5pbmcgYnVmZmVyICckc2VsZi0+e2J1Zn0nXG4iICk7DQoJICAgIHJldHVybiAkbXF0
dDsNCgl9DQoNCiAgICAgICAgIyMjIFJldHVybiBpZiB0aGVyZSBpcyBubyBkYXRhIHdpdGhpbiB0
aGUgYWxsb3RlZCB0aW1lDQogICAgICAgICRzZWxlY3QtPmNhbl9yZWFkKCR0aW1lb3V0KSB8fCBy
ZXR1cm47DQoNCiAgICAgICAgIyBjYW4gcmV0dXJuIHVuZGVmIChlcnJvcikgb3IgMCBieXRlcyAo
ZW9mKQ0KICAgICAgICBteSAkYnl0ZXMgPSBzeXNyZWFkICRzZWxmLT57c29ja2V0fSwgJHNlbGYt
PntidWZ9LCAyMDQ4LCBsZW5ndGggJHNlbGYtPntidWZ9Ow0KDQogICAgICAgICMgV2UgZ2V0IG5v
IGJ5dGVzIGlmIHRoZXJlIGlzIGFuIGVycm9yIG9yIHRoZSBzb2NrZXQgaGFzIGNsb3NlZA0KICAg
ICAgICB1bmxlc3MgKCRieXRlcykgew0KCSAgICBteSAkaW5zdCA9ICQkc2VsZntpbnN0YW5jZX07
DQogICAgICAgICAgICBpZiAoJCRzZWxme3JlY29uX3RpbWVyfS0+aW5hY3RpdmUpIHsNCgkJICRz
ZWxmLT5sb2coICIkJHNlbGZ7aW5zdGFuY2V9OiByZWFkX21xdHRfbXNnIFNvY2tldCBjbG9zZWQg
IiAuICggZGVmaW5lZCAkYnl0ZXMgPyAnZ3JhY2VmdWxseSAnIDogIndpdGggZXJyb3IgWyAkISBd
IiApICk7DQoJCSAkc2VsZi0+bG9nKCAiVGhpcyBjb3VsZCBiZSBjYXVzZWQgYnkgc2VuZGluZyBh
biBpbGwgZm9ybWVkIG1xdHQgbWVzc2FnZSwgYW5kIHRoZSBicm9rZXIgY2xvc2VkIHRoZSBzb2Nr
ZXQiICk7DQoJCSAkc2VsZi0+bG9nKCAiaW5zdGFuY2UgJCRzZWxme2luc3RhbmNlfSB3aWxsIHRy
eSB0byByZWNvbm5lY3QgaW4gMjAgc2Vjb25kcyIpOw0KCQkgJCRzZWxme3JlY29uX3RpbWVyfS0+
c2V0KDIwLCBzdWIgeyAkTVFUVF9EYXRheyRpbnN0fXtzZWxmfS0+bXF0dF9jb25uZWN0KCkgfSk7
DQoJICAgIH0NCg0KICAgICAgICAgICAgIyBOb3QgYSBwZXJtYW5lbnQgc29sdXRpb24ganVzdCBh
IHdheSB0byBrZWVwIGRlYnVnZ2luZw0KICAgICAgICAgICAgIyRzZWxmLT5kZWJ1ZyggIjEsIGRl
bGV0aW5nICQkc2VsZntpbnN0YW5jZX1cbiIgLiBEdW1wZXIoIFwkc2VsZiApICk7DQogICAgICAg
ICAgICAjZGVsZXRlKCAkTVFUVF9EYXRheyAkJHNlbGZ7aW5zdGFuY2V9IH0gKTsNCg0KICAgICAg
ICAgICAgcmV0dXJuOw0KICAgICAgICB9DQogICAgfSB3aGlsZSAoIDEgKTsNCn0NCg0KIyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0NCg0KDQo9aXRlbSBDPHNldCgpPg0KPWN1dA0KDQpzdWIgc2V0IHsN
CiAgICBteSAoICRzZWxmLCAkbXNnLCAkc2V0X2J5ICkgPSBAXzsNCg0KICAgIGlmICggJG1haW46
OkRlYnVne21xdHR9ICkgew0KICAgICAgICBteSAkeFN0ciA9IGRlZmluZWQoJG1zZykgPyAiKCRt
c2cpIiA6ICJ1bmRlZmluZWQgbWVzc2FnZSI7DQogICAgICAgICR4U3RyIC49IGRlZmluZWQoJHNl
dF9ieSkgPyAiLCAoc2V0Ynk6JHNldF9ieSkiIDogIiwgdW5kZWZpbmVkIHNldF9ieSwgT2JqOiAi
Ow0KICAgICAgICAkeFN0ciAuPSBkZWZpbmVkKCAkJHNlbGZ7b2JqZWN0X25hbWV9ICkgPyAiLCAk
JHNlbGZ7b2JqZWN0X25hbWV9IiA6ICIsIHVuZGVmaW5lZCBvYmplY3RfbmFtZSI7IA0KDQogICAg
ICAgICRzZWxmLT5kZWJ1ZyggMSwgIm1xdHQgc2V0ICQkc2VsZntpbnN0YW5jZX06IFskeFN0cl0i
KTsNCiAgICAgICAgJHNlbGYtPmRlYnVnKCAxLA0KICAgICAgICAgICAgJHNlbGYtPmlzYSgnbXF0
dCcpDQogICAgICAgICAgICA/ICJtcXR0IHNldCAkJHNlbGZ7aW5zdGFuY2V9OiBpcyBhbiBtcXR0
IG9iamVjdCINCiAgICAgICAgICAgIDogIm1xdHQgc2V0ICQkc2VsZntpbnN0YW5jZX06IGlzIG5v
dCBhbiBtcXR0IG9iamVjdCINCiAgICAgICAgKTsNCiAgICB9DQoNCiAgICByZXR1cm4gdW5sZXNz
ICgkbXNnKTsNCg0KICAgIGlmICggJHNlbGYtPmlzYSgnbXF0dCcpICkgew0KDQogICAgICAgICMg
SSByZWFsbHkgd2FudCB0byB1c2UgdGhpcyB0byBhbGxvdyB0aGUgdXNlciB0byBtYW51YWxseQ0K
ICAgICAgICAjIGNvbm5lY3QgYW5kIGRpc2Nvbm5lY3QgdGhlIHNvY2tldA0KDQogICAgICAgICMN
CiAgICAgICAgJHNlbGYtPlNVUEVSOjpzZXQoICRtc2csICRzZXRfYnkgKSBpZiBkZWZpbmVkICRt
c2c7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgICAjIyMNCiAgICAgICAgIyMjIE9rYXkgaGVy
ZSBpcyB0aGUgaGFyZCBwYXJ0DQogICAgICAgICMjIyBJIG5lZWQgdGhlIGluc3RhbmNlIHNvY2tl
dCwgdGhlIG9iaidzIHRvcGljIGFuZCBtZXNzYWdlDQogICAgICAgICMjIyBpbiBvcmRlciB0byBz
ZW5kIHRoZSBtZXNzYWdlDQogICAgICAgICMjIw0KICAgICAgICAkJHNlbGZ7aW5zdGFuY2V9LT5w
dWJfbXNnKA0KICAgICAgICAgICAgbWVzc2FnZV90eXBlID0+IE1RVFRfUFVCTElTSCwNCiAgICAg
ICAgICAgIHJldGFpbiAgICAgICA9PiAkJHNlbGZ7cmV0YWlufSwNCiAgICAgICAgICAgIHRvcGlj
ICAgICAgICA9PiAkJHNlbGZ7dG9waWN9LA0KICAgICAgICAgICAgbWVzc2FnZSAgICAgID0+ICRt
c2cNCiAgICAgICAgKTsNCiAgICB9DQp9DQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCj1p
dGVtIEM8KHB1Yl9tc2coKSk+DQo9Y3V0DQoNCiMjIw0KIyMjIFdlJ3JlIHdyaXRpbmcgZGlyZWN0
IGJ1dCB0aGF0J3Mgb2theSBhcyBpdCdzIG5vdCBsaWtlIHdlJ3JlIHdhaXRpbmcgb24gYQ0KIyMj
IHNlcmlhbCBwb3J0IHdoZXJlIHRoaW5ncyBjYW4gcmVhbGx5IGdldCBiYWNrZWQgdXAgKEhtbSwg
YXJlIHdlIGJsb2NraW5nIG9uDQojIyMgYSB3cml0ZT8pDQojIyMNCnN1YiBwdWJfbXNnIHsNCiAg
ICBteSAoICRzZWxmLCAlcF9vYmplY3RzICkgPSBAXzsNCg0KICAgIG15ICRDYWxsZXIgPSAoKGNh
bGxlcigxKSlbM10gLy8gJ1t1bmRlZl0nKTsJIyBXaG8gY2FsbGVkIHVzLg0KDQogICAgIyBDaGVj
ayBmb3IgY29ubmVjdGl2aXR5DQogICAgaWYgKCAkc2VsZi0+aXNOb3RDb25uZWN0ZWQoKSApIHsN
Cg0KICAgICAgICAjIEZpcnN0IHNheSBzb21ldGhpbmcNCiAgICAgICAgJHNlbGYtPmVycm9yKCIk
JHNlbGZ7aW5zdGFuY2V9IGlzIG5vdCBjb25uZWN0ZWQgLS0gZmFpbGVkIHRvIHB1Ymxpc2ggdG8g
JHBfb2JqZWN0c3t0b3BpY309JHBfb2JqZWN0c3ttZXNzYWdlfSwgQ2FsbGVyOiRDYWxsZXIiKTsN
Cg0KICAgICAgICAjIENoZWNrX2Zvcl9kYXRhIHNob3VsZCBpbml0aWF0ZSByZWNvbm5lY3QNCg0K
IyAJIyMjDQojIAkjIyMgVGhpcyBuZWVkcyBhIGxvdCBvZiB3b3JrDQojIAkjIyMNCiMgCSMjIyBA
RklYTUU6IGZhaWxlZCBjb25uZWN0aW9uDQojIAlpZiAoICdvZmYnIG5lICRzZWxmLT57c3RhdGV9
ICkgew0KIyAJICAgIG15ICRpbnN0ID0gJHNlbGYtPntpbnN0YW5jZX07DQojIA0KIyAJICAgIGlm
ICgkJHNlbGZ7cmVjb25fdGltZXJ9LT5pbmFjdGl2ZSkgew0KIyAJCSAgICAkc2VsZi0+bG9nKCIk
aW5zdCBjb25uZWN0aW9uIGZhaWxlZCAoJCRzZWxme2hvc3R9LyQkc2VsZntwb3J0fS8kJHNlbGZ7
dG9waWN9KSwgSSB3aWxsIHRyeSB0byByZWNvbm5lY3QgaW4gMjAgc2Vjb25kcyIpOw0KIyAJCSAg
ICAkJHNlbGZ7cmVjb25fdGltZXJ9LT5zZXQoMjAsIHN1YiB7ICRNUVRUX0RhdGF7JGluc3R9e3Nl
bGZ9LT5tcXR0X2Nvbm5lY3QoKSB9KTsNCiMgCSAgICB9DQojIA0KIyAJICAgICMgY2hlY2sgdGhl
IHN0YXRlIHRvIHNlZSBpZiBpdCdzIG9mZiBhbHJlYWR5DQojIA0KIyAJICAgICRzZWxmLT5zZXQo
ICdvZmYnLCAkc2VsZiApOw0KIyAJfQ0KDQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgJHNl
bGYtPmRlYnVnKCAxLCAiJCRzZWxme2luc3RhbmNlfSBQdWI6IFI6JHBfb2JqZWN0c3tyZXRhaW59
IFQ6JyRwX29iamVjdHN7dG9waWN9JyBNOickcF9vYmplY3Rze21lc3NhZ2V9JywgQ2FsbGVyOiRD
YWxsZXIiICk7DQoNCiAgICAjIFBlcmZvcm0gYSBzYW5pdHkgY2hlY2suIEEgYmFkIHRvcGljIGNh
biBjYXVzZSB0aGUgTVFUVCBzZXJ2ZXIgdG8gaGFuZyB1cCBvbiB1cywgbG9zaW5nIHN1YnNlcXVl
bnQgbWVzc2FnZXMgZm9yIDIwIHNlY29uZHMuDQogICAgaWYgKCRwX29iamVjdHN7dG9waWN9ID1+
IC9bKyMgXS8pIHsNCiAgICAgICAgJHNlbGYtPmVycm9yKHFxPHB1Yl9tc2cgcmVqZWN0aW5nIG1l
c3NhZ2UgZnJvbSAkQ2FsbGVyIC0tIHRvcGljIG5hbWUgIiRwX29iamVjdHN7dG9waWN9IiBpcyBp
bnZhbGlkLj4pOw0KICAgICAgICByZXR1cm47DQogICAgfQ0KDQogICAgJHNlbGYtPnNlbmRfbXF0
dF9tc2coJXBfb2JqZWN0cyk7DQp9DQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCj1pdGVt
IEM8KGFkZCk+DQo9Y3V0DQoNCnN1YiBhZGQgew0KICAgIG15ICggJHNlbGYsIEBwX29iamVjdHMg
KSA9IEBfOw0KDQogICAgbXkgQGxfb2JqZWN0czsNCg0KICAgIGZvciBteSAkbF9vYmplY3QgKEBw
X29iamVjdHMpIHsNCiAgICAgICAgaWYgKCAkbF9vYmplY3QtPmlzYSgnR3JvdXBfSXRlbScpICkg
ew0KICAgICAgICAgICAgQGxfb2JqZWN0cyA9ICQkbF9vYmplY3R7bWVtYmVyc307DQogICAgICAg
ICAgICBmb3IgbXkgJG9iaiAoQGxfb2JqZWN0cykgew0KICAgICAgICAgICAgICAgICRzZWxmLT5h
ZGQoJG9iaik7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWxzZSB7DQogICAg
ICAgICAgICAkc2VsZi0+YWRkX2l0ZW0oJGxfb2JqZWN0KTsNCiAgICAgICAgfQ0KICAgIH0NCn0N
Cg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KPWl0ZW0gQzwoYWRkX2l0ZW0pPg0KPWN1dA0K
DQpzdWIgYWRkX2l0ZW0gew0KICAgIG15ICggJHNlbGYsICRwX29iamVjdCApID0gQF87DQoNCiAg
ICBwdXNoIEB7ICQkc2VsZntvYmplY3RzfSB9LCAkcF9vYmplY3Q7DQoNCiAgICByZXR1cm4gJHBf
b2JqZWN0Ow0KfQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQo9aXRlbSBDPChyZW1vdmVf
YWxsX2l0ZW1zKT4NCj1jdXQNCg0Kc3ViIHJlbW92ZV9hbGxfaXRlbXMgew0KICAgIG15ICgkc2Vs
ZikgPSBAXzsNCg0KICAgICRzZWxmLT5sb2coIm1xdHQgcmVtb3ZlX2FsbF9pdGVtcygpIik7DQoN
Cj1iZWdpbiBjb21tZW50DQogICAgaWYgKHJlZiAkJHNlbGZ7b2JqZWN0c30pIHsNCglmb3JlYWNo
IChAeyQkc2VsZntvYmplY3RzfX0pIHsNCgkgICAgIyAgICAgICAgJF8tPnVudGllX2l0ZW1zKCRz
ZWxmKTsNCgl9DQogICAgfQ0KPWN1dA0KDQogICAgZGVsZXRlICRzZWxmLT57b2JqZWN0c307DQp9
DQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCj1pdGVtIEM8KGFkZF9pdGVtX2lmX25vdF9w
cmVzZW50KT4NCj1jdXQNCg0Kc3ViIGFkZF9pdGVtX2lmX25vdF9wcmVzZW50IHsNCiAgICBteSAo
ICRzZWxmLCAkcF9vYmplY3QgKSA9IEBfOw0KDQogICAgaWYgKCByZWYgJCRzZWxme29iamVjdHN9
ICkgew0KICAgICAgICBmb3JlYWNoICggQHsgJCRzZWxme29iamVjdHN9IH0gKSB7DQogICAgICAg
ICAgICBpZiAoICRfIGVxICRwX29iamVjdCApIHsNCiAgICAgICAgICAgICAgICByZXR1cm4gMDsN
CiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICAkc2VsZi0+YWRkX2l0ZW0oJHBf
b2JqZWN0KTsNCiAgICByZXR1cm4gMTsNCn0NCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0K
PWl0ZW0gQzwocmVtb3ZlX2l0ZW0pPg0KPWN1dA0KDQpzdWIgcmVtb3ZlX2l0ZW0gew0KICAgIG15
ICggJHNlbGYsICRwX29iamVjdCApID0gQF87DQoNCiAgICBpZiAoIHJlZiAkJHNlbGZ7b2JqZWN0
c30gKSB7DQogICAgICAgIGZvciAoIG15ICRpID0gMDsgJGkgPCBzY2FsYXIoIEB7ICQkc2VsZntv
YmplY3RzfSB9ICk7ICRpKysgKSB7DQogICAgICAgICAgICBpZiAoICQkc2VsZntvYmplY3RzfS0+
WyRpXSBlcSAkcF9vYmplY3QgKSB7DQogICAgICAgICAgICAgICAgc3BsaWNlIEB7ICQkc2VsZntv
YmplY3RzfSB9LCAkaSwgMTsNCg0KICAgICAgICAgICAgICAgICMgICAgICAgICAgICRwX29iamVj
dC0+dW50aWVfaXRlbXMoJHNlbGYpOw0KICAgICAgICAgICAgICAgIHJldHVybiAxOw0KICAgICAg
ICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIHJldHVybiAwOw0KfQ0KDQojIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQ0KDQo9aXRlbSBDPHBhcnNlX2RhdGFfdG9fb2JqKCk+DQogICAgVGFrZSB0
aGUgZGF0YSBhbmQgcGFyc2UgaXQgdG8gdGhlIE1IIG9iaigpDQoNCiAgICAkbXNnID0gYmxlc3Mo
IHsNCiAgICAgICAgICAgICAgICAgICAgJ3RvcGljJyA9PiAnaG9tZS9oYS90ZXN0L3gxMC8xJywN
CiAgICAgICAgICAgICAgICAgICAgJ3JlbWFpbmluZycgPT4gJycsDQogICAgICAgICAgICAgICAg
ICAgICdyZXRhaW4nID0+IDEsDQogICAgICAgICAgICAgICAgICAgICdkdXAnID0+IDAsDQogICAg
ICAgICAgICAgICAgICAgICdtZXNzYWdlX3R5cGUnID0+IDMsDQogICAgICAgICAgICAgICAgICAg
ICdxb3MnID0+IDAsDQogICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnZGVwcmVjYXRl
ZCBhbHNvJw0KICAgICAgICAgICAgICAgICAgfSwNCiAgICAgICAgICAgICAgICAgJ05ldDo6TVFU
VDo6TWVzc2FnZTo6UHVibGlzaCcNCiAgICAgICAgICAgICAgKTsNCg0KPWN1dA0KDQpzdWIgcGFy
c2VfZGF0YV90b19vYmogew0KICAgIG15ICggJHNlbGYsICRtc2csICRwX3NldGJ5ICkgPSBAXzsN
Cg0KICAgICRzZWxmLT5kZWJ1ZyggMywgIk1zZyBvYmplY3Q6ICIgLiBEdW1wZXIoICRtc2cgKSAp
Ow0KDQogICAgaWYoICFsZW5ndGgoJG1zZy0+e21lc3NhZ2V9KSAmJiAkbXNnLT57cmV0YWlufSAp
IHsNCgkjIGNsZWFudXAgbWVzc2FnZSAtLSBpZ25vcmUNCglyZXR1cm47DQogICAgfQ0KDQogICAg
IyAyMC0xMi0yMDIwIGFkZGVkIHN1cHBvcnQgZm9yIHdpbGRjYXJkIG1xdHQgZGV2aWNlcyBlLmcu
IGluIGl0ZW1zLm1odA0KICAgICMgTVFUVF9ERVZJQ0UsIE1RVFRfdGVzdF93aWxkY2FyZCwgLCBt
cXR0XzEsIHRlbGUvKy9MV1QNCiAgICAjIG9yIGZvciBhIG11bHRpbGV2ZWwgd2lsZGNhcmQNCiAg
ICAjIE1RVFRfREVWSUNFLCBNUVRUX3Rlc3RfbXVsdGlfd2lsZGNhcmQsICwgbXF0dF8xLCB0ZWxl
LyMNCiAgICAjIE5PVEUsIHVzZSBvZiBtdWx0aSBsZXZlbCB3aWxkY2FyZHMgY2FuIGNvbnN1bWUg
YSBsb3Qgb2YgQ1BVDQogICAgIyBpdCBhbHNvIGV4aXRzIHRoZSBsb29wIGlmIGl0IGZpbmRzIGEg
bWF0Y2ggZm9yIHNwZWVkIHdoZW4gdGhlcmUgaXMgYSBsYXJnZSBudW1iZXIgb2YgbXF0dCBkZXZp
Y2VzDQoNCiAgICBteSAoIEBzcGxpdF9pbmNvbWluZywgQHNwbGl0X2RldmljZSwgJGNvdW50ZXIs
ICRkZXZpY2VfdG9waWMsICRtZXNzYWdlX2hhbmRsZWQgKTsNCiAgICAjDQogICAgJG1lc3NhZ2Vf
aGFuZGxlZCA9IDA7DQogICAgZm9yIG15ICRvYmogKCBAeyAkJHNlbGZ7b2JqZWN0c30gfSApIHsN
CgkjIDIwMjEvMi80IC0tIGFkZGVkIHN1cHBvcnQgZm9yIGEgbXF0dCBvYmplY3QgdG8gbGlzdGVu
IGZvciBhIGxpc3Qgb2YgdG9waWNzDQoJbXkgQHRvcGljbGlzdDsNCglpZiggcmVmICRvYmotPnt0
b3BpY30gZXEgJ0FSUkFZJyApIHsNCgkgICAgQHRvcGljbGlzdCA9IEB7JG9iai0+e3RvcGljfX07
DQoJfSBlbHNlIHsNCgkgICAgQHRvcGljbGlzdCA9ICggJG9iai0+e3RvcGljfSApOw0KCX0NCiAg
ICAgICAgZm9yICRkZXZpY2VfdG9waWMgKEB0b3BpY2xpc3QpIHsNCgkgICAgIyBjaGVjayBpZiB0
aGlzIG1xdHQgZGV2aWNlIGlzIGEgd2lsZGNhcmQsIGFuZCBpZiBzbyByZXBsYWNlIHRoZSB3aWxk
Y2FyZCBjaGFyYWN0ZXJzDQoJICAgICMgd2l0aCB0aGUgaW5jb21pbmcgbWVzc2FnZSB0b3BpYyBw
aWVjZXMNCgkgICAgaWYgKCAgIGluZGV4KCAkZGV2aWNlX3RvcGljLCAiXCsiICkgPj0gMA0KCQl8
fCBpbmRleCggJGRldmljZV90b3BpYywgIlwjIiApID49IDAgKQ0KCSAgICB7DQoJCUBzcGxpdF9p
bmNvbWluZyA9IHNwbGl0KCAiLyIsICRtc2ctPnt0b3BpY30gKTsNCgkJQHNwbGl0X2RldmljZSAg
ID0gc3BsaXQoICIvIiwgJGRldmljZV90b3BpYyApOw0KCQkkY291bnRlciAgICAgICAgPSAwOw0K
CQlmb3JlYWNoIChAc3BsaXRfZGV2aWNlKSB7DQoJCSAgICBpZiAoICRzcGxpdF9kZXZpY2VbJGNv
dW50ZXJdIGVxICIrIiAgJiYgIGRlZmluZWQgJHNwbGl0X2luY29taW5nWyRjb3VudGVyXSApIHsN
CgkJCSRkZXZpY2VfdG9waWMgPX4gcy9cKy8kc3BsaXRfaW5jb21pbmdbJGNvdW50ZXJdLzsNCgkJ
ICAgIH0NCgkJICAgIGlmICggJHNwbGl0X2RldmljZVskY291bnRlcl0gZXEgIiMiICkgew0KCQkJ
aWYoIGluZGV4KCAkZGV2aWNlX3RvcGljLCAnIycgKSA8IGxlbmd0aCggJG1zZy0+e3RvcGljfSAp
ICkgew0KCQkJICAgICRkZXZpY2VfdG9waWMgPSBzdWJzdHIoICRkZXZpY2VfdG9waWMsIDAsIGlu
ZGV4KCAkZGV2aWNlX3RvcGljLCAiIyIgKSApIC4gc3Vic3RyKCAkJG1zZ3t0b3BpY30sIGluZGV4
KCAkZGV2aWNlX3RvcGljLCAiIyIgKSApOw0KCQkJfQ0KCQkJbGFzdDsNCgkJICAgIH0NCgkJICAg
ICRjb3VudGVyKys7DQoJCX0NCgkgICAgfQ0KICAgIA0KCSAgICAjIHRoZSBlZGl0ZWQgZGV2aWNl
IHRvcGljIGlzIG5vdyByZWFkeSB0byBjb21wYXJlIHdpdGggdGhlIGluY29taW5nIG1lc3NhZ2Ug
dG9waWMNCgkgICAgaWYgKCAkZGV2aWNlX3RvcGljIGVxICRtc2ctPnt0b3BpY30gKSB7DQoJCWlm
KCAkb2JqLT5jYW4oICdyZWNlaXZlX21xdHRfbWVzc2FnZScgKSApIHsNCgkJICAgICRvYmotPnJl
Y2VpdmVfbXF0dF9tZXNzYWdlKCAkbXNnLT57dG9waWN9LCAkbXNnLT57bWVzc2FnZX0sICRtc2ct
PntyZXRhaW59ICk7DQoJCX0gZWxzZSB7DQoJCSAgICAkb2JqLT57bXF0dF9yZXRhaW5lZH0gPSAk
bXNnLT57cmV0YWlufTsNCgkJICAgICRvYmotPntzZXRfYnlfdG9waWN9ID0gJG1zZy0+e3RvcGlj
fTsNCgkJICAgICRvYmotPnNldCggJG1zZy0+e21lc3NhZ2V9LCAkc2VsZiApOw0KCQl9DQoJCSRt
ZXNzYWdlX2hhbmRsZWQgPSAxOw0KICAgIA0KCQkjIE5vdGUgdGhhdCBtdWx0aXBsZSBvYmplY3Rz
IG1heSBsaXN0ZW4gZm9yIHNhbWUgdG9waWMgYW5kIGRpc3Rpbmd1aXNoIGJhc2VkIG9uIHBheWxv
YWQgLSBtdXN0IGtlZXAgbG9vcGluZw0KCQkjIGxhc3Q7DQoJICAgIH0NCgl9DQogICAgfQ0KICAg
IGlmKCAhJG1lc3NhZ2VfaGFuZGxlZCApIHsNCgkkc2VsZi0+ZGVidWcoIDIsICJVTkhBTkRMRUQg
TUVTU0FHRSAkJG1zZ3t0b3BpY30gLS0gJCRtc2d7bWVzc2FnZX0iICk7DQogICAgfQ0KICAgIGlm
KCAkbXNnLT57cmV0YWlufSApIHsNCgkjIHRoaXMgaXMgYSByZXRhaW5lZCBtZXNzYWdlIGZyb20g
dGhlIG1xdHQgYnJva2VyIC0tIHJlY29yZCBpdCBzbyBpZiB3ZSB3YW50IHRvIGNsZWFuIHVwIHRo
ZSByZXRhaW5lZCBtZXNzYWdlcyBpbiB0aGUgYnJva2VyLCB3ZSBjYW4NCgkkc2VsZi0+ZGVidWco
IDIsICJBRERFRCBSRVRBSU5FRCBUT1BJQyAkJG1zZ3t0b3BpY30iICk7DQoJJHNlbGYtPntyZXRh
aW5lZF90b3BpY3N9LT57JCRtc2d7dG9waWN9fSA9ICRtZXNzYWdlX2hhbmRsZWQ7DQogICAgfQ0K
fQ0KDQpzdWIgZ2VuZXJhdGVfdm9pY2VfY29tbWFuZHMgew0KICAgIG15ICgkc2VsZikgPSBAXzsN
Cg0KICAgIGlmICgkc2VsZi0+e2luaXRfdl9jbWR9ID09IDApIHsNCiAgICAgICAgbXkgJG9iamVj
dF9zdHJpbmc7DQogICAgICAgIG15ICRvYmplY3RfbmFtZSA9ICRzZWxmLT5nZXRfb2JqZWN0X25h
bWU7DQogICAgICAgICRzZWxmLT57aW5pdF92X2NtZH0gPSAxOw0KICAgICAgICAmbWFpbjo6cHJp
bnRfbG9nKCJHZW5lcmF0aW5nIFZvaWNlIGNvbW1hbmRzIGZvciBNUVRUIFNlcnZlciAkb2JqZWN0
X25hbWUiKTsNCg0KICAgICAgICBteSAkdm9pY2VfY21kcyA9ICRzZWxmLT5nZXRfdm9pY2VfY21k
cygpOw0KICAgICAgICBteSAkaSAgICAgICAgICA9IDE7DQogICAgICAgIGZvcmVhY2ggbXkgJGNt
ZCAoIGtleXMgJSR2b2ljZV9jbWRzICkgew0KDQogICAgICAgICAgICAjZ2V0IG9iamVjdCBuYW1l
IHRvIHVzZSBhcyBwYXJ0IG9mIHZhcmlhYmxlIGluIHZvaWNlIGNvbW1hbmQNCiAgICAgICAgICAg
IG15ICRvYmplY3RfbmFtZV92ID0gJG9iamVjdF9uYW1lIC4gJ18nIC4gJGkgLiAnX3YnOw0KICAg
ICAgICAgICAgJG9iamVjdF9zdHJpbmcgLj0gInVzZSB2YXJzICcke29iamVjdF9uYW1lfV8ke2l9
X3YnO1xuIjsNCg0KICAgICAgICAgICAgI0luaXRpYWxpemUgdGhlIHZvaWNlIGNvbW1hbmQgd2l0
aCBhbGwgb2YgdGhlIHBvc3NpYmxlIGRldmljZSBjb21tYW5kcw0KICAgICAgICAgICAgJG9iamVj
dF9zdHJpbmcgLj0gJG9iamVjdF9uYW1lIC4gIl8iIC4gJGkgLiAiX3YgID0gbmV3IFZvaWNlX0Nt
ZCAnJGNtZCc7XG4iOw0KDQogICAgICAgICAgICAjVGllIHRoZSBwcm9wZXIgcm91dGluZSB0byBl
YWNoIHZvaWNlIGNvbW1hbmQNCiAgICAgICAgICAgIG15ICR0aWVfZXZlbnQgPSAkdm9pY2VfY21k
cy0+eyRjbWR9Ow0KICAgICAgICAgICAgJHRpZV9ldmVudCA9fiBzL1woU0FJRFwpJC8oJG9iamVj
dF9uYW1lX3YtPnNhaWRcKFwpXCkvIGlmICgkdGllX2V2ZW50ID1+IG0vXChTQUlEXCkkLyk7DQog
ICAgICAgICAgICAkb2JqZWN0X3N0cmluZyAuPSAkb2JqZWN0X25hbWUgLiAiXyIgLiAkaSAuICJf
diAtPiB0aWVfZXZlbnQocX4iIC4gJHRpZV9ldmVudCAuICJ+KTtcblxuIjsgICAgIywgJyRjb21t
YW5kICRjbWQnKTtcblxuIjsNCg0KICAgICAgICAgICAgI0FkZCB0aGlzIG9iamVjdCB0byB0aGUg
bGlzdCBvZiBNUVRUIFNlcnZlciBWb2ljZSBDb21tYW5kcyBvbiB0aGUgV2ViIEludGVyZmFjZQ0K
ICAgICAgICAgICAgJG9iamVjdF9zdHJpbmcgLj0gOjpzdG9yZV9vYmplY3RfZGF0YSggJG9iamVj
dF9uYW1lX3YsICdWb2ljZV9DbWQnLCAnTVFUVCcsICdDb250cm9sbGVyX2NvbW1hbmRzJyApOw0K
ICAgICAgICAgICAgJGkrKzsNCiAgICAgICAgfQ0KICAgICAgICAjRXZhbHVhdGUgdGhlIHJlc3Vs
dGluZyBvYmplY3QgZ2VuZXJhdGluZyBzdHJpbmcNCiAgICAgICAgcGFja2FnZSBtYWluOw0KICAg
ICAgICBldmFsICRvYmplY3Rfc3RyaW5nOw0KICAgICAgICBwcmludCAiRXJyb3IgaW4gZ2VuZXJh
dGluZyBWb2ljZSBDb21tYW5kcyBmb3IgbXF0dCBpbnRlcmZhY2U6ICRAXG4iIGlmICRAOw0KDQog
ICAgICAgIHBhY2thZ2UgSEFfU2VydmVyOw0KICAgIH0NCn0NCg0Kc3ViIGdldF92b2ljZV9jbWRz
IHsNCiAgICBteSAoJHNlbGYpID0gQF87DQogICAgbXkgJGNvbW1hbmQgPSAkc2VsZi0+Z2V0X29i
amVjdF9uYW1lOw0KICAgICRjb21tYW5kID1+IHMvXlwkLy87DQogICAgJGNvbW1hbmQgPX4gdHIv
Xy8tLzsgIyMgdW5kZXJzY29yZXMgaW4gVm9pY2VfY21kcyBjYXVzZSB0aGVtIG5vdCB0byB3b3Jr
Lg0KDQogICAgbXkgJG9iamVjdHMgPSAiWyI7ICAgIA0KICAgIG15ICVzZWVuOw0KICAgIGZvciBt
eSAkb2JqICggQHsgJHNlbGYtPntvYmplY3RzfSB9ICkgew0KICAgICAgICBuZXh0IGlmICRzZWVu
eyRvYmotPntvYmplY3RfbmFtZX19Kys7ICNyZW1vdmUgZHVwbGljYXRlIGVudGl0eSBuYW1lcw0K
ICAgICAgICAkb2JqZWN0cyAuPSAkb2JqLT57b2JqZWN0X25hbWV9IC4gIiwiOw0KICAgIH0NCiAg
ICBjaG9wICRvYmplY3RzIGlmIChsZW5ndGgoJG9iamVjdHMpID4gMSk7DQogICAgJG9iamVjdHMg
Lj0gIl0iOw0KICAgICRvYmplY3RzID1+IHMvXCQvL2c7DQogICAgJG9iamVjdHMgPX4gdHIvXy8t
LzsgIyMgdW5kZXJzY29yZXMgaW4gVm9pY2VfY21kcyBjYXVzZSB0aGVtIG5vdCB0byB3b3JrLg0K
ICAgIA0KICAgICNhIGJpdCBvZiBhIGtsdWRnZSB0byBwYXNzIGFsb25nIHRoZSB2b2ljZSBjb21t
YW5kIG9wdGlvbiwgZ2V0IHRoZSBzYWlkIHZhbHVlIGZyb20gdGhlIHZvaWNlIGNvbW1hbmQuDQog
ICAgbXkgJG9iamVjdF9uYW1lID0gJHNlbGYtPmdldF9vYmplY3RfbmFtZSgpOw0KICAgIG15ICVn
bG9iYWxfdm9pY2VfY21kcyA9ICgNCiAgICAgICAgIjxnbG9iYWw+IC0tIExpc3QgYWxsIG1xdHQg
aW50ZXJmYWNlcyB0byB0aGUgcHJpbnQgbG9nIiAgID0+ICImbXF0dDo6cHJpbnRfaW50ZXJmYWNl
X2xpc3QoKSIsDQogICAgICAgICI8Z2xvYmFsPiAtLSBQdWJsaXNoIGN1cnJlbnQgc3RhdGVzIG9m
IGFsbCBsb2NhbCBpdGVtcyIgID0+ICImbXF0dF9Mb2NhbEl0ZW06OnB1Ymxpc2hfY3VycmVudF9z
dGF0ZXMoKSIsDQogICAgICAgICI8Z2xvYmFsPiAtLSBXcml0ZSBhbGwgZGlzY292ZXJlZCBpdGVt
cyB0byA8ZGF0YV9kaXI+L21xdHRfZGlzY292ZXJlZF9pdGVtcy5taHQuZ2VuIiA9PiAiJm1xdHQ6
OndyaXRlX2Rpc2NvdmVyZWRfaXRlbXMoICckOjpjb25maWdfcGFybXN7ZGF0YV9kaXJ9L21xdHRf
ZGlzY292ZXJlZF9pdGVtcy5taHQuZ2VuJyApIiwNCgkpOw0KICAgIG15ICV2b2ljZV9jbWRzID0g
KA0KICAgICAgICAiJGNvbW1hbmQgLS0gTGlzdCByZXRhaW5lZCB0b3BpY3MiICA9PiAiJHtvYmpl
Y3RfbmFtZX0tPmxpc3RfcmV0YWluZWRfdG9waWNzKCkiLA0KICAgICAgICAiJGNvbW1hbmQgLS0g
UHVibGlzaCBkaXNjb3ZlcnkgZGF0YSIgID0+ICIke29iamVjdF9uYW1lfS0+cHVibGlzaF9kaXNj
b3ZlcnlfZGF0YSgpIiwNCiAgICAgICAgIiRjb21tYW5kIC0tIFB1Ymxpc2ggY3VycmVudCBzdGF0
ZXMgb2YgbG9jYWwgaXRlbXMiICA9PiAiJHtvYmplY3RfbmFtZX0tPnB1Ymxpc2hfY3VycmVudF9z
dGF0ZXMoKSIsDQogICAgICAgICIkY29tbWFuZCAtLSBDbGVhbnVwIHB1Ymxpc2hlZCBpbmZvIGFu
ZCByZXB1Ymxpc2giICA9PiAiJHtvYmplY3RfbmFtZX0tPmNsZWFudXBfcHVibGlzaGVkX3RvcGlj
cygpIiwNCiAgICAgICAgIiRjb21tYW5kIC0tIENsZWFudXAgb25seSBkaXNjb3ZlcnkgaW5mbyBh
bmQgcmVwdWJsaXNoIiAgPT4gIiR7b2JqZWN0X25hbWV9LT5jbGVhbnVwX2Rpc2NvdmVyeV90b3Bp
Y3MoKSIsDQogICAgICAgICIkY29tbWFuZCAtLSBDbGVhbnVwIGFsbCByZXRhaW5lZCB0b3BpY3Mg
b24gbXF0dCBzZXJ2ZXIgYW5kIHJlcHVibGlzaCAoQkUgQ0FSRUZVTCkiICA9PiAiJHtvYmplY3Rf
bmFtZX0tPmNsZWFudXBfYWxsX3JldGFpbmVkX3RvcGljcygpIiwNCiMgICAgICAgICAnTGlzdCBb
YWxsLGFjdGl2ZSxpbmFjdGl2ZV0gJyAuICRjb21tYW5kIC4gJyBvYmplY3RzIHRvIHRoZSBwcmlu
dCBsb2cnICAgPT4gJHNlbGYtPmdldF9vYmplY3RfbmFtZSAuICctPnByaW50X29iamVjdF9saXN0
KFNBSUQpJywNCiMgICAgICAgICAiUHJpbnQgJG9iamVjdHMgJGNvbW1hbmQgYXR0cmlidXRlcyB0
byB0aGUgcHJpbnQgbG9nIiAgICAgICAgICAgICA9PiAiJHtvYmplY3RfbmFtZX0tPnByaW50X29i
amVjdF9hdHRycyhTQUlEKSIsDQogICAgKTsNCiAgICBpZiggJGluaXRfZ2xvYmFsX3ZfY21kID09
IDAgKSB7DQogICAgICAgICRpbml0X2dsb2JhbF92X2NtZCA9IDE7DQoJJXZvaWNlX2NtZHMgPSAo
JWdsb2JhbF92b2ljZV9jbWRzLCAldm9pY2VfY21kcyk7DQogICAgfQ0KDQogICAgcmV0dXJuIFwl
dm9pY2VfY21kczsNCn0NCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KPWl0ZW0gQzwocHJp
bnRfaW50ZXJmYWNlX2xpc3QoKSk+DQo9Y3V0DQoNCnN1YiBwcmludF9pbnRlcmZhY2VfbGlzdCB7
DQogICAgbXkgQGludGVyZmFjZXM7DQoNCiAgICBmb3IgbXkgJGluc3QgKGtleXMgJU1RVFRfRGF0
YSkgew0KCXB1c2ggQGludGVyZmFjZXMsICRNUVRUX0RhdGF7JGluc3R9e3NlbGZ9LT57aW5zdGFu
Y2V9Ow0KICAgIH0NCiAgICAmbXF0dDo6bG9nKCB1bmRlZiwgIk1RVFQgaW50ZXJmYWNlIGxpc3Q6
ICIgLiBqb2luKCAnLCcsIEBpbnRlcmZhY2VzICkgKTsNCn0NCg0KPWl0ZW0gQzwoZ2V0X2ludGVy
ZmFjZV9saXN0KCkpPg0KPWN1dA0KDQpzdWIgZ2V0X2ludGVyZmFjZV9saXN0IHsNCiAgICBteSBA
aW50ZXJmYWNlczsNCg0KICAgIGZvciBteSAkaW5zdCAoa2V5cyAlTVFUVF9EYXRhKSB7DQoJcHVz
aCBAaW50ZXJmYWNlcywgJE1RVFRfRGF0YXskaW5zdH17c2VsZn07DQogICAgfQ0KICAgIHJldHVy
biAoIEBpbnRlcmZhY2VzICk7DQp9DQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCj1pdGVt
IEM8KGNsZWFudXBfcmV0YWluZWRfdG9waWNzKCBAcGF0dGVybl9saXN0ICkpPg0KDQpPdmVyIHRp
bWUsIHJldGFpbmVkIG1lc3NhZ2VzIGFjY3VtdWxhdGUgaW4gdGhlIGJyb2tlci4gIFdoZW4gb2Jq
ZWN0cyBjaGFuZ2UgbmFtZXMNCm9yIGFyZSByZW1vdmVkIGZyb20geW91ciBzZXR1cCwgdGhlIHJl
dGFpbmVkIG1lc3NhZ2VzIHJlbWFpbi4NCg0KVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRlbGV0
ZSByZXRhaW5lZCB0b3BpY3MgZnJvbSB0aGUgYnJva2VyLiAgSXQgd2lsbA0KcHVibGlzaCBhbiBl
bXB0eSBtZXNzYWdlIHRvIGFsbCByZXRhaW5lZCB0b3BpY3MgbWF0Y2hpbmcgYSBwYXR0ZXJuIGlu
IHRoZQ0KcGF0dGVybiBsaXN0IHRoYXQgbWlzdGVyaG91c2UgaGFzIHJlY2VpdmVkIGZyb20gdGhp
cyBicm9rZXIuDQoNClVzaW5nIHRoZSBwYXR0ZXJuICcuKicgd2lsbCByZW1vdmUgYWxsIHJldGFp
bmVkIHRvcGljcy4gIEJFIENBUkVGVUwuICBUaGlzIHdpbGwNCnJlbW92ZSBhbGwgcmV0YWluZWQg
dG9waWNzIHdoZXRoZXIgeW91IHB1Ymxpc2hlZCB0aGVtIG9yIG5vdC4gIFRodXMgZGlzY292ZXJ5
DQptZXNzYWdlcyBhbmQgY3VycmVudCBzdGF0ZSBtZXNzYWdlcyBmb3IgYWxsIG1xdHQgb2JqZWN0
cyBpbiB5b3VyIHN5c3RlbSB3aWxsDQpiZSBkZWxldGVkIGZyb20gdGhlIG1xdHQgc2VydmVyLiBQ
cmV0dHkgbXVjaCBhbGwgbXF0dCBkZXZpY2VzIHdpbGwgZXZlbnR1YWxseQ0KcmVwdWJsaXNoIGRp
c2NvdmVyeSBhbmQgc3RhdGUgaW5mbywgYWx0aG91Z2ggc29tZSBtYXkgbmVlZCB0byBiZSByZWJv
b3RlZCBmb3INCnRoYXQgdG8gaGFwcGVuLg0KDQo9Y3V0DQoNCnN1YiBjbGVhbnVwX3JldGFpbmVk
X3RvcGljcyB7DQogICAgbXkgKCRzZWxmLCBAdG9waWNfcGF0dGVybl9saXN0KSA9IEBfOw0KICAg
IG15ICRjbGVhbl9jb3VudDsNCiAgICBteSAkaWdub3JlX2NvdW50Ow0KDQogICAgaWYoIHNjYWxh
cihAdG9waWNfcGF0dGVybl9saXN0KSA9PSAwICkgew0KCSZtcXR0OjplcnJvciggdW5kZWYsICJj
bGVhbnVwX3JldGFpbmVkX3RvcGljcyAtLSBtdXN0IHNwZWNpZnkgcGF0dGVybiIgKTsNCglyZXR1
cm47DQogICAgfQ0KICAgICRzZWxmLT5kZWJ1ZyggMiwgImNsZWFudXAgdG9waWMgcGF0dGVybiBs
aXN0OiBAdG9waWNfcGF0dGVybl9saXN0IiApOw0KICAgICRjbGVhbl9jb3VudCA9IDA7DQogICAg
JGlnbm9yZV9jb3VudCA9IDA7DQogICAgZm9yIG15ICR0b3BpYyAoIGtleXMgJXskc2VsZi0+e3Jl
dGFpbmVkX3RvcGljc319ICkgew0KCW15ICRtYXRjaCA9IDA7DQoJZm9yIG15ICR0b3BpY19wYXR0
ZXJuIChAdG9waWNfcGF0dGVybl9saXN0KSB7DQoJICAgIGlmKCAkdG9waWNfcGF0dGVybiApIHsN
CgkJaWYoICR0b3BpYyA9fiBtfF4ke3RvcGljX3BhdHRlcm59fCApIHsNCgkJICAgICRtYXRjaCA9
IDE7DQoJCX0NCgkgICAgfQ0KCX0NCglpZiggJG1hdGNoICkgew0KCSAgICArKyRjbGVhbl9jb3Vu
dDsNCgkgICAgJHNlbGYtPnB1Yl9tc2coIA0KCQltZXNzYWdlX3R5cGUgPT4gTVFUVF9QVUJMSVNI
LA0KCQlyZXRhaW4gICAgICAgPT4gMSwNCgkJdG9waWMgICAgICAgID0+ICR0b3BpYywNCgkJbWVz
c2FnZSAgICAgID0+ICcnDQoJICAgICk7DQoJICAgIGRlbGV0ZSAkc2VsZi0+e3JldGFpbmVkX3Rv
cGljc30tPnskdG9waWN9Ow0KCX0gZWxzZSB7DQoJICAgICsrJGlnbm9yZV9jb3VudDsNCgkgICAg
JHNlbGYtPmRlYnVnKCAyLCAiJyR0b3BpYycgYmVpbmcgaWdub3JlZCBmb3IgY2xlYW51cCIgKTsN
Cgl9DQogICAgfQ0KICAgICRzZWxmLT5sb2coICJDbGVhbnVwIHVuaGFuZGxlZCB0b3BpY3MgZm9y
ICRzZWxmLT57aW5zdGFuY2V9IGNvbXBsZXRlOiAgJGNsZWFuX2NvdW50IGNsZWFuZWQsICRpZ25v
cmVfY291bnQgaWdub3JlZCIgKTsNCn0NCg0KDQo9aXRlbSBDPChsaXN0X3JldGFpbmVkX3RvcGlj
cygpKT4NCg0KVGhpcyBmdW5jdGlvbiB3aWxsIGxpc3QgYWxsIHJldGFpbmVkIHRvcGljcyByZWNl
aXZlZCBieSBtaXN0ZXJob3VzZSwgYW5kIHNvbWUNCmluZGljYXRpb24gYXMgdG8gd2hldGhlciB0
aGUgdG9waWMgd2FzIGhhbmRsZWQgYnkgc29tZSBkZWZpbmVkIG9iamVjdC4NCg0KPWN1dA0KDQpz
dWIgbGlzdF9yZXRhaW5lZF90b3BpY3Mgew0KICAgIG15ICgkc2VsZikgPSBAXzsNCiAgICBteSBA
aW50ZXJmYWNlX2xpc3Q7DQoNCiAgICBpZiggJHNlbGYgKSB7DQoJQGludGVyZmFjZV9saXN0ID0g
KCAkc2VsZiApOw0KICAgIH0gZWxzZSB7DQoJQGludGVyZmFjZV9saXN0ID0gJmdldF9pbnRlcmZh
Y2VfbGlzdCgpOw0KICAgIH0NCg0KICAgIGZvcmVhY2ggbXkgJGludGVyZmFjZSAoIEBpbnRlcmZh
Y2VfbGlzdCApIHsNCgkkaW50ZXJmYWNlLT5sb2coICJMaXN0aW5nIHJldGFpbmVkIHRvcGljcyBm
b3I6ICRpbnRlcmZhY2UtPntpbnN0YW5jZX0iICk7DQoJZm9yIG15ICR0b3BpYyAoIGtleXMgJXsk
aW50ZXJmYWNlLT57cmV0YWluZWRfdG9waWNzfX0gKSB7DQoJICAgIG15ICRoYW5kbGVkID0gJGlu
dGVyZmFjZS0+e3JldGFpbmVkX3RvcGljc30tPnskdG9waWN9Ow0KCSAgICAkaW50ZXJmYWNlLT5s
b2coICIkJGludGVyZmFjZXtpbnN0YW5jZX0gcmV0YWluZWQgdG9waWM6ICgkaGFuZGxlZCkgJHRv
cGljIiApOw0KCX0NCiAgICB9DQp9DQoNCj1pdGVtIEM8KGNsZWFudXBfYWxsX3JldGFpbmVkX3Rv
cGljcygpKT4NCg0KVGhpcyBmdW5jdGlvbiB3aWxsIGRlbGV0ZSBhbGwgcmV0YWluZWQgdG9waWNz
IG9uIHRoZSBtcXR0IHNlcnZlci4NCkl0IHdpbGwgdGhlbiByZXB1Ymxpc2ggZGlzY292ZXJ5IGRh
dGEgYW5kIGN1cnJlbnQgaXRlbSBzdGF0ZXMuDQoNCj1jdXQNCg0Kc3ViIGNsZWFudXBfYWxsX3Jl
dGFpbmVkX3RvcGljcyB7DQogICAgbXkgKCRzZWxmKSA9IEBfOw0KDQogICAgJHNlbGYtPmNsZWFu
dXBfcmV0YWluZWRfdG9waWNzKCAnLionICk7DQogICAgJHNlbGYtPnB1Ymxpc2hfZGlzY292ZXJ5
X2RhdGEoKTsNCiAgICAkc2VsZi0+cHVibGlzaF9jdXJyZW50X3N0YXRlcygpOw0KfQ0KDQo9aXRl
bSBDPChjbGVhbnVwX3B1Ymxpc2hlZF90b3BpY3MoKSk+DQoNClRoaXMgZnVuY3Rpb24gd2lsbCBk
ZWxldGUgYWxsIHJldGFpbmVkIHRvcGljcyBvbiB0aGUgbXF0dCBzZXJ2ZXIgZm9yIHB1Ymxpc2hl
ZA0KbWVzc2FnZXMgZm9yIExvY2FsSXRlbXMuICBJdCBpcyBiYXNlZCBvbiA8bm9kZV9pZD5zIHVz
ZWQgYnkgZGlzY292ZXJhYmxlIGl0ZW1zLg0KDQpJdCB3aWxsIHRoZW4gcmVwdWJsaXNoIGRpc2Nv
dmVyeSBkYXRhIGFuZCBjdXJyZW50IGl0ZW0gc3RhdGVzLg0KDQo9Y3V0DQoNCnN1YiBjbGVhbnVw
X3B1Ymxpc2hlZF90b3BpY3Mgew0KICAgIG15ICgkc2VsZikgPSBAXzsNCiAgICBteSAkc2Vlbl9k
aXNjID0ge307DQogICAgbXkgJHNlZW5fbG9jYWwgPSB7fTsNCg0KICAgIGZvciBteSAkb2JqICgg
QHsgJHNlbGYtPntvYmplY3RzfSB9ICkgew0KCWlmKCAkb2JqLT57ZGlzY292ZXJhYmxlfSAgJiYg
ICRvYmotPntub2RlX2lkfSAgJiYgICEkc2Vlbl9kaXNjLT57JG9iai0+e25vZGVfaWR9fSApIHsN
CgkgICAgJHNlZW5fZGlzYy0+eyRvYmotPntub2RlX2lkfX0gPSAxOw0KCSAgICAkc2VsZi0+Y2xl
YW51cF9yZXRhaW5lZF90b3BpY3MoICIkc2VsZi0+e2Rpc2NvdmVyeV9wcmVmaXh9Ly4qLyRvYmot
Pntub2RlX2lkfS8uKiIgKTsNCgl9DQogICAgICAgIGlmKCAkc2VsZi0+aXNhKCdtcXR0X0xvY2Fs
SXRlbScpICAmJiAgJG9iai0+e25vZGVfaWR9ICAmJiAgISRzZWVuX2xvY2FsLT57JG9iai0+e25v
ZGVfaWR9fSApIHsNCgkgICAgJHNlZW5fbG9jYWwtPnskb2JqLT57bm9kZV9pZH19ID0gMTsNCgkg
ICAgJHNlbGYtPmNsZWFudXBfcmV0YWluZWRfdG9waWNzKCAiJG9iai0+e25vZGVfaWR9Ly4qIiAp
Ow0KCX0NCiAgICB9DQogICAgJHNlbGYtPnB1Ymxpc2hfZGlzY292ZXJ5X2RhdGEoKTsNCiAgICAk
c2VsZi0+cHVibGlzaF9jdXJyZW50X3N0YXRlcygpOw0KfQ0KDQo9aXRlbSBDPChjbGVhbnVwX2Rp
c2NvdmVyeV90b3BpY3MoKSk+DQoNClRoaXMgZnVuY3Rpb24gd2lsbCBkZWxldGUgYWxsIHJldGFp
bmVkIHRvcGljcyBvbiB0aGUgbXF0dCBzZXJ2ZXIgZm9yIGRpc2NvdmVyeQ0KbWVzc2FnZXMgZm9y
IExvY2FsSXRlbXMuICBJdCBpcyBiYXNlZCBvbiA8bm9kZV9pZD5zIHVzZWQgYnkgZGlzY292ZXJh
YmxlIGl0ZW1zLg0KDQpJdCB3aWxsIHRoZW4gcmVwdWJsaXNoIGRpc2NvdmVyeSBkYXRhIGFuZCBj
dXJyZW50IGl0ZW0gc3RhdGVzLg0KDQo9Y3V0DQoNCnN1YiBjbGVhbnVwX2Rpc2NvdmVyeV90b3Bp
Y3Mgew0KICAgIG15ICgkc2VsZikgPSBAXzsNCiAgICBteSAkc2VlbiA9IHt9Ow0KDQogICAgZm9y
IG15ICRvYmogKCBAeyAkc2VsZi0+e29iamVjdHN9IH0gKSB7DQoJaWYoICRvYmotPntkaXNjb3Zl
cmFibGV9ICAmJiAgJG9iai0+e25vZGVfaWR9ICAmJiAgISRzZWVuLT57JG9iai0+e25vZGVfaWR9
fSApIHsNCgkgICAgJHNlZW4tPnskb2JqLT57bm9kZV9pZH19ID0gMTsNCgkgICAgJHNlbGYtPmNs
ZWFudXBfcmV0YWluZWRfdG9waWNzKCAiJHNlbGYtPntkaXNjb3ZlcnlfcHJlZml4fS8uKi8kb2Jq
LT57bm9kZV9pZH0vLioiICk7DQoJfQ0KICAgIH0NCiAgICAkc2VsZi0+cHVibGlzaF9kaXNjb3Zl
cnlfZGF0YSgpOw0KICAgICRzZWxmLT5wdWJsaXNoX2N1cnJlbnRfc3RhdGVzKCk7DQp9DQoNCiMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCj1pdGVtIEM8KGNyZWF0ZV9kaXNjb3ZlcnlfZGF0YSgp
KT4NCg0KQ3JlYXRlIGRpc2NvdmVyeSBtZXNzYWdlcyBmb3IgZWFjaCBkaXNjb3ZlcmFibGUgaXRl
bS4NCg0KPWN1dA0KDQpzdWIgY3JlYXRlX2Rpc2NvdmVyeV9kYXRhIHsNCiAgICBteSAoJHNlbGYp
ID0gQF87DQogICAgbXkgJG9iajsNCg0KICAgIGlmKCAhJHNlbGYtPmlzQ29ubmVjdGVkICkgew0K
CSRzZWxmLT5lcnJvciggIlVuYWJsZSB0byBwdWJsaXNoIGRpc2NvdmVyeSBkYXRhIC0tICRzZWxm
LT57aW5zdGFuY2V9IG5vdCBjb25uZWN0ZWQiICk7DQoJcmV0dXJuIDA7DQogICAgfQ0KICAgICRz
ZWxmLT5sb2coICJDcmVhdGluZyBhbmQgcHVibGlzaGluZyBkaXNjb3ZlcnkgZGF0YSBmb3IgYWxs
IGRpc2NvdmVyYWJsZSBvYmplY3RzIiApOw0KICAgIGZvciBteSAkb2JqICggQHsgJHNlbGYtPntv
YmplY3RzfSB9ICkgew0KCWlmKCAkb2JqLT5jYW4oICdjcmVhdGVfZGlzY292ZXJ5X21lc3NhZ2Un
ICkgKSB7DQoJICAgICRvYmotPmNyZWF0ZV9kaXNjb3ZlcnlfbWVzc2FnZSgpOw0KCX0NCiAgICB9
DQogICAgcmV0dXJuIDE7DQp9DQoNCj1pdGVtIEM8KHB1Ymxpc2hfZGlzY292ZXJ5X2RhdGEoKSk+
DQoNClB1Ymxpc2ggZGlzY292ZXJ5IG1lc3NhZ2VzIGZvciBlYWNoIGRpc2NvdmVyYWJsZSBpdGVt
Lg0KDQo9Y3V0DQoNCnN1YiBwdWJsaXNoX2Rpc2NvdmVyeV9kYXRhIHsNCiAgICBteSAoJHNlbGYp
ID0gQF87DQogICAgbXkgJG9iajsNCg0KICAgIGlmKCAhJHNlbGYtPmlzQ29ubmVjdGVkICkgew0K
CSRzZWxmLT5lcnJvciggIlVuYWJsZSB0byBwdWJsaXNoIGRpc2NvdmVyeSBkYXRhIC0tICRzZWxm
LT57aW5zdGFuY2V9IG5vdCBjb25uZWN0ZWQiICk7DQoJcmV0dXJuIDA7DQogICAgfQ0KICAgICRz
ZWxmLT5sb2coICJQdWJsaXNoaW5nIGRpc2NvdmVyeSBkYXRhIiApOw0KICAgIGZvciBteSAkb2Jq
ICggQHsgJHNlbGYtPntvYmplY3RzfSB9ICkgew0KCWlmKCAkb2JqLT5jYW4oICdwdWJsaXNoX2Rp
c2NvdmVyeV9tZXNzYWdlJyApICkgew0KCSAgICAkb2JqLT5wdWJsaXNoX2Rpc2NvdmVyeV9tZXNz
YWdlKCk7DQoJfQ0KICAgIH0NCiAgICByZXR1cm4gMTsNCn0NCg0KPWl0ZW0gQzwocHVibGlzaF9j
dXJyZW50X3N0YXRlcyggb25seV91bnB1Ymxpc2hlZCApKT4NCiAgICBGdW5jdGlvbiB0byBwdWJs
aXNoIHRoZSBjdXJyZW50IHN0YXRlcyBvZiBhbGwgbG9jYWwgbXF0dCBvYmplY3RzIGZvciB0aGlz
IG1xdHQgc2VydmVyDQoNCiAgICBJZiBvbmx5X3VucHVibGlzaGVkIGlzIHRydWUsIG9ubHkgdGhl
IGN1cnJlbnQgc3RhdGVzIG9mIG9iamVjdHMgdGhhdCBoYXZlIG5vdCBwdWJsaXNoZWQNCiAgICB0
aGVpciBzdGF0ZSBzaW5jZSBNSCBzdGFydGVkIHdpbGwgYmUgcHVibGlzaGVkLg0KDQogICAgVGhp
cyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIHRoZSBsb2NhbCBpdGVtIHN0YXRlcyBo
YXZlIGJlZW4gcmVzdG9yZWQgYWZ0ZXINCiAgICBzdGFydHVwIGlmIHRoZXJlIGlzIG5vIGluaXRp
YWwgZnVuY3Rpb24gdGhhdCBnZXRzIGN1cnJlbnQgc3RhdGVzIG9mIGxvY2FsIGl0ZW1zLg0KICAg
ICAgICBGb3IgZXhhbXBsZSwgSU5TVEVPTiBkZXZpY2VzIGFyZSBwb2xsZWQgYXQgc3RhcnR1cCBv
ZiBtaXN0ZXJob3VzZSB0byBkZXRlcm1pbmUgY3VycmVudCBzdGF0ZXMNCglUaGlzIHBvbGxpbmcg
d2lsbCBzZXQgdGhlIHN0YXRlIG9mIHRoZSBsb2NhbCBpdGVtIHdoaWNoIHdpbGwgcHVibGlzaCB0
byBtcXR0DQogICAgQWxzbywgd2hlbiBzdGF0ZXMgYXJlIHB1Ymxpc2hlZCB0aGUgcmV0YWluIGZs
YWcgaXMgc2V0LCBzbyB0aGUgbXF0dCBzZXJ2ZXIgd2lsbCBoYXZlDQogICAgYSByZXRhaW5lZCBz
dGF0ZSBmb3IgZWFjaCBMb2NhbEl0ZW0uDQo9Y3V0DQoNCnN1YiBwdWJsaXNoX2N1cnJlbnRfc3Rh
dGVzIHsNCiAgICBteSggJHNlbGYsICRvbmx5X3VucHVibGlzaGVkICkgPSBAXzsNCiAgICBteSAk
b2JqOw0KICAgIG15ICRtc2c7DQogICAgbXkgJG1zZ190eHQ7DQogICAgbXkgJGhhc3NfdHlwZTsN
CiAgICBteSAkb2JqX2lkOw0KDQogICAgJHNlbGYtPmxvZyggIiRzZWxmLT57bmFtZX0gcHVibGlz
aGluZyBjdXJyZW50IHN0YXRlIGRhdGEgZm9yIGxvY2FsIG9iamVjdHMiICk7DQogICAgZm9yIG15
ICRvYmogKCBAeyAkc2VsZi0+e29iamVjdHN9IH0gKSB7DQoJaWYoICRvYmotPmNhbiggJ3B1Ymxp
c2hfc3RhdGUnICkgKSB7DQoJICAgICRvYmotPnB1Ymxpc2hfc3RhdGUoICRvbmx5X3VucHVibGlz
aGVkICk7DQoJfQ0KICAgIH0NCn0NCg0KPWl0ZW0gQzx3cml0ZV9kaXNjb3ZlcmVkX2l0ZW1zKGZp
bGVuYW1lLCBhdXRvdXBkYXRlKT4NCg0KICAgIFdyaXRlcyBvdXQgYWxsIG1xdHQgaXRlbXMgdGhh
dCBoYXZlIGJlZW4gZGlzY292ZXJlZCB0byBhIC5tcXQgZmlsZS4NCiAgICBOb3RlIHRoYXQgdGhp
cyBpbmNsdWRlcyBpdGVtcyB0aGF0IHdlcmUgY3JlYXRlZCBsb2NhbGx5IGFzIGRpc2NvdmVyZWQN
CiAgICBpdGVtcyBpbiBhIC5taHQgZmlsZSBhcyB3ZWxsIGFzIG5ld2x5IGRpc2NvdmVyZWQgaXRl
bXMuDQogICAgSWYgYXV0b3VwZGF0ZSBpcyB0cnVlLCB0aGUgZmlsZSB3aWxsIGJlIHVwZGF0ZWQg
d2l0aCBlYWNoIG5ldyBkaXNjb3ZlcnkgbWVzc2FnZS4NCg0KPWN1dA0KDQpteSAkZGlzY292ZXJl
ZF9pdGVtc19maWxlbmFtZTsNCg0Kc3ViIHdyaXRlX2Rpc2NvdmVyZWRfaXRlbXMgew0KICAgIG15
ICgkb3V0ZmlsZW5hbWUsICRhdXRvdXBkYXRlKSA9IEBfOw0KICAgIG15ICRpbnRlcmZhY2U7DQog
ICAgbXkgJGY7DQogICAgbXkgQHNvcnRlZF9saXN0Ow0KICAgIA0KICAgICRvdXRmaWxlbmFtZSA9
ICRvdXRmaWxlbmFtZSB8fCAkZGlzY292ZXJlZF9pdGVtc19maWxlbmFtZTsNCiAgICBpZiggISRv
dXRmaWxlbmFtZSApIHsNCglyZXR1cm47DQogICAgfQ0KICAgICZtcXR0OjpkZWJ1ZyggdW5kZWYs
IDEsICJXcml0aW5nIGRpc2NvdmVyZWQgaXRlbXMgdG8gJyRvdXRmaWxlbmFtZSciICk7DQogICAg
aWYoIGRlZmluZWQgJGF1dG91cGRhdGUgKSB7DQoJIyBvbmx5IGNoYW5nZSBhdXRvdXBkYXRlIGZp
bGUgaWYgJGF1dG91cGRhdGUgaXMgYWN0dWFsbHkgZGVmaW5lZA0KCWlmKCAkYXV0b3VwZGF0ZSAp
IHsNCgkgICAgJGRpc2NvdmVyZWRfaXRlbXNfZmlsZW5hbWUgPSAkb3V0ZmlsZW5hbWU7DQoJfSBl
bHNlIHsNCgkgICAgJGRpc2NvdmVyZWRfaXRlbXNfZmlsZW5hbWUgPSB1bmRlZjsNCgl9DQogICAg
fQ0KICAgIGlmKCAhb3BlbiggJGYsICI+ICR7b3V0ZmlsZW5hbWV9IiApICkgew0KCSZtcXR0Ojpl
cnJvciggdW5kZWYsICJVbmFibGUgdG8gb3BlbiBkaXNjb3ZlcnkgdGFyZ2V0IGZpbGUgJyR7b3V0
ZmlsZW5hbWV9IiApOw0KCXJldHVybjsNCiAgICB9DQogICAgcHJpbnQgeyRmfSAiRm9ybWF0ID0g
QVxuXG4iOw0KICAgIGZvcmVhY2ggbXkgJGludGVyZmFjZSAoICZtcXR0OjpnZXRfaW50ZXJmYWNl
X2xpc3QoKSApIHsNCglAc29ydGVkX2xpc3QgPSBzb3J0IHsgJGEtPmdldF9vYmplY3RfbmFtZSgp
IGNtcCAkYi0+Z2V0X29iamVjdF9uYW1lKCkgfSBAeyRpbnRlcmZhY2UtPntvYmplY3RzfX07DQoJ
Zm9yIG15ICRvYmogKCBAc29ydGVkX2xpc3QgKSB7DQoJICAgIGlmKCBkZWZpbmVkICRvYmotPntk
aXNjX21vZGV9ICAmJiAgJG9iai0+e2Rpc2NfbW9kZX0gbmUgJ3JhdycgKSB7DQoJCW15ICRvYmpf
bmFtZSA9ICRvYmotPmdldF9vYmplY3RfbmFtZTsNCgkJcHJpbnQgImdldHRpbmcgZGlzY292ZXJ5
IG9iamVjdCBuYW1lIGZvciAkb2JqX25hbWVcbiI7DQoJCW15ICRkaXNjX29ial9uYW1lID0gJG9i
ai0+e2Rpc2NfaW50ZXJmYWNlfS0+Z2V0X29iamVjdF9uYW1lOw0KCQkkb2JqX25hbWUgPX4gcy9e
XCQvLzsNCgkJJGRpc2Nfb2JqX25hbWUgPX4gcy9eXCQvLzsNCgkJcHJpbnQgeyRmfSAiTVFUVF9E
SVNDT1ZFUkVESVRFTSwgJG9ial9uYW1lLCAkZGlzY19vYmpfbmFtZSwgJG9iai0+e2Rpc2NfdG9w
aWN9LCAkb2JqLT57ZGlzY19tc2d9XG4iOw0KCSAgICB9DQoJfQ0KICAgIH0NCiAgICBjbG9zZSgg
JGYgKTsNCn0NCg0KIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KDQo9aXRlbSBDPChwdWJsaXNo
X21xdHRfbWVzc2FnZSggdG9waWMsIG1lc3NhZ2UsIHJldGFpbiApKT4NCg0KUHVibGlzaCBhbiBt
cXR0IG1lc3NhZ2UuDQoNCj1jdXQNCg0Kc3ViIHB1Ymxpc2hfbXF0dF9tZXNzYWdlIHsNCiAgICBt
eSAoJHNlbGYsICR0b3BpYywgJG1zZywgJHJldGFpbiApID0gQF87DQoNCiAgICAkcmV0YWluID0g
MCBpZiAhZGVmaW5lZCgkcmV0YWluKTsNCiAgICAkc2VsZi0+cHViX21zZyggDQoJbWVzc2FnZV90
eXBlID0+IE1RVFRfUFVCTElTSCwNCglyZXRhaW4gICAgICAgPT4gJHJldGFpbiwNCgl0b3BpYyAg
ICAgICAgPT4gJHRvcGljLA0KCW1lc3NhZ2UgICAgICA9PiAkbXNnDQogICAgKTsNCn0NCg0KIyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KPWl0ZW0gQzwoYnJvYWRjYXN0X21xdHRfbWVzc2FnZSgg
dG9waWMsIG1lc3NhZ2UsIHJldGFpbiApKT4NCg0KQnJvYWRjYXN0IGFuIG1xdHQgbWVzc2FnZSB0
byBhbGwgZGVmaW5lZCBicm9rZXJzLg0KDQo9Y3V0DQoNCnN1YiBicm9hZGNhc3RfbXF0dF9tZXNz
YWdlIHsNCiAgICBteSAoJHRvcGljLCAkbXNnLCAkcmV0YWluICkgPSBAXzsNCiAgICBteSBAaW5z
dGFuY2VzOw0KDQogICAgJHJldGFpbiA9IDAgaWYgIWRlZmluZWQoJHJldGFpbik7DQogICAgKEBp
bnN0YW5jZXMpID0gKGtleXMgJU1RVFRfRGF0YSk7DQogICAgZm9yZWFjaCBteSAkaW5zdCAoIEBp
bnN0YW5jZXMgKSB7DQogICAgICAgIG15ICRzZWxmID0gJE1RVFRfRGF0YXskaW5zdH17c2VsZn07
DQoJJHNlbGYtPnB1Ymxpc2hfbXF0dF9tZXNzYWdlKCAkdG9waWMsICRtc2csICRyZXRhaW4gKTsN
CiAgICB9DQp9DQoNCiMgLVsgRmluaSAtIG1xdHQgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCnBhY2thZ2UgbXF0dF9JdGVt
Ow0KDQp1c2Ugc3RyaWN0Ow0KDQp1c2UgTmV0OjpNUVRUOjpDb25zdGFudHMgcXcvOmFsbC87DQoN
CnVzZSBEYXRhOjpEdW1wZXI7DQoNCkBtcXR0X0l0ZW06OklTQSA9ICggJ0dlbmVyaWNfSXRlbScs
ICJtcXR0IiApOw0KDQo9aXRlbSBDPG5ldyhuYW1lLCBpbnRlcmZhY2UsIHRvcGljLCByZXRhaW4s
IHFvcyk+DQoNCiAgICBDcmVhdGVzIGEgTVFUVCBJdGVtL29iamVjdC4gVGhlIGZvbGxvd2luZyBw
YXJhbWV0ZXIgYXJlIHJlcXVpcmVkOg0KDQogICAgPW92ZXINCg0KICAgID1pdGVtIG5hbWU6IHRo
ZSBuYW1lIG9mIHRoZSBvYmplY3Qgc2VlbiBpbiBNaXN0ZXJob3VzZSANCg0KICAgID1pdGVtIGlu
dGVyZmFjZTogdGhlIHBhcmVudCAobXF0dCkgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIGNvbm5lY3Rp
b24gaW5mby4NCg0KICAgID1pdGVtIGludGVyZmFjZTogdGhlIHRvcGljIHRoYXQgaXMgdXNlZCB0
byB1cGRhdGUgdGhlIG9iamVjdCBzdGF0ZSBhbmQvb3IgY29udHJvbCBhIG1xdHQgZGV2aWNlDQoN
CiAgICA9YmFjaw0KDQogICAgVGhlIGZvbGxvd2luZyBwYXJhbWV0ZXJzIGFyZSBvcHRpb25hbA0K
DQogICAgPW92ZXINCg0KICAgID1pdGVtIHJldGFpbg0KDQogICAgPWl0ZW0gcW9zDQoNCiAgICA9
YmFjaw0KDQogICAgJG1zZyA9IGJsZXNzKCB7ICd0b3BpYycgPT4gJ2hvbWUvaGEvdGVzdC94MTAv
MScsDQogICAgJ3JlbWFpbmluZycgPT4gJycsDQogICAgJ3JldGFpbicgPT4gMSwNCiAgICAnZHVw
JyA9PiAwLA0KICAgICdtZXNzYWdlX3R5cGUnID0+IDMsDQogICAgJ3FvcycgPT4gMCwNCiAgICAn
bWVzc2FnZScgPT4gJ2RlcHJlY2F0ZWQgYWxzbycNCn0sDQogICAgJ05ldDo6TVFUVDo6TWVzc2Fn
ZTo6UHVibGlzaCcNCiAgICApOw0KPWN1dA0KDQpzdWIgbmV3IHsNCiAgICBteSAoICRjbGFzcywg
JGluc3RhbmNlLCAkdG9waWMsICRxb3MsICRyZXRhaW4gKSA9IEBfOw0KDQogICAgbXkgJHNlbGYg
PSBuZXcgR2VuZXJpY19JdGVtKCk7DQoNCiAgICBibGVzcyAkc2VsZiwgJGNsYXNzOw0KDQogICAg
JHNlbGYtPmludGVyZmFjZSgkaW5zdGFuY2UpIGlmIGRlZmluZWQgJGluc3RhbmNlOw0KDQogICAg
JCRzZWxme3RvcGljfSAgID0gJHRvcGljOw0KICAgICQkc2VsZnttZXNzYWdlfSA9ICcnOw0KICAg
ICQkc2VsZntyZXRhaW59ICA9ICRyZXRhaW4gfHwgMDsNCiAgICAkJHNlbGZ7UU9TfSAgICAgPSAk
cW9zICAgIHx8IDA7DQoNCiAgICAkJHNlbGZ7aW5zdGFuY2V9LT5hZGQoJHNlbGYpOw0KDQogICAg
IyBXZSBtYXkgbmVlZCBmbGFncyB0byBkZWFsIHdpdGggWE1MLCBKU09OIG9yIFRleHQNCiAgICBy
ZXR1cm4gJHNlbGY7DQp9DQoNCj1pdGVtIEM8aW50ZXJmYWNlKG5hbWUsIGludGVyZmFjZSwgdG9w
aWMsIHJldGFpbiwgcW9zKT4NCj1jdXQNCg0Kc3ViIGludGVyZmFjZSB7DQogICAgbXkgKCAkc2Vs
ZiwgJHBfaW5zdGFuY2UgKSA9IEBfOw0KDQogICAgJCRzZWxme2luc3RhbmNlfSA9ICRwX2luc3Rh
bmNlIGlmIGRlZmluZWQgJHBfaW5zdGFuY2U7DQoNCiAgICByZXR1cm4gJCRzZWxme2luc3RhbmNl
fTsNCn0NCg0KPWl0ZW0gQzxzZXQobmFtZSwgaW50ZXJmYWNlLCB0b3BpYywgcmV0YWluLCBxb3Mp
Pg0KPWN1dA0KDQpzdWIgc2V0IHsNCiAgICBteSAoICRzZWxmLCAkbXNnLCAkcF9zZXRieSwgJHBf
cmVzcG9uc2UgKSA9IEBfOw0KDQogICAgIyBwcmV2ZW50IHJlY2lwcm9jYWwgc2V0cyB0aGF0IGNh
biBvY2N1ciBiZWNhdXNlIG9mIHRoaXMgbWV0aG9kJ3Mgc3RhdGUNCiAgICAjIHByb3BvZ2F0aW9u
DQogICAgIyBGSVhNRTogVXNlIG9mIHVuaW5pdGlhbGl6ZWQgdmFsdWUgaW4gc3RyaW5nIGVxIGF0
IC9ob21lL25qYy9kZXYvbWgvYmluLy4uL2xpYi9tcXR0LnBtIGxpbmUgNzUyDQogICAgI3JldHVy
biBpZiAocmVmICRwX3NldGJ5IGFuZCAkcF9zZXRieS0+Y2FuKCdnZXRfc2V0X2J5JykgYW5kDQog
ICAgIwkgICAgICAgJHBfc2V0YnktPntzZXRfYnl9IGVxICRzZWxmKTsNCg0KICAgIGlmICggZGVm
aW5lZCgkcF9zZXRieSkgJiYgJHBfc2V0YnkgZXEgJHNlbGYtPmludGVyZmFjZSgpICkgew0KICAg
ICAgICAjIyMNCiAgICAgICAgIyMjIEluY29taW5nIChNUVRUIHRvIE1IKQ0KICAgICAgICAjIyMN
CiAgICAgICAgJHNlbGYtPmRlYnVnKCAxLCAibXF0dF9JdGVtIG5vbSB0byBNUVRUIHRvIE1IICIg
LiAkc2VsZi0+Z2V0X29iamVjdF9uYW1lKCkgLiAiOjpzZXQoJG1zZywgJHBfc2V0YnkpIiApOw0K
ICAgIH0NCiAgICBlbHNlIHsNCiAgICAgICAgIyMjDQogICAgICAgICMjIyBPdXRnb2luZyAoTUgg
dG8gTVFUVCkNCiAgICAgICAgIyMjDQoJaWYgKCBkZWZpbmVkKCAkc2VsZi0+Z2V0X29iamVjdF9u
YW1lKCkgKSApIHsNCgkgICAgJHNlbGYtPmRlYnVnKCAxLCAibXF0dF9JdGVtIG5vbSB0byBNSCB0
byBNUVRUICgiIC4gJHNlbGYtPmdldF9vYmplY3RfbmFtZSgpIC4gIikgbm8gcF9zZXRieSA6OnNl
dCgkbXNnLCAkcF9zZXRieSkiICk7DQoJfQ0KCWVsc2Ugew0KCSAgICAkc2VsZi0+ZGVidWcoIDEs
ICJtcXR0X0l0ZW0gbm9tIHRvIE1IIHRvIE1RVFQgKCkgbm8gcF9zZXRieSA6OnNldCgkbXNnLCAk
cF9zZXRieSkiICk7DQoJfQ0KICAgICAgICAjIyMNCiAgICAgICAgIyMjIEkgbmVlZCB0aGUgaW5z
dGFuY2Ugc29ja2V0LCB0aGUgb2JqJ3MgdG9waWMgYW5kIG1lc3NhZ2UNCiAgICAgICAgIyMjIGlu
IG9yZGVyIHRvIHNlbmQgdGhlIG1lc3NhZ2UNCiAgICAgICAgIyMjDQogICAgICAgICQkc2VsZntp
bnN0YW5jZX0tPnB1Yl9tc2coDQogICAgICAgICAgICBtZXNzYWdlX3R5cGUgPT4gTVFUVF9QVUJM
SVNILA0KICAgICAgICAgICAgcmV0YWluICAgICAgID0+ICQkc2VsZntyZXRhaW59LA0KICAgICAg
ICAgICAgdG9waWMgICAgICAgID0+ICQkc2VsZnt0b3BpY30sDQogICAgICAgICAgICBtZXNzYWdl
ICAgICAgPT4gJG1zZw0KICAgICAgICApOw0KICAgIH0NCg0KICAgICRzZWxmLT5TVVBFUjo6c2V0
KCAkbXNnLCAkcF9zZXRieSwgJHBfcmVzcG9uc2UgKSBpZiBkZWZpbmVkICRtc2c7DQp9DQoNCiMg
LVsgRmluaSAtIG1xdHRfSXRlbSBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCiMgLVsgRmluaSBdLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoxOw0KDQo9
YmVnaW4gY29tbWVudA0KVGhlIHNldF9ieSBoYXMgbWUgY3VycmVudGx5IHB1enpsZWQsIEknbSBu
b3Qgc3VyZSBvZiBpdCdzIHB1cnBvc2UNCg0KVGhlIHN0YXRlLCBzdGF0ZV9ub3cgYW5kIHNhaWQg
YXJlbid0IGV4YWN0bHkgaGVscGluZyBtdWNoIGVpdGhlciA7LSkNCg0KMDMvMjQvMTUgMTA6MTk6
NDkgQU0gKioqIG1xdHQgbXF0dCBzZXQgbXF0dF8xOiBbKG9uKSwgKHdlYiBbMTkyLjE2OC4yNC4y
MzJdKV0NCjAzLzI0LzE1IDEwOjE5OjQ5IEFNICoqKiBtcXR0IG1xdHQgc2V0IG1xdHRfMToNCiRW
QVIxID0gXGJsZXNzKCB7DQogICAgICAgICAgICAgICAgICAgJ3N0YXRlcycgPT4gWw0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29mZicsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnb24nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwNCiAgICAg
ICAgICAgICAgICAgICAnc3RhdGVfbm93JyA9PiAnJywNCiAgICAgICAgICAgICAgICAgICAnc3Rh
dGUnID0+ICcnLA0KICAgICAgICAgICAgICAgICAgICdvYmplY3RzJyA9PiBbDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYmxlc3MoIHsNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnbGVnYWN5X3RhcmdldCcgPT4gdW5kZWYsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpZWRfb2JqZWN0cycgPT4ge30sDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRlcycgPT4gWw0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J29mZicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAnb24nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAnUU9TJyA9PiAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICdzdGF0ZV9jaGFuZ2VkJyA9PiB1bmRlZiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnc2V0X2J5JyA9PiB1bmRlZiwNCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAnc3RhdGVfcHJldicgPT4gJ3gxeG9uJywNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2V0X3RpbWUnID0+ICcxNDI3MTIwMDY4
JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhdGVfbm93
JyA9PiB1bmRlZiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn
c3RhdGUnID0+ICd4MXhvbicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJ3RhcmdldCcgPT4gJycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3NldGJ5X25leHRfcGFzcycgPT4gW10sDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgJ3N0YXRlX25leHRfcGFzcycgPT4gW10sDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRlX2xvZycgPT4gWw0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAz
LzIwLzE1IDAyOjUxOjA0IFBNIHgxeG9uIHNldF9ieT0kbXF0dF8zJywNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwMy8yMC8xNSAw
MToxNTo1MCBQTSB4MXhvbiBzZXRfYnk9JG1xdHRfMScsDQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMDMvMjAvMTUgMDE6MTU6MDAg
UE0geDF4b24gc2V0X2J5PSRtcXR0XzEnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAzLzIwLzE1IDAxOjAxOjM1IFBNIG9uIHNl
dF9ieT0kbXF0dF8xJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICdjYXRlZ29yeScgPT4gJ090aGVyJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAndG9waWMnID0+ICdob21lL2hhL3RleHQveDEwLzEnLA0KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzYWlkJyA9PiB1bmRlZiwNCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncmV0YWluJyA9PiAwLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aWVkX2V2ZW50cycg
PT4ge30sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NoYW5n
ZV9wYXNzJyA9PiAxLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICd0YXJnZXRfbmV4dF9wYXNzJyA9PiBbXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnaW5zdGFuY2UnID0+ICR7JFZBUjF9LA0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICdtZXNzYWdlJyA9PiAnJywNCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZmlsZW5hbWUnID0+ICdDYXBlQ29kX3RhYmxl
JywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2JqZWN0X25h
bWUnID0+ICckQ1JfVGVtcCcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfSwgJ21xdHRfSXRlbScgKSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
bGVzcyggew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdsZWdh
Y3lfdGFyZ2V0JyA9PiB1bmRlZiwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAndGllZF9vYmplY3RzJyA9PiB7fSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAnc3RhdGVzJyA9PiBbDQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb2ZmJywNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbicNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLA0KICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdRT1MnID0+IDAsDQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0YXRlX2NoYW5nZWQnID0+IHVuZGVm
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdzZXRfYnknID0+
ICR7JFZBUjF9LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdz
dGF0ZV9wcmV2JyA9PiAneDF4b24nLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdzZXRfdGltZScgPT4gMTQyNzIwNjc4NCwNCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAnc3RhdGVfbm93JyA9PiB1bmRlZiwNCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3RhdGUnID0+ICd4MXhvbicsDQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RhcmdldCcgPT4gJycsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NldGJ5X25leHRfcGFz
cycgPT4gW10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3N0
YXRlX25leHRfcGFzcycgPT4gW10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgJ3N0YXRlX2xvZycgPT4gWw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAzLzI0LzE1IDEwOjE5OjQ0IEFNIHgxeG9u
IHNldF9ieT0kbXF0dF8zJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICcwMy8yNC8xNSAxMDoxODowOCBBTSB4MXhvbiBzZXRfYnk9
JG1xdHRfMycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnMDMvMjQvMTUgMTA6MTU6NTQgQU0geDF4b24gc2V0X2J5PSRtcXR0XzMn
LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJzAzLzI0LzE1IDEwOjEyOjU5IEFNIHgxeG9uIHNldF9ieT0kbXF0dF8zJywNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcw
My8yNC8xNSAxMDoxMDoxMCBBTSB4MXhvbiBzZXRfYnk9JG1xdHRfMycsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnMDMvMjQvMTUg
MDg6MjI6NTEgQU0geDF4b24gc2V0X2J5PSRtcXR0XzMnLA0KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzAzLzIzLzE1IDExOjA4OjQ4
IEFNIHgxeG9uIHNldF9ieT0kbXF0dF8zJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwMy8yMC8xNSAwMjo1MTowMiBQTSB4MXhv
biBzZXRfYnk9Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJ2NhdGVnb3J5JyA9PiAnT3RoZXInLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICd0b3BpYycgPT4gJ2hvbWUvbmV0d29yay90ZXN0L3gxMC8xJywNCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc2FpZCcgPT4gdW5kZWYsDQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3JldGFpbicgPT4gMCwN
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGllZF9ldmVudHMn
ID0+IHt9LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjaGFu
Z2VfcGFzcycgPT4gOSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAndGFyZ2V0X25leHRfcGFzcycgPT4gW10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ2luc3RhbmNlJyA9PiAkeyRWQVIxfSwNCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJycsDQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyA9PiAnQ2FwZUNvZF90YWJs
ZScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ29iamVjdF9u
YW1lJyA9PiAnJE0zX1RlbXAnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0sICdtcXR0X0l0ZW0nICkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSwN
CiAgICAgICAgICAgICAgICAgICAnY29tbWFuZF9zdGFjaycgPT4gW10sDQogICAgICAgICAgICAg
ICAgICAgJ2NhdGVnb3J5JyA9PiAnT3RoZXInLA0KICAgICAgICAgICAgICAgICAgICd0b3BpYycg
PT4gJ2hvbWUvaGEvIycsDQogICAgICAgICAgICAgICAgICAgJ2dvdF9waW5nX3Jlc3BvbnNlJyA9
PiAxLA0KICAgICAgICAgICAgICAgICAgICdzYWlkJyA9PiAnJywNCiAgICAgICAgICAgICAgICAg
ICAnaW5zdGFuY2UnID0+ICdtcXR0XzEnLA0KICAgICAgICAgICAgICAgICAgICdwb3J0JyA9PiAx
ODgzLA0KICAgICAgICAgICAgICAgICAgICdrZWVwX2FsaXZlX3RpbWVyJyA9PiAxMjEsDQogICAg
ICAgICAgICAgICAgICAgJ2hvc3QnID0+ICcxMjcuMC4wLjEnLA0KICAgICAgICAgICAgICAgICAg
ICdzb2NrZXQnID0+IGJsZXNzKCBcKlN5bWJvbDo6R0VONiwgJ0lPOjpTb2NrZXQ6OklORVQnICks
DQogICAgICAgICAgICAgICAgICAgJ2ZpbGVuYW1lJyA9PiAnQ2FwZUNvZF90YWJsZScsDQogICAg
ICAgICAgICAgICAgICAgJ25leHRfcGluZycgPT4gJzE0MjcyMDY5MDQuOTg0NzYnLA0KICAgICAg
ICAgICAgICAgICAgICdvYmplY3RfbmFtZScgPT4gJyRtcXR0XzMnDQogICAgICAgICAgICAgICAg
IH0sICdtcXR0JyApOw0KDQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPWN1dA0K
--00000000000060c983064b0dd0ed
Content-Type: application/octet-stream; name="mqtt_items.pm"
Content-Disposition: attachment; filename="mqtt_items.pm"
Content-Transfer-Encoding: base64
Content-ID: <f_mlr9ggju1>
X-Attachment-Id: f_mlr9ggju1
IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KDQo9YmVnaW4gY29tbWVudA0KICAgIEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBADQoNCiAgICA9aGVhZDEgQjxtcXR0X0Jhc2VJdGVtPg0KICAgID1oZWFk
MSAgICAgQjxtcXR0X0xvY2FsSXRlbT4NCiAgICA9aGVhZDEgICAgIEI8bXF0dF9CYXNlUmVtb3Rl
SXRlbT4NCiAgICA9aGVhZDEgICAgICAgICBCPG1xdHRfUmVtb3RlSXRlbT4gQjxtcXR0X0luc3RN
cXR0SXRlbT4gQjxtcXR0X0Rpc2NvdmVyZWRJdGVtPg0KICAgID1oZWFkMSBCPG1xdHRfRGlzY292
ZXJ5Pg0KDQogICAgRGF2ZSBOZXVkb2VyZmZlciA8ZGF2ZUBuZXVkb2VyZmZlci5jb20+DQoNCiAg
ICA9aGVhZDIgU1lOT1BTSVMNCg0KICAgIEFuIE1RVFQgSXRlbXMgbW9kdWxlIGZvciBNaXN0ZXJo
b3VzZS4NCiAgICBVc2VzIGV4aXN0aW5nIGludGVyZmFjZSBjbGFzcyBpbiBtcXR0LnBtLg0KICAg
IEl0IGRvZXMgbm90IHVzZSB0aGUgbXF0dF9JdGVtIGNsYXNzIGluIG1xdHQucG0uDQoNCiAgICBD
YW4gYmUgdXNlZCB0b2dldGhlciB3aXRoIG1xdHRfZGlzY292ZXJ5LnBtIHRvIHB1Ymxpc2ggYW5k
IHByb2Nlc3MNCiAgICBIb21lIEFzc2lzdGFudCBmb3JtYXQgZGlzY292ZXJ5IG1lc3NhZ2VzLg0K
DQogICAgPWhlYWQyIERFU0NSSVBUSU9ODQoNCiAgICBNaXN0ZXJob3VzZSBNUVRUIGl0ZW1zIGZv
ciB1c2Ugd2l0aCBtYW55IE1RVFQgc2VydmljZXMuDQoNCiAgICBIb21lIEFzc2lzdGFudCBmb3Jt
YXQgZGlzY292ZXJ5IG1lc3NhZ2UgcHJvY2Vzc2luZy4NCg0KICAgIE1RVFQgd2Vic2l0ZTogaHR0
cDovL21xdHQub3JnLw0KICAgIE1RVFQgVGVzdCBzZXJ2aWNlOiBodHRwLy90ZXN0Lm1vc3F1aXR0
by5vcmcvICh0ZXN0Lm1vc3F1aXR0by5vcmcgcG9ydCAxODgzKQ0KDQpGaWxlOg0KICAgIG1xdHRf
aXRlbXMucG0NCiAgICBtcXR0X2Rpc2NvdmVyeS5wbQ0KDQpEZXNjcmlwdGlvbjoNCiAgICBUaGlz
IGlzIGEgbWlzdGVyaG91c2Ugc3R5bGUgaXRlbXMgaW50ZXJmYWNlIGZvciBNUVRUIGRldmljZXMN
Cg0KICAgIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBNUVRUIHByb3RvY29sOg0KICAg
ICAgICBodHRwOi8vbXF0dC5vcmcNCg0KICAgIEF1dGhvcihzKToNCiAgICBEYXZlIE5ldWRvZXJm
ZmVyIDxkYXZlQG5ldWRvZXJmZmVyLmNvbT4NCg0KICAgIE1RVFQgKG1xdHQucG0pDQogICAgLS0t
LS0tLS0tLS0tLS0NCiAgICBUaGlzIG1vZHVsZSB1c2VzIG1xdHQucG0gdG8gY3JlYXRlIGFuIG9i
amVjdCB0aGF0IGNvbW11bmljYXRlcyB0byB0aGUgbXF0dCBzZXJ2ZXIuDQoNCiAgICBUaGVyZSBh
cmUgc2V2ZXJhbCBnZW5lcmljIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZSB0aGF0IHdpbGwgZG8g
dGhpbmdzIHRvL3dpdGgNCiAgICBhbGwgb2YgdGhlIG9iamVjdHMgdGhhdCBhcmUgY3JlYXRlZCBm
b3IgdGhhdCBtcXR0IHNlcnZlci4NCg0KDQogICAgTVFUVCBJdGVtcyAobXF0dF9pdGVtcy5wbSkN
CiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogICAgVGhlcmUgYXJlIHNldmVyYWwg
TVFUVCBpdGVtIHR5cGVzIGltcGxlbWVudGVkIGluIHRoaXMgbW9kdWxlIChzZWUgYmVsb3cpLg0K
DQogICAgRWFjaCBpdGVtIGNhbiBoYW5kbGUgYm90aCBjb21tYW5kcyBhbmQgc3RhdGUgbWVzc2Fn
ZXMgdG8vZnJvbSBNUVRUIGRldmljZXMuDQogICAgTFdUIG1lc3NhZ2VzIGNhbiBhbHNvIGJlIGhh
bmRsZWQgZm9yIHJlbW90ZSBpdGVtcy4NCg0KICAgIFRoZXJlIGFyZSBzZXZlcmFsIGNsYXNzZXMg
aW1wbGVtZW50ZWQgaW4gbXF0dF9pdGVtcy5wbToNCg0KICAgIG1xdHRfQmFzZUl0ZW06DQogICAg
ICAgICAtIGlzIHRoZSBiYXNlIGNsYXNzLg0KDQoJbXF0dF9Mb2NhbEl0ZW06DQoJICAgIC0gaW1w
bGVtZW50cyBhbiBtcXR0IG1oIGl0ZW0gdGhhdCBpcyB0aWVkIHRvIGEgbG9jYWwgaXRlbQ0KCSAg
ICAtIHdoZW4gdGhlIGxvY2FsIGl0ZW0gY2hhbmdlcyBzdGF0ZSwgdGhpcyBtcXR0IGl0ZW0gd2ls
bCBzZW5kIG1xdHQgc3RhdGVfdG9waWMgbWVzc2FnZXMNCgkgICAgLSBpdCB3aWxsIGFsc28gbGlz
dGVuIGZvciBtcXR0IGNvbW1hbmRfdG9waWMgbWVzc2FnZXMgYW5kIHNldCB0aGUgc3RhdGUgb2Yg
dGhlIGxvY2FsIGl0ZW0sDQoJICAgICAgaWYgdGhlIHNldCBvZiB0aGUgbG9jYWwgaXRlbSBpcyBz
dWNjZXNzZnVsLCB0aGUgbXF0dCBpdGVtIHdpbGwgc2VuZCBvdXQgdGhlIHN0YXRlX3RvcGljIG1l
c3NhZ2UNCgkgICAgLSBhIExvY2FsSXRlbSBjYW4gYmUgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lm
aWMgYnJva2VyLCBpbiB3aGljaCBjYXNlIGl0IHdpbGwNCgkgICAgICBsaXN0ZW4gb25seSB0byB0
aGF0IGJyb2tlciBmb3IgY29tbWFuZHMgYW5kIHdpbGwgc2VuZCBzdGF0ZSBtZXNzYWdlcyBvbmx5
IHRvDQoJICAgICAgdGhhdCBicm9rZXINCgkgICAgLSBpZiB0aGVyZSBpcyBubyBicm9rZXIgc3Bl
Y2lmaWVkLCB0aGVuIHRoZSBMb2NhbEl0ZW0gd2lsbCBsaXN0ZW4gdG8gYWxsIGJyb2tlcnMNCgkg
ICAgICBmb3IgY29tbWFuZCBtZXNzYWdlcywgYW5kIGJyb2FkY2FzdCBzdGF0ZSBtZXNzYWdlcyB0
byBhbGwgYnJva2Vycw0KCSAgICAtIGNhbiBwdWJsaXNoIEhBIGRpc2NvdmVyeSBpbmZvIC0tIGEg
ZmFpcmx5IHNpbXBsZSBkaXNjb3ZlcnkgbGFuZ3VhZ2UgaXMNCgkgICAgICB1c2VkIHRoYXQgaXMg
YmFzZWQgb24gdGhlIGluc3Rlb24tbXF0dCBwcm9qZWN0DQoNCgltcXR0X0Jhc2VSZW1vdGVJdGVt
Og0KCSAgICAtIGltcGxlbWVudHMgYSBiYXNlIGNsYXNzIG1oIGl0ZW0gdGhhdCBib3RoIHNlbmRz
IGNvbW1hbmRzIHRvIGFuZA0KCSAgICAgIHJlY2VpdmVzIHN0YXRlIG1lc3NhZ2VzIGZyb20gYSBy
ZW1vdGUgZGV2aWNlIHRoYXQgZGlyZWN0bHkgc2VuZHMgbXF0dCBtZXNzYWdlcw0KCSAgICAtIGEg
QmFzZVJlbW90ZUl0ZW0gaXMgYWx3YXlzIGFzc29jaWF0ZWQgd2l0aCBhIHNwZWNpZmljIG1xdHQg
YnJva2VyDQoJICAgIC0gd2hlbiBzZXQgaXMgY2FsbGVkLCB3aWxsIHNlbmQgY29tbWFuZF90b3Bp
YyBtZXNzYWdlcyB0byBjaGFuZ2UgdGhlIHN0YXRlIG9mIGEgZGV2aWNlDQoJICAgICAgICAtIGxv
Y2FsIHN0YXRlIHdpbGwgbm90IGNoYW5nZSB1bnRpbCBzdGF0ZV90b3BpYyBtZXNzYWdlIGlzIHJl
Y2VpdmVkIHVubGVzcw0KCQkgIHRoZSBpdGVtIGlzIG1hcmtlZCBhcyBvcHRpbWlzdGljIG9yIGRv
ZXMgbm90IGhhdmUgYSBzdGF0ZV90b3BpYw0KCSAgICAtIHdpbGwgbGlzdGVuIGZvciBzdGF0ZV90
b3BpYyBtZXNzYWdlcyB3aXRoIHN0YXRhIGNoYW5nZXMNCgkgICAgLSB3aWxsIGFsc28gbGlzdGVu
IGZvciBsYXN0IHdpbGwgYW5kIHRlc3RpbWVudCAoTFdUKSBtZXNzYWdlcyByZXBvcnRpbmcNCgkg
ICAgICB3aGVuIGEgZGV2aWNlIGdvZXMgb2ZmbGluZQ0KDQoJICAgIG1xdHRfUmVtb3RlSXRlbQ0K
CSAgICAgICAgLSBpbXBsZW1lbnRzIGEgc3RhdGljYWxseSBkZWZpbmVkIG1oIGl0ZW0gZm9yIG1x
dHQgZGV2aWNlcw0KCQktIGl0IGlzIGludGVuZGVkIHRvIHdvcmsgd2l0aCBUYXNtb3RhLCBJT1Q0
IGFuZCBFU1B1cm5hIGRldmljZXMsDQoJCSAgQlVULCBJIGhhdmUgYSB2ZXJ5IGxpbWl0ZWQgc2V0
IG9mIGRldmljZXMgdG8gdGVzdCB3aXRoDQoJCSAgICAtIGN1cnJlbnRseSBpbXBsZW1lbnRzIHN3
aXRjaCwgbGlnaHQsIHNlbnNvciwgYmluYXJ5LXNlbnNvcg0KCQkgICAgLSBJIG9ubHkgaGF2ZSBU
YXNtb3RhIHN3aXRjaGVzLCBhbmQgd2l0aCB0dXlhIGNvbnZlcnQgYnJva2VuLA0KCQkgICAgICBJ
IGFtIG5vdCBhYmxlIHRvIHNldHVwIG90aGVyIFRhc21vdGEgZGV2aWNlcw0KCQkgICAgICAobm90
IGludG8gc29sZGVyaW5nIGF0IHRoaXMgcG9pbnQpDQoJCS0gUmVtb3RlIGRldmljZXMgY2FuIGFs
c28gYmUgZGlzY292ZXJlZCB1c2luZyB0aGUgZ2VhciBpbiBtcXR0X2Rpc2NvdmVyeS5wbQ0KCQkg
IGVsaW1pbmF0aW5nIHRoZSBuZWVkIHRvIHN0YXRpY2FsbHkgZGVmaW5lIHRoZW0sIGJ1dCB5b3Ug
bmVlZCB0bw0KCQkgIHR1cm4gZGlzY292ZXJ5IG9uIG9uIHlvdXIgZGV2aWNlIChlZy4gVGFzbW90
YTogU2V0T3B0aW9uMTkgMSkNCgkJICAtLSBub3RlIHRoYXQgdGhlIFRhc21vdGEgZGlzY292ZXJ5
IGdlYXIgaXMgbm90IGJlaW5nIGRldmVsb3BlZCBhbnltb3JlLi4uDQoJCS0gY2FuIHB1Ymxpc2gg
SEEgZGlzY292ZXJ5IGluZm8gLS0gYSBzaW1wbGVyIGRpc2NvdmVyeSBtZXNzYWdlDQoJCSAgdGhh
biB0aGUgZGlzY29udGludWVkIFRhc21vdGEgZGlzY292ZXJ5IG1lbnRpb25lZCBhYm92ZQ0KDQoJ
ICAgIG1xdHRfSW5zdE1xdHRJdGVtDQoJICAgICAgICAtIGltcGxlbWVudHMgYSBzdGF0aWNhbGx5
IGRlZmluZWQgbWggaXRlbSBmb3IgSW5zdGVvbiBkZXZpY2VzIG1hbmFnZWQNCgkJICBieSBpbnN0
ZW9uLW1xdHQgT1IgYW5vdGhlciBpbnN0YW5jZSBvZiBNaXN0ZXJIb3VzZSAoc2luY2UgdGhlIE1I
IHB1Ymxpc2hlZA0KCQkgIE1RVFQgbWVzc2FnZXMgYXJlIGJhc2VkIG9uIGluc3Rlb24tbXF0dCku
ICBZb3UgY291bGQgYWxzbyB1c2UgZGlzY292ZXJlZCBpdGVtcw0KCQkgIGZvciB0aGlzIHB1cnBv
c2UuDQoJCS0gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9URDIyMDU3L2luc3Rlb24tbXF0dA0KCQkt
IGNhbiBwdWJsaXNoIEhBIGRpc2NvdmVyeSBpbmZvLCBhcyBpbnN0ZW9uLW1xdHQgZG9lcyBub3Qg
aW1wbGVtZW50IGRpc2NvdmVyeSB5ZXQNCg0KDQogICAgU3VwcG9ydGVkIG1xdHQgdHlwZXM6DQog
ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogICAgVGhlIHN1cHBvcnRlZCB0eXBlcyBhcmU6DQog
ICAgICAgIC0gbGlnaHQNCgktIHN3aXRjaA0KCS0gYmluYXJ5X3NlbnNvcg0KCS0gc2Vuc29yDQoJ
LSBzY2VuZQ0KCS0gc2VsZWN0DQoJLSB0ZXh0DQoJLSBudW1iZXINCgktIGNvdmVyDQogICAgTm90
ZSB0aGF0IHRoZXNlIG1hcCB0byB0aGUgSG9tZSBBc3Npc3RhbnQgdHlwZXMgZGlyZWN0bHkuDQog
ICAgQWxzbywgdGhlIHR5cGUgY2FuIGJlIGVuaGFuY2VkIGluIE1IOg0KDQoJPHR5cGU+OjxkZXZp
Y2VfY2xhc3M+OjxzdGF0ZV9jbGFzcz46PHVuaXRfb2ZfbWVhc3VyZW1lbnQ+DQoNCgktIHRoaXMg
aGVscHMgd2l0aCBIb21lIEFzc2lzdGFudCBwcmVzZW50YXRpb24gYW5kIGxvbmctdGVybSBzdGF0
aXN0aWNzIGFuZCBoaXN0b3J5DQoJLSBzZWUgaG9tZSBhc3Npc3RhbnQgZG9jIGZvciB2YWxpZCBz
ZXR0aW5ncyBmb3IgZGV2aWNlX2NsYXNzLCBzdGF0ZV9jbGFzcyBhbmQgdW5pdF9vZl9tZWFzdXJl
bWVudA0KDQoNCiAgICBEaXNjb3ZlcnkgKG1xdHRfZGlzY292ZXJ5LnBtKToNCiAgICAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQogICAgVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBNUVRU
IGRpc2NvdmVyeS4gIEJvdGggcHVibGlzaGluZyBkaXNjb3ZlcnkgaW5mb3JtYXRpb24gZm9yIGxv
Y2FsbHkNCiAgICBkZWZpbmVkIGRldmljZXMsIGFzIHdlbGwgYXMgcmVjZWl2aW5nIGRpc2NvdmVy
eSBpbmZvcm1hdGlvbiBmcm9tIG1xdHQgZGV2aWNlcyBhbmQgZnJvbSBvdGhlcg0KICAgIG1xdHQg
c291cmNlcyAtLSBsaWtlIGhvbWUgYXNzaXN0YW50Lg0KDQogICAgVGhlIGRpc2NvdmVyeSBkZWZp
bml0aW9ucyBhcmUgYmFzZWQgb24gdGhlIEhvbWUgQXNzaXN0YW50IERpc2NvdmVyeSBpbmZvOg0K
ICAgICAgICBodHRwczovL3d3dy5ob21lLWFzc2lzdGFudC5pby9kb2NzL21xdHQvZGlzY292ZXJ5
DQoNCiAgICBUaGVyZSBhcmUgc2V2ZXJhbCB1c2VzIGZvciBtcXR0IGRpc2NvdmVyeSBpbiBNSDoN
CiAgICAgICAgLSBkaXNjb3ZlciBtcXR0IGRldmljZXMgd2l0aG91dCBoYXZpbmcgdG8gc3RhdGlj
YWxseSBkZWZpbmUgdGhlbSBpbiAubWh0IGZpbGVzDQoJLSBwdWJsaXNoIGRpc2NvdmVyeSBpbmZv
cm1hdGlvbiBmb3IgbG9jYWxseSBkZWZpbmVkIGRldmljZXMuICBUaGlzIGhhcyBtdWx0aXBsZQ0K
CSAgdXNlcyBhcyB3ZWxsOg0KCSAgICAtIHNoYXJlIGRldmljZSBpbmZvcm1hdGlvbiB3aXRoIGFu
b3RoZXIgTUggaW5zdGFuY2UNCgkgICAgLSBwdWJsaXNoIGRldmljZSBpbmZvcm1hdGlvbiB0byBI
b21lIEFzc2lzdGFudC4gIFRoaXMgY291bGQgYmUNCgkgICAgICBmb3IgZW52aXJvbm1lbnRzIHdo
ZXJlIGJvdGggYXJlIHJ1bm5pbmcsIG9yIHVzZWQgd2hlbg0KCSAgICAgIHRyYW5zaXRpb25pbmcg
b25lIHdheSBvciB0aGUgb3RoZXIuDQoNCg0KICAgIFRoZXJlIGFyZSAyIGNsYXNzZXMgaW1wbGVt
ZW50ZWQgaW4gbXF0dF9kaXNjb3ZlcnkucG06DQoNCgltcXR0X0Rpc2NvdmVyZWRJdGVtOg0KCSAg
ICBUaGlzIGNsYXNzIGV4dGVuZHMgdGhlIG1xdHRfQmFzZVJlbW90ZUl0ZW0gY2xhc3MgYW5kIGlt
cGxlbWVudHMNCgkgICAgYSBtaCBpdGVtIGZyb20gYSBtcXR0IGRpc2NvdmVyeSBtZXNzYWdlLg0K
CSAgICBJdCBoYXMgYmVlbiBidWlsdCB0byBoYW5kbGUgMiB0eXBlcyBvZiBkaXNjb3ZlcnkgbWVz
c2FnZXM6DQoJCTEuIGRpc2NvdmVyeSBtZXNzYWdlcyBhcyBwdWJsaXNoZWQgYnkgdGhlIGJlbG93
IGRpc2NvdmVyeQ0KCQkgICBjbGFzcyBwcmltYXJpbHkgZm9yIG1xdHRfTG9jYWxJdGVtcywgYnV0
IGRpc2NvdmVyeSBpbmZvDQoJCSAgIGZvciBSZW1vdGVJdGVtcyBhbmQgSW5zdE1xdHRJdGVtcyBj
YW4gYWxzbyBiZSBwdWJsaXNoZWQuDQoJCSAgIFRoaXMgYWxsb3dzIGVhc3kgc2hhcmluZyBvZiBk
ZXZpY2UgZGVmaW5pdGlvbnMgYmV0d2VlbiBNSCBpbnN0YW5jZXMsDQoJCSAgIGFuZCBhbHNvIGFs
bG93cyBIb21lIEFzc2lzdGFudCB0byBrbm93IGFib3V0IE1IIGl0ZW1zLg0KCQkyLiBkaXNjb3Zl
cnkgbWVzc2FnZXMgcHVibGlzaGVkIGJ5IHJlbW90ZSBkZXZpY2VzLg0KCQkgICBJdCBoYW5kbGVz
IHNvbWUgVGFzbW90YSwgSU9UNCBkaXNjb3ZlcnkgbWVzc2FnZXMgcHVibGlzaGVkDQoJCSAgIHdo
ZW4gVGFzbW90YSBTZXRPcHRpb24xOSBpcyBzZXQgdG8gMSwgb3IgSEFTUyBkaXNjb3ZlcnkgdHVy
bmVkIG9uDQoJCSAgIG9uIHRoZSBJT1Q0IGRldmljZS4gIEkgZG9uJ3QgaGF2ZSBhbnkgRVNQdXJu
YSBkZXZpY2VzIHNvIEkgZG9uJ3QNCgkJICAga25vdyBhYm91dCBkaXNjb3ZlcnkgZm9yIHRob3Nl
IGRldmljZXMuDQoJCSAgIC0gaXQgaGFuZGxlcyBzd2l0Y2gsIGxpZ2h0LCBzZW5zb3IgYW5kIGJp
bmFyeS1zZW5zb3INCgkJICAgLSBzbyBmYXIgdGhlIGhhbmRsaW5nIG9mIGRpc2NvdmVyeSBtZXNz
YWdlcyBpcyBzb21ld2hhdCBsaW1pdGVkIGR1ZQ0KCQkgICAgIHRvIG15IHZlcnkgbGltaXRlZCBz
ZXQgb2YgdGhlc2UgZGV2aWNlcw0KCQkgICAtIEkgaGF2ZSBpbXBsZW1lbnRlZCB0aGVzZSBkZXZp
Y2VzIGJhc2VkIG9uIEhvbWVBc3Npc3RhbnQgZG9jdW1lbnRhdGlvbg0KCQkgICAgIGZvciBkaXNj
b3ZlcnkgYW5kIGluZm9ybWF0aW9uIG9uIGJsYWthZGRyLmNvbQ0KCQkgICAtIEluIG9yZGVyIHRv
IGltcGxlbWVudCB0aGlzIHByb3Blcmx5LCB3ZSB3b3VsZCBuZWVkIGEgdGVtcGxhdGluZyBlbmdp
bmUgaW4gcGVybA0KDQoJICAgIFlvdSBjYW4gbW92ZSBvbmUgb2YgdGhlIGl0ZW1zIGZyb20gdGhl
IGZpbGUgd3JpdHRlbiBvdXQgYnkgd3JpdGVfZGlzY292ZXJlZF9pdGVtcywgb3INCgkgICAgeW91
IGNvdWxkIGhhbmQgY29kZSBhbiBpdGVtIG9mIHRoaXMgdHlwZSB1c2luZyBhIGZ1bGwgZGlzY292
ZXJ5IG1lc3NhZ2UuICBXaGVuIHlvdSBhcmUNCgkgICAgaGFuZCBkZWNsYXJpbmcgYW4gbXF0dCBp
dGVtIHVzaW5nIHRoaXMgZm9ybWF0LCBjaGFuZ2UgdGhlIGRpc2NvdmVyeV90b3BpYyB0byBqdXN0
DQoJICAgIHRoZSBkaXNjb3ZlcnlfdHlwZSAtLSB0aGF0IHdpbGwgaW50ZXJuYWxseSBtYXJrIGl0
IHNvIHRoYXQgaXQgaXMgbm90IHdyaXR0ZW4gb3V0DQoJICAgIG5leHQgdGltZSB3cml0ZV9kaXNj
b3ZlcmVkX2l0ZW1zIGlzIGNhbGxlZC4NCgkNCgltcXR0X0Rpc2NvdmVyeToNCgkgICAgIFRoaXMg
Y2xhc3MgaGFzIDIgZnVuY3Rpb25zLiAgVGhlIGRpc2NvdmVyeV9hY3Rpb24gcGFyYW1ldGVyIGRl
ZmluZXMgd2hpY2ggb25lcw0KCSAgICAgaXQgZG9lcyAtLSBwdWJsaXNoLCBzdWJzY3JpYmUsIGJv
dGgsIG5vbmUuDQoNCgkgICAgIFN1YnNjcmliZToNCgkgICAgICAgICAtIGl0IGRlZmluZXMgYSBz
aW5nbGUgbXF0dF9CYXNlSXRlbSB0aGF0IHRoYXQgbGlzdGVucyBmb3IgbXF0dCBkaXNjb3Zlcnkg
bWVzc2FnZXMNCgkgICAgICAgICAgIGJhc2VkIG9uIGFuIG1xdHQgd2lsZGNhcmQNCgkJIC0gY3Jl
YXRlcyBtcXR0X0Rpc2NvdmVyZWRJdGVtcyBiYXNlZCBvbiB0aGUgZGlzY292ZXJ5IGluZm9ybWF0
aW9uIHRoYXQgaXMgcmVjZWl2ZWQNCgkJIC0geW91IGNhbiB0aGVuIHdyaXRlIG91dCB0aGVzZSBp
dGVtcyB0byBhIC5taHQgZmlsZSB1c2luZyB0aGUgbXF0dDo6d3JpdGVfZGlzY292ZXJlZF9pdGVt
cyBjbGFzcyBmdW5jdGlvbg0KCQkgICAgIC0gbm90ZSB0aGF0IHRoZSBkaXNjb3ZlcmVkIGl0ZW1z
IHdpbGwgbm90IGFwcGVhciBhcyBmdWxseSByZWZlcmVuY2FibGUgTUggaXRlbXMNCgkJICAgICAg
IHVudGlsIHlvdSByZXN0YXJ0IE1IIG9uY2UuDQoJICAgICBQdWJsaXNoOg0KCSAgICAgICAgIC0g
dGhpcyBjbGFzcyB3aWxsIHNldHVwIHB1Ymxpc2hpbmcgb2YgZGlzY292ZXJ5IGluZm9ybWF0aW9u
IGZvciBtcXR0X0xvY2FsSXRlbXMgYW5kDQoJICAgICAgICAgICBldmVuIGZvciBhbnkgb2YgdGhl
IG1xdHRfQmFzZVJlbW90ZUl0ZW1zIGlmIHRoZXkgYXJlIGNyZWF0ZWQgd2l0aCB0aGUgZGlzY292
ZXJ5IGZsYWcgc2V0DQoJICAgICAgICAgLSB0aGlzIGxhc3QgcGFydCBpcyB1c2VmdWwgaWYgeW91
IGhhdmUgYW4gbXF0dCBkZXZpY2Ugc29tZXdoZXJlIHdob3NlIGRpc2NvdmVyeQ0KCQkgICBpbmZv
IGlzIG5vdCBncmVhdCwgb3IgZG9lc24ndCBwdWJsaXNoIGRpc2NvdmVyeSBpbmZvDQoNCg0KDQpM
aWNlbnNlOg0KICAgIFRoaXMgZnJlZSBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBwdWJsaWMgbGljZW5zZS4NCg0KVXNhZ2U6DQoNCiAgICAubWh0IGZpbGU6
DQoJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQoJ
IyBCcm9rZXIgcmVjb3JkIGNyZWF0ZXMgb2JqZWN0IHRvIGNvbm5lY3QgdG8gbXF0dCBzZXJ2ZXIN
CgkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0K
CSMgTVFUVF9CUk9LRVIsCW5hbWUsCSAgIHN1YnNjcmliZSB0b3BpYywJaG9zdC9pcCwJcG9ydCwJ
dXNlciwJcHdkLAlrZWVwYWxpdmUNCglNUVRUX0JST0tFUiwJbXF0dF8xLAkgICAsCQkJbG9jYWxo
b3N0LAkxODgzLAksCSwJMTIxDQoNCgkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMNCgkjIFVzZSBvZiBEaXNjb3ZlcnkgZnVuY3Rpb25hbGl0eSBpcyBv
cHRpb25hbA0KCSMgLSB0aGUgbW9zdCBjb21tb24gdXNlIGlzIHRvIHB1Ymxpc2ggZGlzY292ZXJ5
IGluZm8gdG8gaG9tZSBhc3Npc3RhbnQNCgkjIC0gdG9waWMgcHJlZml4IGlzIHVzZWQgZm9yIHB1
Ymxpc2hpbmcgZGlzY292ZXJ5IGluZm8gLS0gaXQgd2lsbCBwcmVmaXggdGhlIGRpc2NvdmVyeSBt
ZXNzYWdlIGFuZCBhbGwgdG9waWNzDQoJIyAgICAgLSBpdCBvdmVycmlkZXMgdGhlIHRvcGljX3By
ZWZpeCBvcHRpb24gb24gdGhlIG1xdHRfYnJva2VyIG9iamVjdA0KCSMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJIyBNUVRUX0RJU0NPVkVSWSwg
ICBvYmogbmFtZSwJCWRpc2MgdG9waWMgcHJlZml4LCAgYnJva2VyLAlwdWJsaXNofHN1YnNjcmli
ZXxib3RoIChkZWZhdWx0IGJvdGgpDQoJTVFUVF9ESVNDT1ZFUlksCSAgICBtcXR0X2Rpc2NvdmVy
eTEsCWFwcC9taXN0ZXJob3VzZSwgICAgbXF0dF8xLAlib3RoDQoNCg0KCSMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KCSMgRGlmZmVyZW50IEl0ZW0g
dHlwZXMgZm9yIGRpZmZlcmVudCB0eXBlcyBvZiBNUVRUIGZ1bmN0aW9uYWxpdHkNCgkjDQoJIyBU
b3BpY1BhdHRlcm4gc2hvdWxkIGJlIG9mIHRoZSBmb3JtICI8bm9kZV9pZD4vPG1xdHQgbmFtZT4v
KyIuDQoJIyAgICAtIEl0IGlzIGJlc3QgdG8gdXNlIHRoZSBzYW1lIDxub2RlX2lkPiBmb3IgYWxs
IGl0ZW1zLCBidXQgbm90IG5lY2Vzc2FyeQ0KCSMgICAgLSBJdCBoZWxwcyBpZGVudGlmeSB5b3Vy
IG93biBkaXNjb3ZlcnkgbWVzc2FnZXMgaW4gYSBsYXJnZSBtcXR0IHN5c3RlbQ0KCSMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KDQoJIyBVc2VkIHRv
IGRlZmluZSBtcXR0IGl0ZW1zIGFzIHB1Ymxpc2hlZCBieSBpbnN0ZW9uLW1xdHQgcHJvamVjdCBv
ciBhcyBwdWJsaXNoZWQNCgkjIGJ5IGFub3RoZXIgaW5zdGFuY2Ugb2YgTWlzdGVySG91c2Ugd2hp
Y2ggaGFzIGRlZmluZWQgTVFUVF9MT0NBTElURU1zLg0KCSMNCgkjIE1RVFRfSU5TVE1RVFQsICAg
IG5hbWUsCQlncm91cHMsCQlicm9rZXIsIHR5cGUsCQl0b3BpY3BhdHRlcm4sCQkJCSAgICBkaXNj
b3ZlcmFibGUgICAgW0FyZWE6XUZyaWVuZGx5IE5hbWUNCglNUVRUX0lOU1RNUVRULAkgICAgYm9v
dHJvb21fc3dpdGNoLAlMaWdodHMsCQltcXR0XzEsIHN3aXRjaCwJCWluc3Rlb24vYm9vdHJvb20v
KywJCQkgICAgMSwJCSAgICBCb290cm9vbSBMaWdodA0KDQoJIyBEZWZpbmUgYSBUYXNtb3RhIGl0
ZW0uICBOb3RlIHRoYXQgdGhlIHRvcGljcGF0dGVybiBtdXN0IGJlIGluIHRoZSBvcmRlciB0aGF0
IHRoZSBkZXZpY2Ugd2lsbA0KCSMgc2VuZC4gIFRoaXMgaXMgY29uZmlndXJlZCBpbiB0aGUgVGFz
bW90YSBNUVRUIGNvbmZpZ3VyYXRpb24uICdzdGF0ZXRvcGljJyBhbmQgJ2NtbmR0b3BpYycgYXJl
DQoJIyBvcHRpb25hbCwgYW5kIHdpbGwgZGVmYXVsdCB0byBnb29kIHZhbHVlcyBmb3IgVGFzbW90
YSwgYnV0IG1heWJlIG5vdCBmb3Igb3RoZXIgZGV2aWNlcy4NCgkjDQoJIyBNUVRUX1JFTU9URUlU
RU0sICBuYW1lLAkJZ3JvdXBzLAkJYnJva2VyLCB0eXBlLAkJdG9waWNwYXR0ZXJuLAkJCQkgICAg
ZGlzY292ZXJhYmxlICAgIFtBcmVhOl1GcmllbmRseSBOYW1lLAlzdGF0ZXRvcGljLAljbW5kdG9w
aWMNCglNUVRUX1JFTU9URUlURU0sICAgIHRhc19vdXRkb29yX3BsdWcsCSwJCW1xdHRfMSwgc3dp
dGNoLAkJdGFzbW90YV9vdXRkb29yX3BsdWcvKy8rLAkJICAgIDAsCQkgICAgVGFzbW90YSBPdXRk
b29yIFBsdWcNCg0KDQogICAgICAgICMgU2F5IHlvdSBoYXZlIGEgbG9jYWwgSU5TVEVPTiBpdGVt
ICAoY291bGQgYmUgYW55IGtpbmQgb2YgbWlzdGVyaG91c2UgaXRlbSkNCglJTlNURU9OX1NXSVRD
SExJTkMsIDUyLjlFLkRELAkJc2hlZF9saWdodCwJTGlnaHRzfE91dHNpZGUNCgkjDQogICAgICAg
ICMgVGhlbiB5b3UgY2FuIGNyZWF0ZSBhbiBtcXR0IGl0ZW0gdG8gcHVibGlzaCBpdHMgc3RhdGUg
YW5kIHJlY2VpdmUgbXF0dCBjb21tYW5kcy4NCgkjIFRvcGljUGF0dGVybiBzaG91bGQgYmUgb2Yg
dGhlIGZvcm0gIjxub2RlX2lkPi88bXF0dCBuYW1lPi8rIi4NCgkjICoqKiBUaGlzIGNhbiBiZSB1
c2VkIHRvIHB1Ymxpc2ggbG9jYWwgTUggaXRlbXMgdG8gSG9tZSBBc3Npc3RhbnQuDQoJIyAqKiog
T25jZSBjcmVhdGVkLCB5b3Ugc2hvdWxkbid0IG5lZWQgdG8gcmVmZXJlbmNlIHRoZSBNUVRUX0xP
Q0FMSVRFTSwganVzdCB0aGUgcmVndWxhciBpdGVtDQoJIyBUaGUgb3B0aW9uYWwgQXJlYTogd2ls
bCBzZXQgYSBzdWdnZXN0ZWQgYXJlYSBvbiB0aGUgbXF0dCBpdGVtIHdoaWNoIG1heSBwdXQgdGhl
IGl0ZW0gaW50bw0KCSMgICB0aGF0IGFyZWEgaW4gSEEuDQoJIw0KCSMgTVFUVF9MT0NBTElURU0s
ICAgbmFtZSwJCWxvY2FsIGl0ZW0sCWJyb2tlciwgdHlwZSwJCQkJdG9waWNwYXR0ZXJuLAkJICAg
IGRpc2NvdmVyYWJsZSAgICBbQXJlYTpdRnJpZW5kbHkgTmFtZQ0KCU1RVFRfTE9DQUxJVEVNLAkg
ICAgbXF0dF9zaGVkX2xpZ2h0LAlzaGVkX2xpZ2h0LAltcXR0XzEsIHN3aXRjaCwJCQkJaW5zdGVv
bi9zaGVkX2xpZ2h0LyssCSAgICAxLAkJICAgIFNoZWQ6U2hlZCBMaWdodA0KCU1RVFRfTE9DQUxJ
VEVNLAkgICAgbXF0dF9vdXRzaWRlX3RlbXAsCXRlbXAsCQltcXR0XzEsIHNlbnNvcjp0ZW1wZXJh
dHVyZTptZWFzdXJlbWVudDpDLGluc3Rlb24vb3V0c2lkZV90ZW1wLyssICAgIDEsCQkgICAgT3V0
c2lkZSBUZW1wZXJhdHVyZQ0KCSMNCg0KDQoJDQogICAgLm1odCBnZW5lcmF0ZWQgZmlsZToNCg0K
CSMgRGlzY292ZXJ5IGl0ZW1zIGFyZSBnZW5lcmF0ZWQgYnkgdGhlIHdyaXRlX2Rpc2NvdmVyZWRf
aXRlbXMgZnVuY3Rpb24uDQoJIyBZb3Ugd291bGQgbm90IG5vcm1hbGx5IGNvZGUgdGhlc2UgYnkg
aGFuZC4NCgkjDQoJIyBCdXQgaWYgeW91IHdhbnQgdG8gbW92ZSBhbiBpdGVtIHRvIHlvdXIgcmVn
dWxhciAubWh0IGZpbGUsIGNoYW5nZSB0aGUgZGlzY292ZXJ5X3RvcGljIHRvIGp1c3QNCgkjIHRo
ZSBkaXNjb3ZlcnlfdHlwZS4gIFRoYXQgdGhlbiB3aWxsIG92ZXJyaWRlIGFueSBkaXNjb3ZlcmVk
IGl0ZW0gd2l0aCB0aGUgc2FtZSB1bmlxdWVfaWQsDQoJIyBhbmQgd2lsbCBub3QgYmUgd3JpdHRl
biBvdXQgd2l0aCB3cml0ZV9kaXNjb3ZlcmVkX2l0ZW1zLg0KCSMNCgkjIFlvdSBjb3VsZCBjb2Rl
IG9uZSBvZiB0aGVzZSBpdGVtcyBieSBoYW5kLiBUaGlzIHdvdWxkIGFsc28gYWxsb3cgeW91IHRv
IGRlY2xhcmUgYSByZW1vdGUNCgkjIG1xdHQgaXRlbSB1c2luZyB0aGUgZnVsbCBkaXNjb3Zlcnkg
bWVzc2FnZSBmb3JtYXQuDQoJIw0KCSMgTVFUVF9ESVNDT1ZFUkVESVRFTSwJbmFtZSwJCQkgICAg
ZGlzY292ZXJ5X29iaiwJZGlzY292ZXJ5X3RvcGljL2Rpc2NvdmVyeV90eXBlLAkJCSAgICBkaXNj
b3ZlcnlfbWVzc2FnZQ0KCU1RVFRfRElTQ09WRVJFRElURU0sCW1xdHRfdGFzbW90YV9vdXRkb29y
X3BsdWcsICBtcXR0X2Rpc2NvdmVyeSwJIGhvbWVhc3Npc3RhbnQvc3dpdGNoLzg3NzQwN19STF8x
L2NvbmZpZywgICB7Im5hbWUiOiJUYXNtb3RhIE91dHNpZGUgUGx1ZyIsImNtZF90IjoifmNtbmQv
UE9XRVIiLCJzdGF0X3QiOiJ+dGVsZS9TVEFURSIsInZhbF90cGwiOiJ7e3ZhbHVlX2pzb24uUE9X
RVJ9fSIsInBsX29mZiI6Ik9GRiIsInBsX29uIjoiT04iLCJhdnR5X3QiOiJ+dGVsZS9MV1QiLCJw
bF9hdmFpbCI6Ik9ubGluZSIsInBsX25vdF9hdmFpbCI6Ik9mZmxpbmUiLCJ1bmlxX2lkIjoiODc3
NDA3X1JMXzEiLCJkZXZpY2UiOnsiaWRlbnRpZmllcnMiOlsiODc3NDA3Il0sImNvbm5lY3Rpb25z
IjpbWyJtYWMiLCJEODpGMTo1Qjo4Nzo3NDowNyJdXX0sIn4iOiJ0YXNtb3RhX291dGRvb3JfcGx1
Zy8ifQ0KDQoNCiAgICBhbmQgbWlzdGVyaG91c2UgdXNlciBjb2RlOg0KDQogICAgICAgICMNCglp
ZiggJGJvb3Ryb29tX3N3aXRjaC0+e3N0YXRlX25vd30gKSB7DQoJICAgICZwcmludF9sb2coICJC
b290cm9vbSBsaWdodCBzZXQgIiAuICRib290cm9vbV9zd2l0Y2gtPnN0YXRlICk7DQoJfQ0KDQoJ
Iw0KCWlmKCBuZXdfbWludXRlKDEwKSApIHsNCgkgICAgIyB0aGlzIHdpbGwgdHVybiBvbiB0aGUg
bGlnaHQgYnkgc2VuZGluZyBhbiBtcXR0IGNvbW1hbmQNCgkgICAgJGJvb3Ryb29tX3N3aXRjaC0+
c2V0KCAndG9nZ2xlJyApOw0KDQoJICAgICMgYXMgdGhlIGluc3Rlb24gbGlnaHQgaXMgdG9nZ2xl
ZCB3aXRoIHRoaXMgY29tbWFuZCwgYW4gbXF0dCBzdGF0ZSBtZXNzYWdlIHdpbGwgYmUgcHVibGlz
aGVkDQoJICAgICRzaGVkX2xpZ2h0LT5zZXQoICd0b2dnbGUnICk7DQoNCgl9DQoNCgkjIHRoaXMg
d2lsbCBwdWJsaXNoIG1xdHQgZGlzY292ZXJ5IG1lc3NhZ2VzIGZvciBhbGwgZGlzY292ZXJhYmxl
IGl0ZW1zDQoJJG1xdHRfMS0+cHVibGlzaF9kaXNjb3ZlcnlfZGF0YSgpOw0KDQoJIyB0aGlzIHdp
bGwgcHVibGlzaCBjdXJyZW50IHN0YXRlIG1lc3NhZ2VzIGZvciBhbGwgbG9jYWwgaXRlbXMNCgkk
bXF0dF8xLT5wdWJsaXNoX2N1cnJlbnRfc3RhdGVzKCk7DQoNCgkjIHRoaXMgd2lsbCB3cml0ZSBh
IC5taHQgZmlsZSB3aXRoIGRhdGEgZm9yIGFsbCBkaXNjb3ZlcmVkIGl0ZW1zDQoJJm1xdHQ6Ondy
aXRlX2Rpc2NvdmVyZWRfaXRlbXMoICIkY29uZmlnX3Bhcm1ze2RhdGFfZGlyfS9tcXR0X2Rpc2Nv
dmVyZWRfaXRlbXMubWh0IiApOw0KDQogICAgQ0xJIGdlbmVyYXRpb24gb2YgYSBjb21tYW5kIHRv
IHRoZSBDUl9UZW1wDQoNCglUT0RPOiAgZmluZCBhIGNvbW1hbmQgdGhhdCB3b3JrcyB0byB0dXJu
IG9uIHRoZSAkc2hlZF9saWdodA0KICAgICAgICBtb3NxdWl0dG9fcHViIC1kIC1oIHRlc3QubW9z
cXVpdHRvLm9yZyAtcSAwIC10IHRlc3QubW9zcXVpdHRvLm9yZy90ZXN0L3gxMC8xIC1tICJPZmYi
DQoNCk5vdGVzOg0KICAgIEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQA0KDQogICAgU3BlY2lh
bCBUaGFua3MgdG86DQogICAgTmVpbCBDaGVycnkgLS0gb3JpZ2luYWwgaW1wbGVtZW50ZXIgb2Yg
bWlzdGVyaG91c2UgTVFUVCBzdXBwb3J0DQogICAgR2lsZXMgR29kYXJkLUJyb3duIC0tIE1RVFQg
YW5kIFRhc21vdGEgc3VwcG9ydA0KDQogICAgVGhpcyBjb2RlIGhhcyBiZWVuIGRldmVsb3BlZCB1
c2luZyB0aGUgaW5zdGVvbi1tcXR0IHB1YmxpYyBwcm9qZWN0IGFuZA0KICAgIHVzaW5nIEhvbWVB
c3Npc3RhbnQgYW5kIHVzaW5nIFRhc21vdGEgZGV2aWNlcy4NCg0KICAgIEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQA0KDQogICAgPWhlYWQyIEI8Tm90ZXM6Pg0KDQogICAgSSBiZWxpZXZlIG1v
c3QgcGVvcGxlIHVzaW5nIE1RVFQgYXJlIHJ1bm5pbmcgdGhlaXIgb3duIG1xdHQNCiAgICBzZXJ2
ZXIuICBUeXBpY2FsbHkgbW9zcXVpdHRvLg0KDQogICAgSWYgeW91IGFyZSB1c2luZyBhIGhpZ2hl
ciB0cmFmZmljIG1vc3F1aXR0byBzZXJ2ZXIsIHRoZW4geW91DQogICAgd2lsbCB3YW50IHRvIHF1
YWxpZnkgdG9waWNzIG1vcmUuICBUaGF0IHdvdWxkIHJlcXVpcmUgY29uZmlndXJpbmcNCiAgICB5
b3VyIFRhc21vdGEgZGV2aWNlcyB0byBoYXZlIGEgcXVhbGlmaWVkIHByZWZpeC4NCg0KICAgIERp
c2NvdmVyeToNCiAgICBGb3IgZGlzY292ZXJ5LCB0aGVyZSBhcmUgYSBsb3Qgb2YgZGV2aWNlIHR5
cGVzIG91dCB0aGVyZSBhbmQgYSBsb3Qgb2YgZGlmZmVyZW50DQogICAgZGlzY292ZXJ5IG1lc3Nh
Z2UgZm9ybWF0cy4gIEkgaGF2ZSBoYW5kbGVkIGNvbW1vbiBkZXZpY2UgdHlwZXMgaW4gdGhpcyBj
b2RlLA0KICAgIGJ1dCBpdCBjYW4gYmUgZXh0ZW5kZWQgdG8gaGFuZGxlIG1hbnkgbW9yZS4gSSBo
YXZlIG9ubHkgYmVlbiBhYmxlIHRvIGltcGxlbWVudA0KICAgIFRhc21vdGEgc3dpdGNoZXMgYW5k
IGEgcm91Z2ggaW1wbGVtZW50YXRpb24gb2YgVGFzbW90YSBEaW1tZXJzIGJhc2VkIG9uIHphcHBp
bmcNCiAgICBhIGRldmljZSBJIGhhdmUgdG8gdGhpbmsgdGhhdCBpdCBpcyBhIGRpbW1lci4NCg0K
ICAgID1oZWFkMiBJTkhFUklUUw0KDQogICAgQjxOT05FPg0KDQogICAgPWhlYWQyIE1FVEhPRFMN
Cg0KICAgID1vdmVyDQoNCiAgICA9aXRlbSBCPFVuRG9jPg0KDQogICAgPWl0ZW0gQjxUb0RvPg0K
DQogICAgQFRPRE86DQogICAgICAgIDEuIEFkZCBtb3JlIFRhc21vdGEgdHlwZXMNCg0KPWN1dA0K
DQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpwYWNrYWdlIG1xdHRfQmFzZUl0ZW07DQoNCnVz
ZSBzdHJpY3Q7DQoNCnVzZSBKU09OIHF3KCBkZWNvZGVfanNvbiBlbmNvZGVfanNvbiApOyAgICAg
Iw0KdXNlIERhdGE6OkR1bXBlcjsNCg0KQG1xdHRfQmFzZUl0ZW06OklTQSA9ICggJ0dlbmVyaWNf
SXRlbScgKTsNCg0KDQoNCj1pdGVtIEM8bmV3KG1xdHRfaW50ZXJmYWNlLCBuYW1lLCB0eXBlLCBz
dGF0ZV90b3BpYywgY29tbWFuZF90b3BpYywgbGlzdGVuX3RvcGljLCBkaXNjb3ZlcmFibGUsIGZy
aWVuZGx5X25hbWUgKT4NCg0KICAgIENyZWF0ZXMgYW4gTVFUVCBCYXNlIEl0ZW0uDQoNCiAgICBO
b3RlOiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHNldHVwIHRoZSB7ZGlzY19pbmZvfSBzdHJ1Y3R1
cmUuICBUaGF0IGlzIGxlZnQgdXAgdG8gdGhlIGNoaWxkIGNsYXNzZXMuDQoNCj1jdXQNCg0Kc3Vi
IG5ldyB7ICAgIyMjIG1xdHRfQmFzZUl0ZW0NCiAgICBteSAoICRjbGFzcywgJGludGVyZmFjZSwg
JG1xdHRfbmFtZSwgJHR5cGUsICRsaXN0ZW50b3BpY3MsICRkaXNjb3ZlcmFibGUgKSA9IEBfOw0K
DQogICAgbXkgJHNlbGYgPSBuZXcgR2VuZXJpY19JdGVtKCk7DQoNCiAgICBibGVzcyAkc2VsZiwg
JGNsYXNzOw0KDQogICAgJHNlbGYtPntpbnRlcmZhY2V9CQkgICAgPSAkaW50ZXJmYWNlOw0KICAg
ICRzZWxmLT57bXF0dF9uYW1lfQkJICAgID0gJG1xdHRfbmFtZTsNCiAgICAkc2VsZi0+e21xdHRf
dHlwZX0JCSAgICA9ICR0eXBlOw0KICAgICRzZWxmLT57ZGlzY292ZXJhYmxlfQkgICAgPSAkZGlz
Y292ZXJhYmxlOw0KICAgICRzZWxmLT57dG9waWN9CQkgICAgPSAkbGlzdGVudG9waWNzOw0KICAg
ICRzZWxmLT57ZGlzY190eXBlfQkJICAgID0gJHR5cGU7DQoNCiMgICAgIGlmKCAhZ3JlcCggL14k
dHlwZSQvLCAoJ2xpZ2h0JywgJ3N3aXRjaCcsICdiaW5hcnlfc2Vuc29yJywgJ3NlbnNvcicsICdz
Y2VuZScsICdzZWxlY3QnKSApICkgew0KIyAJJHNlbGYtPmVycm9yKCAiVU5LTk9XTiBERVZJQ0Ug
VFlQRTogJyRzZWxmLT57bXF0dF9uYW1lfSc6JHNlbGYtPnttcXR0X3R5cGV9IiApOw0KIyAJcmV0
dXJuOw0KIyAgICAgfQ0KDQogICAgaWYoICRzZWxmLT57bXF0dF90eXBlfSBlcSAnc2NlbmVfc3dp
dGNoJyApIHsNCgkkc2VsZi0+e2Rpc2NfdHlwZX0gPSAnc3dpdGNoJzsNCiAgICB9DQoNCiAgICBp
ZiggJHNlbGYtPntpbnRlcmZhY2V9ICkgew0KCSRzZWxmLT57aW50ZXJmYWNlfS0+YWRkKCAkc2Vs
ZiApOw0KICAgIH0gZWxzZSB7DQoJZm9yZWFjaCAkaW50ZXJmYWNlICggJm1xdHQ6OmdldF9pbnRl
cmZhY2VfbGlzdCgpICkgew0KCSAgICAkaW50ZXJmYWNlLT5hZGQoICRzZWxmICk7DQoJfQ0KICAg
IH0NCg0KICAgIHJldHVybiAkc2VsZjsNCn0NCg0Kc3ViIGxvZyB7DQogICAgbXkoICRzZWxmLCAk
c3RyICkgPSBAXzsNCiAgICAkc2VsZi0+e2ludGVyZmFjZX0tPmxvZyggJHN0ciApOw0KfQ0KDQpz
dWIgZXJyb3Igew0KICAgIG15KCAkc2VsZiwgJHN0ciApID0gQF87DQogICAgJHNlbGYtPntpbnRl
cmZhY2V9LT5lcnJvciggJHN0ciApOw0KfQ0KDQpzdWIgZGVidWcgew0KICAgIG15KCAkc2VsZiwg
JGxldmVsLCAkc3RyICkgPSBAXzsNCiAgICBpZiggJHNlbGYtPmRlYnVnbGV2ZWwoICRsZXZlbCwg
J21xdHQnICkgKSB7DQoJJHNlbGYtPntpbnRlcmZhY2V9LT5sb2coICRzdHIsICJbTVFUVCBEJGxl
dmVsXTogIiApOw0KICAgIH0NCn0NCg0Kc3ViIGR1bXAgew0KICAgIG15KCAkc2VsZiwgJG9iaiwg
JG1heGRlcHRoICkgPSBAXzsNCiAgICAkb2JqID0gJG9iaiB8fCAkc2VsZjsNCiAgICAkbWF4ZGVw
dGggPSAkbWF4ZGVwdGggfHwgMjsNCiAgICBteSAkZHVtcGVyID0gRGF0YTo6RHVtcGVyLT5uZXco
IFskb2JqXSApOw0KICAgICRkdW1wZXItPk1heGRlcHRoKCAkbWF4ZGVwdGggKTsNCiAgICByZXR1
cm4gJGR1bXBlci0+RHVtcCgpOw0KfQ0KDQoNCnN1YiBzZXRfZGlzY292ZXJ5X25hbWVzIHsNCiAg
ICBteSAoJHNlbGYsICRmdWxsX25hbWUsICRtcXR0X25hbWUpID0gQF87DQogICAgbXkgJGFyZWFf
bmFtZTsNCiAgICBteSAkZGV2aWNlX25hbWU7DQogICAgbXkgJGZyaWVuZGx5X25hbWU7DQogICAg
bXkgJGRldmljZV9pZDsNCg0KICAgIGlmKCAhJGZ1bGxfbmFtZSApIHsNCgkkZnVsbF9uYW1lID0g
JG1xdHRfbmFtZTsNCgkkZnVsbF9uYW1lID1+IHMvXy8gL2c7DQogICAgfQ0KDQogICAgbXkgKCRw
YXJ0MSwgJHBhcnQyLCAkcGFydDMpID0gc3BsaXQoLzovLCRmdWxsX25hbWUpOw0KICAgIGlmKCBk
ZWZpbmVkKCAkcGFydDMgKSApIHsNCgkkZnJpZW5kbHlfbmFtZSA9ICRwYXJ0MzsNCgkkYXJlYV9u
YW1lID0gJHBhcnQxOw0KCSRkZXZpY2VfbmFtZSA9ICRwYXJ0MjsNCgkkZGV2aWNlX2lkID0gJG1x
dHRfbmFtZTsNCiAgICB9IGVsc2lmKCBkZWZpbmVkKCAkcGFydDIgKSApIHsNCglpZiggJHNlbGYt
PntpbnRlcmZhY2V9LT57dXNlX2hhX2RldmljZV9kaXNjfSApIHsNCgkgICAgJGZyaWVuZGx5X25h
bWUgPSAnJzsNCgkgICAgJGRldmljZV9uYW1lID0gIiRwYXJ0MiI7DQoJICAgICRkZXZpY2VfaWQg
PSAkbXF0dF9uYW1lOw0KCSAgICAkYXJlYV9uYW1lID0gJHBhcnQxOw0KCX0gZWxzZSB7DQoJICAg
ICRmcmllbmRseV9uYW1lID0gJHBhcnQyOw0KCSAgICAkZGV2aWNlX25hbWUgPSAkcGFydDE7DQoJ
ICAgICRkZXZpY2VfaWQgPSAkcGFydDE7DQoJICAgICRhcmVhX25hbWUgPSAkcGFydDE7DQoJfQ0K
ICAgIH0gZWxzZSB7DQoJaWYoICRzZWxmLT57aW50ZXJmYWNlfS0+e3VzZV9oYV9kZXZpY2VfZGlz
Y30gKSB7DQoJICAgICRmcmllbmRseV9uYW1lID0gJyc7DQoJICAgICRhcmVhX25hbWUgPSAnTUgg
TVFUVCAnIC4gJHNlbGYtPntub2RlX2lkfTsNCgkgICAgJGRldmljZV9uYW1lID0gJHBhcnQxOw0K
CSAgICAkZGV2aWNlX2lkID0gJG1xdHRfbmFtZTsNCgl9IGVsc2Ugew0KCSAgICAkZnJpZW5kbHlf
bmFtZSA9ICRwYXJ0MTsNCgl9DQogICAgfQ0KDQogICAgaWYoICFyZWYgJHNlbGYtPntkaXNjfSAp
IHsNCgkkc2VsZi0+e2Rpc2N9ID0ge307DQogICAgfQ0KICAgIGlmKCAkc2VsZi0+e2ludGVyZmFj
ZX0tPnt1c2VfaGFfZGV2aWNlX2Rpc2N9ICkgew0KCW15ICRhcmVhX2lkID0gbGMoJGFyZWFfbmFt
ZSk7DQoJJGFyZWFfaWQgPX4gcy9fLyAvZzsNCgkkc2VsZi0+e2Rpc2N9LT57ZGV2aWNlfSA9IHt9
Ow0KCSRzZWxmLT57ZGlzY30tPntkZXZpY2V9LT57bmFtZX0gPSAkZGV2aWNlX25hbWU7DQoJJHNl
bGYtPntkaXNjfS0+e2RldmljZX0tPntpZGVudGlmaWVyc30gPSAkZGV2aWNlX2lkOw0KCSRzZWxm
LT57ZGlzY30tPntkZXZpY2V9LT57c3VnZ2VzdGVkX2FyZWF9ID0gJGFyZWFfbmFtZSBpZiAkYXJl
YV9uYW1lOw0KCSMgJHNlbGYtPntkaXNjfS0+e2RldmljZX0tPnthcmVhX2lkfSA9ICRhcmVhX2lk
IGlmICRhcmVhX2lkOw0KCSRzZWxmLT57ZGlzY30tPntvcmlnaW59ID0ge307DQoJJHNlbGYtPntk
aXNjfS0+e29yaWdpbn0tPntuYW1lfSA9ICJNaXN0ZXJIb3VzZSI7DQoJJHNlbGYtPntkaXNjfS0+
e29yaWdpbn0tPntzd192ZXJzaW9ufSA9ICI2LjAiOw0KCSRzZWxmLT57ZGlzY30tPntvcmlnaW59
LT57c3VwcG9ydF91cmx9ID0gJ2h0dHBzOi8vZ2l0aHViLmNvbS9ob2xsaWUvbWlzdGVyaG91c2Un
Ow0KCSRzZWxmLT57ZGlzY30tPntjb21wb25lbnRzfSA9IHt9Ow0KCSRzZWxmLT57ZGlzY30tPntj
b21wb25lbnRzfS0+eyRtcXR0X25hbWV9ID0ge307DQoJJHNlbGYtPntkaXNjX2luZm99ID0gJHNl
bGYtPntkaXNjfS0+e2NvbXBvbmVudHN9LT57JG1xdHRfbmFtZX07DQoJJHNlbGYtPntkaXNjX2lu
Zm99LT57cGxhdGZvcm19ID0gJHNlbGYtPntkaXNjX3R5cGV9Ow0KICAgIH0gZWxzZSB7DQoJaWYo
ICRkZXZpY2VfbmFtZSApIHsNCgkgICAgJHNlbGYtPntkaXNjfS0+e2RldmljZX0gPSB7fTsNCgkg
ICAgJHNlbGYtPntkaXNjfS0+e2RldmljZX0tPntuYW1lfSA9ICRkZXZpY2VfbmFtZTsNCgkgICAg
JHNlbGYtPntkaXNjfS0+e2RldmljZX0tPntpZGVudGlmaWVyc30gPSBbJGRldmljZV9pZF07DQoJ
ICAgICRzZWxmLT57ZGlzY30tPntkZXZpY2V9LT57c3VnZ2VzdGVkX2FyZWF9ID0gJGFyZWFfbmFt
ZSBpZiAkYXJlYV9uYW1lOw0KCX0NCgkkc2VsZi0+e2Rpc2NfaW5mb30gPSAkc2VsZi0+e2Rpc2N9
Ow0KICAgIH0NCiAgICAkc2VsZi0+e2Rpc2NfaW5mb30tPntuYW1lfSA9ICRmcmllbmRseV9uYW1l
Ow0KICAgICRzZWxmLT57ZGlzY19pbmZvfS0+e29iamVjdF9pZH0gPSAkbXF0dF9uYW1lOw0KICAg
ICRzZWxmLT5sb2coICInJGZ1bGxfbmFtZScgdHVybmVkIGludG8gKGZuYW1lOickZnJpZW5kbHlf
bmFtZScsIGRldm5hbWU6JyRkZXZpY2VfbmFtZScsIGFyZWFuYW1lOickYXJlYV9uYW1lJykiICk7
DQp9DQoNCj1pdGVtIEM8c2V0X29iamVjdF9kZWJ1ZyggbGV2ZWwgKT4NCg0KVHVybnMgb24gZGVi
dWdnaW5nIGZvciB0aGUgb2JqZWN0LCBzZXRzIGRlYnVnIGxldmVsLg0KDQo9Y3V0DQoNCnN1YiBz
ZXRfb2JqZWN0X2RlYnVnIHsNCiAgICBteSggJHNlbGYsICRsZXZlbCApID0gQF87DQogICAgbXkg
JG9iam5hbWUgPSBsYyAkc2VsZi0+Z2V0X29iamVjdF9uYW1lKCk7DQogICAgJGxldmVsID0gMSBp
ZiAhZGVmaW5lZCAkbGV2ZWw7DQogICAgJG1haW46OkRlYnVneyRvYmpuYW1lfSA9ICRsZXZlbDsN
Cn0NCg0KPWl0ZW0gQzxpc19kaW1tYWJsZSgpPg0KDQpSZXR1cm5zIHdoZXRoZXIgb2JqZWN0IGlz
IGRpbW1hYmxlLg0KDQo9Y3V0DQoNCnN1YiBpc19kaW1tYWJsZSB7DQogICAgbXkgKCAkc2VsZiAp
ID0gQF87DQogICAgaWYoICRzZWxmLT57bXF0dF90eXBlfSBlcSAnbGlnaHQnICkgew0KCXJldHVy
biAxOw0KICAgIH0NCiAgICByZXR1cm4gMDsNCn0NCg0KPWl0ZW0gQzxsZXZlbChwX2xldmVsKT4N
Cg0KU3RvcmVzIGFuZCByZXR1cm5zIHRoZSBvYmplY3RzIGN1cnJlbnQgb25fbGV2ZWwgYXMgYSBw
ZXJjZW50YWdlLiBJZiBwX2xldmVsDQppcyBPTiBhbmQgdGhlIGRldmljZSBoYXMgYSBkZWZpbmVk
IGxvY2FsX29ubGV2ZWwsIHRoZSBsb2NhbF9vbmxldmVsIGlzIHN0b3JlZA0KYXMgdGhlIG51bWVy
aWMgbGV2ZWwgaW4gbWVtb3J5Lg0KDQpSZXR1cm5zIFswLTEwMF0NCg0KPWN1dA0KDQpzdWIgbGV2
ZWwgew0KICAgIG15ICggJHNlbGYsICRwX2xldmVsICkgPSBAXzsNCiAgICAjDQogICAgIyBUaGlz
IGlzIHJlYWxseSBvbmx5IHZhbGlkIGZvciBsaWdodCB0eXBlLCBidXQgaXQgZG9lc24ndCBodXJ0
IGZvciBvdGhlciB0eXBlcw0KICAgICMNCiAgICBpZiAoIGRlZmluZWQgJHBfbGV2ZWwgKSB7DQog
ICAgICAgIG15ICRsZXZlbCA9IHVuZGVmOw0KICAgICAgICBpZiAoICRwX2xldmVsIGVxICdvbicg
KSB7DQoNCiAgICAgICAgICAgICMgc2V0IHRoZSBsZXZlbCBiYXNlZCBvbiBhbnkgbG9jYWxseSBk
ZWZpbmVkIG9uIGxldmVsDQogICAgICAgICAgICAkbGV2ZWwgPSAkc2VsZi0+bG9jYWxfb25sZXZl
bCBpZiAkc2VsZi0+Y2FuKCdsb2NhbF9vbmxldmVsJyk7DQoNCiAgICAgICAgICAgICMgc2V0IHRv
IDEwMCBpZiBhIGxvY2FsIG9uIGxldmVsIGlzIG5vdCBkZWZpbmVkDQogICAgICAgICAgICAkbGV2
ZWwgPSAxMDAgdW5sZXNzIGRlZmluZWQoJGxldmVsKTsNCiAgICAgICAgfQ0KICAgICAgICBlbHNp
ZiAoICRwX2xldmVsIGVxICdvZmYnICkgew0KICAgICAgICAgICAgJGxldmVsID0gMDsNCiAgICAg
ICAgfQ0KICAgICAgICBlbHNpZiAoICRwX2xldmVsID1+IC9eKFsxXT9bMC05XT9bMC05XSklPyQv
ICkgew0KICAgICAgICAgICAgaWYgKCAkMSA8IDEgKSB7DQogICAgICAgICAgICAgICAgJGxldmVs
ID0gMDsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVsc2Ugew0KICAgICAgICAgICAgICAg
ICRsZXZlbCA9ICQxOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgICQkc2VsZnts
ZXZlbH0gPSAkbGV2ZWwgaWYgZGVmaW5lZCAkbGV2ZWw7DQogICAgfQ0KICAgIHJldHVybiAkJHNl
bGZ7bGV2ZWx9Ow0KDQp9DQoNCg0Kc3ViIHRyYW5zbWl0X21xdHRfbWVzc2FnZSB7DQogICAgbXko
ICRzZWxmLCAkdG9waWMsICRtc2csICRyZXRhaW4gKSA9IEBfOw0KDQogICAgaWYoICEkdG9waWMg
KSB7DQoJJHNlbGYtPmVycm9yKCAkc2VsZi0+Z2V0X29iamVjdF9uYW1lIC4gIiBhdHRlbXB0aW5n
IHRvIHB1Ymxpc2ggZW1wdHkgdG9waWMgLS0gaWdub3JpbmciICk7DQoJcmV0dXJuOw0KICAgIH0N
CiAgICBpZiggJHNlbGYtPntpbnRlcmZhY2V9ICkgew0KCSRzZWxmLT57aW50ZXJmYWNlfS0+cHVi
bGlzaF9tcXR0X21lc3NhZ2UoICR0b3BpYywgJG1zZywgJHJldGFpbiApOw0KICAgIH0gZWxzZSB7
DQoJJm1xdHQ6OmJyb2FkY2FzdF9tcXR0X21lc3NhZ2UoICR0b3BpYywgJG1zZywgJHJldGFpbiAp
Ow0KICAgIH0NCn0NCg0KPWl0ZW0gQzxtYWtlX3RvcGljKCAkdG9waWNwYXR0ZXJuLCBAcGFybXMg
KT4NCg0KICAgIE1ha2UgYSB0b3BpYyBiYXNlZCBvbiBhIHRvcGljIHBhdHRlcm4gYW5kICcrJyB3
aWxkY2FyZCByZXBsYWNlbWVudCB2YWx1ZXMuDQogICAgRXh0cmEgcGFyYW1ldGVycyBhcmUgYXBw
ZW5kZWQgdG8gdGhlIGVuZC4NCg0KICAgIEV4Og0KDQogICAgICAgIG1ha2VfdG9waWMoICcvbWgv
c2hvcC8rLysnLCAnY29tbWFuZCcsICdwb3dlcicpCSMgcmV0dXJucyAnL21oL3Nob3AvY29tbWFu
ZC9wb3dlcicNCiAgICAgICAgbWFrZV90b3BpYyggJy9hYS8rL2JiLysvY2MnLCAnMScsJzInLCcz
JywnNC81JykJIyByZXR1cm5zICdhYS8xL2JiLzIvY2MvMy80LzUnDQoNCg0KPWN1dA0KDQpzdWIg
bWFrZV90b3BpYyB7DQogICAgbXkgKCAkc2VsZiwgJHRvcGljcGF0dGVybiwgQHBhcm1zICkgPSBA
XzsNCiAgICBteSAkQ2FsbGVyID0gKGNhbGxlcigpKVszXTsNCg0KICAgIG15IChAdG9waWNfcGFy
dHMpID0gc3BsaXQoICIvIiwgJHRvcGljcGF0dGVybiApOw0KICAgIG15ICR3aWxkY2FyZF9jb3Vu
dCA9IDA7DQogICAgZm9yKCBteSAkaT0wOyAkaSA8PSAkI3RvcGljX3BhcnRzOyAkaSArPSAxICkg
ew0KICAgICAgICBsYXN0IGlmICgkd2lsZGNhcmRfY291bnQgPiAkI3Bhcm1zKTsJIyBvdXQgb2Yg
cGFybXMgLSBtdXN0IGJlIGRvbmUuDQoJbXkgJHBhcnQgPSAkdG9waWNfcGFydHNbJGldOw0KCWlm
KCAkcGFydCBlcSAnKycgKSB7DQoJICAgICR0b3BpY19wYXJ0c1skaV0gPSAkcGFybXNbJHdpbGRj
YXJkX2NvdW50XTsNCgkgICAgJHdpbGRjYXJkX2NvdW50ICs9IDE7DQoJfQ0KICAgIH0NCg0KICAg
ICMgQWRkIGFueSBleHRyYSBwYXJtcyB0byB0aGUgZW5kLiBUaGlzIGFsbG93cyBmb3IgZmxleGli
aWxpdHkgaW4gLm1odCBmaWxlcywgZS5nLjoNCiAgICAjIGEgdG9waWMgcHJlZml4IG9mICcvaGEv
bWgvKy8rJyBpcyB0aGUgc2FtZSBhcyAnL2hhL21oJy4gQWxzbyBhbGxvd3Mgc3ViLXRvcGljcw0K
ICAgICMgaW4gdGhlIHNlY29uZCBmb3JtYXQgdG8gYmUgc3BlY2lmaWVkIGFzICdjb21tYW5kL3Bv
d2VyJyBpbnN0ZWFkIG9mICdjb21tYW5kOnBvd2VyJywNCiAgICAjIHdoaWNoIGlzIG1vcmUgaW50
dWl0aXZlIGZvciBzb21lLg0KICAgIHB1c2ggQHRvcGljX3BhcnRzLCBAcGFybXNbJHdpbGRjYXJk
X2NvdW50Li4kI3Bhcm1zXQ0KICAgICAgICBpZiAoJHdpbGRjYXJkX2NvdW50IDw9ICQjcGFybXMp
Ow0KDQogICAgbXkgJE5ld1RvcGljID0gam9pbiggJy8nLCBAdG9waWNfcGFydHMgKTsNCg0KICAg
ICMgSGVscCBkaWFnbm9zZSBtaXMtY29uc3RydWN0ZWQgdG9waWNzLiBPdGhlcndpc2UsIHRoZSBz
ZXJ2ZXIganVzdCBoYW5ncyB1cCBvbiB1cw0KICAgICMgYW5kIHdlIGRvbid0IGtub3cgd2h5Lg0K
ICAgIGlmICgkTmV3VG9waWMgPX4gL1wrLykgew0KICAgICAgICAmbWFpbjo6cHJpbnRfbG9nKAkJ
IyBEb24ndCB3YW50IHRvIHVzZSBwcmludF9sb2csIGJ1dCBubyAkc2VsZiBhdmFpbGFibGUuDQog
ICAgICAgICAgICAgICAiW01RVFRdIEVycm9yOiBtYWtlX3RvcGljIGNhbGxlZCBieSAkQ2FsbGVy
ICB3aXRoIGluc3VmZmljaWVudCBwYXJtcy4gIg0KICAgICAgICAgICAgIC4gIlBhdHRlcm49JHRv
cGljcGF0dGVybiwgcGFybXM9Ig0KICAgICAgICAgICAgIC4gam9pbignLCAnLEBwYXJtcykNCiAg
ICAgICAgICAgICAuICJcbiINCiAgICAgICAgKTsNCiAgICAgICAgJE5ld1RvcGljID1+IHMvXCsv
X1VOS05fL2c7CSMgVGhpcyBpcyB0aGUgd3JvbmcgdG9waWMgbm93LCBidXQgdGhlIE1RVFQgc2Vy
dmVyIHdvbid0IGhhbmcgdXAgYXQgbGVhc3QuDQogICAgfQ0KDQogICAgcmV0dXJuICROZXdUb3Bp
YzsNCn0NCg0Kc3ViIHByb2Nlc3NfdGVtcGxhdGUgew0KICAgIG15KCAkc2VsZiwgJHRlbXBsYXRl
LCAkdmFsdWVfanNvbiwgJHZhbHVlICkgPSBAXzsNCg0KICAgIGlmKCAhJHRlbXBsYXRlICkgew0K
CXJldHVybiAkdmFsdWU7DQogICAgfQ0KDQogICAgIyBUaGlzIGlzIGFuIGF0dGVtcHQgdG8gY29u
dmVydCBzaW1wbGUgSmluamEgdGVtcGxhdGVzIHRvIHBlcmwgY29kZQ0KDQogICAgIyByZW1vdmUg
bGVhZGluZyB7eyBhbmQgdHJhaWxpbmcgfX0NCiAgICAkdGVtcGxhdGUgPX4gcy9eXHMqXHtccypc
e1xzKi8vOw0KICAgICR0ZW1wbGF0ZSA9fiBzL1xzKlx9XHMqXH1ccyokLy87DQoNCiAgICAjIGNv
bnZlcnQgdmFsdWVfanNvbi48ZWxlbWVudD4gdG8gJHZhbHVlX2pzb24tPns8ZWxlbWVudD59DQog
ICAgZm9yKCBteSAkaT0xOyAkaTw0OyArKyRpICkgew0KCSR0ZW1wbGF0ZSA9fiBzL3ZhbHVlX2pz
b25cLihbYS16QS1aXC1fXSspL1wkdmFsdWVfanNvbi0+XHtcMVx9LzsNCiAgICB9DQoNCiAgICAj
IGNvbnZlcnQgdmFsdWVfanNvblsnPGVsZW1lbnQxPiddWyc8ZWxlbWVudDI+XSB0byAkdmFsdWVf
anNvbi0+ezxlbGVtZW50MT59LT57PGVsZW1lbnQyPn0NCiAgICBmb3IoIG15ICRpPTE7ICRpPDEw
OyArKyRpICkgew0KCSR0ZW1wbGF0ZSA9fiBzL1xbXHMqXCc/KFthLXpBLVpcLV9dKylcJz9ccypc
XS8tPlx7XDFcfS87DQogICAgfQ0KDQogICAgaWYoICR0ZW1wbGF0ZSA9fiBtL15cJHZhbHVlX2pz
b24tPlx7W15cfV0rXH0kLyApIHsNCgkkdGVtcGxhdGUgPSAiXCR2YWx1ZSA9ICR0ZW1wbGF0ZSI7
DQoJIyAkdGVtcGxhdGUgPX4gcy8gLy9nOw0KCSMgJHRlbXBsYXRlID1+IHMvXlx7XHt2YWx1ZV9q
c29uXC4oW2EtekEtWlwtX10qKVx9XH0vXCR2YWx1ZV9qc29uLT5ce1wxXH0vOw0KCSMgJHRlbXBs
YXRlID1+IHMvXlx7XHt2YWx1ZV9qc29uXFtcXD9cJz8oW2EtekEtWlwtX10qKVxcP1wnP1xdXH1c
fS9cJHZhbHVlX2pzb24tPlx7XDFcfS87DQoJIyBpZiggJHRlbXBsYXRlICF+IC9eXCQvICkgew0K
CSAgICAjICRzZWxmLT5kZWJ1ZyggMSwgInVuYWJsZSB0byBwcm9jZXNzIHRlbXBsYXRlICR0ZW1w
bGF0ZSIgKTsNCgkgICAgIyByZXR1cm47DQoJIyB9DQogICAgfSBlbHNlIHsNCglteSAoJHRydWVf
dmFsLCAkZXhwciwgJGZhbHNlX3ZhbCkgPSAkdGVtcGxhdGUgPX4gbS9eW1x7XHNdKihbXlxzXSsp
XHMraWZccysoLiopZWxzZVxzKyhbXlxzXSspW1xzXH1dKiQvOw0KCWlmKCAkdHJ1ZV92YWwgKSB7
DQoJICAgICR0ZW1wbGF0ZSA9ICJcJHZhbHVlID0gJGV4cHIgPyAkdHJ1ZV92YWwgOiAkZmFsc2Vf
dmFsIjsNCgl9IGVsc2Ugew0KCSAgICAkc2VsZi0+ZGVidWcoIDEsICJ1bmFibGUgdG8gcHJvY2Vz
cyB0ZW1wbGF0ZSAkdGVtcGxhdGUiICk7DQoJICAgIHJldHVybjsNCgl9DQogICAgfQ0KICAgICRz
ZWxmLT5kZWJ1ZyggMiwgImZpc2hpbmcgdGVtcGxhdGUgdmFsdWUgb3V0IG9mIGpzb24gd2l0aCAn
JHRlbXBsYXRlJyIgKTsNCiAgICBldmFsICIkdGVtcGxhdGUiOw0KICAgIGlmKCAkQCAgfHwgISR2
YWx1ZV9qc29uICkgew0KCSRzZWxmLT5lcnJvciggIkVycm9yICckQCcgYXBwbHlpbmcgdGVtcGxh
dGUgJyR0ZW1wbGF0ZScgdG8gcGF5bG9hZDonJHZhbHVlJyIgKTsNCiAgICB9DQogICAgcmV0dXJu
ICR2YWx1ZTsNCn0NCg0Kc3ViIGRlY29kZV9tcXR0X3BheWxvYWQgew0KICAgIG15KCAkc2VsZiwg
JHRvcGljLCAkcGF5bG9hZCwgJHJldGFpbmVkICkgPSBAXzsNCiAgICBteSAkbXNnOw0KICAgIG15
ICR1bnNldF92YWx1ZSA9ICd1bnNldF92YWx1ZV85ODc2NTQxMjMnOw0KICAgIG15ICR2YWx1ZV9q
c29uOw0KICAgIG15ICR2YWx1ZTsNCiAgICBteSAkYnJpZ2h0bmVzczsNCiAgICBteSAkdmFsdWVf
b247DQogICAgbXkgJHZhbHVlX29mZjsNCg0KICAgICRtc2cgPSAkdW5zZXRfdmFsdWU7DQogICAg
aWYoICR0b3BpYyBlcSAkc2VsZi0+e2Rpc2NfaW5mb30tPntzdGF0ZV90b3BpY30gKSB7DQoJJHZh
bHVlX29uID0gJHNlbGYtPntkaXNjX2luZm99LT57c3RhdGVfb259Ow0KCSR2YWx1ZV9vZmYgPSAk
c2VsZi0+e2Rpc2NfaW5mb30tPntzdGF0ZV9vZmZ9Ow0KICAgIH0NCiAgICAkdmFsdWVfb24gPSAk
c2VsZi0+e2Rpc2NfaW5mb30tPntwYXlsb2FkX29ufSBpZiAhZGVmaW5lZCAkdmFsdWVfb247DQog
ICAgJHZhbHVlX29mZiA9ICRzZWxmLT57ZGlzY19pbmZvfS0+e3BheWxvYWRfb2ZmfSBpZiAhZGVm
aW5lZCAkdmFsdWVfb2ZmOw0KICAgICR2YWx1ZV9vbiA9ICdPTicgaWYgIWRlZmluZWQgJHZhbHVl
X29uOw0KICAgICR2YWx1ZV9vZmYgPSAnT0ZGJyBpZiAhZGVmaW5lZCAkdmFsdWVfb2ZmOw0KDQog
ICAgaWYoICRwYXlsb2FkID1+IC9eXHMqey8gKSB7DQoJZXZhbHsgJHZhbHVlX2pzb24gPSBkZWNv
ZGVfanNvbiggJHBheWxvYWQgKSB9Ow0KCWlmKCAkQCAgfHwgISR2YWx1ZV9qc29uICkgew0KCSAg
ICAkc2VsZi0+ZXJyb3IoICJFcnJvciAnJEAnIGRlY29kaW5nIEpTT046ICRwYXlsb2FkIiApOw0K
CSAgICByZXR1cm47DQoJfQ0KCSRzZWxmLT5kZWJ1ZyggMywgImpzb24gcGF5bG9hZCBkZWNvZGVk
IHRvOiBcbiIgLiBEdW1wZXIoICR2YWx1ZV9qc29uICkgKTsNCiAgICB9DQoNCiAgICAjIyMjDQog
ICAgIyBOb3RlIHRoYXQgdGhlIHN0YXRlX3RvcGljIGFuZCB0aGUgYnJpZ2h0bmVzc19zdGF0ZV90
b3BpYyBjYW4gYmUgdGhlIHNhbWUsIGFuZCBsaWtlbHkgYXJlIQ0KICAgICMjIyMNCg0KICAgIGlm
KCAkdG9waWMgZXEgJHNlbGYtPntkaXNjX2luZm99LT57c3RhdGVfdG9waWN9ICkgew0KCSR2YWx1
ZSA9ICRzZWxmLT5wcm9jZXNzX3RlbXBsYXRlKCAkc2VsZi0+e2Rpc2NfaW5mb30tPntzdGF0ZV92
YWx1ZV90ZW1wbGF0ZX0gfHwgJHNlbGYtPntkaXNjX2luZm99LT57dmFsdWVfdGVtcGxhdGV9LCAk
dmFsdWVfanNvbiwgJHBheWxvYWQgKTsNCiAgICB9DQogICAgaWYoICR0b3BpYyBlcSAkc2VsZi0+
e2Rpc2NfaW5mb30tPnticmlnaHRuZXNzX3N0YXRlX3RvcGljfSApIHsNCgkkYnJpZ2h0bmVzcyA9
ICRzZWxmLT5wcm9jZXNzX3RlbXBsYXRlKCAkc2VsZi0+e2Rpc2NfaW5mb30tPnticmlnaHRuZXNz
X3ZhbHVlX3RlbXBsYXRlfSwgJHZhbHVlX2pzb24sICRwYXlsb2FkICk7DQoJbXkgJGJyaWdodG5l
c3Nfc2NhbGUgPSAkc2VsZi0+e2Rpc2NfaW5mb30tPnticmlnaHRuZXNzX3NjYWxlfSB8fCAyNTU7
DQoJJGJyaWdodG5lc3MgPSBpbnQoICRicmlnaHRuZXNzICogMTAwIC8gJGJyaWdodG5lc3Nfc2Nh
bGUgKSAuICclJzsNCiAgICB9DQogICAgaWYoICR0b3BpYyBlcSAkc2VsZi0+e2Rpc2NfaW5mb30t
Pntjb21tYW5kX3RvcGljfSApIHsNCgkkdmFsdWUgPSAkcGF5bG9hZDsNCiAgICB9DQogICAgJHNl
bGYtPmRlYnVnKCAzLCAicGF5bG9hZCAnJHBheWxvYWQnIGRlY29kZWQgdG86ICckdmFsdWUnIiAp
Ow0KDQogICAgIyBpZiggJCRzZWxme21xdHRfdHlwZX0gZXEgJ2JpbmFyeV9zZW5zb3InICB8fCAg
JCRzZWxme21xdHRfdHlwZX0gZXEgJ3NlbnNvcicgKSB7DQogICAgIwlpZiggJHJldGFpbmVkICkg
ew0KICAgICMJICAgICRzZWxmLT5kZWJ1ZyggMSwgIlJldGFpbmVkIG1lc3NhZ2UgaWdub3JlZCBm
b3IgJCRzZWxme21xdHRfdHlwZX06JCRzZWxme21xdHRfbmFtZX0gZGV2aWNlIiApOw0KICAgICMJ
ICAgIHJldHVybjsNCiAgICAjCX0NCiAgICAjIH0NCg0KICAgIGlmKCAkJHNlbGZ7bXF0dF90eXBl
fSBlcSAnbGlnaHQnICApIHsNCglpZiggJHNlbGYtPntkaXNjX2luZm99LT57c2NoZW1hfSBlcSAn
anNvbicgKSB7DQoJICAgIGlmKCAkdmFsdWVfanNvbiApIHsNCgkJJHNlbGYtPmRlYnVnKCAzLCAi
RGVjb2RlZCBzdGF0ZTokdmFsdWVfanNvbi0+e3N0YXRlfSBicmlnaHRuZXNzOiR2YWx1ZV9qc29u
LT57YnJpZ2h0bmVzc30iICk7DQoJCWlmKCAkdmFsdWVfanNvbi0+e3N0YXRlfSBlcSAkdmFsdWVf
b24gKSB7DQoJCSAgICBpZiggJHZhbHVlX2pzb24tPnticmlnaHRuZXNzfSApIHsNCgkJCW15ICRi
cmlnaHRuZXNzX3NjYWxlID0gJHNlbGYtPntkaXNjX2luZm99LT57YnJpZ2h0bmVzc19zY2FsZX0g
fHwgMjU1Ow0KCQkJJG1zZyA9IGludCggJHZhbHVlX2pzb24tPnticmlnaHRuZXNzfSAqIDEwMCAv
ICRicmlnaHRuZXNzX3NjYWxlICkgLiAnJSc7DQoJCSAgICB9IGVsc2Ugew0KCQkJJG1zZyA9ICdv
bic7DQoJCSAgICB9DQoJCX0gZWxzaWYoICR2YWx1ZV9qc29uLT57c3RhdGV9IGVxICR2YWx1ZV9v
ZmYgKSB7DQoJCSAgICAkbXNnID0gJ29mZic7DQoJCX0NCgkgICAgfQ0KCX0gZWxzZSB7DQoJICAg
IGlmKCAkdmFsdWUgZXEgJHZhbHVlX29mZiApIHsNCgkJJG1zZyA9ICdvZmYnOw0KCSAgICB9IGVs
c2lmKCAkYnJpZ2h0bmVzcyApIHsNCgkJJG1zZyA9ICRicmlnaHRuZXNzOw0KCSAgICB9IGVsc2lm
KCAkdmFsdWUgZXEgJHZhbHVlX29uICkgew0KCQkkbXNnID0gJ29uJzsNCgkgICAgfQ0KCX0NCiAg
ICB9IGVsc2lmKCAkJHNlbGZ7bXF0dF90eXBlfSBlcSAnc3dpdGNoJw0KICAgIHx8ICAgICAgICQk
c2VsZnttcXR0X3R5cGV9IGVxICdzY2VuZScNCiAgICB8fCAgICAgICAkJHNlbGZ7bXF0dF90eXBl
fSBlcSAnc2NlbmVfc3dpdGNoJw0KICAgICkgew0KCSRtc2cgPSAnb24nIGlmICR2YWx1ZSBlcSAk
dmFsdWVfb247DQoJJG1zZyA9ICdvZmYnIGlmICR2YWx1ZSBlcSAkdmFsdWVfb2ZmOw0KICAgIH0g
ZWxzaWYoICQkc2VsZnttcXR0X3R5cGV9IGVxICdiaW5hcnlfc2Vuc29yJyApIHsNCglpZiggJHZh
bHVlIGVxICR2YWx1ZV9vbiApIHsNCgkgICAgJG1zZyA9ICdvbic7DQoJICAgIGlmKCAkc2VsZi0+
e2Rpc2NfaW5mb30tPntvZmZfZGVsYXl9ICkgew0KCQkkbXNnIC49ICJ+JHNlbGYtPntkaXNjX2lu
Zm99LT57b2ZmX2RlbGF5fX5vZmYiOw0KCSAgICB9DQoJfSBlbHNpZiggJHZhbHVlIGVxICR2YWx1
ZV9vZmYgKSB7DQoJICAgIGlmKCAhJHNlbGYtPntkaXNjX2luZm99LT57b2ZmX2RlbGF5fSApIHsN
CgkJJG1zZyA9ICdvZmYnOw0KCSAgICB9IGVsc2Ugew0KCQkjIGlnbm9yZSBvZmYgY29tbWFuZCBp
ZiB7b2ZmX2RlbGF5fSBpcyBzZXQgLS0gaXRlbSB3aWxsIGJlIHNldCBvZmYgYnkgYWJvdmUgc2V0
IHRpbWVyDQoJCXJldHVybjsNCgkgICAgfQ0KCX0NCiAgICB9IGVsc2lmKCAkJHNlbGZ7bXF0dF90
eXBlfSBlcSAnc2Vuc29yJyApIHsNCiAgICAgICAgJG1zZyA9ICR2YWx1ZTsNCiAgICB9IGVsc2lm
KCAkJHNlbGZ7bXF0dF90eXBlfSBlcSAnc2VsZWN0JyApIHsNCiAgICAgICAgJG1zZyA9ICR2YWx1
ZTsNCiAgICB9IGVsc2lmKCAkJHNlbGZ7bXF0dF90eXBlfSBlcSAndGV4dCcgKSB7DQogICAgICAg
ICRtc2cgPSAkdmFsdWU7DQogICAgfSBlbHNpZiggJCRzZWxme21xdHRfdHlwZX0gZXEgJ251bWJl
cicgKSB7DQogICAgICAgICRtc2cgPSAkdmFsdWU7DQogICAgfSBlbHNpZiggJCRzZWxme21xdHRf
dHlwZX0gZXEgJ2NvdmVyJyApIHsNCiAgICAgICAgJG1zZyA9ICR2YWx1ZTsNCiAgICB9IGVsc2Ug
ew0KCSRzZWxmLT5kZWJ1ZyggMiwgIlVua25vd24gb2JqZWN0IHR5cGUgJyQkc2VsZnttcXR0X3R5
cGV9JyBvbiBvYmplY3QgJyQkc2VsZnt0b3BpY30nIiApOw0KCSRtc2cgPSAkdmFsdWVfanNvbjsN
CiAgICB9DQogICAgaWYoICRtc2cgZXEgJHVuc2V0X3ZhbHVlICkgew0KICAgICAgICAkc2VsZi0+
ZXJyb3IoICJVbmFibGUgdG8gZGVjb2RlIG1xdHQgbWVzc2FnZSBmb3IgJCRzZWxme21xdHRfbmFt
ZX0gdHlwZTokJHNlbGZ7bXF0dF90eXBlfSBtZXNzYWdlOickcGF5bG9hZCciICk7DQoJIyAkc2Vs
Zi0+ZXJyb3IoIER1bXBlciggJHNlbGYgKSApOw0KCSRtc2cgPSB1bmRlZjsNCiAgICB9DQogICAg
cmV0dXJuICRtc2c7DQp9DQoNCnN1YiBlbmNvZGVfbXF0dF9wYXlsb2FkIHsNCiAgICBteSggJHNl
bGYsICRzZXR2YWwsICR0b3BpYyApID0gQF87DQogICAgbXkgJHBheWxvYWQ7DQogICAgbXkgJHZh
bHVlOw0KICAgIG15ICRicmlnaHRuZXNzOw0KICAgIG15ICRicmlnaHRuZXNzX3NjYWxlOw0KICAg
IG15ICR2YWx1ZV9vbjsNCiAgICBteSAkdmFsdWVfb2ZmOw0KDQogICAgJHBheWxvYWQgPSB1bmRl
ZjsNCiAgICBpZiggJHRvcGljIGVxICRzZWxmLT57ZGlzY19pbmZvfS0+e3N0YXRlX3RvcGljfSAp
IHsNCgkkdmFsdWVfb24gPSAkc2VsZi0+e2Rpc2NfaW5mb30tPntzdGF0ZV9vbn07DQoJJHZhbHVl
X29mZiA9ICRzZWxmLT57ZGlzY19pbmZvfS0+e3N0YXRlX29mZn07DQogICAgfSBlbHNpZiggJHRv
cGljIGVxICRzZWxmLT57ZGlzY19pbmZvfS0+e3Jlc3RhcnRfdG9waWN9ICkgew0KCSRwYXlsb2Fk
ID0gJHNldHZhbDsNCglyZXR1cm4gJHBheWxvYWQ7DQogICAgfQ0KICAgICR2YWx1ZV9vbiA9ICRz
ZWxmLT57ZGlzY19pbmZvfS0+e3BheWxvYWRfb259IGlmICFkZWZpbmVkICR2YWx1ZV9vbjsNCiAg
ICAkdmFsdWVfb2ZmID0gJHNlbGYtPntkaXNjX2luZm99LT57cGF5bG9hZF9vZmZ9IGlmICFkZWZp
bmVkICR2YWx1ZV9vZmY7DQogICAgJHZhbHVlX29uID0gJ09OJyBpZiAhZGVmaW5lZCAkdmFsdWVf
b247DQogICAgJHZhbHVlX29mZiA9ICdPRkYnIGlmICFkZWZpbmVkICR2YWx1ZV9vZmY7DQoNCiAg
ICAkc2V0dmFsID1+IHMvJSQvLzsJIyBTdHJpcCAlIGlmIHByZXNlbnQ7IG1ha2UgdGhpbmdzIHNp
bXBsZXIgYWxsIGFyb3VuZC4NCiAgICAkYnJpZ2h0bmVzc19zY2FsZSA9ICRzZWxmLT57ZGlzY19p
bmZvfS0+e2JyaWdodG5lc3Nfc2NhbGV9IHx8IDI1NTsNCiAgICBteSAkbGV2ZWw7DQogICAgaWYo
ICRzZWxmLT57bXF0dF90eXBlfSBlcSAnbGlnaHQnICkgew0KCSgkbGV2ZWwpID0gJHNldHZhbCA9
fiAvXihcZHxcZFxkfDEwMCkkLzsJIyAwLTEwMC4gT2xkIHJlZ2V4IGFsbG93ZWQgMC0xOTklLg0K
ICAgIH0NCiAgICBpZiggJHNlbGYtPnttcXR0X3R5cGV9IGVxICdzZW5zb3InDQogICAgfHwgICRz
ZWxmLT57bXF0dF90eXBlfSBlcSAnc2VsZWN0Jw0KICAgIHx8ICAkc2VsZi0+e21xdHRfdHlwZX0g
ZXEgJ3RleHQnDQogICAgfHwgICRzZWxmLT57bXF0dF90eXBlfSBlcSAnbnVtYmVyJw0KICAgIHx8
ICAkc2VsZi0+e21xdHRfdHlwZX0gZXEgJ2NvdmVyJw0KICAgICkgew0KCSRwYXlsb2FkID0gJHNl
dHZhbDsNCglyZXR1cm4gJHBheWxvYWQ7DQogICAgfQ0KDQogICAgIyBvbi9vZmYvbGV2ZWwgdHlw
ZQ0KICAgIGlmKCAkbGV2ZWwgKSB7DQoJaWYgKCAkbGV2ZWwgPCAxICkgew0KCSAgICAkbGV2ZWwg
PSAwOw0KCSAgICAkdmFsdWUgPSAkdmFsdWVfb2ZmOw0KCX0gZWxzZSB7DQoJICAgICR2YWx1ZSA9
ICR2YWx1ZV9vbjsNCgl9DQoJJGJyaWdodG5lc3MgPSBpbnQoICggJGxldmVsICogJGJyaWdodG5l
c3Nfc2NhbGUgLyAxMDAgKSArIC41ICk7DQogICAgfSBlbHNpZiggJHNldHZhbCA9fiAvXihvbnxv
bl9mYXN0fDEwMCkkLyApIHsNCgkkdmFsdWUgPSAkdmFsdWVfb247DQoJJGJyaWdodG5lc3MgPSAk
YnJpZ2h0bmVzc19zY2FsZTsNCiAgICB9IGVsc2lmKCAkc2V0dmFsID1+IC9eKG9mZnxvZmZfZmFz
dHwwKSQvICkgew0KCSR2YWx1ZSA9ICR2YWx1ZV9vZmY7DQoJJGJyaWdodG5lc3MgPSAwOw0KICAg
IH0gZWxzZSB7DQoJJHNlbGYtPmVycm9yKCAiJHNlbGYtPnttcXR0X25hbWV9OiBVbmtub3duIHNl
dCB2YWx1ZSAnJHNldHZhbCcgZm9yIG1xdHQgdHlwZSAnJHNlbGYtPnttcXR0X3R5cGV9JyIgKTsN
CglyZXR1cm47DQogICAgfQ0KDQogICAgaWYoICRzZWxmLT57bXF0dF90eXBlfSBlcSAnbGlnaHQn
ICkgew0KCWlmKCAkc2VsZi0+e2Rpc2NfaW5mb30tPntzY2hlbWF9IGVxICdqc29uJyApIHsNCgkg
ICAgJHBheWxvYWQgPSAieyBcInN0YXRlXCIgOiBcIiR2YWx1ZVwiLCBcImJyaWdodG5lc3NcIiA6
ICRicmlnaHRuZXNzIH0iOw0KCX0gZWxzZSB7DQoJICAgIGlmKCAkdG9waWMgZXEgJHNlbGYtPntk
aXNjX2luZm99LT57YnJpZ2h0bmVzc19jb21tYW5kX3RvcGljfSApIHsNCgkJJHBheWxvYWQgPSAk
YnJpZ2h0bmVzczsNCgkgICAgfSBlbHNpZiggJHRvcGljIGVxICRzZWxmLT57ZGlzY19pbmZvfS0+
e2NvbW1hbmRfdG9waWN9ICkgew0KCQkkcGF5bG9hZCA9ICR2YWx1ZTsNCgkgICAgfQ0KCX0NCiAg
ICB9IGVsc2lmKCAkc2VsZi0+e21xdHRfdHlwZX0gZXEgJ3N3aXRjaCcNCiAgICB8fCAgICAgICAk
c2VsZi0+e21xdHRfdHlwZX0gZXEgJ2JpbmFyeV9zZW5zb3InDQogICAgfHwgICAgICAgJHNlbGYt
PnttcXR0X3R5cGV9IGVxICdzY2VuZScNCiAgICB8fCAgICAgICAkc2VsZi0+e21xdHRfdHlwZX0g
ZXEgJ3NjZW5lX3N3aXRjaCcNCiAgICApIHsNCgkkcGF5bG9hZCA9ICR2YWx1ZTsNCiAgICB9IGVs
c2Ugew0KCSRzZWxmLT5lcnJvciggIlVua25vd24gb2JqZWN0IHR5cGUgJyQkc2VsZnttcXR0X3R5
cGV9JyBvbiBvYmplY3QgJyQkc2VsZnttcXR0X25hbWV9JyIgKTsNCiAgICB9DQogICAgcmV0dXJu
ICRwYXlsb2FkOw0KfQ0KDQo9aXRlbSBDPGFkZF9kaXNjb3ZlcnlfaW5mbyggZXh0cmFfZGlzY19p
bmZvICk+DQogICAgQWRkIHRoZSBjb250ZW50cyBvZiB0aGUgaGFzaCBleHRyYV9kaXNjX2luZm8g
dG8gdGhlIGRpc2NvdmVyeSBpbmZvcm1hdGlvbiBmb3IgdGhlIG9iamVjdA0KPWN1dA0KDQpzdWIg
YWRkX2Rpc2NvdmVyeV9pbmZvIHsNCiAgICBteSAoJHNlbGYsJGV4dHJhX2Rpc2NfaW5mbykgPSBA
XzsNCg0KICAgIG15ICRtZXJnZXIgPSBIYXNoOjpNZXJnZS0+bmV3KCAnUklHSFRfUFJFQ0VERU5U
JyApOw0KICAgICRzZWxmLT57ZGlzY19pbmZvfSA9ICRtZXJnZXItPm1lcmdlKCAkc2VsZi0+e2Rp
c2NfaW5mb30sICRleHRyYV9kaXNjX2luZm8gKTsNCn0NCg0KbXkgJHNob3J0X25hbWVfbWFwID0g
ew0KICAgICdhY3RfdCcgPT4gICAgICAgICAgICAgICAnYWN0aW9uX3RvcGljJywNCiAgICAnYWN0
X3RwbCcgPT4gICAgICAgICAgICAgJ2FjdGlvbl90ZW1wbGF0ZScsDQogICAgJ2F0eXBlJyA9PiAg
ICAgICAgICAgICAgICdhdXRvbWF0aW9uX3R5cGUnLA0KICAgICdhdXhfY21kX3QnID0+ICAgICAg
ICAgICAnYXV4X2NvbW1hbmRfdG9waWMnLA0KICAgICdhdXhfc3RhdF90cGwnID0+ICAgICAgICAn
YXV4X3N0YXRlX3RlbXBsYXRlJywNCiAgICAnYXV4X3N0YXRfdCcgPT4gICAgICAgICAgJ2F1eF9z
dGF0ZV90b3BpYycsDQogICAgJ2F2dHknID0+ICAgICAgICAgICAgICAgICdhdmFpbGFiaWxpdHkn
LA0KICAgICdhdnR5X3QnID0+ICAgICAgICAgICAgICAnYXZhaWxhYmlsaXR5X3RvcGljJywNCiAg
ICAnYXdheV9tb2RlX2NtZF90JyA9PiAgICAgJ2F3YXlfbW9kZV9jb21tYW5kX3RvcGljJywNCiAg
ICAnYXdheV9tb2RlX3N0YXRfdHBsJyA9PiAgJ2F3YXlfbW9kZV9zdGF0ZV90ZW1wbGF0ZScsDQog
ICAgJ2F3YXlfbW9kZV9zdGF0X3QnID0+ICAgICdhd2F5X21vZGVfc3RhdGVfdG9waWMnLA0KICAg
ICdiX3RwbCcgPT4gICAgICAgICAgICAgICAnYmx1ZV90ZW1wbGF0ZScsDQogICAgJ2JyaV9jbWRf
dCcgPT4gICAgICAgICAgICdicmlnaHRuZXNzX2NvbW1hbmRfdG9waWMnLA0KICAgICdicmlfc2Ns
JyA9PiAgICAgICAgICAgICAnYnJpZ2h0bmVzc19zY2FsZScsDQogICAgJ2JyaV9zdGF0X3QnID0+
ICAgICAgICAgICdicmlnaHRuZXNzX3N0YXRlX3RvcGljJywNCiAgICAnYnJpX3RwbCcgPT4gICAg
ICAgICAgICAgJ2JyaWdodG5lc3NfdGVtcGxhdGUnLA0KICAgICdicmlfdmFsX3RwbCcgPT4gICAg
ICAgICAnYnJpZ2h0bmVzc192YWx1ZV90ZW1wbGF0ZScsDQogICAgJ2Nscl90ZW1wX2NtZF90cGwn
ID0+ICAgICdjb2xvcl90ZW1wX2NvbW1hbmRfdGVtcGxhdGUnLA0KICAgICdiYXRfbGV2X3QnID0+
ICAgICAgICAgICAnYmF0dGVyeV9sZXZlbF90b3BpYycsDQogICAgJ2JhdF9sZXZfdHBsJyA9PiAg
ICAgICAgICdiYXR0ZXJ5X2xldmVsX3RlbXBsYXRlJywNCiAgICAnY2hyZ190JyA9PiAgICAgICAg
ICAgICAgJ2NoYXJnaW5nX3RvcGljJywNCiAgICAnY2hyZ190cGwnID0+ICAgICAgICAgICAgJ2No
YXJnaW5nX3RlbXBsYXRlJywNCiAgICAnY2xyX3RlbXBfY21kX3QnID0+ICAgICAgJ2NvbG9yX3Rl
bXBfY29tbWFuZF90b3BpYycsDQogICAgJ2Nscl90ZW1wX3N0YXRfdCcgPT4gICAgICdjb2xvcl90
ZW1wX3N0YXRlX3RvcGljJywNCiAgICAnY2xyX3RlbXBfdHBsJyA9PiAgICAgICAgJ2NvbG9yX3Rl
bXBfdGVtcGxhdGUnLA0KICAgICdjbHJfdGVtcF92YWxfdHBsJyA9PiAgICAnY29sb3JfdGVtcF92
YWx1ZV90ZW1wbGF0ZScsDQogICAgJ2Nsbl90JyA9PiAgICAgICAgICAgICAgICdjbGVhbmluZ190
b3BpYycsDQogICAgJ2Nsbl90cGwnID0+ICAgICAgICAgICAgICdjbGVhbmluZ190ZW1wbGF0ZScs
DQogICAgJ2NtZF9vZmZfdHBsJyA9PiAgICAgICAgICdjb21tYW5kX29mZl90ZW1wbGF0ZScsDQog
ICAgJ2NtZF9vbl90cGwnID0+ICAgICAgICAgICdjb21tYW5kX29uX3RlbXBsYXRlJywNCiAgICAn
Y21kX3QnID0+ICAgICAgICAgICAgICAgJ2NvbW1hbmRfdG9waWMnLA0KICAgICdjbWRfdHBsJyA9
PiAgICAgICAgICAgICAnY29tbWFuZF90ZW1wbGF0ZScsDQogICAgJ2NvZF9hcm1fcmVxJyA9PiAg
ICAgICAgICdjb2RlX2FybV9yZXF1aXJlZCcsDQogICAgJ2NvZF9kaXNfcmVxJyA9PiAgICAgICAg
ICdjb2RlX2Rpc2FybV9yZXF1aXJlZCcsDQogICAgJ2N1cnJfdGVtcF90JyA9PiAgICAgICAgICdj
dXJyZW50X3RlbXBlcmF0dXJlX3RvcGljJywNCiAgICAnY3Vycl90ZW1wX3RwbCcgPT4gICAgICAg
J2N1cnJlbnRfdGVtcGVyYXR1cmVfdGVtcGxhdGUnLA0KICAgICdkZXYnID0+ICAgICAgICAgICAg
ICAgICAnZGV2aWNlJywNCiAgICAnZGV2X2NsYScgPT4gICAgICAgICAgICAgJ2RldmljZV9jbGFz
cycsDQogICAgJ2RvY2tfdCcgPT4gICAgICAgICAgICAgICdkb2NrZWRfdG9waWMnLA0KICAgICdk
b2NrX3RwbCcgPT4gICAgICAgICAgICAnZG9ja2VkX3RlbXBsYXRlJywNCiAgICAnZXJyX3QnID0+
ICAgICAgICAgICAgICAgJ2Vycm9yX3RvcGljJywNCiAgICAnZXJyX3RwbCcgPT4gICAgICAgICAg
ICAgJ2Vycm9yX3RlbXBsYXRlJywNCiAgICAnZmFuc3BkX3QnID0+ICAgICAgICAgICAgJ2Zhbl9z
cGVlZF90b3BpYycsDQogICAgJ2ZhbnNwZF90cGwnID0+ICAgICAgICAgICdmYW5fc3BlZWRfdGVt
cGxhdGUnLA0KICAgICdmYW5zcGRfbHN0JyA9PiAgICAgICAgICAnZmFuX3NwZWVkX2xpc3QnLA0K
ICAgICdmbHNoX3RsbmcnID0+ICAgICAgICAgICAnZmxhc2hfdGltZV9sb25nJywNCiAgICAnZmxz
aF90c2h0JyA9PiAgICAgICAgICAgJ2ZsYXNoX3RpbWVfc2hvcnQnLA0KICAgICdmeF9jbWRfdCcg
PT4gICAgICAgICAgICAnZWZmZWN0X2NvbW1hbmRfdG9waWMnLA0KICAgICdmeF9saXN0JyA9PiAg
ICAgICAgICAgICAnZWZmZWN0X2xpc3QnLA0KICAgICdmeF9zdGF0X3QnID0+ICAgICAgICAgICAn
ZWZmZWN0X3N0YXRlX3RvcGljJywNCiAgICAnZnhfdHBsJyA9PiAgICAgICAgICAgICAgJ2VmZmVj
dF90ZW1wbGF0ZScsDQogICAgJ2Z4X3ZhbF90cGwnID0+ICAgICAgICAgICdlZmZlY3RfdmFsdWVf
dGVtcGxhdGUnLA0KICAgICdleHBfYWZ0JyA9PiAgICAgICAgICAgICAnZXhwaXJlX2FmdGVyJywN
CiAgICAnZmFuX21vZGVfY21kX3QnID0+ICAgICAgJ2Zhbl9tb2RlX2NvbW1hbmRfdG9waWMnLA0K
ICAgICdmYW5fbW9kZV9zdGF0X3RwbCcgPT4gICAnZmFuX21vZGVfc3RhdGVfdGVtcGxhdGUnLA0K
ICAgICdmYW5fbW9kZV9zdGF0X3QnID0+ICAgICAnZmFuX21vZGVfc3RhdGVfdG9waWMnLA0KICAg
ICdmcmNfdXBkJyA9PiAgICAgICAgICAgICAnZm9yY2VfdXBkYXRlJywNCiAgICAnZ190cGwnID0+
ICAgICAgICAgICAgICAgJ2dyZWVuX3RlbXBsYXRlJywNCiAgICAnaG9sZF9jbWRfdCcgPT4gICAg
ICAgICAgJ2hvbGRfY29tbWFuZF90b3BpYycsDQogICAgJ2hvbGRfc3RhdF90cGwnID0+ICAgICAg
ICdob2xkX3N0YXRlX3RlbXBsYXRlJywNCiAgICAnaG9sZF9zdGF0X3QnID0+ICAgICAgICAgJ2hv
bGRfc3RhdGVfdG9waWMnLA0KICAgICdoc19jbWRfdCcgPT4gICAgICAgICAgICAnaHNfY29tbWFu
ZF90b3BpYycsDQogICAgJ2hzX3N0YXRfdCcgPT4gICAgICAgICAgICdoc19zdGF0ZV90b3BpYycs
DQogICAgJ2hzX3ZhbF90cGwnID0+ICAgICAgICAgICdoc192YWx1ZV90ZW1wbGF0ZScsDQogICAg
J2ljJyA9PiAgICAgICAgICAgICAgICAgICdpY29uJywNCiAgICAnaW5pdCcgPT4gICAgICAgICAg
ICAgICAgJ2luaXRpYWwnLA0KICAgICdqc29uX2F0dHJfdCcgPT4gICAgICAgICAnanNvbl9hdHRy
aWJ1dGVzX3RvcGljJywNCiAgICAnanNvbl9hdHRyX3RwbCcgPT4gICAgICAgJ2pzb25fYXR0cmli
dXRlc190ZW1wbGF0ZScsDQogICAgJ21heF9taXJzJyA9PiAgICAgICAgICAgICdtYXhfbWlyZWRz
JywNCiAgICAnbWluX21pcnMnID0+ICAgICAgICAgICAgJ21pbl9taXJlZHMnLA0KICAgICdtYXhf
dGVtcCcgPT4gICAgICAgICAgICAnbWF4X3RlbXAnLA0KICAgICdtaW5fdGVtcCcgPT4gICAgICAg
ICAgICAnbWluX3RlbXAnLA0KICAgICdtb2RlX2NtZF90JyA9PiAgICAgICAgICAnbW9kZV9jb21t
YW5kX3RvcGljJywNCiAgICAnbW9kZV9zdGF0X3RwbCcgPT4gICAgICAgJ21vZGVfc3RhdGVfdGVt
cGxhdGUnLA0KICAgICdtb2RlX3N0YXRfdCcgPT4gICAgICAgICAnbW9kZV9zdGF0ZV90b3BpYycs
DQogICAgJ25hbWUnID0+ICAgICAgICAgICAgICAgICduYW1lJywNCiAgICAnb2ZmX2RseScgPT4g
ICAgICAgICAgICAgJ29mZl9kZWxheScsDQogICAgJ29uX2NtZF90eXBlJyA9PiAgICAgICAgICdv
bl9jb21tYW5kX3R5cGUnLA0KICAgICdvcHQnID0+ICAgICAgICAgICAgICAgICAnb3B0aW1pc3Rp
YycsDQogICAgJ29zY19jbWRfdCcgPT4gICAgICAgICAgICdvc2NpbGxhdGlvbl9jb21tYW5kX3Rv
cGljJywNCiAgICAnb3NjX3N0YXRfdCcgPT4gICAgICAgICAgJ29zY2lsbGF0aW9uX3N0YXRlX3Rv
cGljJywNCiAgICAnb3NjX3ZhbF90cGwnID0+ICAgICAgICAgJ29zY2lsbGF0aW9uX3ZhbHVlX3Rl
bXBsYXRlJywNCiAgICAncGwnID0+ICAgICAgICAgICAgICAgICAgJ3BheWxvYWQnLA0KICAgICdw
bF9hcm1fYXdheScgPT4gICAgICAgICAncGF5bG9hZF9hcm1fYXdheScsDQogICAgJ3BsX2FybV9o
b21lJyA9PiAgICAgICAgICdwYXlsb2FkX2FybV9ob21lJywNCiAgICAncGxfYXJtX2N1c3RvbV9i
JyA9PiAgICAgJ3BheWxvYWRfYXJtX2N1c3RvbV9ieXBhc3MnLA0KICAgICdwbF9hcm1fbml0ZScg
PT4gICAgICAgICAncGF5bG9hZF9hcm1fbmlnaHQnLA0KICAgICdwbF9hdmFpbCcgPT4gICAgICAg
ICAgICAncGF5bG9hZF9hdmFpbGFibGUnLA0KICAgICdwbF9jbG5fc3AnID0+ICAgICAgICAgICAn
cGF5bG9hZF9jbGVhbl9zcG90JywNCiAgICAncGxfY2xzJyA9PiAgICAgICAgICAgICAgJ3BheWxv
YWRfY2xvc2UnLA0KICAgICdwbF9kaXNhcm0nID0+ICAgICAgICAgICAncGF5bG9hZF9kaXNhcm0n
LA0KICAgICdwbF9oaV9zcGQnID0+ICAgICAgICAgICAncGF5bG9hZF9oaWdoX3NwZWVkJywNCiAg
ICAncGxfaG9tZScgPT4gICAgICAgICAgICAgJ3BheWxvYWRfaG9tZScsDQogICAgJ3BsX2xvY2sn
ID0+ICAgICAgICAgICAgICdwYXlsb2FkX2xvY2snLA0KICAgICdwbF9sb2MnID0+ICAgICAgICAg
ICAgICAncGF5bG9hZF9sb2NhdGUnLA0KICAgICdwbF9sb19zcGQnID0+ICAgICAgICAgICAncGF5
bG9hZF9sb3dfc3BlZWQnLA0KICAgICdwbF9tZWRfc3BkJyA9PiAgICAgICAgICAncGF5bG9hZF9t
ZWRpdW1fc3BlZWQnLA0KICAgICdwbF9ub3RfYXZhaWwnID0+ICAgICAgICAncGF5bG9hZF9ub3Rf
YXZhaWxhYmxlJywNCiAgICAncGxfbm90X2hvbWUnID0+ICAgICAgICAgJ3BheWxvYWRfbm90X2hv
bWUnLA0KICAgICdwbF9vZmYnID0+ICAgICAgICAgICAgICAncGF5bG9hZF9vZmYnLA0KICAgICdw
bF9vZmZfc3BkJyA9PiAgICAgICAgICAncGF5bG9hZF9vZmZfc3BlZWQnLA0KICAgICdwbF9vbicg
PT4gICAgICAgICAgICAgICAncGF5bG9hZF9vbicsDQogICAgJ3BsX29wZW4nID0+ICAgICAgICAg
ICAgICdwYXlsb2FkX29wZW4nLA0KICAgICdwbF9vc2Nfb2ZmJyA9PiAgICAgICAgICAncGF5bG9h
ZF9vc2NpbGxhdGlvbl9vZmYnLA0KICAgICdwbF9vc2Nfb24nID0+ICAgICAgICAgICAncGF5bG9h
ZF9vc2NpbGxhdGlvbl9vbicsDQogICAgJ3BsX3BhdXMnID0+ICAgICAgICAgICAgICdwYXlsb2Fk
X3BhdXNlJywNCiAgICAncGxfc3RvcCcgPT4gICAgICAgICAgICAgJ3BheWxvYWRfc3RvcCcsDQog
ICAgJ3BsX3N0cnQnID0+ICAgICAgICAgICAgICdwYXlsb2FkX3N0YXJ0JywNCiAgICAncGxfc3Rw
YScgPT4gICAgICAgICAgICAgJ3BheWxvYWRfc3RhcnRfcGF1c2UnLA0KICAgICdwbF9yZXQnID0+
ICAgICAgICAgICAgICAncGF5bG9hZF9yZXR1cm5fdG9fYmFzZScsDQogICAgJ3BsX3RvZmYnID0+
ICAgICAgICAgICAgICdwYXlsb2FkX3R1cm5fb2ZmJywNCiAgICAncGxfdG9uJyA9PiAgICAgICAg
ICAgICAgJ3BheWxvYWRfdHVybl9vbicsDQogICAgJ3BsX3VubGsnID0+ICAgICAgICAgICAgICdw
YXlsb2FkX3VubG9jaycsDQogICAgJ3Bvc19jbHNkJyA9PiAgICAgICAgICAgICdwb3NpdGlvbl9j
bG9zZWQnLA0KICAgICdwb3Nfb3BlbicgPT4gICAgICAgICAgICAncG9zaXRpb25fb3BlbicsDQog
ICAgJ3Bvd19jbWRfdCcgPT4gICAgICAgICAgICdwb3dlcl9jb21tYW5kX3RvcGljJywNCiAgICAn
cG93X3N0YXRfdCcgPT4gICAgICAgICAgJ3Bvd2VyX3N0YXRlX3RvcGljJywNCiAgICAncG93X3N0
YXRfdHBsJyA9PiAgICAgICAgJ3Bvd2VyX3N0YXRlX3RlbXBsYXRlJywNCiAgICAncl90cGwnID0+
ICAgICAgICAgICAgICAgJ3JlZF90ZW1wbGF0ZScsDQogICAgJ3JldCcgPT4gICAgICAgICAgICAg
ICAgICdyZXRhaW4nLA0KICAgICdyZ2JfY21kX3RwbCcgPT4gICAgICAgICAncmdiX2NvbW1hbmRf
dGVtcGxhdGUnLA0KICAgICdyZ2JfY21kX3QnID0+ICAgICAgICAgICAncmdiX2NvbW1hbmRfdG9w
aWMnLA0KICAgICdyZ2Jfc3RhdF90JyA9PiAgICAgICAgICAncmdiX3N0YXRlX3RvcGljJywNCiAg
ICAncmdiX3ZhbF90cGwnID0+ICAgICAgICAgJ3JnYl92YWx1ZV90ZW1wbGF0ZScsDQogICAgJ3Nl
bmRfY21kX3QnID0+ICAgICAgICAgICdzZW5kX2NvbW1hbmRfdG9waWMnLA0KICAgICdzZW5kX2lm
X29mZicgPT4gICAgICAgICAnc2VuZF9pZl9vZmYnLA0KICAgICdzZXRfZmFuX3NwZF90JyA9PiAg
ICAgICAnc2V0X2Zhbl9zcGVlZF90b3BpYycsDQogICAgJ3NldF9wb3NfdHBsJyA9PiAgICAgICAg
ICdzZXRfcG9zaXRpb25fdGVtcGxhdGUnLA0KICAgICdzZXRfcG9zX3QnID0+ICAgICAgICAgICAn
c2V0X3Bvc2l0aW9uX3RvcGljJywNCiAgICAncG9zX3QnID0+ICAgICAgICAgICAgICAgJ3Bvc2l0
aW9uX3RvcGljJywNCiAgICAnc3BkX2NtZF90JyA9PiAgICAgICAgICAgJ3NwZWVkX2NvbW1hbmRf
dG9waWMnLA0KICAgICdzcGRfc3RhdF90JyA9PiAgICAgICAgICAnc3BlZWRfc3RhdGVfdG9waWMn
LA0KICAgICdzcGRfdmFsX3RwbCcgPT4gICAgICAgICAnc3BlZWRfdmFsdWVfdGVtcGxhdGUnLA0K
ICAgICdzcGRzJyA9PiAgICAgICAgICAgICAgICAnc3BlZWRzJywNCiAgICAnc3JjX3R5cGUnID0+
ICAgICAgICAgICAgJ3NvdXJjZV90eXBlJywNCiAgICAnc3RhdF9jbHNkJyA9PiAgICAgICAgICAg
J3N0YXRlX2Nsb3NlZCcsDQogICAgJ3N0YXRfY2xvc2luZycgPT4gICAgICAgICdzdGF0ZV9jbG9z
aW5nJywNCiAgICAnc3RhdF9vZmYnID0+ICAgICAgICAgICAgJ3N0YXRlX29mZicsDQogICAgJ3N0
YXRfb24nID0+ICAgICAgICAgICAgICdzdGF0ZV9vbicsDQogICAgJ3N0YXRfb3BlbicgPT4gICAg
ICAgICAgICdzdGF0ZV9vcGVuJywNCiAgICAnc3RhdF9vcGVuaW5nJyA9PiAgICAgICAgJ3N0YXRl
X29wZW5pbmcnLA0KICAgICdzdGF0X2xvY2tlZCcgPT4gICAgICAgICAnc3RhdGVfbG9ja2VkJywN
CiAgICAnc3RhdF91bmxvY2tlZCcgPT4gICAgICAgJ3N0YXRlX3VubG9ja2VkJywNCiAgICAnc3Rh
dF90JyA9PiAgICAgICAgICAgICAgJ3N0YXRlX3RvcGljJywNCiAgICAnc3RhdF90cGwnID0+ICAg
ICAgICAgICAgJ3N0YXRlX3RlbXBsYXRlJywNCiAgICAnc3RhdF92YWxfdHBsJyA9PiAgICAgICAg
J3N0YXRlX3ZhbHVlX3RlbXBsYXRlJywNCiAgICAnc3R5cGUnID0+ICAgICAgICAgICAgICAgJ3N1
YnR5cGUnLA0KICAgICdzdXBfZmVhdCcgPT4gICAgICAgICAgICAnc3VwcG9ydGVkX2ZlYXR1cmVz
JywNCiAgICAnc3dpbmdfbW9kZV9jbWRfdCcgPT4gICAgJ3N3aW5nX21vZGVfY29tbWFuZF90b3Bp
YycsDQogICAgJ3N3aW5nX21vZGVfc3RhdF90cGwnID0+ICdzd2luZ19tb2RlX3N0YXRlX3RlbXBs
YXRlJywNCiAgICAnc3dpbmdfbW9kZV9zdGF0X3QnID0+ICAgJ3N3aW5nX21vZGVfc3RhdGVfdG9w
aWMnLA0KICAgICd0ZW1wX2NtZF90JyA9PiAgICAgICAgICAndGVtcGVyYXR1cmVfY29tbWFuZF90
b3BpYycsDQogICAgJ3RlbXBfaGlfY21kX3QnID0+ICAgICAgICd0ZW1wZXJhdHVyZV9oaWdoX2Nv
bW1hbmRfdG9waWMnLA0KICAgICd0ZW1wX2hpX3N0YXRfdHBsJyA9PiAgICAndGVtcGVyYXR1cmVf
aGlnaF9zdGF0ZV90ZW1wbGF0ZScsDQogICAgJ3RlbXBfaGlfc3RhdF90JyA9PiAgICAgICd0ZW1w
ZXJhdHVyZV9oaWdoX3N0YXRlX3RvcGljJywNCiAgICAndGVtcF9sb19jbWRfdCcgPT4gICAgICAg
J3RlbXBlcmF0dXJlX2xvd19jb21tYW5kX3RvcGljJywNCiAgICAndGVtcF9sb19zdGF0X3RwbCcg
PT4gICAgJ3RlbXBlcmF0dXJlX2xvd19zdGF0ZV90ZW1wbGF0ZScsDQogICAgJ3RlbXBfbG9fc3Rh
dF90JyA9PiAgICAgICd0ZW1wZXJhdHVyZV9sb3dfc3RhdGVfdG9waWMnLA0KICAgICd0ZW1wX3N0
YXRfdHBsJyA9PiAgICAgICAndGVtcGVyYXR1cmVfc3RhdGVfdGVtcGxhdGUnLA0KICAgICd0ZW1w
X3N0YXRfdCcgPT4gICAgICAgICAndGVtcGVyYXR1cmVfc3RhdGVfdG9waWMnLA0KICAgICd0ZW1w
X3VuaXQnID0+ICAgICAgICAgICAndGVtcGVyYXR1cmVfdW5pdCcsDQogICAgJ3RpbHRfY2xzZF92
YWwnID0+ICAgICAgICd0aWx0X2Nsb3NlZF92YWx1ZScsDQogICAgJ3RpbHRfY21kX3QnID0+ICAg
ICAgICAgICd0aWx0X2NvbW1hbmRfdG9waWMnLA0KICAgICd0aWx0X2ludl9zdGF0JyA9PiAgICAg
ICAndGlsdF9pbnZlcnRfc3RhdGUnLA0KICAgICd0aWx0X21heCcgPT4gICAgICAgICAgICAndGls
dF9tYXgnLA0KICAgICd0aWx0X21pbicgPT4gICAgICAgICAgICAndGlsdF9taW4nLA0KICAgICd0
aWx0X29wbmRfdmFsJyA9PiAgICAgICAndGlsdF9vcGVuZWRfdmFsdWUnLA0KICAgICd0aWx0X29w
dCcgPT4gICAgICAgICAgICAndGlsdF9vcHRpbWlzdGljJywNCiAgICAndGlsdF9zdGF0dXNfdCcg
PT4gICAgICAgJ3RpbHRfc3RhdHVzX3RvcGljJywNCiAgICAndGlsdF9zdGF0dXNfdHBsJyA9PiAg
ICAgJ3RpbHRfc3RhdHVzX3RlbXBsYXRlJywNCiAgICAndCcgPT4gICAgICAgICAgICAgICAgICAg
J3RvcGljJywNCiAgICAndW5pcV9pZCcgPT4gICAgICAgICAgICAgJ3VuaXF1ZV9pZCcsDQogICAg
J3VuaXRfb2ZfbWVhcycgPT4gICAgICAgICd1bml0X29mX21lYXN1cmVtZW50JywNCiAgICAndmFs
X3RwbCcgPT4gICAgICAgICAgICAgJ3ZhbHVlX3RlbXBsYXRlJywNCiAgICAnd2hpdF92YWxfY21k
X3QnID0+ICAgICAgJ3doaXRlX3ZhbHVlX2NvbW1hbmRfdG9waWMnLA0KICAgICd3aGl0X3ZhbF9z
Y2wnID0+ICAgICAgICAnd2hpdGVfdmFsdWVfc2NhbGUnLA0KICAgICd3aGl0X3ZhbF9zdGF0X3Qn
ID0+ICAgICAnd2hpdGVfdmFsdWVfc3RhdGVfdG9waWMnLA0KICAgICd3aGl0X3ZhbF90cGwnID0+
ICAgICAgICAnd2hpdGVfdmFsdWVfdGVtcGxhdGUnLA0KICAgICd4eV9jbWRfdCcgPT4gICAgICAg
ICAgICAneHlfY29tbWFuZF90b3BpYycsDQogICAgJ3h5X3N0YXRfdCcgPT4gICAgICAgICAgICd4
eV9zdGF0ZV90b3BpYycsDQogICAgJ3h5X3ZhbF90cGwnID0+ICAgICAgICAgICd4eV92YWx1ZV90
ZW1wbGF0ZScsDQp9Ow0KDQpzdWIgbm9ybWFsaXplX2Rpc2NvdmVyeV9pbmZvIHsNCiAgICBteSgg
JGRpc2NfaW5mbyApID0gQF87DQoNCiAgICAjIGNvbnZlcnQgc2hvcnQgZm9ybXMgdG8gbG9uZyBm
b3JtcywgcmVwbGFjZSBhbnkgfg0KICAgIG15ICR0b3BpY19zdWJzdCA9ICRkaXNjX2luZm8tPnsn
fid9Ow0KICAgIGRlbGV0ZSAkZGlzY19pbmZvLT57J34nfTsNCiAgICBmb3JlYWNoIG15ICRkaXNj
X3Bhcm0gKCBrZXlzICV7JGRpc2NfaW5mb30gKSB7DQoJbXkgJGxvbmduYW1lID0gJHNob3J0X25h
bWVfbWFwLT57JGRpc2NfcGFybX07DQoJaWYoICRsb25nbmFtZSAgJiYgICRsb25nbmFtZSBuZSAk
ZGlzY19wYXJtICkgew0KCSAgICAkZGlzY19pbmZvLT57JGxvbmduYW1lfSA9ICRkaXNjX2luZm8t
PnskZGlzY19wYXJtfTsNCgkgICAgZGVsZXRlICRkaXNjX2luZm8tPnskZGlzY19wYXJtfTsNCgkg
ICAgJGRpc2NfcGFybSA9ICRsb25nbmFtZTsNCgl9DQoJaWYoICR0b3BpY19zdWJzdCAgJiYgICRk
aXNjX3Bhcm0gPX4gL14uKl90b3BpYyQvICkgew0KCSAgICAkZGlzY19pbmZvLT57JGRpc2NfcGFy
bX0gPX4gcy9efi8kdG9waWNfc3Vic3QvOw0KCSAgICAkZGlzY19pbmZvLT57JGRpc2NfcGFybX0g
PX4gcy9+JC8kdG9waWNfc3Vic3QvOw0KCX0NCiAgICB9DQp9DQoNCnN1YiBjcmVhdGVfZGlzY292
ZXJ5X21lc3NhZ2Ugew0KICAgIG15KCAkc2VsZiApID0gQF87DQoNCiAgICAjIyMjIyMjIyMjIyMj
DQogICAgIyBDcmVhdGUgZGlzY292ZXJ5IG1lc3NhZ2UsIHdpbGwgb25seSBiZSBwdWJsaXNoZWQg
aWYgJHNlbGYtPntkaXNjb3ZlcmFibGV9IGlzIHRydWUNCiAgICAjIyMjIyMjIyMjIyMjDQoNCiAg
ICAmbXF0dF9CYXNlSXRlbTo6bm9ybWFsaXplX2Rpc2NvdmVyeV9pbmZvKCAkc2VsZi0+e2Rpc2N9
ICk7DQoNCiAgICAjIFVzZSBvcmlnaW5hbCB0b3BpYyBhbmQgZGlzY292ZXJ5IG1lc3NhZ2UgZm9y
IG1xdHRfRGlzY292ZXJlZEl0ZW0NCiAgICBpZiggISRzZWxmLT5pc2EoJ21xdHRfRGlzY292ZXJl
ZEl0ZW0nKSApIHsNCglteSAkZGlzY190b3BpYzsNCglteSAkZGlzY19tc2c7DQogICAgDQoJJGRp
c2NfdG9waWMgPSAiJHNlbGYtPntpbnRlcmZhY2V9LT57ZGlzY292ZXJ5X3B1Ymxpc2hfcHJlZml4
fS8iOw0KCWlmKCAkc2VsZi0+e2ludGVyZmFjZX0tPnt1c2VfaGFfZGV2aWNlX2Rpc2N9ICkgew0K
CSAgICAkZGlzY190b3BpYyAuPSAiZGV2aWNlLyI7DQoJfSBlbHNlIHsNCgkgICAgJGRpc2NfdG9w
aWMgLj0gIiRzZWxmLT57ZGlzY190eXBlfS8iOw0KCX0NCglpZiggJHNlbGYtPntub2RlX2lkfSAp
IHsNCgkgICAgJGRpc2NfdG9waWMgLj0gIiRzZWxmLT57bm9kZV9pZH0vIjsNCgl9DQoJaWYoICRz
ZWxmLT57aW50ZXJmYWNlfS0+e3VzZV9oYV9kZXZpY2VfZGlzY30gKSB7DQoJICAgICRkaXNjX3Rv
cGljIC49ICIkc2VsZi0+e2Rpc2N9LT57ZGV2aWNlfS0+e2lkZW50aWZpZXJzfS9jb25maWciOw0K
CX0gZWxzZSB7DQoJICAgICRkaXNjX3RvcGljIC49ICIkc2VsZi0+e2Rpc2NfaW5mb30tPnt1bmlx
dWVfaWR9L2NvbmZpZyI7DQoJfQ0KCW15ICRqc29uX29iaiA9IEpTT04tPm5ldy0+YWxsb3dfbm9u
cmVmKDEpOw0KCSRkaXNjX21zZyA9ICRqc29uX29iai0+ZW5jb2RlKCAkc2VsZi0+e2Rpc2N9ICk7
DQoNCgkkc2VsZi0+e2Rpc2NfdG9waWN9ID0gJGRpc2NfdG9waWM7DQoJJHNlbGYtPntkaXNjX21z
Z30gPSAkZGlzY19tc2c7DQogICAgfQ0KDQogICAgJHNlbGYtPnB1Ymxpc2hfZGlzY292ZXJ5X21l
c3NhZ2UoKTsNCn0NCg0Kc3ViIHB1Ymxpc2hfZGlzY292ZXJ5X21lc3NhZ2Ugew0KICAgIG15ICgk
c2VsZikgPSBAXzsNCiAgICBteSAkdG9waWM7DQogICAgbXkgJG1zZzsNCiAgICBteSAkaW50ZXJm
YWNlOw0KDQogICAgJGludGVyZmFjZSA9ICRzZWxmLT57aW50ZXJmYWNlfTsNCiAgICBpZiggISRz
ZWxmLT57aW50ZXJmYWNlfS0+aXNDb25uZWN0ZWQoKSApIHsNCgkkc2VsZi0+ZXJyb3IoICJVbmFi
bGUgdG8gcHVibGlzaCAkc2VsZi0+e21xdHRfbmFtZX0gZGlzY292ZXJ5IGRhdGEgLS0gJGludGVy
ZmFjZS0+e2luc3RhbmNlfSBub3QgY29ubmVjdGVkIiApOw0KCXJldHVybiAwOw0KICAgIH0NCiAg
ICBpZiggISRzZWxmLT57aW50ZXJmYWNlfS0+e2Rpc2NvdmVyeV9wdWJsaXNoX3ByZWZpeH0gKSB7
DQoJJHNlbGYtPmRlYnVnKCAyLCAiU2tpcHBlZDogIi4gICRzZWxmLT57bXF0dF9uYW1lfSAuICcg
LS0gaW50ZXJmYWNlIGhhcyBubyBkaXNjb3ZlcnkgcHJlZml4LicgKTsNCglyZXR1cm4gMDsNCiAg
ICB9DQogICAgaWYoICEkc2VsZi0+e2Rpc2NvdmVyYWJsZX0gKSB7DQoJJHNlbGYtPmRlYnVnKCAy
LCAiTm9uLWRpc2NvdmVyYWJsZSBvYmplY3Qgc2tpcHBlZDogIi4gICRzZWxmLT57bXF0dF9uYW1l
fSApOw0KCXJldHVybiAwOw0KICAgIH0NCiAgICBpZiggJHNlbGYtPnttcXR0X3R5cGV9IGVxICdk
aXNjb3ZlcnknICkgew0KCSRzZWxmLT5kZWJ1ZyggMiwgIlNraXBwZWQ6ICIuICAkc2VsZi0+e21x
dHRfbmFtZX0gLiAnIC0tIGRpc2NvdmVyeSBmbGFnIG5vdCBzZXQuJyApOw0KCXJldHVybiAwOw0K
ICAgIH0NCg0KICAgIG15ICgkdG9waWMsICRtc2cpID0gKCRzZWxmLT57ZGlzY190b3BpY30sICRz
ZWxmLT57ZGlzY19tc2d9KTsNCiAgICBpZiggJHRvcGljICAmJiAgJG1zZyApIHsNCgkkc2VsZi0+
ZGVidWcoIDIsICJQdWJsaXNoaW5nIGRpc2NvdmVyeSBtZXNzYWdlIFQ6JyR0b3BpYycgICBNOick
bXNnJyIgKTsNCgkkc2VsZi0+dHJhbnNtaXRfbXF0dF9tZXNzYWdlKCAkdG9waWMsICRtc2csIDEg
KTsNCglyZXR1cm4gMTsNCiAgICB9DQogICAgcmV0dXJuIDA7DQp9DQoNCiMgLVsgRmluaSAtIG1x
dHRfQmFzZUl0ZW0gXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQ0KDQoNCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCnBhY2thZ2UgbXF0
dF9Mb2NhbEl0ZW07DQoNCnVzZSBzdHJpY3Q7DQoNCnVzZSBEYXRhOjpEdW1wZXI7DQp1c2UgSGFz
aDo6TWVyZ2U7DQoNCkBtcXR0X0xvY2FsSXRlbTo6SVNBID0gKCAnbXF0dF9CYXNlSXRlbScgKTsN
Cg0KDQo9aXRlbSBDPG5ldyhtcXR0X2ludGVyZmFjZSwgbmFtZSwgdHlwZSwgbG9jYWxfb2JqZWN0
LCB0b3BpY3BhdHRlcm4sIGRpc2NvdmVyYWJsZSwgZnJpZW5kbHlfbmFtZSwgc3RhdGVfdG9waWMs
IGNtbmRfdG9waWMpPg0KDQogICAgQ3JlYXRlcyBhIE1RVFQgTG9jYWwgSXRlbS9vYmplY3QgdGhh
dCB3aWxsIHB1Ymxpc2ggc3RhdGUgaW5mb3JtYXRpb24gb2YgdGhlIGxvY2FsIG9iamVjdCBhbmQg
cmVzcG9uZCB0byBtcXR0IGNvbW1hbmRzIGZvciB0aGUgb2JqZWN0DQoNCj1jdXQNCg0Kc3ViIG5l
dyB7ICAgICAjIyMgbXF0dF9Mb2NhbEl0ZW0NCiAgICBteSAoICRjbGFzcywgJGludGVyZmFjZSwg
JG5hbWUsICR0eXBlLCAkbG9jYWxfb2JqZWN0LCAkdG9waWNwYXR0ZXJuLCAkZGlzY292ZXJhYmxl
LCAkZnJpZW5kbHlfbmFtZSwgJHN0YXRldG9waWMsICRjbW5kdG9waWMgKSA9IEBfOw0KICAgIG15
ICgkYmFzZV90eXBlLCAkZGV2aWNlX2NsYXNzLCAkc3RhdGVfY2xhc3MsICR1bml0X29mX20pOw0K
ICAgIG15ICRub2RlX2lkOw0KICAgIG15ICRtcXR0X25hbWU7DQogICAgbXkgJHRvcGljX3ByZWZp
eDsNCiAgICBteSAkbGlzdGVuX3RvcGljOw0KDQogICAgKCRiYXNlX3R5cGUsICRkZXZpY2VfY2xh
c3MsICRzdGF0ZV9jbGFzcywgJHVuaXRfb2ZfbSkgPSAkdHlwZSA9fiBtL14oW146XSopOj8oW146
XSopOj8oW146XSopOj8oW146XSopJC87DQoNCiAgICAjYXV0byBwb3B1bGF0ZSB0eXBlIGFuZCBj
bGFzcyBpZiB0aGUgb2JqZWN0IGhhcyB0aGVzZSBlbGVtZW50cyBlbWJlZGRlZCwgYnV0IGRvbid0
IG92ZXJyaWRlIGV4cGxpY2l0bHkgc2V0IGRlZmluaXRpb25zDQogICAgJGJhc2VfdHlwZSA9ICRs
b2NhbF9vYmplY3QtPnttcXR0bG9jYWxpdGVtfS0+e2Jhc2VfdHlwZX0gaWYgKChkZWZpbmVkICRs
b2NhbF9vYmplY3QtPnttcXR0bG9jYWxpdGVtfS0+e2Jhc2VfdHlwZX0gKSBhbmQgKCEkdHlwZSkp
Ow0KICAgICRkZXZpY2VfY2xhc3MgPSAkbG9jYWxfb2JqZWN0LT57bXF0dGxvY2FsaXRlbX0tPntk
ZXZpY2VfY2xhc3N9IGlmICgoZGVmaW5lZCAkbG9jYWxfb2JqZWN0LT57bXF0dGxvY2FsaXRlbX0t
PntkZXZpY2VfY2xhc3N9ICkgYW5kICghJGRldmljZV9jbGFzcykpOw0KICAgICRzdGF0ZV9jbGFz
cyA9ICRsb2NhbF9vYmplY3QtPnttcXR0bG9jYWxpdGVtfS0+e3N0YXRlX2NsYXNzfSBpZiAoKGRl
ZmluZWQgJGxvY2FsX29iamVjdC0+e21xdHRsb2NhbGl0ZW19LT57c3RhdGVfY2xhc3N9ICkgYW5k
ICghJHN0YXRlX2NsYXNzKSk7DQogICAgJHVuaXRfb2ZfbSA9ICRsb2NhbF9vYmplY3QtPnttcXR0
bG9jYWxpdGVtfS0+e3VuaXRfb2ZfbWVhc3VyZW1lbnR9IGlmICgoZGVmaW5lZCAkbG9jYWxfb2Jq
ZWN0LT57bXF0dGxvY2FsaXRlbX0tPnt1bml0X29mX21lYXN1cmVtZW50fSApIGFuZCAoISR1bml0
X29mX20pKTsNCg0KICAgICRpbnRlcmZhY2UtPmRlYnVnKCAxLA0KICAgICAgICAiTmV3IG1xdHRf
TG9jYWxJdGVtKCAkaW50ZXJmYWNlLT57aW5zdGFuY2V9LCAnJG1xdHRfbmFtZScsICckdHlwZScs
ICckbG9jYWxfb2JqZWN0JywgIg0KICAgICAgICAuICInJHRvcGljcGF0dGVybicsICRkaXNjb3Zl
cmFibGUsICckZnJpZW5kbHlfbmFtZScsICINCiAgICAgICAgLiAiJyIgLiAoJHN0YXRldG9waWMv
LydbdW5kZWZdJykgLiAiJywgIg0KICAgICAgICAuICInIiAuICgkY21uZHRvcGljLy8nW3VuZGVm
XScpDQogICAgICAgIC4gIicsIEJhc2VfdHlwZT1bJGJhc2VfdHlwZV0sIERldmljZV9DbGFzcz1b
JGRldmljZV9jbGFzc10sIFN0YXRlX0NsYXNzPVskc3RhdGVfY2xhc3NdLCBVbml0X29mX01lYXN1
cmVtZW50PVskdW5pdF9vZl9tXSINCiAgICAgICAgLiAiJyApIg0KICAgICk7DQoNCiAgICBpZigg
IWdyZXAoIC9eJGJhc2VfdHlwZSQvLCAoJ2xpZ2h0Jywnc3dpdGNoJywnYmluYXJ5X3NlbnNvcics
ICdzZW5zb3InLCAnc2NlbmUnLCAnc2NlbmVfc3dpdGNoJywgJ3NlbGVjdCcsICd0ZXh0JywgJ251
bWJlcicsICdjb3ZlcicgKSApICkgew0KCSRpbnRlcmZhY2UtPmVycm9yKCAiSW52YWxpZCBtcXR0
IHR5cGUgJyR0eXBlJyIgKTsNCglyZXR1cm47DQogICAgfQ0KDQogICAgaWYoICRsb2NhbF9vYmpl
Y3QgICYmICAhcmVmICRsb2NhbF9vYmplY3QgKSB7DQoJJGludGVyZmFjZS0+ZXJyb3IoICJJbnZh
bGlkIGxvY2FsIG9iamVjdDogJGxvY2FsX29iamVjdCIgKTsNCglyZXR1cm47DQogICAgfQ0KDQog
ICAgJHRvcGljcGF0dGVybiA9fiBzIi9bKyNdPyQiIjsJIyBSZW1vdmUgdHJhaWxpbmcgc2xhc2gg
YW5kIHdpbGRjYXJkLCBpZiBwcmVzZW50Lg0KICAgIG15IChAdG9waWNfcGFydHMpID0gc3BsaXQo
ICIvIiwgJHRvcGljcGF0dGVybiwgMiApOw0KICAgIGlmKCAkI3RvcGljX3BhcnRzID09IDEgKSB7
DQoJJG5vZGVfaWQgPSAkdG9waWNfcGFydHNbMF07DQoJJG1xdHRfbmFtZSA9ICR0b3BpY19wYXJ0
c1sxXTsNCgkkdG9waWNfcHJlZml4ID0gIiRub2RlX2lkLyRtcXR0X25hbWUiOw0KICAgIH0gZWxz
ZSB7DQoJJG1xdHRfbmFtZSA9ICR0b3BpY19wYXJ0c1swXTsNCgkkdG9waWNfcHJlZml4ID0gJG1x
dHRfbmFtZTsNCiAgICB9DQogICAgaWYoICEkbXF0dF9uYW1lICkgew0KCSRpbnRlcmZhY2UtPmVy
cm9yKCAiSW52YWxpZCB0b3BpYyBwYXR0ZXJuICckdG9waWNwYXR0ZXJuJyBvbiBvYmplY3QgJyRu
YW1lJyIgKTsNCglyZXR1cm47DQogICAgfQ0KICAgIGlmKCAkaW50ZXJmYWNlLT57dG9waWNfcHJl
Zml4fSApIHsNCgkkdG9waWNfcHJlZml4ID0gIiRpbnRlcmZhY2UtPnt0b3BpY19wcmVmaXh9LyR0
b3BpY19wcmVmaXgiOw0KICAgIH0NCiAgICAkbGlzdGVuX3RvcGljID0gIiR0b3BpY19wcmVmaXgv
KyI7DQoNCiAgICBteSAkc2VsZiA9IG5ldyBtcXR0X0Jhc2VJdGVtKCAkaW50ZXJmYWNlLCAkbXF0
dF9uYW1lLCAkYmFzZV90eXBlLCAkbGlzdGVuX3RvcGljLCAkZGlzY292ZXJhYmxlICk7DQogICAg
cmV0dXJuDQogICAgICBpZiAhJHNlbGY7DQoNCiAgICBibGVzcyAkc2VsZiwgJGNsYXNzOw0KDQog
ICAgJHNlbGYtPntub2RlX2lkfSA9ICRub2RlX2lkOw0KICAgICRzZWxmLT5zZXRfZGlzY292ZXJ5
X25hbWVzKCAkZnJpZW5kbHlfbmFtZSwgJG1xdHRfbmFtZSApOw0KDQogICAgJHN0YXRldG9waWMg
fHw9ICdzdGF0ZSc7DQogICAgJHNlbGYtPntkaXNjX2luZm99LT57c3RhdGVfdG9waWN9ID0gJHNl
bGYtPm1ha2VfdG9waWMoJHRvcGljX3ByZWZpeCxzcGxpdCgnOicsJHN0YXRldG9waWMpKTsNCiAg
ICBpZiggJGRldmljZV9jbGFzcyApIHsNCgkkc2VsZi0+e2Rpc2NfaW5mb30tPntkZXZpY2VfY2xh
c3N9ID0gJGRldmljZV9jbGFzczsNCiAgICB9DQogICAgaWYoICRzdGF0ZV9jbGFzcyApIHsNCgkk
c2VsZi0+e2Rpc2NfaW5mb30tPntzdGF0ZV9jbGFzc30gPSAkc3RhdGVfY2xhc3M7DQogICAgfQ0K
ICAgIGlmKCAkdW5pdF9vZl9tICkgew0KCSRzZWxmLT57ZGlzY19pbmZvfS0+e3VuaXRfb2ZfbWVh
c3VyZW1lbnR9ID0gJHVuaXRfb2ZfbTsNCiAgICB9DQogICAgaWYoICRiYXNlX3R5cGUgZXEgJ2xp
Z2h0JyApIHsNCgkkY21uZHRvcGljIHx8PSAnbGV2ZWwnOw0KICAgIH0gZWxzZSB7DQoJJGNtbmR0
b3BpYyB8fD0gJ3NldCc7DQogICAgfQ0KICAgICRzZWxmLT57ZGlzY19pbmZvfS0+e2NvbW1hbmRf
dG9waWN9ID0gJHNlbGYtPm1ha2VfdG9waWMoJHRvcGljX3ByZWZpeCxzcGxpdCgnOicsJGNtbmR0
b3BpYykpOw0KICAgIGlmKCAkYmFzZV90eXBlIGVxICdsaWdodCcgKSB7DQoJJHNlbGYtPntkaXNj
X2luZm99LT57c2NoZW1hfSA9ICdqc29uJzsNCgkkc2VsZi0+e2Rpc2NfaW5mb30tPnticmlnaHRu
ZXNzfSA9ICJ0cnVlIjsNCgkkc2VsZi0+e2Rpc2NfaW5mb30tPnticmlnaHRuZXNzX3NjYWxlfSA9
IDEwMDsNCiAgICB9IGVsc2lmKCAkYmFzZV90eXBlIGVxICdzd2l0Y2gnICkgew0KICAgIH0gZWxz
aWYoICRiYXNlX3R5cGUgZXEgJ3NjZW5lX3N3aXRjaCcgKSB7DQoJIyAkc2VsZi0+e2Rpc2NfaW5m
b30tPntvcHRpbWlzdGljfSA9ICd0cnVlJzsNCgkjIGRlbGV0ZSAkc2VsZi0+e2Rpc2NfaW5mb30t
PntzdGF0ZV90b3BpY307DQogICAgfSBlbHNpZiggJGJhc2VfdHlwZSBlcSAnc2NlbmUnICkgew0K
CSRzZWxmLT57ZGlzY19pbmZvfS0+e3BheWxvYWRfb259ID0gJ09OJzsNCglkZWxldGUgJHNlbGYt
PntkaXNjX2luZm99LT57c3RhdGVfdG9waWN9Ow0KICAgIH0gZWxzaWYoICRiYXNlX3R5cGUgZXEg
J2NvdmVyJyApIHsNCiAgICB9IGVsc2lmKCAkYmFzZV90eXBlIGVxICdiaW5hcnlfc2Vuc29yJyAp
IHsNCglkZWxldGUgJHNlbGYtPntkaXNjX2luZm99LT57Y29tbWFuZF90b3BpY307DQogICAgfSBl
bHNpZiggJGJhc2VfdHlwZSBlcSAnc2Vuc29yJyApIHsNCglkZWxldGUgJHNlbGYtPntkaXNjX2lu
Zm99LT57Y29tbWFuZF90b3BpY307DQoJaWYoICRkZXZpY2VfY2xhc3MgZXEgJ3RlbXBlcmF0dXJl
JyApIHsNCgkgICAgJHNlbGYtPntkaXNjX2luZm99LT57dW5pdF9vZl9tZWFzdXJlbWVudH0gLy89
ICdDJzsNCgl9DQoJaWYoICRkZXZpY2VfY2xhc3MgZXEgJ3Bvd2VyJyApIHsNCgkgICAgJHNlbGYt
PntkaXNjX2luZm99LT57dW5pdF9vZl9tZWFzdXJlbWVudH0gLy89ICdrVyc7DQoJfQ0KCWlmKCAk
ZGV2aWNlX2NsYXNzIGVxICdlbmVyZ3knICkgew0KCSAgICAkc2VsZi0+e2Rpc2NfaW5mb30tPnt1
bml0X29mX21lYXN1cmVtZW50fSAvLz0gJ2tXaCc7DQoJfQ0KICAgIH0gZWxzaWYoICRiYXNlX3R5
cGUgZXEgJ3NlbGVjdCcgKSB7DQoJaWYoICRsb2NhbF9vYmplY3QgKSB7DQoJICAgIG15IEBzdGF0
ZV9saXN0ID0gJGxvY2FsX29iamVjdC0+Z2V0X3N0YXRlcygpOw0KCSAgICAkc2VsZi0+e2Rpc2Nf
aW5mb30tPntvcHRpb25zfSA9IFxAc3RhdGVfbGlzdDsNCgl9DQogICAgfSBlbHNpZiggJGJhc2Vf
dHlwZSBlcSAndGV4dCcgKSB7DQogICAgfSBlbHNpZiggJGJhc2VfdHlwZSBlcSAnbnVtYmVyJyAp
IHsNCiAgICB9DQoNCiAgICAkc2VsZi0+e2lzX2xvY2FsfSA9IDE7DQoNCiAgICBpZiggJGxvY2Fs
X29iamVjdCApIHsNCgkjIFRpZSBtcXR0IG9iamVjdCB0byBsb2NhbF9vYmplY3Qgc28gc3RhdGUg
Y2hhbmdlcyBhcmUgc2VudCB0byBtcXR0IGJyb2tlcg0KCSRsb2NhbF9vYmplY3QtPnRpZV9pdGVt
cygkc2VsZik7DQoJJGxvY2FsX29iamVjdC0+e21xdHRfTG9jYWxfSXRlbX0gPSAkc2VsZjsNCgkk
c2VsZi0+e2xvY2FsX2l0ZW19ID0gJGxvY2FsX29iamVjdDsNCiAgICB9DQoNCiAgICBpZiggJHNl
bGYtPntsb2NhbF9pdGVtfSAgJiYgICRzZWxmLT57bG9jYWxfaXRlbX0tPntkZXZpY2VfaWR9ICkg
ew0KCSRzZWxmLT57ZGlzY19pbmZvfS0+e3VuaXF1ZV9pZH0gPSAkc2VsZi0+e25vZGVfaWR9IC4g
J18nIC4gJHNlbGYtPntsb2NhbF9pdGVtfS0+e2RldmljZV9pZH07DQoJaWYoICRzZWxmLT57bG9j
YWxfaXRlbX0tPnttX2dyb3VwfSApIHsNCgkgICAgJHNlbGYtPntkaXNjX2luZm99LT57dW5pcXVl
X2lkfSAuPSAkc2VsZi0+e2xvY2FsX2l0ZW19LT57bV9ncm91cH07DQoJfQ0KICAgIH0gZWxzZSB7
DQoJJHNlbGYtPntkaXNjX2luZm99LT57dW5pcXVlX2lkfSA9ICRzZWxmLT57bm9kZV9pZH0gLiAn
XycgLiAkc2VsZi0+e21xdHRfbmFtZX07DQoJJHNlbGYtPntkaXNjX2luZm99LT57dW5pcXVlX2lk
fSA9fiBzLyAvXy9nOw0KICAgIH0NCg0KICAgICMgbXkgJGQgPSBEYXRhOjpEdW1wZXItPm5ldygg
WyRzZWxmXSApOw0KICAgICMgJGQtPk1heGRlcHRoKCAzICk7DQogICAgIyAkc2VsZi0+ZGVidWco
IDMsICJsb2NhbGUgaXRlbSBjcmVhdGVkOiBcbiIgLiAkZC0+RHVtcCApOw0KDQoNCiAgICAjIFdl
IG1heSBuZWVkIGZsYWdzIHRvIGRlYWwgd2l0aCBYTUwsIEpTT04gb3IgVGV4dA0KICAgIHJldHVy
biAkc2VsZjsNCn0NCg0KPWl0ZW0gQzxyZWNlaXZlX21xdHRfbWVzc2FnZSggdG9waWMsIG1lc3Nh
Z2UsIHJldGFpbmVkICk+DQogICAgUHJvY2VzcyByZWNlaXZlZCBtcXR0IG1lc3NhZ2UNCj1jdXQN
Cg0Kc3ViIHJlY2VpdmVfbXF0dF9tZXNzYWdlIHsNCiAgICBteSAoICRzZWxmLCAkdG9waWMsICRt
ZXNzYWdlLCAkcmV0YWluZWQgKSA9IEBfOw0KICAgIG15ICRvYmpfbmFtZTsNCg0KICAgICMjIw0K
ICAgICMjIyBJbmNvbWluZyAoTVFUVCB0byBNSCkgbWVzc2FnZSBmb3IgTG9jYWxJdGVtDQogICAg
IyMjDQogICAgIyBMb2NhbCBvYmplY3RzIG9ubHkgc3Vic2NyaWJlIHRvIHRoZSBjb21tYW5kIHRv
cGljLCBhbGwgbXF0dCBzdGF0ZSBtZXNzYWdlcyBhcmUgaWdub3JlZA0KICAgICMgV2hlbiBhbiBt
cXR0IGNvbW1hbmQgY29tZXMgaW4sIHRoZSBsb2NhbCBvYmplY3QgaXMgc2V0DQogICAgIyBJZiB0
aGUgbG9jYWwgb2JqZWN0IHNldCBpcyBzdWNjZXNzZnVsLCBpdCB3aWxsIHNldCB0aGUgbXF0dCB0
aWVkIG9iamVjdA0KICAgICMgVGhlIG1xdHQgb2JqZWN0IHdpbGwgdGhlbiBzZW5kIG91dCB0aGUg
c3RhdGUgbWVzc2FnZQ0KDQogICAgaWYoICRzZWxmLT57bG9jYWxfaXRlbX0gKSB7DQoJJG9ial9u
YW1lID0gJHNlbGYtPntsb2NhbF9pdGVtfS0+Z2V0X29iamVjdF9uYW1lKCk7DQogICAgfSBlbHNl
IHsNCgkkb2JqX25hbWUgPSAkc2VsZi0+Z2V0X29iamVjdF9uYW1lKCk7DQogICAgfQ0KICAgIGlm
KCAkdG9waWMgZXEgJHNlbGYtPntkaXNjX2luZm99LT57c3RhdGVfdG9waWN9ICkgew0KCSRzZWxm
LT5kZWJ1ZyggMiwgIkxvY2FsSXRlbSAkb2JqX25hbWUgaWdub3Jpbmcgc3RhdGUgdG9waWMgbWVz
c2FnZSBNOickbWVzc2FnZSciICk7DQogICAgfSBlbHNpZiggJHRvcGljIGVxICRzZWxmLT57ZGlz
Y19pbmZvfS0+e2NvbW1hbmRfdG9waWN9ICkgew0KCWlmKCAkcmV0YWluZWQgKSB7DQoJICAgICMg
Y29tbWFuZCBtZXNzYWdlcyBzaG91bGQgbmV2ZXIgYmUgcmV0YWluZWQsIGJ1dCBqdXN0IGluIGNh
c2UuLi4NCgkgICAgJHNlbGYtPmxvZyggIkxvY2FsSXRlbSByZWNlaXZlZCByZXRhaW5lZCBjb21t
YW5kIG1lc3NhZ2UgLS0gaWdub3JpbmciICk7DQoJICAgIHJldHVybjsNCgl9DQoJbXkgJHNldHZh
bCA9ICRzZWxmLT5kZWNvZGVfbXF0dF9wYXlsb2FkKCAkdG9waWMsICRtZXNzYWdlLCAkcmV0YWlu
ZWQgKTsNCglpZiggZGVmaW5lZCAkc2V0dmFsICkgew0KCSAgICAkc2VsZi0+ZGVidWcoIDEsICJM
b2NhbEl0ZW0gTVFUVCB0byBNSCBzZXR0aW5nICRvYmpfbmFtZTo6c2V0KCRzZXR2YWwpIGJhc2Vk
IG9uIHJlY2VpdmVkIG1lc3NhZ2UgJyRtZXNzYWdlJyIgKTsNCgkgICAgaWYoICRzZWxmLT57bG9j
YWxfaXRlbX0gKSB7DQoJCSRzZWxmLT57bG9jYWxfaXRlbX0tPnNldCggJHNldHZhbCwgJ21xdHQn
ICk7DQoJICAgIH0gZWxzZSB7DQoJCSRzZWxmLT5TVVBFUjo6c2V0KCAkc2V0dmFsLCAnbXF0dCcg
KTsNCgkgICAgfQ0KCX0NCiAgICB9IGVsc2Ugew0KICAgICAgICAkc2VsZi0+ZGVidWcoIDIsICJM
b2NhbEl0ZW0gdW5oYW5kbGVkIG1lc3NhZ2UgVDonJHRvcGljJyAgTTonJG1lc3NhZ2UnIiApOw0K
ICAgIH0NCn0NCg0KPWl0ZW0gQzxzZXQoc3RhdGUsIHBfc2V0YnksIHBfcmVzcG9uc2UpPg0KICAg
IEhhbmRsZSBsb2NhbCBzZXQgY2FsbA0KPWN1dA0KDQpzdWIgc2V0IHsgICAgIyMjIExvY2FsSXRl
bQ0KICAgIG15ICggJHNlbGYsICRzZXR2YWwsICRwX3NldGJ5LCAkcF9yZXNwb25zZSApID0gQF87
DQogICAgbXkgJG9ial9uYW1lOw0KDQogICAgIyBUaGlzIGlzIGEgbG9jYWxseSBjYWxsZWQgc2V0
KCRzZXR2YWwpIC0tIGVpdGhlciBieSB0aGUgdGllZCBsb2NhbF9pdGVtIG9yIGRpcmVjdGx5IGNh
bGxlZCBvbiB0aGUgb2JqZWN0IGlmIHRoZXJlIGlzIG5vIHRpZWQgaXRlbQ0KDQogICAgcmV0dXJu
IGlmICZtYWluOjpjaGVja19mb3JfdGllZF9maWx0ZXJzKCAkc2VsZiwgJHNldHZhbCApOw0KDQog
ICAgaWYoICRzZWxmLT57bG9jYWxfaXRlbX0gKSB7DQoJJG9ial9uYW1lID0gJHNlbGYtPntsb2Nh
bF9pdGVtfS0+Z2V0X29iamVjdF9uYW1lKCk7DQogICAgfSBlbHNlIHsNCgkkb2JqX25hbWUgPSAk
c2VsZi0+Z2V0X29iamVjdF9uYW1lKCk7DQogICAgfQ0KDQogICAgaWYoICRzZWxmLT57bG9jYWxf
aXRlbX0gICYmICAkcF9zZXRieSBuZSAkc2VsZi0+e2xvY2FsX2l0ZW19ICkgew0KCSRzZWxmLT5l
cnJvciggIkxvY2FsSXRlbSAkb2JqX25hbWUgc2V0KCRzZXR2YWwpIGNhbGxlZCBieSBvdGhlciB0
aGFuIHRpZWQgbG9jYWwgaXRlbSAtLSAkcF9zZXRieSIgKTsNCglyZXR1cm47DQogICAgfQ0KDQog
ICAgIyMjDQogICAgIyMjIE91dGdvaW5nIE1IIHRvIE1RVFQgZm9yIExvY2FsSXRlbQ0KICAgICMj
Iw0KICAgIG15ICR0b3BpYyA9ICRzZWxmLT57ZGlzY19pbmZvfS0+e3N0YXRlX3RvcGljfTsNCiAg
ICBteSAkcGF5bG9hZCA9ICRzZWxmLT5lbmNvZGVfbXF0dF9wYXlsb2FkKCAkc2V0dmFsLCAkdG9w
aWMgKTsNCiAgICBpZiggJHNlbGYtPnttcXR0X3R5cGV9IG5lICdzY2VuZV9zd2l0Y2gnICAmJiAg
JHRvcGljICAmJiAgZGVmaW5lZCAoJHBheWxvYWQpICApIHsNCgkjIE5vdGUgdGhhdCBvdXRnb2lu
ZyBzdGF0ZSBtZXNzYWdlcyBhcmUgbWFya2VkIHRvIGJlIHJldGFpbmVkLCBzbyB0aGF0IGFueSBj
bGllbnQgY2FuIGdldCB0aGUgbGF0ZXN0IHN0YXRlIGluZm8NCgkjIHdoZW4gaXQgc3RhcnRzIHVw
DQoJbXkgJHJldGFpbiA9IDE7DQoJaWYoICRzZWxmLT57ZGlzY190eXBlfSBlcSAnc2NlbmUnICkg
ew0KCSAgICAkcmV0YWluID0gMDsNCgl9DQoJJHNlbGYtPmRlYnVnKCAxLCAiTUggdG8gTVFUVCBM
b2NhbEl0ZW0gJHtvYmpfbmFtZX0gc2V0KCRzZXR2YWwpIHB1Ymxpc2hpbmcgc3RhdGUgbWVzc2Fn
ZSAnJHBheWxvYWQnIHRvIG1xdHQiICk7DQoJJHNlbGYtPntoYXNfcHVibGlzaGVkX3N0YXRlfSA9
IDE7DQoJJHNlbGYtPnRyYW5zbWl0X21xdHRfbWVzc2FnZSggJHRvcGljLCAkcGF5bG9hZCwgJHJl
dGFpbiApOw0KICAgIH0gZWxzZSB7DQoJJHNlbGYtPmRlYnVnKCAxLCAiTUggdG8gTVFUVCBMb2Nh
bEl0ZW0gJHtvYmpfbmFtZX0gLS0gc2V0KCRzZXR2YWwpIC0tIG5vIHN0YXRlIHRvcGljIG9yIHBh
eWxvYWQsIG5vdCBzZW5kaW5nIG1xdHQgbWVzc2FnZSIgKTsNCiAgICB9DQoNCiAgICBpZiggISRz
ZWxmLT57bG9jYWxfaXRlbX0gKSB7DQoJJHNlbGYtPlNVUEVSOjpzZXQoICRzZXR2YWwsICRwX3Nl
dGJ5ICk7DQogICAgfQ0KfQ0KDQpzdWIgcHVibGlzaF9zdGF0ZSB7DQogICAgbXkoICRzZWxmLCAk
b25seV91bnB1Ymxpc2hlZCApID0gQF87DQogICAgbXkgJG1zZzsNCiAgICBteSAkbXNnX3R4dDsN
CiAgICBteSAkaGFzc190eXBlOw0KICAgIG15ICRvYmpfaWQ7DQoNCiAgICBpZiggISRvbmx5X3Vu
cHVibGlzaGVkICB8fCAgISRzZWxmLT57aGFzX3B1Ymxpc2hlZF9zdGF0ZX0gKSB7DQoJbXkgJGxv
Y2FsX2l0ZW07DQoJaWYoICRzZWxmLT57bG9jYWxfaXRlbX0gKSB7DQoJICAgICRsb2NhbF9pdGVt
ID0gJHNlbGYtPntsb2NhbF9pdGVtfTsNCgl9IGVsc2Ugew0KCSAgICAkbG9jYWxfaXRlbSA9ICRz
ZWxmOw0KCX0NCglteSAkY3VycmVudF9zdGF0ZSA9ICRsb2NhbF9pdGVtLT5zdGF0ZTsNCglteSAk
c2VsZl9uYW1lID0gJGxvY2FsX2l0ZW0tPmdldF9vYmplY3RfbmFtZSgpOw0KCWlmKCBkZWZpbmVk
ICRjdXJyZW50X3N0YXRlICkgew0KCSAgICBpZiggISRsb2NhbF9pdGVtLT5jYW4oJ2lzX3Jlc3Bv
bmRlcicpIHx8ICRsb2NhbF9pdGVtLT5pc19yZXNwb25kZXIgKSB7DQoJCSRzZWxmLT5kZWJ1Zygg
MSwgInNldHRpbmcgbG9jYWwgb2JqZWN0ICRzZWxmX25hbWUgdG8gY3VycmVudF9zdGF0ZTogJGN1
cnJlbnRfc3RhdGUiICk7DQoJCSRsb2NhbF9pdGVtLT5zZXQoICRjdXJyZW50X3N0YXRlICk7DQoJ
ICAgIH0gZWxzZSB7DQoJCSRzZWxmLT5kZWJ1ZyggMSwgIm9iamVjdCAkc2VsZl9uYW1lIGlzIG5v
dCBhIHJlc3BvbmRlciIgKTsNCgkgICAgfQ0KCX0gZWxzZSB7DQoJICAgICRzZWxmLT5kZWJ1Zygg
MSwgIm9iamVjdCAkc2VsZl9uYW1lIGhhcyBubyBzdGF0ZSIgKTsNCgl9DQogICAgfQ0KfQ0KDQoN
Cj1pdGVtIEM8KHB1Ymxpc2hfY3VycmVudF9zdGF0ZXMoIG9ubHlfdW5wdWJsaXNoZWQgKSk+DQog
ICAgQ2xhc3MgZnVuY3Rpb24gdG8gcHVibGlzaCB0aGUgY3VycmVudCBzdGF0ZXMgb2YgYWxsIGxv
Y2FsIG1xdHQgb2JqZWN0cyBmb3IgYWxsIG1xdHQgc2VydmVycw0KDQogICAgVGhpcyBmdW5jdGlv
biBoYXMgYmVlbiByZXBsYWNlZCBieSBwdWJsaXNoX2N1cnJlbnRfc3RhdGVzKCkgb24gdGhlIG1x
dHQgb2JqZWN0DQo9Y3V0DQoNCnN1YiBwdWJsaXNoX2N1cnJlbnRfc3RhdGVzIHsNCiAgICBteSgg
JG9ubHlfdW5wdWJsaXNoZWQgKSA9IEBfOw0KDQogICAgJm1xdHQ6OmxvZyggdW5kZWYsICJQdWJs
aXNoaW5nIGN1cnJlbnQgc3RhdGUgZGF0YSBmb3IgbG9jYWwgb2JqZWN0cyIgKTsNCiAgICBmb3Jl
YWNoIG15ICRpbnRlcmZhY2UgKCAmbXF0dDo6Z2V0X2ludGVyZmFjZV9saXN0KCkgKSB7DQoJJGlu
dGVyZmFjZS0+cHVibGlzaF9jdXJyZW50X3N0YXRlcyggJG9ubHlfdW5wdWJsaXNoZWQgKTsNCiAg
ICB9DQp9DQoNCiMgLVsgRmluaSAtIG1xdHRfTG9jYWxJdGVtIF0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0NCg0KcGFja2FnZSBtcXR0X0Jhc2VSZW1vdGVJdGVtOw0KDQp1c2Ugc3RyaWN0Ow0K
DQp1c2UgSlNPTiBxdyggZGVjb2RlX2pzb24gZW5jb2RlX2pzb24gKTsgICAgICMNCnVzZSBEYXRh
OjpEdW1wZXI7DQoNCkBtcXR0X0Jhc2VSZW1vdGVJdGVtOjpJU0EgPSAoICdtcXR0X0Jhc2VJdGVt
JyApOw0KDQoNCj1pdGVtIEM8bmV3KG1xdHRfaW50ZXJmYWNlLCBuYW1lLCB0eXBlLCBsaXN0ZW50
b3BpYywgZGlzY292ZXJhYmxlICk+DQoNCiAgICBDcmVhdGVzIGEgYmFzZSBNUVRUIFJlbW90ZSBJ
dGVtLg0KICAgIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc2V0dXAgdGhlIHtkaXNjX2luZm99IHN0
cnVjdHVyZS4gIFRoYXQgaXMgbGVmdCB1cCB0byB0aGUgY2hpbGQgY2xhc3Nlcy4NCg0KPWN1dA0K
DQpzdWIgbmV3IHsgICAjIyMgbXF0dF9CYXNlUmVtb3RlSXRlbQ0KICAgIG15ICggJGNsYXNzLCAk
aW50ZXJmYWNlLCAkbXF0dF9uYW1lLCAkdHlwZSwgJGxpc3RlbnRvcGljcywgJGRpc2NvdmVyYWJs
ZSApID0gQF87DQoNCiAgICBteSAkc2VsZiA9IG5ldyBtcXR0X0Jhc2VJdGVtKCAkaW50ZXJmYWNl
LCAkbXF0dF9uYW1lLCAkdHlwZSwgJGxpc3RlbnRvcGljcywgJGRpc2NvdmVyYWJsZSApOw0KDQog
ICAgaWYoICRzZWxmLT57bXF0dF90eXBlfSBlcSAnbGlnaHQnICkgew0KCSRzZWxmLT5zZXRfc3Rh
dGVzKCAib2ZmIiwgIjIwJSIsICI0MCUiLCAiNTAlIiwgIjYwJSIsICI4MCUiLCAib24iLCAib2Zm
bGluZSIgKTsNCiAgICB9IGVsc2lmKCAkc2VsZi0+e21xdHRfdHlwZX0gZXEgJ2JpbmFyeV9zZW5z
b3InICkgew0KCSRzZWxmLT5zZXRfc3RhdGVzKCAib2ZmIiwgIm9uIiwgIm9mZmxpbmUiICk7DQog
ICAgfSBlbHNpZiggJHNlbGYtPnttcXR0X3R5cGV9IGVxICdzZW5zb3InICkgew0KICAgIH0gZWxz
aWYoICRzZWxmLT57bXF0dF90eXBlfSBlcSAnc3dpdGNoJyApIHsNCgkkc2VsZi0+c2V0X3N0YXRl
cyggIm9mZiIsICJvbiIsICJvZmZsaW5lIiApOw0KICAgIH0gZWxzaWYoICRzZWxmLT57bXF0dF90
eXBlfSBlcSAnc2NlbmUnICkgew0KCSRzZWxmLT5zZXRfc3RhdGVzKCAib2ZmIiwgIm9uIiwgIm9m
ZmxpbmUiICk7DQogICAgfQ0KDQogICAgYmxlc3MgJHNlbGYsICRjbGFzczsNCg0KICAgIHJldHVy
biAkc2VsZjsNCn0NCg0KDQo9aXRlbSBDPHJlY2VpdmVfbXF0dF9tZXNzYWdlKCB0b3BpYywgbWVz
c2FnZSwgcmV0YWluZWQpPg0KPWN1dA0KDQpzdWIgcmVjZWl2ZV9tcXR0X21lc3NhZ2Ugew0KICAg
IG15ICggJHNlbGYsICR0b3BpYywgJG1lc3NhZ2UsICRyZXRhaW5lZCApID0gQF87DQogICAgbXkg
JHBfc2V0Ynk7DQogICAgbXkgJHBfcmVzcG9uc2U7DQogICAgbXkgJHNldHZhbDsNCg0KICAgICMj
Iw0KICAgICMjIyBJbmNvbWluZyBNUVRUIHRvIE1IIG1lc3NhZ2UgZm9yIEluc3RNcXR0SXRlbQ0K
ICAgICMjIw0KICAgICMjIyBOb3RlIHRoYXQgYSBsaWdodCBvYmplY3Qgc2VlbXMgdG8gYmUgYSBz
dXBlcnNldCBvZiBhIHN3aXRjaCBzbyBJIHRoaW5rDQogICAgIyMjIHdlIGNhbiBoYW5kbGUgdGhl
IG1lc3NhZ2Ugd2l0aG91dCB0ZXN0aW5nIHRoZSBtcXR0IHR5cGUuLi4NCiAgICAjIyMNCg0KICAg
ICRzZWxmLT5kZWJ1ZyggMiwgInJlbW90ZSBpdGVtICRzZWxmLT57b2JqZWN0X25hbWV9IHJlY2Vp
dmVkIG1lc3NhZ2UgUjokcmV0YWluZWQgVDokdG9waWMgIE06JG1lc3NhZ2UiICk7DQoNCiAgICBp
ZiggJHRvcGljIGVxICRzZWxmLT57ZGlzY19pbmZvfS0+e2NvbW1hbmRfdG9waWN9DQogICAgfHwg
ICR0b3BpYyBlcSAkc2VsZi0+e2Rpc2NfaW5mb30tPnticmlnaHRuZXNzX2NvbW1hbmRfdG9waWN9
DQogICAgfHwgICR0b3BpYyBlcSAkc2VsZi0+e2Rpc2NfaW5mb30tPntjb2xvcl90ZW1wX2NvbW1h
bmRfdG9waWN9DQogICAgfHwgICR0b3BpYyBlcSAkc2VsZi0+e2Rpc2NfaW5mb30tPntlZmZlY3Rf
Y29tbWFuZF90b3BpY30NCiAgICB8fCAgJHRvcGljIGVxICRzZWxmLT57ZGlzY19pbmZvfS0+e2hz
X2NvbW1hbmRfdG9waWN9DQogICAgfHwgICR0b3BpYyBlcSAkc2VsZi0+e2Rpc2NfaW5mb30tPnty
Z2JfY29tbWFuZF90b3BpY30NCiAgICB8fCAgJHRvcGljIGVxICRzZWxmLT57ZGlzY19pbmZvfS0+
e3doaXRlX3ZhbHVlX2NvbW1hbmRfdG9waWN9DQogICAgfHwgICR0b3BpYyBlcSAkc2VsZi0+e2Rp
c2NfaW5mb30tPnt4eV9jb21tYW5kX3RvcGljfQ0KICAgICkgew0KCSRzZWxmLT5kZWJ1ZyggMiwg
InJlbW90ZSBpdGVtICRzZWxmLT57b2JqZWN0X25hbWV9IGlnbm9yaW5nIGNvbW1hbmQgdG9waWMg
bWVzc2FnZSBUOickdG9waWMnIiApOw0KCXJldHVybjsNCiAgICB9DQoNCg0KICAgIGlmKCAkdG9w
aWMgZXEgJHNlbGYtPntkaXNjX2luZm99LT57c3RhdGVfdG9waWN9DQogICAgfHwgICR0b3BpYyBl
cSAkc2VsZi0+e2Rpc2NfaW5mb30tPnticmlnaHRuZXNzX3N0YXRlX3RvcGljfQ0KICAgICkgew0K
CWlmKCAkc2VsZi0+e2Rpc2NfaW5mb30tPntvcHRpbWlzdGljfSBlcSAndHJ1ZScgICYmICAkc2Vs
Zi0+e3BlbmRpbmdfc3RhdGV9ICkgew0KCSAgICAkc2VsZi0+ZGVidWcoIDIsICJCYXNlUmVtb3Rl
SXRlbSAkc2VsZi0+e29iamVjdF9uYW1lfSBpZ25vcmVkIHN0YXRlIG1lc3NhZ2UgYmVjYXVzZSBk
ZXZpY2UgaXMgb3B0aW1pc3RpYyIgKTsNCgkgICAgJHNlbGYtPntwZW5kaW5nX3N0YXRlfSAgICA9
IHVuZGVmOw0KCSAgICAkc2VsZi0+e3BlbmRpbmdfc2V0Ynl9ICAgID0gdW5kZWY7DQoJICAgICRz
ZWxmLT57cGVuZGluZ19yZXNwb25zZX0gPSB1bmRlZjsNCgl9IGVsc2Ugew0KCSAgICBpZiggJHJl
dGFpbmVkICkgew0KCQkkcF9zZXRieSA9ICdtcXR0IFtyZXRhaW5lZF0nOw0KCSAgICB9IGVsc2lm
KCAkc2VsZi0+e3BlbmRpbmdfc3RhdGV9ICkgew0KCQkkc2V0dmFsID0gJHNlbGYtPntwZW5kaW5n
X3N0YXRlfTsNCgkJJHBfc2V0YnkgPSAkc2VsZi0+e3BlbmRpbmdfc2V0Ynl9Ow0KCQkkcF9yZXNw
b25zZSA9ICRzZWxmLT57cGVuZGluZ19yZXNwb25zZX07DQoJCSRzZWxmLT57cGVuZGluZ19zdGF0
ZX0gICAgPSB1bmRlZjsNCgkJJHNlbGYtPntwZW5kaW5nX3NldGJ5fSAgICA9IHVuZGVmOw0KCQkk
c2VsZi0+e3BlbmRpbmdfcmVzcG9uc2V9ID0gdW5kZWY7DQoJCSRzZWxmLT5kZWJ1ZyggMiwgIlBl
bmRpbmcgJHNlbGYtPntvYmplY3RfbmFtZX0tLT5zZXQoICRzZXR2YWwsICRwX3NldGJ5LCAkcF9y
ZXNwb25zZSApIGNsZWFyZWQiICk7DQoJICAgIH0gZWxzZSB7DQoJCSRwX3NldGJ5ID0gJ21xdHQn
Ow0KCSAgICB9DQoJICAgICRzZXR2YWwgPSAkc2VsZi0+ZGVjb2RlX21xdHRfcGF5bG9hZCggJHRv
cGljLCAkbWVzc2FnZSwgJHJldGFpbmVkICk7DQoJICAgIGlmKCByZWYgJHNldHZhbCApIHsNCgkJ
JHNlbGYtPntzdGF0ZV9vYmp9ID0gJHNldHZhbDsNCgkJJHNldHZhbCA9IHVuZGVmOw0KCSAgICB9
DQoJICAgIGlmKCBkZWZpbmVkKCRzZXR2YWwpICAmJiAgJHNldHZhbCBuZSAnJyApIHsNCgkJJHNl
bGYtPmRlYnVnKCAxLCAicmVtb3RlIGl0ZW0gTVFUVCB0byBNSCAkJHNlbGZ7bXF0dF9uYW1lfSBz
ZXQoJHNldHZhbCwgJyRwX3NldGJ5JykiICk7DQoJCSRzZWxmLT5sZXZlbCggJHNldHZhbCApIGlm
ICRzZWxmLT5jYW4oICdsZXZlbCcgKTsNCgkJJHNlbGYtPlNVUEVSOjpzZXQoICRzZXR2YWwsICRw
X3NldGJ5LCAkcF9yZXNwb25zZSApOw0KCSAgICB9DQoJfQ0KCXJldHVybjsNCiAgICB9DQogICAg
aWYoICR0b3BpYyBlcSAkc2VsZi0+e2Rpc2NfaW5mb30tPnthdmFpbGFiaWxpdHlfdG9waWN9ICkg
ew0KCWlmKCAkcmV0YWluZWQgKSB7DQoJICAgICRwX3NldGJ5ID0gJ21xdHQgW3JldGFpbmVkXSc7
DQoJfSBlbHNlIHsNCgkgICAgJHBfc2V0YnkgPSAnbXF0dCc7DQoJfQ0KCWlmKCBsYygkbWVzc2Fn
ZSkgZXEgbGMoJHNlbGYtPntkaXNjX2luZm99LT57cGF5bG9hZF9hdmFpbGFibGV9KSApIHsNCgkg
ICAgaWYoICEkcmV0YWluZWQgKSB7DQoJCSRzZWxmLT5sb2coICIkc2VsZi0+e29iamVjdF9uYW1l
fSBub3cgYXZhaWxhYmxlIiApOw0KCSAgICB9DQoJfSBlbHNpZiggbGMoJG1lc3NhZ2UpIGVxIGxj
KCRzZWxmLT57ZGlzY19pbmZvfS0+e3BheWxvYWRfbm90X2F2YWlsYWJsZX0pICkgew0KCSAgICAk
c2VsZi0+bG9nKCAiJHNlbGYtPnttcXR0X25hbWV9IGlzIG5vdCBhdmFpbGFibGUiICk7DQoJICAg
ICRzZWxmLT5TVVBFUjo6c2V0KCAkbWVzc2FnZSwgJHBfc2V0YnkgKTsNCgl9IGVsc2Ugew0KCSAg
ICAkc2VsZi0+ZXJyb3IoICIkc2VsZi0+e29iamVjdF9uYW1lfSByZWNlaXZlZCB1bnJlY29nbml6
ZWQgYXZhaWxhYmlsaXR5IG1lc3NhZ2U6ICRtZXNzYWdlIiApOw0KCX0NCglyZXR1cm47DQogICAg
fQ0KDQogICAgJHNlbGYtPmRlYnVnKCAyLCAiQmFzZVJlbW90ZUl0ZW0gdW5oYW5kbGVkIG1lc3Nh
Z2UgVDonJHRvcGljJyAgTTonJG1lc3NhZ2UnIiApOw0KfQ0KDQpzdWIgdHJhbnNtaXRfdG9waWMg
ew0KICAgIG15ICgkc2VsZiwgJHRvcGljbmFtZSwgJHNldHZhbCkgPSBAXzsNCg0KICAgIG15ICRv
YmpfbmFtZSA9ICRzZWxmLT5nZXRfb2JqZWN0X25hbWU7DQogICAgbXkgJHRvcGljID0gJHNlbGYt
PntkaXNjX2luZm99LT57JHRvcGljbmFtZX07DQogICAgaWYoICEkdG9waWMgKSB7DQoJJHNlbGYt
PmRlYnVnKCAyLCAiQmFzZVJlbW90ZUl0ZW0gJG9ial9uYW1lIGRvZXMgbm90IGhhdmUgdG9waWM6
JHRvcGljbmFtZSAtLSBub3QgcHVibGlzaGluZyIgKTsNCglyZXR1cm47DQogICAgfQ0KICAgIG15
ICRwYXlsb2FkID0gJHNlbGYtPmVuY29kZV9tcXR0X3BheWxvYWQoICRzZXR2YWwsICR0b3BpYyAp
Ow0KICAgIGlmKCBkZWZpbmVkICRwYXlsb2FkICkgew0KCSRzZWxmLT5kZWJ1ZyggMSwgIk1IIHRv
IE1RVFQgQmFzZVJlbW90ZUl0ZW0gJG9ial9uYW1lOjpzZXQoJHNldHZhbCkgcHVibGlzaGluZyBj
b21tYW5kICckcGF5bG9hZCcgdG8gbXF0dCIgKTsNCgkkc2VsZi0+dHJhbnNtaXRfbXF0dF9tZXNz
YWdlKCAkdG9waWMsICRwYXlsb2FkLCAwICk7DQogICAgfQ0KfQ0KDQoNCj1pdGVtIEM8c2V0KHN0
YXRlLCBwX3NldGJ5LCBwX3Jlc3BvbnNlKT4NCiAgICBIYW5kbGUgbG9jYWwgc2V0IGNhbGxzDQo9
Y3V0DQoNCnN1YiBzZXQgeyAgICAjIyMgQmFzZVJlbW90ZUl0ZW0NCiAgICBteSAoICRzZWxmLCAk
c2V0dmFsLCAkcF9zZXRieSwgJHBfcmVzcG9uc2UgKSA9IEBfOw0KDQogICAgcHJpbnQoICJCYXNl
UmVtb3RlSXRlbSBzZXQoJHNldHZhbCwgJHBfc2V0YnkpIGNhbGxlZFxuIiApIGlmICRtYWluOjpE
ZWJ1Z3tzZXR9Ow0KICAgIHJldHVybiBpZiAmbWFpbjo6Y2hlY2tfZm9yX3RpZWRfZmlsdGVycygg
JHNlbGYsICRzZXR2YWwgKTsNCiAgICBwcmludCggIkJhc2VSZW1vdGVJdGVtIHNldCgkc2V0dmFs
LCAkcF9zZXRieSkgcGFzc2VkIGZpbHRlcnNcbiIgKSBpZiAkbWFpbjo6RGVidWd7c2V0fTsNCg0K
ICAgICMgT3ZlcnJpZGUgYW55IHNldF93aXRoX3RpbWVyIHJlcXVlc3RzDQogICAgaWYgKCAkJHNl
bGZ7c2V0X3RpbWVyfSApIHsNCglwcmludCggJHNlbGYtPmdldF9vYmplY3RfbmFtZSAuICIgdW5z
ZXR0aW5nIHRpbWVyXG4iICkgaWYgJG1haW46OkRlYnVne3NldH07DQogICAgICAgICZUaW1lcjo6
dW5zZXQoICQkc2VsZntzZXRfdGltZXJ9ICk7DQogICAgICAgIGRlbGV0ZSAkJHNlbGZ7c2V0X3Rp
bWVyfTsNCiAgICB9DQoNCiAgICAjIyMNCiAgICAjIyMgT3V0Z29pbmcgTUggdG8gTVFUVCBmb3Ig
QmFzZVJlbW90ZUl0ZW0NCiAgICAjIyMNCg0KICAgIGlmKCAkc2VsZi0+e21xdHRfdHlwZX0gZXEg
J2xpZ2h0JyAgJiYgICRzZWxmLT57ZGlzY19pbmZvfS0+e3NjaGVtYX0gbmUgJ2pzb24nICkgew0K
CWlmKCAhJHNlbGYtPntkaXNjX2luZm99LT57b25fY29tbWFuZF90eXBlfQ0KCXx8ICAkc2VsZi0+
e2Rpc2NfaW5mb30tPntvbl9jb21tYW5kX3R5cGV9IGVxICdsYXN0Jw0KCSkgew0KCSAgICAkc2Vs
Zi0+dHJhbnNtaXRfdG9waWMoICdicmlnaHRuZXNzX2NvbW1hbmRfdG9waWMnLCAkc2V0dmFsICk7
DQoJICAgICRzZWxmLT50cmFuc21pdF90b3BpYyggJ2NvbW1hbmRfdG9waWMnLCAkc2V0dmFsICk7
DQoJfSBlbHNpZiggJHNlbGYtPntkaXNjX2luZm99LT57b25fY29tbWFuZF90eXBlfSBlcSAnZmly
c3QnICkgew0KCSAgICAkc2VsZi0+dHJhbnNtaXRfdG9waWMoICdjb21tYW5kX3RvcGljJywgJHNl
dHZhbCApOw0KCSAgICAkc2VsZi0+dHJhbnNtaXRfdG9waWMoICdicmlnaHRuZXNzX2NvbW1hbmRf
dG9waWMnLCAkc2V0dmFsICk7DQoJfSBlbHNpZiggJHNlbGYtPntkaXNjX2luZm99LT57b25fY29t
bWFuZF90eXBlfSBlcSAnYnJpZ2h0bmVzcycgKSB7DQoJICAgICRzZWxmLT50cmFuc21pdF90b3Bp
YyggJ2JyaWdodG5lc3NfY29tbWFuZF90b3BpYycsICRzZXR2YWwgKTsNCgl9DQogICAgfSBlbHNl
IHsNCgkkc2VsZi0+dHJhbnNtaXRfdG9waWMoICdjb21tYW5kX3RvcGljJywgJHNldHZhbCApOw0K
ICAgIH0NCg0KICAgICRzZWxmLT57cGVuZGluZ19zdGF0ZX0gICAgPSAkc2V0dmFsOw0KICAgICRz
ZWxmLT57cGVuZGluZ19zZXRieX0gICAgPSAkcF9zZXRieTsNCiAgICAkc2VsZi0+e3BlbmRpbmdf
cmVzcG9uc2V9ID0gJHBfcmVzcG9uc2U7DQogICAgaWYoICRzZWxmLT57ZGlzY19pbmZvfS0+e29w
dGltaXN0aWN9IGVxICd0cnVlJykgew0KCSRzZWxmLT5sZXZlbCggJHNldHZhbCApIGlmICRzZWxm
LT5jYW4oICdsZXZlbCcgKTsNCgkkc2VsZi0+U1VQRVI6OnNldCggJHNldHZhbCwgJHBfc2V0Ynks
ICRwX3Jlc3BvbnNlICk7DQogICAgfSBlbHNlIHsNCgkkc2VsZi0+ZGVidWcoIDIsICJQZW5kaW5n
ICRzZWxmLT57b2JqZWN0X25hbWV9LS0+c2V0KCAkc2V0dmFsLCAkcF9zZXRieSwgJHBfcmVzcG9u
c2UgKSIgKTsNCiAgICB9DQp9DQoNCj1pdGVtIEM8c2V0X3dpdGhfdGltZXIoc3RhdGUsIHRpbWUs
IHJldHVybl9zdGF0ZSwgYWRkaXRpb25fcmV0dXJuX3N0YXRlcyk+DQogICAgSGFuZGxlIGxvY2Fs
IHNldF93aXRoX3RpbWVyIGNhbGxzDQoNCiAgICBOT1RFOiAgVGhpcyB0aW1lciBmdW5jdGlvbmFs
aXR5IGlzIHJlcXVpcmVkIGhlcmUgYmVjYXVzZSB0aGUgR2VuZXJpY19JdGVtIHRpbWVyDQogICAg
ICAgICAgIGlzIHJlc2V0IGJ5IEdlbmVyaWNfSXRlbSBzZXQgY2FsbHMsIGFuZCB0aGUgc2V0IGNh
bGwgZm9yIHRoZSBHZW5lcmljX0l0ZW0NCgkgICBpbiB0aGlzIGNhc2UgaXMgZGVsYXllZCB1bnRp
bCB0aGUgc3RhdGUgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgZnJvbSB0aGUgbXF0dCBkZXZpY2UuDQo9
Y3V0DQoNCnN1YiBzZXRfd2l0aF90aW1lciB7DQogICAgbXkgKCAkc2VsZiwgJHN0YXRlLCAkdGlt
ZSwgJHJldHVybl9zdGF0ZSwgJGFkZGl0aW9uYWxfcmV0dXJuX3N0YXRlcyApID0gQF87DQogICAg
cmV0dXJuIGlmICZtYWluOjpjaGVja19mb3JfdGllZF9maWx0ZXJzKCAkc2VsZiwgJHN0YXRlICk7
DQoNCiAgICAkc2VsZi0+c2V0KCRzdGF0ZSkgdW5sZXNzICRzdGF0ZSBlcSAnJzsNCg0KICAgIHJl
dHVybiB1bmxlc3MgJHRpbWU7DQoNCiAgICBteSAkc3RhdGVfY2hhbmdlID0gKCAkc3RhdGUgZXEg
J29mZicgKSA/ICdvbicgOiAnb2ZmJzsNCiAgICAkc3RhdGVfY2hhbmdlID0gJHJldHVybl9zdGF0
ZSBpZiBkZWZpbmVkICRyZXR1cm5fc3RhdGU7DQogICAgJHN0YXRlX2NoYW5nZSA9ICRzZWxmLT57
c3RhdGV9DQogICAgICBpZiAkcmV0dXJuX3N0YXRlIGFuZCBsYyAkcmV0dXJuX3N0YXRlIGVxICdw
cmV2aW91cyc7DQoNCiAgICAkc3RhdGVfY2hhbmdlIC49ICc7JyAuICRhZGRpdGlvbmFsX3JldHVy
bl9zdGF0ZXMNCiAgICAgIGlmICRhZGRpdGlvbmFsX3JldHVybl9zdGF0ZXM7DQoNCiAgICAkJHNl
bGZ7c2V0X3RpbWVyfSA9ICZUaW1lcjo6bmV3KCkgdW5sZXNzICQkc2VsZntzZXRfdGltZXJ9Ow0K
ICAgIG15ICRvYmplY3RfbmFtZSA9ICRzZWxmLT57b2JqZWN0X25hbWV9Ow0KICAgIG15ICRhY3Rp
b24gICAgICA9ICIkb2JqZWN0X25hbWUtPnNldCgnJHN0YXRlX2NoYW5nZScpIjsNCiAgICAkJHNl
bGZ7c2V0X3RpbWVyfS0+c2V0KCAkdGltZSwgJGFjdGlvbiApOw0KfQ0KDQoNCiMgLVsgRmluaSAt
IG1xdHRfQmFzZVJlbW90ZUl0ZW0gXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpwYWNr
YWdlIG1xdHRfUmVtb3RlSXRlbTsNCg0KdXNlIHN0cmljdDsNCg0KdXNlIERhdGE6OkR1bXBlcjsN
Cg0KQG1xdHRfUmVtb3RlSXRlbTo6SVNBID0gKCAnbXF0dF9CYXNlUmVtb3RlSXRlbScgKTsNCg0K
DQo9aXRlbSBDPG5ldyhtcXR0X2ludGVyZmFjZSwgbmFtZSwgdHlwZSwgdG9waWNwYXR0ZXJuLCBk
aXNjb3ZlcmFibGUsIGZyaWVuZGx5X25hbWUsIHN0YXRldG9waWMsICRjbW5kdG9waWMpPg0KDQog
ICAgQ3JlYXRlcyBhIE1RVFQgUmVtb3RlSXRlbS9vYmplY3QgdGhhdCB3aWxsIG1pcnJvciB0aGUg
c3RhdGUgb2YgdGhlIG9iamVjdCwgYW5kIHNlbmQgY29tbWFuZHMgdG8gaXQuDQoNCiAgICBOb3Rl
OiBzdGF0ZXRvcGljIGFuZCBjbW5kdG9waWMgYXJlIGFsbCBvcHRpb25hbCBNUVRUIHRvcGljcyB0
aGF0IGhhdmUgZXhpc3RpbmcgZGVmYXVsdHMuDQoNCj1jdXQNCg0Kc3ViIG5ldyB7ICAgICAgIyMj
IG1xdHRfUmVtb3RlSXRlbQ0KICAgIG15ICggJGNsYXNzLCAkaW50ZXJmYWNlLCAkdHlwZSwgJHRv
cGljcGF0dGVybiwgJGRpc2NvdmVyYWJsZSwgJGZyaWVuZGx5X25hbWUsICRzdGF0ZXRvcGljLCAk
Y21uZHRvcGljICkgPSBAXzsNCiAgICBteSAoJGJhc2VfdHlwZSwgJGRldmljZV9jbGFzcywgJHN0
YXRlX2NsYXNzLCAkdW5pdF9vZl9tKSA9ICR0eXBlID1+IG0vXihbXjpdKik6PyhbXjpdKik6Pyhb
XjpdKik6PyhbXjpdKikkLzsNCg0KICAgIGlmKCAhZ3JlcCggLyRiYXNlX3R5cGUvLCAoJ2xpZ2h0
Jywnc3dpdGNoJywnc2Vuc29yJywnYmluYXJ5X3NlbnNvcicsJ2NvdmVyJykgKSApIHsNCgkkaW50
ZXJmYWNlLT5lcnJvciggIkludmFsaWQgSW5zdE1xdHRJdGVtIHR5cGUgJyR0eXBlJyIgKTsNCgly
ZXR1cm47DQogICAgfQ0KDQogICAgbXkgJG1xdHRfbmFtZTsNCiAgICBteSAoQHRvcGljX3BhcnRz
KSA9IHNwbGl0KCAiLyIsICR0b3BpY3BhdHRlcm4gKTsNCiAgICBteSAkd2lsZGNhcmRfY291bnQg
PSAwOw0KICAgIGZvciggbXkgJGk9MDsgJGkgPD0gJCN0b3BpY19wYXJ0czsgJGkgKz0gMSApIHsN
CglteSAkcGFydCA9ICR0b3BpY19wYXJ0c1skaV07DQoJaWYoIGdyZXAoIC9eJHtwYXJ0fSQvLCAo
J3RlbGUnLCAnc3RhdCcsICdjbW5kJykgKSApIHsNCgkgICAgJHRvcGljX3BhcnRzWyRpXSA9ICcr
JzsNCgl9IGVsc2lmKCAkcGFydCBlcSAnKycgKSB7DQoJICAgICR3aWxkY2FyZF9jb3VudCArPSAx
Ow0KCX0gZWxzZSB7DQoJICAgICRtcXR0X25hbWUgPSAkcGFydDsNCgl9DQogICAgfQ0KICAgIGlm
KCAhJG1xdHRfbmFtZSApIHsNCgkkaW50ZXJmYWNlLT5lcnJvciggIlVucmVjb2duaXplZCB0b3Bp
YyBwYXR0ZXJuICckdG9waWNwYXR0ZXJuJyBmb3IgZGV2aWNlICckZnJpZW5kbHlfbmFtZSciICk7
DQoJcmV0dXJuOw0KICAgIH0NCg0KICAgIG15ICRsaXN0ZW5fdG9waWMgPSBqb2luKCAnLycsIEB0
b3BpY19wYXJ0cyApOw0KDQogICAgbXkgJHNlbGYgPSBuZXcgbXF0dF9CYXNlUmVtb3RlSXRlbSgg
JGludGVyZmFjZSwgJG1xdHRfbmFtZSwgJGJhc2VfdHlwZSwgJGxpc3Rlbl90b3BpYywgJGRpc2Nv
dmVyYWJsZSApOw0KDQogICAgcmV0dXJuDQogICAgICBpZiAhJHNlbGY7DQoNCiAgICBibGVzcyAk
c2VsZiwgJGNsYXNzOw0KDQogICAgJHNlbGYtPmRlYnVnKCAxLCAiTmV3IG1xdHRfUmVtb3RlSXRl
bSggJGludGVyZmFjZS0+e2luc3RhbmNlfSwgJyRtcXR0X25hbWUnLCAnJHR5cGUnLCAnJHRvcGlj
cGF0dGVybicsICRkaXNjb3ZlcmFibGUsICckZnJpZW5kbHlfbmFtZScgKSIgKTsNCg0KICAgICRz
ZWxmLT5zZXRfZGlzY292ZXJ5X25hbWVzKCAkZnJpZW5kbHlfbmFtZSwgJG1xdHRfbmFtZSApOw0K
DQogICAgaWYoICR3aWxkY2FyZF9jb3VudCA9PSAyICkgew0KCSRzZWxmLT57ZGlzY19pbmZvfS0+
e2F2YWlsYWJpbGl0eV90b3BpY30gPSAkc2VsZi0+bWFrZV90b3BpYyggJGxpc3Rlbl90b3BpYywg
J3RlbGUnLCAnTFdUJyApOw0KCSRzZWxmLT57ZGlzY19pbmZvfS0+e3BheWxvYWRfYXZhaWxhYmxl
fSA9ICdPbmxpbmUnOw0KCSRzZWxmLT57ZGlzY19pbmZvfS0+e3BheWxvYWRfbm90X2F2YWlsYWJs
ZX0gPSAnT2ZmbGluZSc7DQogICAgfQ0KICAgIGlmKCAkZGV2aWNlX2NsYXNzICkgew0KCSRzZWxm
LT57ZGlzY19pbmZvfS0+e2RldmljZV9jbGFzc30gPSAkZGV2aWNlX2NsYXNzOw0KICAgIH0NCiAg
ICBpZiggJHN0YXRlX2NsYXNzICkgew0KCSRzZWxmLT57ZGlzY19pbmZvfS0+e3N0YXRlX2NsYXNz
fSA9ICRzdGF0ZV9jbGFzczsNCiAgICB9DQogICAgaWYoICR1bml0X29mX20gKSB7DQoJJHNlbGYt
PntkaXNjX2luZm99LT57dW5pdF9vZl9tZWFzdXJlbWVudH0gPSAkdW5pdF9vZl9tOw0KICAgIH0N
CiAgICBpZiggJGJhc2VfdHlwZSBlcSAnc3dpdGNoJyApIHsNCglpZiggJHdpbGRjYXJkX2NvdW50
ICE9IDIgYW5kICEkc3RhdGV0b3BpYykgew0KCSAgICAkc2VsZi0+ZXJyb3IoICJEb24ndCBrbm93
IGhvdyB0byBjcmVhdGUgc3dpdGNoIHRvcGljcyBmb3IgJyRmcmllbmRseV9uYW1lJyIgKTsNCgl9
DQoJJGNtbmR0b3BpYyAgICAgICB8fD0gJ2NtbmQ6UE9XRVInOwkjIERlZmF1bHQgaXMgVGFzbW90
YSBub3JtcyB0byBtYWludGFpbiBiYWNrd2FyZCBjb21wYXRpYmlsaXR5Lg0KCSRzdGF0ZXRvcGlj
ICAgICAgfHw9ICdzdGF0OlBPV0VSJzsJIyBEZWZhdWx0IGlzIFRhc21vdGEgbm9ybXMgdG8gbWFp
bnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eS4NCgkkc2VsZi0+e2Rpc2NfaW5mb30tPntjb21t
YW5kX3RvcGljfSA9ICRzZWxmLT5tYWtlX3RvcGljKCAkbGlzdGVuX3RvcGljLCBzcGxpdCgnOics
JGNtbmR0b3BpYykpOw0KCSRzZWxmLT57ZGlzY19pbmZvfS0+e3N0YXRlX3RvcGljfSA9ICRzZWxm
LT5tYWtlX3RvcGljKCAkbGlzdGVuX3RvcGljLCBzcGxpdCgnOicsJHN0YXRldG9waWMpKTsNCiAg
ICB9IGVsc2lmKCAkYmFzZV90eXBlIGVxICdsaWdodCcgKSB7DQoJaWYoICR3aWxkY2FyZF9jb3Vu
dCAhPSAyICkgew0KCSAgICAkc2VsZi0+ZXJyb3IoICJEb24ndCBrbm93IGhvdyB0byBjcmVhdGUg
bGlnaHQgdG9waWNzIGZvciAnJGZyaWVuZGx5X25hbWUnIiApOw0KCX0NCgkkY21uZHRvcGljICAg
ICAgIHx8PSAnY21uZDpQT1dFUic7CSMgRGVmYXVsdCBpcyBUYXNtb3RhIG5vcm1zIHRvIG1haW50
YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuDQoJJHN0YXRldG9waWMgICAgICB8fD0gJ3RlbGU6
U1RBVEUnOwkjIERlZmF1bHQgaXMgVGFzbW90YSBub3JtcyB0byBtYWludGFpbiBiYWNrd2FyZCBj
b21wYXRpYmlsaXR5Lg0KCSRzZWxmLT57ZGlzY19pbmZvfS0+e2NvbW1hbmRfdG9waWN9ID0gJHNl
bGYtPm1ha2VfdG9waWMoICRsaXN0ZW5fdG9waWMsIHNwbGl0KCc6JywkY21uZHRvcGljKSk7DQoJ
JHNlbGYtPntkaXNjX2luZm99LT57c3RhdGVfdG9waWN9ID0gJHNlbGYtPm1ha2VfdG9waWMoICRs
aXN0ZW5fdG9waWMsIHNwbGl0KCc6Jywkc3RhdGV0b3BpYykpOw0KCSRzZWxmLT57ZGlzY19pbmZv
fS0+e3N0YXRlX3ZhbHVlX3RlbXBsYXRlfSA9ICd7e3ZhbHVlX2pzb24uUE9XRVJ9fSc7DQoJJHNl
bGYtPntkaXNjX2luZm99LT57YnJpZ2h0bmVzc19zdGF0ZV90b3BpY30gPSAkc2VsZi0+bWFrZV90
b3BpYyggJGxpc3Rlbl90b3BpYywgJ3RlbGUnLCAnU1RBVEUnICk7DQoJJHNlbGYtPntkaXNjX2lu
Zm99LT57YnJpZ2h0bmVzc192YWx1ZV90ZW1wbGF0ZX0gPSAne3t2YWx1ZV9qc29uLkRpbW1lcn19
JzsNCgkkc2VsZi0+e2Rpc2NfaW5mb30tPnticmlnaHRuZXNzX3NjYWxlfSA9IDEwMDsNCgkkc2Vs
Zi0+e2Rpc2NfaW5mb30tPnticmlnaHRuZXNzX2NvbW1hbmRfdG9waWN9ID0gJHNlbGYtPm1ha2Vf
dG9waWMoICRsaXN0ZW5fdG9waWMsICdjbW5kJywgJ0RpbW1lcicgKTsNCgkkc2VsZi0+e2Rpc2Nf
aW5mb30tPntvbl9jb21tYW5kX3R5cGV9ID0gJ2JyaWdodG5lc3MnOw0KICAgIH0gZWxzaWYoICRi
YXNlX3R5cGUgZXEgJ2JpbmFyeV9zZW5zb3InICkgew0KCSMgTW90aW9uIHNlbnNvciBjb25maWcg
YXMgZGVmaW5lZCBoZXJlOiBodHRwczovL2JsYWthZGRlci5jb20vcGlyLWluLXRhc21vdGEvDQoJ
JHN0YXRldG9waWMgICAgICB8fD0gJ3RlbGU6TU9USU9OJzsJIyBEZWZhdWx0IGlzIFRhc21vdGEg
bm9ybXMgdG8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0eS4NCgkkc2VsZi0+e2Rpc2Nf
aW5mb30tPntzdGF0ZV90b3BpY30gPSAkc2VsZi0+bWFrZV90b3BpYyggJGxpc3Rlbl90b3BpYywg
c3BsaXQoJzonLCRzdGF0ZXRvcGljKSk7CSMgRGVmYXVsdCBpcyBUYXNtb3RhIG5vcm1zIHRvIG1h
aW50YWluIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuDQoJJHNlbGYtPntkaXNjX2luZm99LT57cGF5
bG9hZF9vbn0gPSAxOw0KCSRzZWxmLT57ZGlzY19pbmZvfS0+e2ZvcmNlX3VwZGF0ZX0gPSAndHJ1
ZSc7DQoJJHNlbGYtPntkaXNjX2luZm99LT57b2ZmX2RlbGF5fSA9IDMwOw0KICAgIH0gZWxzaWYo
ICRiYXNlX3R5cGUgZXEgJ3NlbnNvcicgKSB7DQoJJHN0YXRldG9waWMgICAgICB8fD0gJ3RlbGU6
U1RBVEUnOwkjIERlZmF1bHQgaXMgVGFzbW90YSBub3JtcyB0byBtYWludGFpbiBiYWNrd2FyZCBj
b21wYXRpYmlsaXR5Lg0KCSRzZWxmLT57ZGlzY19pbmZvfS0+e3N0YXRlX3RvcGljfSA9ICRzZWxm
LT5tYWtlX3RvcGljKCAkbGlzdGVuX3RvcGljLCBzcGxpdCgnOicsJHN0YXRldG9waWMpKTsJIyBE
ZWZhdWx0IGlzIFRhc21vdGEgbm9ybXMgdG8gbWFpbnRhaW4gYmFja3dhcmQgY29tcGF0aWJpbGl0
eS4NCgkkc2VsZi0+e2Rpc2NfaW5mb30tPntmb3JjZV91cGRhdGV9ID0gJ3RydWUnOw0KICAgIH0g
ZWxzZSB7DQoJJHNlbGYtPmVycm9yKCAiUmVtb3RlSXRlbSB0eXBlICckdHlwZScgbm90IHN1cHBv
cnRlZCB5ZXQiICk7DQoJcmV0dXJuOw0KICAgIH0NCiAgICAkc2VsZi0+e2Rpc2NfaW5mb30tPnty
ZXN0YXJ0X3RvcGljfSA9ICRzZWxmLT5tYWtlX3RvcGljKCAkbGlzdGVuX3RvcGljLCAnY21uZCcs
ICdyZXN0YXJ0JyApOw0KICAgICRzZWxmLT57ZGlzY19pbmZvfS0+e3VuaXF1ZV9pZH0gPSAnbWhf
cmVtb3RlaXRlbV8nIC4gJHNlbGYtPnttcXR0X25hbWV9Ow0KICAgICRzZWxmLT57ZGlzY19pbmZv
fS0+e3VuaXF1ZV9pZH0gPX4gcy8gL18vZzsNCg0KICAgICMgV2UgbWF5IG5lZWQgZmxhZ3MgdG8g
ZGVhbCB3aXRoIFhNTCwgSlNPTiBvciBUZXh0DQogICAgcmV0dXJuICRzZWxmOw0KfQ0KDQpzdWIg
cmVzdGFydCB7DQogICAgbXkgKCRzZWxmKSA9IEBfOw0KICAgICRzZWxmLT50cmFuc21pdF90b3Bp
YyggJ3Jlc3RhcnRfdG9waWMnLCA5OSApOw0KfQ0KDQojIC1bIEZpbmkgLSBtcXR0X1JlbW90ZUl0
ZW0gXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQ0KDQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQpwYWNrYWdlIG1xdHRfSW5zdE1xdHRJ
dGVtOw0KDQp1c2Ugc3RyaWN0Ow0KDQp1c2UgRGF0YTo6RHVtcGVyOw0KDQpAbXF0dF9JbnN0TXF0
dEl0ZW06OklTQSA9ICggJ21xdHRfQmFzZVJlbW90ZUl0ZW0nICk7DQoNCg0KPWl0ZW0gQzxuZXco
bXF0dF9pbnRlcmZhY2UsIG5hbWUsIHR5cGUsIHRvcGljcGF0dGVybiwgZGlzY292ZXJhYmxlLCBm
cmllbmRseV9uYW1lKT4NCg0KICAgIENyZWF0ZXMgYSBNUVRUIEJhc2VSZW1vdGVJdGVtL29iamVj
dCB0aGF0IHdpbGwgbWlycm9yIHRoZSBzdGF0ZSBvZiB0aGUgb2JqZWN0LCBhbmQgc2VuZCBjb21t
YW5kcyB0byBpdC4NCg0KPWN1dA0KDQpzdWIgbmV3IHsgICAgICAjIyMgbXF0dF9JbnN0TXF0dEl0
ZW0NCiAgICBteSAoICRjbGFzcywgJGludGVyZmFjZSwgJHR5cGUsICR0b3BpY3BhdHRlcm4sICRk
aXNjb3ZlcmFibGUsICRmcmllbmRseV9uYW1lICkgPSBAXzsNCiAgICBteSAoJGJhc2VfdHlwZSwg
JGRldmljZV9jbGFzcywgJHN0YXRlX2NsYXNzLCAkdW5pdF9vZl9tKSA9ICR0eXBlID1+IG0vXihb
XjpdKik6PyhbXjpdKik6PyhbXjpdKik6PyhbXjpdKikkLzsNCg0KICAgIGlmKCAhZ3JlcCggLyRi
YXNlX3R5cGUvLCAoJ2xpZ2h0Jywnc3dpdGNoJywnYmluYXJ5X3NlbnNvcicsJ3NlbnNvcicsJ3Nj
ZW5lJywgJ2NvdmVyJyApICkgKSB7DQoJJGludGVyZmFjZS0+ZXJyb3IoICJJbnZhbGlkIEluc3RN
cXR0SXRlbSB0eXBlICckdHlwZSciICk7DQoJcmV0dXJuOw0KICAgIH0NCg0KICAgIG15ICR3b3Jr
ID0gJHRvcGljcGF0dGVybjsNCiAgICBteSAkbXF0dF9uYW1lOw0KICAgIG15ICRub2RlX2lkOw0K
ICAgIG15ICR0b3BpY19wcmVmaXg7DQogICAgKCR3b3JrLCAkbXF0dF9uYW1lKSA9ICR3b3JrID1+
IG18XiguKikvKFteL10rKS8/XCs/JHw7DQogICAgKCR0b3BpY19wcmVmaXgsICRub2RlX2lkKSA9
ICR3b3JrID1+IG18XiguKi8pKFteL10rKSR8Ow0KICAgIGlmKCAhJG5vZGVfaWQgKSB7DQoJJG5v
ZGVfaWQgPSAkd29yazsNCgkkdG9waWNfcHJlZml4ID0gJyc7DQogICAgfQ0KICAgICR0b3BpY19w
cmVmaXggLj0gIiRub2RlX2lkLyRtcXR0X25hbWUiOw0KJGludGVyZmFjZS0+ZGVidWcoIDEsICJ0
b3BpY3BhdHRlcm46JyR0b3BpY3BhdHRlcm4nIHBhcnNlZCB0byBub2RlX2lkOickbm9kZV9pZCcg
bXF0dF9uYW1lOickbXF0dF9uYW1lJyBwcmVmaXg6JyR0b3BpY19wcmVmaXgnIiApOw0KICAgIGlm
KCAhJG1xdHRfbmFtZSApIHsNCgkkaW50ZXJmYWNlLT5lcnJvciggIlVucmVjb2duaXplZCB0b3Bp
YyBwYXR0ZXJuICckdG9waWNwYXR0ZXJuJyBmb3IgZGV2aWNlICckZnJpZW5kbHlfbmFtZSciICk7
DQogICAgfQ0KICAgIG15ICRsaXN0ZW5fdG9waWMgPSAiJHRvcGljX3ByZWZpeC8rIjsNCg0KICAg
IG15ICRzZWxmID0gbmV3IG1xdHRfQmFzZVJlbW90ZUl0ZW0oICRpbnRlcmZhY2UsICRtcXR0X25h
bWUsICRiYXNlX3R5cGUsICRsaXN0ZW5fdG9waWMsICRkaXNjb3ZlcmFibGUgKTsNCg0KICAgIHJl
dHVybg0KICAgICAgaWYgISRzZWxmOw0KDQogICAgYmxlc3MgJHNlbGYsICRjbGFzczsNCg0KICAg
ICRzZWxmLT5kZWJ1ZyggMSwgIk5ldyBtcXR0X0luc3RNcXR0SXRlbSggJGludGVyZmFjZS0+e2lu
c3RhbmNlfSwgJyRtcXR0X25hbWUnLCAnJHR5cGUnLCAnJHRvcGljcGF0dGVybicsICRkaXNjb3Zl
cmFibGUsICckZnJpZW5kbHlfbmFtZScgKSIgKTsNCg0KICAgICRzZWxmLT57bm9kZV9pZH0gPSAk
bm9kZV9pZDsNCg0KICAgICRzZWxmLT5zZXRfZGlzY292ZXJ5X25hbWVzKCAkZnJpZW5kbHlfbmFt
ZSwgJG1xdHRfbmFtZSApOw0KDQogICAgaWYoICRkZXZpY2VfY2xhc3MgKSB7DQoJJHNlbGYtPntk
aXNjX2luZm99LT57ZGV2aWNlX2NsYXNzfSA9ICRkZXZpY2VfY2xhc3M7DQogICAgfQ0KICAgIGlm
KCAkc3RhdGVfY2xhc3MgKSB7DQoJJHNlbGYtPntkaXNjX2luZm99LT57c3RhdGVfY2xhc3N9ID0g
JHN0YXRlX2NsYXNzOw0KICAgIH0NCiAgICBpZiggJHVuaXRfb2ZfbSApIHsNCgkkc2VsZi0+e2Rp
c2NfaW5mb30tPnt1bml0X29mX21lYXN1cmVtZW50fSA9ICR1bml0X29mX207DQogICAgfQ0KICAg
IGlmKCAkYmFzZV90eXBlIGVxICdzY2VuZScgKSB7DQoJJHNlbGYtPntkaXNjX2luZm99LT57Y29t
bWFuZF90b3BpY30gPSAiJG5vZGVfaWQvbW9kZW0vc2NlbmUiOw0KCSRzZWxmLT57ZGlzY19pbmZv
fS0+e29wdGltaXN0aWN9ID0gJ3RydWUnOw0KCSRzZWxmLT57ZGlzY19pbmZvfS0+e3BheWxvYWRf
b259ID0gICJ7IFwiY21kXCIgOiBcIk9OXCIsIFwibmFtZVwiIDogXCIkbXF0dF9uYW1lXCIgfSI7
DQoJJHNlbGYtPntkaXNjX2luZm99LT57cGF5bG9hZF9vZmZ9ID0gICJ7IFwiY21kXCIgOiBcIk9G
RlwiLCBcIm5hbWVcIiA6IFwiJG1xdHRfbmFtZVwiIH0iOw0KICAgIH0gZWxzZSB7DQoJJHNlbGYt
PntkaXNjX2luZm99LT57c3RhdGVfdG9waWN9ID0gIiR0b3BpY19wcmVmaXgvc3RhdGUiOw0KCSRz
ZWxmLT57ZGlzY19pbmZvfS0+e2NvbW1hbmRfdG9waWN9ID0gIiR0b3BpY19wcmVmaXgvc2V0IjsN
CglpZiggJGJhc2VfdHlwZSBlcSAnbGlnaHQnICkgew0KCSAgICAkc2VsZi0+e2Rpc2NfaW5mb30t
Pntjb21tYW5kX3RvcGljfSA9ICIkdG9waWNfcHJlZml4L2xldmVsIjsNCgkgICAgJHNlbGYtPntk
aXNjX2luZm99LT57c2NoZW1hfSA9ICdqc29uJzsNCgkgICAgJHNlbGYtPntkaXNjX2luZm99LT57
YnJpZ2h0bmVzc30gPSAidHJ1ZSI7DQoJICAgICRzZWxmLT57ZGlzY19pbmZvfS0+e2JyaWdodG5l
c3Nfc2NhbGV9ID0gMTAwOw0KCX0gZWxzaWYoICRiYXNlX3R5cGUgZXEgJ2JpbmFyeV9zZW5zb3In
ICkgew0KCX0gZWxzaWYoICRiYXNlX3R5cGUgZXEgJ3NlbnNvcicgKSB7DQoJfQ0KICAgIH0NCiAg
ICAkc2VsZi0+e2Rpc2NfaW5mb30tPnt1bmlxdWVfaWR9ID0gJHNlbGYtPnttcXR0X25hbWV9Ow0K
ICAgICRzZWxmLT57ZGlzY19pbmZvfS0+e3VuaXF1ZV9pZH0gPX4gcy8gL18vZzsNCg0KICAgICMg
JHNlbGYtPmRlYnVnKCAxLCAiSW5zdE1xdHRJdGVtIGNyZWF0ZWQ6IFxuIiAuIER1bXBlciggJHNl
bGYgKSApOw0KDQogICAgIyBXZSBtYXkgbmVlZCBmbGFncyB0byBkZWFsIHdpdGggWE1MLCBKU09O
IG9yIFRleHQNCiAgICByZXR1cm4gJHNlbGY7DQp9DQoNCiMgLVsgRmluaSAtIG1xdHRfSW5zdE1x
dHRJdGVtIF0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0NCg0KDQoNCiMgLVsgRmluaSBdLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoxOw0K
--00000000000060c983064b0dd0ed
Content-Type: application/octet-stream; name="mqtt_discovery.pm"
Content-Disposition: attachment; filename="mqtt_discovery.pm"
Content-Transfer-Encoding: base64
Content-ID: <f_mlr9gpg72>
X-Attachment-Id: f_mlr9gpg72
IyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KPWJlZ2luIGNvbW1lbnQNCiAgICBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQA0KDQogICAgPWhlYWQxIEI8bXF0dF9EaXNjb3Zlcnk+IEI8bXF0dF9EaXNj
b3ZlcmVkSXRlbT4NCg0KICAgIERhdmUgTmV1ZG9lcmZmZXIgPGRhdmVAbmV1ZG9lcmZmZXIuY29t
Pg0KDQogICAgPWhlYWQyIFNZTk9QU0lTDQoNCiAgICBBbiBNUVRUIGRpc2NvdmVyIG1vZHVsZSBm
b3IgTWlzdGVyaG91c2UuDQogICAgRnVsbCBkb2N1bWVudGF0aW9uIGluIG1xdHRfaXRlbXMucG0u
DQoNCiAgICBVc2VzIGV4aXN0aW5nIGludGVyZmFjZSBjbGFzcyBpbiBtcXR0LnBtLg0KICAgIFVz
ZXMgbXF0dF9CYXNlUmVtb3RlSXRlbSBmcm9tIG1xdHRfaXRlbXMucG0uDQogICAgSXQgZG9lcyBu
b3QgdXNlIHRoZSBtcXR0X0l0ZW0gY2xhc3MgaW4gbXF0dC5wbS4NCg0KICAgID1oZWFkMiBERVND
UklQVElPTg0KDQogICAgTWlzdGVyaG91c2UgTVFUVCBkaXNjb3ZlcnkgZm9yIHVzZSB3aXRoIG1h
bnkgTVFUVCBzZXJ2aWNlcy4NCg0KICAgIE1RVFQgd2Vic2l0ZTogaHR0cDovL21xdHQub3JnLw0K
ICAgIE1RVFQgVGVzdCBzZXJ2aWNlOiBodHRwLy90ZXN0Lm1vc3F1aXR0by5vcmcvICh0ZXN0Lm1v
c3F1aXR0by5vcmcgcG9ydCAxODgzKQ0KDQpGaWxlOg0KICAgIG1xdHRfRGlzY292ZXJ5LnBtDQoN
CkRlc2NyaXB0aW9uOg0KICAgIEF1dGhvcihzKToNCiAgICBEYXZlIE5ldWRvZXJmZmVyIDxkYXZl
QG5ldWRvZXJmZmVyLmNvbT4NCg0KICAgIFNlZSBtcXR0X2l0ZW1zLnBtIGZvciBmdWxsIGRvY3Vt
ZW50YXRpb24uDQoNCkxpY2Vuc2U6DQogICAgVGhpcyBmcmVlIHNvZnR3YXJlIGlzIGxpY2Vuc2Vk
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIHB1YmxpYyBsaWNlbnNlLg0KDQpVc2FnZToNCg0K
Tm90ZXM6DQogICAgQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA
QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBADQoNCj1jdXQNCg0KIyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0NCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNCnBhY2thZ2UgbXF0
dF9EaXNjb3ZlcmVkSXRlbTsNCg0KdXNlIHN0cmljdDsNCg0KdXNlIEpTT04gcXcoIGRlY29kZV9q
c29uIGVuY29kZV9qc29uICk7ICAgDQp1c2UgbXF0dF9pdGVtczsNCg0KQG1xdHRfRGlzY292ZXJl
ZEl0ZW06OklTQSA9ICggJ21xdHRfQmFzZVJlbW90ZUl0ZW0nICk7DQoNCg0KPWl0ZW0gQzxuZXco
bXF0dF9kaXNjb3Zlcnlfb2JqZWN0LCBuYW1lLCBkaXNjb3ZlcnlfdG9waWMsIGRpc2NvdmVyeV9t
c2cpPg0KDQogICAgQ3JlYXNlIGEgbXF0dF9CYXNlUmVtb3RlSXRlbSBiYXNlZCBvbiB0aGUgZGlz
Y292ZXJ5X3RvcGljIGFuZCBkaXNjb3ZlcnlfbXNnDQoNCj1jdXQNCg0Kc3ViIG5ldyB7ICAgIyMj
IyBtcXR0X0Rpc2NvdmVyZWRJdGVtDQogICAgbXkgKCAkY2xhc3MsICRkaXNjX2ludGVyZmFjZSwg
JG9ial9uYW1lLCAkb3JpZ19kaXNjX3RvcGljLCAkZGlzY19tc2csICRkaXNjX21vZGUgKSA9IEBf
Ow0KICAgIG15ICRvYmo7DQogICAgbXkgJGludGVyZmFjZSA9ICRkaXNjX2ludGVyZmFjZS0+e2lu
dGVyZmFjZX07DQogICAgbXkgJGZyaWVuZGx5X25hbWU7DQogICAgbXkgJHNlbGY7DQogICAgbXkg
JHNob3J0X2Rpc2NfdG9waWM7DQogICAgbXkgJG1xdHRfdHlwZTsNCiAgICBteSAkZGlzY190b3Bp
YzsNCiAgICBteSAkZGlzY19wcmVmaXg7DQogICAgbXkgJGRpc2NfdHlwZTsNCiAgICBteSAkbm9k
ZV9pZDsNCiAgICBteSAkZGV2aWNlX2lkOw0KDQogICAgJGRpc2NfdG9waWMgPSAkb3JpZ19kaXNj
X3RvcGljOw0KDQogICAgaWYoICEkb2JqX25hbWUgJiYgICRkaXNjX21vZGUgbmUgJ2R5bmFtaWMn
ICkgew0KCSRkaXNjX2ludGVyZmFjZS0+ZXJyb3IoICJNUVRUX0RJU0NPVkVSRURJVEVNL01RVFRf
UkFXSVRFTSBzdGF0aWNhbGx5IGRlY2xhcmVkIG11c3QgaGF2ZSBhbiBvYmplY3QgbmFtZSIgKTsN
CglyZXR1cm47DQogICAgfQ0KICAgIGlmKCAkZGlzY190b3BpYyA9fiBtfC4qLy4qfCApIHsNCgko
JGRpc2NfcHJlZml4LCAkZGlzY190eXBlLCAkbm9kZV9pZCwgJGRldmljZV9pZCkgPSAkZGlzY190
b3BpYyA9fiBtfF4oLiopLyhbXi9dKikvKFteL10rKS8oW14vXSspL2NvbmZpZyR8Ow0KCWlmKCAk
ZGlzY19wcmVmaXggKSB7DQoJICAgICRzaG9ydF9kaXNjX3RvcGljID0gIiRkaXNjX3R5cGUvJG5v
ZGVfaWQvJGRldmljZV9pZC9jb25maWciOw0KCX0gZWxzZSB7DQoJICAgICgkZGlzY19wcmVmaXgs
ICRkaXNjX3R5cGUsICRkZXZpY2VfaWQpID0gJGRpc2NfdG9waWMgPX4gbXxeKC4qKS8oW14vXSsp
LyhbXi9dKykvY29uZmlnJHw7DQoJICAgIGlmKCAhJGRpc2NfcHJlZml4ICkgew0KCQkkZGlzY19p
bnRlcmZhY2UtPmVycm9yKCAiVU5SRUNPR05JWkVEIERJU0NPVkVSWSBNRVNTQUdFIC0tIGNhbid0
IHBhcnNlOiAkZGlzY190b3BpYyIgKTsNCgkJcmV0dXJuOw0KCSAgICB9DQoJICAgICRzaG9ydF9k
aXNjX3RvcGljID0gIiRkaXNjX3R5cGUvJGRldmljZV9pZC9jb25maWciOw0KCX0NCiAgICB9IGVs
c2lmKCAkZGlzY190b3BpYyApIHsNCgkkZGlzY190eXBlID0gJGRpc2NfdG9waWM7DQoJJHNob3J0
X2Rpc2NfdG9waWMgPSAnJzsNCiAgICB9IGVsc2Ugew0KCSRkaXNjX2ludGVyZmFjZS0+ZXJyb3Io
ICJVTlJFQ09HTklaRUQgRElTQ09WRVJZIE1FU1NBR0UgLS0gZGlzY292ZXJ5IHRvcGljIG5vdCB2
YWxpZDogJGRpc2NfdG9waWMiICk7DQoJcmV0dXJuOw0KICAgIH0NCg0KICAgIG15ICRkaXNjX2lu
Zm87DQogICAgbXkgJGRpc2M7DQogICAgZXZhbHsgJGRpc2MgPSBkZWNvZGVfanNvbiggJGRpc2Nf
bXNnICkgfTsNCiAgICBpZiggISRkaXNjICkgew0KCSRkaXNjX2ludGVyZmFjZS0+ZXJyb3IoICJV
TlJFQ09HTklaRUQgRElTQ09WRVJZIE1FU1NBR0UgLS0gcGF5bG9hZCBub3QganNvbjogJGRpc2Nf
dG9waWMgLS0gTTonJGRpc2NfbXNnJyIgKTsNCglyZXR1cm47DQogICAgfQ0KICAgICRkaXNjX2lu
Zm8gPSAkZGlzYzsNCg0KICAgICZtcXR0X0Jhc2VJdGVtOjpub3JtYWxpemVfZGlzY292ZXJ5X2lu
Zm8oICRkaXNjICk7DQoNCiAgICAkZGlzY19pbnRlcmZhY2UtPmRlYnVnKCAzLCAicHJvY2Vzc2lu
ZyBkaXNjb3ZlcnkgbWVzc2FnZSBwYXlsb2FkOlxuIiAuICZtcXR0X0Jhc2VJdGVtOjpkdW1wKCB1
bmRlZiwgJGRpc2NfaW5mbywgMyApICk7DQoNCiAgICBteSAkbGlzdGVudG9waWNzID0ge307DQoN
CiAgICAjIG1hcCBkaXNjb3ZlcnkgdHlwZSB0byBtcXR0IG9iamVjdCB0eXBlDQogICAgaWYoICRk
aXNjX3R5cGUgZXEgJ2RldmljZScgKSB7DQoJaWYoICFkZWZpbmVkICRkaXNjX2luZm8tPntkZXZp
Y2V9ICkgew0KCSAgICAkZGlzY19pbnRlcmZhY2UtPmVycm9yKCAiRGV2aWNlIGRpc2NvdmVyeScg
LS0gbm8gZGV2aWNlIHNlY3Rpb24gZm91bmQgZm9yIFQ6JyRkaXNjX3RvcGljJyIgKTsNCgkgICAg
cmV0dXJuOw0KCX0NCgkkZnJpZW5kbHlfbmFtZSA9ICRkaXNjX2luZm8tPntkZXZpY2V9LT57bmFt
ZX07DQoJJGZyaWVuZGx5X25hbWUgLy89ICRkZXZpY2VfaWQ7DQoNCglmb3JlYWNoIG15ICRkaXNj
X3Bhcm0gKCBrZXlzICV7JGRpc2NfaW5mb30gKSB7DQoJICAgIGlmKCAkZGlzY19wYXJtID1+IC9e
LipfdG9waWMkLyApIHsNCgkJJGxpc3RlbnRvcGljcy0+eyRkaXNjX3Bhcm19ID0gJGRpc2NfaW5m
by0+eyRkaXNjX3Bhcm19Ow0KCSAgICB9DQoJfQ0KCW15ICRjb21wb25lbnRzID0gW2tleXMgJXsk
ZGlzY19pbmZvLT57Y29tcG9uZW50c319XTsNCglpZiggc2NhbGFyIEAkY29tcG9uZW50cyA9PSAw
ICkgew0KCSAgICAkZGlzY19pbnRlcmZhY2UtPmVycm9yKCAiRGV2aWNlIGRpc2NvdmVyeSBmb3Ig
JyRmcmllbmRseV9uYW1lJyAtLSBubyBjb21wb25lbnRzIGZvdW5kIiApOw0KCSAgICByZXR1cm47
DQoJfSBlbHNlIHsNCgkgICAgJGRpc2NfaW50ZXJmYWNlLT5kZWJ1ZyggMiwgIkRldmljZSBkaXNj
b3ZlcnkgZm9yICckZnJpZW5kbHlfbmFtZScgLS0gY29tcG9uZW50ICckY29tcG9uZW50cy0+WzBd
JyBmb3VuZCIgKTsNCgl9DQoJJGRpc2NfaW5mbyA9ICRkaXNjX2luZm8tPntjb21wb25lbnRzfS0+
eyRjb21wb25lbnRzLT5bMF19Ow0KCSRkaXNjX3R5cGUgPSAkZGlzY19pbmZvLT57cGxhdGZvcm19
Ow0KICAgIH0gZWxzZSB7DQoJJGZyaWVuZGx5X25hbWUgPSAkZGlzY19pbmZvLT57bmFtZX07DQoJ
JGZyaWVuZGx5X25hbWUgLy89ICRkZXZpY2VfaWQ7DQogICAgfQ0KICAgIGlmKCAkZGlzY190eXBl
IGVxICdsaWdodCcgKSB7DQoJaWYoICRkaXNjX2luZm8tPntzY2hlbWF9IGVxICd0ZW1wbGF0ZScg
KSB7DQoJICAgICRkaXNjX2ludGVyZmFjZS0+bG9nKCAiRGlzY292ZXJ5IHNjaGVtYSAndGVtcGxh
dGUnIG5vdCBzdXBwb3J0ZWQgZm9yIG1xdHQgbGlnaHQgJGRpc2NfaW5mby0+e25hbWV9IiApOw0K
CX0gZWxzZSB7DQoJICAgICRtcXR0X3R5cGUgPSAkZGlzY190eXBlOw0KCX0NCiAgICB9IGVsc2lm
KCBncmVwKCAvXiR7ZGlzY190eXBlfSQvLCAoJ2xpZ2h0JywgJ3N3aXRjaCcsICdiaW5hcnlfc2Vu
c29yJywgJ3NlbnNvcicsICdzY2VuZScsICdzZWxlY3QnLCAndGV4dCcsICdudW1iZXInKSApICkg
ew0KCSRtcXR0X3R5cGUgPSAkZGlzY190eXBlOw0KICAgIH0gZWxzZSB7DQoJJGRpc2NfaW50ZXJm
YWNlLT5kZWJ1ZyggMSwgIlVOUkVDT0dOSVpFRCBESVNDT1ZFUlkgVFlQRTogJGRpc2NfdHlwZSIg
KTsNCiAgICB9DQoNCiAgICAjIFNldCB0aGUgbGlzdGVudG9waWNzIGxpc3QgdG8gYWxsIGRpc2Nv
dmVyeSBwYXJtcyB0aGF0IGVuZCB3aXRoIF90b3BpYw0KICAgICMNCiAgICBmb3JlYWNoIG15ICRk
aXNjX3Bhcm0gKCBrZXlzICV7JGRpc2NfaW5mb30gKSB7DQoJaWYoICRkaXNjX3Bhcm0gPX4gL14u
Kl90b3BpYyQvICkgew0KCSAgICAkbGlzdGVudG9waWNzLT57JGRpc2NfcGFybX0gPSAkZGlzY19p
bmZvLT57JGRpc2NfcGFybX07DQoJfQ0KICAgIH0NCiAgICBteSAkbGlzdGVudG9waWNzbGlzdCA9
IFsgdmFsdWVzICV7JGxpc3RlbnRvcGljc30gXTsNCiAgICBpZiggc2NhbGFyIEAkbGlzdGVudG9w
aWNzbGlzdCA9PSAwICkgew0KCSRkaXNjX2ludGVyZmFjZS0+ZXJyb3IoICJVTlJFQ09HTklaRUQg
RElTQ09WRVJZIE1FU1NBR0UgLS0gbm8gbGlzdGVuIHRvcGljOiBNOickZGlzY19tc2ciICk7DQoJ
cmV0dXJuOw0KICAgIH0gDQoNCiAgICAjIENoZWNrIGZvciBvYmplY3RzIHRoYXQgYWxyZWFkeSBl
eGlzdCAtLSBmb3IgZXhhbXBsZSwgaWYgdGhleSB3ZXJlIHBlcnNpc3RlZCBpbiBhIC5taHQgZmls
ZQ0KICAgIG15ICRmb3VuZCA9IDA7DQogICAgbXkgJHVuaXF1ZV9pZCA9ICRkaXNjX2luZm8tPnt1
bmlxdWVfaWR9ICB8fCAgJGRldmljZV9pZDsNCiAgICBmb3IgJG9iaiAoIEB7ICRpbnRlcmZhY2Ut
PntvYmplY3RzfSB9ICkgew0KCWlmKCAkb2JqLT57ZGlzY19pbmZvfS0+e3VuaXF1ZV9pZH0gZXEg
JHVuaXF1ZV9pZCApIHsNCgkgICAgaWYoICRvYmotPntpc19sb2NhbH0gKSB7DQoJCSRkaXNjX2lu
dGVyZmFjZS0+ZGVidWcoIDEsICJJZ25vcmluZyBkaXNjb3ZlcnkgbWVzc2FnZSBwcm9jZXNzZWQg
Zm9yIGxvY2FsIG9iamVjdDogIiAuICRvYmotPntsb2NhbF9pdGVtfS0+Z2V0X29iamVjdF9uYW1l
ICk7DQoJICAgIH0gZWxzZSB7DQoJCWlmKCAhJG9iai0+e2Rpc2NfdG9waWN9ICkgew0KCQkgICAg
IyBvYmplY3QgZXhwbGljaXRseSBkZWNsYXJlZA0KCQkgICAgJGRpc2NfaW50ZXJmYWNlLT5kZWJ1
ZyggMSwgIkRpc2NvdmVyeSBtZXNzYWdlIHByb2Nlc3NlZCBmb3IgdW5pcXVlX2lkOigkdW5pcXVl
X2lkKSBmb3Igb2JqZWN0IHRoYXQgd2FzIGV4cGxpY2l0bHkgY3JlYXRlZDogIiAuICRvYmotPmdl
dF9vYmplY3RfbmFtZSApOw0KCQl9IGVsc2Ugew0KCQkgICAgJGRpc2NfaW50ZXJmYWNlLT5kZWJ1
ZyggMSwgIkRpc2NvdmVyeSBtZXNzYWdlIHByb2Nlc3NlZCBmb3IgdW5pcXVlX2lkOigkdW5pcXVl
X2lkKSBmb3Igb2JqZWN0IHRoYXQgYWxyZWFkeSBleGlzdHM6ICIgLiAkb2JqLT5nZXRfb2JqZWN0
X25hbWUgKTsNCgkJICAgICMgVXBkYXRlIHRoZSBkaXNjb3ZlciBtZXNzYWdlIHNvIHRoYXQgaWYg
ZGlzY292ZXJlZCBpdGVtcyBhcmUgd3JpdHRlbiBvdXQsIHRoZXkgZ2V0IHRoZSBuZXcgb25lcw0K
CQkgICAgJG9iai0+e2Rpc2NfbXNnfSA9ICRkaXNjX21zZzsNCgkJICAgICRvYmotPntkaXNjX3Rv
cGljfSA9ICRvcmlnX2Rpc2NfdG9waWM7DQoJCX0NCgkgICAgfQ0KCSAgICAkZm91bmQgPSAxOw0K
CX0gZWxzZSB7DQoJICAgIGlmKCAkb2JqLT57bXF0dF9mcmllbmRseV9uYW1lfSBlcSAkZnJpZW5k
bHlfbmFtZSApIHsNCgkJJGZvdW5kID0gMTsNCgkJaWYoICRvYmotPntkaXNjb3ZlcmFibGV9ICB8
fCAgJG9iai0+e2Rpc2NfbW9kZX0gZXEgJ2R5bmFtaWMnICkgew0KCQkgICAgIyBOb3RlIHRoYXQg
SG9tZSBBc3Npc3RhbnQgbWF0Y2hlcyBkaXNjb3Zlcnkgb2JqZWN0cyB1cCBiYXNlZCBvbiBmcmll
bmRseSBuYW1lIC0tIHJlcG9ydCBlcnJvciBvbiBkdXBsaWNhdGUgZnJpZW5kbHkgbmFtZXMNCgkJ
ICAgICRkaXNjX2ludGVyZmFjZS0+ZXJyb3IoICJEaXNjb3ZlcnkgbWVzc2FnZSBwcm9jZXNzZWQg
Zm9yIGZyaWVuZGx5X25hbWUgKCRmcmllbmRseV9uYW1lKSB0aGF0IGFscmVhZHkgZXhpc3RzIiAp
Ow0KCQl9IGVsc2Ugew0KCQkgICAgJGRpc2NfaW50ZXJmYWNlLT5kZWJ1ZyggMSwgIkRpc2NvdmVy
eSBtZXNzYWdlIHByb2Nlc3NlZCBmb3IgZnJpZW5kbHlfbmFtZSAoJGZyaWVuZGx5X25hbWUpIHRo
YXQgaGFzIGFscmVhZHkgYmVlbiBsb2NhbGx5IGRlY2xhcmVkIC0tIGlnbm9yaW5nIiApOw0KCQl9
DQoJICAgIH0NCgl9DQogICAgfQ0KICAgIGlmKCAkZm91bmQgKSB7DQoJcmV0dXJuOw0KICAgIH0N
Cg0KICAgICMgY3JlYXRlIGxvY2FsIE1IIG9iamVjdCBuYW1lDQogICAgaWYoICEkb2JqX25hbWUg
KSB7DQoJJG9ial9uYW1lID0gJ21xdHRkXyc7DQoJaWYoICRub2RlX2lkICkgew0KCSAgICAjICAk
bm9kZV9pZCBoZWxwcyB0byBpZGVudGlmeSB0aGUgZGV2aWNlDQoJICAgICRvYmpfbmFtZSAuPSAi
JHtub2RlX2lkfV8iOw0KCX0NCglpZiggJGRpc2NfaW5mby0+e25hbWV9ICkgew0KCSAgICAkb2Jq
X25hbWUgLj0gJGRpc2NfaW5mby0+e25hbWV9Ow0KCX0gZWxzZSB7DQoJICAgICRvYmpfbmFtZSAu
PSAkZGV2aWNlX2lkOw0KCX0NCgkkb2JqX25hbWUgPX4gcy9bXlx3XS9fL2c7DQogICAgfQ0KICAg
ICRvYmogPSA6OmdldF9vYmplY3RfYnlfbmFtZSggJG9ial9uYW1lICk7DQogICAgaWYoICRvYmog
KSB7DQoJJGRpc2NfaW50ZXJmYWNlLT5lcnJvciggIlRyeWluZyB0byBjcmVhdGUgb2JqZWN0IHRo
YXQgYWxyZWFkeSBleGlzdHM6ICRvYmpfbmFtZSIgKTsNCglyZXR1cm47DQogICAgfSANCg0KICAg
ICMgY3JlYXRlIGxvY2FsIE1IIG9iamVjdA0KDQogICAgIyBJZiB3ZSBkb24ndCBzdXBwb3J0IHRo
ZSB0eXBlLCBkb24ndCBsaXN0ZW4gZm9yIGNoYW5nZXMNCiAgICBpZiggISRtcXR0X3R5cGUgKSB7
DQoJJGxpc3RlbnRvcGljc2xpc3QgPSBbXTsNCiAgICB9DQoNCiAgICAkc2VsZiA9IG5ldyBtcXR0
X0Jhc2VSZW1vdGVJdGVtKCAkaW50ZXJmYWNlLCAkb2JqX25hbWUsICRkaXNjX3R5cGUsICRsaXN0
ZW50b3BpY3NsaXN0LCAwICk7DQoNCiAgICBibGVzcyAkc2VsZiwgJGNsYXNzOw0KDQogICAgJHNl
bGYtPntkaXNjfQkgICAgPSAkZGlzYzsNCiAgICAkc2VsZi0+e2Rpc2NfaW5mb30JICAgID0gJGRp
c2NfaW5mbzsNCiAgICAkc2VsZi0+e2Rpc2NfdG9waWN9CSAgICA9ICRvcmlnX2Rpc2NfdG9waWM7
DQogICAgJHNlbGYtPntkaXNjX3ByZWZpeH0gICAgPSAkZGlzY19wcmVmaXg7DQogICAgJHNlbGYt
PntkaXNjX21zZ30JICAgID0gJGRpc2NfbXNnOw0KICAgICRzZWxmLT57ZGlzY19pbnRlcmZhY2V9
ID0gJGRpc2NfaW50ZXJmYWNlOw0KICAgICRzZWxmLT57ZGlzY19tb2RlfQkgICAgPSAkZGlzY19t
b2RlOw0KICAgICRzZWxmLT57bXF0dF9mcmllbmRseV9uYW1lfSA9ICRmcmllbmRseV9uYW1lOw0K
DQogICAgJHNlbGYtPmRlYnVnKCAxLCAiTmV3IG1xdHRfRGlzY292ZXJlZEl0ZW0oIFwkJGRpc2Nf
aW50ZXJmYWNlLT57bXF0dF9uYW1lfSwgJyRvYmpfbmFtZScsICckZGlzY190b3BpYycsICckZGlz
Y19tc2cnICkiICk7DQoNCiAgICAkc2VsZi0+ZGVidWcoIDMsICJEaXNjb3ZlcnlJdGVtIGNyZWF0
ZWQ6IFxuIiAuICRzZWxmLT5kdW1wKCAkc2VsZiwgMyApICk7DQoNCiAgICAjIFdlIG1heSBuZWVk
IGZsYWdzIHRvIGRlYWwgd2l0aCBYTUwsIEpTT04gb3IgVGV4dA0KICAgIHJldHVybiAkc2VsZjsN
Cn0NCg0KDQojIC1bIEZpbmkgLSBtcXR0X0Rpc2NvdmVyZWRJdGVtIF0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0NCg0KcGFja2FnZSBtcXR0X0Rpc2NvdmVyeTsNCg0KdXNlIHN0cmljdDsNCg0K
dXNlIEpTT04gcXcoIGRlY29kZV9qc29uIGVuY29kZV9qc29uICk7ICAgDQoNCkBtcXR0X0Rpc2Nv
dmVyeTo6SVNBID0gKCAnbXF0dF9CYXNlSXRlbScgKTsNCg0KPWl0ZW0gQzxuZXcobXF0dF9pbnRl
cmZhY2UsIG5hbWUsIGRpc2NvdmVyeV90b3BpYywgY3JlYXRlX2Rpc2NvdmVyZWRfb2Jqcyk+DQoN
CiAgICBDcmVhdGVzIGEgTVFUVCBEaXNjb3Zlcnkgb2JqZWN0IHRoYXQgd2lsbCBoYW5kbGUgbXF0
dCBkaXNjb3ZlcnkgbWVzc2FnZXMgYW5kIGNyZWF0ZSBsb2NhbCBvYmplY3RzLg0KICAgIFRoZW4g
dXNlIGNsYXNzIGZ1bmN0aW9uIHdyaXRlX2Rpc2NvdmVyZWRfaXRlbXMgdG8gd3JpdGUgdGhlbSBv
dXQgdG8gYSAubWh0IGZpbGUuDQoNCj1jdXQNCg0Kc3ViIG5ldyB7ICAjIyMgbXF0dF9EaXNjb3Zl
cnkNCiAgICBteSAoICRjbGFzcywgJGludGVyZmFjZSwgJG5hbWUsICRkaXNjb3ZlcnlfcHJlZml4
LCAkYWN0aW9uICkgPSBAXzsNCg0KICAgICRkaXNjb3ZlcnlfcHJlZml4IC8vPSAkaW50ZXJmYWNl
LT57dG9waWNfcHJlZml4fTsNCiAgICBpZiggJGRpc2NvdmVyeV9wcmVmaXggICYmICAhJGFjdGlv
biApIHsNCgkkYWN0aW9uID0gJ2JvdGgnOw0KICAgIH0NCiAgICBpZiggISRpbnRlcmZhY2UgKSB7
DQoJJm1xdHQ6OmVycm9yKCB1bmRlZiwgIm1xdHRfRGlzY292ZXJ5IG11c3Qgc3BlY2lmeSBpbnRl
cmZhY2UiICk7DQoJcmV0dXJuOw0KICAgIH0NCiAgICBpZiggIWdyZXAoIC9eJHthY3Rpb259JC8s
ICgncHVibGlzaCcsICdzdWJzY3JpYmUnLCAnYm90aCcsICdub25lJykgKSApIHsNCgkkaW50ZXJm
YWNlLT5lcnJvciggIkludmFsaWQgZGlzY292ZXJ5IGFjdGlvbiBzcGVjaWZpZWQgJyRhY3Rpb24n
IiApOw0KICAgIH0NCg0KICAgICRpbnRlcmZhY2UtPmRlYnVnKCAxLCAiTmV3IG1xdHRfRGlzY292
ZXJ5KCAkaW50ZXJmYWNlLT57aW5zdGFuY2V9LCAnJG5hbWUnLCAnJGRpc2NvdmVyeV9wcmVmaXgn
LCAnJGFjdGlvbicgKSIgKTsNCg0KICAgIG15ICRsaXN0ZW50b3BpY3MgPSBbXTsNCiAgICBpZigg
JGFjdGlvbiBlcSAncHVibGlzaCcgIHx8ICAkYWN0aW9uIGVxICdib3RoJyApIHsNCgkkaW50ZXJm
YWNlLT57ZGlzY292ZXJ5X3B1Ymxpc2hfcHJlZml4fSA9ICRkaXNjb3ZlcnlfcHJlZml4Ow0KICAg
IH0NCiAgICBpZiggJGFjdGlvbiBlcSAnc3Vic2NyaWJlJyAgfHwgICRhY3Rpb24gZXEgJ2JvdGgn
ICkgew0KCSRsaXN0ZW50b3BpY3MgPSAiJHtkaXNjb3ZlcnlfcHJlZml4fS8jIjsNCiAgICB9DQoN
CiAgICBteSAkc2VsZiA9IG5ldyBtcXR0X0Jhc2VJdGVtKCAkaW50ZXJmYWNlLCAkbmFtZSwgJ2Rp
c2NvdmVyeScsICRsaXN0ZW50b3BpY3MsIDAgKTsNCg0KICAgIGJsZXNzICRzZWxmLCAkY2xhc3M7
DQoNCiAgICByZXR1cm4gJHNlbGY7DQp9DQoNCj1pdGVtIEM8cmVjZWl2ZV9tcXR0X21lc3NhZ2Uo
IG1xdHRfdG9waWMsIG1xdHRfbWVzc2FnZSwgbXF0dF9yZXRhaW5lZCk+DQo9Y3V0DQoNCnN1YiBy
ZWNlaXZlX21xdHRfbWVzc2FnZSB7DQogICAgbXkgKCAkc2VsZiwgJG1xdHRfdG9waWMsICRtcXR0
X21zZywgJG1xdHRfcmV0YWluZWQgKSA9IEBfOw0KICAgIG15ICRvYmpfbmFtZTsNCiAgICBteSAk
b2JqOw0KICAgIG15ICRpbnRlcmZhY2UgPSAkc2VsZi0+e2ludGVyZmFjZX07DQoNCiAgICBpZigg
ISRtcXR0X21zZyApIHsNCglpZiggIWRlZmluZWQoICRtcXR0X21zZyApICkgew0KCSAgICAkbXF0
dF9tc2cgPSAnPHVuZGVmPic7DQoJfQ0KCSRzZWxmLT5kZWJ1ZyggMiwgIklHTk9SSU5HIERJU0NP
VkVSWSBDTEVBTiBNRVNTQUdFOiAkbXF0dF90b3BpYyAtLSBNOickbXF0dF9tc2cnIiApOw0KCXJl
dHVybjsNCiAgICB9DQoNCiAgICAkb2JqID0gbmV3IG1xdHRfRGlzY292ZXJlZEl0ZW0oICRzZWxm
LCB1bmRlZiwgJG1xdHRfdG9waWMsICRtcXR0X21zZywgJ2R5bmFtaWMnICk7DQoNCiAgICBpZigg
JG9iaiApIHsNCglteSAkb2JqX25hbWUgPSAkb2JqLT57bXF0dF9uYW1lfTsNCgkkb2JqLT57Y2F0
ZWdvcnl9ID0gIk1RVFQgRGlzY292ZXJlZCBJdGVtcyI7DQoJJG9iai0+e2ZpbGVuYW1lfSA9ICJt
cXR0X2Rpc2NvdmVyeSI7DQoJJG9iai0+e29iamVjdF9uYW1lfSA9ICJcJCRvYmpfbmFtZSI7DQoJ
Jm1haW46OnJlZ2lzdGVyX29iamVjdF9ieV9uYW1lKCJcJCRvYmpfbmFtZSIsJG9iaik7DQoJJm1x
dHQ6OndyaXRlX2Rpc2NvdmVyZWRfaXRlbXMoKTsgICAgICMgaW5jYXNlIG9mIGF1dG91cGRhdGUg
b24gdGhlIGRpc2NvdmVyZWQgaXRlbXMgZmlsZQ0KICAgIH0NCn0NCg0KDQojIyMjIyMjIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMNCiMgVGhlc2UgbmV4dCBzdWJzIGhhdmUgYmVlbiBtb3ZlZCB0byBtcXR0IGNsYXNzLi4uDQoj
IFN0dWJzIGFyZSBsZWZ0IGhlcmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5DQojIyMjIyMj
IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj
IyMjIyMjIyMNCg0KDQpzdWIgd3JpdGVfZGlzY292ZXJlZF9pdGVtcyB7DQogICAgbXkgKCRvdXRm
aWxlbmFtZSwgJGF1dG91cGRhdGUpID0gQF87DQoNCiAgICAmbXF0dDo6d3JpdGVfZGlzY292ZXJl
ZF9pdGVtcyggJG91dGZpbGVuYW1lLCAkYXV0b3VwZGF0ZSApOw0KfQ0KDQpzdWIgcHVibGlzaF9k
aXNjb3ZlcnlfZGF0YSB7DQogICAgbXkgKCRzZWxmKSA9IEBfOw0KDQogICAgcmV0dXJuICRzZWxm
LT57aW50ZXJmYWNlfS0+cHVibGlzaF9kaXNjb3ZlcnlfZGF0YSgpOw0KfQ0KDQoNCg0KIyAtWyBG
aW5pIC0gbXF0dF9EaXNjb3ZlcnkgXS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KDQojIC1bIEZpbmkgXS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KMTsNCg0K
--00000000000060c983064b0dd0ed
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
--00000000000060c983064b0dd0ed
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
________________________________________________________
To unsubscribe from this list, go to: https://lists.sourceforge.net/lists/listinfo/misterhouse-users
--00000000000060c983064b0dd0ed--