<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>173527</bug_id>
          
          <creation_ts>2017-06-18 16:04:43 -0700</creation_ts>
          <short_desc>Merge MediaDevicesRequest and MediaDevicesEnumerationRequest to tighten up code and object lifetime</short_desc>
          <delta_ts>2017-08-15 13:05:30 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jer.noble</cc>
    
    <cc>jlewis3</cc>
    
    <cc>jonlee</cc>
    
    <cc>ryanhaddad</cc>
    
    <cc>sam</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1320554</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-18 16:04:43 -0700</bug_when>
    <thetext>Merge MediaDevicesRequest and MediaDevicesEnumerationRequest to tighten up code and object lifetime</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320555</commentid>
    <comment_count>1</comment_count>
      <attachid>313248</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-18 16:13:30 -0700</bug_when>
    <thetext>Created attachment 313248
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320556</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-18 16:15:19 -0700</bug_when>
    <thetext>Instead of isActive I could store the DOMPromise in a std::optional and set it to nullopt after we are done with it or when we cancel. I guess that would be a bit more elegant.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320558</commentid>
    <comment_count>3</comment_count>
      <attachid>313249</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-18 16:19:31 -0700</bug_when>
    <thetext>Created attachment 313249
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320562</commentid>
    <comment_count>4</comment_count>
      <attachid>313249</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-06-18 16:55:50 -0700</bug_when>
    <thetext>Comment on attachment 313249
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=313249&amp;action=review

&gt; Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.cpp:63
&gt; +    auto* controller = UserMediaController::from(document.page());
&gt; +    if (!controller) {
&gt; +        // FIXME: Should we resolve or reject the promise here instead of leaving the website waiting?
&gt; +        return;
&gt; +    }

The fact that UserMediaController::from can fail seems so opaque. What it is really checking is if there is page.  It makes me think we should make UserMediaController::from (and therefore Supplement::from) take a Page&amp; and return a Foo&amp; make the caller check that page is not null instead of the foo.

&gt; Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.cpp:113
&gt; +#if !PLATFORM(COCOA)
&gt; +    UNUSED_PARAM(devices);
&gt; +#else

This doesn&apos;t feel like a COCOA not COCOA divide, but rather a ENABLE(ATYPICAL_DEVICE_FILTERING) thing.  Actually, it would be better if that were a setting, all things considered, then it could be tested with different values.  Thoughts for the future.

&gt; Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.cpp:139
&gt; +    Vector&lt;RefPtr&lt;MediaDeviceInfo&gt;&gt; devices;

I would say this should be a Vector&lt;&gt; of Ref&lt;MediaDeviceInfo&gt;, but I would only be impugning myself.  I really need to make Ref&lt;&gt; work with the bindings!

&gt; Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.cpp:150
&gt; +        if (id.isEmpty())
&gt; +            continue;

Seems like id could be computed first and this check could be done directly after.

&gt; Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.cpp:152
&gt; +        devices.append(MediaDeviceInfo::create(&amp;document, label, id, groupId, deviceType));

Quite silly that MediaDeviceInfo::create takes the document by pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320729</commentid>
    <comment_count>5</comment_count>
      <attachid>313249</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-19 10:10:29 -0700</bug_when>
    <thetext>Comment on attachment 313249
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=313249&amp;action=review

&gt;&gt; Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.cpp:152
&gt;&gt; +        devices.append(MediaDeviceInfo::create(&amp;document, label, id, groupId, deviceType));
&gt; 
&gt; Quite silly that MediaDeviceInfo::create takes the document by pointer.

Turns out it doesn’t even need a document pointer. Can this be a structure instead of an object? I don’t remember when we have that kind of choice in IDL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320966</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-19 21:19:01 -0700</bug_when>
    <thetext>Committed r218530: &lt;http://trac.webkit.org/changeset/218530&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1320973</commentid>
    <comment_count>7</comment_count>
      <attachid>313249</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-19 21:42:08 -0700</bug_when>
    <thetext>Comment on attachment 313249
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=313249&amp;action=review

&gt;&gt; Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.cpp:63
&gt;&gt; +    }
&gt; 
&gt; The fact that UserMediaController::from can fail seems so opaque. What it is really checking is if there is page.  It makes me think we should make UserMediaController::from (and therefore Supplement::from) take a Page&amp; and return a Foo&amp; make the caller check that page is not null instead of the foo.

Done.

&gt;&gt; Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.cpp:113
&gt;&gt; +#else
&gt; 
&gt; This doesn&apos;t feel like a COCOA not COCOA divide, but rather a ENABLE(ATYPICAL_DEVICE_FILTERING) thing.  Actually, it would be better if that were a setting, all things considered, then it could be tested with different values.  Thoughts for the future.

Used a #define in the file for clarity.

&gt;&gt; Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.cpp:150
&gt;&gt; +            continue;
&gt; 
&gt; Seems like id could be computed first and this check could be done directly after.

Done.

&gt;&gt;&gt; Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.cpp:152
&gt;&gt;&gt; +        devices.append(MediaDeviceInfo::create(&amp;document, label, id, groupId, deviceType));
&gt;&gt; 
&gt;&gt; Quite silly that MediaDeviceInfo::create takes the document by pointer.
&gt; 
&gt; Turns out it doesn’t even need a document pointer. Can this be a structure instead of an object? I don’t remember when we have that kind of choice in IDL.

Removed the document argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321151</commentid>
    <comment_count>8</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2017-06-20 10:10:01 -0700</bug_when>
    <thetext>After this patch several mediastream tests have started to crash on Debug builds with Assertion failures:

https://build.webkit.org/results/Apple%20Sierra%20Debug%20WK2%20(Tests)/r218588%20(1650)/results.html

stdio:

ASSERTION FAILED: !m_promise
/Volumes/Data/slave/sierra-debug/build/Source/WebCore/Modules/mediastream/MediaDevicesEnumerationRequest.cpp(137) : void WebCore::MediaDevicesEnumerationRequest::setDeviceInfo(const Vector&lt;WebCore::CaptureDevice&gt; &amp;, const WTF::String &amp;, bool)
1   0x114c442fd WTFCrash
2   0x10a87ca40 WebCore::MediaDevicesEnumerationRequest::setDeviceInfo(WTF::Vector&lt;WebCore::CaptureDevice, 0ul, WTF::CrashOnOverflow, 16ul&gt; const&amp;, WTF::String const&amp;, bool)
3   0x1059aaf57 WebKit::UserMediaPermissionRequestManager::didCompleteMediaDeviceEnumeration(unsigned long long, WTF::Vector&lt;WebCore::CaptureDevice, 0ul, WTF::CrashOnOverflow, 16ul&gt; const&amp;, WTF::String&amp;&amp;, bool)
4   0x105c2c426 WebKit::WebPage::didCompleteMediaDeviceEnumeration(unsigned long long, WTF::Vector&lt;WebCore::CaptureDevice, 0ul, WTF::CrashOnOverflow, 16ul&gt; const&amp;, WTF::String&amp;&amp;, bool)
5   0x105cacd9d void IPC::callMemberFunctionImpl&lt;WebKit::WebPage, void (WebKit::WebPage::*)(unsigned long long, WTF::Vector&lt;WebCore::CaptureDevice, 0ul, WTF::CrashOnOverflow, 16ul&gt; const&amp;, WTF::String&amp;&amp;, bool), std::__1::tuple&lt;unsigned long long, WTF::Vector&lt;WebCore::CaptureDevice, 0ul, WTF::CrashOnOverflow, 16ul&gt;, WTF::String, bool&gt;, 0ul, 1ul, 2ul, 3ul&gt;(WebKit::WebPage*, void (WebKit::WebPage::*)(unsigned long long, WTF::Vector&lt;WebCore::CaptureDevice, 0ul, WTF::CrashOnOverflow, 16ul&gt; const&amp;, WTF::String&amp;&amp;, bool), std::__1::tuple&lt;unsigned long long, WTF::Vector&lt;WebCore::CaptureDevice, 0ul, WTF::CrashOnOverflow, 16ul&gt;, WTF::String, bool&gt;&amp;&amp;, std::__1::integer_sequence&lt;unsigned long, 0ul, 1ul, 2ul, 3ul&gt;)
6   0x105cabb28 void IPC::callMemberFunction&lt;WebKit::WebPage, void (WebKit::WebPage::*)(unsigned long long, WTF::Vector&lt;WebCore::CaptureDevice, 0ul, WTF::CrashOnOverflow, 16ul&gt; const&amp;, WTF::String&amp;&amp;, bool), std::__1::tuple&lt;unsigned long long, WTF::Vector&lt;WebCore::CaptureDevice, 0ul, WTF::CrashOnOverflow, 16ul&gt;, WTF::String, bool&gt;, std::__1::integer_sequence&lt;unsigned long, 0ul, 1ul, 2ul, 3ul&gt; &gt;(std::__1::tuple&lt;unsigned long long, WTF::Vector&lt;WebCore::CaptureDevice, 0ul, WTF::CrashOnOverflow, 16ul&gt;, WTF::String, bool&gt;&amp;&amp;, WebKit::WebPage*, void (WebKit::WebPage::*)(unsigned long long, WTF::Vector&lt;WebCore::CaptureDevice, 0ul, WTF::CrashOnOverflow, 16ul&gt; const&amp;, WTF::String&amp;&amp;, bool))
7   0x105c9ea80 void IPC::handleMessage&lt;Messages::WebPage::DidCompleteMediaDeviceEnumeration, WebKit::WebPage, void (WebKit::WebPage::*)(unsigned long long, WTF::Vector&lt;WebCore::CaptureDevice, 0ul, WTF::CrashOnOverflow, 16ul&gt; const&amp;, WTF::String&amp;&amp;, bool)&gt;(IPC::Decoder&amp;, WebKit::WebPage*, void (WebKit::WebPage::*)(unsigned long long, WTF::Vector&lt;WebCore::CaptureDevice, 0ul, WTF::CrashOnOverflow, 16ul&gt; const&amp;, WTF::String&amp;&amp;, bool))
8   0x105c93b10 WebKit::WebPage::didReceiveWebPageMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
9   0x105c2da7e WebKit::WebPage::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
10  0x105c2dac4 non-virtual thunk to WebKit::WebPage::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
11  0x1055b6dc8 IPC::MessageReceiverMap::dispatchMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
12  0x105e4eb4d WebKit::WebProcess::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;)
13  0x10548e463 IPC::Connection::dispatchMessage(IPC::Decoder&amp;)
14  0x105483b98 IPC::Connection::dispatchMessage(std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;)
15  0x10548ea60 IPC::Connection::dispatchOneMessage()
16  0x1054a6d9d IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;)::$_14::operator()()
17  0x1054a6cf9 WTF::Function&lt;void ()&gt;::CallableWrapper&lt;IPC::Connection::enqueueIncomingMessage(std::__1::unique_ptr&lt;IPC::Decoder, std::__1::default_delete&lt;IPC::Decoder&gt; &gt;)::$_14&gt;::call()
18  0x114c72fae WTF::Function&lt;void ()&gt;::operator()() const
19  0x114c92b53 WTF::RunLoop::performWork()
20  0x114c93324 WTF::RunLoop::performWork(void*)
21  0x7fffa88703e1 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__
22  0x7fffa885165c __CFRunLoopDoSources0
23  0x7fffa8850b46 __CFRunLoopRun
24  0x7fffa8850544 CFRunLoopRunSpecific
25  0x7fffa7db0ebc RunCurrentEventLoopInMode
26  0x7fffa7db0cf1 ReceiveNextEventCommon
27  0x7fffa7db0b26 _BlockUntilNextEventMatchingListInModeWithFilter
28  0x7fffa6349a54 _DPSNextEvent
29  0x7fffa6ac57ee -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]
30  0x7fffa633e3db -[NSApplication run]
31  0x7fffa6308e0e NSApplicationMain
LEAK: 14 WebPageProxy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321159</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-20 10:43:42 -0700</bug_when>
    <thetext>Feel free to roll out. Likely we just need to add an if statement to fix it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321164</commentid>
    <comment_count>10</comment_count>
    <who name="Matt Lewis">jlewis3</who>
    <bug_when>2017-06-20 10:53:22 -0700</bug_when>
    <thetext>Reverted r218530 for reason:

This revision caused multiple media stream test crashes on Debug builds.

Committed r218601: &lt;http://trac.webkit.org/changeset/218601&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1321167</commentid>
    <comment_count>11</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2017-06-20 11:04:38 -0700</bug_when>
    <thetext>Maybe I would have seen this on EWS if I had posted the final version of the patch.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313248</attachid>
            <date>2017-06-18 16:13:30 -0700</date>
            <delta_ts>2017-06-18 16:19:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173527-20170618161329.patch</filename>
            <type>text/plain</type>
            <size>33419</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4NDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWU4Y2M2ODAxZjA5YmFm
NzFiM2ZjMmY0NmYwOTdjNDg2OWVjNDQyMi4uOTZiNTEzNjNkYjFhYjkwNWVkZGI3M2E2NjEwZDJm
NDUyNjJiZDBjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDE3LTA2LTE4ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNZXJnZSBNZWRpYURldmljZXNS
ZXF1ZXN0IGFuZCBNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QgdG8gdGlnaHRlbiB1cCBj
b2RlIGFuZCBvYmplY3QgbGlmZXRpbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MzUyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TWVkaWFEZXZpY2VzOjplbnVtZXJhdGVEZXZpY2VzKTogQ2FsbCBN
ZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QKKyAgICAgICAgZGlyZWN0bHkgaGVyZSBpbnN0
ZWFkIG9mIGdvaW5nIHRocm91Z2ggTWVkaWFEZXZpY2VzUmVxdWVzdC4KKworICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0LmNwcDogTW92
ZWQgY29kZSBmcm9tCisgICAgICAgIE1lZGlhRGV2aWNlc1JlcXVlc3QgaW4gaGVyZS4gUHV0IHRo
ZSB0eXBpY2FsIGNvdW50cyBhdCB0aGUgdG9wIG9mIHRoZSBmaWxlLgorICAgICAgICAoV2ViQ29y
ZTo6TWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0OjpNZWRpYURldmljZXNFbnVtZXJhdGlv
blJlcXVlc3QpOgorICAgICAgICBNYXJrZWQgaW5saW5lIGFuZCBjaGFuZ2VkIHRvIHRha2UgYSBE
T00gcHJvbWlzZSBkaXJlY3RseSByYXRoZXIgdGhhbiBoYXZpbmcKKyAgICAgICAgYSBzZXBhcmF0
ZSBjbGFzcyBkbyB0aGUgbWFwcGluZyB0byBET00gcHJvbWlzZXMuCisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3Q6OnN0YXJ0KTogUmVwbGFjZWQgdGhlIGNy
ZWF0ZSBmdW5jdGlvbgorICAgICAgICB3aXRoIHRoaXMuIFRoZSBjYWxsZXIgZG9lc24ndCBhY3R1
YWxseSBrZWVwIGEgcmVmZXJlbmNlIHRvIHRoZSBvYmplY3QuCisgICAgICAgIEFkZGVkIGEgRklY
TUUgYWJvdXQgdGhlIGJlaGF2aW9yLCBub3QgbmV3LCB3aGVyZSB3ZSBuZWl0aGVyIHJlc29sdmUg
bm9yIHJlamVjdAorICAgICAgICB0aGUgcHJvbWlzZSBpZiB0aGVyZSBpcyBubyB1c2VyIG1lZGlh
IGNvbnRyb2xsZXIuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYURldmljZXNFbnVtZXJhdGlvblJl
cXVlc3Q6On5NZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QpOgorICAgICAgICBBZGRlZCBh
IEZJWE1FIGFib3V0IHRoZSBpc3N1ZSB0aGF0IHdlIGRvbid0IHJlc29sdmUgb3IgcmVqZWN0IHRo
ZSBwcm9taXNlIGlmCisgICAgICAgIHRoZSBjbGllbnQgZHJvcHMgdGhlIGxhc3QgcmVmZXJlbmNl
IHRvIHRoZSByZXF1ZXN0IHdpdGhvdXQgY2FsbGluZyBzZXREZXZpY2VJbmZvLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0Ojpkb2N1bWVudCk6IEFkZGVk
LiBQcml2YXRlIGhlbHBlci4KKyAgICAgICAgUmV0dXJucyBudWxscHRyIGlmIHRoZSByZXF1ZXN0
IGlzIG5vIGxvbmdlciBhY3RpdmUuCisgICAgICAgIChXZWJDb3JlOjpNZWRpYURldmljZXNFbnVt
ZXJhdGlvblJlcXVlc3Q6OmZyYW1lKTogQWRkZWQuIEZvciB1c2UgYnkgYSBjYWxsZXIKKyAgICAg
ICAgdGhhdCB3YXMgZ2V0dGluZyB0byB0aGUgZnJhbWUuIFVzZXMgdGhlIGRvY3VtZW50IGZ1bmN0
aW9uIHNvIGl0IHdpbGwgcmV0dXJuCisgICAgICAgIG51bGxwdHIgaWYgdGhlIHJlcXVlc3QgaXMg
bm8gbG9uZ2VyIGFjdGl2ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRGV2aWNlc0VudW1lcmF0
aW9uUmVxdWVzdDo6dXNlck1lZGlhRG9jdW1lbnRPcmlnaW4pOiBDaGFuZ2VkCisgICAgICAgIHRv
IGRvIHRoZSB3b3JrIHVzaW5nIHRoZSBkb2N1bWVudCBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNv
cmU6Ok1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdDo6dG9wTGV2ZWxEb2N1bWVudE9yaWdp
bik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1
ZXN0Ojpjb250ZXh0RGVzdHJveWVkKTogU2ltcGxpZmllZC4gV2UKKyAgICAgICAgbm93IGNhbiBz
aW1wbHkgc2V0IGEgYm9vbGVhbiB3aGVuIHRoZSBjb250ZXh0IGlzIGRlc3Ryb3llZCwgc28gdGhl
cmUgYXJlIG5vCisgICAgICAgIHNpZGUgZWZmZWN0cyBhbmQgdGhlIGNvZGUgaXMgc2ltcGxlci4K
KyAgICAgICAgKFdlYkNvcmU6OnJlbW92ZUF0eXBpY2FsRGV2aWNlcyk6IFJlbmFtZWQgYW5kIHRp
Z2h0ZW5lZCB1cCB0aGUgY29kZSBhIGJpdC4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRGV2aWNl
c0VudW1lcmF0aW9uUmVxdWVzdDo6c2V0RGV2aWNlSW5mbyk6IE1vdmVkIHRoZSBjb2RlCisgICAg
ICAgIGhlcmUgZnJvbSBNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QgdG8gcGFzcyB0aGUg
ZGV2aWNlcyBhbG9uZy4KKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZp
Y2VzRW51bWVyYXRpb25SZXF1ZXN0Lmg6IE1hZGUgdGhlCisgICAgICAgIENvbnRleHREZXN0cnVj
dGlvbk9ic2VydmVyIHVzZSBwcml2YXRlIGluaGVyaXRhbmNlLiBDdXQgZG93biB0aGUgaW5jbHVk
ZXMKKyAgICAgICAgYW5kIHJlbW92ZWQgdmFyaW91cyB1bm5lZWRlZCBmdW5jdGlvbnMuCisKKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3BwOiBSZW1v
dmVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5o
OiBSZW1vdmVkLgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajog
VXBkYXRlZCBmb3IgdGhlIGFib3ZlIHJlbW92YWxzLgorCiAyMDE3LTA2LTE4ICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgQ3Jhc2ggd2hlbiByZS1lbnRlcmluZyBN
ZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3Q6OmNhbmNlbCgpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggNzY1
YzRkNDUwYWQyMDU1MzRmZDYyOWUwMzFkYzU3MWNlNzE5ODBhMy4uOWQ3ZmJhZmI4OWM4ZDdjZjRm
N2Q5NDc4MGI0NDI1OTU5MGU1ZTIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDE3
LTA2LTE4ICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNZXJnZSBN
ZWRpYURldmljZXNSZXF1ZXN0IGFuZCBNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QgdG8g
dGlnaHRlbiB1cCBjb2RlIGFuZCBvYmplY3QgbGlmZXRpbWUKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MzUyNworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLVXNlck1lZGlh
UGVybWlzc2lvbkNoZWNrLmg6IEZpeGVkIGluY29ycmVjdCBmaWxlIG5hbWUgaW4gY29tbWVudC4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvTWVkaWFTdHJlYW0vVXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VXNlck1lZGlhUGVybWlzc2lvblJl
cXVlc3RNYW5hZ2VyOjplbnVtZXJhdGVNZWRpYURldmljZXMpOiBVc2UgdGhlIG5ldyBmcmFtZQor
ICAgICAgICBmdW5jdGlvbiBmcm9tIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdCByYXRo
ZXIgdGhhbiBmaW5kaW5nIHRoZSBmcmFtZSB3aXRoIG91cgorICAgICAgICBvd24gY29kZS4KKwog
MjAxNy0wNi0xNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVu
cmV2aWV3ZWQsIGZvbGxvdy11cCBidWlsZCBmaXggYWZ0ZXIgcjIxODQ1Ny4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcAppbmRleCA0
MWU1OTVkNjIxZjljNGU5NjA5OWEwNjEwYzQ2ZWQ2MWZiZDg3ZGZlLi4wOWNkOGI0OTBkNWI5YWE1
ZTk2MTMxZDcyOTI1ZWM1YzRhNGE5NmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwCkBAIC0zNyw3ICszNyw3IEBACiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKLSNpbmNsdWRlICJNZWRpYURldmljZXNSZXF1ZXN0LmgiCisjaW5jbHVkZSAiTWVkaWFE
ZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0LmgiCiAjaW5jbHVkZSAiTWVkaWFUcmFja1N1cHBvcnRl
ZENvbnN0cmFpbnRzLmgiCiAjaW5jbHVkZSAiVXNlck1lZGlhUmVxdWVzdC5oIgogI2luY2x1ZGUg
PHd0Zi9SYW5kb21OdW1iZXIuaD4KQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIE1lZGlhRGV2aWNl
czo6ZW51bWVyYXRlRGV2aWNlcyhFbnVtZXJhdGVEZXZpY2VzUHJvbWlzZSYmIHByb21pc2UpIGNv
bnN0CiAgICAgYXV0byogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOwogICAgIGlmICghZG9j
dW1lbnQpCiAgICAgICAgIHJldHVybjsKLSAgICBNZWRpYURldmljZXNSZXF1ZXN0OjpjcmVhdGUo
KmRvY3VtZW50LCBXVEZNb3ZlKHByb21pc2UpKS0+c3RhcnQoKTsKKyAgICBNZWRpYURldmljZXNF
bnVtZXJhdGlvblJlcXVlc3Q6OnN0YXJ0KCpkb2N1bWVudCwgV1RGTW92ZShwcm9taXNlKSk7CiB9
CiAKIE1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cyBNZWRpYURldmljZXM6OmdldFN1cHBv
cnRlZENvbnN0cmFpbnRzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0LmNw
cAppbmRleCBkYjI4MTFiODliNGVkZThhMDBmYTkwYmM0NDY2YjJlMWM2ZDE5MTVjLi5iY2Y5NjJj
ODJlZjBmZjExYTM3NzkyOWJlMDM0OTk3ZmE0ODkwNzkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNF
bnVtZXJhdGlvblJlcXVlc3QuY3BwCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDc3ICsyOSwxMzIgQEAKIAogI2lmIEVOQUJMRShNRURJ
QV9TVFJFQU0pCiAKLSNpbmNsdWRlICJDYXB0dXJlRGV2aWNlLmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLSNpbmNsdWRlICJNYWluRnJhbWUuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5o
IgorI2luY2x1ZGUgIkpTTWVkaWFEZXZpY2VJbmZvLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlci5oIgogI2luY2x1ZGUgIlVzZXJNZWRpYUNvbnRyb2xsZXIuaCIKIAorI2lm
IFBMQVRGT1JNKENPQ09BKQorY29uc3QgaW50IHR5cGljYWxNaWNyb3Bob25lQ291bnQgPSAxOwor
I2VuZGlmCisKKyNpZiBQTEFURk9STShJT1MpCitjb25zdCBpbnQgdHlwaWNhbENhbWVyYUNvdW50
ID0gMjsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKQorY29uc3QgaW50IHR5cGljYWxDYW1l
cmFDb3VudCA9IDE7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8TWVkaWFE
ZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0PiBNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3Q6
OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIENvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlv
bkhhbmRsZXIpCitpbmxpbmUgTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0OjpNZWRpYURl
dmljZXNFbnVtZXJhdGlvblJlcXVlc3QoRG9jdW1lbnQmIGRvY3VtZW50LCBQcm9taXNlJiYgcHJv
bWlzZSkKKyAgICA6IENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKCZkb2N1bWVudCkKKyAgICAs
IG1fcHJvbWlzZShXVEZNb3ZlKHByb21pc2UpKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdChkb2N1bWVudCwgV1RGTW92ZShjb21wbGV0
aW9uSGFuZGxlcikpKTsKIH0KIAotTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0OjpNZWRp
YURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4
dCwgQ29tcGxldGlvbkhhbmRsZXImJiBjb21wbGV0aW9uSGFuZGxlcikKLSAgICA6IENvbnRleHRE
ZXN0cnVjdGlvbk9ic2VydmVyKCZjb250ZXh0KQotICAgICwgbV9jb21wbGV0aW9uSGFuZGxlcihX
VEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSkKK3ZvaWQgTWVkaWFEZXZpY2VzRW51bWVyYXRpb25S
ZXF1ZXN0OjpzdGFydChEb2N1bWVudCYgZG9jdW1lbnQsIFByb21pc2UmJiBwcm9taXNlKQogewor
ICAgIGF1dG8qIGNvbnRyb2xsZXIgPSBVc2VyTWVkaWFDb250cm9sbGVyOjpmcm9tKGRvY3VtZW50
LnBhZ2UoKSk7CisgICAgaWYgKCFjb250cm9sbGVyKSB7CisgICAgICAgIC8vIEZJWE1FOiBTaG91
bGQgd2UgcmVzb2x2ZSBvciByZWplY3QgdGhlIHByb21pc2UgaGVyZSBpbnN0ZWFkIG9mIGxlYXZp
bmcgdGhlIHdlYnNpdGUgd2FpdGluZz8KKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNv
bnRyb2xsZXItPmVudW1lcmF0ZU1lZGlhRGV2aWNlcyhhZG9wdFJlZigqbmV3IE1lZGlhRGV2aWNl
c0VudW1lcmF0aW9uUmVxdWVzdChkb2N1bWVudCwgV1RGTW92ZShwcm9taXNlKSkpKTsKIH0KIAog
TWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0Ojp+TWVkaWFEZXZpY2VzRW51bWVyYXRpb25S
ZXF1ZXN0KCkKIHsKKyAgICAvLyBXZSB3aWxsIGdldCBoZXJlIHdpdGggbV9pc0FjdGl2ZSB0cnVl
IGlmIHRoZSBjbGllbnQgZHJvcHMgdGhlIHJlcXVlc3Qgd2l0aG91dCBldmVyIGNhbGxpbmcgc2V0
RGV2aWNlSW5mby4KKyAgICAvLyBGSVhNRTogU2hvdWxkIHdlIHJlc29sdmUgb3IgcmVqZWN0IHRo
ZSBwcm9taXNlIGluIHRoYXQgY2FzZSBpbnN0ZWFkIG9mIGxlYXZpbmcgdGhlIHdlYnNpdGUgd2Fp
dGluZz8KIH0KIAotU2VjdXJpdHlPcmlnaW4qIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVz
dDo6dXNlck1lZGlhRG9jdW1lbnRPcmlnaW4oKSBjb25zdAorRG9jdW1lbnQqIE1lZGlhRGV2aWNl
c0VudW1lcmF0aW9uUmVxdWVzdDo6ZG9jdW1lbnQoKQogewotICAgIGlmICghc2NyaXB0RXhlY3V0
aW9uQ29udGV4dCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbV9pc0Fj
dGl2ZSA/IGRvd25jYXN0PERvY3VtZW50PihzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpIDogbnVs
bHB0cjsKK30KIAotICAgIHJldHVybiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5
T3JpZ2luKCk7CitGcmFtZSogTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0OjpmcmFtZSgp
Cit7CisgICAgYXV0byogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOworICAgIHJldHVybiBk
b2N1bWVudCA/IGRvY3VtZW50LT5mcmFtZSgpIDogbnVsbHB0cjsKIH0KIAotU2VjdXJpdHlPcmln
aW4qIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdDo6dG9wTGV2ZWxEb2N1bWVudE9yaWdp
bigpIGNvbnN0CitTZWN1cml0eU9yaWdpbiogTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0
Ojp1c2VyTWVkaWFEb2N1bWVudE9yaWdpbigpCiB7Ci0gICAgaWYgKCFzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8qIGRvY3VtZW50ID0g
dGhpcy0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQgPyAmZG9jdW1lbnQtPnNlY3Vy
aXR5T3JpZ2luKCkgOiBudWxscHRyOworfQogCi0gICAgcmV0dXJuICZzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCktPnRvcE9yaWdpbigpOworU2VjdXJpdHlPcmlnaW4qIE1lZGlhRGV2aWNlc0VudW1l
cmF0aW9uUmVxdWVzdDo6dG9wTGV2ZWxEb2N1bWVudE9yaWdpbigpCit7CisgICAgYXV0byogZG9j
dW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOworICAgIHJldHVybiBkb2N1bWVudCA/ICZkb2N1bWVu
dC0+dG9wT3JpZ2luKCkgOiBudWxscHRyOwogfQogCiB2b2lkIE1lZGlhRGV2aWNlc0VudW1lcmF0
aW9uUmVxdWVzdDo6Y29udGV4dERlc3Ryb3llZCgpCiB7Ci0gICAgLy8gQ2FsbGluZyBjYW5jZWwo
KSBtYXkgZGVzdHJveSBvdXJzZWx2ZXMuCi0gICAgUmVmPE1lZGlhRGV2aWNlc0VudW1lcmF0aW9u
UmVxdWVzdD4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSBi
ZSBjYWxsaW5nIFVzZXJNZWRpYUNvbnRyb2xsZXI6OmNhbmNlbE1lZGlhRGV2aWNlc0VudW1lcmF0
aW9uUmVxdWVzdCBoZXJlPworICAgIC8vIElmIG5vdCwgdGhlbiB3aHkgZG9lcyB0aGF0IGZ1bmN0
aW9uIGV4aXN0PyBJZiB3ZSBkZWNpZGUgdGhhdCB3ZSB3YW50IHRvIGNhbGwgdGhhdCBjYW5jZWwK
KyAgICAvLyBmdW5jdGlvbiBoZXJlLCB0aGVuIHRoZXJlIG1heSBiZSBhIHByb2JsZW0sIGJlY2F1
c2UgaXQncyBoYXJkIHRvIGdldCBmcm9tIHRoZSBkb2N1bWVudCB0bworICAgIC8vIHRoZSBwYWdl
IHRvIHRoZSB1c2VyIG1lZGlhIGNvbnRyb2xsZXIgd2hpbGUgdGhlIGRvY3VtZW50IGlzIGJlaW5n
IGRlc3Ryb3llZC4KIAotICAgIGNhbmNlbCgpOworICAgIG1faXNBY3RpdmUgPSBmYWxzZTsKICAg
ICBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcjo6Y29udGV4dERlc3Ryb3llZCgpOwogfQogCi12
b2lkIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdDo6c3RhcnQoKQorLy8gVG8gcmVkdWNl
IHRoZSB2YWx1ZSBvZiBtZWRpYSBkZXZpY2VzIGZvciBmaW5nZXJwcmludGluZywgZmlsdGVyIGRl
dmljZXMgdGhhdCBnbyBiZXlvbmQgdGhlIHR5cGljYWwgbnVtYmVyLgorc3RhdGljIGlubGluZSB2
b2lkIHJlbW92ZUF0eXBpY2FsRGV2aWNlcyhWZWN0b3I8UmVmUHRyPE1lZGlhRGV2aWNlSW5mbz4+
JiBkZXZpY2VzKQogewotICAgIEFTU0VSVChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworI2lm
ICFQTEFURk9STShDT0NPQSkKKyAgICBVTlVTRURfUEFSQU0oZGV2aWNlcyk7CisjZWxzZQorICAg
IGludCBjYW1lcmFDb3VudCA9IDA7CisgICAgaW50IG1pY3JvcGhvbmVDb3VudCA9IDA7CisgICAg
ZGV2aWNlcy5yZW1vdmVBbGxNYXRjaGluZyhbJmNhbWVyYUNvdW50LCAmbWljcm9waG9uZUNvdW50
XSAoY29uc3QgUmVmUHRyPE1lZGlhRGV2aWNlSW5mbz4mIGRldmljZSkgeworICAgICAgICBpZiAo
ZGV2aWNlLT5raW5kKCkgPT0gTWVkaWFEZXZpY2VJbmZvOjpLaW5kOjpWaWRlb2lucHV0ICYmICsr
Y2FtZXJhQ291bnQgPiB0eXBpY2FsQ2FtZXJhQ291bnQpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKGRldmljZS0+a2luZCgpID09IE1lZGlhRGV2aWNlSW5mbzo6S2luZDo6
QXVkaW9pbnB1dCAmJiArK21pY3JvcGhvbmVDb3VudCA+IHR5cGljYWxNaWNyb3Bob25lQ291bnQp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0p
OworI2VuZGlmCit9CiAKLSAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigq
c2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBhdXRvKiBjb250cm9sbGVyID0gVXNlck1l
ZGlhQ29udHJvbGxlcjo6ZnJvbShkb2N1bWVudC5wYWdlKCkpOwotICAgIGlmICghY29udHJvbGxl
cikKK3ZvaWQgTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0OjpzZXREZXZpY2VJbmZvKGNv
bnN0IFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgY2FwdHVyZURldmljZXMsIGNvbnN0IFN0cmluZyYg
ZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0LCBib29sIG9yaWdpbkhhc1BlcnNpc3RlbnRBY2Nlc3Mp
Cit7CisgICAgaWYgKCFtX2lzQWN0aXZlKQogICAgICAgICByZXR1cm47CisgICAgbV9pc0FjdGl2
ZSA9IGZhbHNlOwogCi0gICAgUmVmPE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdD4gcHJv
dGVjdGVkVGhpcygqdGhpcyk7Ci0gICAgY29udHJvbGxlci0+ZW51bWVyYXRlTWVkaWFEZXZpY2Vz
KCp0aGlzKTsKLX0KKyAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigqc2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKIAotdm9pZCBNZWRpYURldmljZXNFbnVtZXJhdGlvblJl
cXVlc3Q6OmNhbmNlbCgpCi17Ci0gICAgbV9jb21wbGV0aW9uSGFuZGxlciA9IG51bGxwdHI7Ci19
CisgICAgLy8gUG9saWN5IGFib3V0IGluY2x1ZGluZyBzb21lIG9mIHRoZSBtb3JlIHNlbnNpdGl2
ZSBpbmZvcm1hdGlvbiBhYm91dCBjYXB0dXJlIGRldmljZXMuCisgICAgYm9vbCBpbmNsdWRlTGFi
ZWxzID0gb3JpZ2luSGFzUGVyc2lzdGVudEFjY2VzcyB8fCBkb2N1bWVudC5oYXNIYWRBY3RpdmVN
ZWRpYVN0cmVhbVRyYWNrKCk7CisgICAgYm9vbCBpbmNsdWRlQXR5cGljYWxEZXZpY2VzID0gaW5j
bHVkZUxhYmVsczsKIAotdm9pZCBNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3Q6OnNldERl
dmljZUluZm8oY29uc3QgVmVjdG9yPENhcHR1cmVEZXZpY2U+JiBkZXZpY2VMaXN0LCBjb25zdCBT
dHJpbmcmIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdCwgYm9vbCBvcmlnaW5IYXNQZXJzaXN0ZW50
QWNjZXNzKQotewotICAgIGlmIChtX2NvbXBsZXRpb25IYW5kbGVyKQotICAgICAgICBtX2NvbXBs
ZXRpb25IYW5kbGVyKGRldmljZUxpc3QsIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdCwgb3JpZ2lu
SGFzUGVyc2lzdGVudEFjY2Vzcyk7Ci0gICAgbV9jb21wbGV0aW9uSGFuZGxlciA9IG51bGxwdHI7
CisgICAgVmVjdG9yPFJlZlB0cjxNZWRpYURldmljZUluZm8+PiBkZXZpY2VzOworCisgICAgZG9j
dW1lbnQuc2V0RGV2aWNlSURIYXNoU2FsdChkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQpOworCisg
ICAgZm9yIChhdXRvJiBjYXB0dXJlRGV2aWNlIDogY2FwdHVyZURldmljZXMpIHsKKyAgICAgICAg
YXV0byBsYWJlbCA9IGluY2x1ZGVMYWJlbHMgPyBjYXB0dXJlRGV2aWNlLmxhYmVsKCkgOiBlbXB0
eVN0cmluZygpOworICAgICAgICBhdXRvIGlkID0gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6
c2luZ2xldG9uKCkuaGFzaFN0cmluZ1dpdGhTYWx0KGNhcHR1cmVEZXZpY2UucGVyc2lzdGVudElk
KCksIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdCk7CisgICAgICAgIGF1dG8gZ3JvdXBJZCA9IFJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLmhhc2hTdHJpbmdXaXRoU2FsdChj
YXB0dXJlRGV2aWNlLmdyb3VwSWQoKSwgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0KTsKKyAgICAg
ICAgYXV0byBkZXZpY2VUeXBlID0gY2FwdHVyZURldmljZS50eXBlKCkgPT0gQ2FwdHVyZURldmlj
ZTo6RGV2aWNlVHlwZTo6QXVkaW8gPyBNZWRpYURldmljZUluZm86OktpbmQ6OkF1ZGlvaW5wdXQg
OiBNZWRpYURldmljZUluZm86OktpbmQ6OlZpZGVvaW5wdXQ7CisKKyAgICAgICAgaWYgKGlkLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGRldmljZXMuYXBwZW5k
KE1lZGlhRGV2aWNlSW5mbzo6Y3JlYXRlKCZkb2N1bWVudCwgbGFiZWwsIGlkLCBncm91cElkLCBk
ZXZpY2VUeXBlKSk7CisgICAgfQorCisgICAgaWYgKCFpbmNsdWRlQXR5cGljYWxEZXZpY2VzKQor
ICAgICAgICByZW1vdmVBdHlwaWNhbERldmljZXMoZGV2aWNlcyk7CisKKyAgICBtX3Byb21pc2Uu
cmVzb2x2ZShkZXZpY2VzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNFbnVtZXJh
dGlvblJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFE
ZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0LmgKaW5kZXggMGJkMGRkNTgzZTE2MzVhOWM4ZTlkYzY2
NTEwMDkxZjU3N2ExMTU0Mi4uMjZlNDhhMzZhYWIxNjVhMGMzMWY5OTkwMzM3ZTlmYzk5MjI2ODA1
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURl
dmljZXNFbnVtZXJhdGlvblJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5oCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQxICsyOCwzNSBA
QAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAotI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVj
dC5oIgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgorI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgQ2FwdHVyZURldmljZTsKLWNsYXNzIERvY3VtZW50OworY2xhc3Mg
RnJhbWU7CitjbGFzcyBNZWRpYURldmljZUluZm87CiBjbGFzcyBTZWN1cml0eU9yaWdpbjsKIAot
Y2xhc3MgTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0IGZpbmFsIDogcHVibGljIENvbnRl
eHREZXN0cnVjdGlvbk9ic2VydmVyLCBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYURldmljZXNFbnVt
ZXJhdGlvblJlcXVlc3Q+IHsKK2NsYXNzIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdCBm
aW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdD4s
IHByaXZhdGUgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewogcHVibGljOgotICAgIHVzaW5n
IENvbXBsZXRpb25IYW5kbGVyID0gV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFZlY3RvcjxDYXB0
dXJlRGV2aWNlPiYsIGNvbnN0IFN0cmluZyYgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0LCBib29s
IG9yaWdpbkhhc1BlcnNpc3RlbnRBY2Nlc3MpPjsKLQotICAgIHN0YXRpYyBSZWY8TWVkaWFEZXZp
Y2VzRW51bWVyYXRpb25SZXF1ZXN0PiBjcmVhdGUoRG9jdW1lbnQmLCBDb21wbGV0aW9uSGFuZGxl
ciYmKTsKKyAgICB1c2luZyBQcm9taXNlID0gRE9NUHJvbWlzZURlZmVycmVkPElETFNlcXVlbmNl
PElETEludGVyZmFjZTxNZWRpYURldmljZUluZm8+Pj47CisgICAgc3RhdGljIHZvaWQgc3RhcnQo
RG9jdW1lbnQmLCBQcm9taXNlJiYpOwogCiAgICAgdmlydHVhbCB+TWVkaWFEZXZpY2VzRW51bWVy
YXRpb25SZXF1ZXN0KCk7CiAKLSAgICB2b2lkIHN0YXJ0KCk7Ci0gICAgdm9pZCBjYW5jZWwoKTsK
LQotICAgIGJvb2wgd2FzQ2FuY2VsZWQoKSBjb25zdCB7IHJldHVybiAhbV9jb21wbGV0aW9uSGFu
ZGxlcjsgfQotCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREZXZpY2VJbmZvKGNvbnN0IFZl
Y3RvcjxDYXB0dXJlRGV2aWNlPiYsIGNvbnN0IFN0cmluZyYgZGV2aWNlSWRlbnRpZmllckhhc2hT
YWx0LCBib29sIG9yaWdpbkhhc1BlcnNpc3RlbnRBY2Nlc3MpOwogCi0gICAgV0VCQ09SRV9FWFBP
UlQgU2VjdXJpdHlPcmlnaW4qIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luKCkgY29uc3Q7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgU2VjdXJpdHlPcmlnaW4qIHRvcExldmVsRG9jdW1lbnRPcmlnaW4oKSBj
b25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGcmFtZSogZnJhbWUoKTsKKyAgICBXRUJDT1JFX0VY
UE9SVCBTZWN1cml0eU9yaWdpbiogdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4oKTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBTZWN1cml0eU9yaWdpbiogdG9wTGV2ZWxEb2N1bWVudE9yaWdpbigpOwogCiBw
cml2YXRlOgotICAgIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdChTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgQ29tcGxldGlvbkhhbmRsZXImJik7Ci0KLSAgICAvLyBDb250ZXh0RGVzdHJ1
Y3Rpb25PYnNlcnZlcgorICAgIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdChEb2N1bWVu
dCYsIFByb21pc2UmJik7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCk7CiAgICAgdm9pZCBjb250
ZXh0RGVzdHJveWVkKCkgZmluYWw7CiAKLSAgICBDb21wbGV0aW9uSGFuZGxlciBtX2NvbXBsZXRp
b25IYW5kbGVyOworICAgIGJvb2wgbV9pc0FjdGl2ZSB7IHRydWUgfTsKKyAgICBQcm9taXNlIG1f
cHJvbWlzZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxOGUyNTk3OWU0MDM1ODNlN2ZmNDcyOGU2
MDZiYWU2YWZmMDE3M2U4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVx
dWVzdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxNTIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFLCBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
Ci0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiTWVkaWFEZXZpY2VzUmVxdWVzdC5oIgotCi0jaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKLQotI2luY2x1ZGUgIkNhcHR1cmVEZXZpY2UuaCIKLSNpbmNsdWRlICJEb2N1bWVu
dC5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSlNNZWRpYURldmljZUluZm8uaCIK
LSNpbmNsdWRlICJNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QuaCIKLSNpbmNsdWRlICJS
ZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCi0jaW5jbHVkZSAiU2VjdXJpdHlPcmlnaW4uaCIK
LSNpbmNsdWRlICJVc2VyTWVkaWFDb250cm9sbGVyLmgiCi0jaW5jbHVkZSA8d3RmL01haW5UaHJl
YWQuaD4KLSNpbmNsdWRlIDx3dGYvU0hBMS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWlu
bGluZSBNZWRpYURldmljZXNSZXF1ZXN0OjpNZWRpYURldmljZXNSZXF1ZXN0KERvY3VtZW50JiBk
b2N1bWVudCwgTWVkaWFEZXZpY2VzOjpFbnVtZXJhdGVEZXZpY2VzUHJvbWlzZSYmIHByb21pc2Up
Ci0gICAgOiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcigmZG9jdW1lbnQpCi0gICAgLCBtX3By
b21pc2UoV1RGTW92ZShwcm9taXNlKSkKLXsKLX0KLQotUmVmPE1lZGlhRGV2aWNlc1JlcXVlc3Q+
IE1lZGlhRGV2aWNlc1JlcXVlc3Q6OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhRGV2
aWNlczo6RW51bWVyYXRlRGV2aWNlc1Byb21pc2UmJiBwcm9taXNlKQotewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IE1lZGlhRGV2aWNlc1JlcXVlc3QoZG9jdW1lbnQsIFdURk1vdmUocHJvbWlz
ZSkpKTsKLX0KLQotTWVkaWFEZXZpY2VzUmVxdWVzdDo6fk1lZGlhRGV2aWNlc1JlcXVlc3QoKQot
ewotICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgZ2V0IGRlc3Ryb3llZCBhZnRlciB0aGUgZW51bWVy
YXRpb24gcmVxdWVzdCBoYXMgY29tcGxldGVkIG9yIGhhcyBiZWVuIGNhbmNlbGVkLgotICAgIEFT
U0VSVCghbV9lbnVtZXJhdGlvblJlcXVlc3QgfHwgbV9lbnVtZXJhdGlvblJlcXVlc3QtPndhc0Nh
bmNlbGVkKCkpOwotfQotCi1TZWN1cml0eU9yaWdpbiogTWVkaWFEZXZpY2VzUmVxdWVzdDo6c2Vj
dXJpdHlPcmlnaW4oKSBjb25zdAotewotICAgIGlmIChzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
Ci0gICAgICAgIHJldHVybiBzY3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnNlY3VyaXR5T3JpZ2lu
KCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotdm9pZCBNZWRpYURldmljZXNSZXF1ZXN0
Ojpjb250ZXh0RGVzdHJveWVkKCkKLXsKLSAgICAvLyBUaGUgY2FsbCB0byBtX2VudW1lcmF0aW9u
UmVxdWVzdC0+Y2FuY2VsKCkgbWlnaHQgZGVsZXRlIHRoaXMuCi0gICAgYXV0byBwcm90ZWN0ZWRU
aGlzID0gbWFrZVJlZigqdGhpcyk7Ci0KLSAgICBpZiAobV9lbnVtZXJhdGlvblJlcXVlc3QpIHsK
LSAgICAgICAgbV9lbnVtZXJhdGlvblJlcXVlc3QtPmNhbmNlbCgpOwotICAgICAgICBtX2VudW1l
cmF0aW9uUmVxdWVzdCA9IG51bGxwdHI7Ci0gICAgfQotICAgIENvbnRleHREZXN0cnVjdGlvbk9i
c2VydmVyOjpjb250ZXh0RGVzdHJveWVkKCk7Ci19Ci0KLXZvaWQgTWVkaWFEZXZpY2VzUmVxdWVz
dDo6ZmlsdGVyRGV2aWNlTGlzdChWZWN0b3I8UmVmUHRyPE1lZGlhRGV2aWNlSW5mbz4+JiBkZXZp
Y2VzKQotewotI2lmICFQTEFURk9STShDT0NPQSkKLSAgICBVTlVTRURfUEFSQU0oZGV2aWNlcyk7
Ci0jZWxzZQotCi0jaWYgUExBVEZPUk0oSU9TKQotICAgIHN0YXRpYyBjb25zdCBpbnQgZGVmYXVs
dENhbWVyYUNvdW50ID0gMjsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBzdGF0aWMg
Y29uc3QgaW50IGRlZmF1bHRDYW1lcmFDb3VudCA9IDE7Ci0jZW5kaWYKLSAgICBzdGF0aWMgY29u
c3QgaW50IGRlZmF1bHRNaWNyb3Bob25lQ291bnQgPSAxOwotCi0gICAgaW50IGNhbWVyYUNvdW50
ID0gMDsKLSAgICBpbnQgbWljcm9waG9uZUNvdW50ID0gMDsKLSAgICBkZXZpY2VzLnJlbW92ZUFs
bE1hdGNoaW5nKFsmXShjb25zdCBSZWZQdHI8TWVkaWFEZXZpY2VJbmZvPiYgZGV2aWNlKSAtPiBi
b29sIHsKLSAgICAgICAgaWYgKGRldmljZS0+a2luZCgpID09IE1lZGlhRGV2aWNlSW5mbzo6S2lu
ZDo6VmlkZW9pbnB1dCAmJiArK2NhbWVyYUNvdW50ID4gZGVmYXVsdENhbWVyYUNvdW50KQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmIChkZXZpY2UtPmtpbmQoKSA9PSBNZWRp
YURldmljZUluZm86OktpbmQ6OkF1ZGlvaW5wdXQgJiYgKyttaWNyb3Bob25lQ291bnQgPiBkZWZh
dWx0TWljcm9waG9uZUNvdW50KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0pOwotCi0jZW5kaWYKLX0KLQotdm9pZCBNZWRpYURldmljZXNS
ZXF1ZXN0OjpzdGFydCgpCi17Ci0gICAgLy8gVGhpcyBsYW1iZGEga2VlcHMgfHRoaXN8IGFsaXZl
IHVudGlsIHRoZSByZXF1ZXN0IGNvbXBsZXRlcyBvciBpcyBjYW5jZWxlZC4KLSAgICBhdXRvIGNv
bXBsZXRpb24gPSBbdGhpcywgcHJvdGVjdGVkVGhpcyA9IG1ha2VSZWYoKnRoaXMpXSAoY29uc3Qg
VmVjdG9yPENhcHR1cmVEZXZpY2U+JiBjYXB0dXJlRGV2aWNlcywgY29uc3QgU3RyaW5nJiBkZXZp
Y2VJZGVudGlmaWVySGFzaFNhbHQsIGJvb2wgb3JpZ2luSGFzUGVyc2lzdGVudEFjY2VzcykgbXV0
YWJsZSB7Ci0KLSAgICAgICAgbV9lbnVtZXJhdGlvblJlcXVlc3QgPSBudWxscHRyOwotCi0gICAg
ICAgIGlmICghc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIERvY3VtZW50JiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50Pigqc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICAgICAgZG9jdW1lbnQuc2V0RGV2aWNlSURIYXNoU2Fs
dChkZXZpY2VJZGVudGlmaWVySGFzaFNhbHQpOwotCi0gICAgICAgIFZlY3RvcjxSZWZQdHI8TWVk
aWFEZXZpY2VJbmZvPj4gZGV2aWNlczsKLSAgICAgICAgZm9yIChhdXRvJiBkZXZpY2VJbmZvIDog
Y2FwdHVyZURldmljZXMpIHsKLSAgICAgICAgICAgIGF1dG8gbGFiZWwgPSBlbXB0eVN0cmluZygp
OwotICAgICAgICAgICAgaWYgKG9yaWdpbkhhc1BlcnNpc3RlbnRBY2Nlc3MgfHwgZG9jdW1lbnQu
aGFzSGFkQWN0aXZlTWVkaWFTdHJlYW1UcmFjaygpKQotICAgICAgICAgICAgICAgIGxhYmVsID0g
ZGV2aWNlSW5mby5sYWJlbCgpOwotCi0gICAgICAgICAgICBhdXRvIGlkID0gUmVhbHRpbWVNZWRp
YVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuaGFzaFN0cmluZ1dpdGhTYWx0KGRldmljZUluZm8u
cGVyc2lzdGVudElkKCksIGRldmljZUlkZW50aWZpZXJIYXNoU2FsdCk7Ci0gICAgICAgICAgICBp
ZiAoaWQuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICBhdXRvIGdyb3VwSWQgPSBSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5o
YXNoU3RyaW5nV2l0aFNhbHQoZGV2aWNlSW5mby5ncm91cElkKCksIGRldmljZUlkZW50aWZpZXJI
YXNoU2FsdCk7Ci0gICAgICAgICAgICBhdXRvIGRldmljZVR5cGUgPSBkZXZpY2VJbmZvLnR5cGUo
KSA9PSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpBdWRpbyA/IE1lZGlhRGV2aWNlSW5mbzo6
S2luZDo6QXVkaW9pbnB1dCA6IE1lZGlhRGV2aWNlSW5mbzo6S2luZDo6VmlkZW9pbnB1dDsKLSAg
ICAgICAgICAgIGRldmljZXMuYXBwZW5kKE1lZGlhRGV2aWNlSW5mbzo6Y3JlYXRlKHNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQoKSwgbGFiZWwsIGlkLCBncm91cElkLCBkZXZpY2VUeXBlKSk7Ci0gICAg
ICAgIH0KLQotICAgICAgICBpZiAoIW9yaWdpbkhhc1BlcnNpc3RlbnRBY2Nlc3MgJiYgIWRvY3Vt
ZW50Lmhhc0hhZEFjdGl2ZU1lZGlhU3RyZWFtVHJhY2soKSkKLSAgICAgICAgICAgIGZpbHRlckRl
dmljZUxpc3QoZGV2aWNlcyk7Ci0KLSAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVk
VGhpcyA9IG1ha2VSZWYoKnRoaXMpLCBkZXZpY2VzID0gV1RGTW92ZShkZXZpY2VzKV0oKSBtdXRh
YmxlIHsKLSAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcHJvbWlzZS5yZXNvbHZlKGRldmlj
ZXMpOwotICAgICAgICB9KTsKLSAgICB9OwotCi0gICAgbV9lbnVtZXJhdGlvblJlcXVlc3QgPSBN
ZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3Q6OmNyZWF0ZSgqZG93bmNhc3Q8RG9jdW1lbnQ+
KHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSksIFdURk1vdmUoY29tcGxldGlvbikpOwotICAgIG1f
ZW51bWVyYXRpb25SZXF1ZXN0LT5zdGFydCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
Ci0KLSNlbmRpZiAvLyBFTkFCTEUoTUVESUFfU1RSRUFNKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuaApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGFmMDE3ZGQ0Njk0MzRhZTFiNzQ2NGYzMmQ1NGMxN2Vj
MzA0NDYxOS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuaAor
KysgL2Rldi9udWxsCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpZiBFTkFCTEUo
TUVESUFfU1RSRUFNKQotCi0jaW5jbHVkZSAiTWVkaWFEZXZpY2VzLmgiCi0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBNZWRpYURldmljZXNFbnVtZXJhdGlv
blJlcXVlc3Q7Ci1jbGFzcyBTZWN1cml0eU9yaWdpbjsKLQotY2xhc3MgTWVkaWFEZXZpY2VzUmVx
dWVzdCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhRGV2aWNlc1JlcXVlc3Q+LCBwcml2YXRlIENv
bnRleHREZXN0cnVjdGlvbk9ic2VydmVyIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPE1lZGlh
RGV2aWNlc1JlcXVlc3Q+IGNyZWF0ZShEb2N1bWVudCYsIE1lZGlhRGV2aWNlczo6RW51bWVyYXRl
RGV2aWNlc1Byb21pc2UmJik7Ci0KLSAgICB2aXJ0dWFsIH5NZWRpYURldmljZXNSZXF1ZXN0KCk7
Ci0KLSAgICB2b2lkIHN0YXJ0KCk7Ci0KLSAgICBTZWN1cml0eU9yaWdpbiogc2VjdXJpdHlPcmln
aW4oKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBNZWRpYURldmljZXNSZXF1ZXN0KERvY3VtZW50
JiwgTWVkaWFEZXZpY2VzOjpFbnVtZXJhdGVEZXZpY2VzUHJvbWlzZSYmKTsKLQotICAgIHZvaWQg
Y29udGV4dERlc3Ryb3llZCgpIGZpbmFsOwotCi0gICAgdm9pZCBmaWx0ZXJEZXZpY2VMaXN0KFZl
Y3RvcjxSZWZQdHI8TWVkaWFEZXZpY2VJbmZvPj4mKTsKLQotICAgIE1lZGlhRGV2aWNlczo6RW51
bWVyYXRlRGV2aWNlc1Byb21pc2UgbV9wcm9taXNlOwotICAgIFJlZlB0cjxNZWRpYURldmljZXNS
ZXF1ZXN0PiBtX3Byb3RlY3RvcjsKLSAgICBSZWZQdHI8TWVkaWFEZXZpY2VzRW51bWVyYXRpb25S
ZXF1ZXN0PiBtX2VudW1lcmF0aW9uUmVxdWVzdDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKLQotI2VuZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggN2VjMzg2MGIwYTQ1MGYx
MGUyYzVhYzAyMWYzMTE5ZTFkYmNmMDhkYS4uMTc5NmQ4Mzg3MWYxZTk5NDU5MmRiZjlmYTMwMTEz
OWJjOTY2N2JhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTQwLDggKzE0MCw2IEBACiAJCTA3Mzc5NEZBMTlGNTg2NEUwMEU1
QTA0NSAvKiBSVENEYXRhQ2hhbm5lbEhhbmRsZXJNb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzM3OTRGNDE5RjU4NjRFMDBFNUEwNDUgLyogUlRD
RGF0YUNoYW5uZWxIYW5kbGVyTW9jay5oICovOyB9OwogCQkwNzM3OTRGRDE5RjU4NjRFMDBFNUEw
NDUgLyogUlRDTm90aWZpZXJzTW9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwNzM3OTRGNzE5RjU4NjRFMDBFNUEwNDUgLyogUlRDTm90aWZpZXJz
TW9jay5jcHAgKi87IH07CiAJCTA3Mzc5NEZFMTlGNTg2NEUwMEU1QTA0NSAvKiBSVENOb3RpZmll
cnNNb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
NzM3OTRGODE5RjU4NjRFMDBFNUEwNDUgLyogUlRDTm90aWZpZXJzTW9jay5oICovOyB9OwotCQkw
NzM5NEVDODFCQUIyQ0NEMDBCRTk5Q0QgLyogTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzM5NEVDNzFCQUIyQ0NE
MDBCRTk5Q0QgLyogTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAgKi87IH07Ci0JCTA3Mzk0RUNBMUJB
QjJDRDcwMEJFOTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzM5NEVDOTFCQUIyQ0Q3MDBCRTk5Q0QgLyog
TWVkaWFEZXZpY2VzUmVxdWVzdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTA3M0I4NzY2MUU0Mzg1QUMwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZUJ1
ZmZlckxpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMDczQjg3NjIxRTQzODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5jcHAg
Ki87IH07CiAJCTA3M0I4NzY3MUU0Mzg1QUMwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZUJ1ZmZlckxp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3M0I4
NzYzMUU0Mzg1OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZUJ1ZmZlckxpc3QuaCAqLzsgfTsKIAkJ
MDczQjg3NjgxRTQzODVBQzAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbSBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3M0I4NzY0MUU0Mzg1
OUQwMDcxQzBFQyAvKiBBdWRpb1NhbXBsZURhdGFTb3VyY2UubW0gKi87IH07CkBAIC0yODg4LDgg
KzI4ODYsNiBAQAogCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVT
dHJlYW1Db250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2QzRDOTZEQjFBRDQ0ODM1MDAzNjNGNjQgLyogSlNSZWFkYWJsZUJ5dGVTdHJlYW1D
b250cm9sbGVyLmggKi87IH07CiAJCTZDNEM5NkRGMUFENDQ4MzUwMDM2NTY3MiAvKiBKU1JlYWRh
YmxlU3RyZWFtQllPQlJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZDNEM5NkRCMUFENDQ4MzUwMDM2NTY3MiAvKiBKU1JlYWRhYmxlU3RyZWFt
QllPQlJlcXVlc3QuaCAqLzsgfTsKIAkJNkM0Qzk2REYxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVh
ZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkM0Qzk2REIxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFi
bGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlci5oICovOyB9OwotCQk2QTMyRDdDRTFBMTZEOEMwMDA0
MTJGMEIgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNkE0QjZENjYxOUQyMjVEODAwNkYxMUQzIC8qIEluc3Bl
Y3RvckNhbnZhc0FnZW50LmNwcCAqLzsgfTsKLQkJNkE0QjZENjUxOUQyMjUxOTAwNkYxMUQzIC8q
IEluc3BlY3RvckNhbnZhc0FnZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2QTRCNkQ2NDE5RDIyNTE5MDA2RjExRDMgLyogSW5zcGVjdG9yQ2FudmFz
QWdlbnQuaCAqLzsgfTsKIAkJNkM2Mzg4OTVBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291
cmNlUmVxdWVzdEluaXRpYXRvcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJjZVJl
cXVlc3RJbml0aWF0b3JzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNkM2Mzg4OTZBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVx
dWVzdEluaXRpYXRvcnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNkM2Mzg4OTRBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVz
dEluaXRpYXRvcnMuY3BwICovOyB9OwogCQk2Q0RERThEMDE3NzBCQjIyMDAxNkUwNzIgLyogUmVn
aW9uT3ZlcnNldFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2QzcwQTgxNDE3NzA3QzQ5MDA5QTQ0NkUgLyogUmVnaW9uT3ZlcnNldFN0YXRlLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTc2MDEs
OCArNzU5Nyw2IEBACiAJCTA3Mzc5NEY0MTlGNTg2NEUwMEU1QTA0NSAvKiBSVENEYXRhQ2hhbm5l
bEhhbmRsZXJNb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJUQ0RhdGFD
aGFubmVsSGFuZGxlck1vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDczNzk0
RjcxOUY1ODY0RTAwRTVBMDQ1IC8qIFJUQ05vdGlmaWVyc01vY2suY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUlRDTm90aWZpZXJzTW9jay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA3Mzc5NEY4MTlGNTg2NEUwMEU1QTA0NSAvKiBSVENOb3RpZmll
cnNNb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJUQ05vdGlmaWVyc01v
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMDczOTRFQzcxQkFCMkNDRDAwQkU5
OUNEIC8qIE1lZGlhRGV2aWNlc1JlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTA3Mzk0RUM5MUJBQjJDRDcwMEJFOTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRGV2aWNlc1JlcXVlc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDczQjg3NTYxRTQwRENFNTAwNzFDMEVD
IC8qIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwNzNCODc1NzFFNDBEQ0ZEMDA3MUMwRUMgLyogQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3M0I4NzU4MUU0
MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xMDc0Myw4ICsxMDczNyw2IEBACiAJCTZDNEM5NkRCMUFE
NDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNEM5NkRCMUFENDQ4MzUwMDM2NTY3
MiAvKiBKU1JlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTZDNEM5NkRCMUFENDQ4MzUwMDM2NUE1MCAvKiBKU1JlYWRhYmxlU3Ry
ZWFtRGVmYXVsdENvbnRyb2xsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTZBNEI2RDY0MTlEMjI1MTkwMDZGMTFEMyAvKiBJbnNwZWN0b3JDYW52YXNBZ2Vu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JDYW52YXNBZ2Vu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2QTRCNkQ2NjE5RDIyNUQ4MDA2RjEx
RDMgLyogSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzQWdlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2QzYzODg5M0E5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0SW5pdGlhdG9ycy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FjaGVk
UmVzb3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2QzYzODg5NEE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlh
dG9ycy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FjaGVkUmVz
b3VyY2VSZXF1ZXN0SW5pdGlhdG9ycy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZDNzBBODE0MTc3MDdDNDkwMDlBNDQ2RSAvKiBSZWdpb25PdmVyc2V0U3RhdGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVnaW9uT3ZlcnNldFN0YXRlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjEzMyw4ICsxNjEyNSw2IEBACiAJCQkJNUVBNzI1Q0Yx
QUNBQkNEOTAwRUFEMTdCIC8qIE1lZGlhRGV2aWNlcy5pZGwgKi8sCiAJCQkJMDdBQkVGNkIxRDhB
MUM1ODAwRjIxOTcyIC8qIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5jcHAgKi8sCiAJ
CQkJMDdBQkVGNkQxRDhBMUM3NjAwRjIxOTcyIC8qIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVx
dWVzdC5oICovLAotCQkJCTA3Mzk0RUM3MUJBQjJDQ0QwMEJFOTlDRCAvKiBNZWRpYURldmljZXNS
ZXF1ZXN0LmNwcCAqLywKLQkJCQkwNzM5NEVDOTFCQUIyQ0Q3MDBCRTk5Q0QgLyogTWVkaWFEZXZp
Y2VzUmVxdWVzdC5oICovLAogCQkJCTVFMTZBMkUyMUJGQTY0RkIwMDI5QTIxRSAvKiBNZWRpYUVu
ZHBvaW50UGVlckNvbm5lY3Rpb24uY3BwICovLAogCQkJCTVFMTZBMkUzMUJGQTY0RkIwMDI5QTIx
RSAvKiBNZWRpYUVuZHBvaW50UGVlckNvbm5lY3Rpb24uaCAqLywKIAkJCQk1RTRFQUIwMjFEMDcx
NjRDMDAwNkExODQgLyogTWVkaWFFbmRwb2ludFNlc3Npb25EZXNjcmlwdGlvbi5jcHAgKi8sCkBA
IC0yODcwNiw3ICsyODY5Niw2IEBACiAJCQkJMTUxNDVCOTAxQjNBMUNFMDAwNjYyQkY3IC8qIE1l
ZGlhRGV2aWNlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNUVBNzI1RDMxQUNBQkQ0NzAwRUFE
MTdCIC8qIE1lZGlhRGV2aWNlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDdBQkVGNkUxRDhBMUM3
NjAwRjIxOTcyIC8qIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMDczOTRFQ0ExQkFCMkNENzAwQkU5OUNEIC8qIE1lZGlhRGV2aWNlc1JlcXVlc3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk3MjA1QUI4MTIzOTI5MTAwMEIxNzM4MCAvKiBNZWRpYURv
Y3VtZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRDZGMjUyRDEzRjVFRjBFMDA2NTE2NUYgLyog
TWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwN0ZFOTlE
RDE4ODA3QTdEMDAyNTY2NDggLyogTWVkaWFFbGVtZW50U2Vzc2lvbi5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zMjc0Niw3ICszMjczNSw2IEBACiAJCQkJMTU5QUU4MkIxQjNBNDAyRjAwMzc0NzhCIC8q
IE1lZGlhRGV2aWNlSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1RUE3MjVEMjFBQ0FCRDQ3
MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3QUJFRjZD
MUQ4QTFDNTgwMEYyMTk3MiAvKiBNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMDczOTRFQzgxQkFCMkNDRDAwQkU5OUNEIC8qIE1lZGlhRGV2aWNl
c1JlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTcyMDVBQjcxMjM5MjkxMDAwQjE3Mzgw
IC8qIE1lZGlhRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkQ2RjI1MkMxM0Y1RUYw
RTAwNjUxNjVGIC8qIE1lZGlhRWxlbWVudEF1ZGlvU291cmNlTm9kZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwN0ZFOTlEQzE4ODA3QTdEMDAyNTY2NDggLyogTWVkaWFFbGVtZW50U2Vzc2lvbi5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvQy9XS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVjay5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmgKaW5kZXggZDI1Nzg0NWU0N2Yz
YjI1YTEyY2E5MzRkNjI0OTY2NDlkMTJkZDA5OS4uYTg5MWY1MjU1N2I4Yzk4ZjI2MzhjMWQzZDYw
YWRmNzI1ZTkwYzdmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9D
L1dLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9DL1dLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmgKQEAgLTQxLDQgKzQxLDQgQEAg
V0tfRVhQT1JUIHZvaWQgV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2tTZXRVc2VyTWVkaWFBY2Nl
c3NJbmZvKFdLVXNlck1lZGlhUGVybWkKIH0KICNlbmRpZgogCi0jZW5kaWYgLyogV0tNZWRpYURl
dmljZXNSZXF1ZXN0X2ggKi8KKyNlbmRpZiAvKiBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja19o
ICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL01lZGlhU3RyZWFtL1Vz
ZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL01lZGlhU3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAK
aW5kZXggYzU5YTJmMTUyZGZjODQ2OWQ2M2E4MzZiY2I5YmYxYjY3ZTM3OWFkNi4uYzU1OGU3MmJi
NjE0MmE3ODczMjQ0MzI1MGIzNDgzMDUzYzQ1YWEwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFn
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTWVkaWFTdHJlYW0vVXNlck1l
ZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcApAQCAtMTc3LDkgKzE3Nyw3IEBAIHZvaWQg
VXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyOjp1c2VyTWVkaWFBY2Nlc3NXYXNEZW5p
ZWQodWludDY0X3QgcmVxdWVzCiAKIHZvaWQgVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5h
Z2VyOjplbnVtZXJhdGVNZWRpYURldmljZXMoTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0
JiByZXF1ZXN0KQogewotICAgIGF1dG8qIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KHJl
cXVlc3Quc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBhdXRvKiBmcmFtZSA9IGRvY3Vt
ZW50ID8gZG9jdW1lbnQtPmZyYW1lKCkgOiBudWxscHRyOwotCisgICAgYXV0byogZnJhbWUgPSBy
ZXF1ZXN0LmZyYW1lKCk7CiAgICAgaWYgKCFmcmFtZSkgewogICAgICAgICByZXF1ZXN0LnNldERl
dmljZUluZm8oVmVjdG9yPENhcHR1cmVEZXZpY2U+KCksIGVtcHR5U3RyaW5nKCksIGZhbHNlKTsK
ICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>313249</attachid>
            <date>2017-06-18 16:19:31 -0700</date>
            <delta_ts>2017-06-18 16:55:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-173527-20170618161930.patch</filename>
            <type>text/plain</type>
            <size>34153</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjE4NDY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWU4Y2M2ODAxZjA5YmFm
NzFiM2ZjMmY0NmYwOTdjNDg2OWVjNDQyMi4uYTQyM2QyNTZiYzhiNTBhZjRmZGU4NmUwMTg3NmNk
N2U2MWFiZTZmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUxIEBACisyMDE3LTA2LTE4ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNZXJnZSBNZWRpYURldmljZXNS
ZXF1ZXN0IGFuZCBNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QgdG8gdGlnaHRlbiB1cCBj
b2RlIGFuZCBvYmplY3QgbGlmZXRpbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3MzUyNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6IFJlbW92ZWQgTWVkaWFEZXZpY2VzUmVx
dWVzdC5jcHAuCisKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYURldmljZXM6OmVudW1lcmF0ZURldmljZXMpOiBD
YWxsIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdAorICAgICAgICBkaXJlY3RseSBoZXJl
IGluc3RlYWQgb2YgZ29pbmcgdGhyb3VnaCBNZWRpYURldmljZXNSZXF1ZXN0LgorCisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QuY3Bw
OiBNb3ZlZCBjb2RlIGZyb20KKyAgICAgICAgTWVkaWFEZXZpY2VzUmVxdWVzdCBpbiBoZXJlLiBQ
dXQgdGhlIHR5cGljYWwgY291bnRzIGF0IHRoZSB0b3Agb2YgdGhlIGZpbGUuCisgICAgICAgIChX
ZWJDb3JlOjpNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3Q6Ok1lZGlhRGV2aWNlc0VudW1l
cmF0aW9uUmVxdWVzdCk6CisgICAgICAgIE1hcmtlZCBpbmxpbmUgYW5kIGNoYW5nZWQgdG8gdGFr
ZSBhIERPTSBwcm9taXNlIGRpcmVjdGx5IHJhdGhlciB0aGFuIGhhdmluZworICAgICAgICBhIHNl
cGFyYXRlIGNsYXNzIGRvIHRoZSBtYXBwaW5nIHRvIERPTSBwcm9taXNlcy4KKyAgICAgICAgKFdl
YkNvcmU6Ok1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdDo6c3RhcnQpOiBSZXBsYWNlZCB0
aGUgY3JlYXRlIGZ1bmN0aW9uCisgICAgICAgIHdpdGggdGhpcy4gVGhlIGNhbGxlciBkb2Vzbid0
IGFjdHVhbGx5IGtlZXAgYSByZWZlcmVuY2UgdG8gdGhlIG9iamVjdC4KKyAgICAgICAgQWRkZWQg
YSBGSVhNRSBhYm91dCB0aGUgYmVoYXZpb3IsIG5vdCBuZXcsIHdoZXJlIHdlIG5laXRoZXIgcmVz
b2x2ZSBub3IgcmVqZWN0CisgICAgICAgIHRoZSBwcm9taXNlIGlmIHRoZXJlIGlzIG5vIHVzZXIg
bWVkaWEgY29udHJvbGxlci4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRGV2aWNlc0VudW1lcmF0
aW9uUmVxdWVzdDo6fk1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdCk6CisgICAgICAgIEFk
ZGVkIGEgRklYTUUgYWJvdXQgdGhlIGlzc3VlIHRoYXQgd2UgZG9uJ3QgcmVzb2x2ZSBvciByZWpl
Y3QgdGhlIHByb21pc2UgaWYKKyAgICAgICAgdGhlIGNsaWVudCBkcm9wcyB0aGUgbGFzdCByZWZl
cmVuY2UgdG8gdGhlIHJlcXVlc3Qgd2l0aG91dCBjYWxsaW5nIHNldERldmljZUluZm8uCisgICAg
ICAgIChXZWJDb3JlOjpNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3Q6OmRvY3VtZW50KTog
QWRkZWQuIFByaXZhdGUgaGVscGVyLgorICAgICAgICBSZXR1cm5zIG51bGxwdHIgaWYgdGhlIHJl
cXVlc3QgaXMgbm8gbG9uZ2VyIGFjdGl2ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhRGV2aWNl
c0VudW1lcmF0aW9uUmVxdWVzdDo6ZnJhbWUpOiBBZGRlZC4gRm9yIHVzZSBieSBhIGNhbGxlcgor
ICAgICAgICB0aGF0IHdhcyBnZXR0aW5nIHRvIHRoZSBmcmFtZS4gVXNlcyB0aGUgZG9jdW1lbnQg
ZnVuY3Rpb24gc28gaXQgd2lsbCByZXR1cm4KKyAgICAgICAgbnVsbHB0ciBpZiB0aGUgcmVxdWVz
dCBpcyBubyBsb25nZXIgYWN0aXZlLgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFEZXZpY2VzRW51
bWVyYXRpb25SZXF1ZXN0Ojp1c2VyTWVkaWFEb2N1bWVudE9yaWdpbik6IENoYW5nZWQKKyAgICAg
ICAgdG8gZG8gdGhlIHdvcmsgdXNpbmcgdGhlIGRvY3VtZW50IGZ1bmN0aW9uLgorICAgICAgICAo
V2ViQ29yZTo6TWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0Ojp0b3BMZXZlbERvY3VtZW50
T3JpZ2luKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpNZWRpYURldmljZXNFbnVtZXJhdGlv
blJlcXVlc3Q6OmNvbnRleHREZXN0cm95ZWQpOiBTaW1wbGlmaWVkLiBXZQorICAgICAgICBub3cg
Y2FuIHNpbXBseSBzZXQgYSBib29sZWFuIHdoZW4gdGhlIGNvbnRleHQgaXMgZGVzdHJveWVkLCBz
byB0aGVyZSBhcmUgbm8KKyAgICAgICAgc2lkZSBlZmZlY3RzIGFuZCB0aGUgY29kZSBpcyBzaW1w
bGVyLgorICAgICAgICAoV2ViQ29yZTo6cmVtb3ZlQXR5cGljYWxEZXZpY2VzKTogUmVuYW1lZCBh
bmQgdGlnaHRlbmVkIHVwIHRoZSBjb2RlIGEgYml0LgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFE
ZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0OjpzZXREZXZpY2VJbmZvKTogTW92ZWQgdGhlIGNvZGUK
KyAgICAgICAgaGVyZSBmcm9tIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdCB0byBwYXNz
IHRoZSBkZXZpY2VzIGFsb25nLgorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRp
YURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QuaDogTWFkZSB0aGUKKyAgICAgICAgQ29udGV4dERl
c3RydWN0aW9uT2JzZXJ2ZXIgdXNlIHByaXZhdGUgaW5oZXJpdGFuY2UuIEN1dCBkb3duIHRoZSBp
bmNsdWRlcworICAgICAgICBhbmQgcmVtb3ZlZCB2YXJpb3VzIHVubmVlZGVkIGZ1bmN0aW9ucy4K
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1
ZXN0Lmg6IFJlbW92ZWQuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOiBVcGRhdGVkIGZvciB0aGUgYWJvdmUgcmVtb3ZhbHMuCisKIDIwMTctMDYtMTggIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBDcmFzaCB3aGVuIHJlLWVudGVy
aW5nIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdDo6Y2FuY2VsKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwppbmRl
eCA3NjVjNGQ0NTBhZDIwNTUzNGZkNjI5ZTAzMWRjNTcxY2U3MTk4MGEzLi45ZDdmYmFmYjg5Yzhk
N2NmNGY3ZDk0NzgwYjQ0MjU5NTkwZTVlMjFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAK
KzIwMTctMDYtMTggIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIE1l
cmdlIE1lZGlhRGV2aWNlc1JlcXVlc3QgYW5kIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVz
dCB0byB0aWdodGVuIHVwIGNvZGUgYW5kIG9iamVjdCBsaWZldGltZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTczNTI3CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tVc2Vy
TWVkaWFQZXJtaXNzaW9uQ2hlY2suaDogRml4ZWQgaW5jb3JyZWN0IGZpbGUgbmFtZSBpbiBjb21t
ZW50LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXIuY3BwOgorICAgICAgICAoV2ViS2l0OjpVc2VyTWVkaWFQZXJtaXNz
aW9uUmVxdWVzdE1hbmFnZXI6OmVudW1lcmF0ZU1lZGlhRGV2aWNlcyk6IFVzZSB0aGUgbmV3IGZy
YW1lCisgICAgICAgIGZ1bmN0aW9uIGZyb20gTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0
IHJhdGhlciB0aGFuIGZpbmRpbmcgdGhlIGZyYW1lIHdpdGggb3VyCisgICAgICAgIG93biBjb2Rl
LgorCiAyMDE3LTA2LTE3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgZm9sbG93LXVwIGJ1aWxkIGZpeCBhZnRlciByMjE4NDU3LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCAyMTQzNTA4ZGQ2NWI3ODIyZThjNDAzNjYyOWM4YjZmMDEzMjA1NGEx
Li43NWM4YTIzMmIxYmRlZGVkNGY3Y2JlNGViZjkzMjRjYzc2ZjU3NjMxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dApAQCAtOTYzLDcgKzk2Myw2IEBAIHNldChXZWJDb3JlX1NPVVJDRVMKICAgICBNb2R1
bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlSW5mby5jcHAKICAgICBNb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRGV2aWNlcy5jcHAKICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNl
c0VudW1lcmF0aW9uUmVxdWVzdC5jcHAKLSAgICBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2
aWNlc1JlcXVlc3QuY3BwCiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50UGVl
ckNvbm5lY3Rpb24uY3BwCiAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYUVuZHBvaW50U2Vz
c2lvbkRlc2NyaXB0aW9uLmNwcAogICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0u
Y3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlh
RGV2aWNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2
aWNlcy5jcHAKaW5kZXggNDFlNTk1ZDYyMWY5YzRlOTYwOTlhMDYxMGM0NmVkNjFmYmQ4N2RmZS4u
MDljZDhiNDkwZDViOWFhNWU5NjEzMWQ3MjkyNWVjNWM0YTRhOTZmOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcApAQCAtMzcs
NyArMzcsNyBAQAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnQuaCIKICNp
bmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiTWVkaWFEZXZpY2VzUmVxdWVzdC5oIgor
I2luY2x1ZGUgIk1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5oIgogI2luY2x1ZGUgIk1l
ZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5oIgogI2luY2x1ZGUgIlVzZXJNZWRpYVJlcXVl
c3QuaCIKICNpbmNsdWRlIDx3dGYvUmFuZG9tTnVtYmVyLmg+CkBAIC0xMDksNyArMTA5LDcgQEAg
dm9pZCBNZWRpYURldmljZXM6OmVudW1lcmF0ZURldmljZXMoRW51bWVyYXRlRGV2aWNlc1Byb21p
c2UmJiBwcm9taXNlKSBjb25zdAogICAgIGF1dG8qIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQo
KTsKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm47Ci0gICAgTWVkaWFEZXZpY2Vz
UmVxdWVzdDo6Y3JlYXRlKCpkb2N1bWVudCwgV1RGTW92ZShwcm9taXNlKSktPnN0YXJ0KCk7Cisg
ICAgTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0OjpzdGFydCgqZG9jdW1lbnQsIFdURk1v
dmUocHJvbWlzZSkpOwogfQogCiBNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMgTWVkaWFE
ZXZpY2VzOjpnZXRTdXBwb3J0ZWRDb25zdHJhaW50cygpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc0VudW1l
cmF0aW9uUmVxdWVzdC5jcHAKaW5kZXggZGIyODExYjg5YjRlZGU4YTAwZmE5MGJjNDQ2NmIyZTFj
NmQxOTE1Yy4uNDFmYWFhMjE4NTY1ZThmMTYxYTVmODdkOThiZDdiZTJhNDg5MmM0NyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNFbnVt
ZXJhdGlvblJlcXVlc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0LmNwcApAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE2LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSw3NyArMjksMTMzIEBACiAK
ICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogCi0jaW5jbHVkZSAiQ2FwdHVyZURldmljZS5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiTWFpbkZyYW1lLmgiCi0jaW5jbHVkZSAi
U2VjdXJpdHlPcmlnaW4uaCIKKyNpbmNsdWRlICJKU01lZGlhRGV2aWNlSW5mby5oIgorI2luY2x1
ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIKICNpbmNsdWRlICJVc2VyTWVkaWFDb250
cm9sbGVyLmgiCiAKKyNpZiBQTEFURk9STShDT0NPQSkKK2NvbnN0IGludCB0eXBpY2FsTWljcm9w
aG9uZUNvdW50ID0gMTsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oSU9TKQorY29uc3QgaW50IHR5
cGljYWxDYW1lcmFDb3VudCA9IDI7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykKK2NvbnN0
IGludCB0eXBpY2FsQ2FtZXJhQ291bnQgPSAxOworI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotUmVmPE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdD4gTWVkaWFEZXZpY2VzRW51
bWVyYXRpb25SZXF1ZXN0OjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBDb21wbGV0aW9uSGFu
ZGxlciYmIGNvbXBsZXRpb25IYW5kbGVyKQoraW5saW5lIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9u
UmVxdWVzdDo6TWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0KERvY3VtZW50JiBkb2N1bWVu
dCwgUHJvbWlzZSYmIHByb21pc2UpCisgICAgOiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcigm
ZG9jdW1lbnQpCisgICAgLCBtX3Byb21pc2UoV1RGTW92ZShwcm9taXNlKSkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QoZG9jdW1lbnQs
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKSk7CiB9CiAKLU1lZGlhRGV2aWNlc0VudW1lcmF0
aW9uUmVxdWVzdDo6TWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0KFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmIGNvbnRleHQsIENvbXBsZXRpb25IYW5kbGVyJiYgY29tcGxldGlvbkhhbmRsZXIp
Ci0gICAgOiBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcigmY29udGV4dCkKLSAgICAsIG1fY29t
cGxldGlvbkhhbmRsZXIoV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpCit2b2lkIE1lZGlhRGV2
aWNlc0VudW1lcmF0aW9uUmVxdWVzdDo6c3RhcnQoRG9jdW1lbnQmIGRvY3VtZW50LCBQcm9taXNl
JiYgcHJvbWlzZSkKIHsKKyAgICBhdXRvKiBjb250cm9sbGVyID0gVXNlck1lZGlhQ29udHJvbGxl
cjo6ZnJvbShkb2N1bWVudC5wYWdlKCkpOworICAgIGlmICghY29udHJvbGxlcikgeworICAgICAg
ICAvLyBGSVhNRTogU2hvdWxkIHdlIHJlc29sdmUgb3IgcmVqZWN0IHRoZSBwcm9taXNlIGhlcmUg
aW5zdGVhZCBvZiBsZWF2aW5nIHRoZSB3ZWJzaXRlIHdhaXRpbmc/CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBjb250cm9sbGVyLT5lbnVtZXJhdGVNZWRpYURldmljZXMoYWRvcHRSZWYo
Km5ldyBNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QoZG9jdW1lbnQsIFdURk1vdmUocHJv
bWlzZSkpKSk7CiB9CiAKIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdDo6fk1lZGlhRGV2
aWNlc0VudW1lcmF0aW9uUmVxdWVzdCgpCiB7CisgICAgLy8gV2Ugd2lsbCBnZXQgaGVyZSB3aXRo
IG1faXNBY3RpdmUgdHJ1ZSBpZiB0aGUgY2xpZW50IGRyb3BzIHRoZSByZXF1ZXN0IHdpdGhvdXQg
ZXZlciBjYWxsaW5nIHNldERldmljZUluZm8uCisgICAgLy8gRklYTUU6IFNob3VsZCB3ZSByZXNv
bHZlIG9yIHJlamVjdCB0aGUgcHJvbWlzZSBpbiB0aGF0IGNhc2UgaW5zdGVhZCBvZiBsZWF2aW5n
IHRoZSB3ZWJzaXRlIHdhaXRpbmc/CiB9CiAKLVNlY3VyaXR5T3JpZ2luKiBNZWRpYURldmljZXNF
bnVtZXJhdGlvblJlcXVlc3Q6OnVzZXJNZWRpYURvY3VtZW50T3JpZ2luKCkgY29uc3QKK0RvY3Vt
ZW50KiBNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3Q6OmRvY3VtZW50KCkKIHsKLSAgICBp
ZiAoIXNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIG1fcHJvbWlzZSA/IGRvd25jYXN0PERvY3VtZW50PihzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkpIDogbnVsbHB0cjsKK30KIAotICAgIHJldHVybiBzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCktPnNlY3VyaXR5T3JpZ2luKCk7CitGcmFtZSogTWVkaWFEZXZpY2VzRW51bWVyYXRpb25S
ZXF1ZXN0OjpmcmFtZSgpCit7CisgICAgYXV0byogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgp
OworICAgIHJldHVybiBkb2N1bWVudCA/IGRvY3VtZW50LT5mcmFtZSgpIDogbnVsbHB0cjsKIH0K
IAotU2VjdXJpdHlPcmlnaW4qIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdDo6dG9wTGV2
ZWxEb2N1bWVudE9yaWdpbigpIGNvbnN0CitTZWN1cml0eU9yaWdpbiogTWVkaWFEZXZpY2VzRW51
bWVyYXRpb25SZXF1ZXN0Ojp1c2VyTWVkaWFEb2N1bWVudE9yaWdpbigpCiB7Ci0gICAgaWYgKCFz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1
dG8qIGRvY3VtZW50ID0gdGhpcy0+ZG9jdW1lbnQoKTsKKyAgICByZXR1cm4gZG9jdW1lbnQgPyAm
ZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCkgOiBudWxscHRyOworfQogCi0gICAgcmV0dXJuICZz
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCktPnRvcE9yaWdpbigpOworU2VjdXJpdHlPcmlnaW4qIE1l
ZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdDo6dG9wTGV2ZWxEb2N1bWVudE9yaWdpbigpCit7
CisgICAgYXV0byogZG9jdW1lbnQgPSB0aGlzLT5kb2N1bWVudCgpOworICAgIHJldHVybiBkb2N1
bWVudCA/ICZkb2N1bWVudC0+dG9wT3JpZ2luKCkgOiBudWxscHRyOwogfQogCiB2b2lkIE1lZGlh
RGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdDo6Y29udGV4dERlc3Ryb3llZCgpCiB7Ci0gICAgLy8g
Q2FsbGluZyBjYW5jZWwoKSBtYXkgZGVzdHJveSBvdXJzZWx2ZXMuCi0gICAgUmVmPE1lZGlhRGV2
aWNlc0VudW1lcmF0aW9uUmVxdWVzdD4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CisgICAgLy8gRklY
TUU6IFNob3VsZCB3ZSBiZSBjYWxsaW5nIFVzZXJNZWRpYUNvbnRyb2xsZXI6OmNhbmNlbE1lZGlh
RGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdCBoZXJlPworICAgIC8vIElmIG5vdCwgdGhlbiB3aHkg
ZG9lcyB0aGF0IGZ1bmN0aW9uIGV4aXN0PyBJZiB3ZSBkZWNpZGUgdGhhdCB3ZSB3YW50IHRvIGNh
bGwgdGhhdCBjYW5jZWwKKyAgICAvLyBmdW5jdGlvbiBoZXJlLCB0aGVuIHRoZXJlIG1heSBiZSBh
IHByb2JsZW0sIGJlY2F1c2UgaXQncyBoYXJkIHRvIGdldCBmcm9tIHRoZSBkb2N1bWVudCB0bwor
ICAgIC8vIHRoZSBwYWdlIHRvIHRoZSB1c2VyIG1lZGlhIGNvbnRyb2xsZXIgd2hpbGUgdGhlIGRv
Y3VtZW50IGlzIGJlaW5nIGRlc3Ryb3llZC4KIAotICAgIGNhbmNlbCgpOworICAgIG1fcHJvbWlz
ZSA9IHN0ZDo6bnVsbG9wdDsKICAgICBDb250ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcjo6Y29udGV4
dERlc3Ryb3llZCgpOwogfQogCi12b2lkIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdDo6
c3RhcnQoKQorLy8gVG8gcmVkdWNlIHRoZSB2YWx1ZSBvZiBtZWRpYSBkZXZpY2VzIGZvciBmaW5n
ZXJwcmludGluZywgZmlsdGVyIGRldmljZXMgdGhhdCBnbyBiZXlvbmQgdGhlIHR5cGljYWwgbnVt
YmVyLgorc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZUF0eXBpY2FsRGV2aWNlcyhWZWN0b3I8UmVm
UHRyPE1lZGlhRGV2aWNlSW5mbz4+JiBkZXZpY2VzKQogewotICAgIEFTU0VSVChzY3JpcHRFeGVj
dXRpb25Db250ZXh0KCkpOworI2lmICFQTEFURk9STShDT0NPQSkKKyAgICBVTlVTRURfUEFSQU0o
ZGV2aWNlcyk7CisjZWxzZQorICAgIGludCBjYW1lcmFDb3VudCA9IDA7CisgICAgaW50IG1pY3Jv
cGhvbmVDb3VudCA9IDA7CisgICAgZGV2aWNlcy5yZW1vdmVBbGxNYXRjaGluZyhbJmNhbWVyYUNv
dW50LCAmbWljcm9waG9uZUNvdW50XSAoY29uc3QgUmVmUHRyPE1lZGlhRGV2aWNlSW5mbz4mIGRl
dmljZSkgeworICAgICAgICBpZiAoZGV2aWNlLT5raW5kKCkgPT0gTWVkaWFEZXZpY2VJbmZvOjpL
aW5kOjpWaWRlb2lucHV0ICYmICsrY2FtZXJhQ291bnQgPiB0eXBpY2FsQ2FtZXJhQ291bnQpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKGRldmljZS0+a2luZCgpID09IE1l
ZGlhRGV2aWNlSW5mbzo6S2luZDo6QXVkaW9pbnB1dCAmJiArK21pY3JvcGhvbmVDb3VudCA+IHR5
cGljYWxNaWNyb3Bob25lQ291bnQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0pOworI2VuZGlmCit9CiAKLSAgICBhdXRvJiBkb2N1bWVudCA9
IGRvd25jYXN0PERvY3VtZW50Pigqc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKLSAgICBhdXRv
KiBjb250cm9sbGVyID0gVXNlck1lZGlhQ29udHJvbGxlcjo6ZnJvbShkb2N1bWVudC5wYWdlKCkp
OwotICAgIGlmICghY29udHJvbGxlcikKK3ZvaWQgTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1
ZXN0OjpzZXREZXZpY2VJbmZvKGNvbnN0IFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYgY2FwdHVyZURl
dmljZXMsIGNvbnN0IFN0cmluZyYgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0LCBib29sIG9yaWdp
bkhhc1BlcnNpc3RlbnRBY2Nlc3MpCit7CisgICAgaWYgKCFtX3Byb21pc2UpCiAgICAgICAgIHJl
dHVybjsKKyAgICBhdXRvIHByb21pc2UgPSBXVEZNb3ZlKG1fcHJvbWlzZS52YWx1ZSgpKTsKKyAg
ICBBU1NFUlQoIW1fcHJvbWlzZSk7CiAKLSAgICBSZWY8TWVkaWFEZXZpY2VzRW51bWVyYXRpb25S
ZXF1ZXN0PiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLSAgICBjb250cm9sbGVyLT5lbnVtZXJhdGVN
ZWRpYURldmljZXMoKnRoaXMpOwotfQorICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9j
dW1lbnQ+KCpzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwogCi12b2lkIE1lZGlhRGV2aWNlc0Vu
dW1lcmF0aW9uUmVxdWVzdDo6Y2FuY2VsKCkKLXsKLSAgICBtX2NvbXBsZXRpb25IYW5kbGVyID0g
bnVsbHB0cjsKLX0KKyAgICAvLyBQb2xpY3kgYWJvdXQgaW5jbHVkaW5nIHNvbWUgb2YgdGhlIG1v
cmUgc2Vuc2l0aXZlIGluZm9ybWF0aW9uIGFib3V0IGNhcHR1cmUgZGV2aWNlcy4KKyAgICBib29s
IGluY2x1ZGVMYWJlbHMgPSBvcmlnaW5IYXNQZXJzaXN0ZW50QWNjZXNzIHx8IGRvY3VtZW50Lmhh
c0hhZEFjdGl2ZU1lZGlhU3RyZWFtVHJhY2soKTsKKyAgICBib29sIGluY2x1ZGVBdHlwaWNhbERl
dmljZXMgPSBpbmNsdWRlTGFiZWxzOwogCi12b2lkIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVx
dWVzdDo6c2V0RGV2aWNlSW5mbyhjb25zdCBWZWN0b3I8Q2FwdHVyZURldmljZT4mIGRldmljZUxp
c3QsIGNvbnN0IFN0cmluZyYgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0LCBib29sIG9yaWdpbkhh
c1BlcnNpc3RlbnRBY2Nlc3MpCi17Ci0gICAgaWYgKG1fY29tcGxldGlvbkhhbmRsZXIpCi0gICAg
ICAgIG1fY29tcGxldGlvbkhhbmRsZXIoZGV2aWNlTGlzdCwgZGV2aWNlSWRlbnRpZmllckhhc2hT
YWx0LCBvcmlnaW5IYXNQZXJzaXN0ZW50QWNjZXNzKTsKLSAgICBtX2NvbXBsZXRpb25IYW5kbGVy
ID0gbnVsbHB0cjsKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhRGV2aWNlSW5mbz4+IGRldmljZXM7
CisKKyAgICBkb2N1bWVudC5zZXREZXZpY2VJREhhc2hTYWx0KGRldmljZUlkZW50aWZpZXJIYXNo
U2FsdCk7CisKKyAgICBmb3IgKGF1dG8mIGNhcHR1cmVEZXZpY2UgOiBjYXB0dXJlRGV2aWNlcykg
eworICAgICAgICBhdXRvIGxhYmVsID0gaW5jbHVkZUxhYmVscyA/IGNhcHR1cmVEZXZpY2UubGFi
ZWwoKSA6IGVtcHR5U3RyaW5nKCk7CisgICAgICAgIGF1dG8gaWQgPSBSZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyOjpzaW5nbGV0b24oKS5oYXNoU3RyaW5nV2l0aFNhbHQoY2FwdHVyZURldmljZS5w
ZXJzaXN0ZW50SWQoKSwgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0KTsKKyAgICAgICAgYXV0byBn
cm91cElkID0gUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlcjo6c2luZ2xldG9uKCkuaGFzaFN0cmlu
Z1dpdGhTYWx0KGNhcHR1cmVEZXZpY2UuZ3JvdXBJZCgpLCBkZXZpY2VJZGVudGlmaWVySGFzaFNh
bHQpOworICAgICAgICBhdXRvIGRldmljZVR5cGUgPSBjYXB0dXJlRGV2aWNlLnR5cGUoKSA9PSBD
YXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpBdWRpbyA/IE1lZGlhRGV2aWNlSW5mbzo6S2luZDo6
QXVkaW9pbnB1dCA6IE1lZGlhRGV2aWNlSW5mbzo6S2luZDo6VmlkZW9pbnB1dDsKKworICAgICAg
ICBpZiAoaWQuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZGV2
aWNlcy5hcHBlbmQoTWVkaWFEZXZpY2VJbmZvOjpjcmVhdGUoJmRvY3VtZW50LCBsYWJlbCwgaWQs
IGdyb3VwSWQsIGRldmljZVR5cGUpKTsKKyAgICB9CisKKyAgICBpZiAoIWluY2x1ZGVBdHlwaWNh
bERldmljZXMpCisgICAgICAgIHJlbW92ZUF0eXBpY2FsRGV2aWNlcyhkZXZpY2VzKTsKKworICAg
IHByb21pc2UucmVzb2x2ZShkZXZpY2VzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmlj
ZXNFbnVtZXJhdGlvblJlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0LmgKaW5kZXggMGJkMGRkNTgzZTE2MzVh
OWM4ZTlkYzY2NTEwMDkxZjU3N2ExMTU0Mi4uMmViOWY0ZTEyM2U1NTExYTQ4ODUzNGE0ZDBhYmU0
MmRhZDYzZDZjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5oCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI4LDQx
ICsyOCwzNCBAQAogCiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKIAotI2luY2x1ZGUgIkFjdGl2
ZURPTU9iamVjdC5oIgotI2luY2x1ZGUgPHd0Zi9GdW5jdGlvbi5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1dURlN0cmluZy5oPgorI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ2FwdHVyZURldmljZTsKLWNsYXNzIERvY3VtZW50
OworY2xhc3MgRnJhbWU7CitjbGFzcyBNZWRpYURldmljZUluZm87CiBjbGFzcyBTZWN1cml0eU9y
aWdpbjsKIAotY2xhc3MgTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0IGZpbmFsIDogcHVi
bGljIENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyLCBwdWJsaWMgUmVmQ291bnRlZDxNZWRpYURl
dmljZXNFbnVtZXJhdGlvblJlcXVlc3Q+IHsKK2NsYXNzIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9u
UmVxdWVzdCBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPE1lZGlhRGV2aWNlc0VudW1lcmF0aW9u
UmVxdWVzdD4sIHByaXZhdGUgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXIgewogcHVibGljOgot
ICAgIHVzaW5nIENvbXBsZXRpb25IYW5kbGVyID0gV1RGOjpGdW5jdGlvbjx2b2lkKGNvbnN0IFZl
Y3RvcjxDYXB0dXJlRGV2aWNlPiYsIGNvbnN0IFN0cmluZyYgZGV2aWNlSWRlbnRpZmllckhhc2hT
YWx0LCBib29sIG9yaWdpbkhhc1BlcnNpc3RlbnRBY2Nlc3MpPjsKLQotICAgIHN0YXRpYyBSZWY8
TWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0PiBjcmVhdGUoRG9jdW1lbnQmLCBDb21wbGV0
aW9uSGFuZGxlciYmKTsKKyAgICB1c2luZyBQcm9taXNlID0gRE9NUHJvbWlzZURlZmVycmVkPElE
TFNlcXVlbmNlPElETEludGVyZmFjZTxNZWRpYURldmljZUluZm8+Pj47CisgICAgc3RhdGljIHZv
aWQgc3RhcnQoRG9jdW1lbnQmLCBQcm9taXNlJiYpOwogCiAgICAgdmlydHVhbCB+TWVkaWFEZXZp
Y2VzRW51bWVyYXRpb25SZXF1ZXN0KCk7CiAKLSAgICB2b2lkIHN0YXJ0KCk7Ci0gICAgdm9pZCBj
YW5jZWwoKTsKLQotICAgIGJvb2wgd2FzQ2FuY2VsZWQoKSBjb25zdCB7IHJldHVybiAhbV9jb21w
bGV0aW9uSGFuZGxlcjsgfQotCiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXREZXZpY2VJbmZv
KGNvbnN0IFZlY3RvcjxDYXB0dXJlRGV2aWNlPiYsIGNvbnN0IFN0cmluZyYgZGV2aWNlSWRlbnRp
Zmllckhhc2hTYWx0LCBib29sIG9yaWdpbkhhc1BlcnNpc3RlbnRBY2Nlc3MpOwogCi0gICAgV0VC
Q09SRV9FWFBPUlQgU2VjdXJpdHlPcmlnaW4qIHVzZXJNZWRpYURvY3VtZW50T3JpZ2luKCkgY29u
c3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2VjdXJpdHlPcmlnaW4qIHRvcExldmVsRG9jdW1lbnRP
cmlnaW4oKSBjb25zdDsKKyAgICBXRUJDT1JFX0VYUE9SVCBGcmFtZSogZnJhbWUoKTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBTZWN1cml0eU9yaWdpbiogdXNlck1lZGlhRG9jdW1lbnRPcmlnaW4oKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCBTZWN1cml0eU9yaWdpbiogdG9wTGV2ZWxEb2N1bWVudE9yaWdp
bigpOwogCiBwcml2YXRlOgotICAgIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdChTY3Jp
cHRFeGVjdXRpb25Db250ZXh0JiwgQ29tcGxldGlvbkhhbmRsZXImJik7Ci0KLSAgICAvLyBDb250
ZXh0RGVzdHJ1Y3Rpb25PYnNlcnZlcgorICAgIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVz
dChEb2N1bWVudCYsIFByb21pc2UmJik7CisgICAgRG9jdW1lbnQqIGRvY3VtZW50KCk7CiAgICAg
dm9pZCBjb250ZXh0RGVzdHJveWVkKCkgZmluYWw7CiAKLSAgICBDb21wbGV0aW9uSGFuZGxlciBt
X2NvbXBsZXRpb25IYW5kbGVyOworICAgIHN0ZDo6b3B0aW9uYWw8UHJvbWlzZT4gbV9wcm9taXNl
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4ZTI1OTc5ZTQwMzU4M2U3ZmY0NzI4ZTYwNmJhZTZh
ZmYwMTczZTguLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXNSZXF1ZXN0LmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDE1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUsIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJNZWRpYURldmljZXNSZXF1ZXN0LmgiCi0KLSNpZiBFTkFCTEUoTUVESUFfU1RSRUFN
KQotCi0jaW5jbHVkZSAiQ2FwdHVyZURldmljZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0j
aW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJKU01lZGlhRGV2aWNlSW5mby5oIgotI2luY2x1
ZGUgIk1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5oIgotI2luY2x1ZGUgIlJlYWx0aW1l
TWVkaWFTb3VyY2VDZW50ZXIuaCIKLSNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgotI2luY2x1
ZGUgIlVzZXJNZWRpYUNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgot
I2luY2x1ZGUgPHd0Zi9TSEExLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotaW5saW5lIE1l
ZGlhRGV2aWNlc1JlcXVlc3Q6Ok1lZGlhRGV2aWNlc1JlcXVlc3QoRG9jdW1lbnQmIGRvY3VtZW50
LCBNZWRpYURldmljZXM6OkVudW1lcmF0ZURldmljZXNQcm9taXNlJiYgcHJvbWlzZSkKLSAgICA6
IENvbnRleHREZXN0cnVjdGlvbk9ic2VydmVyKCZkb2N1bWVudCkKLSAgICAsIG1fcHJvbWlzZShX
VEZNb3ZlKHByb21pc2UpKQotewotfQotCi1SZWY8TWVkaWFEZXZpY2VzUmVxdWVzdD4gTWVkaWFE
ZXZpY2VzUmVxdWVzdDo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFEZXZpY2VzOjpF
bnVtZXJhdGVEZXZpY2VzUHJvbWlzZSYmIHByb21pc2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgTWVkaWFEZXZpY2VzUmVxdWVzdChkb2N1bWVudCwgV1RGTW92ZShwcm9taXNlKSkpOwot
fQotCi1NZWRpYURldmljZXNSZXF1ZXN0Ojp+TWVkaWFEZXZpY2VzUmVxdWVzdCgpCi17Ci0gICAg
Ly8gVGhpcyBzaG91bGQgb25seSBnZXQgZGVzdHJveWVkIGFmdGVyIHRoZSBlbnVtZXJhdGlvbiBy
ZXF1ZXN0IGhhcyBjb21wbGV0ZWQgb3IgaGFzIGJlZW4gY2FuY2VsZWQuCi0gICAgQVNTRVJUKCFt
X2VudW1lcmF0aW9uUmVxdWVzdCB8fCBtX2VudW1lcmF0aW9uUmVxdWVzdC0+d2FzQ2FuY2VsZWQo
KSk7Ci19Ci0KLVNlY3VyaXR5T3JpZ2luKiBNZWRpYURldmljZXNSZXF1ZXN0OjpzZWN1cml0eU9y
aWdpbigpIGNvbnN0Ci17Ci0gICAgaWYgKHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSkKLSAgICAg
ICAgcmV0dXJuIHNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKS0+c2VjdXJpdHlPcmlnaW4oKTsKLQot
ICAgIHJldHVybiBudWxscHRyOwotfQotCi12b2lkIE1lZGlhRGV2aWNlc1JlcXVlc3Q6OmNvbnRl
eHREZXN0cm95ZWQoKQotewotICAgIC8vIFRoZSBjYWxsIHRvIG1fZW51bWVyYXRpb25SZXF1ZXN0
LT5jYW5jZWwoKSBtaWdodCBkZWxldGUgdGhpcy4KLSAgICBhdXRvIHByb3RlY3RlZFRoaXMgPSBt
YWtlUmVmKCp0aGlzKTsKLQotICAgIGlmIChtX2VudW1lcmF0aW9uUmVxdWVzdCkgewotICAgICAg
ICBtX2VudW1lcmF0aW9uUmVxdWVzdC0+Y2FuY2VsKCk7Ci0gICAgICAgIG1fZW51bWVyYXRpb25S
ZXF1ZXN0ID0gbnVsbHB0cjsKLSAgICB9Ci0gICAgQ29udGV4dERlc3RydWN0aW9uT2JzZXJ2ZXI6
OmNvbnRleHREZXN0cm95ZWQoKTsKLX0KLQotdm9pZCBNZWRpYURldmljZXNSZXF1ZXN0OjpmaWx0
ZXJEZXZpY2VMaXN0KFZlY3RvcjxSZWZQdHI8TWVkaWFEZXZpY2VJbmZvPj4mIGRldmljZXMpCi17
Ci0jaWYgIVBMQVRGT1JNKENPQ09BKQotICAgIFVOVVNFRF9QQVJBTShkZXZpY2VzKTsKLSNlbHNl
Ci0KLSNpZiBQTEFURk9STShJT1MpCi0gICAgc3RhdGljIGNvbnN0IGludCBkZWZhdWx0Q2FtZXJh
Q291bnQgPSAyOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIHN0YXRpYyBjb25zdCBp
bnQgZGVmYXVsdENhbWVyYUNvdW50ID0gMTsKLSNlbmRpZgotICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGVmYXVsdE1pY3JvcGhvbmVDb3VudCA9IDE7Ci0KLSAgICBpbnQgY2FtZXJhQ291bnQgPSAwOwot
ICAgIGludCBtaWNyb3Bob25lQ291bnQgPSAwOwotICAgIGRldmljZXMucmVtb3ZlQWxsTWF0Y2hp
bmcoWyZdKGNvbnN0IFJlZlB0cjxNZWRpYURldmljZUluZm8+JiBkZXZpY2UpIC0+IGJvb2wgewot
ICAgICAgICBpZiAoZGV2aWNlLT5raW5kKCkgPT0gTWVkaWFEZXZpY2VJbmZvOjpLaW5kOjpWaWRl
b2lucHV0ICYmICsrY2FtZXJhQ291bnQgPiBkZWZhdWx0Q2FtZXJhQ291bnQpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKGRldmljZS0+a2luZCgpID09IE1lZGlhRGV2aWNl
SW5mbzo6S2luZDo6QXVkaW9pbnB1dCAmJiArK21pY3JvcGhvbmVDb3VudCA+IGRlZmF1bHRNaWNy
b3Bob25lQ291bnQpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgfSk7Ci0KLSNlbmRpZgotfQotCi12b2lkIE1lZGlhRGV2aWNlc1JlcXVlc3Q6
OnN0YXJ0KCkKLXsKLSAgICAvLyBUaGlzIGxhbWJkYSBrZWVwcyB8dGhpc3wgYWxpdmUgdW50aWwg
dGhlIHJlcXVlc3QgY29tcGxldGVzIG9yIGlzIGNhbmNlbGVkLgotICAgIGF1dG8gY29tcGxldGlv
biA9IFt0aGlzLCBwcm90ZWN0ZWRUaGlzID0gbWFrZVJlZigqdGhpcyldIChjb25zdCBWZWN0b3I8
Q2FwdHVyZURldmljZT4mIGNhcHR1cmVEZXZpY2VzLCBjb25zdCBTdHJpbmcmIGRldmljZUlkZW50
aWZpZXJIYXNoU2FsdCwgYm9vbCBvcmlnaW5IYXNQZXJzaXN0ZW50QWNjZXNzKSBtdXRhYmxlIHsK
LQotICAgICAgICBtX2VudW1lcmF0aW9uUmVxdWVzdCA9IG51bGxwdHI7Ci0KLSAgICAgICAgaWYg
KCFzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgRG9jdW1lbnQmIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCpzY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOwotICAgICAgICBkb2N1bWVudC5zZXREZXZpY2VJREhhc2hTYWx0KGRldmlj
ZUlkZW50aWZpZXJIYXNoU2FsdCk7Ci0KLSAgICAgICAgVmVjdG9yPFJlZlB0cjxNZWRpYURldmlj
ZUluZm8+PiBkZXZpY2VzOwotICAgICAgICBmb3IgKGF1dG8mIGRldmljZUluZm8gOiBjYXB0dXJl
RGV2aWNlcykgewotICAgICAgICAgICAgYXV0byBsYWJlbCA9IGVtcHR5U3RyaW5nKCk7Ci0gICAg
ICAgICAgICBpZiAob3JpZ2luSGFzUGVyc2lzdGVudEFjY2VzcyB8fCBkb2N1bWVudC5oYXNIYWRB
Y3RpdmVNZWRpYVN0cmVhbVRyYWNrKCkpCi0gICAgICAgICAgICAgICAgbGFiZWwgPSBkZXZpY2VJ
bmZvLmxhYmVsKCk7Ci0KLSAgICAgICAgICAgIGF1dG8gaWQgPSBSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyOjpzaW5nbGV0b24oKS5oYXNoU3RyaW5nV2l0aFNhbHQoZGV2aWNlSW5mby5wZXJzaXN0
ZW50SWQoKSwgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0KTsKLSAgICAgICAgICAgIGlmIChpZC5p
c0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIGF1dG8g
Z3JvdXBJZCA9IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLmhhc2hTdHJp
bmdXaXRoU2FsdChkZXZpY2VJbmZvLmdyb3VwSWQoKSwgZGV2aWNlSWRlbnRpZmllckhhc2hTYWx0
KTsKLSAgICAgICAgICAgIGF1dG8gZGV2aWNlVHlwZSA9IGRldmljZUluZm8udHlwZSgpID09IENh
cHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkF1ZGlvID8gTWVkaWFEZXZpY2VJbmZvOjpLaW5kOjpB
dWRpb2lucHV0IDogTWVkaWFEZXZpY2VJbmZvOjpLaW5kOjpWaWRlb2lucHV0OwotICAgICAgICAg
ICAgZGV2aWNlcy5hcHBlbmQoTWVkaWFEZXZpY2VJbmZvOjpjcmVhdGUoc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLCBsYWJlbCwgaWQsIGdyb3VwSWQsIGRldmljZVR5cGUpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghb3JpZ2luSGFzUGVyc2lzdGVudEFjY2VzcyAmJiAhZG9jdW1lbnQuaGFz
SGFkQWN0aXZlTWVkaWFTdHJlYW1UcmFjaygpKQotICAgICAgICAgICAgZmlsdGVyRGV2aWNlTGlz
dChkZXZpY2VzKTsKLQotICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyksIGRldmljZXMgPSBXVEZNb3ZlKGRldmljZXMpXSgpIG11dGFibGUgewot
ICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9wcm9taXNlLnJlc29sdmUoZGV2aWNlcyk7Ci0g
ICAgICAgIH0pOwotICAgIH07Ci0KLSAgICBtX2VudW1lcmF0aW9uUmVxdWVzdCA9IE1lZGlhRGV2
aWNlc0VudW1lcmF0aW9uUmVxdWVzdDo6Y3JlYXRlKCpkb3duY2FzdDxEb2N1bWVudD4oc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKSwgV1RGTW92ZShjb21wbGV0aW9uKSk7Ci0gICAgbV9lbnVtZXJh
dGlvblJlcXVlc3QtPnN0YXJ0KCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2Vu
ZGlmIC8vIEVOQUJMRShNRURJQV9TVFJFQU0pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlc1JlcXVlc3QuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA0YWYwMTdkZDQ2OTQzNGFlMWI3NDY0ZjMyZDU0YzE3ZWMzMDQ0NjE5
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzUmVxdWVzdC5oCisrKyAvZGV2
L251bGwKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0g
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICoKLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShNRURJQV9T
VFJFQU0pCi0KLSNpbmNsdWRlICJNZWRpYURldmljZXMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUg
ewotCi1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVz
dDsKLWNsYXNzIFNlY3VyaXR5T3JpZ2luOwotCi1jbGFzcyBNZWRpYURldmljZXNSZXF1ZXN0IDog
cHVibGljIFJlZkNvdW50ZWQ8TWVkaWFEZXZpY2VzUmVxdWVzdD4sIHByaXZhdGUgQ29udGV4dERl
c3RydWN0aW9uT2JzZXJ2ZXIgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8TWVkaWFEZXZpY2Vz
UmVxdWVzdD4gY3JlYXRlKERvY3VtZW50JiwgTWVkaWFEZXZpY2VzOjpFbnVtZXJhdGVEZXZpY2Vz
UHJvbWlzZSYmKTsKLQotICAgIHZpcnR1YWwgfk1lZGlhRGV2aWNlc1JlcXVlc3QoKTsKLQotICAg
IHZvaWQgc3RhcnQoKTsKLQotICAgIFNlY3VyaXR5T3JpZ2luKiBzZWN1cml0eU9yaWdpbigpIGNv
bnN0OwotCi1wcml2YXRlOgotICAgIE1lZGlhRGV2aWNlc1JlcXVlc3QoRG9jdW1lbnQmLCBNZWRp
YURldmljZXM6OkVudW1lcmF0ZURldmljZXNQcm9taXNlJiYpOwotCi0gICAgdm9pZCBjb250ZXh0
RGVzdHJveWVkKCkgZmluYWw7Ci0KLSAgICB2b2lkIGZpbHRlckRldmljZUxpc3QoVmVjdG9yPFJl
ZlB0cjxNZWRpYURldmljZUluZm8+PiYpOwotCi0gICAgTWVkaWFEZXZpY2VzOjpFbnVtZXJhdGVE
ZXZpY2VzUHJvbWlzZSBtX3Byb21pc2U7Ci0gICAgUmVmUHRyPE1lZGlhRGV2aWNlc1JlcXVlc3Q+
IG1fcHJvdGVjdG9yOwotICAgIFJlZlB0cjxNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3Q+
IG1fZW51bWVyYXRpb25SZXF1ZXN0OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0j
ZW5kaWYgLy8gRU5BQkxFKE1FRElBX1NUUkVBTSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA3ZWMzODYwYjBhNDUwZjEwZTJjNWFj
MDIxZjMxMTllMWRiY2YwOGRhLi4xNzk2ZDgzODcxZjFlOTk0NTkyZGJmOWZhMzAxMTM5YmM5NjY3
YmE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCkBAIC0xNDAsOCArMTQwLDYgQEAKIAkJMDczNzk0RkExOUY1ODY0RTAwRTVBMDQ1IC8q
IFJUQ0RhdGFDaGFubmVsSGFuZGxlck1vY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mzc5NEY0MTlGNTg2NEUwMEU1QTA0NSAvKiBSVENEYXRhQ2hh
bm5lbEhhbmRsZXJNb2NrLmggKi87IH07CiAJCTA3Mzc5NEZEMTlGNTg2NEUwMEU1QTA0NSAvKiBS
VENOb3RpZmllcnNNb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDA3Mzc5NEY3MTlGNTg2NEUwMEU1QTA0NSAvKiBSVENOb3RpZmllcnNNb2NrLmNw
cCAqLzsgfTsKIAkJMDczNzk0RkUxOUY1ODY0RTAwRTVBMDQ1IC8qIFJUQ05vdGlmaWVyc01vY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mzc5NEY4
MTlGNTg2NEUwMEU1QTA0NSAvKiBSVENOb3RpZmllcnNNb2NrLmggKi87IH07Ci0JCTA3Mzk0RUM4
MUJBQjJDQ0QwMEJFOTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mzk0RUM3MUJBQjJDQ0QwMEJFOTlD
RCAvKiBNZWRpYURldmljZXNSZXF1ZXN0LmNwcCAqLzsgfTsKLQkJMDczOTRFQ0ExQkFCMkNENzAw
QkU5OUNEIC8qIE1lZGlhRGV2aWNlc1JlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3Mzk0RUM5MUJBQjJDRDcwMEJFOTlDRCAvKiBNZWRpYURl
dmljZXNSZXF1ZXN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMDczQjg3NjYxRTQzODVBQzAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlz
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwNzNC
ODc2MjFFNDM4NTlEMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVCdWZmZXJMaXN0LmNwcCAqLzsgfTsK
IAkJMDczQjg3NjcxRTQzODVBQzAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczQjg3NjMxRTQz
ODU5RDAwNzFDMEVDIC8qIEF1ZGlvU2FtcGxlQnVmZmVyTGlzdC5oICovOyB9OwogCQkwNzNCODc2
ODFFNDM4NUFDMDA3MUMwRUMgLyogQXVkaW9TYW1wbGVEYXRhU291cmNlLm1tIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDczQjg3NjQxRTQzODU5RDAwNzFD
MEVDIC8qIEF1ZGlvU2FtcGxlRGF0YVNvdXJjZS5tbSAqLzsgfTsKQEAgLTI4ODgsOCArMjg4Niw2
IEBACiAJCTZDNEM5NkRGMUFENDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNv
bnRyb2xsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZDNEM5NkRCMUFENDQ4MzUwMDM2M0Y2NCAvKiBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xs
ZXIuaCAqLzsgfTsKIAkJNkM0Qzk2REYxQUQ0NDgzNTAwMzY1NjcyIC8qIEpTUmVhZGFibGVTdHJl
YW1CWU9CUmVxdWVzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkM0Qzk2REIxQUQ0NDgzNTAwMzY1NjcyIC8qIEpTUmVhZGFibGVTdHJlYW1CWU9CUmVx
dWVzdC5oICovOyB9OwogCQk2QzRDOTZERjFBRDQ0ODM1MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0
cmVhbURlZmF1bHRDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2QzRDOTZEQjFBRDQ0ODM1MDAzNjVBNTAgLyogSlNSZWFkYWJsZVN0cmVh
bURlZmF1bHRDb250cm9sbGVyLmggKi87IH07Ci0JCTZBMzJEN0NFMUExNkQ4QzAwMDQxMkYwQiAv
KiBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA2QTRCNkQ2NjE5RDIyNUQ4MDA2RjExRDMgLyogSW5zcGVjdG9yQ2Fu
dmFzQWdlbnQuY3BwICovOyB9OwotCQk2QTRCNkQ2NTE5RDIyNTE5MDA2RjExRDMgLyogSW5zcGVj
dG9yQ2FudmFzQWdlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDZBNEI2RDY0MTlEMjI1MTkwMDZGMTFEMyAvKiBJbnNwZWN0b3JDYW52YXNBZ2VudC5o
ICovOyB9OwogCQk2QzYzODg5NUE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1
ZXN0SW5pdGlhdG9ycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNkM2Mzg4OTNBOTZDQ0VFNTBDOEM5NDZDIC8qIENhY2hlZFJlc291cmNlUmVxdWVzdElu
aXRpYXRvcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk2QzYzODg5NkE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5p
dGlhdG9ycy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA2QzYzODg5NEE5NkNDRUU1MEM4Qzk0NkMgLyogQ2FjaGVkUmVzb3VyY2VSZXF1ZXN0SW5pdGlh
dG9ycy5jcHAgKi87IH07CiAJCTZDRERFOEQwMTc3MEJCMjIwMDE2RTA3MiAvKiBSZWdpb25PdmVy
c2V0U3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDZDNzBBODE0MTc3MDdDNDkwMDlBNDQ2RSAvKiBSZWdpb25PdmVyc2V0U3RhdGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzYwMSw4ICs3NTk3
LDYgQEAKIAkJMDczNzk0RjQxOUY1ODY0RTAwRTVBMDQ1IC8qIFJUQ0RhdGFDaGFubmVsSGFuZGxl
ck1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDRGF0YUNoYW5uZWxI
YW5kbGVyTW9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzM3OTRGNzE5RjU4
NjRFMDBFNUEwNDUgLyogUlRDTm90aWZpZXJzTW9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBSVENOb3RpZmllcnNNb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMDczNzk0RjgxOUY1ODY0RTAwRTVBMDQ1IC8qIFJUQ05vdGlmaWVyc01vY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUlRDTm90aWZpZXJzTW9jay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwNzM5NEVDNzFCQUIyQ0NEMDBCRTk5Q0QgLyog
TWVkaWFEZXZpY2VzUmVxdWVzdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBNZWRpYURldmljZXNSZXF1ZXN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMDczOTRFQzkxQkFCMkNENzAwQkU5OUNEIC8qIE1lZGlhRGV2aWNlc1JlcXVlc3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWVkaWFEZXZpY2VzUmVxdWVzdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzNCODc1NjFFNDBEQ0U1MDA3MUMwRUMgLyogQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBB
dWRpb1N0cmVhbURlc2NyaXB0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3
M0I4NzU3MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDczQjg3NTgxRTQwRENGRDAw
NzFDMEVDIC8qIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEwNzQzLDggKzEwNzM3LDYgQEAKIAkJNkM0Qzk2REIxQUQ0NDgzNTAw
MzYzRjY0IC8qIEpTUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1JlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkM0Qzk2REIxQUQ0NDgzNTAwMzY1NjcyIC8qIEpT
UmVhZGFibGVTdHJlYW1CWU9CUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU1JlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkM0Qzk2REIxQUQ0NDgzNTAwMzY1QTUwIC8qIEpTUmVhZGFibGVTdHJlYW1EZWZh
dWx0Q29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1JlYWRh
YmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJNkE0QjZENjQxOUQyMjUxOTAwNkYxMUQzIC8qIEluc3BlY3RvckNhbnZhc0FnZW50LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluc3BlY3RvckNhbnZhc0FnZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTZBNEI2RDY2MTlEMjI1RDgwMDZGMTFEMyAvKiBJ
bnNwZWN0b3JDYW52YXNBZ2VudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbnNwZWN0b3JDYW52YXNBZ2VudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTZDNjM4ODkzQTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0
aWF0b3JzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWNoZWRSZXNvdXJj
ZVJlcXVlc3RJbml0aWF0b3JzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZDNjM4
ODk0QTk2Q0NFRTUwQzhDOTQ2QyAvKiBDYWNoZWRSZXNvdXJjZVJlcXVlc3RJbml0aWF0b3JzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWNoZWRSZXNvdXJjZVJl
cXVlc3RJbml0aWF0b3JzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkM3MEE4
MTQxNzcwN0M0OTAwOUE0NDZFIC8qIFJlZ2lvbk92ZXJzZXRTdGF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZWdpb25PdmVyc2V0U3RhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE2MTMzLDggKzE2MTI1LDYgQEAKIAkJCQk1RUE3MjVDRjFBQ0FCQ0Q5
MDBFQUQxN0IgLyogTWVkaWFEZXZpY2VzLmlkbCAqLywKIAkJCQkwN0FCRUY2QjFEOEExQzU4MDBG
MjE5NzIgLyogTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0LmNwcCAqLywKIAkJCQkwN0FC
RUY2RDFEOEExQzc2MDBGMjE5NzIgLyogTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0Lmgg
Ki8sCi0JCQkJMDczOTRFQzcxQkFCMkNDRDAwQkU5OUNEIC8qIE1lZGlhRGV2aWNlc1JlcXVlc3Qu
Y3BwICovLAotCQkJCTA3Mzk0RUM5MUJBQjJDRDcwMEJFOTlDRCAvKiBNZWRpYURldmljZXNSZXF1
ZXN0LmggKi8sCiAJCQkJNUUxNkEyRTIxQkZBNjRGQjAwMjlBMjFFIC8qIE1lZGlhRW5kcG9pbnRQ
ZWVyQ29ubmVjdGlvbi5jcHAgKi8sCiAJCQkJNUUxNkEyRTMxQkZBNjRGQjAwMjlBMjFFIC8qIE1l
ZGlhRW5kcG9pbnRQZWVyQ29ubmVjdGlvbi5oICovLAogCQkJCTVFNEVBQjAyMUQwNzE2NEMwMDA2
QTE4NCAvKiBNZWRpYUVuZHBvaW50U2Vzc2lvbkRlc2NyaXB0aW9uLmNwcCAqLywKQEAgLTI4NzA2
LDcgKzI4Njk2LDYgQEAKIAkJCQkxNTE0NUI5MDFCM0ExQ0UwMDA2NjJCRjcgLyogTWVkaWFEZXZp
Y2VJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQk1RUE3MjVEMzFBQ0FCRDQ3MDBFQUQxN0IgLyog
TWVkaWFEZXZpY2VzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwN0FCRUY2RTFEOEExQzc2MDBGMjE5
NzIgLyogTWVkaWFEZXZpY2VzRW51bWVyYXRpb25SZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQkwNzM5NEVDQTFCQUIyQ0Q3MDBCRTk5Q0QgLyogTWVkaWFEZXZpY2VzUmVxdWVzdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTcyMDVBQjgxMjM5MjkxMDAwQjE3MzgwIC8qIE1lZGlhRG9jdW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZENkYyNTJEMTNGNUVGMEUwMDY1MTY1RiAvKiBNZWRpYUVs
ZW1lbnRBdWRpb1NvdXJjZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3RkU5OUREMTg4MDdB
N0QwMDI1NjY0OCAvKiBNZWRpYUVsZW1lbnRTZXNzaW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTMy
NzQ2LDcgKzMyNzM1LDYgQEAKIAkJCQkxNTlBRTgyQjFCM0E0MDJGMDAzNzQ3OEIgLyogTWVkaWFE
ZXZpY2VJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTVFQTcyNUQyMUFDQUJENDcwMEVBRDE3
QiAvKiBNZWRpYURldmljZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMDdBQkVGNkMxRDhBMUM1
ODAwRjIxOTcyIC8qIE1lZGlhRGV2aWNlc0VudW1lcmF0aW9uUmVxdWVzdC5jcHAgaW4gU291cmNl
cyAqLywKLQkJCQkwNzM5NEVDODFCQUIyQ0NEMDBCRTk5Q0QgLyogTWVkaWFEZXZpY2VzUmVxdWVz
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzIwNUFCNzEyMzkyOTEwMDBCMTczODAgLyogTWVk
aWFEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRDZGMjUyQzEzRjVFRjBFMDA2NTE2
NUYgLyogTWVkaWFFbGVtZW50QXVkaW9Tb3VyY2VOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTA3RkU5OURDMTg4MDdBN0QwMDI1NjY0OCAvKiBNZWRpYUVsZW1lbnRTZXNzaW9uLmNwcCBpbiBT
b3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9DL1dL
VXNlck1lZGlhUGVybWlzc2lvbkNoZWNrLmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suaAppbmRleCBkMjU3ODQ1ZTQ3ZjNiMjVhMTJj
YTkzNGQ2MjQ5NjY0OWQxMmRkMDk5Li5hODkxZjUyNTU3YjhjOThmMjYzOGMxZDNkNjBhZGY3MjVl
OTBjN2Y4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL0MvV0tVc2Vy
TWVkaWFQZXJtaXNzaW9uQ2hlY2suaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L0MvV0tVc2VyTWVkaWFQZXJtaXNzaW9uQ2hlY2suaApAQCAtNDEsNCArNDEsNCBAQCBXS19FWFBP
UlQgdm9pZCBXS1VzZXJNZWRpYVBlcm1pc3Npb25DaGVja1NldFVzZXJNZWRpYUFjY2Vzc0luZm8o
V0tVc2VyTWVkaWFQZXJtaQogfQogI2VuZGlmCiAKLSNlbmRpZiAvKiBXS01lZGlhRGV2aWNlc1Jl
cXVlc3RfaCAqLworI2VuZGlmIC8qIFdLVXNlck1lZGlhUGVybWlzc2lvbkNoZWNrX2ggKi8KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvTWVkaWFTdHJlYW0vVXNlck1lZGlh
UGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
TWVkaWFTdHJlYW0vVXNlck1lZGlhUGVybWlzc2lvblJlcXVlc3RNYW5hZ2VyLmNwcAppbmRleCBj
NTlhMmYxNTJkZmM4NDY5ZDYzYTgzNmJjYjliZjFiNjdlMzc5YWQ2Li5jNTU4ZTcyYmI2MTQyYTc4
NzMyNDQzMjUwYjM0ODMwNTNjNDVhYTAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL01lZGlhU3RyZWFtL1VzZXJNZWRpYVBlcm1pc3Npb25SZXF1ZXN0TWFuYWdlci5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9NZWRpYVN0cmVhbS9Vc2VyTWVkaWFQZXJt
aXNzaW9uUmVxdWVzdE1hbmFnZXIuY3BwCkBAIC0xNzcsOSArMTc3LDcgQEAgdm9pZCBVc2VyTWVk
aWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OnVzZXJNZWRpYUFjY2Vzc1dhc0RlbmllZCh1aW50
NjRfdCByZXF1ZXMKIAogdm9pZCBVc2VyTWVkaWFQZXJtaXNzaW9uUmVxdWVzdE1hbmFnZXI6OmVu
dW1lcmF0ZU1lZGlhRGV2aWNlcyhNZWRpYURldmljZXNFbnVtZXJhdGlvblJlcXVlc3QmIHJlcXVl
c3QpCiB7Ci0gICAgYXV0byogZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4ocmVxdWVzdC5z
Y3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOwotICAgIGF1dG8qIGZyYW1lID0gZG9jdW1lbnQgPyBk
b2N1bWVudC0+ZnJhbWUoKSA6IG51bGxwdHI7Ci0KKyAgICBhdXRvKiBmcmFtZSA9IHJlcXVlc3Qu
ZnJhbWUoKTsKICAgICBpZiAoIWZyYW1lKSB7CiAgICAgICAgIHJlcXVlc3Quc2V0RGV2aWNlSW5m
byhWZWN0b3I8Q2FwdHVyZURldmljZT4oKSwgZW1wdHlTdHJpbmcoKSwgZmFsc2UpOwogICAgICAg
ICByZXR1cm47Cg==
</data>
<flag name="review"
          id="334148"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>