<?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>169371</bug_id>
          
          <creation_ts>2017-03-08 13:27:10 -0800</creation_ts>
          <short_desc>WebGPU: Backend - Library and Functions</short_desc>
          <delta_ts>2017-03-09 13:33:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>167952</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dean Jackson">dino</reporter>
          <assigned_to name="Dean Jackson">dino</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>graouts</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1284966</commentid>
    <comment_count>0</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-03-08 13:27:10 -0800</bug_when>
    <thetext>Implement the backend part of loading a shader library and exposing functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1284977</commentid>
    <comment_count>1</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-03-08 13:33:02 -0800</bug_when>
    <thetext>&lt;rdar://problem/30928792&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285165</commentid>
    <comment_count>2</comment_count>
      <attachid>303884</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-03-08 18:27:05 -0800</bug_when>
    <thetext>Created attachment 303884
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285167</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-03-08 18:28:33 -0800</bug_when>
    <thetext>Attachment 303884 did not pass style-queue:


ERROR: Tools/TestWebKitAPI/Tests/WebCore/mac/GPUTest.h:37:  This { should be at the end of the previous line  [whitespace/braces] [4]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/mac/GPUTest.h:40:  Multi-line string (&quot;...&quot;) found.  This lint script doesn&apos;t do well with such strings, and may give bogus warnings.  They&apos;re ugly and unnecessary, and you should use concatenation instead&quot;.  [readability/multiline_string] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/mac/GPUTest.h:43:  Extra space before [.  [whitespace/brackets] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/mac/GPUTest.h:46:  Missing space after ,  [whitespace/comma] [3]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/mac/GPUTest.h:46:  Extra space before [.  [whitespace/brackets] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/mac/GPUTest.h:47:  Extra space before [.  [whitespace/brackets] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/mac/GPUTest.h:51:  Extra space before [.  [whitespace/brackets] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/mac/GPUTest.h:54:  Multi-line string (&quot;...&quot;) found.  This lint script doesn&apos;t do well with such strings, and may give bogus warnings.  They&apos;re ugly and unnecessary, and you should use concatenation instead&quot;.  [readability/multiline_string] [5]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm:57:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm:61:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/mac/GPULibrary.mm:65:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/mac/GPULibrary.mm:79:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
ERROR: Tools/TestWebKitAPI/Tests/WebCore/mac/GPULibrary.mm:80:  Consider using EXPECT_EQ instead of EXPECT_TRUE(a == b)  [readability/check] [2]
Total errors found: 13 in 16 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285169</commentid>
    <comment_count>4</comment_count>
      <attachid>303884</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2017-03-08 18:35:09 -0800</bug_when>
    <thetext>Comment on attachment 303884
Patch

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

&gt; Source/WebCore/platform/graphics/cocoa/GPUFunctionMetal.mm:2
&gt; + * Copyright (C) 2015 Apple Inc. All rights reserved.

2015?

&gt; Source/WebCore/platform/graphics/cocoa/GPULibraryMetal.mm:45
&gt; +    NSError* error = [NSError errorWithDomain:@&quot;com.apple.WebKit.GPU&quot; code:1 userInfo:nil];

All of the objc stars are on the wrong side everywhere :P

Also, what is this odd error domain with a weird name and that isn&apos;t in a header. And the codes should be an enum, probably

&gt; Source/WebCore/platform/graphics/gpu/GPUFunction.cpp:52
&gt; +GPUFunction::GPUFunction(GPULibrary* library, const String&amp; name)

Maybe the Metal thing should be a subclass that you make on the platforms where you can, instead? Instead of polluting the cross-platform class (esp. the header) with all sort of metaly things. And then you could pure-virtualize some of these things and not provide base implementations that will never be useful to anyone.

&gt; Tools/TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm:26
&gt; +#ifdef ENABLE_WEBGPU

Can we not use proper #if ENABLE(WEBGPU) here, if you put it below config.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285396</commentid>
    <comment_count>5</comment_count>
      <attachid>303884</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-03-09 10:53:11 -0800</bug_when>
    <thetext>Comment on attachment 303884
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/cocoa/GPULibraryMetal.mm:45
&gt;&gt; +    NSError* error = [NSError errorWithDomain:@&quot;com.apple.WebKit.GPU&quot; code:1 userInfo:nil];
&gt; 
&gt; All of the objc stars are on the wrong side everywhere :P
&gt; 
&gt; Also, what is this odd error domain with a weird name and that isn&apos;t in a header. And the codes should be an enum, probably

I couldn&apos;t see any consistency with what we do with NSErrors. And I don&apos;t actually use it.

&gt;&gt; Source/WebCore/platform/graphics/gpu/GPUFunction.cpp:52
&gt;&gt; +GPUFunction::GPUFunction(GPULibrary* library, const String&amp; name)
&gt; 
&gt; Maybe the Metal thing should be a subclass that you make on the platforms where you can, instead? Instead of polluting the cross-platform class (esp. the header) with all sort of metaly things. And then you could pure-virtualize some of these things and not provide base implementations that will never be useful to anyone.

I generally agree, but decided not to do it.... at least for now. Mostly because I didn&apos;t want to virtualize everything. But I think it makes more sense, so I&apos;ll slowly convert them.

&gt;&gt; Tools/TestWebKitAPI/Tests/WebCore/mac/GPUFunction.mm:26
&gt;&gt; +#ifdef ENABLE_WEBGPU
&gt; 
&gt; Can we not use proper #if ENABLE(WEBGPU) here, if you put it below config.h?

We can. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1285404</commentid>
    <comment_count>6</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2017-03-09 11:11:09 -0800</bug_when>
    <thetext>Committed r213650: &lt;http://trac.webkit.org/changeset/213650&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303884</attachid>
            <date>2017-03-08 18:27:05 -0800</date>
            <delta_ts>2017-03-08 18:35:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-169371-20170309132656.patch</filename>
            <type>text/plain</type>
            <size>43386</size>
            <attacher name="Dean Jackson">dino</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjEzNTg4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODk2MTg1MTBkMWE2MDcz
YzYzNGJhOTYyZjQwMTE0YTFmY2RkNWM0ZS4uODVmNDliMGFhNzE5Zjk0NTYzNWRkNWJhNzQ0MjVl
MmM1YjdlNTg1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDE3LTAzLTA4ICBEZWFu
IEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKworICAgICAgICBXZWJHUFU6IEJhY2tlbmQgLSBM
aWJyYXJ5IGFuZCBGdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2OTM3MQorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMzA5Mjg3OTI+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50
IHRoZSBiYWNrZW5kcyBmb3IgR1BVTGlicmFyeSBhbmQgR1BVRnVuY3Rpb24uCisgICAgICAgIEEg
R1BVTGlicmFyeSBpcyBjcmVhdGVkIGZyb20gYSBHUFVEZXZpY2UsIGdpdmVuIHNvbWUKKyAgICAg
ICAgc2hhZGVyIHNvdXJjZSBjb2RlLiBZb3UgY2FuIHRoZW4gZXh0cmFjdCB0aGUgR1BVRnVuY3Rp
b25zCisgICAgICAgIGZyb20gdGhlIGxpYnJhcnkuCisKKyAgICAgICAgV2ViS2l0QVBJVGVzdHM6
IEdQVUxpYnJhcnkgYW5kIEdQVUZ1bmN0aW9uLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NvY29hL0dQ
VUZ1bmN0aW9uTWV0YWwubW06CisgICAgICAgIChXZWJDb3JlOjpHUFVGdW5jdGlvbjo6R1BVRnVu
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1BVRnVuY3Rpb246Om5hbWUpOgorICAgICAgICAo
V2ViQ29yZTo6R1BVRnVuY3Rpb246OnBsYXRmb3JtRnVuY3Rpb24pOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2NvY29hL0dQVUxpYnJhcnlNZXRhbC5tbToKKyAgICAgICAgKFdlYkNvcmU6
OkdQVUxpYnJhcnk6OkdQVUxpYnJhcnkpOgorICAgICAgICAoV2ViQ29yZTo6R1BVTGlicmFyeTo6
bGFiZWwpOgorICAgICAgICAoV2ViQ29yZTo6R1BVTGlicmFyeTo6c2V0TGFiZWwpOgorICAgICAg
ICAoV2ViQ29yZTo6R1BVTGlicmFyeTo6ZnVuY3Rpb25OYW1lcyk6CisgICAgICAgIChXZWJDb3Jl
OjpHUFVMaWJyYXJ5OjpwbGF0Zm9ybUxpYnJhcnkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2dwdS9HUFVEZXZpY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R1BVRGV2aWNlOjpjcmVh
dGVMaWJyYXJ5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVRGV2aWNlLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUZ1bmN0aW9uLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdQVUZ1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1BV
RnVuY3Rpb246On5HUFVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHUFVGdW5jdGlvbjo6
R1BVRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1BVRnVuY3Rpb246Om5hbWUpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVGdW5jdGlvbi5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVMaWJyYXJ5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdQ
VUxpYnJhcnk6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVMaWJyYXJ5Ojp+R1BVTGli
cmFyeSk6CisgICAgICAgIChXZWJDb3JlOjpHUFVMaWJyYXJ5OjpsYWJlbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHUFVMaWJyYXJ5OjpzZXRMYWJlbCk6CisgICAgICAgIChXZWJDb3JlOjpHUFVMaWJy
YXJ5OjpmdW5jdGlvbk5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUxpYnJhcnk6OmZ1bmN0
aW9uV2l0aE5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVMaWJyYXJ5
Lmg6CisKIDIwMTctMDMtMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBVcGRhdGUgb3V0ZGF0ZWQgY29tbWVudCBhYm91dCBIVE1MRWxlbWVudC5kcm9wem9uZQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IGZiMjY5OTRkNzU3M2MxMzU4ZjQzOWJlNDViZTY3ZjNlOGM0MDZhMmEuLjYxN2QyNDk4ZDlj
MDk4NmQyNTY5ZTJmMmU0MWQ4MzUwNmQ3Yzk3NmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9X
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEzNTcsNiArMTM1NywxMiBAQAog
CQkzMTZCREI4QjFFNkUxNTMwMDBERTBENUEgLyogV2ViR1BVTGF5ZXIubW0gaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZCREI4OTFFNkUxNTMwMDBERTBE
NUEgLyogV2ViR1BVTGF5ZXIubW0gKi87IH07CiAJCTMxNkJEQjhDMUU2RTE1MzAwMERFMEQ1QSAv
KiBXZWJHUFVMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzE2QkRCOEExRTZFMTUzMDAwREUwRDVBIC8qIFdlYkdQVUxheWVyLmggKi87IH07CiAJ
CTMxNkJEQjhEMUU2RTE4OTgwMERFMEQ1QSAvKiBHUFVEZXZpY2VNZXRhbC5tbSBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkJEQjg4MUU2RTE0MUMwMERF
MEQ1QSAvKiBHUFVEZXZpY2VNZXRhbC5tbSAqLzsgfTsKKwkJMzE2QkRCOTQxRTcwQzg5NzAwREUw
RDVBIC8qIEdQVUZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDMxNkJEQjkyMUU3MEM4OTcwMERFMEQ1QSAvKiBHUFVGdW5jdGlvbi5jcHAg
Ki87IH07CisJCTMxNkJEQjk1MUU3MEM4OTcwMERFMEQ1QSAvKiBHUFVGdW5jdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2QkRCOTMxRTcwQzg5
NzAwREUwRDVBIC8qIEdQVUZ1bmN0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKKwkJMzE2QkRCOTcxRTcwQ0EyNDAwREUwRDVBIC8qIEdQVUZ1bmN0
aW9uTWV0YWwubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTZCREI5NjFFNzBDQTI0MDBERTBENUEgLyogR1BVRnVuY3Rpb25NZXRhbC5tbSAqLzsgfTsK
KwkJMzE2QkRCOUExRTcwQ0JCRjAwREUwRDVBIC8qIEdQVUxpYnJhcnkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2QkRCOTgxRTcwQ0JCRjAwREUw
RDVBIC8qIEdQVUxpYnJhcnkuY3BwICovOyB9OworCQkzMTZCREI5QjFFNzBDQkJGMDBERTBENUEg
LyogR1BVTGlicmFyeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzE2QkRCOTkxRTcwQ0JCRjAwREUwRDVBIC8qIEdQVUxpYnJhcnkuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkzMTZCREI5RTFFNzBDRDkw
MDBERTBENUEgLyogR1BVTGlicmFyeU1ldGFsLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2QkRCOUMxRTcwQ0Q5MDAwREUwRDVBIC8qIEdQVUxpYnJh
cnlNZXRhbC5tbSAqLzsgfTsKIAkJMzE2RkUwNzEwRTZDQ0JFRTAwQkY2MDg4IC8qIEpTQ1NTS2V5
ZnJhbWVSdWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxNkZFMDZEMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lUnVsZS5jcHAgKi87
IH07CiAJCTMxNkZFMDcyMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lUnVsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2RkUwNkUwRTZD
Q0JFRTAwQkY2MDg4IC8qIEpTQ1NTS2V5ZnJhbWVSdWxlLmggKi87IH07CiAJCTMxNkZFMDczMEU2
Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lc1J1bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2RkUwNkYwRTZDQ0JFRTAwQkY2MDg4IC8q
IEpTQ1NTS2V5ZnJhbWVzUnVsZS5jcHAgKi87IH07CkBAIC04Njc1LDYgKzg2ODEsMTIgQEAKIAkJ
MzE2QkRCODgxRTZFMTQxQzAwREUwRDVBIC8qIEdQVURldmljZU1ldGFsLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR1BVRGV2aWNlTWV0YWwubW07IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkJEQjg5MUU2RTE1MzAwMERFMEQ1QSAvKiBXZWJHUFVM
YXllci5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFdlYkdQVUxh
eWVyLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTZCREI4QTFFNkUxNTMwMDBE
RTBENUEgLyogV2ViR1BVTGF5ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V2ViR1BVTGF5ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2QkRCOTIxRTcw
Qzg5NzAwREUwRDVBIC8qIEdQVUZ1bmN0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEdQVUZ1bmN0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMzE2QkRCOTMxRTcwQzg5NzAwREUwRDVBIC8qIEdQVUZ1bmN0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdQVUZ1bmN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTMxNkJEQjk2MUU3MENBMjQwMERFMEQ1QSAvKiBHUFVGdW5jdGlvbk1ldGFsLm1t
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR1BVRnVuY3Rpb25NZXRh
bC5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2QkRCOTgxRTcwQ0JCRjAwREUw
RDVBIC8qIEdQVUxpYnJhcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gR1BVTGlicmFyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTMxNkJEQjk5
MUU3MENCQkYwMERFMEQ1QSAvKiBHUFVMaWJyYXJ5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdQVUxpYnJhcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMzE2
QkRCOUMxRTcwQ0Q5MDAwREUwRDVBIC8qIEdQVUxpYnJhcnlNZXRhbC5tbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEdQVUxpYnJhcnlNZXRhbC5tbTsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE2RkUwNkQwRTZDQ0JFRTAwQkY2MDg4IC8qIEpTQ1NTS2V5
ZnJhbWVSdWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ1NT
S2V5ZnJhbWVSdWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE2RkUwNkUw
RTZDQ0JFRTAwQkY2MDg4IC8qIEpTQ1NTS2V5ZnJhbWVSdWxlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQ1NTS2V5ZnJhbWVSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMxNkZFMDZGMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lc1J1bGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDU1NLZXlmcmFtZXNS
dWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3NDQ5LDYgKzE3NDYxLDEw
IEBACiAJCQljaGlsZHJlbiA9ICgKIAkJCQkzMTZCREI4NDFFNkUwQTIxMDBERTBENUEgLyogR1BV
RGV2aWNlLmNwcCAqLywKIAkJCQkzMTZCREI4NTFFNkUwQTIxMDBERTBENUEgLyogR1BVRGV2aWNl
LmggKi8sCisJCQkJMzE2QkRCOTIxRTcwQzg5NzAwREUwRDVBIC8qIEdQVUZ1bmN0aW9uLmNwcCAq
LywKKwkJCQkzMTZCREI5MzFFNzBDODk3MDBERTBENUEgLyogR1BVRnVuY3Rpb24uaCAqLywKKwkJ
CQkzMTZCREI5ODFFNzBDQkJGMDBERTBENUEgLyogR1BVTGlicmFyeS5jcHAgKi8sCisJCQkJMzE2
QkRCOTkxRTcwQ0JCRjAwREUwRDVBIC8qIEdQVUxpYnJhcnkuaCAqLywKIAkJCQk0OTg3NzBENzEy
NDJDNTM1MDAyMjI2QkEgLyogVGV4dHVyZS5jcHAgKi8sCiAJCQkJNDk4NzcwRDgxMjQyQzUzNTAw
MjIyNkJBIC8qIFRleHR1cmUuaCAqLywKIAkJCQk0OTg3NzBEOTEyNDJDNTM1MDAyMjI2QkEgLyog
VGlsaW5nRGF0YS5jcHAgKi8sCkBAIC0yMjU0MSw2ICsyMjU1Nyw4IEBACiAJCQkJN0M0RURENzMx
QTdCNjA3ODAwMTk4QzREIC8qIEZvbnRDb2NvYS5tbSAqLywKIAkJCQlCNTMyMEQ2QTEyMkEyNEU5
MDAyRDE0NDAgLyogRm9udFBsYXRmb3JtRGF0YUNvY29hLm1tICovLAogCQkJCTMxNkJEQjg4MUU2
RTE0MUMwMERFMEQ1QSAvKiBHUFVEZXZpY2VNZXRhbC5tbSAqLywKKwkJCQkzMTZCREI5NjFFNzBD
QTI0MDBERTBENUEgLyogR1BVRnVuY3Rpb25NZXRhbC5tbSAqLywKKwkJCQkzMTZCREI5QzFFNzBD
RDkwMDBERTBENUEgLyogR1BVTGlicmFyeU1ldGFsLm1tICovLAogCQkJCTJEMEI0QUE5MThEQTFD
Q0QwMDQzNERFMSAvKiBJT1N1cmZhY2UuaCAqLywKIAkJCQkyRDBCNEFBQTE4REExQ0NEMDA0MzRE
RTEgLyogSU9TdXJmYWNlLm1tICovLAogCQkJCUFEOUZGNkUwMTkwODM5MUQwMDNCNjFFMCAvKiBJ
T1N1cmZhY2VQb29sQ29jb2EubW0gKi8sCkBAIC0yNjE3Myw2ICsyNjE5MSw3IEBACiAJCQkJOTMz
MDlERTQwOTlFNjQ5MjAwNTZFNTgxIC8qIEVkaXRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0RjE1MzRERTExQjUzMkVDMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk0RjE1MzRFMDExQjUzMzAyMDAyMUZEODYgLyogRWRpdGluZ0JlaGF2aW9yVHlw
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTMxNkJEQjlCMUU3MENCQkYwMERFMEQ1QSAvKiBHUFVM
aWJyYXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQkzQUM2NDhCMjEyOUUxNDY1MDBDM0VCMjUgLyog
RWRpdGluZ0JvdW5kYXJ5LmggaW4gSGVhZGVycyAqLywKIAkJCQk5QkFCNkM2QzEyNTUwNjMxMDAx
NjI2RDQgLyogRWRpdGluZ1N0eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0QjMwNDNDRDBBRTAz
NzNCMDBBODI2NDcgLyogRWRpdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTI3OTcyLDYgKzI3OTkx
LDcgQEAKIAkJCQlCQ0VBNDg2NjA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyQnV0dG9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCNTY1NzlCNTE4MjREMTJBMDBFNzlGMjMgLyogUmVuZGVyQ2hpbGRJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFNDQxMzQxMkY3NDhFMjAwOUI4NEI4IC8q
IFJlbmRlckNvbWJpbmVUZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQkzMTZCREI5NTFFNzBDODk3
MDBERTBENUEgLyogR1BVRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTkzOTJGMTQyMEFE
MTg1RjQwMDY5MUJENCAvKiBSZW5kZXJDb3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0VB
NDg2RTA5N0Q5MzAyMDA5NEM5RTQgLyogUmVuZGVyRGVwcmVjYXRlZEZsZXhpYmxlQm94LmggaW4g
SGVhZGVycyAqLywKIAkJCQk4MzZEQUEwNjFDRUFCODBEMDBBMkI3MDcgLyogUmVuZGVyRGVzY2Vu
ZGFudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTMwMzkzLDYgKzMwNDEzLDcgQEAKIAkJ
CQk5NzdCMzg3NzEyMjg4M0U5MDBCODFGRjggLyogSFRNTFRva2VuaXplci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwNzA3NTY4QjE0MjI2MkQ2MDA0MTQxNjEgLyogSFRNTFRyYWNrRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk5NzdCMzcyNTEyMjg3MjE3MDBCODFGRjggLyogSFRNTFRy
ZWVCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxNkJEQjk0MUU3MEM4OTcwMERFMEQ1
QSAvKiBHUFVGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBOEVBNzlGMzBBMTkxNkRG
MDBBOEVGNUYgLyogSFRNTFVMaXN0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFNDQ2
MTNBQTBDRDYzMzEwMDBGQURBNzUgLyogSFRNTFZpZGVvRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4MzlBQUZFQzFBMEMwQzhEMDA2MDVGOTkgLyogSFRNTFdCUkVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC0zMTkwOCw2ICszMTkyOSw3IEBACiAJCQkJMDc4RTA5MDkxN0QxNENF
RTAwNDIwQUExIC8qIFJUQ0ljZUNhbmRpZGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwNzNC
RTM0RjE3RDE4MTgzMDAyQkQ0MzEgLyogUlRDSWNlQ2FuZGlkYXRlRGVzY3JpcHRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwNzhFMDkwQTE3RDE0Q0VFMDA0MjBBQTEgLyogUlRDSWNlQ2FuZGlk
YXRlRXZlbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzE2QkRCOUUxRTcwQ0Q5MDAwREUwRDVB
IC8qIEdQVUxpYnJhcnlNZXRhbC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTA3Mzc5NEZEMTlGNTg2
NEUwMEU1QTA0NSAvKiBSVENOb3RpZmllcnNNb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTA3
OEUwOTBCMTdEMTRDRUUwMDQyMEFBMSAvKiBSVENQZWVyQ29ubmVjdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk1RTJDNDM2MjFCQ0VFMzJCMDAwMUUyQkMgLyogUlRDUnRwUmVjZWl2ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC0zMjI3NSw2ICszMjI5Nyw3IEBACiAJCQkJODQ3NkM5RUExMURG
NkEyOTAwNTU1QjAyIC8qIFNWR1BhdGhCdWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg0
MTlEMkE4MTIwRDkyRDAwMDE0MUY4RiAvKiBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODQxOUQyQUMxMjBEOTJGQzAwMTQxRjhGIC8qIFNWR1BhdGhCeXRl
U3RyZWFtU291cmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTMxNkJEQjlBMUU3MENCQkYwMERF
MEQ1QSAvKiBHUFVMaWJyYXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTU4MEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdQYXRoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NDc2
QzlFRjExREY2QTU4MDA1NTVCMDIgLyogU1ZHUGF0aFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3QzM5QzM3MTFEREJCOEFFMDBGRUZCMjkgLyogU1ZHUGF0aFNlZ0xpc3QuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC0zMjU3Myw2ICszMjU5Niw3IEBACiAJCQkJNkY5OTVBMTUxQTcwNzU2MjAw
QTczNUY0IC8qIFdlYkdMU3luYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0OUM3QjlFNTEwNDJE
MzJGMDAwOUQ0NDcgLyogV2ViR0xUZXh0dXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZGOTk1
QTIzMUE3MDc4QjEwMEE3MzVGNCAvKiBXZWJHTFRyYW5zZm9ybUZlZWRiYWNrLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTMxNkJEQjk3MUU3MENBMjQwMERFMEQ1QSAvKiBHUFVGdW5jdGlvbk1ldGFs
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEMzRjFGNUExMEM4ODcxMjAwRDcyQ0UxIC8qIFdlYkdM
VW5pZm9ybUxvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTZGOTk1QTI1MUE3MDc4QjEw
MEE3MzVGNCAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTZGMjIyQjc2MUFCNTJEOEEwMDk0NjUxQSAvKiBXZWJHTFZlcnRleEFycmF5T2JqZWN0QmFzZS5j
cHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NvY29hL0dQVUZ1bmN0aW9uTWV0YWwubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jb2NvYS9HUFVGdW5jdGlvbk1ldGFsLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIwNWRjYzlj
ZDJiNDgyOWU2YjkwOTM5YmU1ZDRlMGQxODA0YzMyZDMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HUFVGdW5jdGlvbk1ldGFsLm1tCkBA
IC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1BVRnVuY3Rpb24uaCIKKworI2lm
IEVOQUJMRShXRUJHUFUpCisKKyNpbXBvcnQgIkdQVUxpYnJhcnkuaCIKKyNpbXBvcnQgIkxvZ2dp
bmcuaCIKKyNpbXBvcnQgPE1ldGFsL01ldGFsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
R1BVRnVuY3Rpb246OkdQVUZ1bmN0aW9uKEdQVUxpYnJhcnkqIGxpYnJhcnksIGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3sKKyAgICBMT0coV2ViR1BVLCAiR1BVRnVuY3Rpb246OkdQVUZ1bmN0aW9uKCki
KTsKKworICAgIGlmICghbGlicmFyeSB8fCAhbGlicmFyeS0+cGxhdGZvcm1MaWJyYXJ5KCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIG1fZnVuY3Rpb24gPSAoTVRMRnVuY3Rpb24qKVtsaWJyYXJ5
LT5wbGF0Zm9ybUxpYnJhcnkoKSBuZXdGdW5jdGlvbldpdGhOYW1lOm5hbWVdOworfQorCitTdHJp
bmcgR1BVRnVuY3Rpb246Om5hbWUoKSBjb25zdAoreworICAgIGlmICghbV9mdW5jdGlvbikKKyAg
ICAgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CisgICAgCisgICAgcmV0dXJuIFttX2Z1bmN0aW9u
IG5hbWVdOworfQorCitNVExGdW5jdGlvbiogR1BVRnVuY3Rpb246OnBsYXRmb3JtRnVuY3Rpb24o
KQoreworICAgIHJldHVybiBtX2Z1bmN0aW9uLmdldCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY29jb2EvR1BVTGlicmFyeU1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY29jb2EvR1BVTGlicmFyeU1ldGFsLm1tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmMmZkZDM4ZDM2
YWY1MDFjNmYzYjgzNWNkNTljMzIxNmFjYjVjODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jb2NvYS9HUFVMaWJyYXJ5TWV0YWwubW0KQEAgLTAs
MCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHUFVMaWJyYXJ5LmgiCisKKyNpZiBFTkFC
TEUoV0VCR1BVKQorCisjaW1wb3J0ICJHUFVEZXZpY2UuaCIKKyNpbXBvcnQgIkxvZ2dpbmcuaCIK
KworI2ltcG9ydCA8TWV0YWwvTWV0YWwuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHUFVM
aWJyYXJ5OjpHUFVMaWJyYXJ5KEdQVURldmljZSogZGV2aWNlLCBjb25zdCBTdHJpbmcmIHNvdXJj
ZUNvZGUpCit7CisgICAgTE9HKFdlYkdQVSwgIkdQVUxpYnJhcnk6OkdQVUxpYnJhcnkoKSIpOwor
CisgICAgaWYgKCFkZXZpY2UgfHwgIWRldmljZS0+cGxhdGZvcm1EZXZpY2UoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgTlNFcnJvciogZXJyb3IgPSBbTlNFcnJvciBlcnJvcldpdGhEb21haW46
QCJjb20uYXBwbGUuV2ViS2l0LkdQVSIgY29kZToxIHVzZXJJbmZvOm5pbF07CisgICAgbV9saWJy
YXJ5ID0gKE1UTExpYnJhcnkqKVtkZXZpY2UtPnBsYXRmb3JtRGV2aWNlKCkgbmV3TGlicmFyeVdp
dGhTb3VyY2U6c291cmNlQ29kZSBvcHRpb25zOm5pbCBlcnJvcjomZXJyb3JdOworICAgIGlmICgh
bV9saWJyYXJ5KQorICAgICAgICBMT0coV2ViR1BVLCAiQ29tcGlsYXRpb24gZXJyb3I6ICVzIiwg
W1tlcnJvciBsb2NhbGl6ZWREZXNjcmlwdGlvbl0gVVRGOFN0cmluZ10pOworfQorCitTdHJpbmcg
R1BVTGlicmFyeTo6bGFiZWwoKSBjb25zdAoreworICAgIGlmICghbV9saWJyYXJ5KQorICAgICAg
ICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKKworICAgIHJldHVybiBbbV9saWJyYXJ5IGxhYmVsXTsK
K30KKwordm9pZCBHUFVMaWJyYXJ5OjpzZXRMYWJlbChjb25zdCBTdHJpbmcmIGxhYmVsKQorewor
ICAgIGlmICghbV9saWJyYXJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBbbV9saWJyYXJ5IHNl
dExhYmVsOmxhYmVsXTsKK30KKworVmVjdG9yPFN0cmluZz4gR1BVTGlicmFyeTo6ZnVuY3Rpb25O
YW1lcygpCit7CisgICAgaWYgKCFtX2xpYnJhcnkpCisgICAgICAgIHJldHVybiBWZWN0b3I8U3Ry
aW5nPigpOworCisgICAgVmVjdG9yPFN0cmluZz4gbmFtZXM7CisKKyAgICBOU0FycmF5PE5TU3Ry
aW5nKj4qIGZ1bmN0aW9uTmFtZXMgPSBbbV9saWJyYXJ5IGZ1bmN0aW9uTmFtZXNdOworICAgIGZv
ciAoTlNTdHJpbmcqIHN0cmluZyBpbiBmdW5jdGlvbk5hbWVzKQorICAgICAgICBuYW1lcy5hcHBl
bmQoc3RyaW5nKTsKKyAgICAKKyAgICByZXR1cm4gbmFtZXM7Cit9CisKK01UTExpYnJhcnkqIEdQ
VUxpYnJhcnk6OnBsYXRmb3JtTGlicmFyeSgpCit7CisgICAgcmV0dXJuIG1fbGlicmFyeS5nZXQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVEZXZpY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVURldmljZS5jcHAKaW5kZXggZGQ5ZGZh
MmMwZGIwNjRkYzE1YWZhOTY4ZjZkYTkzYjFkZDIyM2EwZi4uOWE5MDNjMDQyMzdhYTlmMTg4MWVi
YWFiN2UxZWFjY2M5MjgwZDA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0dQVURldmljZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L0dQVURldmljZS5jcHAKQEAgLTIzLDEyICsyMywxMyBAQAogICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaW1wb3J0ICJjb25maWcuaCIKLSNpbXBvcnQgIkdQVURldmljZS5oIgor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdQVURldmljZS5oIgogCiAjaWYgRU5BQkxF
KFdFQkdQVSkKIAotI2ltcG9ydCAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIkdQVUxpYnJhcnkuaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTIsNiAr
NTMsMTEgQEAgR1BVRGV2aWNlOjp+R1BVRGV2aWNlKCkKICAgICBMT0coV2ViR1BVLCAiR1BVRGV2
aWNlOjp+R1BVRGV2aWNlKCkiKTsKIH0KIAorUmVmUHRyPEdQVUxpYnJhcnk+IEdQVURldmljZTo6
Y3JlYXRlTGlicmFyeShjb25zdCBTdHJpbmcmIHNvdXJjZUNvZGUpCit7CisgICAgcmV0dXJuIEdQ
VUxpYnJhcnk6OmNyZWF0ZSh0aGlzLCBzb3VyY2VDb2RlKTsKK30KKwogI2lmICFQTEFURk9STShD
T0NPQSkKIAogR1BVRGV2aWNlOjpHUFVEZXZpY2UoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVURldmljZS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVURldmljZS5oCmluZGV4IDZhNzgxMDhjMmRiYTgxYjUzNzJh
NzNjMGEzNGZlMmQ1Y2RmMTNhZGMuLjA3NWViOTIyYWE4N2IzOWVhMzNmNGUwYWVjZGExZDdiMDVi
MDZjMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVEZXZpY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BV
RGV2aWNlLmgKQEAgLTQ2LDkgKzQ2LDEwIEBAIHR5cGVkZWYgdm9pZCBQbGF0Zm9ybUdQVURldmlj
ZTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBHUFVMaWJyYXJ5OworCiBjbGFzcyBH
UFVEZXZpY2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVEZXZpY2U+IHsKIHB1YmxpYzoKLQogICAg
IFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWZQdHI8R1BVRGV2aWNlPiBjcmVhdGUoKTsKICAgICBX
RUJDT1JFX0VYUE9SVCB+R1BVRGV2aWNlKCk7CiAKQEAgLTYxLDYgKzYyLDggQEAgcHVibGljOgog
CiAgICAgV2ViR1BVTGF5ZXIqIGxheWVyKCkgeyByZXR1cm4gbV9sYXllci5nZXQoKTsgfQogCisg
ICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRyPEdQVUxpYnJhcnk+IGNyZWF0ZUxpYnJhcnkoY29uc3Qg
U3RyaW5nJiBzb3VyY2VDb2RlKTsKKwogcHJpdmF0ZToKICAgICBHUFVEZXZpY2UoKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L0dQVUZ1bmN0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVGdW5jdGlvbi5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNGIwNDhlNjQ5YTRjODA3MTA3NWI2ZTcyNDBmMTM1MGYyNjFjYzEzOAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9H
UFVGdW5jdGlvbi5jcHAKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHUFVG
dW5jdGlvbi5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIkdQVUxpYnJhcnku
aCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRy
PEdQVUZ1bmN0aW9uPiBHUFVGdW5jdGlvbjo6Y3JlYXRlKEdQVUxpYnJhcnkqIGxpYnJhcnksIGNv
bnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBSZWZQdHI8R1BVRnVuY3Rpb24+IGZ1bmN0aW9uID0g
YWRvcHRSZWYobmV3IEdQVUZ1bmN0aW9uKGxpYnJhcnksIG5hbWUpKTsKKyNpZiBQTEFURk9STShD
T0NPQSkKKyAgICBpZiAoIWZ1bmN0aW9uLT5wbGF0Zm9ybUZ1bmN0aW9uKCkpCisgICAgICAgIHJl
dHVybiBudWxscHRyOworI2VuZGlmCisgICAgcmV0dXJuIGZ1bmN0aW9uOworfQorCitHUFVGdW5j
dGlvbjo6fkdQVUZ1bmN0aW9uKCkKK3sKKyAgICBMT0coV2ViR1BVLCAiR1BVRnVuY3Rpb246On5H
UFVGdW5jdGlvbigpIik7Cit9CisKKyNpZiAhUExBVEZPUk0oQ09DT0EpCitHUFVGdW5jdGlvbjo6
R1BVRnVuY3Rpb24oR1BVTGlicmFyeSogbGlicmFyeSwgY29uc3QgU3RyaW5nJiBuYW1lKQorewor
ICAgIExPRyhXZWJHUFUsICJHUFVGdW5jdGlvbjo6R1BVRnVuY3Rpb24oKSIpOworCisgICAgaWYg
KCFsaWJyYXJ5IHx8ICFsaWJyYXJ5LT5saWJyYXJ5KCkpCisgICAgICAgIHJldHVybjsKK30KKwor
U3RyaW5nIEdQVUZ1bmN0aW9uOjpuYW1lKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZW1wdHlTdHJp
bmcoKTsKK30KKyNlbmRpZgorCisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZgorCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BV
RnVuY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVGdW5j
dGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmZjZWMzMWQzYmE1OTI2MmRlYjQwNzMzMjljZGMzYzc0N2JjYmJk
OWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
cHUvR1BVRnVuY3Rpb24uaApAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCR1BV
KQorCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCisjaWYgUExBVEZPUk0oQ09DT0EpCitPQkpDX0NMQVNTIE1UTEZ1bmN0aW9uOworI2VuZGlm
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1BVTGlicmFyeTsKKworY2xhc3MgR1BV
RnVuY3Rpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxHUFVGdW5jdGlvbj4geworcHVibGljOgorICAg
IHN0YXRpYyBSZWZQdHI8R1BVRnVuY3Rpb24+IGNyZWF0ZShHUFVMaWJyYXJ5KiwgY29uc3QgU3Ry
aW5nJiBuYW1lKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+R1BVRnVuY3Rpb24oKTsKKworICAgIFdF
QkNPUkVfRVhQT1JUIFN0cmluZyBuYW1lKCkgY29uc3Q7CisKKyNpZiBQTEFURk9STShDT0NPQSkK
KyAgICBXRUJDT1JFX0VYUE9SVCBNVExGdW5jdGlvbiogcGxhdGZvcm1GdW5jdGlvbigpOworI2Vu
ZGlmCisKK3ByaXZhdGU6CisgICAgR1BVRnVuY3Rpb24oR1BVTGlicmFyeSosIGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CisKKyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBSZXRhaW5QdHI8TVRMRnVuY3Rp
b24+IG1fZnVuY3Rpb247CisjZW5kaWYKK307CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L0dQVUxpYnJhcnkuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L0dQVUxpYnJhcnkuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhODQ1Y2NkZWIxN2FhNDQ0YzlkMmNhZjM1ODlm
ZjM5MTlmODNlYzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvR1BVTGlicmFyeS5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJHUFVMaWJyYXJ5LmgiCisKKyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW1wb3J0ICJH
UFVEZXZpY2UuaCIKKyNpbXBvcnQgIkdQVUZ1bmN0aW9uLmgiCisjaW1wb3J0ICJMb2dnaW5nLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEdQVUxpYnJhcnk+IEdQVUxpYnJhcnk6
OmNyZWF0ZShHUFVEZXZpY2UqIGRldmljZSwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlKQorewor
ICAgIFJlZlB0cjxHUFVMaWJyYXJ5PiBsaWJyYXJ5ID0gYWRvcHRSZWYobmV3IEdQVUxpYnJhcnko
ZGV2aWNlLCBzb3VyY2VDb2RlKSk7CisgICAgcmV0dXJuIGxpYnJhcnk7Cit9CisKK0dQVUxpYnJh
cnk6On5HUFVMaWJyYXJ5KCkKK3sKKyAgICBMT0coV2ViR1BVLCAiR1BVTGlicmFyeTo6fkdQVUxp
YnJhcnkoKSIpOworfQorCisjaWYgIVBMQVRGT1JNKENPQ09BKQorCitTdHJpbmcgR1BVTGlicmFy
eTo6bGFiZWwoKSBjb25zdAoreworICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorCit2b2lk
IEdQVUxpYnJhcnk6OnNldExhYmVsKGNvbnN0IFN0cmluZyYpCit7Cit9CisKK1ZlY3RvcjxTdHJp
bmc+IEdQVUxpYnJhcnk6OmZ1bmN0aW9uTmFtZXMoKQoreworICAgIHJldHVybiB7IH07Cit9CisK
KyNlbmRpZgorCitSZWZQdHI8R1BVRnVuY3Rpb24+IEdQVUxpYnJhcnk6OmZ1bmN0aW9uV2l0aE5h
bWUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBHUFVGdW5jdGlvbjo6Y3JlYXRl
KHRoaXMsIG5hbWUpOworfQorICAgIAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVMaWJy
YXJ5LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BVTGlicmFyeS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc4ODg3YWQ0ZDM0YjFhNTY3YTA4YTcxOTA2YjY0ZjhmM2YxMTJkZjYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvR1BV
TGlicmFyeS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKKyNp
ZiBQTEFURk9STShDT0NPQSkKK09CSkNfQ0xBU1MgTVRMTGlicmFyeTsKKyNlbmRpZgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdQVURldmljZTsKK2NsYXNzIEdQVUZ1bmN0aW9uOwor
CitjbGFzcyBHUFVMaWJyYXJ5IDogcHVibGljIFJlZkNvdW50ZWQ8R1BVTGlicmFyeT4geworcHVi
bGljOgorICAgIHN0YXRpYyBSZWZQdHI8R1BVTGlicmFyeT4gY3JlYXRlKEdQVURldmljZSosIGNv
bnN0IFN0cmluZyYgc291cmNlQ29kZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgfkdQVUxpYnJhcnko
KTsKKworICAgIFdFQkNPUkVfRVhQT1JUIFN0cmluZyBsYWJlbCgpIGNvbnN0OworICAgIFdFQkNP
UkVfRVhQT1JUIHZvaWQgc2V0TGFiZWwoY29uc3QgU3RyaW5nJik7CisKKyAgICBXRUJDT1JFX0VY
UE9SVCBWZWN0b3I8U3RyaW5nPiBmdW5jdGlvbk5hbWVzKCk7CisKKyAgICBXRUJDT1JFX0VYUE9S
VCBSZWZQdHI8R1BVRnVuY3Rpb24+IGZ1bmN0aW9uV2l0aE5hbWUoY29uc3QgU3RyaW5nJik7CisK
KyNpZiBQTEFURk9STShDT0NPQSkKKyAgICBXRUJDT1JFX0VYUE9SVCBNVExMaWJyYXJ5KiBwbGF0
Zm9ybUxpYnJhcnkoKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEdQVUxpYnJhcnkoR1BVRGV2
aWNlKiwgY29uc3QgU3RyaW5nJiBzb3VyY2VDb2RlKTsKKyAgICAKKyNpZiBQTEFURk9STShDT0NP
QSkKKyAgICBSZXRhaW5QdHI8TVRMTGlicmFyeT4gbV9saWJyYXJ5OworI2VuZGlmCit9OworICAg
IAorfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorI2VuZGlmCmRpZmYgLS1naXQgYS9Ub29scy9DaGFu
Z2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNmQ4NDExYTgwOTU2NGMyNjMwMDIzMTZlYjg0
NTFiODkxMjQ0ZDQ2Yi4uYjE5OTIzNzU2OWVjMWI4Y2JlMmJjYTIzMzU3ZTZiZTNmYWVlMmQ4MyAx
MDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDI0IEBACisyMDE3LTAzLTA4ICBEZWFuIEphY2tzb24gIDxkaW5vQGFwcGxlLmNvbT4KKwor
ICAgICAgICBXZWJHUFU6IEJhY2tlbmQgLSBMaWJyYXJ5IGFuZCBGdW5jdGlvbnMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2OTM3MQorICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMzA5Mjg3OTI+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkIHRlc3RzIGZvciBHUFVMaWJyYXJ5IGFuZCBHUFVGdW5jdGlv
bi4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9tYWMv
R1BVRGV2aWNlLm1tOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlRFU1QpOiBEZWxldGVkLgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViQ29yZS9tYWMvR1BVRnVuY3Rpb24ubW06IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9tYWMvR1BVRGV2aWNlLm1tLgorICAgICAgICAoVGVzdFdl
YktpdEFQSTo6VEVTVF9GKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
bWFjL0dQVUxpYnJhcnkubW06IENvcGllZCBmcm9tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMv
V2ViQ29yZS9tYWMvR1BVRGV2aWNlLm1tLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVF9G
KToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvbWFjL0dQVVRlc3QuaDog
Q29waWVkIGZyb20gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL21hYy9HUFVEZXZp
Y2UubW0uCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpHUFU6OmxpYnJhcnlTb3VyY2VDb2RlKToK
KwogMjAxNy0wMy0wOCAgTWF0dCBSYWpjYSAgPG1yYWpjYUBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIHN1cHBvcnQgZm9yIHVwZGF0aW5nIGF1dG9wbGF5IHBvbGljaWVzIGFmdGVyIGEgcGFnZSBo
YXMgYmVlbiBsb2FkZWQuCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJL
aXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDU1NDBkODg3MTk3NjI3
ZDYxOTI2NjNlOWYxZmZhZGRiNDRkNDc4MjIuLjQ3NTAzMDI2MTBkN2YxNzNjY2I4Y2YxMGViMGE1
MDUyZTNkY2Q4MzUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dFdlYktpdEFQSS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05NCw2ICs5NCw4IEBACiAJ
CTJFRkYwNkQ3MUQ4QUYzNEEwMDA0QkIzMCAvKiBXS1dlYlZpZXdDYW5kaWRhdGVUZXN0cy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDJFRkYwNkQ2MUQ4
QUYzNEEwMDA0QkIzMCAvKiBXS1dlYlZpZXdDYW5kaWRhdGVUZXN0cy5tbSAqLzsgfTsKIAkJMzE1
MTE4MTAxREIxQUU0MDAwMTc2MzA0IC8qIEV4dGVuZGVkQ29sb3IuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE1MTE4MEYxREIxQURENTAwMTc2MzA0
IC8qIEV4dGVuZGVkQ29sb3IuY3BwICovOyB9OwogCQkzMTYyQUU5QzFFNkYyRkY1MDAwRTREQkMg
LyogR1BVRGV2aWNlLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMzE2MkFFOUIxRTZGMkZDRTAwMEU0REJDIC8qIEdQVURldmljZS5tbSAqLzsgfTsKKwkJ
MzE2QkRCQTExRTcwRDcxQjAwREUwRDVBIC8qIEdQVUxpYnJhcnkubW0gaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZCREJBMDFFNzBENkQ4MDBERTBENUEg
LyogR1BVTGlicmFyeS5tbSAqLzsgfTsKKwkJMzE2QkRCQTQxRTcwRUY2ODAwREUwRDVBIC8qIEdQ
VUZ1bmN0aW9uLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzE2QkRCQTMxRTcwRUY1RDAwREUwRDVBIC8qIEdQVUZ1bmN0aW9uLm1tICovOyB9OwogCQkz
M0JFNUFGOTEzN0I1QUFFMDA3MDU4MTMgLyogTW91c2VNb3ZlQWZ0ZXJDcmFzaF9CdW5kbGUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzNCRTVBRjgx
MzdCNUFBRTAwNzA1ODEzIC8qIE1vdXNlTW92ZUFmdGVyQ3Jhc2hfQnVuZGxlLmNwcCAqLzsgfTsK
IAkJMzNEQzg5MTIxNDE5NTVGRTAwNzQ3RUY3IC8qIHNpbXBsZS1pZnJhbWUuaHRtbCBpbiBDb3B5
IFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzM0RDODkwRTE0
MTk1MzkzMDA3NDdFRjcgLyogc2ltcGxlLWlmcmFtZS5odG1sICovOyB9OwogCQkzM0RDODkxNDE0
MTk1NzlGMDA3NDdFRjcgLyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVjdENhbGxiYWNrX0J1
bmRsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
M0RDODkxMzE0MTk1NzlGMDA3NDdFRjcgLyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRpcmVjdENh
bGxiYWNrX0J1bmRsZS5jcHAgKi87IH07CkBAIC05NDksNiArOTUxLDkgQEAKIAkJMkVGRjA2RDYx
RDhBRjM0QTAwMDRCQjMwIC8qIFdLV2ViVmlld0NhbmRpZGF0ZVRlc3RzLm1tICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gV0tXZWJWaWV3Q2FuZGlkYXRlVGVzdHMubW07
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNTExODBGMURCMUFERDUwMDE3NjMwNCAv
KiBFeHRlbmRlZENvbG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEV4dGVuZGVkQ29sb3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTYyQUU5
QjFFNkYyRkNFMDAwRTREQkMgLyogR1BVRGV2aWNlLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAub2JqY3BwOyBwYXRoID0gR1BVRGV2aWNlLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkzMTZCREJBMDFFNzBENkQ4MDBERTBENUEgLyogR1BVTGlicmFyeS5tbSAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEdQVUxpYnJhcnkubW07IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTMxNkJEQkEyMUU3MERFRTUwMERFMEQ1QSAvKiBHUFVUZXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdQVVRlc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzE2QkRCQTMxRTcwRUY1RDAwREUwRDVBIC8qIEdQVUZ1bmN0aW9u
Lm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gR1BVRnVuY3Rpb24u
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzM0I5Q0UxMTI3N0YyMzEwMEZFRkNF
MyAvKiBQcmV2ZW50RW1wdHlVc2VyQWdlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUHJldmVudEVtcHR5VXNlckFnZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMzNCRTVBRjQxMzdCNUE2QzAwNzA1ODEzIC8qIE1vdXNlTW92ZUFmdGVyQ3Jh
c2guY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTW91c2VNb3ZlQWZ0
ZXJDcmFzaC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMzQkU1QUY4MTM3QjVB
QUUwMDcwNTgxMyAvKiBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNb3VzZU1vdmVBZnRlckNyYXNoX0J1bmRsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNjY4LDYgKzE2NzMsOSBAQAogCQkJaXNh
ID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKIAkJCQkzMTYyQUU5QjFFNkYyRkNFMDAwRTRE
QkMgLyogR1BVRGV2aWNlLm1tICovLAorCQkJCTMxNkJEQkEzMUU3MEVGNUQwMERFMEQ1QSAvKiBH
UFVGdW5jdGlvbi5tbSAqLywKKwkJCQkzMTZCREJBMDFFNzBENkQ4MDBERTBENUEgLyogR1BVTGli
cmFyeS5tbSAqLywKKwkJCQkzMTZCREJBMjFFNzBERUU1MDBERTBENUEgLyogR1BVVGVzdC5oICov
LAogCQkJKTsKIAkJCXBhdGggPSBtYWM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAt
Mjc1NCw2ICsyNzYyLDcgQEAKIAkJCQkzN0QzNkVENzFBRjQyRUNEMDBCQUY1RDkgLyogTG9hZEFs
dGVybmF0ZUhUTUxTdHJpbmcubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VGRTFBNDExQUU2
MDA0NDdDNEMgLyogTG9hZEFsdGVybmF0ZUhUTUxTdHJpbmdXaXRoTm9uRGlyZWN0b3J5VVJMLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTVDMEJGODk0MURENTk5QzkwMEIwMDMyOCAvKiBNZW51VHlw
ZXNGb3JNb3VzZUV2ZW50cy5tbSBpbiBTb3VyY2VzICovLAorCQkJCTMxNkJEQkExMUU3MEQ3MUIw
MERFMEQ1QSAvKiBHUFVMaWJyYXJ5Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJNUMwQkY4OTMxREQ1
OTlCRDAwQjAwMzI4IC8qIElzTmF2aWdhdGlvbkFjdGlvblRydXN0ZWQubW0gaW4gU291cmNlcyAq
LywKIAkJCQk3Q0NFN0VGRjFBNDExQUU2MDA0NDdDNEMgLyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJS
ZWRpcmVjdENhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTdDODNFMEMwMUQwQTY1Mjcw
MEZFQkNGMyAvKiBMb2FkSW52YWxpZFVSTFJlcXVlc3QubW0gaW4gU291cmNlcyAqLywKQEAgLTI4
ODQsNiArMjg5Myw3IEBACiAJCQkJN0NDRTdFRDcxQTQxMUE3RTAwNDQ3QzRDIC8qIFdpbGxQZXJm
b3JtQ2xpZW50UmVkaXJlY3RUb1VSTENyYXNoLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJN0NDRTdG
MUMxQTQxMUFFNjAwNDQ3QzRDIC8qIFdpbGxTZW5kU3VibWl0RXZlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJN0NDRTdFRDgxQTQxMUE3RTAwNDQ3QzRDIC8qIFdpbGxTZW5kU3VibWl0RXZlbnQu
bW0gaW4gU291cmNlcyAqLywKKwkJCQkzMTZCREJBNDFFNzBFRjY4MDBERTBENUEgLyogR1BVRnVu
Y3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQk3Q0NFN0VEOTFBNDExQTdFMDA0NDdDNEMgLyog
V2luZG93bGVzc1dlYlZpZXdXaXRoTWVkaWEubW0gaW4gU291cmNlcyAqLywKIAkJCQkxRjgzNTcx
QjFEM0ZGQjIzMDBFMzk2N0IgLyogV0tCYWNrRm9yd2FyZExpc3QubW0gaW4gU291cmNlcyAqLywK
IAkJCQlBMTc5OTE4ODFFMUM5OTRFMDBBNTA1RUQgLyogU2hhcmVkQnVmZmVyLm1tIGluIFNvdXJj
ZXMgKi8sCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvbWFj
L0dQVURldmljZS5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9tYWMvR1BV
RGV2aWNlLm1tCmluZGV4IGExMzgxYWNhMmU3ZWViM2ViYzJkNmM3ZDMxY2ViNDdhMGJhZjJkMGIu
LjliZTIzNWMzNmY4YmUzMTA2OWI2ZGZkNWYzYTNkNDlhMzUwMmUwMTUgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9tYWMvR1BVRGV2aWNlLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9tYWMvR1BVRGV2aWNlLm1tCkBAIC0yNiw3
ICsyNiw3IEBACiAjaWZkZWYgRU5BQkxFX1dFQkdQVQogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW1wb3J0ICJUZXN0LmgiCisjaW1wb3J0ICJHUFVUZXN0LmgiCiAjaW1wb3J0IDxNZXRhbC9NZXRh
bC5oPgogI2ltcG9ydCA8V2ViQ29yZS9HUFVEZXZpY2UuaD4KIApAQCAtMzQsNyArMzQsNyBAQCB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewogCi1U
RVNUKEdQVSwgQmFzaWMpCitURVNUX0YoR1BVLCBEZXZpY2VDcmVhdGUpCiB7CiAgICAgYXV0byBk
ZXZpY2UgPSBHUFVEZXZpY2U6OmNyZWF0ZSgpOwogICAgIC8vIE5vdCBhbGwgaGFyZHdhcmUgc3Vw
cG9ydHMgTWV0YWwsIHNvIGl0IGlzIHBvc3NpYmxlCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvbWFjL0dQVUZ1bmN0aW9uLm1tIGIvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJDb3JlL21hYy9HUFVGdW5jdGlvbi5tbQpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40ZjdjMTc4
YTk3MjQ4NjJjMzc5ZmQ4YjZmNzQ4OTI3MDgzMTlhZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL21hYy9HUFVGdW5jdGlvbi5tbQpAQCAtMCww
ICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIEVOQUJMRV9XRUJHUFUKKworI2ltcG9ydCAi
Y29uZmlnLmgiCisjaW1wb3J0ICJHUFVUZXN0LmgiCisjaW1wb3J0IDxNZXRhbC9NZXRhbC5oPgor
I2ltcG9ydCA8V2ViQ29yZS9HUFVEZXZpY2UuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR1BVRnVuY3Rp
b24uaD4KKyNpbXBvcnQgPFdlYkNvcmUvR1BVTGlicmFyeS5oPgorI2ltcG9ydCA8d3RmL01haW5U
aHJlYWQuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CisKK25hbWVzcGFjZSBUZXN0V2Vi
S2l0QVBJIHsKKworVEVTVF9GKEdQVSwgRnVuY3Rpb25BY2Nlc3NCeU5hbWUpCit7CisgICAgYXV0
byBkZXZpY2UgPSBHUFVEZXZpY2U6OmNyZWF0ZSgpOworICAgIC8vIE5vdCBhbGwgaGFyZHdhcmUg
c3VwcG9ydHMgTWV0YWwsIHNvIGl0IGlzIHBvc3NpYmxlCisgICAgLy8gdGhhdCB3ZSB3ZXJlIHVu
YWJsZSB0byBjcmVhdGUgdGhlIE1UTERldmljZSBvYmplY3QuCisgICAgLy8gSW4gdGhhdCBjYXNl
LCB0aGUgZGV2aWNlIHNob3VsZCBiZSBudWxsLgorICAgIGlmICghZGV2aWNlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZDxNVExEZXZpY2U+IG10bERldmljZSA9IChpZDxNVExEZXZpY2U+KWRl
dmljZS0+cGxhdGZvcm1EZXZpY2UoKTsKKyAgICBFWFBFQ1RfTk9UX05VTEwobXRsRGV2aWNlKTsK
KworICAgIGF1dG8gbGlicmFyeSA9IGRldmljZS0+Y3JlYXRlTGlicmFyeShsaWJyYXJ5U291cmNl
Q29kZSgpKTsKKyAgICBFWFBFQ1RfTk9UX05VTEwobGlicmFyeSk7CisKKyAgICBhdXRvIHZlcnRl
eEZ1bmN0aW9uID0gbGlicmFyeS0+ZnVuY3Rpb25XaXRoTmFtZSgidmVydGV4X21haW4iKTsKKyAg
ICBFWFBFQ1RfTk9UX05VTEwodmVydGV4RnVuY3Rpb24pOworICAgIEVYUEVDVF9UUlVFKHZlcnRl
eEZ1bmN0aW9uLT5uYW1lKCkgPT0gInZlcnRleF9tYWluIik7CisKKyAgICBhdXRvIGZyYWdtZW50
RnVuY3Rpb24gPSBsaWJyYXJ5LT5mdW5jdGlvbldpdGhOYW1lKCJmcmFnbWVudF9tYWluIik7Cisg
ICAgRVhQRUNUX05PVF9OVUxMKGZyYWdtZW50RnVuY3Rpb24pOworICAgIEVYUEVDVF9UUlVFKGZy
YWdtZW50RnVuY3Rpb24tPm5hbWUoKSA9PSAiZnJhZ21lbnRfbWFpbiIpOworCisgICAgYXV0byBu
b25FeGlzdGVudEZ1bmN0aW9uID0gbGlicmFyeS0+ZnVuY3Rpb25XaXRoTmFtZSgibmFtZV90aGF0
X2lzX25vdF9pbl9saWJyYXJ5Iik7CisgICAgRVhQRUNUX05VTEwobm9uRXhpc3RlbnRGdW5jdGlv
bik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvbWFjL0dQVUxpYnJhcnkubW0g
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvbWFjL0dQVUxpYnJhcnkubW0KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uOTU0ZTg1NmU2NjE4OWE1Y2QwNTVlOTdlMjQyOTliOGE1OWZiMDRjNAotLS0gL2Rl
di9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9tYWMvR1BVTGli
cmFyeS5tbQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIEVOQUJMRV9XRUJH
UFUKKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2ltcG9ydCAiR1BVVGVzdC5oIgorI2ltcG9ydCA8
TWV0YWwvTWV0YWwuaD4KKyNpbXBvcnQgPFdlYkNvcmUvR1BVRGV2aWNlLmg+CisjaW1wb3J0IDxX
ZWJDb3JlL0dQVUxpYnJhcnkuaD4KKyNpbXBvcnQgPHd0Zi9NYWluVGhyZWFkLmg+CisKK3VzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOworCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK1RFU1Rf
RihHUFUsIExpYnJhcnlDcmVhdGUpCit7CisgICAgYXV0byBkZXZpY2UgPSBHUFVEZXZpY2U6OmNy
ZWF0ZSgpOworICAgIC8vIE5vdCBhbGwgaGFyZHdhcmUgc3VwcG9ydHMgTWV0YWwsIHNvIGl0IGlz
IHBvc3NpYmxlCisgICAgLy8gdGhhdCB3ZSB3ZXJlIHVuYWJsZSB0byBjcmVhdGUgdGhlIE1UTERl
dmljZSBvYmplY3QuCisgICAgLy8gSW4gdGhhdCBjYXNlLCB0aGUgZGV2aWNlIHNob3VsZCBiZSBu
dWxsLgorICAgIGlmICghZGV2aWNlKQorICAgICAgICByZXR1cm47CisKKyAgICBpZDxNVExEZXZp
Y2U+IG10bERldmljZSA9IChpZDxNVExEZXZpY2U+KWRldmljZS0+cGxhdGZvcm1EZXZpY2UoKTsK
KyAgICBFWFBFQ1RfTk9UX05VTEwobXRsRGV2aWNlKTsKKworICAgIGF1dG8gbGlicmFyeSA9IGRl
dmljZS0+Y3JlYXRlTGlicmFyeShsaWJyYXJ5U291cmNlQ29kZSgpKTsKKyAgICBFWFBFQ1RfTk9U
X05VTEwobGlicmFyeSk7Cit9CisKK1RFU1RfRihHUFUsIExpYnJhcnlTZXRMYWJlbCkKK3sKKyAg
ICBhdXRvIGRldmljZSA9IEdQVURldmljZTo6Y3JlYXRlKCk7CisgICAgaWYgKCFkZXZpY2UpCisg
ICAgICAgIHJldHVybjsKKworICAgIGF1dG8gbGlicmFyeSA9IGRldmljZS0+Y3JlYXRlTGlicmFy
eShsaWJyYXJ5U291cmNlQ29kZSgpKTsKKyAgICBFWFBFQ1RfTk9UX05VTEwobGlicmFyeSk7CisK
KyAgICBsaWJyYXJ5LT5zZXRMYWJlbCgiVGVzdExhYmVsIik7CisgICAgRVhQRUNUX1RSVUUobGli
cmFyeS0+bGFiZWwoKSA9PSAiVGVzdExhYmVsIik7Cit9CisKK1RFU1RfRihHUFUsIExpYnJhcnlG
dW5jdGlvbk5hbWVzKQoreworICAgIGF1dG8gZGV2aWNlID0gR1BVRGV2aWNlOjpjcmVhdGUoKTsK
KyAgICBpZiAoIWRldmljZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBsaWJyYXJ5ID0g
ZGV2aWNlLT5jcmVhdGVMaWJyYXJ5KGxpYnJhcnlTb3VyY2VDb2RlKCkpOworICAgIEVYUEVDVF9O
T1RfTlVMTChsaWJyYXJ5KTsKKworICAgIGF1dG8gZnVuY3Rpb25OYW1lcyA9IGxpYnJhcnktPmZ1
bmN0aW9uTmFtZXMoKTsKKyAgICBFWFBFQ1RfRVEoZnVuY3Rpb25OYW1lcy5zaXplKCksIHN0YXRp
Y19jYXN0PHVuc2lnbmVkIGxvbmc+KDIpKTsKKyAgICBFWFBFQ1RfVFJVRShmdW5jdGlvbk5hbWVz
WzBdID09ICJ2ZXJ0ZXhfbWFpbiIpOworICAgIEVYUEVDVF9UUlVFKGZ1bmN0aW9uTmFtZXNbMV0g
PT0gImZyYWdtZW50X21haW4iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQor
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9t
YWMvR1BVVGVzdC5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL21hYy9HUFVU
ZXN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmNkMDM4NmYwOTU4NzgyNDI1NzFkZmEyMjMzNDFiYzAxZmIxOGQy
ZAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9t
YWMvR1BVVGVzdC5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2ltcG9ydCAiVGVzdC5oIgorI2ltcG9ydCAiV1RGU3RyaW5nVXRpbGl0aWVzLmgiCisjaW1w
b3J0IDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK2Ns
YXNzIEdQVSA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsKK3B1YmxpYzoKKyAgICB2b2lkIFNldFVw
KCkgZmluYWwKKyAgICB7CisgICAgICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKKwor
ICAgICAgICBtX2xpYnJhcnlTb3VyY2VDb2RlID0gQVNDSUlMaXRlcmFsKCJ1c2luZyBuYW1lc3Bh
Y2UgbWV0YWw7XG5cCisgICAgICAgICAgICBzdHJ1Y3QgVmVydGV4XG5cCisgICAgICAgICAgICB7
XG5cCisgICAgICAgICAgICBmbG9hdDQgcG9zaXRpb24gW1twb3NpdGlvbl1dO1xuXAorICAgICAg
ICAgICAgZmxvYXQ0IGNvbG9yO1xuXAorICAgICAgICAgICAgfTtcblwKKyAgICAgICAgICAgIHZl
cnRleCBWZXJ0ZXggdmVydGV4X21haW4oZGV2aWNlIFZlcnRleCAqdmVydGljZXMgW1tidWZmZXIo
MCldXSxcblwKKyAgICAgICAgICAgIHVpbnQgdmlkIFtbdmVydGV4X2lkXV0pXG5cCisgICAgICAg
ICAgICB7XG5cCisgICAgICAgICAgICByZXR1cm4gdmVydGljZXNbdmlkXTtcblwKKyAgICAgICAg
ICAgIH1cblwKKyAgICAgICAgICAgIGZyYWdtZW50IGZsb2F0NCBmcmFnbWVudF9tYWluKFZlcnRl
eCBpblZlcnRleCBbW3N0YWdlX2luXV0pXG5cCisgICAgICAgICAgICB7XG5cCisgICAgICAgICAg
ICByZXR1cm4gaW5WZXJ0ZXguY29sb3I7XG5cCisgICAgICAgICAgICB9Iik7CisgICAgfQorCisg
ICAgY29uc3QgU3RyaW5nJiBsaWJyYXJ5U291cmNlQ29kZSgpIHsgcmV0dXJuIG1fbGlicmFyeVNv
dXJjZUNvZGU7IH0KKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9saWJyYXJ5U291cmNlQ29kZTsK
K307CisKK30K
</data>
<flag name="review"
          id="325484"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
      

    </bug>

</bugzilla>