<?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>198644</bug_id>
          
          <creation_ts>2019-06-06 22:14:17 -0700</creation_ts>
          <short_desc>[WHLSL] Hook up compute</short_desc>
          <delta_ts>2019-06-13 22:20:28 -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>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=198841</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>198163</dependson>
    
    <dependson>198837</dependson>
          <blocked>198600</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>graouts</cc>
    
    <cc>graouts</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>sroberts</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1542718</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-06 22:14:17 -0700</bug_when>
    <thetext>Hook up compute</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542726</commentid>
    <comment_count>1</comment_count>
      <attachid>371561</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-06 22:19:44 -0700</bug_when>
    <thetext>Created attachment 371561
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542728</commentid>
    <comment_count>2</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-06 22:20:49 -0700</bug_when>
    <thetext>*** Bug 198001 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542730</commentid>
    <comment_count>3</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-06 22:21:13 -0700</bug_when>
    <thetext>*** Bug 198002 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1542954</commentid>
    <comment_count>4</comment_count>
      <attachid>371612</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-07 14:48:50 -0700</bug_when>
    <thetext>Created attachment 371612
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543270</commentid>
    <comment_count>5</comment_count>
      <attachid>371612</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-10 00:17:32 -0700</bug_when>
    <thetext>Comment on attachment 371612
Patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:444
&gt; +/* native bool operator.x(bool2);

No need to comment out any of these functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543276</commentid>
    <comment_count>6</comment_count>
      <attachid>371612</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-10 01:01:46 -0700</bug_when>
    <thetext>Comment on attachment 371612
Patch

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

r=me

&gt; Source/WebCore/ChangeLog:18
&gt; +        doesn&apos;t always match WHLSL&apos;s (and HLSL&apos;s type). For example, in WHLSL and HLSL,        SV_DispatchThreadID variables have to be a float3, but in Metal, they are a uint3.

Why do they have to be float3 in WHLSL?

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:195
&gt; +        ASSERT(builtInSemantic.variable() == AST::BuiltInSemantic::Variable::SVGroupThreadID);

Nit: I like to write this out as a case, and omit the “default”. Then, when anyone adds a new enum value, this becomes a compile error

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLComputeDimensions.cpp:54
&gt; +        Visitor::visit(functionDeclaration);

Why?

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLStandardLibrary.txt:596
&gt; +native float operator.w(float4);/*

And this too?

&gt; LayoutTests/webgpu/whlsl-compute.html:9
&gt; +[numthreads(2, 1, 1)]

Out of curiosity, why do we have thread IDs in three dimensions? Is this just a useful format for a lot of shaders to avoid doing some math or something?

&gt; LayoutTests/webgpu/whlsl-compute.html:64
&gt; +    shouldBe(&quot;resultsFloat32Array[0]&quot;, &quot;2&quot;);

👌🏼</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1543921</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-06-11 19:09:50 -0700</bug_when>
    <thetext>&lt;rdar://problem/51651567&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544359</commentid>
    <comment_count>8</comment_count>
      <attachid>371612</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-12 22:48:40 -0700</bug_when>
    <thetext>Comment on attachment 371612
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:18
&gt;&gt; +        doesn&apos;t always match WHLSL&apos;s (and HLSL&apos;s type). For example, in WHLSL and HLSL,        SV_DispatchThreadID variables have to be a float3, but in Metal, they are a uint3.
&gt; 
&gt; Why do they have to be float3 in WHLSL?

For compatibility with HLSL.

&gt;&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLComputeDimensions.cpp:54
&gt;&gt; +        Visitor::visit(functionDeclaration);
&gt; 
&gt; Why?

Good catch.

&gt;&gt; LayoutTests/webgpu/whlsl-compute.html:9
&gt;&gt; +[numthreads(2, 1, 1)]
&gt; 
&gt; Out of curiosity, why do we have thread IDs in three dimensions? Is this just a useful format for a lot of shaders to avoid doing some math or something?

Yep. It&apos;s just how all the native APIs are designed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544362</commentid>
    <comment_count>9</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-12 23:07:04 -0700</bug_when>
    <thetext>Committed r246396: &lt;https://trac.webkit.org/changeset/246396&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544363</commentid>
    <comment_count>10</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2019-06-12 23:28:11 -0700</bug_when>
    <thetext>Committed r246397: &lt;https://trac.webkit.org/changeset/246397&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544364</commentid>
    <comment_count>11</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2019-06-12 23:29:17 -0700</bug_when>
    <thetext>This broke the build, as shown by the bots. I made one small fix for iOS release builds. There may be more breakage since the Mac bots are also red.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544554</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-06-13 12:04:50 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 198837</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544560</commentid>
    <comment_count>13</comment_count>
    <who name="Shawn Roberts">sroberts</who>
    <bug_when>2019-06-13 12:07:31 -0700</bug_when>
    <thetext>Rolled out in https://trac.webkit.org/changeset/246409/webkit 

Build logs were emailed to Myles</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544584</commentid>
    <comment_count>14</comment_count>
    <who name="Shawn Roberts">sroberts</who>
    <bug_when>2019-06-13 13:38:20 -0700</bug_when>
    <thetext>I skipped the test you deleted in https://bugs.webkit.org/show_bug.cgi?id=198841 so it will not crash on the High Sierra bots again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1544686</commentid>
    <comment_count>15</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-13 22:20:28 -0700</bug_when>
    <thetext>Committed r246427: &lt;https://trac.webkit.org/changeset/246427&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371561</attachid>
            <date>2019-06-06 22:19:44 -0700</date>
            <delta_ts>2019-06-07 14:48:49 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>file.txt</filename>
            <type>text/plain</type>
            <size>34223</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IDYxNjNiZTlkYzVjZGE3NmZhMmEyY2JhYWYxN2NiYmE1ZDM2NDE4ZjQKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBGcmkgSnVuIDcg
MDE6MTg6NTkgMjAxOSAtMDQwMAoKICAgIGNvbXB1dGUKCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENvbXB1dGVEaW1lbnNpb25zLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ29tcHV0ZURpbWVuc2lvbnMu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lN2RlNGM2NTMyYwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMQ29tcHV0ZURpbWVuc2lvbnMuY3BwCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xDb21wdXRlRGltZW5zaW9ucy5oIgor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMRnVuY3Rpb25EZWNsYXJhdGlv
bi5oIgorI2luY2x1ZGUgIldITFNMUHJlcGFyZS5oIgorI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5o
IgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK25h
bWVzcGFjZSBXSExTTCB7CisKK2NsYXNzIENvbXB1dGVEaW1lbnNpb25zVmlzaXRvciA6IHB1Ymxp
YyBWaXNpdG9yIHsKK3B1YmxpYzoKKyAgICBDb21wdXRlRGltZW5zaW9uc1Zpc2l0b3IoQVNUOjpG
dW5jdGlvbkRlZmluaXRpb24mIGVudHJ5UG9pbnQpCisgICAgICAgIDogbV9lbnRyeVBvaW50KGVu
dHJ5UG9pbnQpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgfkNvbXB1dGVEaW1lbnNpb25z
VmlzaXRvcigpID0gZGVmYXVsdDsKKworICAgIE9wdGlvbmFsPENvbXB1dGVEaW1lbnNpb25zPiBj
b21wdXRlRGltZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0ZURpbWVuc2lvbnM7IH0K
KworcHJpdmF0ZToKKyAgICB2b2lkIHZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYgZnVu
Y3Rpb25EZWNsYXJhdGlvbikgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIFZpc2l0b3I6OnZpc2l0
KGZ1bmN0aW9uRGVjbGFyYXRpb24pOworICAgICAgICBib29sIGZvdW5kTnVtVGhyZWFkc0Z1bmN0
aW9uQXR0cmlidXRlID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgZnVuY3Rpb25BdHRyaWJ1
dGUgOiBmdW5jdGlvbkRlY2xhcmF0aW9uLmF0dHJpYnV0ZUJsb2NrKCkpIHsKKyAgICAgICAgICAg
IGF1dG8gc3VjY2VzcyA9IFdURjo6dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpOdW1U
aHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUmIG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkgewor
ICAgICAgICAgICAgICAgIGlmIChmb3VuZE51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGZvdW5kTnVt
VGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoJmZ1
bmN0aW9uRGVjbGFyYXRpb24gPT0gJm1fZW50cnlQb2ludCkgeworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQoIW1fY29tcHV0ZURpbWVuc2lvbnMpOworICAgICAgICAgICAgICAgICAgICBtX2Nv
bXB1dGVEaW1lbnNpb25zID0ge3sgbnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLndpZHRoKCks
IG51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZS5oZWlnaHQoKSwgbnVtVGhyZWFkc0Z1bmN0aW9u
QXR0cmlidXRlLmRlcHRoKCkgfX07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICAgICAgfSksIGZ1bmN0aW9uQXR0cmlidXRlKTsKKyAgICAg
ICAgICAgIGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgQVNUOjpGdW5jdGlvbkRlZmluaXRpb24mIG1fZW50cnlQb2ludDsKKyAgICBPcHRpb25hbDxD
b21wdXRlRGltZW5zaW9ucz4gbV9jb21wdXRlRGltZW5zaW9uczsKK307CisKK09wdGlvbmFsPENv
bXB1dGVEaW1lbnNpb25zPiBjb21wdXRlRGltZW5zaW9ucyhQcm9ncmFtJiBwcm9ncmFtLCBBU1Q6
OkZ1bmN0aW9uRGVmaW5pdGlvbiYgZW50cnlQb2ludCkKK3sKKyAgICBDb21wdXRlRGltZW5zaW9u
c1Zpc2l0b3IgY29tcHV0ZURpbWVuc2lvbnMoZW50cnlQb2ludCk7CisgICAgY29tcHV0ZURpbWVu
c2lvbnMuVmlzaXRvcjo6dmlzaXQocHJvZ3JhbSk7CisgICAgaWYgKGNvbXB1dGVEaW1lbnNpb25z
LmVycm9yKCkpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgcmV0dXJuIGNvbXB1
dGVEaW1lbnNpb25zLmNvbXB1dGVEaW1lbnNpb25zKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdI
TFNMCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHUFUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENv
bXB1dGVEaW1lbnNpb25zLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTENvbXB1dGVEaW1lbnNpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLmRlNDUwODEzYTU4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDb21wdXRlRGltZW5zaW9ucy5oCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNp
bmNsdWRlICJXSExTTFByZXBhcmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCitPcHRpb25hbDxDb21wdXRlRGltZW5zaW9u
cz4gY29tcHV0ZURpbWVuc2lvbnMoUHJvZ3JhbSYsIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCmluZGV4IDU2ZmIzNjU0NmFjLi45M2UwMjJhZmFl
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cmVwYXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByZXBhcmUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiV0hMU0xBU1REdW1wZXIu
aCIKICNpbmNsdWRlICJXSExTTENoZWNrRHVwbGljYXRlRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAi
V0hMU0xDaGVja2VyLmgiCisjaW5jbHVkZSAiV0hMU0xDb21wdXRlRGltZW5zaW9ucy5oIgogI2lu
Y2x1ZGUgIldITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuaCIKICNpbmNsdWRlICJXSExTTEhpZ2ha
b21iaWVGaW5kZXIuaCIKICNpbmNsdWRlICJXSExTTExpdGVyYWxUeXBlQ2hlY2tlci5oIgpAQCAt
MTY4LDEyICsxNjksMTYgQEAgT3B0aW9uYWw8Q29tcHV0ZVByZXBhcmVSZXN1bHQ+IHByZXBhcmUo
U3RyaW5nJiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVsaW5lRGVzY3IKICAgICBhdXRvIG1hdGNo
ZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3JhbSwgY29tcHV0ZVBpcGVsaW5lRGVz
Y3JpcHRvcik7CiAgICAgaWYgKCFtYXRjaGVkU2VtYW50aWNzKQogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgIGF1dG8gY29tcHV0ZURpbWVuc2lvbnMgPSBXSExTTDo6Y29tcHV0ZURp
bWVuc2lvbnMoKnByb2dyYW0sICptYXRjaGVkU2VtYW50aWNzLT5zaGFkZXIpOworICAgIGlmICgh
Y29tcHV0ZURpbWVuc2lvbnMpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKICAgICBh
dXRvIGdlbmVyYXRlZENvZGUgPSBNZXRhbDo6Z2VuZXJhdGVNZXRhbENvZGUoKnByb2dyYW0sIFdU
Rk1vdmUoKm1hdGNoZWRTZW1hbnRpY3MpLCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yLmxheW91
dCk7CiAKICAgICBDb21wdXRlUHJlcGFyZVJlc3VsdCByZXN1bHQ7CiAgICAgcmVzdWx0Lm1ldGFs
U291cmNlID0gV1RGTW92ZShnZW5lcmF0ZWRDb2RlLm1ldGFsU291cmNlKTsKICAgICByZXN1bHQu
bWFuZ2xlZEVudHJ5UG9pbnROYW1lID0gV1RGTW92ZShnZW5lcmF0ZWRDb2RlLm1hbmdsZWRFbnRy
eVBvaW50TmFtZSk7CisgICAgcmVzdWx0LmNvbXB1dGVEaW1lbnNpb25zID0gV1RGTW92ZSgqY29t
cHV0ZURpbWVuc2lvbnMpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKaW5kZXggNWJkNmRm
MDZkYzYuLmViMjAyMWI3Y2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByZXBhcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFByZXBhcmUuaApAQCAtNDIsOSArNDIsMTYgQEAgc3RydWN0IFJlbmRl
clByZXBhcmVSZXN1bHQgewogfTsKIE9wdGlvbmFsPFJlbmRlclByZXBhcmVSZXN1bHQ+IHByZXBh
cmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJik7CiAKK3N0
cnVjdCBDb21wdXRlRGltZW5zaW9ucyB7CisgICAgdW5zaWduZWQgd2lkdGg7CisgICAgdW5zaWdu
ZWQgaGVpZ2h0OworICAgIHVuc2lnbmVkIGRlcHRoOworfTsKKwogc3RydWN0IENvbXB1dGVQcmVw
YXJlUmVzdWx0IHsKICAgICBTdHJpbmcgbWV0YWxTb3VyY2U7CiAgICAgU3RyaW5nIG1hbmdsZWRF
bnRyeVBvaW50TmFtZTsKKyAgICBDb21wdXRlRGltZW5zaW9ucyBjb21wdXRlRGltZW5zaW9uczsK
IH07CiBPcHRpb25hbDxDb21wdXRlUHJlcGFyZVJlc3VsdD4gcHJlcGFyZShTdHJpbmcmIHdobHNs
U291cmNlLCBDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXgg
YThiYmJmOWY3OTUuLjhkNTBlNjNhZDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMzA2LDYgKzMwNiw3
IEBAIE1vZHVsZXMvd2Vic29ja2V0cy9Xb3JrZXJUaHJlYWRhYmxlV2ViU29ja2V0Q2hhbm5lbC5j
cHAKIAogTW9kdWxlcy93ZWJncHUvR1BVQ2FudmFzQ29udGV4dC5jcHAKIE1vZHVsZXMvd2ViZ3B1
L05hdmlnYXRvckdQVS5jcHAKK01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ29tcHV0ZURpbWVu
c2lvbnMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5jcHAKIE1vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMSW5mZXJUeXBlcy5jcHAKIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMTGV4ZXIuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2Eu
dHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAppbmRleCBiZDI5ZTViNDhjYi4u
YjNmMzUxYTZlZDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dApAQCAtMzI2LDYgKzMyNiw3IEBA
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21tYW5kQnVmZmVyTWV0YWwubW0KIHBs
YXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGFzc0VuY29kZXJNZXRhbC5tbQog
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGluZU1ldGFsLm1tCiBw
bGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVRGV2aWNlTWV0YWwubW0KK3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9jb2NvYS9HUFVQaXBlbGluZU1ldGFsQ29udmVydExheW91dC5jcHAKIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQcm9ncmFtbWFibGVQYXNzRW5jb2Rlck1ldGFsLm1t
CiBwbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVUXVldWVNZXRhbC5tbQogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBhc3NFbmNvZGVyTWV0YWwubW0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBmODc0
OTFlYjEwOC4uZWVjZGFhNDcyYzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTYzOTIsNiArNjM5MiwxMCBAQAogCQkxQzg0MEI5
OTIxRUM0MDA4MDBEMDUwMEQgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkxQzg0MEI5QTIxRUM0MDA5MDBEMDUwMEQgLyogV0hMU0xHYXRo
ZXJFbnRyeVBvaW50SXRlbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50
SXRlbXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4NDBCOUIyMUVDNDAwOTAw
RDA1MDBEIC8qIFdITFNMQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTENoZWNr
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzg2Q0E0QjIyQUExOUZGMDAx
QkY5NjEgLyogV0hMU0xDb21wdXRlRGltZW5zaW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
SExTTENvbXB1dGVEaW1lbnNpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MUM4NkNBNEMyMkFBMTlGRjAwMUJGOTYxIC8qIFdITFNMQ29tcHV0ZURpbWVuc2lvbnMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV0hMU0xDb21wdXRlRGltZW5zaW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkxQzg2Q0E0RTIyQUEyM0M5MDAxQkY5NjEgLyogR1BVUGlwZWxpbmVNZXRhbENv
bnZlcnRMYXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR1BVUGlwZWxpbmVNZXRhbENvbnZl
cnRMYXlvdXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzg2Q0E0RjIyQUEy
M0M5MDAxQkY5NjEgLyogR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUM5MDRERjkwQkE5RDJDODAwODFFOUQwIC8qIFZlcnNpb24ueGNjb25maWcg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM5QUU1Q0EyMUVEOURGNTAwNjlENUYyIC8qIFdITFNM
SGlnaFpvbWJpZUZpbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEhpZ2hab21iaWVG
aW5kZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzlBRTVDQjIxRUQ5REY1
MDA2OUQ1RjIgLyogV0hMU0xIaWdoWm9tYmllRmluZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNM
SGlnaFpvbWJpZUZpbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU0OTIs
NiArMjU0OTYsOCBAQAogCQkJCUMyMzRBOUI1MjFFOTJDMjMwMDNDOTg0RCAvKiBXSExTTFN5bnRo
ZXNpemVTdHJ1Y3R1cmVBY2Nlc3NvcnMuaCAqLywKIAkJCQlDMjM0QTk4NTIxRTg4NkE5MDAzQzk4
NEQgLyogV0hMU0xWaXNpdG9yLmNwcCAqLywKIAkJCQlDMjM0QTk4NzIxRTg4NkFEMDAzQzk4NEQg
LyogV0hMU0xWaXNpdG9yLmggKi8sCisJCQkJMUM4NkNBNEIyMkFBMTlGRjAwMUJGOTYxIC8qIFdI
TFNMQ29tcHV0ZURpbWVuc2lvbnMuY3BwICovLAorCQkJCTFDODZDQTRDMjJBQTE5RkYwMDFCRjk2
MSAvKiBXSExTTENvbXB1dGVEaW1lbnNpb25zLmggKi8sCiAJCQkpOwogCQkJcGF0aCA9IFdITFNM
OwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTI1OTg5LDYgKzI1OTk1LDggQEAKIAkJ
CQlEMDg3Q0UzRTIxQUNBOTQyMDBCREUxNzQgLyogR1BVU3dhcENoYWluTWV0YWwubW0gKi8sCiAJ
CQkJRDA4N0NFM0YyMUFDQTk0MjAwQkRFMTc0IC8qIEdQVVRleHR1cmVNZXRhbC5tbSAqLywKIAkJ
CQlEMDZFRjU1MzIyMEJBMjZBMDAxODcyNEUgLyogR1BVVXRpbHNNZXRhbC5tbSAqLywKKwkJCQkx
Qzg2Q0E0RTIyQUEyM0M5MDAxQkY5NjEgLyogR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQu
Y3BwICovLAorCQkJCTFDODZDQTRGMjJBQTIzQzkwMDFCRjk2MSAvKiBHUFVQaXBlbGluZU1ldGFs
Q29udmVydExheW91dC5oICovLAogCQkJKTsKIAkJCXBhdGggPSBjb2NvYTsKIAkJCXNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvR1BVQ29tcHV0ZVBpcGVsaW5lLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ncHUvR1BVQ29tcHV0ZVBpcGVsaW5lLmgKaW5kZXggMDM1OWYyOWJlZDAuLjY1MzY3
YzlkOTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
R1BVQ29tcHV0ZVBpcGVsaW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L0dQVUNvbXB1dGVQaXBlbGluZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAKICNpZiBFTkFC
TEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xQcmVwYXJlLmgiCiAjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JldGFp
blB0ci5oPgpAQCAtNDgsMTAgKzQ5LDEzIEBAIHB1YmxpYzoKIAogICAgIGNvbnN0IFBsYXRmb3Jt
Q29tcHV0ZVBpcGVsaW5lKiBwbGF0Zm9ybUNvbXB1dGVQaXBlbGluZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGxhdGZvcm1Db21wdXRlUGlwZWxpbmUuZ2V0KCk7IH0KIAorICAgIFdITFNMOjpDb21wdXRl
RGltZW5zaW9ucyBjb21wdXRlRGltZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fY29tcHV0ZURp
bWVuc2lvbnM7IH0KKwogcHJpdmF0ZToKLSAgICBHUFVDb21wdXRlUGlwZWxpbmUoUGxhdGZvcm1D
b21wdXRlUGlwZWxpbmVTbWFydFB0ciYmKTsKKyAgICBHUFVDb21wdXRlUGlwZWxpbmUoUGxhdGZv
cm1Db21wdXRlUGlwZWxpbmVTbWFydFB0ciYmLCBXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnMpOwog
CiAgICAgUGxhdGZvcm1Db21wdXRlUGlwZWxpbmVTbWFydFB0ciBtX3BsYXRmb3JtQ29tcHV0ZVBp
cGVsaW5lOworICAgIFdITFNMOjpDb21wdXRlRGltZW5zaW9ucyBtX2NvbXB1dGVEaW1lbnNpb25z
IHsgMCwgMCwgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQYXNz
RW5jb2Rlck1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Nv
Y29hL0dQVUNvbXB1dGVQYXNzRW5jb2Rlck1ldGFsLm1tCmluZGV4IDcxM2MxYjc5MTA3Li42YmQy
OGY3MDE3MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2NvY29hL0dQVUNvbXB1dGVQYXNzRW5jb2Rlck1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGFzc0VuY29kZXJNZXRhbC5t
bQpAQCAtOTcsMTEgKzk3LDcgQEAgdm9pZCBHUFVDb21wdXRlUGFzc0VuY29kZXI6OmRpc3BhdGNo
KHVuc2lnbmVkIHgsIHVuc2lnbmVkIHksIHVuc2lnbmVkIHopCiAKICAgICBCRUdJTl9CTE9DS19P
QkpDX0VYQ0VQVElPTlM7CiAKLSAgICBhdXRvIHcgPSBwaXBlbGluZVN0YXRlLnRocmVhZEV4ZWN1
dGlvbldpZHRoOwotICAgIGF1dG8gaCA9IHBpcGVsaW5lU3RhdGUubWF4VG90YWxUaHJlYWRzUGVy
VGhyZWFkZ3JvdXAgLyB3OwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIGdsZWFuZWQg
ZnJvbSB0aGUgc2hhZGVyIGlmIG5vdCB1c2luZyBNU0wuIEZvciBub3csIHVzZSB0aGUgZG9jcycg
ZXhhbXBsZSBjYWxjdWxhdGlvbi4KLSAgICBhdXRvIHRocmVhZHNQZXJUaHJlYWRncm91cCA9IE1U
TFNpemVNYWtlKHcsIGgsIDEpOworICAgIGF1dG8gdGhyZWFkc1BlclRocmVhZGdyb3VwID0gTVRM
U2l6ZU1ha2UobV9waXBlbGluZS0+Y29tcHV0ZURpbWVuc2lvbnMoKS53aWR0aCwgbV9waXBlbGlu
ZS0+Y29tcHV0ZURpbWVuc2lvbnMoKS5oZWlnaHQsIG1fcGlwZWxpbmUtPmNvbXB1dGVEaW1lbnNp
b25zKCkuZGVwdGgpOwogCiAgICAgYXV0byB0aHJlYWRncm91cHNQZXJHcmlkID0gTVRMU2l6ZU1h
a2UoeCwgeSwgeik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQpp
bmRleCBmYmU0M2Y0NDFjOC4uZTgzNjhjNjNmM2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0
ZVBpcGVsaW5lTWV0YWwubW0KQEAgLTMwLDY4ICszMCwxNzQgQEAKIAogI2ltcG9ydCAiR1BVQ29t
cHV0ZVBpcGVsaW5lRGVzY3JpcHRvci5oIgogI2ltcG9ydCAiR1BVRGV2aWNlLmgiCisjaW1wb3J0
ICJHUFVQaXBlbGluZU1ldGFsQ29udmVydExheW91dC5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgor
I2ltcG9ydCAiV0hMU0xQcmVwYXJlLmgiCiAjaW1wb3J0IDxNZXRhbC9NZXRhbC5oPgogI2ltcG9y
dCA8d3RmL0Jsb2NrT2JqQ0V4Y2VwdGlvbnMuaD4KIAotT0JKQ19QUk9UT0NPTChNVExGdW5jdGlv
bik7Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIFJldGFpblB0cjxNVExGdW5jdGlv
bj4gdHJ5Q3JlYXRlTXRsQ29tcHV0ZUZ1bmN0aW9uKGNvbnN0IEdQVVBpcGVsaW5lU3RhZ2VEZXNj
cmlwdG9yJiBzdGFnZSkKK3N0YXRpYyBib29sIHRyeVNldE1ldGFsRnVuY3Rpb25zKGNvbnN0IGNo
YXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSwgTVRMTGlicmFyeSAqY29tcHV0ZU1ldGFsTGlicmFyeSwg
TVRMQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciAqbXRsRGVzY3JpcHRvciwgY29uc3QgU3RyaW5n
JiBjb21wdXRlRW50cnlQb2ludE5hbWUpCiB7Ci0gICAgaWYgKCFzdGFnZS5tb2R1bGUtPnBsYXRm
b3JtU2hhZGVyTW9kdWxlKCkgfHwgc3RhZ2UuZW50cnlQb2ludC5pc051bGwoKSkgewotICAgICAg
ICBMT0coV2ViR1BVLCAiR1BVQ29tcHV0ZVBpcGVsaW5lOjp0cnlDcmVhdGUoKTogSW52YWxpZCBH
UFVTaGFkZXJNb2R1bGUhIik7Ci0gICAgICAgIHJldHVybiBudWxscHRyOworI2lmIExPR19ESVNB
QkxFRAorICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk5hbWUpOworI2VuZGlmCisKKyAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICBpZiAoIWNvbXB1dGVNZXRhbExpYnJhcnkp
IHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBNVExMaWJyYXJ5IGZvciBjb21wdXRlIHN0YWdl
IGRvZXMgbm90IGV4aXN0ISIsIGZ1bmN0aW9uTmFtZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBhdXRvIGZ1bmN0aW9uID0gYWRvcHROUyhbY29tcHV0ZU1ldGFsTGlicmFy
eSBuZXdGdW5jdGlvbldpdGhOYW1lOmNvbXB1dGVFbnRyeVBvaW50TmFtZV0pOworICAgIGlmICgh
ZnVuY3Rpb24pIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBDYW5ub3QgY3JlYXRlIGNvbXB1
dGUgTVRMRnVuY3Rpb24gXCIlc1wiISIsIGZ1bmN0aW9uTmFtZSwgY29tcHV0ZUVudHJ5UG9pbnRO
YW1lLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogCi0gICAg
UmV0YWluUHRyPE1UTEZ1bmN0aW9uPiBmdW5jdGlvbjsKKyAgICBbbXRsRGVzY3JpcHRvciBzZXRD
b21wdXRlRnVuY3Rpb246ZnVuY3Rpb24uZ2V0KCldOworICAgIHJldHVybiB0cnVlOworCisgICAg
RU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIE9wdGlvbmFsPFdITFNMOjpDb21wdXRlRGltZW5zaW9ucz4gdHJ5U2V0RnVuY3Rpb25zKGNv
bnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSwgY29uc3QgR1BVUGlwZWxpbmVTdGFnZURlc2Ny
aXB0b3ImIGNvbXB1dGVTdGFnZSwgY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UsIE1UTENvbXB1dGVQ
aXBlbGluZURlc2NyaXB0b3IqIG10bERlc2NyaXB0b3IsIE9wdGlvbmFsPFdITFNMOjpDb21wdXRl
UGlwZWxpbmVEZXNjcmlwdG9yPiYgd2hsc2xEZXNjcmlwdG9yKQoreworI2lmIExPR19ESVNBQkxF
RAorICAgIFVOVVNFRF9QQVJBTShmdW5jdGlvbk5hbWUpOworI2VuZGlmCisgICAgUmV0YWluUHRy
PE1UTExpYnJhcnk+IGNvbXB1dGVMaWJyYXJ5OworICAgIFN0cmluZyBjb21wdXRlRW50cnlQb2lu
dDsKKworICAgIFdITFNMOjpDb21wdXRlRGltZW5zaW9ucyBjb21wdXRlRGltZW5zaW9ucyB7IDEs
IDEsIDEgfTsKKworICAgIGlmICh3aGxzbERlc2NyaXB0b3IpIHsKKyAgICAgICAgLy8gV0hMU0wg
ZnVuY3Rpb25zIGFyZSBjb21waWxlZCB0byBNU0wgZmlyc3QuCisgICAgICAgIFN0cmluZyB3aGxz
bFNvdXJjZSA9IGNvbXB1dGVTdGFnZS5tb2R1bGUtPndobHNsU291cmNlKCk7CisgICAgICAgIEFT
U0VSVCghd2hsc2xTb3VyY2UuaXNOdWxsKCkpOworCisgICAgICAgIHdobHNsRGVzY3JpcHRvci0+
ZW50cnlQb2ludE5hbWUgPSBjb21wdXRlU3RhZ2UuZW50cnlQb2ludDsKKworICAgICAgICBhdXRv
IHdobHNsQ29tcGlsZVJlc3VsdCA9IFdITFNMOjpwcmVwYXJlKHdobHNsU291cmNlLCAqd2hsc2xE
ZXNjcmlwdG9yKTsKKyAgICAgICAgaWYgKCF3aGxzbENvbXBpbGVSZXN1bHQpCisgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgICAgICBjb21wdXRlRGltZW5zaW9ucyA9IHdobHNs
Q29tcGlsZVJlc3VsdC0+Y29tcHV0ZURpbWVuc2lvbnM7CisKKyAgICAgICAgV1RGTG9nQWx3YXlz
KCJNZXRhbCBTb3VyY2U6ICVzIiwgd2hsc2xDb21waWxlUmVzdWx0LT5tZXRhbFNvdXJjZS51dGY4
KCkuZGF0YSgpKTsKKworICAgICAgICBOU0Vycm9yICplcnJvciA9IG5pbDsKKworICAgICAgICBC
RUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisgICAgICAgIGNvbXB1dGVMaWJyYXJ5ID0gYWRv
cHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkgbmV3TGlicmFyeVdpdGhTb3VyY2U6d2hsc2xD
b21waWxlUmVzdWx0LT5tZXRhbFNvdXJjZSBvcHRpb25zOm5pbCBlcnJvcjomZXJyb3JdKTsKKyAg
ICAgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgICAgICBBU1NFUlQoY29tcHV0
ZUxpYnJhcnkpOworICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE5NTc3MSBPbmNlIHdlIHplcm8tZmlsbCB2YXJpYWJsZXMsIHRoZXJlIHNo
b3VsZCBiZSBubyB3YXJuaW5ncywgc28gd2Ugc2hvdWxkIGJlIGFibGUgdG8gQVNTRVJUKCFlcnJv
cikgaGVyZS4KKworICAgICAgICBjb21wdXRlRW50cnlQb2ludCA9IHdobHNsQ29tcGlsZVJlc3Vs
dC0+bWFuZ2xlZEVudHJ5UG9pbnROYW1lOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbXB1dGVM
aWJyYXJ5ID0gY29tcHV0ZVN0YWdlLm1vZHVsZS0+cGxhdGZvcm1TaGFkZXJNb2R1bGUoKTsKKyAg
ICAgICAgY29tcHV0ZUVudHJ5UG9pbnQgPSBjb21wdXRlU3RhZ2UuZW50cnlQb2ludDsKKyAgICB9
CisKKyAgICBpZiAodHJ5U2V0TWV0YWxGdW5jdGlvbnMoZnVuY3Rpb25OYW1lLCBjb21wdXRlTGli
cmFyeS5nZXQoKSwgbXRsRGVzY3JpcHRvciwgY29tcHV0ZUVudHJ5UG9pbnQpKQorICAgICAgICBy
ZXR1cm4gY29tcHV0ZURpbWVuc2lvbnM7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKwor
c3RydWN0IENvbnZlcnRSZXN1bHQgeworICAgIFJldGFpblB0cjxNVExDb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yPiBwaXBlbGluZURlc2NyaXB0b3I7CisgICAgV0hMU0w6OkNvbXB1dGVEaW1lbnNp
b25zIGNvbXB1dGVEaW1lbnNpb25zOworfTsKK3N0YXRpYyBPcHRpb25hbDxDb252ZXJ0UmVzdWx0
PiBjb252ZXJ0Q29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcihjb25zdCBjaGFyKiBjb25zdCBmdW5j
dGlvbk5hbWUsIGNvbnN0IEdQVUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3Is
IGNvbnN0IEdQVURldmljZSYgZGV2aWNlKQoreworICAgIFJldGFpblB0cjxNVExDb21wdXRlUGlw
ZWxpbmVEZXNjcmlwdG9yPiBtdGxEZXNjcmlwdG9yOwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19F
WENFUFRJT05TOwotICAgIGZ1bmN0aW9uID0gYWRvcHROUyhbc3RhZ2UubW9kdWxlLT5wbGF0Zm9y
bVNoYWRlck1vZHVsZSgpIG5ld0Z1bmN0aW9uV2l0aE5hbWU6c3RhZ2UuZW50cnlQb2ludF0pOwor
CisgICAgbXRsRGVzY3JpcHRvciA9IGFkb3B0TlMoW01UTENvbXB1dGVQaXBlbGluZURlc2NyaXB0
b3IgbmV3XSk7CisKICAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgaWYgKCFm
dW5jdGlvbikKLSAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUNvbXB1dGVQaXBlbGluZTo6dHJ5Q3Jl
YXRlKCk6IENhbm5vdCBjcmVhdGUgY29tcHV0ZSBNVExGdW5jdGlvbiBcIiVzXCIhIiwgc3RhZ2Uu
ZW50cnlQb2ludC51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoIW10bERlc2NyaXB0b3IpIHsKKyAg
ICAgICAgTE9HKFdlYkdQVSwgIiVzOiBFcnJvciBjcmVhdGluZyBNVExEZXNjcmlwdG9yISIsIGZ1
bmN0aW9uTmFtZSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAg
Y29uc3QgYXV0byYgY29tcHV0ZVN0YWdlID0gZGVzY3JpcHRvci5jb21wdXRlU3RhZ2U7CisKKyAg
ICBib29sIGlzV2hsc2wgPSAhY29tcHV0ZVN0YWdlLm1vZHVsZS0+d2hsc2xTb3VyY2UoKS5pc051
bGwoKTsKKworICAgIE9wdGlvbmFsPFdITFNMOjpDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yPiB3
aGxzbERlc2NyaXB0b3I7CisgICAgaWYgKGlzV2hsc2wpCisgICAgICAgIHdobHNsRGVzY3JpcHRv
ciA9IFdITFNMOjpDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKCk7CisKKyAgICBpZiAoZGVzY3Jp
cHRvci5sYXlvdXQgJiYgd2hsc2xEZXNjcmlwdG9yKSB7CisgICAgICAgIGlmIChhdXRvIGxheW91
dCA9IGNvbnZlcnRMYXlvdXQoKmRlc2NyaXB0b3IubGF5b3V0KSkKKyAgICAgICAgICAgIHdobHNs
RGVzY3JpcHRvci0+bGF5b3V0ID0gV1RGTW92ZSgqbGF5b3V0KTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBMT0coV2ViR1BVLCAiJXM6IEVycm9yIGNvbnZlcnRpbmcgR1BVUGlwZWxpbmVM
YXlvdXQhIiwgZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYXV0byBjb21wdXRlRGltZW5zaW9ucyA9IHRy
eVNldEZ1bmN0aW9ucyhmdW5jdGlvbk5hbWUsIGNvbXB1dGVTdGFnZSwgZGV2aWNlLCBtdGxEZXNj
cmlwdG9yLmdldCgpLCB3aGxzbERlc2NyaXB0b3IpKQorICAgICAgICByZXR1cm4ge3sgbXRsRGVz
Y3JpcHRvciwgKmNvbXB1dGVEaW1lbnNpb25zIH19OwogCi0gICAgcmV0dXJuIGZ1bmN0aW9uOwor
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8TVRMQ29tcHV0
ZVBpcGVsaW5lU3RhdGU+IHRyeUNyZWF0ZU1UTENvbXB1dGVQaXBlbGluZVN0YXRlKGNvbnN0IEdQ
VURldmljZSYgZGV2aWNlLCBjb25zdCBHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQorc3RydWN0IENyZWF0ZVJlc3VsdCB7CisgICAgUmV0YWluUHRyPE1UTENvbXB1dGVQ
aXBlbGluZVN0YXRlPiBwaXBlbGluZVN0YXRlOworICAgIFdITFNMOjpDb21wdXRlRGltZW5zaW9u
cyBjb21wdXRlRGltZW5zaW9uczsKK307CitzdGF0aWMgT3B0aW9uYWw8Q3JlYXRlUmVzdWx0PiB0
cnlDcmVhdGVNVExDb21wdXRlUGlwZWxpbmVTdGF0ZShjb25zdCBjaGFyKiBjb25zdCBmdW5jdGlv
bk5hbWUsIGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBjb25zdCBHUFVDb21wdXRlUGlwZWxpbmVE
ZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewogICAgIGlmICghZGV2aWNlLnBsYXRmb3JtRGV2aWNl
KCkpIHsKICAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUNvbXB1dGVQaXBlbGluZTo6dHJ5Q3JlYXRl
KCk6IEludmFsaWQgR1BVRGV2aWNlISIpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICB9CiAKLSAgICBhdXRvIGNvbXB1dGVGdW5jdGlv
biA9IHRyeUNyZWF0ZU10bENvbXB1dGVGdW5jdGlvbihkZXNjcmlwdG9yLmNvbXB1dGVTdGFnZSk7
Ci0gICAgaWYgKCFjb21wdXRlRnVuY3Rpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAg
IGF1dG8gY29udmVydFJlc3VsdCA9IGNvbnZlcnRDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKGZ1
bmN0aW9uTmFtZSwgZGVzY3JpcHRvciwgZGV2aWNlKTsKKyAgICBpZiAoIWNvbnZlcnRSZXN1bHQp
CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgQVNTRVJUKGNvbnZlcnRSZXN1bHQt
PnBpcGVsaW5lRGVzY3JpcHRvcik7CisgICAgYXV0byBtdGxEZXNjcmlwdG9yID0gY29udmVydFJl
c3VsdC0+cGlwZWxpbmVEZXNjcmlwdG9yOwogCi0gICAgUmV0YWluUHRyPE1UTENvbXB1dGVQaXBl
bGluZVN0YXRlPiBwaXBlbGluZVN0YXRlOwotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAg
IFJldGFpblB0cjxNVExDb21wdXRlUGlwZWxpbmVTdGF0ZT4gcGlwZWxpbmU7CiAKICAgICBCRUdJ
Tl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7Ci0gICAgcGlwZWxpbmVTdGF0ZSA9IGFkb3B0TlMoW2Rl
dmljZS5wbGF0Zm9ybURldmljZSgpIG5ld0NvbXB1dGVQaXBlbGluZVN0YXRlV2l0aEZ1bmN0aW9u
OmNvbXB1dGVGdW5jdGlvbi5nZXQoKSBlcnJvcjomZXJyb3JdKTsKLSAgICBFTkRfQkxPQ0tfT0JK
Q19FWENFUFRJT05TOwogCi0gICAgaWYgKCFwaXBlbGluZVN0YXRlKQorICAgIE5TRXJyb3IgKmVy
cm9yID0gbmlsOworICAgIHBpcGVsaW5lID0gYWRvcHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNl
KCkgbmV3Q29tcHV0ZVBpcGVsaW5lU3RhdGVXaXRoRGVzY3JpcHRvcjptdGxEZXNjcmlwdG9yLmdl
dCgpIG9wdGlvbnM6TVRMUGlwZWxpbmVPcHRpb25Ob25lIHJlZmxlY3Rpb246bmlsIGVycm9yOiZl
cnJvcl0pOworICAgIGlmICghcGlwZWxpbmUpIHsKICAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUNv
bXB1dGVQaXBlbGluZTo6dHJ5Q3JlYXRlKCk6ICVzISIsIGVycm9yID8gZXJyb3IubG9jYWxpemVk
RGVzY3JpcHRpb24uVVRGOFN0cmluZyA6ICJVbmFibGUgdG8gY3JlYXRlIE1UTENvbXB1dGVQaXBl
bGluZVN0YXRlISIpOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KIAotICAg
IHJldHVybiBwaXBlbGluZVN0YXRlOworICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisK
KyAgICByZXR1cm4ge3sgcGlwZWxpbmUsIGNvbnZlcnRSZXN1bHQtPmNvbXB1dGVEaW1lbnNpb25z
IH19OwogfQogCiBSZWZQdHI8R1BVQ29tcHV0ZVBpcGVsaW5lPiBHUFVDb21wdXRlUGlwZWxpbmU6
OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZpY2UmIGRldmljZSwgY29uc3QgR1BVQ29tcHV0ZVBpcGVs
aW5lRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKLSAgICBhdXRvIG10bFBpcGVsaW5lID0gdHJ5
Q3JlYXRlTVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGUoZGV2aWNlLCBkZXNjcmlwdG9yKTsKLSAgICBp
ZiAoIW10bFBpcGVsaW5lKQorICAgIGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSA9ICJH
UFVSZW5kZXJQaXBlbGluZTo6Y3JlYXRlKCkiOworCisgICAgYXV0byBjcmVhdGVSZXN1bHQgPSB0
cnlDcmVhdGVNVExDb21wdXRlUGlwZWxpbmVTdGF0ZShmdW5jdGlvbk5hbWUsIGRldmljZSwgZGVz
Y3JpcHRvcik7CisgICAgaWYgKCFjcmVhdGVSZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBHUFVDb21wdXRlUGlwZWxpbmUoV1RGTW92ZSht
dGxQaXBlbGluZSkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdQVUNvbXB1dGVQaXBlbGlu
ZShXVEZNb3ZlKGNyZWF0ZVJlc3VsdC0+cGlwZWxpbmVTdGF0ZSksIGNyZWF0ZVJlc3VsdC0+Y29t
cHV0ZURpbWVuc2lvbnMpKTsKIH0KIAotR1BVQ29tcHV0ZVBpcGVsaW5lOjpHUFVDb21wdXRlUGlw
ZWxpbmUoUmV0YWluUHRyPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPiYmIHBpcGVsaW5lKQorR1BV
Q29tcHV0ZVBpcGVsaW5lOjpHUFVDb21wdXRlUGlwZWxpbmUoUmV0YWluUHRyPE1UTENvbXB1dGVQ
aXBlbGluZVN0YXRlPiYmIHBpcGVsaW5lLCBXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnMgY29tcHV0
ZURpbWVuc2lvbnMpCiAgICAgOiBtX3BsYXRmb3JtQ29tcHV0ZVBpcGVsaW5lKFdURk1vdmUocGlw
ZWxpbmUpKQorICAgICwgbV9jb21wdXRlRGltZW5zaW9ucyhjb21wdXRlRGltZW5zaW9ucykKIHsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Nv
Y29hL0dQVVBpcGVsaW5lTWV0YWxDb252ZXJ0TGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQaXBlbGluZU1ldGFsQ29udmVydExheW91dC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmJkNTc2ODhmNWJlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2Nv
Y29hL0dQVVBpcGVsaW5lTWV0YWxDb252ZXJ0TGF5b3V0LmNwcApAQCAtMCwwICsxLDk0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdQVVBpcGVsaW5lTWV0
YWxDb252ZXJ0TGF5b3V0LmgiCisKKyNpbmNsdWRlICJHUFVQaXBlbGluZUxheW91dC5oIgorCisj
aWYgRU5BQkxFKFdFQkdQVSkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgT3B0aW9u
U2V0PFdITFNMOjpTaGFkZXJTdGFnZT4gY29udmVydFNoYWRlclN0YWdlRmxhZ3MoR1BVU2hhZGVy
U3RhZ2VGbGFncyBmbGFncykKK3sKKyAgICBPcHRpb25TZXQ8V0hMU0w6OlNoYWRlclN0YWdlPiBy
ZXN1bHQ7CisgICAgaWYgKGZsYWdzICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpWZXJ0ZXgp
CisgICAgICAgIHJlc3VsdC5hZGQoV0hMU0w6OlNoYWRlclN0YWdlOjpWZXJ0ZXgpOworICAgIGlm
IChmbGFncyAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6RnJhZ21lbnQpCisgICAgICAgIHJl
c3VsdC5hZGQoV0hMU0w6OlNoYWRlclN0YWdlOjpGcmFnbWVudCk7CisgICAgaWYgKGZsYWdzICYg
R1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpDb21wdXRlKQorICAgICAgICByZXN1bHQuYWRkKFdI
TFNMOjpTaGFkZXJTdGFnZTo6Q29tcHV0ZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3Rh
dGljIE9wdGlvbmFsPFdITFNMOjpCaW5kaW5nOjpCaW5kaW5nRGV0YWlscz4gY29udmVydEJpbmRp
bmdUeXBlKEdQVUJpbmRHcm91cExheW91dDo6SW50ZXJuYWxCaW5kaW5nRGV0YWlscyBpbnRlcm5h
bEJpbmRpbmdEZXRhaWxzKQoreworICAgIHJldHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKEdQVUJpbmRHcm91cExheW91dDo6VW5pZm9ybUJ1ZmZlciB1bmlmb3JtQnVmZmVyKSAt
PiBPcHRpb25hbDxXSExTTDo6QmluZGluZzo6QmluZGluZ0RldGFpbHM+IHsKKyAgICAgICAgcmV0
dXJuIHsgV0hMU0w6OlVuaWZvcm1CdWZmZXJCaW5kaW5nIHsgdW5pZm9ybUJ1ZmZlci5pbnRlcm5h
bExlbmd0aE5hbWUgfSB9OworICAgIH0sIFsmXShHUFVCaW5kR3JvdXBMYXlvdXQ6OkR5bmFtaWNV
bmlmb3JtQnVmZmVyKSAtPiBPcHRpb25hbDxXSExTTDo6QmluZGluZzo6QmluZGluZ0RldGFpbHM+
IHsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICB9LCBbJl0oR1BVQmluZEdyb3Vw
TGF5b3V0OjpTYW1wbGVyKSAtPiBPcHRpb25hbDxXSExTTDo6QmluZGluZzo6QmluZGluZ0RldGFp
bHM+IHsKKyAgICAgICAgcmV0dXJuIHsgV0hMU0w6OlNhbXBsZXJCaW5kaW5nIHsgfSB9OworICAg
IH0sIFsmXShHUFVCaW5kR3JvdXBMYXlvdXQ6OlNhbXBsZWRUZXh0dXJlKSAtPiBPcHRpb25hbDxX
SExTTDo6QmluZGluZzo6QmluZGluZ0RldGFpbHM+IHsKKyAgICAgICAgcmV0dXJuIHsgV0hMU0w6
OlRleHR1cmVCaW5kaW5nIHsgfSB9OworICAgIH0sIFsmXShHUFVCaW5kR3JvdXBMYXlvdXQ6OlN0
b3JhZ2VCdWZmZXIgc3RvcmFnZUJ1ZmZlcikgLT4gT3B0aW9uYWw8V0hMU0w6OkJpbmRpbmc6OkJp
bmRpbmdEZXRhaWxzPiB7CisgICAgICAgIHJldHVybiB7IFdITFNMOjpTdG9yYWdlQnVmZmVyQmlu
ZGluZyB7IHN0b3JhZ2VCdWZmZXIuaW50ZXJuYWxMZW5ndGhOYW1lIH0gfTsKKyAgICB9LCBbJl0o
R1BVQmluZEdyb3VwTGF5b3V0OjpEeW5hbWljU3RvcmFnZUJ1ZmZlcikgLT4gT3B0aW9uYWw8V0hM
U0w6OkJpbmRpbmc6OkJpbmRpbmdEZXRhaWxzPiB7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7CisgICAgfSksIGludGVybmFsQmluZGluZ0RldGFpbHMpOworfQorCitPcHRpb25hbDxXSExT
TDo6TGF5b3V0PiBjb252ZXJ0TGF5b3V0KGNvbnN0IEdQVVBpcGVsaW5lTGF5b3V0JiBsYXlvdXQp
Cit7CisgICAgV0hMU0w6OkxheW91dCByZXN1bHQ7CisgICAgaWYgKGxheW91dC5iaW5kR3JvdXBM
YXlvdXRzKCkuc2l6ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQor
ICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bGF5b3V0LmJpbmRHcm91cExheW91dHMoKS5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBh
dXRvJiBiaW5kR3JvdXBMYXlvdXQgPSBsYXlvdXQuYmluZEdyb3VwTGF5b3V0cygpW2ldOworICAg
ICAgICBXSExTTDo6QmluZEdyb3VwIGJpbmRHcm91cDsKKyAgICAgICAgYmluZEdyb3VwLm5hbWUg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSk7CisgICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5
VmFsdWVQYWlyIDogYmluZEdyb3VwTGF5b3V0LT5iaW5kaW5nc01hcCgpKSB7CisgICAgICAgICAg
ICBjb25zdCBhdXRvJiBiaW5kaW5nRGV0YWlscyA9IGtleVZhbHVlUGFpci52YWx1ZTsKKyAgICAg
ICAgICAgIFdITFNMOjpCaW5kaW5nIGJpbmRpbmc7CisgICAgICAgICAgICBiaW5kaW5nLnZpc2li
aWxpdHkgPSBjb252ZXJ0U2hhZGVyU3RhZ2VGbGFncyhiaW5kaW5nRGV0YWlscy5leHRlcm5hbEJp
bmRpbmcudmlzaWJpbGl0eSk7CisgICAgICAgICAgICBpZiAoYXV0byBiaW5kaW5nVHlwZSA9IGNv
bnZlcnRCaW5kaW5nVHlwZShiaW5kaW5nRGV0YWlscy5pbnRlcm5hbEJpbmRpbmdEZXRhaWxzKSkK
KyAgICAgICAgICAgICAgICBiaW5kaW5nLmJpbmRpbmcgPSAqYmluZGluZ1R5cGU7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAg
ICAgIGlmIChiaW5kaW5nRGV0YWlscy5leHRlcm5hbEJpbmRpbmcuYmluZGluZyA+IHN0ZDo6bnVt
ZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OworICAgICAgICAgICAgYmluZGluZy5leHRlcm5hbE5hbWUgPSBiaW5kaW5nRGV0
YWlscy5leHRlcm5hbEJpbmRpbmcuYmluZGluZzsKKyAgICAgICAgICAgIGJpbmRpbmcuaW50ZXJu
YWxOYW1lID0gYmluZGluZ0RldGFpbHMuaW50ZXJuYWxOYW1lOworICAgICAgICAgICAgYmluZEdy
b3VwLmJpbmRpbmdzLmFwcGVuZChXVEZNb3ZlKGJpbmRpbmcpKTsKKyAgICAgICAgfQorICAgICAg
ICByZXN1bHQuYXBwZW5kKFdURk1vdmUoYmluZEdyb3VwKSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJHUFUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUv
Y29jb2EvR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQaXBlbGluZU1ldGFsQ29udmVydExheW91dC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ZTI5ZDkzYWYwMgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2Nv
YS9HUFVQaXBlbGluZU1ldGFsQ29udmVydExheW91dC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNpbmNsdWRlICJX
SExTTFBpcGVsaW5lRGVzY3JpcHRvci5oIgorI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdQVVBpcGVsaW5lTGF5b3V0OworCitPcHRpb25h
bDxXSExTTDo6TGF5b3V0PiBjb252ZXJ0TGF5b3V0KGNvbnN0IEdQVVBpcGVsaW5lTGF5b3V0Jik7
CisKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvY29jb2EvR1BVUmVuZGVyUGlwZWxpbmVNZXRhbC5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tCmlu
ZGV4IDRhOWVlYmJlMTMwLi41NzY4ZDA3ZTc4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBp
cGVsaW5lTWV0YWwubW0KQEAgLTMwLDYgKzMwLDcgQEAKIAogI2ltcG9ydCAiR1BVRGV2aWNlLmgi
CiAjaW1wb3J0ICJHUFVMaW1pdHMuaCIKKyNpbXBvcnQgIkdQVVBpcGVsaW5lTWV0YWxDb252ZXJ0
TGF5b3V0LmgiCiAjaW1wb3J0ICJHUFVVdGlscy5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2lt
cG9ydCAiV0hMU0xQcmVwYXJlLmgiCkBAIC05OCwzNSArOTksNiBAQCBzdGF0aWMgV0hMU0w6OlZl
cnRleEZvcm1hdCBjb252ZXJ0VmVydGV4Rm9ybWF0KEdQVVZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3Jt
YXQpCiAgICAgfQogfQogCi1zdGF0aWMgT3B0aW9uU2V0PFdITFNMOjpTaGFkZXJTdGFnZT4gY29u
dmVydFNoYWRlclN0YWdlRmxhZ3MoR1BVU2hhZGVyU3RhZ2VGbGFncyBmbGFncykKLXsKLSAgICBP
cHRpb25TZXQ8V0hMU0w6OlNoYWRlclN0YWdlPiByZXN1bHQ7Ci0gICAgaWYgKGZsYWdzICYgR1BV
U2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpWZXJ0ZXgpCi0gICAgICAgIHJlc3VsdC5hZGQoV0hMU0w6
OlNoYWRlclN0YWdlOjpWZXJ0ZXgpOwotICAgIGlmIChmbGFncyAmIEdQVVNoYWRlclN0YWdlQml0
OjpGbGFnczo6RnJhZ21lbnQpCi0gICAgICAgIHJlc3VsdC5hZGQoV0hMU0w6OlNoYWRlclN0YWdl
OjpGcmFnbWVudCk7Ci0gICAgaWYgKGZsYWdzICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpD
b21wdXRlKQotICAgICAgICByZXN1bHQuYWRkKFdITFNMOjpTaGFkZXJTdGFnZTo6Q29tcHV0ZSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIE9wdGlvbmFsPFdITFNMOjpCaW5kaW5n
OjpCaW5kaW5nRGV0YWlscz4gY29udmVydEJpbmRpbmdUeXBlKEdQVUJpbmRHcm91cExheW91dDo6
SW50ZXJuYWxCaW5kaW5nRGV0YWlscyBpbnRlcm5hbEJpbmRpbmdEZXRhaWxzKQotewotICAgIHJl
dHVybiBXVEY6OnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEdQVUJpbmRHcm91cExheW91dDo6
VW5pZm9ybUJ1ZmZlciB1bmlmb3JtQnVmZmVyKSAtPiBPcHRpb25hbDxXSExTTDo6QmluZGluZzo6
QmluZGluZ0RldGFpbHM+IHsKLSAgICAgICAgcmV0dXJuIHsgV0hMU0w6OlVuaWZvcm1CdWZmZXJC
aW5kaW5nIHsgdW5pZm9ybUJ1ZmZlci5pbnRlcm5hbExlbmd0aE5hbWUgfSB9OwotICAgIH0sIFsm
XShHUFVCaW5kR3JvdXBMYXlvdXQ6OkR5bmFtaWNVbmlmb3JtQnVmZmVyKSAtPiBPcHRpb25hbDxX
SExTTDo6QmluZGluZzo6QmluZGluZ0RldGFpbHM+IHsKLSAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKLSAgICB9LCBbJl0oR1BVQmluZEdyb3VwTGF5b3V0OjpTYW1wbGVyKSAtPiBPcHRpb25h
bDxXSExTTDo6QmluZGluZzo6QmluZGluZ0RldGFpbHM+IHsKLSAgICAgICAgcmV0dXJuIHsgV0hM
U0w6OlNhbXBsZXJCaW5kaW5nIHsgfSB9OwotICAgIH0sIFsmXShHUFVCaW5kR3JvdXBMYXlvdXQ6
OlNhbXBsZWRUZXh0dXJlKSAtPiBPcHRpb25hbDxXSExTTDo6QmluZGluZzo6QmluZGluZ0RldGFp
bHM+IHsKLSAgICAgICAgcmV0dXJuIHsgV0hMU0w6OlRleHR1cmVCaW5kaW5nIHsgfSB9OwotICAg
IH0sIFsmXShHUFVCaW5kR3JvdXBMYXlvdXQ6OlN0b3JhZ2VCdWZmZXIgc3RvcmFnZUJ1ZmZlcikg
LT4gT3B0aW9uYWw8V0hMU0w6OkJpbmRpbmc6OkJpbmRpbmdEZXRhaWxzPiB7Ci0gICAgICAgIHJl
dHVybiB7IFdITFNMOjpTdG9yYWdlQnVmZmVyQmluZGluZyB7IHN0b3JhZ2VCdWZmZXIuaW50ZXJu
YWxMZW5ndGhOYW1lIH0gfTsKLSAgICB9LCBbJl0oR1BVQmluZEdyb3VwTGF5b3V0OjpEeW5hbWlj
U3RvcmFnZUJ1ZmZlcikgLT4gT3B0aW9uYWw8V0hMU0w6OkJpbmRpbmc6OkJpbmRpbmdEZXRhaWxz
PiB7Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfSksIGludGVybmFsQmluZGlu
Z0RldGFpbHMpOwotfQotCiBzdGF0aWMgT3B0aW9uYWw8V0hMU0w6OlRleHR1cmVGb3JtYXQ+IGNv
bnZlcnRUZXh0dXJlRm9ybWF0KEdQVVRleHR1cmVGb3JtYXQgZm9ybWF0KQogewogICAgIHN3aXRj
aCAoZm9ybWF0KSB7CkBAIC0zNjgsMzQgKzM0MCw2IEBAIHN0YXRpYyBib29sIHRyeVNldENvbG9y
U3RhdGVzKGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSwgY29uc3QgVmVjdG9yPEdQVUNv
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBPcHRpb25hbDxXSExTTDo6TGF5b3V0PiBj
b252ZXJ0TGF5b3V0KGNvbnN0IEdQVVBpcGVsaW5lTGF5b3V0JiBsYXlvdXQpCi17Ci0gICAgV0hM
U0w6OkxheW91dCByZXN1bHQ7Ci0gICAgaWYgKGxheW91dC5iaW5kR3JvdXBMYXlvdXRzKCkuc2l6
ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICAgICByZXR1
cm4gV1RGOjpudWxsb3B0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbGF5b3V0LmJpbmRH
cm91cExheW91dHMoKS5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBhdXRvJiBiaW5kR3Jv
dXBMYXlvdXQgPSBsYXlvdXQuYmluZEdyb3VwTGF5b3V0cygpW2ldOwotICAgICAgICBXSExTTDo6
QmluZEdyb3VwIGJpbmRHcm91cDsKLSAgICAgICAgYmluZEdyb3VwLm5hbWUgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oaSk7Ci0gICAgICAgIGZvciAoY29uc3QgYXV0byYga2V5VmFsdWVQYWlyIDog
YmluZEdyb3VwTGF5b3V0LT5iaW5kaW5nc01hcCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRv
JiBiaW5kaW5nRGV0YWlscyA9IGtleVZhbHVlUGFpci52YWx1ZTsKLSAgICAgICAgICAgIFdITFNM
OjpCaW5kaW5nIGJpbmRpbmc7Ci0gICAgICAgICAgICBiaW5kaW5nLnZpc2liaWxpdHkgPSBjb252
ZXJ0U2hhZGVyU3RhZ2VGbGFncyhiaW5kaW5nRGV0YWlscy5leHRlcm5hbEJpbmRpbmcudmlzaWJp
bGl0eSk7Ci0gICAgICAgICAgICBpZiAoYXV0byBiaW5kaW5nVHlwZSA9IGNvbnZlcnRCaW5kaW5n
VHlwZShiaW5kaW5nRGV0YWlscy5pbnRlcm5hbEJpbmRpbmdEZXRhaWxzKSkKLSAgICAgICAgICAg
ICAgICBiaW5kaW5nLmJpbmRpbmcgPSAqYmluZGluZ1R5cGU7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIGlmIChiaW5k
aW5nRGV0YWlscy5leHRlcm5hbEJpbmRpbmcuYmluZGluZyA+IHN0ZDo6bnVtZXJpY19saW1pdHM8
dW5zaWduZWQ+OjptYXgoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owot
ICAgICAgICAgICAgYmluZGluZy5leHRlcm5hbE5hbWUgPSBiaW5kaW5nRGV0YWlscy5leHRlcm5h
bEJpbmRpbmcuYmluZGluZzsKLSAgICAgICAgICAgIGJpbmRpbmcuaW50ZXJuYWxOYW1lID0gYmlu
ZGluZ0RldGFpbHMuaW50ZXJuYWxOYW1lOwotICAgICAgICAgICAgYmluZEdyb3VwLmJpbmRpbmdz
LmFwcGVuZChXVEZNb3ZlKGJpbmRpbmcpKTsKLSAgICAgICAgfQotICAgICAgICByZXN1bHQuYXBw
ZW5kKFdURk1vdmUoYmluZEdyb3VwKSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
IHN0YXRpYyBib29sIHRyeVNldE1ldGFsRnVuY3Rpb25zKGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0
aW9uTmFtZSwgTVRMTGlicmFyeSAqdmVydGV4TWV0YWxMaWJyYXJ5LCBNVExMaWJyYXJ5ICpmcmFn
bWVudE1ldGFsTGlicmFyeSwgTVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yICptdGxEZXNjcmlw
dG9yLCBjb25zdCBTdHJpbmcmIHZlcnRleEVudHJ5UG9pbnROYW1lLCBjb25zdCBTdHJpbmcmIGZy
YWdtZW50RW50cnlQb2ludE5hbWUpCiB7CiAjaWYgTE9HX0RJU0FCTEVECkBAIC01NDIsNiArNDg2
LDExIEBAIHN0YXRpYyBSZXRhaW5QdHI8TVRMUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yPiBjb252
ZXJ0UmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yKGNvCiAKIHN0YXRpYyBSZXRhaW5QdHI8TVRMUmVu
ZGVyUGlwZWxpbmVTdGF0ZT4gdHJ5Q3JlYXRlTXRsUmVuZGVyUGlwZWxpbmVTdGF0ZShjb25zdCBj
aGFyKiBjb25zdCBmdW5jdGlvbk5hbWUsIGNvbnN0IEdQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRv
ciYgZGVzY3JpcHRvciwgY29uc3QgR1BVRGV2aWNlJiBkZXZpY2UpCiB7CisgICAgaWYgKCFkZXZp
Y2UucGxhdGZvcm1EZXZpY2UoKSkgeworICAgICAgICBMT0coV2ViR1BVLCAiR1BVQ29tcHV0ZVBp
cGVsaW5lOjp0cnlDcmVhdGUoKTogSW52YWxpZCBHUFVEZXZpY2UhIik7CisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIH0KKwogICAgIGF1dG8gbXRsRGVzY3JpcHRvciA9IGNvbnZlcnRSZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3IoZnVuY3Rpb25OYW1lLCBkZXNjcmlwdG9yLCBkZXZpY2UpOwog
ICAgIGlmICghbXRsRGVzY3JpcHRvcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC01NTAs
NyArNDk5LDcgQEAgc3RhdGljIFJldGFpblB0cjxNVExSZW5kZXJQaXBlbGluZVN0YXRlPiB0cnlD
cmVhdGVNdGxSZW5kZXJQaXBlbGluZVN0YXRlKGNvbnN0IGMKIAogICAgIEJFR0lOX0JMT0NLX09C
SkNfRVhDRVBUSU9OUzsKIAotICAgIE5TRXJyb3IgKmVycm9yID0gW05TRXJyb3IgZXJyb3JXaXRo
RG9tYWluOkAiY29tLmFwcGxlLldlYktpdC5HUFUiIGNvZGU6MSB1c2VySW5mbzpuaWxdOworICAg
IE5TRXJyb3IgKmVycm9yID0gbmlsOwogICAgIHBpcGVsaW5lID0gYWRvcHROUyhbZGV2aWNlLnBs
YXRmb3JtRGV2aWNlKCkgbmV3UmVuZGVyUGlwZWxpbmVTdGF0ZVdpdGhEZXNjcmlwdG9yOm10bERl
c2NyaXB0b3IuZ2V0KCkgZXJyb3I6JmVycm9yXSk7CiAgICAgaWYgKCFwaXBlbGluZSkKICAgICAg
ICAgTE9HKFdlYkdQVSwgIiVzOiAlcyEiLCBmdW5jdGlvbk5hbWUsIGVycm9yLmxvY2FsaXplZERl
c2NyaXB0aW9uLlVURjhTdHJpbmcpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>371612</attachid>
            <date>2019-06-07 14:48:50 -0700</date>
            <delta_ts>2019-06-10 01:01:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-198644-20190607174849.patch</filename>
            <type>text/plain</type>
            <size>64816</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ2MTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNWM3NjQyMjEzOGY5MDc2
OTJmZmViNzJiY2I4YTNhZjU1ZjA4NDYzZS4uNGU4ZGI4NGVlNDU0YzZiNWFlYjZlOTY1MWU3ZTgw
YWM4NWU3OTE5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDg3IEBACisyMDE5LTA2LTA3ICBNeWxl
cyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBI
b29rIHVwIGNvbXB1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5ODY0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggaG9va3MgdXAgY29tcHV0ZSBzaGFkZXJzIGluIGV4YWN0bHkgdGhl
IHNhbWUgd2F5IHRoYXQgdmVydGV4IGFuZCBmcmFnbWVudCBzaGFkZXJzCisgICAgICAgIGFyZSBo
b29rZWQgdXAuIEkndmUgbW9kaWZpZWQgdGhlIHR3byBwYXRjaHMgKGNvbXB1dGUgYW5kIHJlbmRl
cmluZykgdG8gYmUgYWxtb3N0IGV4YWN0bHkgdGhlCisgICAgICAgIHNhbWUgY29kZS4KKworICAg
ICAgICBUaGlzIHBhdGNoIGFsc28gYWRkcyBzdXBwb3J0IGZvciB0aGUgV0hMU0wgY29tcGlsZXIg
dG8gZGV0ZXJtaW5lIHdoYXQgdGhlIG51bXRocmVhZHMoKQorICAgICAgICBhdHRyaWJ1dGUgaW4g
dGhlIHNoYWRlciBzYXlzIHNvIHRoYXQgaXQgY2FuIGJlIGhvb2tlZCB1cCB0byBNZXRhbCdzIHRo
cmVhZHMtcGVyLXRocmVhZGdyb3VwCisgICAgICAgIGFyZ3VtZW50IGluIHRoZSBkaXNwYXRjaCBj
YWxsLiBUaGVyZSBpcyBzb21lIGxvZ2ljIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZXJlIGFyZW4ndCB0
d28KKyAgICAgICAgbnVtdGhyZWFkcygpIGF0dHJpYnV0ZXMgb24gdGhlIHNhbWUgY29tcHV0ZSBz
aGFkZXIuCisKKyAgICAgICAgSXQgYWxzbyBhZGRzIGEgbGl0dGxlIGJpdCBvZiB0eXBlIHJlbmFt
aW5nLiBGb3IgYnVpbHQtaW4gdmFyaWFibGVzLCBzb21ldGltZXMgTWV0YWwncyB0eXBlCisgICAg
ICAgIGRvZXNuJ3QgYWx3YXlzIG1hdGNoIFdITFNMJ3MgKGFuZCBITFNMJ3MgdHlwZSkuIEZvciBl
eGFtcGxlLCBpbiBXSExTTCBhbmQgSExTTCwgICAgICAgIFNWX0Rpc3BhdGNoVGhyZWFkSUQgdmFy
aWFibGVzIGhhdmUgdG8gYmUgYSBmbG9hdDMsIGJ1dCBpbiBNZXRhbCwgdGhleSBhcmUgYSB1aW50
My4KKyAgICAgICAgVGhlcmVmb3JlLCBJJ3ZlIGFkZGVkIGEgbGl0dGxlIGJpdCBvZiBjb2RlIGR1
cmluZyBlYWNoIGVudHJ5IHBvaW50J3MgcGFjayBhbmQgdW5wYWNrIHN0YWdlcworICAgICAgICB0
byBoYW5kbGUgdGhpcyB0eXBlIGNvbnZlcnNpb24uCisKKyAgICAgICAgVGVzdDogd2ViZ3B1L3do
bHNsLWNvbXB1dGUuaHRtbAorCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwv
V0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6
Ok1ldGFsOjppbnRlcm5hbFR5cGVGb3JTZW1hbnRpYyk6IERldGVybWluZSB3aGljaCBNZXRhbCB0
eXBlIGNvcnJlc3BvbmRzIHRvCisgICAgICAgIGVhY2ggYnVpbHQtaW4gdmFyaWFibGUuCisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6YnVpbHRJ
bnNTaWduYXR1cmUpOiBQZXJmb3JtIHRoZSB0eXBlCisgICAgICAgIGNvbnZlcnNpb24uCisgICAg
ICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNr
UmVzb3VyY2VzQW5kTmFtZWRCdWlsdElucyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V0hM
U0w6Ok1ldGFsOjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OlZlcnRleEVudHJ5UG9pbnRT
Y2FmZm9sZGluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpWZXJ0
ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmc6OmhlbHBlclR5cGVzKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OlZlcnRleEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6cGFjayk6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGcmFnbWVudEVudHJ5UG9p
bnRTY2FmZm9sZGluZzo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmcpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRp
bmc6OmhlbHBlclR5cGVzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OkZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6TWV0YWw6OkNvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZ25h
dHVyZSk6IERpdHRvLgorICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
RW50cnlQb2ludFNjYWZmb2xkaW5nLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xDb21wdXRlRGltZW5zaW9ucy5jcHA6IEFkZGVkLiBBZGQgYSBwYXNzIHRvIGRldGVybWlu
ZSB3aGV0aGVyCisgICAgICAgIG9yIG5vdCBhbnkgZW50cnkgcG9pbnQgaGFzIGR1cGxpY2F0ZSBu
dW10aHJlYWRzKCkgYXR0cmlidXRlLCBhbmQgdG8gZGV0ZXJtaW5lIHdoYXQgdGhlCisgICAgICAg
IGFwcHJvcHJpYXRlIG51bXRocmVhZHMoKSB2YWx1ZXMgc2hvdWxkIGJlIGZvciB0aGUgY3VycmVu
dCBlbnRyeSBwb2ludC4KKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpDb21wdXRlRGltZW5zaW9u
c1Zpc2l0b3I6OkNvbXB1dGVEaW1lbnNpb25zVmlzaXRvcik6CisgICAgICAgIChXZWJDb3JlOjpX
SExTTDo6Q29tcHV0ZURpbWVuc2lvbnNWaXNpdG9yOjpjb21wdXRlRGltZW5zaW9ucyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6Y29tcHV0ZURpbWVuc2lvbnMpOgorICAgICAgICAq
IE1vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ29tcHV0ZURpbWVuc2lvbnMuaDogQ29waWVkIGZy
b20gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmguCisg
ICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OmdhdGhlckVudHJ5UG9pbnRJdGVtcyk6IENv
bXB1dGUgc2hhZGVycyBkb24ndCBuZWVkIHRvIGhhdmUgYSBzZW1hbnRpYyBmb3IgdGhlaXIgcmV0
dXJuIHR5cGUuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpwcmVwYXJlKTogUnVuIHRoZSBjb21wdXRlRGlt
ZW5zaW9ucygpIHBhc3MuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVw
YXJlLmg6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcm9wZXJ0eVJlc29s
dmVyLmNwcDogSW4gYSBsZWZ0LXZhbHVlIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbiwKKyAgICAg
ICAgdGhlIGluZGV4IGV4cHJlc3Npb24gY2FuIGJlIGEgcmlnaHQtdmFsdWUuIFRyZWF0IGl0IGFz
IHN1Y2guCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TGVmdFZhbHVlU2ltcGxpZmllcjo6Zmlu
aXNoVmlzaXRpbmcpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OkxlZnRWYWx1ZVNpbXBsaWZp
ZXI6OnZpc2l0KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJk
TGlicmFyeS50eHQ6IFdlIG5lZWQgc3VwcG9ydCBmb3IgbXVsdGlwbGljYXRpb24gKGZvciBhCisg
ICAgICAgIHRlc3QpIGFuZCBmbG9hdDMgZm9yIFNWX0Rpc3BhdGNoVGhyZWFkSUQuCisgICAgICAg
ICogU291cmNlcy50eHQ6CisgICAgICAgICogU291cmNlc0NvY29hLnR4dDoKKyAgICAgICAgKiBX
ZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L0dQVUNvbXB1dGVQaXBlbGluZS5oOiBBc3NvY2lhdGUgYSBjb21wdXRlIGRpbWVu
c2lvbnMgd2l0aCBhIHBhcnRpY3VsYXIKKyAgICAgICAgY29tcHV0ZSBwaXBlbGluZS4gVGhpcyBp
cyBob3cgTWV0YWwga25vd3Mgd2hhdCB2YWx1ZXMgdG8gdXNlIGZvciBhIGRpc3BhdGNoLgorICAg
ICAgICAoV2ViQ29yZTo6R1BVQ29tcHV0ZVBpcGVsaW5lOjpjb21wdXRlRGltZW5zaW9ucyBjb25z
dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQYXNz
RW5jb2Rlck1ldGFsLm1tOiBVc2UgdGhlIHNhdmVkIGNvbXB1dGUgZGltZW5zaW9ucy4KKyAgICAg
ICAgKFdlYkNvcmU6OkdQVUNvbXB1dGVQYXNzRW5jb2Rlcjo6ZGlzcGF0Y2gpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbTog
TWFrZSB0aGUgY29kZSBtYXRjaCBHUFVSZW5kZXJQaXBlbGluZU1ldGFsLgorICAgICAgICAoV2Vi
Q29yZTo6dHJ5U2V0TWV0YWxGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6dHJ5U2V0RnVu
Y3Rpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRDb21wdXRlUGlwZWxpbmVEZXNjcmlw
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRyeUNyZWF0ZU1UTENvbXB1dGVQaXBlbGluZVN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdQVUNvbXB1dGVQaXBlbGluZTo6dHJ5Q3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdQVUNvbXB1dGVQaXBlbGluZTo6R1BVQ29tcHV0ZVBpcGVsaW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OnRyeUNyZWF0ZU10bENvbXB1dGVGdW5jdGlvbik6IERlbGV0ZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVBpcGVsaW5lTWV0YWxD
b252ZXJ0TGF5b3V0LmNwcDogQWRkZWQuIE1vdmVkIHNoYXJlZCBoZWxwZXIKKyAgICAgICAgZnVu
Y3Rpb25zIHRvIGEgZmlsZSB3aGVyZSB0aGV5IGNhbiBiZSBhY2Nlc3NlZCBieSBtdWx0aXBsZSBw
bGFjZXMuCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0U2hhZGVyU3RhZ2VGbGFncyk6CisgICAg
ICAgIChXZWJDb3JlOjpjb252ZXJ0QmluZGluZ1R5cGUpOgorICAgICAgICAoV2ViQ29yZTo6Y29u
dmVydExheW91dCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVBp
cGVsaW5lTWV0YWxDb252ZXJ0TGF5b3V0Lmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5oLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5kZXJQaXBlbGluZU1ldGFsLm1tOiBEZWxldGUgdGhlIGZ1
bmN0aW9ucyB0aGF0IHdlcmUgbW92ZWQgdG8gR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQu
CisgICAgICAgIChXZWJDb3JlOjp0cnlTZXRGdW5jdGlvbnMpOgorICAgICAgICAoV2ViQ29yZTo6
dHJ5Q3JlYXRlTXRsUmVuZGVyUGlwZWxpbmVTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpjb252
ZXJ0U2hhZGVyU3RhZ2VGbGFncyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0
QmluZGluZ1R5cGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydExheW91dCk6
IERlbGV0ZWQuCisKIDIwMTktMDYtMDYgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29t
PgogCiAgICAgICAgIEFsbG93IFdlYktpdFRlc3RSdW5uZXIgdG8gdGVybWluYXRlIG5ldHdvcmsg
cHJvY2VzcyBhZnRlciBpdCBmaW5pc2hlcyBzZXJ2aWNlIHdvcmtlciBmaWxlIG9wZXJhdGlvbnMK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xkaW5nLmNwcAppbmRleCAyMTk3
NGViODdkNjUyYWI0NTNhZGVlNGMyMGRiY2QxYWMxNGM2ODcwLi4wZWE4OTNiM2ZmYTZkZmJmOGIy
ZGI2NzhiNWI3ZmZkYWZlNDg4M2U2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50
U2NhZmZvbGRpbmcuY3BwCkBAIC0xNjIsNiArMTYyLDQxIEBAIE9wdGlvbmFsPFN0cmluZz4gRW50
cnlQb2ludFNjYWZmb2xkaW5nOjpyZXNvdXJjZVNpZ25hdHVyZSgpCiAgICAgcmV0dXJuIHN0cmlu
Z0J1aWxkZXIudG9TdHJpbmcoKTsKIH0KIAorc3RhdGljIFN0cmluZyBpbnRlcm5hbFR5cGVGb3JT
ZW1hbnRpYyhjb25zdCBBU1Q6OkJ1aWx0SW5TZW1hbnRpYyYgYnVpbHRJblNlbWFudGljKQorewor
ICAgIHN3aXRjaCAoYnVpbHRJblNlbWFudGljLnZhcmlhYmxlKCkpIHsKKyAgICBjYXNlIEFTVDo6
QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZJbnN0YW5jZUlEOgorICAgICAgICByZXR1cm4g
InVpbnQiX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZW
ZXJ0ZXhJRDoKKyAgICAgICAgcmV0dXJuICJ1aW50Il9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0
SW5TZW1hbnRpYzo6VmFyaWFibGU6OlBTaXplOgorICAgICAgICByZXR1cm4gImZsb2F0Il9zdHI7
CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWUG9zaXRpb246Cisg
ICAgICAgIHJldHVybiAiZmxvYXQ0Il9zdHI7CisgICAgY2FzZSBBU1Q6OkJ1aWx0SW5TZW1hbnRp
Yzo6VmFyaWFibGU6OlNWSXNGcm9udEZhY2U6CisgICAgICAgIHJldHVybiAiYm9vbCJfc3RyOwor
ICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVlNhbXBsZUluZGV4Ogor
ICAgICAgICByZXR1cm4gInVpbnQiX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGlj
OjpWYXJpYWJsZTo6U1ZJbm5lckNvdmVyYWdlOgorICAgICAgICByZXR1cm4gInVpbnQiX3N0cjsK
KyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZUYXJnZXQ6CisgICAg
ICAgIHJldHVybiBTdHJpbmcoKTsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJp
YWJsZTo6U1ZEZXB0aDoKKyAgICAgICAgcmV0dXJuICJmbG9hdCJfc3RyOworICAgIGNhc2UgQVNU
OjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpTVkNvdmVyYWdlOgorICAgICAgICByZXR1cm4g
InVpbnQiX3N0cjsKKyAgICBjYXNlIEFTVDo6QnVpbHRJblNlbWFudGljOjpWYXJpYWJsZTo6U1ZE
aXNwYXRjaFRocmVhZElEOgorICAgICAgICByZXR1cm4gInVpbnQzIl9zdHI7CisgICAgY2FzZSBB
U1Q6OkJ1aWx0SW5TZW1hbnRpYzo6VmFyaWFibGU6OlNWR3JvdXBJRDoKKyAgICAgICAgcmV0dXJu
ICJ1aW50MyJfc3RyOworICAgIGNhc2UgQVNUOjpCdWlsdEluU2VtYW50aWM6OlZhcmlhYmxlOjpT
Vkdyb3VwSW5kZXg6CisgICAgICAgIHJldHVybiAidWludCJfc3RyOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIEFTU0VSVChidWlsdEluU2VtYW50aWMudmFyaWFibGUoKSA9PSBBU1Q6OkJ1aWx0SW5T
ZW1hbnRpYzo6VmFyaWFibGU6OlNWR3JvdXBUaHJlYWRJRCk7CisgICAgICAgIHJldHVybiAidWlu
dDMiX3N0cjsKKyAgICB9Cit9CisKIE9wdGlvbmFsPFN0cmluZz4gRW50cnlQb2ludFNjYWZmb2xk
aW5nOjpidWlsdEluc1NpZ25hdHVyZSgpCiB7CiAgICAgaWYgKCFtX25hbWVkQnVpbHRJbnMuc2l6
ZSgpKQpAQCAtMTc0LDkgKzIwOSwxMSBAQCBPcHRpb25hbDxTdHJpbmc+IEVudHJ5UG9pbnRTY2Fm
Zm9sZGluZzo6YnVpbHRJbnNTaWduYXR1cmUoKQogICAgICAgICBhdXRvJiBuYW1lZEJ1aWx0SW4g
PSBtX25hbWVkQnVpbHRJbnNbaV07CiAgICAgICAgIGF1dG8mIGl0ZW0gPSBtX2VudHJ5UG9pbnRJ
dGVtcy5pbnB1dHNbbmFtZWRCdWlsdEluLmluZGV4SW5FbnRyeVBvaW50SXRlbXNdOwogICAgICAg
ICBhdXRvJiBidWlsdEluU2VtYW50aWMgPSBXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4o
Kml0ZW0uc2VtYW50aWMpOwotICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqaXRlbS51bm5hbWVkVHlwZSk7CisgICAgICAgIGF1dG8g
aW50ZXJuYWxUeXBlID0gaW50ZXJuYWxUeXBlRm9yU2VtYW50aWMoYnVpbHRJblNlbWFudGljKTsK
KyAgICAgICAgaWYgKGludGVybmFsVHlwZS5pc051bGwoKSkKKyAgICAgICAgICAgIGludGVybmFs
VHlwZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqaXRlbS51bm5hbWVkVHlwZSk7
CiAgICAgICAgIGF1dG8gdmFyaWFibGVOYW1lID0gbmFtZWRCdWlsdEluLnZhcmlhYmxlTmFtZTsK
LSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUs
ICcgJywgdmFyaWFibGVOYW1lLCAnICcsIGF0dHJpYnV0ZUZvclNlbWFudGljKGJ1aWx0SW5TZW1h
bnRpYykpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhpbnRlcm5h
bFR5cGUsICcgJywgdmFyaWFibGVOYW1lLCAnICcsIGF0dHJpYnV0ZUZvclNlbWFudGljKGJ1aWx0
SW5TZW1hbnRpYykpKTsKICAgICB9CiAgICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmco
KTsKIH0KQEAgLTI2NCw5ICszMDEsMTEgQEAgU3RyaW5nIEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6
dW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRCdWlsdElucygpCiAgICAgfQogCiAgICAgZm9yIChhdXRv
JiBuYW1lZEJ1aWx0SW4gOiBtX25hbWVkQnVpbHRJbnMpIHsKLSAgICAgICAgYXV0byYgcGF0aCA9
IG1fZW50cnlQb2ludEl0ZW1zLmlucHV0c1tuYW1lZEJ1aWx0SW4uaW5kZXhJbkVudHJ5UG9pbnRJ
dGVtc10ucGF0aDsKKyAgICAgICAgYXV0byYgaXRlbSA9IG1fZW50cnlQb2ludEl0ZW1zLmlucHV0
c1tuYW1lZEJ1aWx0SW4uaW5kZXhJbkVudHJ5UG9pbnRJdGVtc107CisgICAgICAgIGF1dG8mIHBh
dGggPSBpdGVtLnBhdGg7CiAgICAgICAgIGF1dG8mIHZhcmlhYmxlTmFtZSA9IG5hbWVkQnVpbHRJ
bi52YXJpYWJsZU5hbWU7Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
bWFuZ2xlZElucHV0UGF0aChwYXRoKSwgIiA9ICIsIHZhcmlhYmxlTmFtZSwgIjtcbiIpKTsKKyAg
ICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKml0ZW0udW5uYW1lZFR5cGUpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG1hbmdsZWRJbnB1dFBhdGgocGF0aCksICIgPSAiLCBtYW5nbGVkVHlwZU5hbWUsICco
JywgdmFyaWFibGVOYW1lLCAiKTtcbiIpKTsKICAgICB9CiAgICAgcmV0dXJuIHN0cmluZ0J1aWxk
ZXIudG9TdHJpbmcoKTsKIH0KQEAgLTI4OSw4ICszMjgsMTMgQEAgVmVydGV4RW50cnlQb2ludFNj
YWZmb2xkaW5nOjpWZXJ0ZXhFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5jdGlvbkRlZmlu
aXRpb24KIAogICAgIG1fbmFtZWRPdXRwdXRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9lbnRy
eVBvaW50SXRlbXMub3V0cHV0cy5zaXplKCkpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bV9lbnRyeVBvaW50SXRlbXMub3V0cHV0cy5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBv
dXRwdXRJdGVtID0gbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0c1tpXTsKICAgICAgICAgTmFtZWRP
dXRwdXQgbmFtZWRPdXRwdXQ7CiAgICAgICAgIG5hbWVkT3V0cHV0LmVsZW1lbnROYW1lID0gbV90
eXBlTmFtZXIuZ2VuZXJhdGVOZXh0U3RydWN0dXJlRWxlbWVudE5hbWUoKTsKKyAgICAgICAgaWYg
KFdURjo6aG9sZHNfYWx0ZXJuYXRpdmU8QVNUOjpCdWlsdEluU2VtYW50aWM+KCpvdXRwdXRJdGVt
LnNlbWFudGljKSkKKyAgICAgICAgICAgIG5hbWVkT3V0cHV0LmludGVybmFsVHlwZU5hbWUgPSBp
bnRlcm5hbFR5cGVGb3JTZW1hbnRpYyhXVEY6OmdldDxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oKm91
dHB1dEl0ZW0uc2VtYW50aWMpKTsKKyAgICAgICAgaWYgKG5hbWVkT3V0cHV0LmludGVybmFsVHlw
ZU5hbWUuaXNOdWxsKCkpCisgICAgICAgICAgICBuYW1lZE91dHB1dC5pbnRlcm5hbFR5cGVOYW1l
ID0gbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpvdXRwdXRJdGVtLnVubmFtZWRUeXBl
KTsKICAgICAgICAgbV9uYW1lZE91dHB1dHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobmFtZWRP
dXRwdXQpKTsKICAgICB9CiB9CkBAIC0zMTEsMTAgKzM1NSwxMCBAQCBTdHJpbmcgVmVydGV4RW50
cnlQb2ludFNjYWZmb2xkaW5nOjpoZWxwZXJUeXBlcygpCiAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygic3RydWN0ICIsIG1fcmV0dXJuU3RydWN0TmFtZSwgIiB7XG4iKSk7CiAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIGF1dG8mIG91dHB1dEl0ZW0gPSBtX2VudHJ5UG9pbnRJdGVtcy5v
dXRwdXRzW2ldOwotICAgICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZSgqb3V0cHV0SXRlbS51bm5hbWVkVHlwZSk7CisgICAgICAgIGF1dG8m
IGludGVybmFsVHlwZU5hbWUgPSBtX25hbWVkT3V0cHV0c1tpXS5pbnRlcm5hbFR5cGVOYW1lOwog
ICAgICAgICBhdXRvIGVsZW1lbnROYW1lID0gbV9uYW1lZE91dHB1dHNbaV0uZWxlbWVudE5hbWU7
CiAgICAgICAgIGF1dG8gYXR0cmlidXRlID0gYXR0cmlidXRlRm9yU2VtYW50aWMoKm91dHB1dEl0
ZW0uc2VtYW50aWMpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIg
ICAgIiwgbWFuZ2xlZFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1lLCAnICcsIGF0dHJpYnV0ZSwg
IjtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIs
IGludGVybmFsVHlwZU5hbWUsICcgJywgZWxlbWVudE5hbWUsICcgJywgYXR0cmlidXRlLCAiO1xu
IikpOwogICAgIH0KICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifTtcblxuIik7CiAKQEAgLTM2
Myw4ICs0MDcsOSBAQCBTdHJpbmcgVmVydGV4RW50cnlQb2ludFNjYWZmb2xkaW5nOjpwYWNrKGNv
bnN0IFN0cmluZyYgaW5wdXRWYXJpYWJsZU5hbWUsIGNvbnN0CiAgICAgfQogICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0cy5zaXplKCk7ICsraSkgewog
ICAgICAgICBhdXRvJiBlbGVtZW50TmFtZSA9IG1fbmFtZWRPdXRwdXRzW2ldLmVsZW1lbnROYW1l
OworICAgICAgICBhdXRvJiBpbnRlcm5hbFR5cGVOYW1lID0gbV9uYW1lZE91dHB1dHNbaV0uaW50
ZXJuYWxUeXBlTmFtZTsKICAgICAgICAgYXV0byYgcGF0aCA9IG1fZW50cnlQb2ludEl0ZW1zLm91
dHB1dHNbaV0ucGF0aDsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhv
dXRwdXRWYXJpYWJsZU5hbWUsICcuJywgZWxlbWVudE5hbWUsICIgPSAiLCBpbnB1dFZhcmlhYmxl
TmFtZSwgbWFuZ2xlZE91dHB1dFBhdGgocGF0aCksICI7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcob3V0cHV0VmFyaWFibGVOYW1lLCAnLicsIGVsZW1lbnRO
YW1lLCAiID0gIiwgaW50ZXJuYWxUeXBlTmFtZSwgJygnLCBpbnB1dFZhcmlhYmxlTmFtZSwgbWFu
Z2xlZE91dHB1dFBhdGgocGF0aCksICIpO1xuIikpOwogICAgIH0KICAgICByZXR1cm4gc3RyaW5n
QnVpbGRlci50b1N0cmluZygpOwogfQpAQCAtMzg5LDggKzQzNCwxMyBAQCBGcmFnbWVudEVudHJ5
UG9pbnRTY2FmZm9sZGluZzo6RnJhZ21lbnRFbnRyeVBvaW50U2NhZmZvbGRpbmcoQVNUOjpGdW5j
dGlvbkRlZmluaQogCiAgICAgbV9uYW1lZE91dHB1dHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKSk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGF1
dG8mIG91dHB1dEl0ZW0gPSBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzW2ldOwogICAgICAgICBO
YW1lZE91dHB1dCBuYW1lZE91dHB1dDsKICAgICAgICAgbmFtZWRPdXRwdXQuZWxlbWVudE5hbWUg
PSBtX3R5cGVOYW1lci5nZW5lcmF0ZU5leHRTdHJ1Y3R1cmVFbGVtZW50TmFtZSgpOworICAgICAg
ICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkJ1aWx0SW5TZW1hbnRpYz4oKm91dHB1
dEl0ZW0uc2VtYW50aWMpKQorICAgICAgICAgICAgbmFtZWRPdXRwdXQuaW50ZXJuYWxUeXBlTmFt
ZSA9IGludGVybmFsVHlwZUZvclNlbWFudGljKFdURjo6Z2V0PEFTVDo6QnVpbHRJblNlbWFudGlj
Pigqb3V0cHV0SXRlbS5zZW1hbnRpYykpOworICAgICAgICBpZiAobmFtZWRPdXRwdXQuaW50ZXJu
YWxUeXBlTmFtZS5pc051bGwoKSkKKyAgICAgICAgICAgIG5hbWVkT3V0cHV0LmludGVybmFsVHlw
ZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm91dHB1dEl0ZW0udW5uYW1l
ZFR5cGUpOwogICAgICAgICBtX25hbWVkT3V0cHV0cy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShu
YW1lZE91dHB1dCkpOwogICAgIH0KIH0KQEAgLTQxMSwxMCArNDYxLDEwIEBAIFN0cmluZyBGcmFn
bWVudEVudHJ5UG9pbnRTY2FmZm9sZGluZzo6aGVscGVyVHlwZXMoKQogICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKG1ha2VTdHJpbmcoInN0cnVjdCAiLCBtX3JldHVyblN0cnVjdE5hbWUsICIge1xu
IikpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbnRyeVBvaW50SXRlbXMub3V0cHV0
cy5zaXplKCk7ICsraSkgewogICAgICAgICBhdXRvJiBvdXRwdXRJdGVtID0gbV9lbnRyeVBvaW50
SXRlbXMub3V0cHV0c1tpXTsKLSAgICAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVO
YW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKm91dHB1dEl0ZW0udW5uYW1lZFR5cGUpOworICAgICAg
ICBhdXRvJiBpbnRlcm5hbFR5cGVOYW1lID0gbV9uYW1lZE91dHB1dHNbaV0uaW50ZXJuYWxUeXBl
TmFtZTsKICAgICAgICAgYXV0byBlbGVtZW50TmFtZSA9IG1fbmFtZWRPdXRwdXRzW2ldLmVsZW1l
bnROYW1lOwogICAgICAgICBhdXRvIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUZvclNlbWFudGljKCpv
dXRwdXRJdGVtLnNlbWFudGljKTsKLSAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0
cmluZygiICAgICIsIG1hbmdsZWRUeXBlTmFtZSwgJyAnLCBlbGVtZW50TmFtZSwgJyAnLCBhdHRy
aWJ1dGUsICI7XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmco
IiAgICAiLCBpbnRlcm5hbFR5cGVOYW1lLCAnICcsIGVsZW1lbnROYW1lLCAnICcsIGF0dHJpYnV0
ZSwgIjtcbiIpKTsKICAgICB9CiAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIn07XG5cbiIpOwog
CkBAIC00NjMsOCArNTEzLDkgQEAgU3RyaW5nIEZyYWdtZW50RW50cnlQb2ludFNjYWZmb2xkaW5n
OjpwYWNrKGNvbnN0IFN0cmluZyYgaW5wdXRWYXJpYWJsZU5hbWUsIGNvbnMKICAgICB9CiAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VudHJ5UG9pbnRJdGVtcy5vdXRwdXRzLnNpemUoKTsg
KytpKSB7CiAgICAgICAgIGF1dG8mIGVsZW1lbnROYW1lID0gbV9uYW1lZE91dHB1dHNbaV0uZWxl
bWVudE5hbWU7CisgICAgICAgIGF1dG8mIGludGVybmFsVHlwZU5hbWUgPSBtX25hbWVkT3V0cHV0
c1tpXS5pbnRlcm5hbFR5cGVOYW1lOwogICAgICAgICBhdXRvJiBwYXRoID0gbV9lbnRyeVBvaW50
SXRlbXMub3V0cHV0c1tpXS5wYXRoOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtl
U3RyaW5nKG91dHB1dFZhcmlhYmxlTmFtZSwgJy4nLCBlbGVtZW50TmFtZSwgIiA9ICIsIGlucHV0
VmFyaWFibGVOYW1lLCBtYW5nbGVkT3V0cHV0UGF0aChwYXRoKSwgIjtcbiIpKTsKKyAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhvdXRwdXRWYXJpYWJsZU5hbWUsICcuJywg
ZWxlbWVudE5hbWUsICIgPSAiLCBpbnRlcm5hbFR5cGVOYW1lLCAnKCcsIGlucHV0VmFyaWFibGVO
YW1lLCBtYW5nbGVkT3V0cHV0UGF0aChwYXRoKSwgIik7XG4iKSk7CiAgICAgfQogICAgIHJldHVy
biBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiB9CkBAIC00ODMsNyArNTM0LDcgQEAgU3RyaW5n
IENvbXB1dGVFbnRyeVBvaW50U2NhZmZvbGRpbmc6OnNpZ25hdHVyZShTdHJpbmcmIGZ1bmN0aW9u
TmFtZSkKIHsKICAgICBTdHJpbmdCdWlsZGVyIHN0cmluZ0J1aWxkZXI7CiAKLSAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJjb21wdXRlIHZvaWQgIiwgZnVuY3Rpb25OYW1lLCAn
KCcpKTsKKyAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJrZXJuZWwgdm9pZCAi
LCBmdW5jdGlvbk5hbWUsICcoJykpOwogICAgIGJvb2wgZW1wdHkgPSB0cnVlOwogICAgIGlmIChh
dXRvIHJlc291cmNlU2lnbmF0dXJlID0gdGhpcy0+cmVzb3VyY2VTaWduYXR1cmUoKSkgewogICAg
ICAgICBlbXB0eSA9IGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93
ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRW50cnlQb2ludFNjYWZmb2xk
aW5nLmgKaW5kZXggMjQ2N2U4NmZmODZhZDI0NDA0ODI2ZTM4NWNhMWE1MWUwZDFhODM3YS4uMDcx
NGJiOTE5ZmEwMzBlYzYxMGJiMWIzMGVkZDcxZWRmOWY1NTE2MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZv
bGRpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5oCkBAIC0xMjMsNiArMTIzLDcgQEAgcHJpdmF0ZToK
IAogICAgIHN0cnVjdCBOYW1lZE91dHB1dCB7CiAgICAgICAgIFN0cmluZyBlbGVtZW50TmFtZTsK
KyAgICAgICAgU3RyaW5nIGludGVybmFsVHlwZU5hbWU7CiAgICAgfTsKICAgICBWZWN0b3I8TmFt
ZWRPdXRwdXQ+IG1fbmFtZWRPdXRwdXRzOwogfTsKQEAgLTE1MSw2ICsxNTIsNyBAQCBwcml2YXRl
OgogCiAgICAgc3RydWN0IE5hbWVkT3V0cHV0IHsKICAgICAgICAgU3RyaW5nIGVsZW1lbnROYW1l
OworICAgICAgICBTdHJpbmcgaW50ZXJuYWxUeXBlTmFtZTsKICAgICB9OwogICAgIFZlY3RvcjxO
YW1lZE91dHB1dD4gbV9uYW1lZE91dHB1dHM7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDb21wdXRlRGltZW5zaW9ucy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENvbXB1dGVEaW1lbnNpb25zLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5lN2RlNGM2NTMyYzhhNWE1YWU4MjVjN2QxZWYxZWQwZjQ4ZWU4MGFmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xDb21wdXRlRGltZW5zaW9ucy5jcHAKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXSExTTENvbXB1dGVEaW1lbnNpb25zLmgiCisK
KyNpZiBFTkFCTEUoV0VCR1BVKQorCisjaW5jbHVkZSAiV0hMU0xGdW5jdGlvbkRlY2xhcmF0aW9u
LmgiCisjaW5jbHVkZSAiV0hMU0xQcmVwYXJlLmgiCisjaW5jbHVkZSAiV0hMU0xQcm9ncmFtLmgi
CisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworbmFt
ZXNwYWNlIFdITFNMIHsKKworY2xhc3MgQ29tcHV0ZURpbWVuc2lvbnNWaXNpdG9yIDogcHVibGlj
IFZpc2l0b3IgeworcHVibGljOgorICAgIENvbXB1dGVEaW1lbnNpb25zVmlzaXRvcihBU1Q6OkZ1
bmN0aW9uRGVmaW5pdGlvbiYgZW50cnlQb2ludCkKKyAgICAgICAgOiBtX2VudHJ5UG9pbnQoZW50
cnlQb2ludCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCB+Q29tcHV0ZURpbWVuc2lvbnNW
aXNpdG9yKCkgPSBkZWZhdWx0OworCisgICAgT3B0aW9uYWw8Q29tcHV0ZURpbWVuc2lvbnM+IGNv
bXB1dGVEaW1lbnNpb25zKCkgY29uc3QgeyByZXR1cm4gbV9jb21wdXRlRGltZW5zaW9uczsgfQor
Citwcml2YXRlOgorICAgIHZvaWQgdmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5j
dGlvbkRlY2xhcmF0aW9uKSBvdmVycmlkZQorICAgIHsKKyAgICAgICAgVmlzaXRvcjo6dmlzaXQo
ZnVuY3Rpb25EZWNsYXJhdGlvbik7CisgICAgICAgIGJvb2wgZm91bmROdW1UaHJlYWRzRnVuY3Rp
b25BdHRyaWJ1dGUgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvJiBmdW5jdGlvbkF0dHJpYnV0
ZSA6IGZ1bmN0aW9uRGVjbGFyYXRpb24uYXR0cmlidXRlQmxvY2soKSkgeworICAgICAgICAgICAg
YXV0byBzdWNjZXNzID0gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6Ok51bVRo
cmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSYgbnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGZvdW5kTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKQorICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgZm91bmROdW1U
aHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUgPSB0cnVlOworICAgICAgICAgICAgICAgIGlmICgmZnVu
Y3Rpb25EZWNsYXJhdGlvbiA9PSAmbV9lbnRyeVBvaW50KSB7CisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVCghbV9jb21wdXRlRGltZW5zaW9ucyk7CisgICAgICAgICAgICAgICAgICAgIG1fY29t
cHV0ZURpbWVuc2lvbnMgPSB7eyBudW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUud2lkdGgoKSwg
bnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlLmhlaWdodCgpLCBudW1UaHJlYWRzRnVuY3Rpb25B
dHRyaWJ1dGUuZGVwdGgoKSB9fTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICB9KSwgZnVuY3Rpb25BdHRyaWJ1dGUpOworICAgICAg
ICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBBU1Q6OkZ1bmN0aW9uRGVmaW5pdGlvbiYgbV9lbnRyeVBvaW50OworICAgIE9wdGlvbmFsPENv
bXB1dGVEaW1lbnNpb25zPiBtX2NvbXB1dGVEaW1lbnNpb25zOworfTsKKworT3B0aW9uYWw8Q29t
cHV0ZURpbWVuc2lvbnM+IGNvbXB1dGVEaW1lbnNpb25zKFByb2dyYW0mIHByb2dyYW0sIEFTVDo6
RnVuY3Rpb25EZWZpbml0aW9uJiBlbnRyeVBvaW50KQoreworICAgIENvbXB1dGVEaW1lbnNpb25z
VmlzaXRvciBjb21wdXRlRGltZW5zaW9ucyhlbnRyeVBvaW50KTsKKyAgICBjb21wdXRlRGltZW5z
aW9ucy5WaXNpdG9yOjp2aXNpdChwcm9ncmFtKTsKKyAgICBpZiAoY29tcHV0ZURpbWVuc2lvbnMu
ZXJyb3IoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICByZXR1cm4gY29tcHV0
ZURpbWVuc2lvbnMuY29tcHV0ZURpbWVuc2lvbnMoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV0hM
U0wKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQkdQVSkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ29t
cHV0ZURpbWVuc2lvbnMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMQ29tcHV0ZURpbWVuc2lvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZTQ1MDgxM2E1OGM5OTU3YWFmYWQ0
ZjY2ZTIzZGQzMWUxMWI5ODczCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDb21wdXRlRGltZW5zaW9ucy5oCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJHUFUpCisKKyNp
bmNsdWRlICJXSExTTFByZXBhcmUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3Bh
Y2UgV0hMU0wgeworCitjbGFzcyBQcm9ncmFtOworCitPcHRpb25hbDxDb21wdXRlRGltZW5zaW9u
cz4gY29tcHV0ZURpbWVuc2lvbnMoUHJvZ3JhbSYsIEFTVDo6RnVuY3Rpb25EZWZpbml0aW9uJik7
CisKK30KKworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMR2F0aGVyRW50cnlQb2ludEl0ZW1zLmNwcApp
bmRleCA5OTZkZDg0MDcyZDUyOWZhMDg5ODBkMmMxYTA5OGJhMTY1YmZlNTRiLi5hYTI0OWMwMmI3
MjY4NjE1MWI3Y2Q5ODU2NjMwZDFjMzFmZmNlNzkwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xHYXRoZXJFbnRyeVBv
aW50SXRlbXMuY3BwCkBAIC0xNzUsNyArMTc1LDggQEAgT3B0aW9uYWw8RW50cnlQb2ludEl0ZW1z
PiBnYXRoZXJFbnRyeVBvaW50SXRlbXMoY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcywgQVMK
ICAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgfQogICAgIEdhdGhlcmVyIG91
dHB1dEdhdGhlcmVyKGludHJpbnNpY3MsIGZ1bmN0aW9uRGVmaW5pdGlvbi5zZW1hbnRpYygpID8g
JipmdW5jdGlvbkRlZmluaXRpb24uc2VtYW50aWMoKSA6IG51bGxwdHIpOwotICAgIG91dHB1dEdh
dGhlcmVyLmNoZWNrRXJyb3JBbmRWaXNpdChmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKKyAg
ICBpZiAoKmZ1bmN0aW9uRGVmaW5pdGlvbi5lbnRyeVBvaW50VHlwZSgpICE9IEFTVDo6RW50cnlQ
b2ludFR5cGU6OkNvbXB1dGUpCisgICAgICAgIG91dHB1dEdhdGhlcmVyLmNoZWNrRXJyb3JBbmRW
aXNpdChmdW5jdGlvbkRlZmluaXRpb24udHlwZSgpKTsKICAgICBpZiAob3V0cHV0R2F0aGVyZXIu
ZXJyb3IoKSkKICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKaW5kZXggNTZm
YjM2NTQ2YWNiYzU3ZTFhN2U5ZDI2ODRkYmJlNGZhNTM5MzlmMC4uOTNlMDIyYWZhZWUwY2Q3MmEz
MDI4MTk1NzBkYjJiMmViMjA0MzI0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByZXBhcmUuY3BwCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiV0hMU0xBU1REdW1wZXIuaCIKICNpbmNsdWRlICJXSExTTENoZWNrRHVwbGljYXRlRnVu
Y3Rpb25zLmgiCiAjaW5jbHVkZSAiV0hMU0xDaGVja2VyLmgiCisjaW5jbHVkZSAiV0hMU0xDb21w
dXRlRGltZW5zaW9ucy5oIgogI2luY2x1ZGUgIldITFNMRnVuY3Rpb25TdGFnZUNoZWNrZXIuaCIK
ICNpbmNsdWRlICJXSExTTEhpZ2hab21iaWVGaW5kZXIuaCIKICNpbmNsdWRlICJXSExTTExpdGVy
YWxUeXBlQ2hlY2tlci5oIgpAQCAtMTY4LDEyICsxNjksMTYgQEAgT3B0aW9uYWw8Q29tcHV0ZVBy
ZXBhcmVSZXN1bHQ+IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVsaW5l
RGVzY3IKICAgICBhdXRvIG1hdGNoZWRTZW1hbnRpY3MgPSBtYXRjaFNlbWFudGljcygqcHJvZ3Jh
bSwgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcik7CiAgICAgaWYgKCFtYXRjaGVkU2VtYW50aWNz
KQogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIGF1dG8gY29tcHV0ZURpbWVuc2lv
bnMgPSBXSExTTDo6Y29tcHV0ZURpbWVuc2lvbnMoKnByb2dyYW0sICptYXRjaGVkU2VtYW50aWNz
LT5zaGFkZXIpOworICAgIGlmICghY29tcHV0ZURpbWVuc2lvbnMpCisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAKICAgICBhdXRvIGdlbmVyYXRlZENvZGUgPSBNZXRhbDo6Z2VuZXJhdGVN
ZXRhbENvZGUoKnByb2dyYW0sIFdURk1vdmUoKm1hdGNoZWRTZW1hbnRpY3MpLCBjb21wdXRlUGlw
ZWxpbmVEZXNjcmlwdG9yLmxheW91dCk7CiAKICAgICBDb21wdXRlUHJlcGFyZVJlc3VsdCByZXN1
bHQ7CiAgICAgcmVzdWx0Lm1ldGFsU291cmNlID0gV1RGTW92ZShnZW5lcmF0ZWRDb2RlLm1ldGFs
U291cmNlKTsKICAgICByZXN1bHQubWFuZ2xlZEVudHJ5UG9pbnROYW1lID0gV1RGTW92ZShnZW5l
cmF0ZWRDb2RlLm1hbmdsZWRFbnRyeVBvaW50TmFtZSk7CisgICAgcmVzdWx0LmNvbXB1dGVEaW1l
bnNpb25zID0gV1RGTW92ZSgqY29tcHV0ZURpbWVuc2lvbnMpOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUHJlcGFyZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cmVwYXJlLmgKaW5kZXggNWJkNmRmMDZkYzY5MWE3MmYxY2UyNGRmYzU1NTc2ZWM3ZjUyODRhYi4u
ZWIyMDIxYjdjYTJlYzU4ZmJkNGEwNTQ5NGM1NDcwODMxMGU1MGVkNiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmgKQEAgLTQyLDkg
KzQyLDE2IEBAIHN0cnVjdCBSZW5kZXJQcmVwYXJlUmVzdWx0IHsKIH07CiBPcHRpb25hbDxSZW5k
ZXJQcmVwYXJlUmVzdWx0PiBwcmVwYXJlKFN0cmluZyYgd2hsc2xTb3VyY2UsIFJlbmRlclBpcGVs
aW5lRGVzY3JpcHRvciYpOwogCitzdHJ1Y3QgQ29tcHV0ZURpbWVuc2lvbnMgeworICAgIHVuc2ln
bmVkIHdpZHRoOworICAgIHVuc2lnbmVkIGhlaWdodDsKKyAgICB1bnNpZ25lZCBkZXB0aDsKK307
CisKIHN0cnVjdCBDb21wdXRlUHJlcGFyZVJlc3VsdCB7CiAgICAgU3RyaW5nIG1ldGFsU291cmNl
OwogICAgIFN0cmluZyBtYW5nbGVkRW50cnlQb2ludE5hbWU7CisgICAgQ29tcHV0ZURpbWVuc2lv
bnMgY29tcHV0ZURpbWVuc2lvbnM7CiB9OwogT3B0aW9uYWw8Q29tcHV0ZVByZXBhcmVSZXN1bHQ+
IHByZXBhcmUoU3RyaW5nJiB3aGxzbFNvdXJjZSwgQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByb3BlcnR5UmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcAppbmRleCA4YTVhOGIzYTNjZWZmNTcwMjNjMjI5
NjY0YWI0ODZmM2ZkNGU5OGRiLi4yNTQ3NGUyMDQ3YWM5MGNlYjBhNTA2YzZmMWNlNjdjNTA1ZGJi
MDMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExT
TFByb3BlcnR5UmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAKQEAgLTc3NSw2ICs3NzUsOCBAQCB2b2lk
IExlZnRWYWx1ZVNpbXBsaWZpZXI6OmZpbmlzaFZpc2l0aW5nKEFTVDo6UHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uJiBwcm9wZXJ0eQogICAgIEFTU0VSVChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
YmFzZSgpLnR5cGVBbm5vdGF0aW9uKCkubGVmdEFkZHJlc3NTcGFjZSgpKTsKICAgICBBU1NFUlQo
cHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmFuZGVyRnVuY3Rpb24oKSk7CiAKKyAgICBWaXNpdG9y
Ojp2aXNpdChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYmFzZSgpKTsKKwogICAgIExleGVyOjpU
b2tlbiBvcmlnaW4gPSBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCk7CiAgICAgYXV0
byogYW5kZXJGdW5jdGlvbiA9IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5hbmRlckZ1bmN0aW9u
KCk7CiAgICAgYXV0byYgYmFzZSA9IHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5iYXNlKCk7CkBA
IC04MDUsNyArODA3LDYgQEAgdm9pZCBMZWZ0VmFsdWVTaW1wbGlmaWVyOjp2aXNpdChBU1Q6OkRv
dEV4cHJlc3Npb24mIGRvdEV4cHJlc3Npb24pCiAKIHZvaWQgTGVmdFZhbHVlU2ltcGxpZmllcjo6
dmlzaXQoQVNUOjpJbmRleEV4cHJlc3Npb24mIGluZGV4RXhwcmVzc2lvbikKIHsKLSAgICBWaXNp
dG9yOjp2aXNpdChpbmRleEV4cHJlc3Npb24pOwogICAgIFByb3BlcnR5UmVzb2x2ZXIoKS5WaXNp
dG9yOjp2aXNpdChpbmRleEV4cHJlc3Npb24uaW5kZXhFeHByZXNzaW9uKCkpOwogICAgIGZpbmlz
aFZpc2l0aW5nKGluZGV4RXhwcmVzc2lvbik7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN0YW5kYXJkTGlicmFyeS50eHQKaW5k
ZXggMWM0NTI3YTZiZjE0NmM0ZGY1N2JhYTkyZTVlMzNmMjVlMzk3YmRjMy4uMGZiNDhlMWRlNTM2
Yjc1Y2MzZGIzZWU3M2E1YmI2MmU5YjUwODE2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTdGFuZGFyZExpYnJhcnkudHh0CisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMU3RhbmRhcmRMaWJyYXJ5LnR4dApA
QCAtNDMyLDE1ICs0MzIsNiBAQCBuYXRpdmUgb3BlcmF0b3IgZmxvYXQoc2hvcnQpOwogbmF0aXZl
IG9wZXJhdG9yIGZsb2F0KGludCk7CiBuYXRpdmUgb3BlcmF0b3IgZmxvYXQoaGFsZik7CiAKLW5h
dGl2ZSBmbG9hdCBvcGVyYXRvci54KGZsb2F0NCk7Ci1uYXRpdmUgZmxvYXQgb3BlcmF0b3IueShm
bG9hdDQpOwotbmF0aXZlIGZsb2F0IG9wZXJhdG9yLnooZmxvYXQ0KTsKLW5hdGl2ZSBmbG9hdCBv
cGVyYXRvci53KGZsb2F0NCk7Ci1uYXRpdmUgZmxvYXQ0IG9wZXJhdG9yLng9KGZsb2F0NCwgZmxv
YXQpOwotbmF0aXZlIGZsb2F0NCBvcGVyYXRvci55PShmbG9hdDQsIGZsb2F0KTsKLW5hdGl2ZSBm
bG9hdDQgb3BlcmF0b3Iuej0oZmxvYXQ0LCBmbG9hdCk7Ci1uYXRpdmUgZmxvYXQ0IG9wZXJhdG9y
Lnc9KGZsb2F0NCwgZmxvYXQpOwotCiBuYXRpdmUgZmxvYXQgb3BlcmF0b3IrKGZsb2F0LCBmbG9h
dCk7CiBuYXRpdmUgZmxvYXQgb3BlcmF0b3ItKGZsb2F0LCBmbG9hdCk7CiBuYXRpdmUgaW50IG9w
ZXJhdG9yKyhpbnQsIGludCk7CkBAIC00NDgsNiArNDM5LDE3MCBAQCBuYXRpdmUgdWludCBvcGVy
YXRvcisodWludCwgdWludCk7CiBuYXRpdmUgYm9vbCBvcGVyYXRvcjwoaW50LCBpbnQpOwogbmF0
aXZlIGJvb2wgb3BlcmF0b3I8KHVpbnQsIHVpbnQpOwogbmF0aXZlIGJvb2wgb3BlcmF0b3I8KGZs
b2F0LCBmbG9hdCk7CituYXRpdmUgZmxvYXQgb3BlcmF0b3IqKGZsb2F0LCBmbG9hdCk7CisKKy8q
IG5hdGl2ZSBib29sIG9wZXJhdG9yLngoYm9vbDIpOworbmF0aXZlIGJvb2wgb3BlcmF0b3IueShi
b29sMik7CituYXRpdmUgYm9vbCBvcGVyYXRvci54KGJvb2wzKTsKK25hdGl2ZSBib29sIG9wZXJh
dG9yLnkoYm9vbDMpOworbmF0aXZlIGJvb2wgb3BlcmF0b3Iueihib29sMyk7CituYXRpdmUgYm9v
bCBvcGVyYXRvci54KGJvb2w0KTsKK25hdGl2ZSBib29sIG9wZXJhdG9yLnkoYm9vbDQpOworbmF0
aXZlIGJvb2wgb3BlcmF0b3Iueihib29sNCk7CituYXRpdmUgYm9vbCBvcGVyYXRvci53KGJvb2w0
KTsKK25hdGl2ZSBib29sMiBvcGVyYXRvci54PShib29sMiwgYm9vbCk7CituYXRpdmUgYm9vbDIg
b3BlcmF0b3IueT0oYm9vbDIsIGJvb2wpOworbmF0aXZlIGJvb2wzIG9wZXJhdG9yLng9KGJvb2wz
LCBib29sKTsKK25hdGl2ZSBib29sMyBvcGVyYXRvci55PShib29sMywgYm9vbCk7CituYXRpdmUg
Ym9vbDMgb3BlcmF0b3Iuej0oYm9vbDMsIGJvb2wpOworbmF0aXZlIGJvb2w0IG9wZXJhdG9yLng9
KGJvb2w0LCBib29sKTsKK25hdGl2ZSBib29sNCBvcGVyYXRvci55PShib29sNCwgYm9vbCk7Citu
YXRpdmUgYm9vbDQgb3BlcmF0b3Iuej0oYm9vbDQsIGJvb2wpOworbmF0aXZlIGJvb2w0IG9wZXJh
dG9yLnc9KGJvb2w0LCBib29sKTsKK25hdGl2ZSB1Y2hhciBvcGVyYXRvci54KHVjaGFyMik7Citu
YXRpdmUgdWNoYXIgb3BlcmF0b3IueSh1Y2hhcjIpOworbmF0aXZlIHVjaGFyIG9wZXJhdG9yLngo
dWNoYXIzKTsKK25hdGl2ZSB1Y2hhciBvcGVyYXRvci55KHVjaGFyMyk7CituYXRpdmUgdWNoYXIg
b3BlcmF0b3Iueih1Y2hhcjMpOworbmF0aXZlIHVjaGFyIG9wZXJhdG9yLngodWNoYXI0KTsKK25h
dGl2ZSB1Y2hhciBvcGVyYXRvci55KHVjaGFyNCk7CituYXRpdmUgdWNoYXIgb3BlcmF0b3Iueih1
Y2hhcjQpOworbmF0aXZlIHVjaGFyIG9wZXJhdG9yLncodWNoYXI0KTsKK25hdGl2ZSB1Y2hhcjIg
b3BlcmF0b3IueD0odWNoYXIyLCB1Y2hhcik7CituYXRpdmUgdWNoYXIyIG9wZXJhdG9yLnk9KHVj
aGFyMiwgdWNoYXIpOworbmF0aXZlIHVjaGFyMyBvcGVyYXRvci54PSh1Y2hhcjMsIHVjaGFyKTsK
K25hdGl2ZSB1Y2hhcjMgb3BlcmF0b3IueT0odWNoYXIzLCB1Y2hhcik7CituYXRpdmUgdWNoYXIz
IG9wZXJhdG9yLno9KHVjaGFyMywgdWNoYXIpOworbmF0aXZlIHVjaGFyNCBvcGVyYXRvci54PSh1
Y2hhcjQsIHVjaGFyKTsKK25hdGl2ZSB1Y2hhcjQgb3BlcmF0b3IueT0odWNoYXI0LCB1Y2hhcik7
CituYXRpdmUgdWNoYXI0IG9wZXJhdG9yLno9KHVjaGFyNCwgdWNoYXIpOworbmF0aXZlIHVjaGFy
NCBvcGVyYXRvci53PSh1Y2hhcjQsIHVjaGFyKTsKK25hdGl2ZSB1c2hvcnQgb3BlcmF0b3IueCh1
c2hvcnQyKTsKK25hdGl2ZSB1c2hvcnQgb3BlcmF0b3IueSh1c2hvcnQyKTsKK25hdGl2ZSB1c2hv
cnQgb3BlcmF0b3IueCh1c2hvcnQzKTsKK25hdGl2ZSB1c2hvcnQgb3BlcmF0b3IueSh1c2hvcnQz
KTsKK25hdGl2ZSB1c2hvcnQgb3BlcmF0b3Iueih1c2hvcnQzKTsKK25hdGl2ZSB1c2hvcnQgb3Bl
cmF0b3IueCh1c2hvcnQ0KTsKK25hdGl2ZSB1c2hvcnQgb3BlcmF0b3IueSh1c2hvcnQ0KTsKK25h
dGl2ZSB1c2hvcnQgb3BlcmF0b3Iueih1c2hvcnQ0KTsKK25hdGl2ZSB1c2hvcnQgb3BlcmF0b3Iu
dyh1c2hvcnQ0KTsKK25hdGl2ZSB1c2hvcnQyIG9wZXJhdG9yLng9KHVzaG9ydDIsIHVzaG9ydCk7
CituYXRpdmUgdXNob3J0MiBvcGVyYXRvci55PSh1c2hvcnQyLCB1c2hvcnQpOworbmF0aXZlIHVz
aG9ydDMgb3BlcmF0b3IueD0odXNob3J0MywgdXNob3J0KTsKK25hdGl2ZSB1c2hvcnQzIG9wZXJh
dG9yLnk9KHVzaG9ydDMsIHVzaG9ydCk7CituYXRpdmUgdXNob3J0MyBvcGVyYXRvci56PSh1c2hv
cnQzLCB1c2hvcnQpOworbmF0aXZlIHVzaG9ydDQgb3BlcmF0b3IueD0odXNob3J0NCwgdXNob3J0
KTsKK25hdGl2ZSB1c2hvcnQ0IG9wZXJhdG9yLnk9KHVzaG9ydDQsIHVzaG9ydCk7CituYXRpdmUg
dXNob3J0NCBvcGVyYXRvci56PSh1c2hvcnQ0LCB1c2hvcnQpOworbmF0aXZlIHVzaG9ydDQgb3Bl
cmF0b3Iudz0odXNob3J0NCwgdXNob3J0KTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLngodWludDIp
OworbmF0aXZlIHVpbnQgb3BlcmF0b3IueSh1aW50Mik7CituYXRpdmUgdWludCBvcGVyYXRvci54
KHVpbnQzKTsKK25hdGl2ZSB1aW50IG9wZXJhdG9yLnkodWludDMpOworbmF0aXZlIHVpbnQgb3Bl
cmF0b3Iueih1aW50Myk7CituYXRpdmUgdWludCBvcGVyYXRvci54KHVpbnQ0KTsKK25hdGl2ZSB1
aW50IG9wZXJhdG9yLnkodWludDQpOworbmF0aXZlIHVpbnQgb3BlcmF0b3Iueih1aW50NCk7Citu
YXRpdmUgdWludCBvcGVyYXRvci53KHVpbnQ0KTsKK25hdGl2ZSB1aW50MiBvcGVyYXRvci54PSh1
aW50MiwgdWludCk7CituYXRpdmUgdWludDIgb3BlcmF0b3IueT0odWludDIsIHVpbnQpOworbmF0
aXZlIHVpbnQzIG9wZXJhdG9yLng9KHVpbnQzLCB1aW50KTsKK25hdGl2ZSB1aW50MyBvcGVyYXRv
ci55PSh1aW50MywgdWludCk7CituYXRpdmUgdWludDMgb3BlcmF0b3Iuej0odWludDMsIHVpbnQp
OworbmF0aXZlIHVpbnQ0IG9wZXJhdG9yLng9KHVpbnQ0LCB1aW50KTsKK25hdGl2ZSB1aW50NCBv
cGVyYXRvci55PSh1aW50NCwgdWludCk7CituYXRpdmUgdWludDQgb3BlcmF0b3Iuej0odWludDQs
IHVpbnQpOworbmF0aXZlIHVpbnQ0IG9wZXJhdG9yLnc9KHVpbnQ0LCB1aW50KTsKK25hdGl2ZSBj
aGFyIG9wZXJhdG9yLngoY2hhcjIpOworbmF0aXZlIGNoYXIgb3BlcmF0b3IueShjaGFyMik7Citu
YXRpdmUgY2hhciBvcGVyYXRvci54KGNoYXIzKTsKK25hdGl2ZSBjaGFyIG9wZXJhdG9yLnkoY2hh
cjMpOworbmF0aXZlIGNoYXIgb3BlcmF0b3IueihjaGFyMyk7CituYXRpdmUgY2hhciBvcGVyYXRv
ci54KGNoYXI0KTsKK25hdGl2ZSBjaGFyIG9wZXJhdG9yLnkoY2hhcjQpOworbmF0aXZlIGNoYXIg
b3BlcmF0b3IueihjaGFyNCk7CituYXRpdmUgY2hhciBvcGVyYXRvci53KGNoYXI0KTsKK25hdGl2
ZSBjaGFyMiBvcGVyYXRvci54PShjaGFyMiwgY2hhcik7CituYXRpdmUgY2hhcjIgb3BlcmF0b3Iu
eT0oY2hhcjIsIGNoYXIpOworbmF0aXZlIGNoYXIzIG9wZXJhdG9yLng9KGNoYXIzLCBjaGFyKTsK
K25hdGl2ZSBjaGFyMyBvcGVyYXRvci55PShjaGFyMywgY2hhcik7CituYXRpdmUgY2hhcjMgb3Bl
cmF0b3Iuej0oY2hhcjMsIGNoYXIpOworbmF0aXZlIGNoYXI0IG9wZXJhdG9yLng9KGNoYXI0LCBj
aGFyKTsKK25hdGl2ZSBjaGFyNCBvcGVyYXRvci55PShjaGFyNCwgY2hhcik7CituYXRpdmUgY2hh
cjQgb3BlcmF0b3Iuej0oY2hhcjQsIGNoYXIpOworbmF0aXZlIGNoYXI0IG9wZXJhdG9yLnc9KGNo
YXI0LCBjaGFyKTsKK25hdGl2ZSBzaG9ydCBvcGVyYXRvci54KHNob3J0Mik7CituYXRpdmUgc2hv
cnQgb3BlcmF0b3IueShzaG9ydDIpOworbmF0aXZlIHNob3J0IG9wZXJhdG9yLngoc2hvcnQzKTsK
K25hdGl2ZSBzaG9ydCBvcGVyYXRvci55KHNob3J0Myk7CituYXRpdmUgc2hvcnQgb3BlcmF0b3Iu
eihzaG9ydDMpOworbmF0aXZlIHNob3J0IG9wZXJhdG9yLngoc2hvcnQ0KTsKK25hdGl2ZSBzaG9y
dCBvcGVyYXRvci55KHNob3J0NCk7CituYXRpdmUgc2hvcnQgb3BlcmF0b3IueihzaG9ydDQpOwor
bmF0aXZlIHNob3J0IG9wZXJhdG9yLncoc2hvcnQ0KTsKK25hdGl2ZSBzaG9ydDIgb3BlcmF0b3Iu
eD0oc2hvcnQyLCBzaG9ydCk7CituYXRpdmUgc2hvcnQyIG9wZXJhdG9yLnk9KHNob3J0Miwgc2hv
cnQpOworbmF0aXZlIHNob3J0MyBvcGVyYXRvci54PShzaG9ydDMsIHNob3J0KTsKK25hdGl2ZSBz
aG9ydDMgb3BlcmF0b3IueT0oc2hvcnQzLCBzaG9ydCk7CituYXRpdmUgc2hvcnQzIG9wZXJhdG9y
Lno9KHNob3J0Mywgc2hvcnQpOworbmF0aXZlIHNob3J0NCBvcGVyYXRvci54PShzaG9ydDQsIHNo
b3J0KTsKK25hdGl2ZSBzaG9ydDQgb3BlcmF0b3IueT0oc2hvcnQ0LCBzaG9ydCk7CituYXRpdmUg
c2hvcnQ0IG9wZXJhdG9yLno9KHNob3J0NCwgc2hvcnQpOworbmF0aXZlIHNob3J0NCBvcGVyYXRv
ci53PShzaG9ydDQsIHNob3J0KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3IueChpbnQyKTsKK25hdGl2
ZSBpbnQgb3BlcmF0b3IueShpbnQyKTsKK25hdGl2ZSBpbnQgb3BlcmF0b3IueChpbnQzKTsKK25h
dGl2ZSBpbnQgb3BlcmF0b3IueShpbnQzKTsKK25hdGl2ZSBpbnQgb3BlcmF0b3IueihpbnQzKTsK
K25hdGl2ZSBpbnQgb3BlcmF0b3IueChpbnQ0KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3IueShpbnQ0
KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3IueihpbnQ0KTsKK25hdGl2ZSBpbnQgb3BlcmF0b3Iudyhp
bnQ0KTsKK25hdGl2ZSBpbnQyIG9wZXJhdG9yLng9KGludDIsIGludCk7CituYXRpdmUgaW50MiBv
cGVyYXRvci55PShpbnQyLCBpbnQpOworbmF0aXZlIGludDMgb3BlcmF0b3IueD0oaW50MywgaW50
KTsKK25hdGl2ZSBpbnQzIG9wZXJhdG9yLnk9KGludDMsIGludCk7CituYXRpdmUgaW50MyBvcGVy
YXRvci56PShpbnQzLCBpbnQpOworbmF0aXZlIGludDQgb3BlcmF0b3IueD0oaW50NCwgaW50KTsK
K25hdGl2ZSBpbnQ0IG9wZXJhdG9yLnk9KGludDQsIGludCk7CituYXRpdmUgaW50NCBvcGVyYXRv
ci56PShpbnQ0LCBpbnQpOworbmF0aXZlIGludDQgb3BlcmF0b3Iudz0oaW50NCwgaW50KTsKK25h
dGl2ZSBoYWxmIG9wZXJhdG9yLngoaGFsZjIpOworbmF0aXZlIGhhbGYgb3BlcmF0b3IueShoYWxm
Mik7CituYXRpdmUgaGFsZiBvcGVyYXRvci54KGhhbGYzKTsKK25hdGl2ZSBoYWxmIG9wZXJhdG9y
LnkoaGFsZjMpOworbmF0aXZlIGhhbGYgb3BlcmF0b3IueihoYWxmMyk7CituYXRpdmUgaGFsZiBv
cGVyYXRvci54KGhhbGY0KTsKK25hdGl2ZSBoYWxmIG9wZXJhdG9yLnkoaGFsZjQpOworbmF0aXZl
IGhhbGYgb3BlcmF0b3IueihoYWxmNCk7CituYXRpdmUgaGFsZiBvcGVyYXRvci53KGhhbGY0KTsK
K25hdGl2ZSBoYWxmMiBvcGVyYXRvci54PShoYWxmMiwgaGFsZik7CituYXRpdmUgaGFsZjIgb3Bl
cmF0b3IueT0oaGFsZjIsIGhhbGYpOworbmF0aXZlIGhhbGYzIG9wZXJhdG9yLng9KGhhbGYzLCBo
YWxmKTsKK25hdGl2ZSBoYWxmMyBvcGVyYXRvci55PShoYWxmMywgaGFsZik7CituYXRpdmUgaGFs
ZjMgb3BlcmF0b3Iuej0oaGFsZjMsIGhhbGYpOworbmF0aXZlIGhhbGY0IG9wZXJhdG9yLng9KGhh
bGY0LCBoYWxmKTsKK25hdGl2ZSBoYWxmNCBvcGVyYXRvci55PShoYWxmNCwgaGFsZik7CituYXRp
dmUgaGFsZjQgb3BlcmF0b3Iuej0oaGFsZjQsIGhhbGYpOworbmF0aXZlIGhhbGY0IG9wZXJhdG9y
Lnc9KGhhbGY0LCBoYWxmKTsKK25hdGl2ZSBmbG9hdCBvcGVyYXRvci54KGZsb2F0Mik7CituYXRp
dmUgZmxvYXQgb3BlcmF0b3IueShmbG9hdDIpOyovCituYXRpdmUgZmxvYXQgb3BlcmF0b3IueChm
bG9hdDMpOworbmF0aXZlIGZsb2F0IG9wZXJhdG9yLnkoZmxvYXQzKTsKK25hdGl2ZSBmbG9hdCBv
cGVyYXRvci56KGZsb2F0Myk7CituYXRpdmUgZmxvYXQgb3BlcmF0b3IueChmbG9hdDQpOworbmF0
aXZlIGZsb2F0IG9wZXJhdG9yLnkoZmxvYXQ0KTsKK25hdGl2ZSBmbG9hdCBvcGVyYXRvci56KGZs
b2F0NCk7CituYXRpdmUgZmxvYXQgb3BlcmF0b3IudyhmbG9hdDQpOy8qCituYXRpdmUgZmxvYXQy
IG9wZXJhdG9yLng9KGZsb2F0MiwgZmxvYXQpOworbmF0aXZlIGZsb2F0MiBvcGVyYXRvci55PShm
bG9hdDIsIGZsb2F0KTsqLworbmF0aXZlIGZsb2F0MyBvcGVyYXRvci54PShmbG9hdDMsIGZsb2F0
KTsKK25hdGl2ZSBmbG9hdDMgb3BlcmF0b3IueT0oZmxvYXQzLCBmbG9hdCk7CituYXRpdmUgZmxv
YXQzIG9wZXJhdG9yLno9KGZsb2F0MywgZmxvYXQpOworbmF0aXZlIGZsb2F0NCBvcGVyYXRvci54
PShmbG9hdDQsIGZsb2F0KTsKK25hdGl2ZSBmbG9hdDQgb3BlcmF0b3IueT0oZmxvYXQ0LCBmbG9h
dCk7CituYXRpdmUgZmxvYXQ0IG9wZXJhdG9yLno9KGZsb2F0NCwgZmxvYXQpOworbmF0aXZlIGZs
b2F0NCBvcGVyYXRvci53PShmbG9hdDQsIGZsb2F0KTsKIAogbmF0aXZlIGZsb2F0IGRkeChmbG9h
dCk7CiBuYXRpdmUgZmxvYXQgZGR5KGZsb2F0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggYThiYmJmOWY3
OTUxMjFiYTU3NThjODdlNjc4MzM2NTdhN2QxMWFkNy4uOGQ1MGU2M2FkNDAxNzE0NzA3OTBmNTIw
ZTYxODE4MGM3MDk2MjQxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
KysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTMwNiw2ICszMDYsNyBAQCBNb2R1
bGVzL3dlYnNvY2tldHMvV29ya2VyVGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWwuY3BwCiAKIE1v
ZHVsZXMvd2ViZ3B1L0dQVUNhbnZhc0NvbnRleHQuY3BwCiBNb2R1bGVzL3dlYmdwdS9OYXZpZ2F0
b3JHUFUuY3BwCitNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENvbXB1dGVEaW1lbnNpb25zLmNw
cAogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xBU1REdW1wZXIuY3BwCiBNb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTEluZmVyVHlwZXMuY3BwCiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTExl
eGVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dCBiL1Nv
dXJjZS9XZWJDb3JlL1NvdXJjZXNDb2NvYS50eHQKaW5kZXggYmQyOWU1YjQ4Y2JkNjBhOTI0MzVm
M2NhYjFiZTFiN2M4ZmFmYmI4MS4uYjNmMzUxYTZlZDJhMmEyNDhiYThjZDZhZTVkNWE2OGY1ZDA0
Y2YzZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlc0NvY29hLnR4dAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Tb3VyY2VzQ29jb2EudHh0CkBAIC0zMjYsNiArMzI2LDcgQEAgcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbW1hbmRCdWZmZXJNZXRhbC5tbQogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQYXNzRW5jb2Rlck1ldGFsLm1tCiBwbGF0Zm9y
bS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0KIHBsYXRmb3Jt
L2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVEZXZpY2VNZXRhbC5tbQorcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3B1L2NvY29hL0dQVVBpcGVsaW5lTWV0YWxDb252ZXJ0TGF5b3V0LmNwcAogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3B1L2NvY29hL0dQVVByb2dyYW1tYWJsZVBhc3NFbmNvZGVyTWV0YWwubW0KIHBsYXRm
b3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVRdWV1ZU1ldGFsLm1tCiBwbGF0Zm9ybS9ncmFwaGlj
cy9ncHUvY29jb2EvR1BVUmVuZGVyUGFzc0VuY29kZXJNZXRhbC5tbQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGY4NzQ5MWViMTA4
MmEwZGVmODQ0MTQzYWMyZGZmYmI2OGQ5OTM2YzQuLmVmNDA1NjI2MDRkYWYxZWUwNWNiYTg2MTY2
MTQ2NzZiM2NlM2VjMjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKQEAgLTYzOTIsNiArNjM5MiwxMCBAQAogCQkxQzg0MEI5OTIxRUM0
MDA4MDBEMDUwMEQgLyogV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQzg0MEI5QTIxRUM0MDA5MDBEMDUwMEQgLyogV0hMU0xHYXRoZXJFbnRy
eVBvaW50SXRlbXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV0hMU0xHYXRoZXJFbnRyeVBvaW50SXRlbXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUM4NDBCOUIyMUVDNDAwOTAwRDA1MDBE
IC8qIFdITFNMQ2hlY2tlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTENoZWNrZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzg2Q0E0QjIyQUExOUZGMDAxQkY5NjEg
LyogV0hMU0xDb21wdXRlRGltZW5zaW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTENv
bXB1dGVEaW1lbnNpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMUM4NkNB
NEMyMkFBMTlGRjAwMUJGOTYxIC8qIFdITFNMQ29tcHV0ZURpbWVuc2lvbnMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV0hMU0xDb21wdXRlRGltZW5zaW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkxQzg2Q0E0RTIyQUEyM0M5MDAxQkY5NjEgLyogR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRM
YXlvdXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlv
dXQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkxQzg2Q0E0RjIyQUEyM0M5MDAx
QkY5NjEgLyogR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
R1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMUM5MDRERjkwQkE5RDJDODAwODFFOUQwIC8qIFZlcnNpb24ueGNjb25maWcgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0LnhjY29uZmlnOyBwYXRoID0gVmVyc2lvbi54Y2NvbmZpZzsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMUM5QUU1Q0EyMUVEOURGNTAwNjlENUYyIC8qIFdITFNMSGlnaFpv
bWJpZUZpbmRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXSExTTEhpZ2hab21iaWVGaW5kZXIu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzlBRTVDQjIxRUQ5REY1MDA2OUQ1
RjIgLyogV0hMU0xIaWdoWm9tYmllRmluZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdITFNMSGlnaFpv
bWJpZUZpbmRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjU0NDEsNiArMjU0
NDUsOCBAQAogCQkJCUMyMzRBOUFFMjFFOTJDMUEwMDNDOTg0RCAvKiBXSExTTENoZWNrRHVwbGlj
YXRlRnVuY3Rpb25zLmggKi8sCiAJCQkJMUM4NDBCOUIyMUVDNDAwOTAwRDA1MDBEIC8qIFdITFNM
Q2hlY2tlci5jcHAgKi8sCiAJCQkJMUM4NDBCOTcyMUVDNDAwNzAwRDA1MDBEIC8qIFdITFNMQ2hl
Y2tlci5oICovLAorCQkJCTFDODZDQTRCMjJBQTE5RkYwMDFCRjk2MSAvKiBXSExTTENvbXB1dGVE
aW1lbnNpb25zLmNwcCAqLywKKwkJCQkxQzg2Q0E0QzIyQUExOUZGMDAxQkY5NjEgLyogV0hMU0xD
b21wdXRlRGltZW5zaW9ucy5oICovLAogCQkJCTFDQTBDMkU0MjFFRUQxMkEwMEExMTg2MCAvKiBX
SExTTEZ1bmN0aW9uU3RhZ2VDaGVja2VyLmNwcCAqLywKIAkJCQkxQ0EwQzJFNTIxRUVEMTJBMDBB
MTE4NjAgLyogV0hMU0xGdW5jdGlvblN0YWdlQ2hlY2tlci5oICovLAogCQkJCTFDODQwQjk5MjFF
QzQwMDgwMEQwNTAwRCAvKiBXSExTTEdhdGhlckVudHJ5UG9pbnRJdGVtcy5jcHAgKi8sCkBAIC0y
NTk4MCw2ICsyNTk4Niw4IEBACiAJCQkJRDA4OTAzNDAyMjQxQ0U0NjAwRjNGNDQwIC8qIEdQVUNv
bXB1dGVQYXNzRW5jb2Rlck1ldGFsLm1tICovLAogCQkJCUQwODkwMzNCMjI0MTc5QjUwMEYzRjQ0
MCAvKiBHUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbSAqLywKIAkJCQlEMDg3Q0UzQzIxQUNBOTQy
MDBCREUxNzQgLyogR1BVRGV2aWNlTWV0YWwubW0gKi8sCisJCQkJMUM4NkNBNEUyMkFBMjNDOTAw
MUJGOTYxIC8qIEdQVVBpcGVsaW5lTWV0YWxDb252ZXJ0TGF5b3V0LmNwcCAqLywKKwkJCQkxQzg2
Q0E0RjIyQUEyM0M5MDAxQkY5NjEgLyogR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuaCAq
LywKIAkJCQlEMDg3Q0UzQjIxQUNBOTQyMDBCREUxNzQgLyogR1BVUHJvZ3JhbW1hYmxlUGFzc0Vu
Y29kZXJNZXRhbC5tbSAqLywKIAkJCQlEMDg3Q0UzOTIxQUNBOTQyMDBCREUxNzQgLyogR1BVUXVl
dWVNZXRhbC5tbSAqLywKIAkJCQlEMDg3Q0UzQTIxQUNBOTQyMDBCREUxNzQgLyogR1BVUmVuZGVy
UGFzc0VuY29kZXJNZXRhbC5tbSAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dwdS9HUFVDb21wdXRlUGlwZWxpbmUuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dwdS9HUFVDb21wdXRlUGlwZWxpbmUuaAppbmRleCAwMzU5ZjI5YmVk
MDYwMWU3NzhlZWY0ZmRlMjg1M2RhZjA3NDVmMDZjLi42NTM2N2M5ZDkzNDNhNWM0NjkxODc4YTE5
NGMzMmQ4NDA4N2IxMDEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ncHUvR1BVQ29tcHV0ZVBpcGVsaW5lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3B1L0dQVUNvbXB1dGVQaXBlbGluZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAK
ICNpZiBFTkFCTEUoV0VCR1BVKQogCisjaW5jbHVkZSAiV0hMU0xQcmVwYXJlLmgiCiAjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAjaW5jbHVkZSA8
d3RmL1JldGFpblB0ci5oPgpAQCAtNDgsMTAgKzQ5LDEzIEBAIHB1YmxpYzoKIAogICAgIGNvbnN0
IFBsYXRmb3JtQ29tcHV0ZVBpcGVsaW5lKiBwbGF0Zm9ybUNvbXB1dGVQaXBlbGluZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcGxhdGZvcm1Db21wdXRlUGlwZWxpbmUuZ2V0KCk7IH0KIAorICAgIFdITFNM
OjpDb21wdXRlRGltZW5zaW9ucyBjb21wdXRlRGltZW5zaW9ucygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29tcHV0ZURpbWVuc2lvbnM7IH0KKwogcHJpdmF0ZToKLSAgICBHUFVDb21wdXRlUGlwZWxpbmUo
UGxhdGZvcm1Db21wdXRlUGlwZWxpbmVTbWFydFB0ciYmKTsKKyAgICBHUFVDb21wdXRlUGlwZWxp
bmUoUGxhdGZvcm1Db21wdXRlUGlwZWxpbmVTbWFydFB0ciYmLCBXSExTTDo6Q29tcHV0ZURpbWVu
c2lvbnMpOwogCiAgICAgUGxhdGZvcm1Db21wdXRlUGlwZWxpbmVTbWFydFB0ciBtX3BsYXRmb3Jt
Q29tcHV0ZVBpcGVsaW5lOworICAgIFdITFNMOjpDb21wdXRlRGltZW5zaW9ucyBtX2NvbXB1dGVE
aW1lbnNpb25zIHsgMCwgMCwgMCB9OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNv
bXB1dGVQYXNzRW5jb2Rlck1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQYXNzRW5jb2Rlck1ldGFsLm1tCmluZGV4IDcxM2MxYjc5
MTA3NWEwODZiOTBiMzEzMDk5MTRhNDA1ZDZhZmU2ODIuLjZiZDI4ZjcwMTcwNzJlMWNjYmQ1Yzcx
MDY5NTRkNGI0NGFmODJmZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dwdS9jb2NvYS9HUFVDb21wdXRlUGFzc0VuY29kZXJNZXRhbC5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBhc3NFbmNv
ZGVyTWV0YWwubW0KQEAgLTk3LDExICs5Nyw3IEBAIHZvaWQgR1BVQ29tcHV0ZVBhc3NFbmNvZGVy
OjpkaXNwYXRjaCh1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LCB1bnNpZ25lZCB6KQogCiAgICAgQkVH
SU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgYXV0byB3ID0gcGlwZWxpbmVTdGF0ZS50
aHJlYWRFeGVjdXRpb25XaWR0aDsKLSAgICBhdXRvIGggPSBwaXBlbGluZVN0YXRlLm1heFRvdGFs
VGhyZWFkc1BlclRocmVhZGdyb3VwIC8gdzsKLQotICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBi
ZSBnbGVhbmVkIGZyb20gdGhlIHNoYWRlciBpZiBub3QgdXNpbmcgTVNMLiBGb3Igbm93LCB1c2Ug
dGhlIGRvY3MnIGV4YW1wbGUgY2FsY3VsYXRpb24uCi0gICAgYXV0byB0aHJlYWRzUGVyVGhyZWFk
Z3JvdXAgPSBNVExTaXplTWFrZSh3LCBoLCAxKTsKKyAgICBhdXRvIHRocmVhZHNQZXJUaHJlYWRn
cm91cCA9IE1UTFNpemVNYWtlKG1fcGlwZWxpbmUtPmNvbXB1dGVEaW1lbnNpb25zKCkud2lkdGgs
IG1fcGlwZWxpbmUtPmNvbXB1dGVEaW1lbnNpb25zKCkuaGVpZ2h0LCBtX3BpcGVsaW5lLT5jb21w
dXRlRGltZW5zaW9ucygpLmRlcHRoKTsKIAogICAgIGF1dG8gdGhyZWFkZ3JvdXBzUGVyR3JpZCA9
IE1UTFNpemVNYWtlKHgsIHksIHopOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5lTWV0YWwubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29jb2EvR1BVQ29tcHV0ZVBpcGVsaW5l
TWV0YWwubW0KaW5kZXggZmJlNDNmNDQxYzgzYTg0NDVjMGJjMDFiZDUzN2IwODE1MDFhYzc5ZC4u
ZDZlY2VkNDRmNGI1YTkxMzBjNTY1NTI3MThkNGRlNTdkNjZkNTlkNyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVUNvbXB1dGVQaXBlbGlu
ZU1ldGFsLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2Nv
YS9HUFVDb21wdXRlUGlwZWxpbmVNZXRhbC5tbQpAQCAtMzAsNjggKzMwLDE3MiBAQAogCiAjaW1w
b3J0ICJHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yLmgiCiAjaW1wb3J0ICJHUFVEZXZpY2Uu
aCIKKyNpbXBvcnQgIkdQVVBpcGVsaW5lTWV0YWxDb252ZXJ0TGF5b3V0LmgiCiAjaW1wb3J0ICJM
b2dnaW5nLmgiCisjaW1wb3J0ICJXSExTTFByZXBhcmUuaCIKICNpbXBvcnQgPE1ldGFsL01ldGFs
Lmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tPYmpDRXhjZXB0aW9ucy5oPgogCi1PQkpDX1BST1RPQ09M
KE1UTEZ1bmN0aW9uKTsKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdGF0aWMgUmV0YWluUHRy
PE1UTEZ1bmN0aW9uPiB0cnlDcmVhdGVNdGxDb21wdXRlRnVuY3Rpb24oY29uc3QgR1BVUGlwZWxp
bmVTdGFnZURlc2NyaXB0b3ImIHN0YWdlKQorc3RhdGljIGJvb2wgdHJ5U2V0TWV0YWxGdW5jdGlv
bnMoY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lLCBNVExMaWJyYXJ5ICpjb21wdXRlTWV0
YWxMaWJyYXJ5LCBNVExDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yICptdGxEZXNjcmlwdG9yLCBj
b25zdCBTdHJpbmcmIGNvbXB1dGVFbnRyeVBvaW50TmFtZSkKIHsKLSAgICBpZiAoIXN0YWdlLm1v
ZHVsZS0+cGxhdGZvcm1TaGFkZXJNb2R1bGUoKSB8fCBzdGFnZS5lbnRyeVBvaW50LmlzTnVsbCgp
KSB7Ci0gICAgICAgIExPRyhXZWJHUFUsICJHUFVDb21wdXRlUGlwZWxpbmU6OnRyeUNyZWF0ZSgp
OiBJbnZhbGlkIEdQVVNoYWRlck1vZHVsZSEiKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisj
aWYgTE9HX0RJU0FCTEVECisgICAgVU5VU0VEX1BBUkFNKGZ1bmN0aW9uTmFtZSk7CisjZW5kaWYK
KworICAgIEJFR0lOX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsKKworICAgIGlmICghY29tcHV0ZU1l
dGFsTGlicmFyeSkgeworICAgICAgICBMT0coV2ViR1BVLCAiJXM6IE1UTExpYnJhcnkgZm9yIGNv
bXB1dGUgc3RhZ2UgZG9lcyBub3QgZXhpc3QhIiwgZnVuY3Rpb25OYW1lKTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIGF1dG8gZnVuY3Rpb24gPSBhZG9wdE5TKFtjb21wdXRl
TWV0YWxMaWJyYXJ5IG5ld0Z1bmN0aW9uV2l0aE5hbWU6Y29tcHV0ZUVudHJ5UG9pbnROYW1lXSk7
CisgICAgaWYgKCFmdW5jdGlvbikgeworICAgICAgICBMT0coV2ViR1BVLCAiJXM6IENhbm5vdCBj
cmVhdGUgY29tcHV0ZSBNVExGdW5jdGlvbiBcIiVzXCIhIiwgZnVuY3Rpb25OYW1lLCBjb21wdXRl
RW50cnlQb2ludE5hbWUudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBbbXRsRGVzY3JpcHRvciBzZXRDb21wdXRlRnVuY3Rpb246ZnVuY3Rpb24uZ2V0
KCldOworICAgIHJldHVybiB0cnVlOworCisgICAgRU5EX0JMT0NLX09CSkNfRVhDRVBUSU9OUzsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIE9wdGlvbmFsPFdITFNMOjpDb21wdXRl
RGltZW5zaW9ucz4gdHJ5U2V0RnVuY3Rpb25zKGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFt
ZSwgY29uc3QgR1BVUGlwZWxpbmVTdGFnZURlc2NyaXB0b3ImIGNvbXB1dGVTdGFnZSwgY29uc3Qg
R1BVRGV2aWNlJiBkZXZpY2UsIE1UTENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IqIG10bERlc2Ny
aXB0b3IsIE9wdGlvbmFsPFdITFNMOjpDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yPiYgd2hsc2xE
ZXNjcmlwdG9yKQoreworI2lmIExPR19ESVNBQkxFRAorICAgIFVOVVNFRF9QQVJBTShmdW5jdGlv
bk5hbWUpOworI2VuZGlmCisgICAgUmV0YWluUHRyPE1UTExpYnJhcnk+IGNvbXB1dGVMaWJyYXJ5
OworICAgIFN0cmluZyBjb21wdXRlRW50cnlQb2ludDsKKworICAgIFdITFNMOjpDb21wdXRlRGlt
ZW5zaW9ucyBjb21wdXRlRGltZW5zaW9ucyB7IDEsIDEsIDEgfTsKKworICAgIGlmICh3aGxzbERl
c2NyaXB0b3IpIHsKKyAgICAgICAgLy8gV0hMU0wgZnVuY3Rpb25zIGFyZSBjb21waWxlZCB0byBN
U0wgZmlyc3QuCisgICAgICAgIFN0cmluZyB3aGxzbFNvdXJjZSA9IGNvbXB1dGVTdGFnZS5tb2R1
bGUtPndobHNsU291cmNlKCk7CisgICAgICAgIEFTU0VSVCghd2hsc2xTb3VyY2UuaXNOdWxsKCkp
OworCisgICAgICAgIHdobHNsRGVzY3JpcHRvci0+ZW50cnlQb2ludE5hbWUgPSBjb21wdXRlU3Rh
Z2UuZW50cnlQb2ludDsKKworICAgICAgICBhdXRvIHdobHNsQ29tcGlsZVJlc3VsdCA9IFdITFNM
OjpwcmVwYXJlKHdobHNsU291cmNlLCAqd2hsc2xEZXNjcmlwdG9yKTsKKyAgICAgICAgaWYgKCF3
aGxzbENvbXBpbGVSZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAg
ICAgICBjb21wdXRlRGltZW5zaW9ucyA9IHdobHNsQ29tcGlsZVJlc3VsdC0+Y29tcHV0ZURpbWVu
c2lvbnM7CisKKyAgICAgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CisKKyAgICAgICAgQkVHSU5f
QkxPQ0tfT0JKQ19FWENFUFRJT05TOworICAgICAgICBjb21wdXRlTGlicmFyeSA9IGFkb3B0TlMo
W2RldmljZS5wbGF0Zm9ybURldmljZSgpIG5ld0xpYnJhcnlXaXRoU291cmNlOndobHNsQ29tcGls
ZVJlc3VsdC0+bWV0YWxTb3VyY2Ugb3B0aW9uczpuaWwgZXJyb3I6JmVycm9yXSk7CisgICAgICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICAgICAgQVNTRVJUKGNvbXB1dGVMaWJy
YXJ5KTsKKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xOTU3NzEgT25jZSB3ZSB6ZXJvLWZpbGwgdmFyaWFibGVzLCB0aGVyZSBzaG91bGQg
YmUgbm8gd2FybmluZ3MsIHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIEFTU0VSVCghZXJyb3IpIGhl
cmUuCisKKyAgICAgICAgY29tcHV0ZUVudHJ5UG9pbnQgPSB3aGxzbENvbXBpbGVSZXN1bHQtPm1h
bmdsZWRFbnRyeVBvaW50TmFtZTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb21wdXRlTGlicmFy
eSA9IGNvbXB1dGVTdGFnZS5tb2R1bGUtPnBsYXRmb3JtU2hhZGVyTW9kdWxlKCk7CisgICAgICAg
IGNvbXB1dGVFbnRyeVBvaW50ID0gY29tcHV0ZVN0YWdlLmVudHJ5UG9pbnQ7CiAgICAgfQogCi0g
ICAgUmV0YWluUHRyPE1UTEZ1bmN0aW9uPiBmdW5jdGlvbjsKKyAgICBpZiAodHJ5U2V0TWV0YWxG
dW5jdGlvbnMoZnVuY3Rpb25OYW1lLCBjb21wdXRlTGlicmFyeS5nZXQoKSwgbXRsRGVzY3JpcHRv
ciwgY29tcHV0ZUVudHJ5UG9pbnQpKQorICAgICAgICByZXR1cm4gY29tcHV0ZURpbWVuc2lvbnM7
CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKK30KKworc3RydWN0IENvbnZlcnRSZXN1bHQgewor
ICAgIFJldGFpblB0cjxNVExDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yPiBwaXBlbGluZURlc2Ny
aXB0b3I7CisgICAgV0hMU0w6OkNvbXB1dGVEaW1lbnNpb25zIGNvbXB1dGVEaW1lbnNpb25zOwor
fTsKK3N0YXRpYyBPcHRpb25hbDxDb252ZXJ0UmVzdWx0PiBjb252ZXJ0Q29tcHV0ZVBpcGVsaW5l
RGVzY3JpcHRvcihjb25zdCBjaGFyKiBjb25zdCBmdW5jdGlvbk5hbWUsIGNvbnN0IEdQVUNvbXB1
dGVQaXBlbGluZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IsIGNvbnN0IEdQVURldmljZSYgZGV2aWNl
KQoreworICAgIFJldGFpblB0cjxNVExDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yPiBtdGxEZXNj
cmlwdG9yOwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwotICAgIGZ1bmN0aW9u
ID0gYWRvcHROUyhbc3RhZ2UubW9kdWxlLT5wbGF0Zm9ybVNoYWRlck1vZHVsZSgpIG5ld0Z1bmN0
aW9uV2l0aE5hbWU6c3RhZ2UuZW50cnlQb2ludF0pOworCisgICAgbXRsRGVzY3JpcHRvciA9IGFk
b3B0TlMoW01UTENvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgbmV3XSk7CisKICAgICBFTkRfQkxP
Q0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgaWYgKCFmdW5jdGlvbikKLSAgICAgICAgTE9HKFdl
YkdQVSwgIkdQVUNvbXB1dGVQaXBlbGluZTo6dHJ5Q3JlYXRlKCk6IENhbm5vdCBjcmVhdGUgY29t
cHV0ZSBNVExGdW5jdGlvbiBcIiVzXCIhIiwgc3RhZ2UuZW50cnlQb2ludC51dGY4KCkuZGF0YSgp
KTsKKyAgICBpZiAoIW10bERlc2NyaXB0b3IpIHsKKyAgICAgICAgTE9HKFdlYkdQVSwgIiVzOiBF
cnJvciBjcmVhdGluZyBNVExEZXNjcmlwdG9yISIsIGZ1bmN0aW9uTmFtZSk7CisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisgICAgfQorCisgICAgY29uc3QgYXV0byYgY29tcHV0ZVN0YWdl
ID0gZGVzY3JpcHRvci5jb21wdXRlU3RhZ2U7CisKKyAgICBib29sIGlzV2hsc2wgPSAhY29tcHV0
ZVN0YWdlLm1vZHVsZS0+d2hsc2xTb3VyY2UoKS5pc051bGwoKTsKKworICAgIE9wdGlvbmFsPFdI
TFNMOjpDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yPiB3aGxzbERlc2NyaXB0b3I7CisgICAgaWYg
KGlzV2hsc2wpCisgICAgICAgIHdobHNsRGVzY3JpcHRvciA9IFdITFNMOjpDb21wdXRlUGlwZWxp
bmVEZXNjcmlwdG9yKCk7CisKKyAgICBpZiAoZGVzY3JpcHRvci5sYXlvdXQgJiYgd2hsc2xEZXNj
cmlwdG9yKSB7CisgICAgICAgIGlmIChhdXRvIGxheW91dCA9IGNvbnZlcnRMYXlvdXQoKmRlc2Ny
aXB0b3IubGF5b3V0KSkKKyAgICAgICAgICAgIHdobHNsRGVzY3JpcHRvci0+bGF5b3V0ID0gV1RG
TW92ZSgqbGF5b3V0KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBMT0coV2ViR1BVLCAi
JXM6IEVycm9yIGNvbnZlcnRpbmcgR1BVUGlwZWxpbmVMYXlvdXQhIiwgZnVuY3Rpb25OYW1lKTsK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoYXV0byBjb21wdXRlRGltZW5zaW9ucyA9IHRyeVNldEZ1bmN0aW9ucyhmdW5jdGlvbk5h
bWUsIGNvbXB1dGVTdGFnZSwgZGV2aWNlLCBtdGxEZXNjcmlwdG9yLmdldCgpLCB3aGxzbERlc2Ny
aXB0b3IpKQorICAgICAgICByZXR1cm4ge3sgbXRsRGVzY3JpcHRvciwgKmNvbXB1dGVEaW1lbnNp
b25zIH19OwogCi0gICAgcmV0dXJuIGZ1bmN0aW9uOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiB9CiAKLXN0YXRpYyBSZXRhaW5QdHI8TVRMQ29tcHV0ZVBpcGVsaW5lU3RhdGU+IHRyeUNyZWF0
ZU1UTENvbXB1dGVQaXBlbGluZVN0YXRlKGNvbnN0IEdQVURldmljZSYgZGV2aWNlLCBjb25zdCBH
UFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQorc3RydWN0IENyZWF0ZVJl
c3VsdCB7CisgICAgUmV0YWluUHRyPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPiBwaXBlbGluZVN0
YXRlOworICAgIFdITFNMOjpDb21wdXRlRGltZW5zaW9ucyBjb21wdXRlRGltZW5zaW9uczsKK307
CitzdGF0aWMgT3B0aW9uYWw8Q3JlYXRlUmVzdWx0PiB0cnlDcmVhdGVNVExDb21wdXRlUGlwZWxp
bmVTdGF0ZShjb25zdCBjaGFyKiBjb25zdCBmdW5jdGlvbk5hbWUsIGNvbnN0IEdQVURldmljZSYg
ZGV2aWNlLCBjb25zdCBHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQog
ewogICAgIGlmICghZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkpIHsKICAgICAgICAgTE9HKFdlYkdQ
VSwgIkdQVUNvbXB1dGVQaXBlbGluZTo6dHJ5Q3JlYXRlKCk6IEludmFsaWQgR1BVRGV2aWNlISIp
OwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICB9CiAKLSAgICBhdXRvIGNvbXB1dGVGdW5jdGlvbiA9IHRyeUNyZWF0ZU10bENvbXB1dGVG
dW5jdGlvbihkZXNjcmlwdG9yLmNvbXB1dGVTdGFnZSk7Ci0gICAgaWYgKCFjb21wdXRlRnVuY3Rp
b24pCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gY29udmVydFJlc3VsdCA9IGNv
bnZlcnRDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKGZ1bmN0aW9uTmFtZSwgZGVzY3JpcHRvciwg
ZGV2aWNlKTsKKyAgICBpZiAoIWNvbnZlcnRSZXN1bHQpCisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CisgICAgQVNTRVJUKGNvbnZlcnRSZXN1bHQtPnBpcGVsaW5lRGVzY3JpcHRvcik7Cisg
ICAgYXV0byBtdGxEZXNjcmlwdG9yID0gY29udmVydFJlc3VsdC0+cGlwZWxpbmVEZXNjcmlwdG9y
OwogCi0gICAgUmV0YWluUHRyPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPiBwaXBlbGluZVN0YXRl
OwotICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIFJldGFpblB0cjxNVExDb21wdXRlUGlw
ZWxpbmVTdGF0ZT4gcGlwZWxpbmU7CiAKICAgICBCRUdJTl9CTE9DS19PQkpDX0VYQ0VQVElPTlM7
Ci0gICAgcGlwZWxpbmVTdGF0ZSA9IGFkb3B0TlMoW2RldmljZS5wbGF0Zm9ybURldmljZSgpIG5l
d0NvbXB1dGVQaXBlbGluZVN0YXRlV2l0aEZ1bmN0aW9uOmNvbXB1dGVGdW5jdGlvbi5nZXQoKSBl
cnJvcjomZXJyb3JdKTsKLSAgICBFTkRfQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgaWYg
KCFwaXBlbGluZVN0YXRlKQorICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOworICAgIHBpcGVsaW5l
ID0gYWRvcHROUyhbZGV2aWNlLnBsYXRmb3JtRGV2aWNlKCkgbmV3Q29tcHV0ZVBpcGVsaW5lU3Rh
dGVXaXRoRGVzY3JpcHRvcjptdGxEZXNjcmlwdG9yLmdldCgpIG9wdGlvbnM6TVRMUGlwZWxpbmVP
cHRpb25Ob25lIHJlZmxlY3Rpb246bmlsIGVycm9yOiZlcnJvcl0pOworICAgIGlmICghcGlwZWxp
bmUpIHsKICAgICAgICAgTE9HKFdlYkdQVSwgIkdQVUNvbXB1dGVQaXBlbGluZTo6dHJ5Q3JlYXRl
KCk6ICVzISIsIGVycm9yID8gZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24uVVRGOFN0cmluZyA6
ICJVbmFibGUgdG8gY3JlYXRlIE1UTENvbXB1dGVQaXBlbGluZVN0YXRlISIpOworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0KIAotICAgIHJldHVybiBwaXBlbGluZVN0YXRlOwor
ICAgIEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlM7CisKKyAgICByZXR1cm4ge3sgcGlwZWxpbmUs
IGNvbnZlcnRSZXN1bHQtPmNvbXB1dGVEaW1lbnNpb25zIH19OwogfQogCiBSZWZQdHI8R1BVQ29t
cHV0ZVBpcGVsaW5lPiBHUFVDb21wdXRlUGlwZWxpbmU6OnRyeUNyZWF0ZShjb25zdCBHUFVEZXZp
Y2UmIGRldmljZSwgY29uc3QgR1BVQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciYgZGVzY3JpcHRv
cikKIHsKLSAgICBhdXRvIG10bFBpcGVsaW5lID0gdHJ5Q3JlYXRlTVRMQ29tcHV0ZVBpcGVsaW5l
U3RhdGUoZGV2aWNlLCBkZXNjcmlwdG9yKTsKLSAgICBpZiAoIW10bFBpcGVsaW5lKQorICAgIGNv
bnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSA9ICJHUFVSZW5kZXJQaXBlbGluZTo6Y3JlYXRl
KCkiOworCisgICAgYXV0byBjcmVhdGVSZXN1bHQgPSB0cnlDcmVhdGVNVExDb21wdXRlUGlwZWxp
bmVTdGF0ZShmdW5jdGlvbk5hbWUsIGRldmljZSwgZGVzY3JpcHRvcik7CisgICAgaWYgKCFjcmVh
dGVSZXN1bHQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyBHUFVDb21wdXRlUGlwZWxpbmUoV1RGTW92ZShtdGxQaXBlbGluZSkpKTsKKyAgICByZXR1
cm4gYWRvcHRSZWYobmV3IEdQVUNvbXB1dGVQaXBlbGluZShXVEZNb3ZlKGNyZWF0ZVJlc3VsdC0+
cGlwZWxpbmVTdGF0ZSksIGNyZWF0ZVJlc3VsdC0+Y29tcHV0ZURpbWVuc2lvbnMpKTsKIH0KIAot
R1BVQ29tcHV0ZVBpcGVsaW5lOjpHUFVDb21wdXRlUGlwZWxpbmUoUmV0YWluUHRyPE1UTENvbXB1
dGVQaXBlbGluZVN0YXRlPiYmIHBpcGVsaW5lKQorR1BVQ29tcHV0ZVBpcGVsaW5lOjpHUFVDb21w
dXRlUGlwZWxpbmUoUmV0YWluUHRyPE1UTENvbXB1dGVQaXBlbGluZVN0YXRlPiYmIHBpcGVsaW5l
LCBXSExTTDo6Q29tcHV0ZURpbWVuc2lvbnMgY29tcHV0ZURpbWVuc2lvbnMpCiAgICAgOiBtX3Bs
YXRmb3JtQ29tcHV0ZVBpcGVsaW5lKFdURk1vdmUocGlwZWxpbmUpKQorICAgICwgbV9jb21wdXRl
RGltZW5zaW9ucyhjb21wdXRlRGltZW5zaW9ucykKIHsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVBpcGVsaW5lTWV0YWxDb252
ZXJ0TGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2Nv
YS9HUFVQaXBlbGluZU1ldGFsQ29udmVydExheW91dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmQ1NzY4OGY1
YmUxODdjNjY0ZGQxMzhmZTI0NjUyZmQxMTA3NDNmZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVQaXBlbGluZU1ldGFsQ29u
dmVydExheW91dC5jcHAKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHUFVQaXBlbGluZU1ldGFsQ29udmVydExheW91dC5oIgorCisj
aW5jbHVkZSAiR1BVUGlwZWxpbmVMYXlvdXQuaCIKKworI2lmIEVOQUJMRShXRUJHUFUpCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIE9wdGlvblNldDxXSExTTDo6U2hhZGVyU3RhZ2U+
IGNvbnZlcnRTaGFkZXJTdGFnZUZsYWdzKEdQVVNoYWRlclN0YWdlRmxhZ3MgZmxhZ3MpCit7Cisg
ICAgT3B0aW9uU2V0PFdITFNMOjpTaGFkZXJTdGFnZT4gcmVzdWx0OworICAgIGlmIChmbGFncyAm
IEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6VmVydGV4KQorICAgICAgICByZXN1bHQuYWRkKFdI
TFNMOjpTaGFkZXJTdGFnZTo6VmVydGV4KTsKKyAgICBpZiAoZmxhZ3MgJiBHUFVTaGFkZXJTdGFn
ZUJpdDo6RmxhZ3M6OkZyYWdtZW50KQorICAgICAgICByZXN1bHQuYWRkKFdITFNMOjpTaGFkZXJT
dGFnZTo6RnJhZ21lbnQpOworICAgIGlmIChmbGFncyAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFn
czo6Q29tcHV0ZSkKKyAgICAgICAgcmVzdWx0LmFkZChXSExTTDo6U2hhZGVyU3RhZ2U6OkNvbXB1
dGUpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBPcHRpb25hbDxXSExTTDo6Qmlu
ZGluZzo6QmluZGluZ0RldGFpbHM+IGNvbnZlcnRCaW5kaW5nVHlwZShHUFVCaW5kR3JvdXBMYXlv
dXQ6OkludGVybmFsQmluZGluZ0RldGFpbHMgaW50ZXJuYWxCaW5kaW5nRGV0YWlscykKK3sKKyAg
ICByZXR1cm4gV1RGOjp2aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShHUFVCaW5kR3JvdXBMYXlv
dXQ6OlVuaWZvcm1CdWZmZXIgdW5pZm9ybUJ1ZmZlcikgLT4gT3B0aW9uYWw8V0hMU0w6OkJpbmRp
bmc6OkJpbmRpbmdEZXRhaWxzPiB7CisgICAgICAgIHJldHVybiB7IFdITFNMOjpVbmlmb3JtQnVm
ZmVyQmluZGluZyB7IHVuaWZvcm1CdWZmZXIuaW50ZXJuYWxMZW5ndGhOYW1lIH0gfTsKKyAgICB9
LCBbJl0oR1BVQmluZEdyb3VwTGF5b3V0OjpEeW5hbWljVW5pZm9ybUJ1ZmZlcikgLT4gT3B0aW9u
YWw8V0hMU0w6OkJpbmRpbmc6OkJpbmRpbmdEZXRhaWxzPiB7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisgICAgfSwgWyZdKEdQVUJpbmRHcm91cExheW91dDo6U2FtcGxlcikgLT4gT3B0
aW9uYWw8V0hMU0w6OkJpbmRpbmc6OkJpbmRpbmdEZXRhaWxzPiB7CisgICAgICAgIHJldHVybiB7
IFdITFNMOjpTYW1wbGVyQmluZGluZyB7IH0gfTsKKyAgICB9LCBbJl0oR1BVQmluZEdyb3VwTGF5
b3V0OjpTYW1wbGVkVGV4dHVyZSkgLT4gT3B0aW9uYWw8V0hMU0w6OkJpbmRpbmc6OkJpbmRpbmdE
ZXRhaWxzPiB7CisgICAgICAgIHJldHVybiB7IFdITFNMOjpUZXh0dXJlQmluZGluZyB7IH0gfTsK
KyAgICB9LCBbJl0oR1BVQmluZEdyb3VwTGF5b3V0OjpTdG9yYWdlQnVmZmVyIHN0b3JhZ2VCdWZm
ZXIpIC0+IE9wdGlvbmFsPFdITFNMOjpCaW5kaW5nOjpCaW5kaW5nRGV0YWlscz4geworICAgICAg
ICByZXR1cm4geyBXSExTTDo6U3RvcmFnZUJ1ZmZlckJpbmRpbmcgeyBzdG9yYWdlQnVmZmVyLmlu
dGVybmFsTGVuZ3RoTmFtZSB9IH07CisgICAgfSwgWyZdKEdQVUJpbmRHcm91cExheW91dDo6RHlu
YW1pY1N0b3JhZ2VCdWZmZXIpIC0+IE9wdGlvbmFsPFdITFNMOjpCaW5kaW5nOjpCaW5kaW5nRGV0
YWlscz4geworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworICAgIH0pLCBpbnRlcm5hbEJp
bmRpbmdEZXRhaWxzKTsKK30KKworT3B0aW9uYWw8V0hMU0w6OkxheW91dD4gY29udmVydExheW91
dChjb25zdCBHUFVQaXBlbGluZUxheW91dCYgbGF5b3V0KQoreworICAgIFdITFNMOjpMYXlvdXQg
cmVzdWx0OworICAgIGlmIChsYXlvdXQuYmluZEdyb3VwTGF5b3V0cygpLnNpemUoKSA+IHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxheW91dC5iaW5kR3JvdXBMYXlvdXRz
KCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgYXV0byYgYmluZEdyb3VwTGF5b3V0ID0g
bGF5b3V0LmJpbmRHcm91cExheW91dHMoKVtpXTsKKyAgICAgICAgV0hMU0w6OkJpbmRHcm91cCBi
aW5kR3JvdXA7CisgICAgICAgIGJpbmRHcm91cC5uYW1lID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGkpOworICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGtleVZhbHVlUGFpciA6IGJpbmRHcm91cExh
eW91dC0+YmluZGluZ3NNYXAoKSkgeworICAgICAgICAgICAgY29uc3QgYXV0byYgYmluZGluZ0Rl
dGFpbHMgPSBrZXlWYWx1ZVBhaXIudmFsdWU7CisgICAgICAgICAgICBXSExTTDo6QmluZGluZyBi
aW5kaW5nOworICAgICAgICAgICAgYmluZGluZy52aXNpYmlsaXR5ID0gY29udmVydFNoYWRlclN0
YWdlRmxhZ3MoYmluZGluZ0RldGFpbHMuZXh0ZXJuYWxCaW5kaW5nLnZpc2liaWxpdHkpOworICAg
ICAgICAgICAgaWYgKGF1dG8gYmluZGluZ1R5cGUgPSBjb252ZXJ0QmluZGluZ1R5cGUoYmluZGlu
Z0RldGFpbHMuaW50ZXJuYWxCaW5kaW5nRGV0YWlscykpCisgICAgICAgICAgICAgICAgYmluZGlu
Zy5iaW5kaW5nID0gKmJpbmRpbmdUeXBlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisgICAgICAgICAgICBpZiAoYmluZGluZ0RldGFpbHMu
ZXh0ZXJuYWxCaW5kaW5nLmJpbmRpbmcgPiBzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6
bWF4KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKyAgICAgICAgICAg
IGJpbmRpbmcuZXh0ZXJuYWxOYW1lID0gYmluZGluZ0RldGFpbHMuZXh0ZXJuYWxCaW5kaW5nLmJp
bmRpbmc7CisgICAgICAgICAgICBiaW5kaW5nLmludGVybmFsTmFtZSA9IGJpbmRpbmdEZXRhaWxz
LmludGVybmFsTmFtZTsKKyAgICAgICAgICAgIGJpbmRHcm91cC5iaW5kaW5ncy5hcHBlbmQoV1RG
TW92ZShiaW5kaW5nKSk7CisgICAgICAgIH0KKyAgICAgICAgcmVzdWx0LmFwcGVuZChXVEZNb3Zl
KGJpbmRHcm91cCkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCR1BVKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVBpcGVsaW5lTWV0YWxD
b252ZXJ0TGF5b3V0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ncHUvY29j
b2EvR1BVUGlwZWxpbmVNZXRhbENvbnZlcnRMYXlvdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZTI5ZDkzYWYw
MjVlYTJlMWE2MTFjY2FmMzkyZTAwY2MxNmJiNjIwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVBpcGVsaW5lTWV0YWxDb252
ZXJ0TGF5b3V0LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMUGlwZWxpbmVEZXNjcmlwdG9y
LmgiCisjaW5jbHVkZSA8d3RmL09wdGlvbmFsLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgR1BVUGlwZWxpbmVMYXlvdXQ7CisKK09wdGlvbmFsPFdITFNMOjpMYXlvdXQ+IGNvbnZl
cnRMYXlvdXQoY29uc3QgR1BVUGlwZWxpbmVMYXlvdXQmKTsKKworfQorCisjZW5kaWYKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dwdS9jb2NvYS9HUFVSZW5k
ZXJQaXBlbGluZU1ldGFsLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0KaW5kZXggMmJiNjIwNDA5NDEwZGVhZjY1
OWIwYWQ0OTIyMzA5MWNlYjFmOTliYS4uMTc0NWRmMDE3YjY3ZGQ0ZWM4MDIwYzQwY2VhZDQwZWMz
ZDY3NjVjMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3B1
L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3B1L2NvY29hL0dQVVJlbmRlclBpcGVsaW5lTWV0YWwubW0KQEAgLTMw
LDYgKzMwLDcgQEAKIAogI2ltcG9ydCAiR1BVRGV2aWNlLmgiCiAjaW1wb3J0ICJHUFVMaW1pdHMu
aCIKKyNpbXBvcnQgIkdQVVBpcGVsaW5lTWV0YWxDb252ZXJ0TGF5b3V0LmgiCiAjaW1wb3J0ICJH
UFVVdGlscy5oIgogI2ltcG9ydCAiTG9nZ2luZy5oIgogI2ltcG9ydCAiV0hMU0xQcmVwYXJlLmgi
CkBAIC05OCwzNCArOTksNiBAQCBzdGF0aWMgV0hMU0w6OlZlcnRleEZvcm1hdCBjb252ZXJ0VmVy
dGV4Rm9ybWF0KEdQVVZlcnRleEZvcm1hdCB2ZXJ0ZXhGb3JtYXQpCiAgICAgfQogfQogCi1zdGF0
aWMgT3B0aW9uU2V0PFdITFNMOjpTaGFkZXJTdGFnZT4gY29udmVydFNoYWRlclN0YWdlRmxhZ3Mo
R1BVU2hhZGVyU3RhZ2VGbGFncyBmbGFncykKLXsKLSAgICBPcHRpb25TZXQ8V0hMU0w6OlNoYWRl
clN0YWdlPiByZXN1bHQ7Ci0gICAgaWYgKGZsYWdzICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdz
OjpWZXJ0ZXgpCi0gICAgICAgIHJlc3VsdC5hZGQoV0hMU0w6OlNoYWRlclN0YWdlOjpWZXJ0ZXgp
OwotICAgIGlmIChmbGFncyAmIEdQVVNoYWRlclN0YWdlQml0OjpGbGFnczo6RnJhZ21lbnQpCi0g
ICAgICAgIHJlc3VsdC5hZGQoV0hMU0w6OlNoYWRlclN0YWdlOjpGcmFnbWVudCk7Ci0gICAgaWYg
KGZsYWdzICYgR1BVU2hhZGVyU3RhZ2VCaXQ6OkZsYWdzOjpDb21wdXRlKQotICAgICAgICByZXN1
bHQuYWRkKFdITFNMOjpTaGFkZXJTdGFnZTo6Q29tcHV0ZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsK
LX0KLQotc3RhdGljIE9wdGlvbmFsPFdITFNMOjpCaW5kaW5nVHlwZT4gY29udmVydEJpbmRpbmdU
eXBlKEdQVUJpbmRpbmdUeXBlIHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2Fz
ZSBHUFVCaW5kaW5nVHlwZTo6VW5pZm9ybUJ1ZmZlcjoKLSAgICAgICAgcmV0dXJuIFdITFNMOjpC
aW5kaW5nVHlwZTo6VW5pZm9ybUJ1ZmZlcjsKLSAgICBjYXNlIEdQVUJpbmRpbmdUeXBlOjpTYW1w
bGVyOgotICAgICAgICByZXR1cm4gV0hMU0w6OkJpbmRpbmdUeXBlOjpTYW1wbGVyOwotICAgIGNh
c2UgR1BVQmluZGluZ1R5cGU6OlNhbXBsZWRUZXh0dXJlOgotICAgICAgICByZXR1cm4gV0hMU0w6
OkJpbmRpbmdUeXBlOjpUZXh0dXJlOwotICAgIGNhc2UgR1BVQmluZGluZ1R5cGU6OlN0b3JhZ2VC
dWZmZXI6Ci0gICAgICAgIHJldHVybiBXSExTTDo6QmluZGluZ1R5cGU6OlN0b3JhZ2VCdWZmZXI7
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKLSAgICB9Ci19Ci0K
IHN0YXRpYyBPcHRpb25hbDxXSExTTDo6VGV4dHVyZUZvcm1hdD4gY29udmVydFRleHR1cmVGb3Jt
YXQoR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQpCiB7CiAgICAgc3dpdGNoIChmb3JtYXQpIHsKQEAg
LTM2NywzMyArMzQwLDYgQEAgc3RhdGljIGJvb2wgdHJ5U2V0Q29sb3JTdGF0ZXMoY29uc3QgY2hh
ciogY29uc3QgZnVuY3Rpb25OYW1lLCBjb25zdCBWZWN0b3I8R1BVQ28KICAgICByZXR1cm4gdHJ1
ZTsKIH0KIAotc3RhdGljIE9wdGlvbmFsPFdITFNMOjpMYXlvdXQ+IGNvbnZlcnRMYXlvdXQoY29u
c3QgR1BVUGlwZWxpbmVMYXlvdXQmIGxheW91dCkKLXsKLSAgICBXSExTTDo6TGF5b3V0IHJlc3Vs
dDsKLSAgICBpZiAobGF5b3V0LmJpbmRHcm91cExheW91dHMoKS5zaXplKCkgPiBzdGQ6Om51bWVy
aWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsYXlvdXQuYmluZEdyb3VwTGF5b3V0cygpLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIGJpbmRHcm91cExheW91dCA9IGxheW91
dC5iaW5kR3JvdXBMYXlvdXRzKClbaV07Ci0gICAgICAgIFdITFNMOjpCaW5kR3JvdXAgYmluZEdy
b3VwOwotICAgICAgICBiaW5kR3JvdXAubmFtZSA9IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKTsK
LSAgICAgICAgZm9yIChjb25zdCBhdXRvJiBrZXlWYWx1ZVBhaXIgOiBiaW5kR3JvdXBMYXlvdXQt
PmJpbmRpbmdzTWFwKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1dG8mIGdwdUJpbmRHcm91cExh
eW91dEJpbmRpbmcgPSBrZXlWYWx1ZVBhaXIudmFsdWU7Ci0gICAgICAgICAgICBXSExTTDo6Qmlu
ZGluZyBiaW5kaW5nOwotICAgICAgICAgICAgYmluZGluZy52aXNpYmlsaXR5ID0gY29udmVydFNo
YWRlclN0YWdlRmxhZ3MoZ3B1QmluZEdyb3VwTGF5b3V0QmluZGluZy52aXNpYmlsaXR5KTsKLSAg
ICAgICAgICAgIGlmIChhdXRvIGJpbmRpbmdUeXBlID0gY29udmVydEJpbmRpbmdUeXBlKGdwdUJp
bmRHcm91cExheW91dEJpbmRpbmcudHlwZSkpCi0gICAgICAgICAgICAgICAgYmluZGluZy5iaW5k
aW5nVHlwZSA9ICpiaW5kaW5nVHlwZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgaWYgKGdwdUJpbmRHcm91cExheW91
dEJpbmRpbmcuYmluZGluZyA+IHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgYmluZGlu
Zy5uYW1lID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGdwdUJpbmRHcm91cExheW91dEJpbmRpbmcu
YmluZGluZyk7Ci0gICAgICAgICAgICBiaW5kR3JvdXAuYmluZGluZ3MuYXBwZW5kKFdURk1vdmUo
YmluZGluZykpOwotICAgICAgICB9Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoV1RGTW92ZShiaW5k
R3JvdXApKTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogc3RhdGljIGJvb2wgdHJ5
U2V0TWV0YWxGdW5jdGlvbnMoY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lLCBNVExMaWJy
YXJ5ICp2ZXJ0ZXhNZXRhbExpYnJhcnksIE1UTExpYnJhcnkgKmZyYWdtZW50TWV0YWxMaWJyYXJ5
LCBNVExSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IgKm10bERlc2NyaXB0b3IsIGNvbnN0IFN0cmlu
ZyYgdmVydGV4RW50cnlQb2ludE5hbWUsIGNvbnN0IFN0cmluZyYgZnJhZ21lbnRFbnRyeVBvaW50
TmFtZSkKIHsKICNpZiBMT0dfRElTQUJMRUQKQEAgLTQ2NCw4ICs0MTAsNiBAQCBzdGF0aWMgYm9v
bCB0cnlTZXRGdW5jdGlvbnMoY29uc3QgY2hhciogY29uc3QgZnVuY3Rpb25OYW1lLCBjb25zdCBH
UFVQaXBlbGluZVN0YQogICAgICAgICBpZiAoIXdobHNsQ29tcGlsZVJlc3VsdCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICBXVEZMb2dBbHdheXMoIk1ldGFsIFNvdXJjZTog
JXMiLCB3aGxzbENvbXBpbGVSZXN1bHQtPm1ldGFsU291cmNlLnV0ZjgoKS5kYXRhKCkpOwotCiAg
ICAgICAgIE5TRXJyb3IgKmVycm9yID0gbmlsOwogCiAgICAgICAgIEJFR0lOX0JMT0NLX09CSkNf
RVhDRVBUSU9OUzsKQEAgLTU0MCw2ICs0ODQsMTEgQEAgc3RhdGljIFJldGFpblB0cjxNVExSZW5k
ZXJQaXBlbGluZURlc2NyaXB0b3I+IGNvbnZlcnRSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IoY28K
IAogc3RhdGljIFJldGFpblB0cjxNVExSZW5kZXJQaXBlbGluZVN0YXRlPiB0cnlDcmVhdGVNdGxS
ZW5kZXJQaXBlbGluZVN0YXRlKGNvbnN0IGNoYXIqIGNvbnN0IGZ1bmN0aW9uTmFtZSwgY29uc3Qg
R1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBjb25zdCBHUFVEZXZpY2Um
IGRldmljZSkKIHsKKyAgICBpZiAoIWRldmljZS5wbGF0Zm9ybURldmljZSgpKSB7CisgICAgICAg
IExPRyhXZWJHUFUsICJHUFVDb21wdXRlUGlwZWxpbmU6OnRyeUNyZWF0ZSgpOiBJbnZhbGlkIEdQ
VURldmljZSEiKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCiAgICAgYXV0byBt
dGxEZXNjcmlwdG9yID0gY29udmVydFJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcihmdW5jdGlvbk5h
bWUsIGRlc2NyaXB0b3IsIGRldmljZSk7CiAgICAgaWYgKCFtdGxEZXNjcmlwdG9yKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKQEAgLTU0OCw3ICs0OTcsNyBAQCBzdGF0aWMgUmV0YWluUHRyPE1U
TFJlbmRlclBpcGVsaW5lU3RhdGU+IHRyeUNyZWF0ZU10bFJlbmRlclBpcGVsaW5lU3RhdGUoY29u
c3QgYwogCiAgICAgQkVHSU5fQkxPQ0tfT0JKQ19FWENFUFRJT05TOwogCi0gICAgTlNFcnJvciAq
ZXJyb3IgPSBbTlNFcnJvciBlcnJvcldpdGhEb21haW46QCJjb20uYXBwbGUuV2ViS2l0LkdQVSIg
Y29kZToxIHVzZXJJbmZvOm5pbF07CisgICAgTlNFcnJvciAqZXJyb3IgPSBuaWw7CiAgICAgcGlw
ZWxpbmUgPSBhZG9wdE5TKFtkZXZpY2UucGxhdGZvcm1EZXZpY2UoKSBuZXdSZW5kZXJQaXBlbGlu
ZVN0YXRlV2l0aERlc2NyaXB0b3I6bXRsRGVzY3JpcHRvci5nZXQoKSBlcnJvcjomZXJyb3JdKTsK
ICAgICBpZiAoIXBpcGVsaW5lKQogICAgICAgICBMT0coV2ViR1BVLCAiJXM6ICVzISIsIGZ1bmN0
aW9uTmFtZSwgZXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24uVVRGOFN0cmluZyk7CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
ODYxNzIxMjI2ZWY1ZDhiMGY0ZDAxMDNjMGU3OGQ3NzVkNjY0NDAzZi4uMGI3NDYyMTYwMzViNzIy
ZDY1YTIwZmM0ZWZhZWNkODcyNDA2NTVjOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE5LTA2
LTA3ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAg
W1dITFNMXSBIb29rIHVwIGNvbXB1dGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE5ODY0NAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoaXMgZG9lc24ndCB0aG9yb3VnaGx5IHRlc3QgY29tcHV0ZSwgYnV0
IGl0J3MgYXQgbGVhc3QgZW5vdWdoIHRvIHVuYmxvY2sgdGhlIFdITFNMIHRlc3RpbmcgZWZmb3J0
LgorCisgICAgICAgICogd2ViZ3B1L3dobHNsLWNvbXB1dGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4K
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wtY29tcHV0ZS5odG1sOiBBZGRlZC4KKwogMjAxOS0wNi0w
NiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBhcHBsZS5jb20+CiAKICAgICAgICAgQWxsb3cgV2Vi
S2l0VGVzdFJ1bm5lciB0byB0ZXJtaW5hdGUgbmV0d29yayBwcm9jZXNzIGFmdGVyIGl0IGZpbmlz
aGVzIHNlcnZpY2Ugd29ya2VyIGZpbGUgb3BlcmF0aW9ucwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWNvbXB1dGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWNvbXB1dGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZlMTY2OGExMDNiZWI5MmY3
NmVhN2U4ZDdhYTdmZmI1MGU4OWUyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtY29tcHV0ZS1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitQQVNTIHJlc3VsdHNG
bG9hdDMyQXJyYXlbMF0gaXMgMgorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzFdIGlzIDQKK1BB
U1MgcmVzdWx0c0Zsb2F0MzJBcnJheVsyXSBpcyA2CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlb
M10gaXMgOAorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzRdIGlzIDUKK1BBU1MgcmVzdWx0c0Zs
b2F0MzJBcnJheVs1XSBpcyA2CitQQVNTIHJlc3VsdHNGbG9hdDMyQXJyYXlbNl0gaXMgNworUEFT
UyByZXN1bHRzRmxvYXQzMkFycmF5WzddIGlzIDgKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ3B1L3dobHNsLWNvbXB1dGUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb21w
dXRlLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZGYwMjY1NWRmZTU2NjNiZGFkM2FiMmI0OGE0YzA3NjM4Y2Ew
NDRjMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb21wdXRl
Lmh0bWwKQEAgLTAsMCArMSw4MyBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitbbnVtdGhyZWFk
cygyLCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdFtdIGJ1
ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJ
RCkgeworICAgIGJ1ZmZlclt1aW50KHRocmVhZElELngpXSA9IGJ1ZmZlclt1aW50KHRocmVhZElE
LngpXSAqIDIuMDsKK30KK2A7CitsZXQgcmVzdWx0c0Zsb2F0MzJBcnJheTsKK2FzeW5jIGZ1bmN0
aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0b3IuZ3B1LnJl
cXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRlci5yZXF1ZXN0
RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVy
TW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBj
b21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRl
U2hhZGVyIn07CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRp
bmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9
XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExh
eW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91
dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAg
IGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVs
aW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlw
dG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3Qg
Y29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlw
ZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTog
RmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogOCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29uc3QgYnVm
ZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBi
dWZmZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29u
c3QgYnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZl
cik7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMTsKKyAgICBidWZmZXJGbG9hdDMyQXJy
YXlbMV0gPSAyOworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDM7CisgICAgYnVmZmVyRmxv
YXQzMkFycmF5WzNdID0gNDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbNF0gPSA1OworICAgIGJ1
ZmZlckZsb2F0MzJBcnJheVs1XSA9IDY7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzZdID0gNzsK
KyAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4OworICAgIGJ1ZmZlci51bm1hcCgpOworCisg
ICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZ
VEVTX1BFUl9FTEVNRU5UICogOCwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVC
dWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CisgICAg
Y29uc3QgcmVzdWx0c0J1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRl
c2NyaXB0b3IpOworCisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNC
dWZmZXIsIHNpemU6IDR9OworICAgIGNvbnN0IGJpbmRHcm91cEJpbmRpbmcgPSB7YmluZGluZzog
MCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OworICAgIGNvbnN0IGJpbmRHcm91cERlc2NyaXB0
b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBbYmluZEdyb3VwQmluZGlu
Z119OworICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoYmluZEdy
b3VwRGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21tYW5kRW5jb2RlciA9IGRldmljZS5jcmVh
dGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQorICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJU
b0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIEZsb2F0MzJBcnJheS5CWVRFU19Q
RVJfRUxFTUVOVCAqIDgpOworICAgIGNvbnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRF
bmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3MoKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlw
ZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdy
b3VwKDAsIGJpbmRHcm91cCk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmRpc3BhdGNoKDIsIDEs
IDEpOworICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisgICAgY29uc3QgY29tbWFu
ZEJ1ZmZlciA9IGNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpOworICAgIGRldmljZS5nZXRRdWV1ZSgp
LnN1Ym1pdChbY29tbWFuZEJ1ZmZlcl0pOworCisgICAgY29uc3QgcmVzdWx0c0FycmF5QnVmZmVy
ID0gYXdhaXQgcmVzdWx0c0J1ZmZlci5tYXBSZWFkQXN5bmMoKTsKKyAgICByZXN1bHRzRmxvYXQz
MkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShyZXN1bHRzQXJyYXlCdWZmZXIpOworICAgIHNob3Vs
ZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzBdIiwgIjIiKTsKKyAgICBzaG91bGRCZSgicmVzdWx0
c0Zsb2F0MzJBcnJheVsxXSIsICI0Iik7CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJy
YXlbMl0iLCAiNiIpOworICAgIHNob3VsZEJlKCJyZXN1bHRzRmxvYXQzMkFycmF5WzNdIiwgIjgi
KTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJBcnJheVs0XSIsICI1Iik7CisgICAgc2hv
dWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbNV0iLCAiNiIpOworICAgIHNob3VsZEJlKCJyZXN1
bHRzRmxvYXQzMkFycmF5WzZdIiwgIjciKTsKKyAgICBzaG91bGRCZSgicmVzdWx0c0Zsb2F0MzJB
cnJheVs3XSIsICI4Iik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworCisgICAgaWYgKHdp
bmRvdy50ZXN0UnVubmVyKQorICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsKK30KK2lm
ICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgc3RhcnQpOworPC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+Cg==
</data>
<flag name="review"
          id="387457"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>