<?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>100426</bug_id>
          
          <creation_ts>2012-10-25 15:18:38 -0700</creation_ts>
          <short_desc>IndexedDB: switch frontend to use int64_t-based references</short_desc>
          <delta_ts>2012-11-09 11:55:41 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>100425</dependson>
    
    <dependson>101684</dependson>
    
    <dependson>101716</dependson>
          <blocked>99774</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alec Flett">alecflett</reporter>
          <assigned_to name="Alec Flett">alecflett</assigned_to>
          <cc>dgrogan</cc>
    
    <cc>jsbell</cc>
    
    <cc>noel.gordon</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>751266</commentid>
    <comment_count>0</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-25 15:18:38 -0700</bug_when>
    <thetext>This is the followup to bug 100425, which cleans up the frontend code to use int64_t-based objectStore/index references, and removes backend support for String-based references.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>752393</commentid>
    <comment_count>1</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-10-26 14:21:06 -0700</bug_when>
    <thetext>From the patch in bug 100425, jsbell sez:
&gt; Make sure to include a test with 100426 that tests put-record/delete-index/create-index-with-same-name-different-keypath</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757576</commentid>
    <comment_count>2</comment_count>
      <attachid>172134</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-02 14:22:56 -0700</bug_when>
    <thetext>Created attachment 172134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757610</commentid>
    <comment_count>3</comment_count>
      <attachid>172134</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-11-02 14:39:56 -0700</bug_when>
    <thetext>Comment on attachment 172134
Patch

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

Initial pass lgtm

&gt; Source/WebCore/Modules/indexeddb/IDBMetadata.h:81
&gt;          for (IndexMap::const_iterator it = indexes.begin(); it != indexes.end(); ++it) {

Maybe add a FIXME: Add a HashMap of name-&gt;id if this is ever a performance concern.

(Realistically, no-one is going to call these particular methods in a performance-critical loop.)

&gt; Source/WebCore/inspector/Inspector.json:1302
&gt; +                    { &quot;name&quot;: &quot;objectStoreId&quot;, &quot;type&quot;: &quot;number&quot;, &quot;description&quot;: &quot;Object store name.&quot; },

Update description. Also, &quot;number&quot; or &quot;integer&quot;?

&gt; Source/WebCore/inspector/Inspector.json:1303
&gt; +                    { &quot;name&quot;: &quot;indexId&quot;, &quot;type&quot;: &quot;number&quot;, &quot;description&quot;: &quot;Index name, empty string for object store data requests.&quot; },

Update description.

&gt; Source/WebCore/inspector/InspectorIndexedDBAgent.h:63
&gt; +    virtual void requestData(ErrorString*, const String&amp; frameId, const String&amp; databaseName, double objectStoreId, double indexId, int skipCount, int pageSize, const RefPtr&lt;InspectorObject&gt;* keyRange, PassRefPtr&lt;RequestDataCallback&gt;);

I&apos;m guessing &quot;number&quot; above maps to &quot;double&quot; here. I guess the question is which is worse: ids &gt; 2^53 getting corrupted due to precision loss, or ids &gt; 2^31 being truncated.

I&apos;d still lean towards &quot;integer&quot; and make these ints, and perhaps there a place to wedge in an early return if the id is &gt; 2^31? Or at least a FIXME?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>757644</commentid>
    <comment_count>4</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-02 15:04:57 -0700</bug_when>
    <thetext>There&apos;s more code removal coming, (some of the scaffolding from the previous patch) and the inspector tests are still broken.  But thanks for the first pass.

I think at least with doubles, we should be able to test if the value is &gt; 2^53, rather than integers which will arrive pre-truncated.

I&apos;ll poke around and see if there&apos;s a place to return early.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759068</commentid>
    <comment_count>5</comment_count>
      <attachid>172448</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-05 17:17:48 -0800</bug_when>
    <thetext>Created attachment 172448
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>759069</commentid>
    <comment_count>6</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-05 17:18:19 -0800</bug_when>
    <thetext>ok, this patch is ready for jsbell/dgrogan to take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>761031</commentid>
    <comment_count>7</comment_count>
      <attachid>172448</attachid>
    <who name="David Grogan">dgrogan</who>
    <bug_when>2012-11-07 13:50:25 -0800</bug_when>
    <thetext>Comment on attachment 172448
Patch

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

LGTM

&gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:360
&gt; +int64_t IDBDatabase::findObjectStoreId(const String&amp; name) const

This moved from IDBMetaData so that IDBTransaction could use it too?

&gt; Source/WebCore/Modules/indexeddb/IDBDatabase.h:106
&gt; +

nit blank line

&gt; Source/WebCore/inspector/Inspector.json:-1299
&gt; -                    { &quot;name&quot;: &quot;objectStoreName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Object store name.&quot; },

What does this affect?  What view will now see an id instead of a name?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762007</commentid>
    <comment_count>8</comment_count>
      <attachid>173082</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-08 11:41:27 -0800</bug_when>
    <thetext>Created attachment 173082
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762011</commentid>
    <comment_count>9</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-08 11:43:19 -0800</bug_when>
    <thetext>ok, final version ready to go.

tony@ - r?

95% code removal
5% minor API code migration..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762013</commentid>
    <comment_count>10</comment_count>
      <attachid>172448</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-08 11:43:44 -0800</bug_when>
    <thetext>Comment on attachment 172448
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBDatabase.cpp:360
&gt;&gt; +int64_t IDBDatabase::findObjectStoreId(const String&amp; name) const
&gt; 
&gt; This moved from IDBMetaData so that IDBTransaction could use it too?

more that I put it on IDBMetadata temporarily for use during the transition, but now only IDBDatabase uses it - I wanted to bring IDBMetadata back to being pure structs after the refactor was over.

&gt;&gt; Source/WebCore/inspector/Inspector.json:-1299
&gt;&gt; -                    { &quot;name&quot;: &quot;objectStoreName&quot;, &quot;type&quot;: &quot;string&quot;, &quot;description&quot;: &quot;Object store name.&quot; },
&gt; 
&gt; What does this affect?  What view will now see an id instead of a name?

I&apos;m nuking the inspector stuff since vsevik switched the inspector over in a better way</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762374</commentid>
    <comment_count>11</comment_count>
      <attachid>173082</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-08 17:36:34 -0800</bug_when>
    <thetext>Comment on attachment 173082
Patch

Clearing flags on attachment: 173082

Committed r133984: &lt;http://trac.webkit.org/changeset/133984&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762375</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-08 17:36:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762416</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-08 18:37:27 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 101684</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762531</commentid>
    <comment_count>14</comment_count>
      <attachid>173198</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-08 21:29:17 -0800</bug_when>
    <thetext>Created attachment 173198
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762569</commentid>
    <comment_count>15</comment_count>
      <attachid>173198</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-08 22:27:33 -0800</bug_when>
    <thetext>Comment on attachment 173198
Patch for landing

Clearing flags on attachment: 173198

Committed r134010: &lt;http://trac.webkit.org/changeset/134010&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762570</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-08 22:27:37 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762619</commentid>
    <comment_count>17</comment_count>
    <who name="noel gordon">noel.gordon</who>
    <bug_when>2012-11-08 23:32:44 -0800</bug_when>
    <thetext>Broke the window build, it seems.

18&gt;------ Build started: Project: webkit_unit_tests, Configuration: Release Win32 ------
18&gt;  IDBAbortOnCorruptTest.cpp
18&gt;  IDBDatabaseBackendTest.cpp
18&gt;  IDBRequestTest.cpp
18&gt;E:\google-windows-1\chromium-win-release\build\Source\WTF\wtf/PassRefPtr.h(53): error C2027: use of undefined type &apos;WebCore::DOMStringList&apos;
18&gt;          e:\google-windows-1\chromium-win-release\build\source\webcore\modules\indexeddb\IDBCallbacks.h(43) : see declaration of &apos;WebCore::DOMStringList&apos;
18&gt;          E:\google-windows-1\chromium-win-release\build\Source\WTF\wtf/PassRefPtr.h(68) : see reference to function template instantiation &apos;void WTF::derefIfNotNull&lt;T&gt;(T *)&apos; being compiled
18&gt;          with
18&gt;          [
18&gt;              T=WebCore::DOMStringList
18&gt;          ]
18&gt;          E:\google-windows-1\chromium-win-release\build\Source\WTF\wtf/PassRefPtr.h(68) : while compiling class template member function &apos;WTF::PassRefPtr&lt;T&gt;::~PassRefPtr(void)&apos;
18&gt;          with
18&gt;          [
18&gt;              T=WebCore::DOMStringList
18&gt;          ]
18&gt;          tests\IDBAbortOnCorruptTest.cpp(55) : see reference to class template instantiation &apos;WTF::PassRefPtr&lt;T&gt;&apos; being compiled
18&gt;          with
18&gt;          [
18&gt;              T=WebCore::DOMStringList
18&gt;          ]
18&gt;E:\google-windows-1\chromium-win-release\build\Source\WTF\wtf/PassRefPtr.h(53): error C2227: left of &apos;-&gt;deref&apos; must point to class/struct/union/generic type
16&gt;  TestWebKitAPI.vcxproj -&gt; ..\..\..\Source\WebKit\chromium\build\Release\\TestWebKitAPI.exe
17&gt;  DumpRenderTree.vcxproj -&gt; ..\..\..\Source\WebKit\chromium\build\Release\\DumpRenderTree.exe
========== Build: 17 succeeded, 1 failed, 144 up-to-date, 0 skipped ==========</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>762621</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-08 23:36:26 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 101716</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763164</commentid>
    <comment_count>19</comment_count>
      <attachid>173337</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-11-09 10:58:28 -0800</bug_when>
    <thetext>Created attachment 173337
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763214</commentid>
    <comment_count>20</comment_count>
      <attachid>173337</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 11:55:37 -0800</bug_when>
    <thetext>Comment on attachment 173337
Patch for landing

Clearing flags on attachment: 173337

Committed r134095: &lt;http://trac.webkit.org/changeset/134095&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>763215</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-09 11:55:41 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172134</attachid>
            <date>2012-11-02 14:22:56 -0700</date>
            <delta_ts>2012-11-05 17:17:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100426-20121102142115.patch</filename>
            <type>text/plain</type>
            <size>61646</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzMjgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjFlNjZiYTA0M2YzMjc5
NjljOTcxZTkyOWQzNTBiNmQwMjE5MDg5Ny4uYTEyODQ1YzgwNjlkYzMzMzg2MDI0Mzg5ZWNiNWIw
NGQ2MDBjOWRkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTExLTAyICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IHN3
aXRjaCBmcm9udGVuZCB0byB1c2UgaW50NjRfdC1iYXNlZCByZWZlcmVuY2VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgU3RyaW5nLWJhc2Vk
IG9iamVjdFN0b3JlL2luZGV4IHJlZmVyZW5jZXMsIG9ic29sZXRlZCBieQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI1LgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBhcyB0aGlzIGlzIHRoZSBzZWNvbmQgaGFsZiBvZiBhIHJlZmFjdG9yLgorCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmg6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
Ojp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpzZXRWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlLmg6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpmaW5kSW5kZXgpOgorICAgICAgICAoSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZU1ldGFkYXRh
Ojpjb250YWluc0luZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci0xLjAuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWRE
QkFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKEluc3BlY3RvckluZGV4ZWREQkFnZW50
KToKKwogMjAxMi0xMS0wMiAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgQWRkIGEgY29tbW9uIGJhc2UgY2xhc3MgZm9yIGRhdGUvdGltZSBpbnB1dCB0eXBlcyB3
aXRob3V0IGlubGluZSBlZGl0aW5nIGJlaGF2aW9yCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCmlu
ZGV4IGY4NzY2NDhjYWE2ZjM1MzQ2ZGU1YzE5ZWJkNmZjMjc4Y2E4NTA0MmMuLmU3ZjVlMjFjNzU1
ZDU0YjJjNzRhODdiMWExN2M3MjcyOWMyODk5YWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMTEtMDIgIEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hy
b21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogc3dpdGNoIGZyb250ZW5kIHRvIHVzZSBp
bnQ2NF90LWJhc2VkIHJlZmVyZW5jZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTEwMDQyNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFJlbW92ZSBpbXBsZW1lbnRhdGlvbiBzdHVicyBmcm9tIGNocm9taXVt
IEFQSSBmb3IKKyAgICAgICAgbWV0aG9kcyBvYnNvbGV0ZWQgYnkgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDQyNQorCisgICAgICAgICogc3JjL0lEQk9iamVjdFN0
b3JlQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKiBzcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHkuaDoKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5KToKKyAgICAgICAg
KiBzcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcDoKKyAgICAgICAgKiBzcmMvV2ViSURCRGF0YWJh
c2VJbXBsLmg6CisgICAgICAgIChXZWJJREJEYXRhYmFzZUltcGwpOgorICAgICAgICAqIHNyYy9X
ZWJJREJPYmplY3RTdG9yZUltcGwuY3BwOgorICAgICAgICAqIHNyYy9XZWJJREJPYmplY3RTdG9y
ZUltcGwuaDoKKyAgICAgICAgKFdlYklEQk9iamVjdFN0b3JlSW1wbCk6CisKIDIwMTItMTEtMDEg
IEFsZWMgRmxldHQgIDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIEluZGV4ZWRE
QjogYWRkIG1ldGhvZHMgdG8gc3VwcG9ydCBpZC1iYXNlZCBiYWNrZW5kIEFQSXMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKaW5kZXggZGZkOGUy
MDkyMDRlYzBlNGJiOWFjMjk5OTcxY2YyMmNjNGYxZjAzYy4uYjNlYzRiMjcwZjNhNTY4ZTNkZjk5
NzViYjI5MTgxMjU3OTVlZDcyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ2FsbGJhY2tzLmgKQEAgLTI5LDcgKzI5LDYgQEAKICNpZm5kZWYgSURCQ2FsbGJh
Y2tzX2gKICNkZWZpbmUgSURCQ2FsbGJhY2tzX2gKIAotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3Qu
aCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJ
REJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKaW5kZXggZmNjYjQ1NmM1ZDY4
YTIxNDY3ZjU4ZjA5Y2RjNjI3ZmMzMGZkOTc4Mi4uYjFiNTE3MzQzMmVhMDUxNTg0MzQxMTE1YWM5
ZTRjZWMxODI2NDIyNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlLmNwcApAQCAtMTk0LDcgKzE5NCw3IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRl
bGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmQtPmRlbGV0ZU9iamVjdFN0b3Jl
KG5hbWUsIG1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBt
X2JhY2tlbmQtPmRlbGV0ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQsIG1fdmVyc2lvbkNoYW5n
ZVRyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoIWVjKSB7CiAgICAgICAgIG1f
dmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5vYmplY3RTdG9yZURlbGV0ZWQobmFtZSk7CiAgICAg
ICAgIG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLnJlbW92ZShvYmplY3RTdG9yZUlkKTsKQEAgLTI0
MywxOCArMjQzLDIxIEBAIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb24+IElEQkRhdGFiYXNlOjp0
cmFuc2FjdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAorICAgIFZlY3RvcjxpbnQ2NF90PiBvYmplY3RTdG9yZUlkczsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHN0b3JlTmFtZXMtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAg
aWYgKCFtX21ldGFkYXRhLmNvbnRhaW5zT2JqZWN0U3RvcmUoc3RvcmVOYW1lcy0+aXRlbShpKSkp
IHsKKyAgICAgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gbV9tZXRhZGF0YS5maW5kT2JqZWN0
U3RvcmUoc3RvcmVOYW1lcy0+aXRlbShpKSk7CisgICAgICAgIGlmIChvYmplY3RTdG9yZUlkID09
IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgewogICAgICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgfQorICAgICAgICBvYmplY3RTdG9yZUlkcy5hcHBlbmQob2JqZWN0U3Rv
cmVJZCk7CiAgICAgfQogCiAgICAgLy8gV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgdHJhbnNhY3Rp
b24gc3luY2hyb25vdXNseS4gTG9ja3MgYXJlIGFjcXVpcmVkIGFzeW5jaHJvbm91c2x5LiBPcGVy
YXRpb25zCiAgICAgLy8gY2FuIGJlIHF1ZXVlZCBhZ2FpbnN0IHRoZSB0cmFuc2FjdGlvbiBhdCBh
bnkgcG9pbnQuIFRoZXkgd2lsbCBzdGFydCBleGVjdXRpbmcgYXMgc29vbiBhcyB0aGUKICAgICAv
LyBhcHByb3ByaWF0ZSBsb2NrcyBoYXZlIGJlZW4gYWNxdWlyZWQuCiAgICAgLy8gQWxzbyBub3Rl
IHRoYXQgZWFjaCBiYWNrZW5kIG9iamVjdCBjb3JyZXNwb25kcyB0byBleGFjdGx5IG9uZSBJREJU
cmFuc2FjdGlvbiBvYmplY3QuCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gdHJhbnNhY3Rpb25CYWNrZW5kID0gbV9iYWNrZW5kLT50cmFuc2FjdGlvbihzdG9yZU5h
bWVzLmdldCgpLCBtb2RlLCBlYyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gdHJhbnNhY3Rpb25CYWNrZW5kID0gbV9iYWNrZW5kLT50cmFuc2FjdGlvbihvYmpl
Y3RTdG9yZUlkcywgbW9kZSk7CiAgICAgaWYgKCF0cmFuc2FjdGlvbkJhY2tlbmQpIHsKICAgICAg
ICAgQVNTRVJUKGVjKTsKICAgICAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmlu
ZGV4IDdkYTU0MzJkMzgyYzFiNGUwOGRlNWViYTViODA5NmM2NGRiZjU0NmQuLmQ1ZjdjZDlmYmRm
NjAxYmNmMzFkN2FkMjM5NDBmOThjMmQxZDQwZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBA
IC0yNzQsOCArMjc0LDggQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9u
KGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWwKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0g
RE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gdHJhbnNhY3Rpb25JbnRlcmZhY2UgPSB0aGlzLT50cmFuc2FjdGlvbihvYmpl
Y3RTdG9yZU5hbWVzLmdldCgpLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIGVjKTsK
KyAgICBWZWN0b3I8aW50NjRfdD4gb2JqZWN0U3RvcmVJZHM7CisgICAgUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25JbnRlcmZhY2UgPSB0aGlzLT50cmFu
c2FjdGlvbihvYmplY3RTdG9yZUlkcywgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsK
ICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uSW50ZXJmYWNlLmdldCgpKTsK
ICAgICBBU1NFUlQoIWVjKTsKIApAQCAtNDMxLDE5ICs0MzEsMTMgQEAgdm9pZCBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpwcm9jZXNzUGVuZGluZ0NhbGxzKCkKICAgICBBU1NFUlQobV9wZW5kaW5n
T3BlbkNhbGxzLmlzRW1wdHkoKSk7CiB9CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbihET01TdHJp
bmdMaXN0KiwgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpCitQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
dHJhbnNhY3Rpb24oY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWdu
ZWQgc2hvcnQgbW9kZSkKIHsKLSAgICAvLyBGSVhNRTogRmlyc3QgcGFyYW1ldGVyIGlzbid0IHVz
ZWQgZm9yIGFueXRoaW5nIHlldCBhbnl3YXksIGFuZCB0aGlzIG1ldGhvZCBpcyBnb2luZyBhd2F5
LgotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShWZWN0b3I8aW50NjRfdD4oKSwgbW9kZSwg
dGhpcyk7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9u
ID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVjdFN0b3JlSWRzLCBtb2Rl
LCB0aGlzKTsKICAgICBtX3RyYW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24uZ2V0KCkpOwogICAg
IHJldHVybiB0cmFuc2FjdGlvbi5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlv
bihjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBt
b2RlKQotewotICAgIHJldHVybiB0cmFuc2FjdGlvbihvYmplY3RTdG9yZUlkcywgbW9kZSk7Ci19
Ci0KIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNr
cz4gZGF0YWJhc2VDYWxsYmFja3MpCiB7CiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlLmdldCgp
KTsKQEAgLTQ5MSwxOSArNDg1LDE1IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cnVu
SW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKGludDY0X3QgcmVxdWVzdGVkVmVyCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVO
YW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9u
SW50ZXJmYWNlID0gdHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVOYW1lcy5nZXQoKSwgSURCVHJhbnNh
Y3Rpb246OlZFUlNJT05fQ0hBTkdFLCBlYyk7CisgICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0
b3JlSWRzOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5z
YWN0aW9uSW50ZXJmYWNlID0gdHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVJZHMsIElEQlRyYW5zYWN0
aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2Fj
dGlvbkludGVyZmFjZS5nZXQoKSk7Ci0gICAgQVNTRVJUKCFlYyk7CiAKICAgICBSZWZQdHI8SURC
RGF0YWJhc2VCYWNrZW5kSW1wbD4gZGF0YWJhc2UgPSB0aGlzOwogICAgIE93blB0cjxTY3JpcHRF
eGVjdXRpb25Db250ZXh0OjpUYXNrPiBpbnRWZXJzaW9uVGFzayA9IGNyZWF0ZUNhbGxiYWNrVGFz
aygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0SW50VmVyc2lvbkludGVybmFsLCBkYXRhYmFz
ZSwgcmVxdWVzdGVkVmVyc2lvbiwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7CiAgICAgT3duUHRy
PFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IHJlc2V0VmVyc2lvbk9uQWJvcnRUYXNrID0g
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZXNldFZlcnNpb24s
IGRhdGFiYXNlLCBtX21ldGFkYXRhLnZlcnNpb24sIG1fbWV0YWRhdGEuaW50VmVyc2lvbik7CiAg
ICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGludFZlcnNpb25UYXNrLnJlbGVhc2Uo
KSwgcmVzZXRWZXJzaW9uT25BYm9ydFRhc2sucmVsZWFzZSgpKSkgewotICAgICAgICAvLyBGSVhN
RTogUmVtb3ZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIGxpbmVzLgogICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJ
T05fSU5BQ1RJVkVfRVJSOwogICAgIH0KICAgICBBU1NFUlQoIW1fcGVuZGluZ1NlY29uZEhhbGZP
cGVuV2l0aFZlcnNpb24pOwogICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb24g
PSBQZW5kaW5nT3BlbldpdGhWZXJzaW9uQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcywgZGF0YWJhc2VD
YWxsYmFja3MsIHJlcXVlc3RlZFZlcnNpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCmluZGV4IGY1Y2U4
MWQ2Y2I0MTVlMzllMjFhNDU1YTIyMDIyOTExNDRiZjNlMTQuLjEzYmYxMzIzNWM3M2YxMTFhMzg5
MGU0MWMyNDJiMjIyOGNhYWNmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKQEAgLTYyLDEwICs2Miw4
IEBAIHB1YmxpYzoKICAgICAvLyBJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UKICAgICB2aXJ0
dWFsIElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdDsKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9y
ZShpbnQ2NF90IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29s
IGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5n
JiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBF
eGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gZGVsZXRlT2JqZWN0U3RvcmUoZ2V0T2JqZWN0U3Rv
cmVJZChuYW1lKSwgdHJhbnNhY3Rpb25QdHIsIGVjKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVPYmplY3RTdG9yZShpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBF
eGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgU3RyaW5n
JiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+LCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCog
b2JqZWN0U3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRy
YW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIHVuc2lnbmVkIHNob3J0KTsKICAgICB2
aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEludGVyZmFjZS5oCmluZGV4IDBjNTNjZDdjZjE1ODkxYzA1MTdmZDkzMjQz
OWNlMWI3YTE5MTk3YWEuLmM2OWJmM2I0N2RhMmFlYzk4ZWJjOGI2OWY2YjcwMjgyNTRkMjFjYmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oCkBAIC01NSwxMCArNTUsOCBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3QgPSAwOwog
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
Y3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJL
ZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
KGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9u
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFj
a3M+LCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKERPTVN0cmluZ0xpc3QqIHN0b3Jl
TmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24oY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQgc2hvcnQg
bW9kZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNl
Q2FsbGJhY2tzPikgPSAwOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk1ldGFkYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJNZXRhZGF0YS5oCmluZGV4IDFiMDM4NGJkOTU2OTFlNGNmYTc3MWM0MTkyODU3MmM5YzJi
MTYwNTguLjczMTBjNGNjM2U3NmYwOGM2MWIwMTU3MDUxODZkMzQ2Njg3YWFiNzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaApAQCAtNzYsMTQg
Kzc2LDIyIEBAIHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIHsKICAgICB0eXBlZGVmIEhh
c2hNYXA8aW50NjRfdCwgSURCSW5kZXhNZXRhZGF0YT4gSW5kZXhNYXA7CiAgICAgSW5kZXhNYXAg
aW5kZXhlczsKIAotICAgIGJvb2wgY29udGFpbnNJbmRleChjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0CisgICAgaW50NjRfdCBmaW5kSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAogICAg
IHsKICAgICAgICAgZm9yIChJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBpbmRleGVzLmJl
Z2luKCk7IGl0ICE9IGluZGV4ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+
dmFsdWUubmFtZSA9PSBuYW1lKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgaWYgKGl0LT52YWx1ZS5uYW1lID09IG5hbWUpIHsKKyAgICAgICAgICAgICAgICBBU1NF
UlQoaXQtPmtleSAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOworICAgICAgICAgICAg
ICAgIHJldHVybiBpdC0+a2V5OworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZDsK
ICAgICB9CisKKyAgICBib29sIGNvbnRhaW5zSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZpbmRJbmRleChuYW1lKSAhPSBJREJJbmRleE1ldGFk
YXRhOjpJbnZhbGlkSWQ7CisgICAgfQorCiB9OwogCiBzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0
YSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5jcHAKaW5kZXggZDlkMmVjMjgwNDk1OTRlMjcwODhkMWZmY2ZkMjMyMTY5NzY1MTY1ZS4u
NmRlNWVhMWQ5ZmZhNDgyMDNmMTJlMThjZGIyZjYzZmYwNjA5ZjcxYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMjA0
LDE4ICsyMDQsMTcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0
KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCi0gICAgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lczsKKyAgICBWZWN0b3I8aW50
NjRfdD4gaW5kZXhJZHM7CiAgICAgVmVjdG9yPEluZGV4S2V5cz4gaW5kZXhLZXlzOwogICAgIGZv
ciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0g
bV9tZXRhZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEuaW5kZXhlcy5lbmQo
KTsgKytpdCkgewogICAgICAgICBJbmRleEtleXMga2V5czsKICAgICAgICAgZ2VuZXJhdGVJbmRl
eEtleXNGb3JWYWx1ZShpdC0+dmFsdWUsIHZhbHVlLCAma2V5cyk7Ci0gICAgICAgIGluZGV4TmFt
ZXMuYXBwZW5kKGl0LT52YWx1ZS5uYW1lKTsKKyAgICAgICAgaW5kZXhJZHMuYXBwZW5kKGl0LT5r
ZXkpOwogICAgICAgICBpbmRleEtleXMuYXBwZW5kKGtleXMpOwogICAgIH0KLSAgICBBU1NFUlQo
aW5kZXhLZXlzLnNpemUoKSA9PSBpbmRleE5hbWVzLnNpemUoKSk7CiAKICAgICBSZWZQdHI8SURC
UmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBzb3VyY2UsIG1f
dHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+cHV0V2l0aEluZGV4S2V5cyhzZXJp
YWxpemVkVmFsdWUucmVsZWFzZSgpLCBrZXkucmVsZWFzZSgpLCBwdXRNb2RlLCByZXF1ZXN0LCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGluZGV4TmFtZXMsIGluZGV4S2V5cywgZWMpOworICAg
IG1fYmFja2VuZC0+cHV0KHNlcmlhbGl6ZWRWYWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNlKCks
IHB1dE1vZGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgaW5kZXhJZHMsIGlu
ZGV4S2V5cyk7CiAgICAgQVNTRVJUKCFlYyk7CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgp
OwogfQpAQCAtMzE5LDggKzMxOCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChjdXJzb3JBbnkt
PnR5cGUoKSA9PSBJREJBbnk6OklEQkN1cnNvcldpdGhWYWx1ZVR5cGUpCiAgICAgICAgICAgICBj
dXJzb3IgPSBjdXJzb3JBbnktPmlkYkN1cnNvcldpdGhWYWx1ZSgpOwogCi0gICAgICAgIFZlY3Rv
cjxTdHJpbmcsIDE+IGluZGV4TmFtZXM7Ci0gICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKG1faW5k
ZXhNZXRhZGF0YS5uYW1lKTsKKyAgICAgICAgVmVjdG9yPGludDY0X3QsIDE+IGluZGV4SWRzOwor
ICAgICAgICBpbmRleElkcy5hcHBlbmQobV9pbmRleE1ldGFkYXRhLmlkKTsKICAgICAgICAgaWYg
KGN1cnNvcikgewogICAgICAgICAgICAgY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKGVjKTsKICAg
ICAgICAgICAgIEFTU0VSVCghZWMpOwpAQCAtMzM0LDEyICszMzMsMTIgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIFZlY3RvcjxJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzLCAxPiBpbmRleEtleXNM
aXN0OwogICAgICAgICAgICAgaW5kZXhLZXlzTGlzdC5hcHBlbmQoaW5kZXhLZXlzKTsKIAotICAg
ICAgICAgICAgbV9vYmplY3RTdG9yZUJhY2tlbmQtPnNldEluZGV4S2V5cyhwcmltYXJ5S2V5LCBp
bmRleE5hbWVzLCBpbmRleEtleXNMaXN0LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICAgICAg
ICAgIG1fb2JqZWN0U3RvcmVCYWNrZW5kLT5zZXRJbmRleEtleXMocHJpbWFyeUtleSwgaW5kZXhJ
ZHMsIGluZGV4S2V5c0xpc3QsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogCiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBhcmUgZG9uZSBpbmRleGluZywgdGVsbCB0
aGUgYmFja2VuZCB0byBnbwogICAgICAgICAgICAgLy8gYmFjayB0byBwcm9jZXNzaW5nIHRhc2tz
IG9mIHR5cGUgTm9ybWFsVGFzay4KLSAgICAgICAgICAgIG1fb2JqZWN0U3RvcmVCYWNrZW5kLT5z
ZXRJbmRleGVzUmVhZHkoaW5kZXhOYW1lcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgICAg
ICAgICBtX29iamVjdFN0b3JlQmFja2VuZC0+c2V0SW5kZXhlc1JlYWR5KGluZGV4SWRzLCBtX3Ry
YW5zYWN0aW9uLmdldCgpKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3RvcmVCYWNrZW5kLmNsZWFy
KCk7CiAgICAgICAgICAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7CiAgICAgICAgIH0KQEAgLTQ0
NCwxMiArNDQzLDEzIEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3JlOjppbmRl
eChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjCiAgICAgaWYgKGl0ICE9IG1f
aW5kZXhNYXAuZW5kKCkpCiAgICAgICAgIHJldHVybiBpdC0+dmFsdWU7CiAKLSAgICBpZiAoIW1f
bWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSkgeworICAgIGludDY0X3QgaW5kZXhJZCA9IG1f
bWV0YWRhdGEuZmluZEluZGV4KG5hbWUpOworICAgIGlmIChpbmRleElkID09IElEQkluZGV4TWV0
YWRhdGE6OkludmFsaWRJZCkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
REJfTk9UX0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCi0gICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5pbmRl
eChuYW1lLCBlYyk7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhC
YWNrZW5kID0gbV9iYWNrZW5kLT5pbmRleChpbmRleElkKTsKICAgICBBU1NFUlQoIWVjICYmIGlu
ZGV4QmFja2VuZCk7CiAKICAgICBjb25zdCBJREJJbmRleE1ldGFkYXRhKiBpbmRleE1ldGFkYXRh
KDApOwpAQCAtNDc2LDE0ICs0NzYsMTQgQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5k
ZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQotICAgIGlmICghbV9tZXRhZGF0YS5jb250YWluc0luZGV4KG5hbWUpKSB7
CisgICAgaW50NjRfdCBpbmRleElkID0gbV9tZXRhZGF0YS5maW5kSW5kZXgobmFtZSk7CisgICAg
aWYgKGluZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7CiAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kLT5kZWxldGVJbmRleChuYW1lLCBtX3RyYW5zYWN0
aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0ZUluZGV4KGluZGV4SWQs
IG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmICghZWMpIHsKLSAgICAgICAg
QVNTRVJUKG1fbWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSk7CiAgICAgICAgIElEQkluZGV4
TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKICAgICAgICAgaWYgKGl0
ICE9IG1faW5kZXhNYXAuZW5kKCkpIHsKICAgICAgICAgICAgIG1fbWV0YWRhdGEuaW5kZXhlcy5y
ZW1vdmUoaXQtPnZhbHVlLT5pZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXgg
OTc2YWQwYmRiN2I5N2I4YmRhYjcyMjJlOTkwNjk1ZGVjY2JhNWE2Mi4uYWYwNGQ1NDNjMzdkZjVh
ODdjMGYxZTVmM2NmNzAyMWUyYWQ1MTRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAK
QEAgLTEwOCw3ICsxMDgsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldElu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiB2b2lkIElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRl
eElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKIHsKLSAgICBJREJfVFJB
Q0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMiKTsKKyAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCIpOwogCiAgICAgUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKICAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwpAQCAtMTI3LDEwICsx
MjcsNiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsCiAgICAgICAgIGNhbGxiYWNrcy0+b25FcnJv
cihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9BQk9S
VF9FUlIpKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5k
ZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9y
PEluZGV4S2V5cz4mIGluZGV4S2V5cywgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgcmV0dXJuIHB1
dChwcnBWYWx1ZSwgcHJwS2V5LCBwdXRNb2RlLCBwcnBDYWxsYmFja3MsIHRyYW5zYWN0aW9uUHRy
LCBnZXRJbmRleElkcyhpbmRleE5hbWVzKSwgaW5kZXhLZXlzKTsKLX0KIG5hbWVzcGFjZSB7CiBj
bGFzcyBJbmRleFdyaXRlciB7CiBwdWJsaWM6CkBAIC0yNjAsMTIgKzI1Niw2IEBAIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBw
cnBQcmltYXJ5S2V5LCBjCiAgICAgfQogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3Qg
VmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRl
eEtleXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIpCi17
Ci0gICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzID0gZ2V0SW5kZXhJZHMoaW5kZXhOYW1lcyk7
Ci0gICAgcmV0dXJuIHNldEluZGV4S2V5cyhwcnBQcmltYXJ5S2V5LCBpbmRleElkcywgaW5kZXhL
ZXlzLCB0cmFuc2FjdGlvblB0cik7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25JbnRlcmZhY2UpCiB7CiAgICAg
SURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkiKTsK
QEAgLTI4MCwyMiArMjcwLDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJ
bmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uSW50ZXJmYWNlKQotewotICAgIFZl
Y3RvcjxpbnQ2NF90PiBpbmRleElkcyhpbmRleE5hbWVzLnNpemUoKSk7Ci0gICAgLy8gRklYTUU6
IFdlIG1hbnVhbGx5IGNvbnZlcnQgZWFjaCBuYW1lIHRvIGFuIGluZGV4SWQsIGV2ZW4gaWYgdGhl
IG5hbWUgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkLCBiZWNhdXNlIHdlIGhhdmUgdG8gcmVtb3Zl
IGV4YWN0bHkgdGhhdCBtYW55IHByZWVtcHRpdmUgZXZlbnRzLCBidXQgdGhpcyB3aWxsIGdvIGF3
YXkgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI2IGxh
bmRzLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy5zaXplKCk7ICsraSkg
ewotICAgICAgICBpbmRleElkc1tpXSA9IEludmFsaWRJZDsKLSAgICAgICAgZm9yIChJbmRleE1h
cDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9pbmRleGVz
LmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5uYW1lKCkgPT0gaW5k
ZXhOYW1lc1tpXSkgewotICAgICAgICAgICAgICAgIGluZGV4SWRzW2ldID0gaXQtPmtleTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAg
ICByZXR1cm4gc2V0SW5kZXhlc1JlYWR5KGluZGV4SWRzLCB0cmFuc2FjdGlvbkludGVyZmFjZSk7
Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5SW50
ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+ID4gcG9w
SW5kZXhJZHMsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rp
b24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRl
eGVzUmVhZHlJbnRlcm5hbCIpOwpAQCAtNDczLDExICs0NDcsNiBAQCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5kZXgoaW50
NjRfdCBpbgogICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleChj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIHJldHVybiBpbmRleChn
ZXRJbmRleElkKG5hbWUpKTsKLX0KLQogaW50NjRfdCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpnZXRJbmRleElkKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKICAgICBmb3IgKEluZGV4TWFwOjpj
b25zdF9pdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX2luZGV4ZXMuZW5k
KCk7ICsraXQpIHsKQEAgLTUxNCwxMSArNDgzLDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpkZWxldGVJbmRleChpbnQ2NF90IGluZGV4SWQsIElEQlRyYW5zYWN0aW9uQmFja2UK
ICAgICBtX2luZGV4ZXMucmVtb3ZlKGluZGV4SWQpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17
Ci0gICAgcmV0dXJuIGRlbGV0ZUluZGV4KGdldEluZGV4SWQobmFtZSksIHRyYW5zYWN0aW9uUHRy
LCBlYyk7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJ
bnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBs
PiBpbmRleCwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlv
bikKIHsKICAgICBvYmplY3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4KHRyYW5z
YWN0aW9uLT5iYWNraW5nU3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJ
ZCgpLCBvYmplY3RTdG9yZS0+aWQoKSwgaW5kZXgtPmlkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5oCmluZGV4IGMyZWZkM2IwZTNhMjFiNjEyNGUwNDljYjAxMjBkN2JmMjRmNjhjOTcuLmM3M2Ix
MjlmZmNhN2Y2ZmUwZjUzMGI2N2M5YmM2NzFmOTgwYjJlOTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmgKQEAgLTY0LDIwICs2NCwxNSBAQCBwdWJsaWM6CiAKICAgICAvLyBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2UKICAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4
S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5
PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtl
eXM+JiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29u
c3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKTsKIAogICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwog
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRl
SW5kZXgoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9v
bCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1Jl
ZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3Qg
VmVjdG9yPEluZGV4S2V5cz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5
S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRl
eGVzUmVhZHkoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IGluZGV4KGludDY0X3QpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJ
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAg
dmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1cnNv
cjo6RGlyZWN0aW9uLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZTo6VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXgg
OWFiZTg4M2NiYThlZWNkMTQyYzBjYzljNjgwZTg2OGQ0YWFlYjI3OC4uMjc1MDVjZWYyNGQwOGQx
OWVjN2I0MjZiYjhjOTE2YzVmMWI0OGVlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlLmgKQEAgLTYyLDIwICs2MiwxNSBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIFZlY3RvcjxS
ZWZQdHI8SURCS2V5PiA+IEluZGV4S2V5czsKIAotICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5k
ZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJL
ZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4
S2V5cz4mLCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKSA9IDA7
CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgPSAwOwogCiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25z
dCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZv
aWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFz
c1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNv
bnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikg
PSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7CiAgICAgdmlydHVhbCB2
b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2Rl
JikgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGluZGV4KGludDY0X3QpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25D
b2RlJikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGludDY0X3QsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3ItMS4wLmpzb24gYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLTEuMC5qc29uCmluZGV4IGUxOWU3ZTA2MDkx
YmNjNTUxM2IyZDcxYjQzMzE5ZGNiMGVhYmZmMTYuLjRmMDBlOWUxODBlNGMyZGEwMzc0ZTdhMjE0
NWU2NzhiNzE5NDFjOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3ItMS4wLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci0x
LjAuanNvbgpAQCAtOTQ1LDYgKzk0NSw3IEBACiAgICAgICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2Ugd2l0aCBhbiBh
cnJheSBvZiBvYmplY3Qgc3RvcmVzLiIsCiAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBb
CisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZGVzY3JpcHRpb24iOiAiSW50ZXJuYWwgYmFja2VuZCBzdG9yYWdlIGlkLiIgfSwKICAgICAgICAg
ICAgICAgICAgICAgeyAibmFtZSI6ICJuYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0
aW9uIjogIkRhdGFiYXNlIG5hbWUuIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
InZlcnNpb24iLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgdmVy
c2lvbi4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqZWN0U3RvcmVzIiwg
InR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIk9iamVjdFN0b3JlIiB9LCAiZGVz
Y3JpcHRpb24iOiAiT2JqZWN0IHN0b3JlcyBpbiB0aGlzIGRhdGFiYXNlLiIgfQpAQCAtOTU1LDYg
Kzk1Niw3IEBACiAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAg
ICAgICAiZGVzY3JpcHRpb24iOiAiT2JqZWN0IHN0b3JlLiIsCiAgICAgICAgICAgICAgICAgInBy
b3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAidHlwZSI6
ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiSW50ZXJuYWwgYmFja2VuZCBzdG9yYWdlIGlkIiB9
LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5hbWUiLCAidHlwZSI6ICJzdHJpbmci
LCAiZGVzY3JpcHRpb24iOiAiT2JqZWN0IHN0b3JlIG5hbWUuIiB9LAogICAgICAgICAgICAgICAg
ICAgICB7ICJuYW1lIjogImtleVBhdGgiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24i
OiAiT2JqZWN0IHN0b3JlIGtleSBwYXRoLiIgfSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJpbmRleGVzIiwgInR5cGUiOiAiYXJyYXkiLCAiaXRlbXMiOiB7ICIkcmVmIjogIk9iamVj
dFN0b3JlSW5kZXgiIH0sICJkZXNjcmlwdGlvbiI6ICJJbmRleGVzIGluIHRoaXMgb2JqZWN0IHN0
b3JlLiIgfQpAQCAtOTY1LDYgKzk2Nyw3IEBACiAgICAgICAgICAgICAgICAgInR5cGUiOiAib2Jq
ZWN0IiwKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2JqZWN0IHN0b3JlIGluZGV4
LiIsCiAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgICAg
IHsgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiSW50ZXJu
YWwgYmFja2VuZCBzdG9yYWdlIGlkIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
Im5hbWUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiSW5kZXggbmFtZS4iIH0s
CiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAia2V5UGF0aCIsICJ0eXBlIjogInN0cmlu
ZyIsICJkZXNjcmlwdGlvbiI6ICJJbmRleCBrZXkgcGF0aC4iIH0sCiAgICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAidW5pcXVlIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6
ICJJZiB0cnVlLCBpbmRleCBpcyB1bmlxdWUuIiB9LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3Rvci5qc29uIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3Rvci5qc29uCmluZGV4IDUxNTY2YWQzMzJmNDlkN2EyYzk4ZTM2YjQ5Y2Q1OWM5ODZjMzQ4
MmYuLjU2ODA0ZTM0Y2NmMmE3YmY0MjAxZGUxZTY1OWQ2N2FlZTZmZTk5OWMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuanNvbgorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KQEAgLTExODYsNiArMTE4Niw3IEBACiAgICAg
ICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICAgICAiZGVzY3JpcHRp
b24iOiAiRGF0YWJhc2Ugd2l0aCBhbiBhcnJheSBvZiBvYmplY3Qgc3RvcmVzLiIsCiAgICAgICAg
ICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAi
aWQiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiSW50ZXJuYWwgZGF0YWJhc2Ug
aWQuIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5hbWUiLCAidHlwZSI6ICJz
dHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgbmFtZS4iIH0sCiAgICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAidmVyc2lvbiIsICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlv
biI6ICJEZXByZWNhdGVkIHN0cmluZyBkYXRhYmFzZSB2ZXJzaW9uLiIgfSwKICAgICAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJpbnRWZXJzaW9uIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNj
cmlwdGlvbiI6ICJJbnRlZ2VyIGRhdGFiYXNlIHZlcnNpb24uIiB9LApAQCAtMTE5Nyw2ICsxMTk4
LDcgQEAKICAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgICAg
ICJkZXNjcmlwdGlvbiI6ICJPYmplY3Qgc3RvcmUuIiwKICAgICAgICAgICAgICAgICAicHJvcGVy
dGllcyI6IFsKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpZCIsICJ0eXBlIjogIm51
bWJlciIsICJkZXNjcmlwdGlvbiI6ICJJbnRlcm5hbCBzdG9yYWdlIG9iamVjdCBzdG9yZSBpZC4i
IH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibmFtZSIsICJ0eXBlIjogInN0cmlu
ZyIsICJkZXNjcmlwdGlvbiI6ICJPYmplY3Qgc3RvcmUgbmFtZS4iIH0sCiAgICAgICAgICAgICAg
ICAgICAgIHsgIm5hbWUiOiAia2V5UGF0aCIsICIkcmVmIjogIktleVBhdGgiLCAiZGVzY3JpcHRp
b24iOiAiT2JqZWN0IHN0b3JlIGtleSBwYXRoLiIgfSwKICAgICAgICAgICAgICAgICAgICAgeyAi
bmFtZSI6ICJhdXRvSW5jcmVtZW50IiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6
ICJJZiB0cnVlLCBvYmplY3Qgc3RvcmUgaGFzIGF1dG8gaW5jcmVtZW50IGZsYWcgc2V0LiIgfSwK
QEAgLTEyMDgsNiArMTIxMCw3IEBACiAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwK
ICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2JqZWN0IHN0b3JlIGluZGV4LiIsCiAg
ICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5h
bWUiOiAiaWQiLCAidHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiSW50ZXJuYWwgc3Rv
cmFnZSBpbmRleCBpZC4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAibmFtZSIs
ICJ0eXBlIjogInN0cmluZyIsICJkZXNjcmlwdGlvbiI6ICJJbmRleCBuYW1lLiIgfSwKICAgICAg
ICAgICAgICAgICAgICAgeyAibmFtZSI6ICJrZXlQYXRoIiwgIiRyZWYiOiAiS2V5UGF0aCIsICJk
ZXNjcmlwdGlvbiI6ICJJbmRleCBrZXkgcGF0aC4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAidW5pcXVlIiwgInR5cGUiOiAiYm9vbGVhbiIsICJkZXNjcmlwdGlvbiI6ICJJZiB0
cnVlLCBpbmRleCBpcyB1bmlxdWUuIiB9LApAQCAtMTI5Niw4ICsxMjk5LDggQEAKICAgICAgICAg
ICAgICAgICAicGFyYW1ldGVycyI6IFsKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJm
cmFtZUlkIiwgIiRyZWYiOiAiTmV0d29yay5GcmFtZUlkIiwgImRlc2NyaXB0aW9uIjogIkZyYW1l
IGlkLiIgfSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJkYXRhYmFzZU5hbWUiLCAi
dHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiRGF0YWJhc2UgbmFtZS4iIH0sCi0gICAg
ICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqZWN0U3RvcmVOYW1lIiwgInR5cGUiOiAic3Ry
aW5nIiwgImRlc2NyaXB0aW9uIjogIk9iamVjdCBzdG9yZSBuYW1lLiIgfSwKLSAgICAgICAgICAg
ICAgICAgICAgeyAibmFtZSI6ICJpbmRleE5hbWUiLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3Jp
cHRpb24iOiAiSW5kZXggbmFtZSwgZW1wdHkgc3RyaW5nIGZvciBvYmplY3Qgc3RvcmUgZGF0YSBy
ZXF1ZXN0cy4iIH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAib2JqZWN0U3RvcmVJ
ZCIsICJ0eXBlIjogIm51bWJlciIsICJkZXNjcmlwdGlvbiI6ICJPYmplY3Qgc3RvcmUgbmFtZS4i
IH0sCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaW5kZXhJZCIsICJ0eXBlIjogIm51
bWJlciIsICJkZXNjcmlwdGlvbiI6ICJJbmRleCBuYW1lLCBlbXB0eSBzdHJpbmcgZm9yIG9iamVj
dCBzdG9yZSBkYXRhIHJlcXVlc3RzLiIgfSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6
ICJza2lwQ291bnQiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIk51bWJlciBv
ZiByZWNvcmRzIHRvIHNraXAuIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogInBh
Z2VTaXplIiwgInR5cGUiOiAiaW50ZWdlciIsICJkZXNjcmlwdGlvbiI6ICJOdW1iZXIgb2YgcmVj
b3JkcyB0byBmZXRjaC4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAia2V5UmFu
Z2UiLCAiJHJlZiI6ICJLZXlSYW5nZSIsICJvcHRpb25hbCI6IHRydWUsICJkZXNjcmlwdGlvbiI6
ICJLZXkgcmFuZ2UuIiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckluZGV4ZWREQkFnZW50LmNwcAppbmRleCA2MzQwMWRkNmViYWFmY2YxNjdhNTM5ZDAzYmJj
YzVhOGE3NmFjZTg1Li45ZTMxMGU2OWQ5ZDlkYTA4YmFiMzIxNDAxZjVhY2Q2ZTZmMzA5ZmI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdl
bnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJB
Z2VudC5jcHAKQEAgLTIzMiwzNSArMjMyLDIzIEBAIHZvaWQgRXhlY3V0YWJsZVdpdGhEYXRhYmFz
ZTo6c3RhcnQoSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UqIGlkYkZhY3RvcnksIFNlY3VyCiAg
ICAgaWRiRmFjdG9yeS0+b3BlbihkYXRhYmFzZU5hbWUsIElEQkRhdGFiYXNlTWV0YWRhdGE6Ok5v
SW50VmVyc2lvbiwgY2FsbGJhY2ssIG1fY29ubmVjdGlvbi5jYWxsYmFja3MoKSwgc2VjdXJpdHlP
cmlnaW4sIGNvbnRleHQsIFN0cmluZygpKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbkZvckRhdGFiYXNlKElEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZSogaWRiRGF0YWJhc2UsIGNvbnN0IFN0cmluZyYgb2JqZWN0U3Rv
cmVOYW1lKQorc3RhdGljIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PiB0cmFuc2FjdGlvbkZvckRhdGFiYXNlKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSogaWRi
RGF0YWJhc2UsIGludDY0X3Qgb2JqZWN0U3RvcmVJZCkKIHsKLSAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gdHJhbnNhY3Rpb25PYmplY3RTdG9yZU5h
bWVzTGlzdCA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIHRyYW5zYWN0aW9uT2JqZWN0
U3RvcmVOYW1lc0xpc3QtPmFwcGVuZChvYmplY3RTdG9yZU5hbWUpOwotICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGlkYlRyYW5zYWN0aW9uID0gaWRiRGF0YWJhc2Ut
PnRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uT2JqZWN0U3RvcmVOYW1lc0xpc3QuZ2V0KCksIElEQlRy
YW5zYWN0aW9uOjpSRUFEX09OTFksIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAw
OworICAgIFZlY3RvcjxpbnQ2NF90PiB0cmFuc2FjdGlvbk9iamVjdFN0b3JlSWRzOworICAgIHRy
YW5zYWN0aW9uT2JqZWN0U3RvcmVJZHMuYXBwZW5kKG9iamVjdFN0b3JlSWQpOworICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGlkYlRyYW5zYWN0aW9uID0gaWRiRGF0
YWJhc2UtPnRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uT2JqZWN0U3RvcmVJZHMsIElEQlRyYW5zYWN0
aW9uOjpSRUFEX09OTFkpOwogICAgIHJldHVybiBpZGJUcmFuc2FjdGlvbjsKIH0KIAotc3RhdGlj
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUZv
clRyYW5zYWN0aW9uKElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogaWRiVHJhbnNhY3Rp
b24sIGNvbnN0IFN0cmluZyYgb2JqZWN0U3RvcmVOYW1lKQorc3RhdGljIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUZvclRyYW5zYWN0aW9uKElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogaWRiVHJhbnNhY3Rpb24sIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCkKIHsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBpZGJPYmplY3RTdG9yZSA9IGlkYlRyYW5zYWN0
aW9uLT5vYmplY3RTdG9yZShvYmplY3RTdG9yZU5hbWUsIGVjKTsKKyAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBpZGJPYmplY3RTdG9yZSA9IGlkYlRyYW5zYWN0aW9u
LT5vYmplY3RTdG9yZShvYmplY3RTdG9yZUlkLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICBy
ZXR1cm4gMDsKICAgICByZXR1cm4gaWRiT2JqZWN0U3RvcmU7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhGb3JPYmplY3RTdG9yZShJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UqIGlkYk9iamVjdFN0b3JlLCBjb25zdCBTdHJpbmcmIGlu
ZGV4TmFtZSkKLXsKLSAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKLSAgICBSZWZQdHI8SURCSW5k
ZXhCYWNrZW5kSW50ZXJmYWNlPiBpZGJJbmRleCA9IGlkYk9iamVjdFN0b3JlLT5pbmRleChpbmRl
eE5hbWUsIGVjKTsKLSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBp
ZGJJbmRleDsKLX0KLQogc3RhdGljIFBhc3NSZWZQdHI8S2V5UGF0aD4ga2V5UGF0aEZyb21JREJL
ZXlQYXRoKGNvbnN0IElEQktleVBhdGgmIGlkYktleVBhdGgpCiB7CiAgICAgUmVmUHRyPEtleVBh
dGg+IGtleVBhdGg7CkBAIC0zMTYsNiArMzA0LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAg
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEgPSBpdC0+dmFsdWU7CiAKICAg
ICAgICAgICAgICAgICBSZWZQdHI8T2JqZWN0U3RvcmVJbmRleD4gb2JqZWN0U3RvcmVJbmRleCA9
IE9iamVjdFN0b3JlSW5kZXg6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAgIC5zZXRJZChp
bmRleE1ldGFkYXRhLmlkKQogICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZShpbmRleE1ldGFk
YXRhLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRLZXlQYXRoKGtleVBhdGhGcm9tSURC
S2V5UGF0aChpbmRleE1ldGFkYXRhLmtleVBhdGgpKQogICAgICAgICAgICAgICAgICAgICAuc2V0
VW5pcXVlKGluZGV4TWV0YWRhdGEudW5pcXVlKQpAQCAtMzI0LDYgKzMxMyw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgUmVmUHRyPE9iamVjdFN0b3JlPiBvYmplY3RT
dG9yZSA9IE9iamVjdFN0b3JlOjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIC5zZXRJZChvYmpl
Y3RTdG9yZU1ldGFkYXRhLmlkKQogICAgICAgICAgICAgICAgIC5zZXROYW1lKG9iamVjdFN0b3Jl
TWV0YWRhdGEubmFtZSkKICAgICAgICAgICAgICAgICAuc2V0S2V5UGF0aChrZXlQYXRoRnJvbUlE
QktleVBhdGgob2JqZWN0U3RvcmVNZXRhZGF0YS5rZXlQYXRoKSkKICAgICAgICAgICAgICAgICAu
c2V0QXV0b0luY3JlbWVudChvYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQpCkBAIC0z
MzEsNiArMzIxLDcgQEAgcHVibGljOgogICAgICAgICAgICAgb2JqZWN0U3RvcmVzLT5hZGRJdGVt
KG9iamVjdFN0b3JlKTsKICAgICAgICAgfQogICAgICAgICBSZWZQdHI8RGF0YWJhc2VXaXRoT2Jq
ZWN0U3RvcmVzPiByZXN1bHQgPSBEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM6OmNyZWF0ZSgpCisg
ICAgICAgICAgICAuc2V0SWQoZGF0YWJhc2VNZXRhZGF0YS5pZCkKICAgICAgICAgICAgIC5zZXRO
YW1lKGRhdGFiYXNlTWV0YWRhdGEubmFtZSkKICAgICAgICAgICAgIC5zZXRJbnRWZXJzaW9uKGRh
dGFiYXNlTWV0YWRhdGEuaW50VmVyc2lvbikKICAgICAgICAgICAgIC5zZXRWZXJzaW9uKGRhdGFi
YXNlTWV0YWRhdGEudmVyc2lvbikKQEAgLTU0OCw5ICs1MzksOSBAQCBwcml2YXRlOgogCiBjbGFz
cyBEYXRhTG9hZGVyQ2FsbGJhY2sgOiBwdWJsaWMgRXhlY3V0YWJsZVdpdGhEYXRhYmFzZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YUxvYWRlckNhbGxiYWNrPiBjcmVhdGUo
UGFzc1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IElu
amVjdGVkU2NyaXB0JiBpbmplY3RlZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBpZGJL
ZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YUxvYWRlckNhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxSZXF1ZXN0RGF0
YUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IEluamVjdGVkU2NyaXB0JiBpbmplY3Rl
ZFNjcmlwdCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdl
U2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YUxvYWRlckNhbGxi
YWNrKHJlcXVlc3RDYWxsYmFjaywgaW5qZWN0ZWRTY3JpcHQsIG9iamVjdFN0b3JlTmFtZSwgaW5k
ZXhOYW1lLCBpZGJLZXlSYW5nZSwgc2tpcENvdW50LCBwYWdlU2l6ZSkpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IERhdGFMb2FkZXJDYWxsYmFjayhyZXF1ZXN0Q2FsbGJhY2ssIGluamVj
dGVkU2NyaXB0LCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBpZGJLZXlSYW5nZSwgc2tpcENvdW50
LCBwYWdlU2l6ZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkRhdGFMb2FkZXJDYWxsYmFjaygp
IHsgfQpAQCAtNTYxLDE3ICs1NTIsMTcgQEAgcHVibGljOgogICAgICAgICBpZiAoIW1fcmVxdWVz
dENhbGxiYWNrLT5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGlkYlRyYW5zYWN0aW9uID0gdHJh
bnNhY3Rpb25Gb3JEYXRhYmFzZShpZGJEYXRhYmFzZS5nZXQoKSwgbV9vYmplY3RTdG9yZU5hbWUp
OworICAgICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBpZGJUcmFu
c2FjdGlvbiA9IHRyYW5zYWN0aW9uRm9yRGF0YWJhc2UoaWRiRGF0YWJhc2UuZ2V0KCksIG1fb2Jq
ZWN0U3RvcmVJZCk7CiAgICAgICAgIGlmICghaWRiVHJhbnNhY3Rpb24pCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGlk
Yk9iamVjdFN0b3JlID0gb2JqZWN0U3RvcmVGb3JUcmFuc2FjdGlvbihpZGJUcmFuc2FjdGlvbi5n
ZXQoKSwgbV9vYmplY3RTdG9yZU5hbWUpOworICAgICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBpZGJPYmplY3RTdG9yZSA9IG9iamVjdFN0b3JlRm9yVHJhbnNhY3Rp
b24oaWRiVHJhbnNhY3Rpb24uZ2V0KCksIG1fb2JqZWN0U3RvcmVJZCk7CiAgICAgICAgIGlmICgh
aWRiT2JqZWN0U3RvcmUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgUmVmUHRyPE9w
ZW5DdXJzb3JDYWxsYmFjaz4gb3BlbkN1cnNvckNhbGxiYWNrID0gT3BlbkN1cnNvckNhbGxiYWNr
OjpjcmVhdGUobV9pbmplY3RlZFNjcmlwdCwgdGhpcywgaWRiVHJhbnNhY3Rpb24uZ2V0KCksIG1f
cmVxdWVzdENhbGxiYWNrLCBtX3NraXBDb3VudCwgbV9wYWdlU2l6ZSk7CiAKLSAgICAgICAgaWYg
KCFtX2luZGV4TmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IGlkYkluZGV4ID0gaW5kZXhGb3JPYmplY3RTdG9yZShpZGJPYmplY3RT
dG9yZS5nZXQoKSwgbV9pbmRleE5hbWUpOworICAgICAgICBpZiAoIW1faW5kZXhJZCA9PSBJREJJ
bmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKKyAgICAgICAgICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IGlkYkluZGV4ID0gaWRiT2JqZWN0U3RvcmUtPmluZGV4KG1faW5kZXhJ
ZCk7CiAgICAgICAgICAgICBpZiAoIWlkYkluZGV4KQogICAgICAgICAgICAgICAgIHJldHVybjsK
IApAQCAtNTg0LDE4ICs1NzUsMTggQEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBE
YXRhTG9hZGVyQ2FsbGJhY2soUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiByZXF1ZXN0
Q2FsbGJhY2ssIGNvbnN0IEluamVjdGVkU2NyaXB0JiBpbmplY3RlZFNjcmlwdCwgY29uc3QgU3Ry
aW5nJiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBQYXNzUmVmUHRy
PElEQktleVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNp
emUpCisgICAgRGF0YUxvYWRlckNhbGxiYWNrKFBhc3NSZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFj
az4gcmVxdWVzdENhbGxiYWNrLCBjb25zdCBJbmplY3RlZFNjcmlwdCYgaW5qZWN0ZWRTY3JpcHQs
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCwgaW50NjRfdCBpbmRleElkLCBQYXNzUmVmUHRyPElEQktl
eVJhbmdlPiBpZGJLZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCiAg
ICAgICAgIDogbV9yZXF1ZXN0Q2FsbGJhY2socmVxdWVzdENhbGxiYWNrKQogICAgICAgICAsIG1f
aW5qZWN0ZWRTY3JpcHQoaW5qZWN0ZWRTY3JpcHQpCi0gICAgICAgICwgbV9vYmplY3RTdG9yZU5h
bWUob2JqZWN0U3RvcmVOYW1lKQotICAgICAgICAsIG1faW5kZXhOYW1lKGluZGV4TmFtZSkKKyAg
ICAgICAgLCBtX29iamVjdFN0b3JlSWQob2JqZWN0U3RvcmVJZCkKKyAgICAgICAgLCBtX2luZGV4
SWQoaW5kZXhJZCkKICAgICAgICAgLCBtX2lkYktleVJhbmdlKGlkYktleVJhbmdlKQogICAgICAg
ICAsIG1fc2tpcENvdW50KHNraXBDb3VudCkKICAgICAgICAgLCBtX3BhZ2VTaXplKHBhZ2VTaXpl
KSB7IH0KICAgICBSZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gbV9yZXF1ZXN0Q2FsbGJhY2s7
CiAgICAgSW5qZWN0ZWRTY3JpcHQgbV9pbmplY3RlZFNjcmlwdDsKLSAgICBTdHJpbmcgbV9vYmpl
Y3RTdG9yZU5hbWU7Ci0gICAgU3RyaW5nIG1faW5kZXhOYW1lOworICAgIGludDY0X3QgbV9vYmpl
Y3RTdG9yZUlkOworICAgIGludDY0X3QgbV9pbmRleElkOwogICAgIFJlZlB0cjxJREJLZXlSYW5n
ZT4gbV9pZGJLZXlSYW5nZTsKICAgICBpbnQgbV9za2lwQ291bnQ7CiAgICAgdW5zaWduZWQgbV9w
YWdlU2l6ZTsKQEAgLTcwNiw3ICs2OTcsNyBAQCB2b2lkIEluc3BlY3RvckluZGV4ZWREQkFnZW50
OjpyZXF1ZXN0RGF0YWJhc2UoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBTdAogICAg
IGRhdGFiYXNlTG9hZGVyQ2FsbGJhY2stPnN0YXJ0KGlkYkZhY3RvcnksIGRvY3VtZW50LT5zZWN1
cml0eU9yaWdpbigpLCBkb2N1bWVudCwgZGF0YWJhc2VOYW1lKTsKIH0KIAotdm9pZCBJbnNwZWN0
b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBj
b25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBjb25zdCBT
dHJpbmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIGludCBza2lw
Q291bnQsIGludCBwYWdlU2l6ZSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGtleVJh
bmdlLCBQYXNzUmVmUHRyPFJlcXVlc3REYXRhQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKK3Zv
aWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKEVycm9yU3RyaW5nKiBlcnJv
clN0cmluZywgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFt
ZSwgZG91YmxlIG9iamVjdFN0b3JlSWQsIGRvdWJsZSBpbmRleElkLCBpbnQgc2tpcENvdW50LCBp
bnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBrZXlSYW5nZSwgUGFz
c1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2spCiB7CiAgICAgRnJh
bWUqIGZyYW1lID0gYXNzZXJ0RnJhbWUoZXJyb3JTdHJpbmcsIGZyYW1lSWQsIG1fcGFnZUFnZW50
KTsKICAgICBpZiAoIWZyYW1lKQpAQCAtNzI2LDcgKzcxNyw3IEBAIHZvaWQgSW5zcGVjdG9ySW5k
ZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKEVycm9yU3RyaW5nKiBlcnJvclN0cmluZywgY29uc3Qg
U3RyaW5nCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8RGF0YUxvYWRlckNh
bGxiYWNrPiBkYXRhTG9hZGVyQ2FsbGJhY2sgPSBEYXRhTG9hZGVyQ2FsbGJhY2s6OmNyZWF0ZShy
ZXF1ZXN0Q2FsbGJhY2ssIGluamVjdGVkU2NyaXB0LCBvYmplY3RTdG9yZU5hbWUsIGluZGV4TmFt
ZSwgaWRiS2V5UmFuZ2UsIHNraXBDb3VudCwgcGFnZVNpemUpOworICAgIFJlZlB0cjxEYXRhTG9h
ZGVyQ2FsbGJhY2s+IGRhdGFMb2FkZXJDYWxsYmFjayA9IERhdGFMb2FkZXJDYWxsYmFjazo6Y3Jl
YXRlKHJlcXVlc3RDYWxsYmFjaywgaW5qZWN0ZWRTY3JpcHQsIG9iamVjdFN0b3JlSWQsIGluZGV4
SWQsIGlkYktleVJhbmdlLCBza2lwQ291bnQsIHBhZ2VTaXplKTsKICAgICBkYXRhTG9hZGVyQ2Fs
bGJhY2stPnN0YXJ0KGlkYkZhY3RvcnksIGRvY3VtZW50LT5zZWN1cml0eU9yaWdpbigpLCBkb2N1
bWVudCwgZGF0YWJhc2VOYW1lKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckluZGV4ZWREQkFnZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaAppbmRleCBkMWQ3YzM3ZDNhM2IzNzE5NWU1N2Ey
MGRhODkzMTE4MDZhNjA0NTMxLi4wODVhYzUxMGVjY2JhOWYyYzE2MzFiMGRhMzRkMjBmNzhhY2Fh
YjRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhl
ZERCQWdlbnQuaApAQCAtNjAsNyArNjAsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRp
c2FibGUoRXJyb3JTdHJpbmcqKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVxdWVzdERhdGFiYXNlTmFt
ZXNGb3JGcmFtZShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgUGFzc1JlZlB0
cjxSZXF1ZXN0RGF0YWJhc2VOYW1lc0ZvckZyYW1lQ2FsbGJhY2s+KTsKICAgICB2aXJ0dWFsIHZv
aWQgcmVxdWVzdERhdGFiYXNlKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBj
b25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YWJhc2VDYWxs
YmFjaz4pOwotICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RGF0YShFcnJvclN0cmluZyosIGNvbnN0
IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0cmlu
ZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50IHNraXBDb3Vu
dCwgaW50IHBhZ2VTaXplLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pioga2V5UmFuZ2Us
IFBhc3NSZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4pOworICAgIHZpcnR1YWwgdm9pZCByZXF1
ZXN0RGF0YShFcnJvclN0cmluZyosIGNvbnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5n
JiBkYXRhYmFzZU5hbWUsIGRvdWJsZSBvYmplY3RTdG9yZUlkLCBkb3VibGUgaW5kZXhJZCwgaW50
IHNraXBDb3VudCwgaW50IHBhZ2VTaXplLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Piog
a2V5UmFuZ2UsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4pOwogCiBwcml2YXRlOgog
ICAgIEluc3BlY3RvckluZGV4ZWREQkFnZW50KEluc3RydW1lbnRpbmdBZ2VudHMqLCBJbnNwZWN0
b3JTdGF0ZSosIEluamVjdGVkU2NyaXB0TWFuYWdlciosIEluc3BlY3RvclBhZ2VBZ2VudCopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVC
YWNrZW5kUHJveHkuY3BwCmluZGV4IDZhMGQwMjc3MmI4NDRjN2VmNmFjMjBmYmNlYzNjYzMxZDFm
MzYxNDIuLjhlODlkZWIwMzNmM2RlYzk4OGFhNjdhYzNjZGU0YTVkOTY5NWZiZmQgMTAwNzU1Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tl
bmRQcm94eS5jcHAKQEAgLTY3LDE2ICs2Nyw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHk6OmdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0CiAg
ICAgbV93ZWJJREJPYmplY3RTdG9yZS0+Z2V0KGtleVJhbmdlLCBuZXcgV2ViSURCQ2FsbGJhY2tz
SW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24o
KSwgZWMpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpwdXRXaXRoSW5k
ZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0
cjxJREJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4m
IGluZGV4S2V5cywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gVGhlIHRyYW5zYWN0aW9u
IHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3Qg
YXMsIGluIHRoZSByZW5kZXJlciwKLSAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBp
bnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFBy
b3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5k
UHJveHkqPih0cmFuc2FjdGlvbik7Ci0gICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gd2ViSW5kZXhO
YW1lcyhpbmRleE5hbWVzKTsKLSAgICBXZWJWZWN0b3I8SW5kZXhLZXlzPiB3ZWJJbmRleEtleXMo
aW5kZXhLZXlzKTsKLSAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5wdXRXaXRoSW5kZXhLZXlzKHZh
bHVlLCBrZXksIHN0YXRpY19jYXN0PFdlYklEQk9iamVjdFN0b3JlOjpQdXRNb2RlPihwdXRNb2Rl
KSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHkt
PmdldFdlYklEQlRyYW5zYWN0aW9uKCksIHdlYkluZGV4TmFtZXMsIHdlYkluZGV4S2V5cywgZWMp
OwotfQotCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpwdXQoUGFzc1JlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRN
b2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxpbnQ2NF90
PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCiB7CiAgICAg
Ly8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIg
dG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKQEAgLTg1LDE2ICs3NSw2IEBA
IHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhCiAgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+cHV0KHZh
bHVlLCBrZXksIHN0YXRpY19jYXN0PFdlYklEQk9iamVjdFN0b3JlOjpQdXRNb2RlPihwdXRNb2Rl
KSwgbmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHkt
PmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGluZGV4SWRzLCBpbmRleEtleXMpOwogfQogCi12b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJL
ZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uKQotewotICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlz
IGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUg
cmVuZGVyZXIsCi0gICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBh
cmUgcHJveHkgb2JqZWN0cy4KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNh
Y3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJh
bnNhY3Rpb24pOwotICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHdlYkluZGV4TmFtZXMoaW5kZXhO
YW1lcyk7Ci0gICAgV2ViVmVjdG9yPEluZGV4S2V5cz4gd2ViSW5kZXhLZXlzKGluZGV4S2V5cyk7
Ci0gICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhLZXlzKHBycFByaW1hcnlLZXksIHdl
YkluZGV4TmFtZXMsIHdlYkluZGV4S2V5cywgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRy
YW5zYWN0aW9uKCkpOwotfQotCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJ
bmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCiB7CiAgICAgLy8gVGhl
IHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBw
cm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKQEAgLTEzMCwyNSArMTEwLDYgQEAgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZFBy
b3h5OjpjcmVhdGVJbmRleChpbnQKICAgICByZXR1cm4gSURCSW5kZXhCYWNrZW5kUHJveHk6OmNy
ZWF0ZShpbmRleC5yZWxlYXNlKCkpOwogfQogCi1QYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZElu
dGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmNyZWF0ZUluZGV4KGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wg
bXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwg
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMg
Z3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSBy
ZW5kZXJlciwKLSAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFy
ZSBwcm94eSBvYmplY3RzLgotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2Fj
dGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFu
c2FjdGlvbik7Ci0gICAgT3duUHRyPFdlYklEQkluZGV4PiBpbmRleCA9IGFkb3B0UHRyKG1fd2Vi
SURCT2JqZWN0U3RvcmUtPmNyZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlF
bnRyeSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKSk7Ci0g
ICAgaWYgKCFpbmRleCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIElEQkluZGV4QmFj
a2VuZFByb3h5OjpjcmVhdGUoaW5kZXgucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRQcm94eTo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBp
bmRleE5hbWVzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQot
ewotICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBw
b2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCi0gICAgLy8gYWxs
IGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KLSAg
ICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19j
YXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOwotICAgIG1fd2Vi
SURCT2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShXZWJWZWN0b3I8V2ViU3RyaW5nPihpbmRl
eE5hbWVzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkpOwotfQot
CiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleGVzUmVhZHkoY29uc3Qg
VmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvbikKIHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFy
YW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRl
cmVyLApAQCAtMTU3LDE0ICsxMTgsNiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
OjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcwogICAgIG1f
d2ViSURCT2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShXZWJWZWN0b3I8bG9uZyBsb25nPihp
bmRleElkcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpKTsKIH0K
IAotUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFj
a2VuZFByb3h5OjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIE93blB0cjxXZWJJREJJbmRleD4gaW5kZXggPSBhZG9wdFB0cihtX3dlYklEQk9iamVj
dFN0b3JlLT5pbmRleChuYW1lLCBlYykpOwotICAgIGlmICghaW5kZXgpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBJREJJbmRleEJhY2tlbmRQcm94eTo6Y3JlYXRlKGluZGV4LnJlbGVh
c2UoKSk7Ci19Ci0KIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgoaW50NjRfdCBpbmRleElkKQogewogICAgIE93blB0
cjxXZWJJREJJbmRleD4gaW5kZXggPSBhZG9wdFB0cihtX3dlYklEQk9iamVjdFN0b3JlLT5pbmRl
eChpbmRleElkKSk7CkBAIC0xNzMsMTQgKzEyNiw2IEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgoaW50NjRfdCBp
CiAgICAgcmV0dXJuIElEQkluZGV4QmFja2VuZFByb3h5OjpjcmVhdGUoaW5kZXgucmVsZWFzZSgp
KTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVsZXRlSW5kZXgoY29u
c3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0
aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRl
ciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4g
dGhlIHJlbmRlcmVyLAotICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFj
ZXMgYXJlIHByb3h5IG9iamVjdHMuCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRy
YW5zYWN0aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+
KHRyYW5zYWN0aW9uKTsKLSAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5kZWxldGVJbmRleChuYW1l
LCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgZWMpOwotfQotCiB2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpkZWxldGVJbmRleChjb25zdCBpbnQ2NF90
IGluZGV4SWQsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1
YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVu
ZGVyZXIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RT
dG9yZUJhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0
U3RvcmVCYWNrZW5kUHJveHkuaAppbmRleCA3OTExM2FlOTU2NWEzMTRkY2NmMmJhYzc4MGViYTc1
Mzk0ZjZjZGFkLi5kYThmNmJiZGQ4MmQxZjJiMDg5NDNlNzgzMmVlNThhZWJlMjI1OWVjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFj
a2VuZFByb3h5LmgKQEAgLTQ0LDIxICs0NCwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURC
T2JqZWN0U3RvcmVCYWNrZW5kUHJveHkoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJh
Y2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFdURjo6VmVjdG9y
PFdURjo6U3RyaW5nPiYsIGNvbnN0IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFdlYkNvcmU6
OlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiwgUHV0
TW9kZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBXVEY6OlZlY3RvcjxpbnQ2NF90PiYsIGNv
bnN0IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVu
Y3Rpb24oUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNz
UmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVJbmRleChpbnQ2NF90
IGlkLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OklEQktleVBhdGgmLCBib29s
IHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRp
RW50cnksIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6
OkV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6
OlN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFz
c1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFdURjo6VmVjdG9y
PGludDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8
aW50NjRfdD4mLCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKIAot
ICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChj
b25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoaW50NjRfdCk7Ci0g
ICAgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
b2lkIGRlbGV0ZUluZGV4KGludDY0X3QsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBv
cGVuQ3Vyc29yKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+LCBXZWJDb3JlOjpJREJD
dXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJD
b3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUlt
cGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNw
cAppbmRleCA5MGMyNjIzODk0OWU0NGEwNzQyOTk1NGNmN2Q4OWUxNTY1MGUxYWEwLi41OWFiZDUz
MjkyODAxZjMwNDkzZGJkMGM0N2Y2ZTAwZDM2MGJkZDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKQEAgLTcwLDExICs3MCw2IEBA
IFdlYklEQk9iamVjdFN0b3JlKiBXZWJJREJEYXRhYmFzZUltcGw6OmNyZWF0ZU9iamVjdFN0b3Jl
KGxvbmcgbG9uZyBpZCwgY29uc3QgV2ViCiAgICAgcmV0dXJuIG5ldyBXZWJJREJPYmplY3RTdG9y
ZUltcGwob2JqZWN0U3RvcmUpOwogfQogCi12b2lkIFdlYklEQkRhdGFiYXNlSW1wbDo6ZGVsZXRl
T2JqZWN0U3RvcmUoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJJREJUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIG1fZGF0YWJhc2VC
YWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShuYW1lLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOwotfQotCiB2b2lkIFdlYklEQkRhdGFiYXNlSW1w
bDo6ZGVsZXRlT2JqZWN0U3RvcmUobG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIGNvbnN0IFdlYklE
QlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
bV9kYXRhYmFzZUJhY2tlbmQtPmRlbGV0ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQsIHRyYW5z
YWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7CkBAIC04NSwx
NyArODAsNiBAQCB2b2lkIFdlYklEQkRhdGFiYXNlSW1wbDo6c2V0VmVyc2lvbihjb25zdCBXZWJT
dHJpbmcmIHZlcnNpb24sIFdlYklEQkNhbGxiYWNrcyogYwogICAgIG1fZGF0YWJhc2VCYWNrZW5k
LT5zZXRWZXJzaW9uKHZlcnNpb24sIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIo
Y2FsbGJhY2tzKSksIG1fZGF0YWJhc2VDYWxsYmFja3MsIGVjKTsKIH0KIAotV2ViSURCVHJhbnNh
Y3Rpb24qIFdlYklEQkRhdGFiYXNlSW1wbDo6dHJhbnNhY3Rpb24oY29uc3QgV2ViRE9NU3RyaW5n
TGlzdCYgbmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQot
ewotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBuYW1lTGlzdCA9IFBhc3NSZWZQdHI8RE9NU3Ry
aW5nTGlzdD4obmFtZXMpOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+IHRyYW5zYWN0aW9uID0gbV9kYXRhYmFzZUJhY2tlbmQtPnRyYW5zYWN0aW9uKG5hbWVMaXN0
LmdldCgpLCBtb2RlLCBlYyk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikgewotICAgICAgICBBU1NF
UlQoZWMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBXZWJJREJU
cmFuc2FjdGlvbkltcGwodHJhbnNhY3Rpb24pOwotfQotCiBXZWJJREJUcmFuc2FjdGlvbiogV2Vi
SURCRGF0YWJhc2VJbXBsOjp0cmFuc2FjdGlvbihjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYg
b2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpCiB7CiAgICAgVmVjdG9yPGludDY0
X3Q+IG9iamVjdFN0b3JlSWRMaXN0KG9iamVjdFN0b3JlSWRzLnNpemUoKSk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuaCBiL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5oCmluZGV4IDY1YTE5NjY4
YTliNzI5Nzc0Nzc5YjZiZTc0MTZiN2I3NDhmMjgxNjQuLmU3Mjg3NDJjNjQ3NDg0MTI2Y2YzZWE3
ZGQ5NTZlZGZmMzJjNzI4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYklEQkRhdGFiYXNlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklEQkRhdGFiYXNlSW1wbC5oCkBAIC01MywxMCArNTMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBXZWJJREJNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBXZWJJREJP
YmplY3RTdG9yZSogY3JlYXRlT2JqZWN0U3RvcmUobG9uZyBsb25nLCBjb25zdCBXZWJTdHJpbmcm
IG5hbWUsIGNvbnN0IFdlYklEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRyYW5z
YWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmpl
Y3RTdG9yZShsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24m
LCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3Qg
V2ViU3RyaW5nJiB2ZXJzaW9uLCBXZWJJREJDYWxsYmFja3MqLCBXZWJFeGNlcHRpb25Db2RlJik7
Ci0gICAgdmlydHVhbCBXZWJJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24oY29uc3QgV2ViRE9N
U3RyaW5nTGlzdCYgbmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIFdlYkV4Y2VwdGlvbkNvZGUm
KTsKICAgICB2aXJ0dWFsIFdlYklEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbihjb25zdCBXZWJW
ZWN0b3I8bG9uZyBsb25nPiYgbmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUpOwogICAgIHZpcnR1
YWwgdm9pZCBmb3JjZUNsb3NlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcApp
bmRleCA4NWJhYzEzYjM0ODAwZDQyMGYxY2QxODc2MGJkOTU2MzhjZDY0ZTVjLi4xMDI4MDRiYzgx
ZGY2NDhhZWJmYjA5MmUwYzE0YTg5MzIyYjlkNTk3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKQEAgLTU4LDIzICs1OCw2
IEBAIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpnZXQoY29uc3QgV2ViSURCS2V5UmFuZ2Um
IGtleVJhbmdlLCBXZWJJREJDYWxsYmFja3MqCiAgICAgbV9vYmplY3RTdG9yZS0+Z2V0KGtleVJh
bmdlLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCB0cmFu
c2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOwogfQogCi12
b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6cHV0V2l0aEluZGV4S2V5cyhjb25zdCBXZWJTZXJp
YWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJREJLZXkmIGtleSwgUHV0TW9kZSBw
dXRNb2RlLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uLCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgd2ViSW5kZXhOYW1l
cywgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mIHdlYkluZGV4S2V5cywgV2ViRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKHdlYkluZGV4TmFtZXMuc2l6ZSgpID09IHdlYklu
ZGV4S2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxTdHJpbmc+IGluZGV4TmFtZXMod2ViSW5kZXhO
YW1lcy5zaXplKCkpOwotICAgIFZlY3RvcjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6
OkluZGV4S2V5cz4gaW5kZXhLZXlzKHdlYkluZGV4S2V5cy5zaXplKCkpOwotCi0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB3ZWJJbmRleE5hbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlu
ZGV4TmFtZXNbaV0gPSB3ZWJJbmRleE5hbWVzW2ldOwotICAgICAgICBWZWN0b3I8UmVmUHRyPElE
QktleT4gPiBpbmRleEtleUxpc3Qod2ViSW5kZXhLZXlzW2ldLnNpemUoKSk7Ci0gICAgICAgIGZv
ciAoc2l6ZV90IGogPSAwOyBqIDwgd2ViSW5kZXhLZXlzW2ldLnNpemUoKTsgKytqKQotICAgICAg
ICAgICAgaW5kZXhLZXlMaXN0W2pdID0gd2ViSW5kZXhLZXlzW2ldW2pdOwotICAgICAgICBpbmRl
eEtleXNbaV0gPSBpbmRleEtleUxpc3Q7Ci0gICAgfQotCi0gICAgbV9vYmplY3RTdG9yZS0+cHV0
V2l0aEluZGV4S2V5cyh2YWx1ZSwga2V5LCBzdGF0aWNfY2FzdDxJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U6OlB1dE1vZGU+KHB1dE1vZGUpLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRl
KGFkb3B0UHRyKGNhbGxiYWNrcykpLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UoKSwgaW5kZXhOYW1lcywgaW5kZXhLZXlzLCBlYyk7Ci19Ci0KIHZvaWQgV2Vi
SURCT2JqZWN0U3RvcmVJbXBsOjpwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2
YWx1ZSwgY29uc3QgV2ViSURCS2V5JiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgV2ViSURCQ2FsbGJh
Y2tzKiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29u
c3QgV2ViVmVjdG9yPGxvbmcgbG9uZz4mIHdlYkluZGV4SWRzLCBjb25zdCBXZWJWZWN0b3I8V2Vi
SW5kZXhLZXlzPiYgd2ViSW5kZXhLZXlzKQogewogICAgIEFTU0VSVCh3ZWJJbmRleElkcy5zaXpl
KCkgPT0gd2ViSW5kZXhLZXlzLnNpemUoKSk7CkBAIC05MiwyMiArNzUsNiBAQCB2b2lkIFdlYklE
Qk9iamVjdFN0b3JlSW1wbDo6cHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFs
dWUsIGNvbnN0IFdlYgogICAgIG1fb2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBzdGF0aWNf
Y2FzdDxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGU+KHB1dE1vZGUpLCBJ
REJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCB0cmFuc2FjdGlv
bi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgaW5kZXhJZHMsIGluZGV4S2V5
cyk7CiB9CiAKLXZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleEtleXMoY29uc3Qg
V2ViSURCS2V5JiBwcmltYXJ5S2V5LCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgd2ViSW5k
ZXhOYW1lcywgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mIHdlYkluZGV4S2V5cywgY29u
c3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCh3ZWJJbmRl
eE5hbWVzLnNpemUoKSA9PSB3ZWJJbmRleEtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8U3RyaW5n
PiBpbmRleE5hbWVzKHdlYkluZGV4TmFtZXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IGluZGV4S2V5cyh3ZWJJbmRleEtleXMu
c2l6ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViSW5kZXhOYW1lcy5zaXpl
KCk7ICsraSkgewotICAgICAgICBpbmRleE5hbWVzW2ldID0gd2ViSW5kZXhOYW1lc1tpXTsKLSAg
ICAgICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gaW5kZXhLZXlMaXN0KHdlYkluZGV4S2V5c1tp
XS5zaXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHdlYkluZGV4S2V5c1tp
XS5zaXplKCk7ICsraikKLSAgICAgICAgICAgIGluZGV4S2V5TGlzdFtqXSA9IHdlYkluZGV4S2V5
c1tpXVtqXTsKLSAgICAgICAgaW5kZXhLZXlzW2ldID0gaW5kZXhLZXlMaXN0OwotICAgIH0KLSAg
ICBtX29iamVjdFN0b3JlLT5zZXRJbmRleEtleXMocHJpbWFyeUtleSwgaW5kZXhOYW1lcywgaW5k
ZXhLZXlzLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSk7
Ci19Ci0KIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleEtleXMoY29uc3QgV2Vi
SURCS2V5JiBwcmltYXJ5S2V5LCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYgd2ViSW5kZXhJ
ZHMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRleEtleXMsIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKICAgICBBU1NFUlQod2ViSW5kZXhJZHMu
c2l6ZSgpID09IHdlYkluZGV4S2V5cy5zaXplKCkpOwpAQCAtMTI0LDE0ICs5MSw2IEBAIHZvaWQg
V2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5JiBwcmlt
YXJ5S2V5LCBjb25zdCBXZWJWCiAgICAgbV9vYmplY3RTdG9yZS0+c2V0SW5kZXhLZXlzKHByaW1h
cnlLZXksIGluZGV4SWRzLCBpbmRleEtleXMsIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSgpKTsKIH0KIAotdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNl
dEluZGV4ZXNSZWFkeShjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgd2ViSW5kZXhOYW1lcywg
Y29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQotewotICAgIFZlY3RvcjxTdHJp
bmc+IGluZGV4TmFtZXMod2ViSW5kZXhOYW1lcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgd2ViSW5kZXhOYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgaW5kZXhOYW1lc1tp
XSA9IHdlYkluZGV4TmFtZXNbaV07Ci0gICAgbV9vYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5
KGluZGV4TmFtZXMsIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSgpKTsKLX0KLQogdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4ZXNSZWFkeShj
b25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYgd2ViSW5kZXhOYW1lcywgY29uc3QgV2ViSURCVHJh
bnNhY3Rpb24mIHRyYW5zYWN0aW9uKQogewogICAgIFZlY3RvcjxpbnQ2NF90PiBpbmRleElkcyh3
ZWJJbmRleE5hbWVzLnNpemUoKSk7CkBAIC0xNTgsMTQgKzExNyw2IEBAIFdlYklEQkluZGV4KiBX
ZWJJREJPYmplY3RTdG9yZUltcGw6OmNyZWF0ZUluZGV4KGxvbmcgbG9uZyBpZCwgY29uc3QgV2Vi
U3RyaW5nJiBuCiAgICAgcmV0dXJuIG5ldyBXZWJJREJJbmRleEltcGwoaW5kZXgpOwogfQogCi1X
ZWJJREJJbmRleCogV2ViSURCT2JqZWN0U3RvcmVJbXBsOjppbmRleChjb25zdCBXZWJTdHJpbmcm
IG5hbWUsIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFJlZlB0cjxJREJJbmRleEJhY2tl
bmRJbnRlcmZhY2U+IGluZGV4ID0gbV9vYmplY3RTdG9yZS0+aW5kZXgobmFtZSwgZWMpOwotICAg
IGlmICghaW5kZXgpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBuZXcgV2ViSURCSW5k
ZXhJbXBsKGluZGV4KTsKLX0KLQogV2ViSURCSW5kZXgqIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6
aW5kZXgobG9uZyBsb25nIG9iamVjdFN0b3JlSWQpCiB7CiAgICAgUmVmUHRyPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gaW5kZXggPSBtX29iamVjdFN0b3JlLT5pbmRleChvYmplY3RTdG9yZUlk
KTsKQEAgLTE3NCwxMSArMTI1LDYgQEAgV2ViSURCSW5kZXgqIFdlYklEQk9iamVjdFN0b3JlSW1w
bDo6aW5kZXgobG9uZyBsb25nIG9iamVjdFN0b3JlSWQpCiAgICAgcmV0dXJuIG5ldyBXZWJJREJJ
bmRleEltcGwoaW5kZXgpOwogfQogCi12b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6ZGVsZXRl
SW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIG1fb2JqZWN0U3RvcmUtPmRl
bGV0ZUluZGV4KG5hbWUsIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSgpLCBlYyk7Ci19Ci0KIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpkZWxldGVJbmRl
eChsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5z
YWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBtX29iamVjdFN0b3JlLT5kZWxl
dGVJbmRleChvYmplY3RTdG9yZUlkLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UoKSwgZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJPYmplY3RTdG9yZUltcGwuaAppbmRleCA1ZGUzYzlhMTVhZDhlZjVmNDYwYTg4NmFjMWNk
ZWFiY2NiZDU4MmY4Li43MGYxOWNjOGZiN2Q5NjI2ZjMwOGM2NTBmNTRkOGQyYzBlYjg0ZjhkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUlt
cGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUlt
cGwuaApAQCAtNDYsMTkgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICB+V2ViSURCT2JqZWN0U3RvcmVJ
bXBsKCk7CiAKICAgICB2b2lkIGdldChjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkNhbGxi
YWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwotICAg
IHZvaWQgcHV0V2l0aEluZGV4S2V5cyhjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBj
b25zdCBXZWJJREJLZXkmLCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiwgY29uc3QgV2ViVmVjdG9y
PFdlYkluZGV4S2V5cz4mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBwdXQoY29uc3Qg
V2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgY29uc3QgV2ViSURCS2V5JiwgUHV0TW9kZSwgV2Vi
SURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBjb25zdCBXZWJWZWN0b3I8
bG9uZyBsb25nPiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+Jik7Ci0gICAgdm9pZCBz
ZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5JiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4m
IGluZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiwgY29uc3QgV2ViSURC
VHJhbnNhY3Rpb24mKTsKICAgICB2b2lkIHNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmLCBj
b25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYgaW5kZXhOYW1lcywgY29uc3QgV2ViVmVjdG9yPFdl
YkluZGV4S2V5cz4mLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpOwotICAgIHZvaWQgc2V0SW5k
ZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiwgY29uc3QgV2ViSURCVHJhbnNh
Y3Rpb24mKTsKICAgICB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBXZWJWZWN0b3I8bG9uZyBs
b25nPiYsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7CiAgICAgdm9pZCBkZWxldGVGdW5jdGlv
bihjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgY2xlYXIoV2ViSURCQ2Fs
bGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAK
ICAgICBXZWJJREJJbmRleCogY3JlYXRlSW5kZXgobG9uZyBsb25nLCBjb25zdCBXZWJTdHJpbmcm
IG5hbWUsIGNvbnN0IFdlYklEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJJ
REJJbmRleCogaW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJFeGNlcHRpb25Db2RlJik7
CiAgICAgV2ViSURCSW5kZXgqIGluZGV4KGxvbmcgbG9uZyk7Ci0gICAgdm9pZCBkZWxldGVJbmRl
eChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgZGVsZXRlSW5kZXgobG9uZyBsb25nLCBjb25zdCBXZWJJ
REJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZvaWQgb3BlbkN1cnNv
cihjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkN1cnNvcjo6RGlyZWN0aW9uLCBXZWJJREJD
YWxsYmFja3MqLCBXZWJJREJUcmFuc2FjdGlvbjo6VGFza1R5cGUsIGNvbnN0IFdlYklEQlRyYW5z
YWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>172448</attachid>
            <date>2012-11-05 17:17:48 -0800</date>
            <delta_ts>2012-11-08 11:43:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100426-20121105171602.patch</filename>
            <type>text/plain</type>
            <size>84930</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzNDg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTFkYzEyZTgyMjkwYTlj
NTc1YzgwN2U1YzBhOTRkMGJjOWNmMTRmNS4uNDYwNmI5ZWE2M2YxNzc4ZTczYWI2ZGI4MmNmZjlk
OTY2MmQzN2JiNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTExLTAyICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IHN3
aXRjaCBmcm9udGVuZCB0byB1c2UgaW50NjRfdC1iYXNlZCByZWZlcmVuY2VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgU3RyaW5nLWJhc2Vk
IG9iamVjdFN0b3JlL2luZGV4IHJlZmVyZW5jZXMsIG9ic29sZXRlZCBieQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI1LgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBhcyB0aGlzIGlzIHRoZSBzZWNvbmQgaGFsZiBvZiBhIHJlZmFjdG9yLgorCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmg6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
Ojp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpzZXRWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlLmg6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpmaW5kSW5kZXgpOgorICAgICAgICAoSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZU1ldGFkYXRh
Ojpjb250YWluc0luZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci0xLjAuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWRE
QkFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKEluc3BlY3RvckluZGV4ZWREQkFnZW50
KToKKwogMjAxMi0xMS0wNSAgS2VudGFybyBIYXJhICA8aGFyYWtlbkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgQWRkIGEgY29tbWVudCBhYm91dCBhIHJldHVybiB2YWx1ZSBvZiBJREJLZXk6OnRv
VjgoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA2MjZlYzU3M2RkY2UzNWY2ZDEwZDA1
OGIzOTRiYzdhZDE0MjVlOGY3Li4zNjM1Y2Q0YmE3YmVkY2M2ZTljM2EwNDZlMmI0ODlmOTZkMjI4
ODEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTEx
LTAyICBBbGVjIEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRl
eGVkREI6IHN3aXRjaCBmcm9udGVuZCB0byB1c2UgaW50NjRfdC1iYXNlZCByZWZlcmVuY2VzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgaW1w
bGVtZW50YXRpb24gc3R1YnMgZnJvbSBjaHJvbWl1bSBBUEkgZm9yCisgICAgICAgIG1ldGhvZHMg
b2Jzb2xldGVkIGJ5IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0
MjUKKworICAgICAgICAqIHNyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHA6CisgICAg
ICAgICogc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Lmg6CisgICAgICAgIChJREJPYmpl
Y3RTdG9yZUJhY2tlbmRQcm94eSk6CisgICAgICAgICogc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5j
cHA6CisgICAgICAgICogc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5oOgorICAgICAgICAoV2ViSURC
RGF0YWJhc2VJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcDoK
KyAgICAgICAgKiBzcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmg6CisgICAgICAgIChXZWJJREJP
YmplY3RTdG9yZUltcGwpOgorCiAyMDEyLTExLTA1ICBNaWd1ZWwgR2FyY2lhICA8bWlndWVsZ0Bj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgW0Nocm9taXVtXSBEaXNhYmxlIHJlZ2lzdGVyUHJvdG9j
b2xIYW5kbGVyIG9uIEFuZHJvaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ2FsbGJhY2tzLmgKaW5kZXggZGZkOGUyMDkyMDRlYzBlNGJiOWFjMjk5OTcxY2YyMmNj
NGYxZjAzYy4uYjNlYzRiMjcwZjNhNTY4ZTNkZjk5NzViYjI5MTgxMjU3OTVlZDcyZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmgKQEAgLTI5
LDcgKzI5LDYgQEAKICNpZm5kZWYgSURCQ2FsbGJhY2tzX2gKICNkZWZpbmUgSURCQ2FsbGJhY2tz
X2gKIAotI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUVycm9yLmgiCiAjaW5jbHVk
ZSAiSURCS2V5LmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJE
YXRhYmFzZS5jcHAKaW5kZXggZmNjYjQ1NmM1ZDY4YTIxNDY3ZjU4ZjA5Y2RjNjI3ZmMzMGZkOTc4
Mi4uYjI3NTk3NTRiN2VmZjEwYzNjNzU2NTAyMmI3ZDIyYjNmOTJlY2NmOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcApAQCAtMTQyLDcg
KzE0Miw3IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVP
YmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvCiAgICAgICAgICAgICBrZXlQYXRoID0g
SURCS2V5UGF0aChrZXlQYXRoU3RyaW5nKTsKICAgICB9CiAKLSAgICBpZiAobV9tZXRhZGF0YS5j
b250YWluc09iamVjdFN0b3JlKG5hbWUpKSB7CisgICAgaWYgKGNvbnRhaW5zT2JqZWN0U3RvcmUo
bmFtZSkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9F
UlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTE4OCwxMyArMTg4LDEzIEBAIHZvaWQg
SURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnQ2NCBvYmplY3RT
dG9yZUlkID0gbV9tZXRhZGF0YS5maW5kT2JqZWN0U3RvcmUobmFtZSk7CisgICAgaW50NjQgb2Jq
ZWN0U3RvcmVJZCA9IGZpbmRPYmplY3RTdG9yZUlkKG5hbWUpOwogICAgIGlmIChvYmplY3RTdG9y
ZUlkID09IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgewogICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIG1fYmFja2VuZC0+ZGVsZXRlT2JqZWN0U3RvcmUobmFtZSwgbV92ZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIG1fYmFja2VuZC0+ZGVs
ZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24t
PmJhY2tlbmQoKSwgZWMpOwogICAgIGlmICghZWMpIHsKICAgICAgICAgbV92ZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlRGVsZXRlZChuYW1lKTsKICAgICAgICAgbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlSWQpOwpAQCAtMjQzLDE4ICsyNDMsMjEg
QEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisg
ICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc3RvcmVOYW1lcy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAoIW1fbWV0YWRh
dGEuY29udGFpbnNPYmplY3RTdG9yZShzdG9yZU5hbWVzLT5pdGVtKGkpKSkgeworICAgICAgICBp
bnQ2NF90IG9iamVjdFN0b3JlSWQgPSBmaW5kT2JqZWN0U3RvcmVJZChzdG9yZU5hbWVzLT5pdGVt
KGkpKTsKKyAgICAgICAgaWYgKG9iamVjdFN0b3JlSWQgPT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0
YTo6SW52YWxpZElkKSB7CiAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
REJfTk9UX0ZPVU5EX0VSUjsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CisgICAg
ICAgIG9iamVjdFN0b3JlSWRzLmFwcGVuZChvYmplY3RTdG9yZUlkKTsKICAgICB9CiAKICAgICAv
LyBXZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyB0cmFuc2FjdGlvbiBzeW5jaHJvbm91c2x5LiBMb2Nr
cyBhcmUgYWNxdWlyZWQgYXN5bmNocm9ub3VzbHkuIE9wZXJhdGlvbnMKICAgICAvLyBjYW4gYmUg
cXVldWVkIGFnYWluc3QgdGhlIHRyYW5zYWN0aW9uIGF0IGFueSBwb2ludC4gVGhleSB3aWxsIHN0
YXJ0IGV4ZWN1dGluZyBhcyBzb29uIGFzIHRoZQogICAgIC8vIGFwcHJvcHJpYXRlIGxvY2tzIGhh
dmUgYmVlbiBhY3F1aXJlZC4KICAgICAvLyBBbHNvIG5vdGUgdGhhdCBlYWNoIGJhY2tlbmQgb2Jq
ZWN0IGNvcnJlc3BvbmRzIHRvIGV4YWN0bHkgb25lIElEQlRyYW5zYWN0aW9uIG9iamVjdC4KLSAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbkJhY2tl
bmQgPSBtX2JhY2tlbmQtPnRyYW5zYWN0aW9uKHN0b3JlTmFtZXMuZ2V0KCksIG1vZGUsIGVjKTsK
KyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbkJh
Y2tlbmQgPSBtX2JhY2tlbmQtPnRyYW5zYWN0aW9uKG9iamVjdFN0b3JlSWRzLCBtb2RlKTsKICAg
ICBpZiAoIXRyYW5zYWN0aW9uQmFja2VuZCkgewogICAgICAgICBBU1NFUlQoZWMpOwogICAgICAg
ICByZXR1cm4gMDsKQEAgLTM1NCw2ICszNTcsMTcgQEAgYm9vbCBJREJEYXRhYmFzZTo6ZGlzcGF0
Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICByZXR1cm4gRXZlbnRUYXJnZXQ6
OmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOwogfQogCitpbnQ2NF90IElEQkRhdGFiYXNlOjpm
aW5kT2JqZWN0U3RvcmVJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgZm9yIChJ
REJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLm9iamVjdFN0
b3Jlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlLm5hbWUgPT0gbmFtZSkg
eworICAgICAgICAgICAgQVNTRVJUKGl0LT5rZXkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6
SW52YWxpZElkKTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQ7Cit9CisKIHZv
aWQgSURCRGF0YWJhc2U6OnN0b3AoKQogewogICAgIEFjdGl2ZURPTU9iamVjdDo6c3RvcCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKaW5kZXgg
NTgxNjE2NzNjNWIwMzQ5NmY2MDQwNzQ3ZjJlMmE1YTRlOGVjOWRhZS4uNzljODczZDU2MjU0MjQ5
NWE4YTYyNzFjNjYwMGZmODc3Zjg4NTFjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCkBAIC05MSwxMiArOTEsMTkgQEAgcHVibGljOgogICAg
IGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CiAKKyAg
ICBpbnQ2NF90IGZpbmRPYmplY3RTdG9yZUlkKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7Cisg
ICAgYm9vbCBjb250YWluc09iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBmaW5kT2JqZWN0U3RvcmVJZChuYW1lKSAhPSBJREJPYmplY3RT
dG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQ7CisgICAgfQorCiAgICAgdXNpbmcgUmVmQ291bnRlZDxJ
REJEYXRhYmFzZT46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPjo6ZGVy
ZWY7CiAKIHByaXZhdGU6CiAgICAgSURCRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4pOwogCisKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwg
dm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZF
dmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA3ZGE1
NDMyZDM4MmMxYjRlMDhkZTVlYmE1YjgwOTZjNjRkYmY1NDZkLi5iOTdlZmM4ODk4ZTc1NGZkYTI4
ZTllZTc4YTRlMDc1NGQxOTk3ODcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMjEyLDE2
ICsyMTIsNiBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IElEQkRhdGFi
YXNlQmFja2VuZEltcGw6Om9iamVjdFN0b3JlKGludDY0XwogICAgIHJldHVybiBtX29iamVjdFN0
b3Jlcy5nZXQoaWQpOwogfQogCi1pbnQ2NF90IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmdldE9i
amVjdFN0b3JlSWQoY29uc3QgU3RyaW5nJiBuYW1lKQotewotICAgIGZvciAoT2JqZWN0U3RvcmVN
YXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9vYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQgIT0gbV9v
YmplY3RTdG9yZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZS0+bmFtZSgp
ID09IG5hbWUpCi0gICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKLSAgICB9Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KIHZvaWQgSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
QVNTRVJUKG1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKGlkKSk7CkBAIC0yNzQsOCArMjY0LDggQEAg
dm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVy
c2lvbiwgUGFzc1JlZlB0cjxJREJDYWwKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJl
ZlB0cjxET01TdHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3Jl
YXRlKCk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNh
Y3Rpb25JbnRlcmZhY2UgPSB0aGlzLT50cmFuc2FjdGlvbihvYmplY3RTdG9yZU5hbWVzLmdldCgp
LCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIGVjKTsKKyAgICBWZWN0b3I8aW50NjRf
dD4gb2JqZWN0U3RvcmVJZHM7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gdHJhbnNhY3Rpb25JbnRlcmZhY2UgPSB0aGlzLT50cmFuc2FjdGlvbihvYmplY3RTdG9y
ZUlkcywgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKICAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsOjpmcm9tKHRyYW5zYWN0aW9uSW50ZXJmYWNlLmdldCgpKTsKICAgICBBU1NFUlQoIWVjKTsK
IApAQCAtNDMxLDE5ICs0MjEsMTMgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpwcm9j
ZXNzUGVuZGluZ0NhbGxzKCkKICAgICBBU1NFUlQobV9wZW5kaW5nT3BlbkNhbGxzLmlzRW1wdHko
KSk7CiB9CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiwgdW5zaWduZWQg
c2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpCitQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rpb24oY29uc3Qg
VmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQgc2hvcnQgbW9kZSkKIHsK
LSAgICAvLyBGSVhNRTogRmlyc3QgcGFyYW1ldGVyIGlzbid0IHVzZWQgZm9yIGFueXRoaW5nIHll
dCBhbnl3YXksIGFuZCB0aGlzIG1ldGhvZCBpcyBnb2luZyBhd2F5LgotICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6OmNyZWF0ZShWZWN0b3I8aW50NjRfdD4oKSwgbW9kZSwgdGhpcyk7CisgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbDo6Y3JlYXRlKG9iamVjdFN0b3JlSWRzLCBtb2RlLCB0aGlzKTsKICAgICBtX3Ry
YW5zYWN0aW9ucy5hZGQodHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIHJldHVybiB0cmFuc2FjdGlv
bi5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbihjb25zdCBWZWN0b3I8aW50
NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQotewotICAgIHJldHVy
biB0cmFuc2FjdGlvbihvYmplY3RTdG9yZUlkcywgbW9kZSk7Ci19Ci0KIHZvaWQgSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6b3BlbkNvbm5lY3Rpb24oUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcywgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4gZGF0YWJhc2VDYWxsYmFj
a3MpCiB7CiAgICAgQVNTRVJUKG1fYmFja2luZ1N0b3JlLmdldCgpKTsKQEAgLTQ5MSwxOSArNDc1
LDE1IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cnVuSW50VmVyc2lvbkNoYW5nZVRy
YW5zYWN0aW9uKGludDY0X3QgcmVxdWVzdGVkVmVyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3RvcmVOYW1lcyA9IERPTVN0cmluZ0xp
c3Q6OmNyZWF0ZSgpOwotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uSW50ZXJmYWNlID0gdHJhbnNh
Y3Rpb24ob2JqZWN0U3RvcmVOYW1lcy5nZXQoKSwgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hB
TkdFLCBlYyk7CisgICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOworICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uSW50ZXJmYWNlID0g
dHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVJZHMsIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5H
RSk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uID0g
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbkludGVyZmFjZS5nZXQo
KSk7Ci0gICAgQVNTRVJUKCFlYyk7CiAKICAgICBSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW1w
bD4gZGF0YWJhc2UgPSB0aGlzOwogICAgIE93blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpU
YXNrPiBpbnRWZXJzaW9uVGFzayA9IGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6c2V0SW50VmVyc2lvbkludGVybmFsLCBkYXRhYmFzZSwgcmVxdWVzdGVkVmVyc2lv
biwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7CiAgICAgT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s+IHJlc2V0VmVyc2lvbk9uQWJvcnRUYXNrID0gY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZXNldFZlcnNpb24sIGRhdGFiYXNlLCBtX21ldGFk
YXRhLnZlcnNpb24sIG1fbWV0YWRhdGEuaW50VmVyc2lvbik7CiAgICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKGludFZlcnNpb25UYXNrLnJlbGVhc2UoKSwgcmVzZXRWZXJzaW9uT25B
Ym9ydFRhc2sucmVsZWFzZSgpKSkgewotICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIG9uZSBvZiB0
aGUgZm9sbG93aW5nIGxpbmVzLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwog
ICAgIH0KICAgICBBU1NFUlQoIW1fcGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb24pOwog
ICAgIG1fcGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb24gPSBQZW5kaW5nT3BlbldpdGhW
ZXJzaW9uQ2FsbDo6Y3JlYXRlKGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFja3MsIHJlcXVlc3Rl
ZFZlcnNpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oCmluZGV4IGY1Y2U4MWQ2Y2I0MTVlMzllMjFhNDU1
YTIyMDIyOTExNDRiZjNlMTQuLmQwODA2MmVlNjY2YWQwNDgwZjBkZGFlYTZmNjg2MzJmNDJiNGNi
NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKQEAgLTYyLDE1ICs2MiwxMiBAQCBwdWJsaWM6CiAgICAg
Ly8gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlCiAgICAgdmlydHVhbCBJREJEYXRhYmFzZU1l
dGFkYXRhIG1ldGFkYXRhKCkgY29uc3Q7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmly
dHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMp
IHsgcmV0dXJuIGRlbGV0ZU9iamVjdFN0b3JlKGdldE9iamVjdFN0b3JlSWQobmFtZSksIHRyYW5z
YWN0aW9uUHRyLCBlYyk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50
NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgRXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKERPTVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlTmFtZXMs
IHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihjb25zdCBW
ZWN0b3I8aW50NjRfdD4mLCB1bnNpZ25lZCBzaG9ydCk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3Nl
KFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKIAogICAgIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUoaW50NjRfdCBpZCk7Ci0gICAgaW50
NjRfdCBnZXRPYmplY3RTdG9yZUlkKGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgSURCVHJhbnNh
Y3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rpb25Db29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJu
IG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5nZXQoKTsgfQogICAgIHZvaWQgdHJhbnNhY3Rpb25T
dGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHZvaWQg
dHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggMGM1M2NkN2NmMTU4OTFjMDUxN2Zk
OTMyNDM5Y2UxYjdhMTkxOTdhYS4uYzY5YmYzYjQ3ZGEyYWVjOThlYmM4YjY5ZjZiNzAyODI1NGQy
MWNiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0
YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTU1LDEwICs1NSw4IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25zdCA9
IDA7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJm
YWNlPiBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0
U3RvcmUoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9u
Q29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZl
cnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCog
c3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFu
c2FjdGlvbihjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBz
aG9ydCBtb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURCRGF0
YWJhc2VDYWxsYmFja3M+KSA9IDA7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk1ldGFkYXRhLmgKaW5kZXggMWIwMzg0YmQ5NTY5MWU0Y2ZhNzcxYzQxOTI4NTcy
YzljMmIxNjA1OC4uYzNiMzMzNDYzMDFjYzcxZTZlMGIwYjVlY2FjMGE4YzY1MTUwNDg0ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oCkBAIC03
NiwxNCArNzYsNiBAQCBzdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSB7CiAgICAgdHlwZWRl
ZiBIYXNoTWFwPGludDY0X3QsIElEQkluZGV4TWV0YWRhdGE+IEluZGV4TWFwOwogICAgIEluZGV4
TWFwIGluZGV4ZXM7CiAKLSAgICBib29sIGNvbnRhaW5zSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
KSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yIChJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQg
PSBpbmRleGVzLmJlZ2luKCk7IGl0ICE9IGluZGV4ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAg
ICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKQotICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiB9OwogCiBzdHJ1
Y3QgSURCRGF0YWJhc2VNZXRhZGF0YSB7CkBAIC0xMDgsMjIgKzEwMCw2IEBAIHN0cnVjdCBJREJE
YXRhYmFzZU1ldGFkYXRhIHsKICAgICB7CiAgICAgfQogCi0gICAgaW50NjRfdCBmaW5kT2JqZWN0
U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yIChPYmpl
Y3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZXMuYmVnaW4oKTsgaXQg
IT0gb2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnZhbHVl
Lm5hbWUgPT0gbmFtZSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChpdC0+a2V5ICE9IElEQk9i
amVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGl0
LT5rZXk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIElEQk9iamVj
dFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZDsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRhaW5zT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZpbmRPYmplY3RTdG9yZShuYW1lKSAhPSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlk
SWQ7Ci0gICAgfQotCiAgICAgU3RyaW5nIG5hbWU7CiAgICAgaW50NjRfdCBpZDsKICAgICBTdHJp
bmcgdmVyc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
Qk9iamVjdFN0b3JlLmNwcAppbmRleCBkOWQyZWMyODA0OTU5NGUyNzA4OGQxZmZjZmQyMzIxNjk3
NjUxNjVlLi5mMTU3OWQ5YjM3OTdiMzU0NmFlYTI3MzQ5Y2Q0YjBlY2JhNzM5MjYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3Bw
CkBAIC0yMDQsMTggKzIwNCwxNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0
b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgICAgICBy
ZXR1cm4gMDsKICAgICB9CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBpbmRleE5hbWVzOworICAgIFZl
Y3RvcjxpbnQ2NF90PiBpbmRleElkczsKICAgICBWZWN0b3I8SW5kZXhLZXlzPiBpbmRleEtleXM7
CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5pbmRl
eGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEluZGV4S2V5cyBrZXlzOwogICAgICAgICBnZW5l
cmF0ZUluZGV4S2V5c0ZvclZhbHVlKGl0LT52YWx1ZSwgdmFsdWUsICZrZXlzKTsKLSAgICAgICAg
aW5kZXhOYW1lcy5hcHBlbmQoaXQtPnZhbHVlLm5hbWUpOworICAgICAgICBpbmRleElkcy5hcHBl
bmQoaXQtPmtleSk7CiAgICAgICAgIGluZGV4S2V5cy5hcHBlbmQoa2V5cyk7CiAgICAgfQotICAg
IEFTU0VSVChpbmRleEtleXMuc2l6ZSgpID09IGluZGV4TmFtZXMuc2l6ZSgpKTsKIAogICAgIFJl
ZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIHNv
dXJjZSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5wdXRXaXRoSW5kZXhL
ZXlzKHNlcmlhbGl6ZWRWYWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNlKCksIHB1dE1vZGUsIHJl
cXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgaW5kZXhOYW1lcywgaW5kZXhLZXlzLCBl
Yyk7CisgICAgbV9iYWNrZW5kLT5wdXQoc2VyaWFsaXplZFZhbHVlLnJlbGVhc2UoKSwga2V5LnJl
bGVhc2UoKSwgcHV0TW9kZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBpbmRl
eElkcywgaW5kZXhLZXlzKTsKICAgICBBU1NFUlQoIWVjKTsKICAgICByZXR1cm4gcmVxdWVzdC5y
ZWxlYXNlKCk7CiB9CkBAIC0zMTksOCArMzE4LDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYgKGN1
cnNvckFueS0+dHlwZSgpID09IElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZSkKICAgICAg
ICAgICAgIGN1cnNvciA9IGN1cnNvckFueS0+aWRiQ3Vyc29yV2l0aFZhbHVlKCk7CiAKLSAgICAg
ICAgVmVjdG9yPFN0cmluZywgMT4gaW5kZXhOYW1lczsKLSAgICAgICAgaW5kZXhOYW1lcy5hcHBl
bmQobV9pbmRleE1ldGFkYXRhLm5hbWUpOworICAgICAgICBWZWN0b3I8aW50NjRfdCwgMT4gaW5k
ZXhJZHM7CisgICAgICAgIGluZGV4SWRzLmFwcGVuZChtX2luZGV4TWV0YWRhdGEuaWQpOwogICAg
ICAgICBpZiAoY3Vyc29yKSB7CiAgICAgICAgICAgICBjdXJzb3ItPmNvbnRpbnVlRnVuY3Rpb24o
ZWMpOwogICAgICAgICAgICAgQVNTRVJUKCFlYyk7CkBAIC0zMzQsMTIgKzMzMywxMiBAQCBwcml2
YXRlOgogICAgICAgICAgICAgVmVjdG9yPElEQk9iamVjdFN0b3JlOjpJbmRleEtleXMsIDE+IGlu
ZGV4S2V5c0xpc3Q7CiAgICAgICAgICAgICBpbmRleEtleXNMaXN0LmFwcGVuZChpbmRleEtleXMp
OwogCi0gICAgICAgICAgICBtX29iamVjdFN0b3JlQmFja2VuZC0+c2V0SW5kZXhLZXlzKHByaW1h
cnlLZXksIGluZGV4TmFtZXMsIGluZGV4S2V5c0xpc3QsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwor
ICAgICAgICAgICAgbV9vYmplY3RTdG9yZUJhY2tlbmQtPnNldEluZGV4S2V5cyhwcmltYXJ5S2V5
LCBpbmRleElkcywgaW5kZXhLZXlzTGlzdCwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGFyZSBkb25lIGluZGV4aW5n
LCB0ZWxsIHRoZSBiYWNrZW5kIHRvIGdvCiAgICAgICAgICAgICAvLyBiYWNrIHRvIHByb2Nlc3Np
bmcgdGFza3Mgb2YgdHlwZSBOb3JtYWxUYXNrLgotICAgICAgICAgICAgbV9vYmplY3RTdG9yZUJh
Y2tlbmQtPnNldEluZGV4ZXNSZWFkeShpbmRleE5hbWVzLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsK
KyAgICAgICAgICAgIG1fb2JqZWN0U3RvcmVCYWNrZW5kLT5zZXRJbmRleGVzUmVhZHkoaW5kZXhJ
ZHMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgICAgICAgICAgbV9vYmplY3RTdG9yZUJhY2tl
bmQuY2xlYXIoKTsKICAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKICAgICAgICAg
fQpAQCAtMzgyLDcgKzM4MSw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0b3Jl
OjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0CiAgICAgICAgIGVj
ID0gTkFUSVZFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKG1f
bWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSkgeworICAgIGlmIChjb250YWluc0luZGV4KG5h
bWUpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRfRVJS
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC00NDQsMTIgKzQ0MywxMyBAQCBQYXNzUmVm
UHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYwogICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKQogICAgICAg
ICByZXR1cm4gaXQtPnZhbHVlOwogCi0gICAgaWYgKCFtX21ldGFkYXRhLmNvbnRhaW5zSW5kZXgo
bmFtZSkpIHsKKyAgICBpbnQ2NF90IGluZGV4SWQgPSBmaW5kSW5kZXhJZChuYW1lKTsKKyAgICBp
ZiAoaW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KIAotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4
QmFja2VuZCA9IG1fYmFja2VuZC0+aW5kZXgobmFtZSwgZWMpOworICAgIFJlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+aW5kZXgoaW5kZXhJ
ZCk7CiAgICAgQVNTRVJUKCFlYyAmJiBpbmRleEJhY2tlbmQpOwogCiAgICAgY29uc3QgSURCSW5k
ZXhNZXRhZGF0YSogaW5kZXhNZXRhZGF0YSgwKTsKQEAgLTQ3NiwxNCArNDc2LDE0IEBAIHZvaWQg
SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9O
X0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoIW1fbWV0YWRh
dGEuY29udGFpbnNJbmRleChuYW1lKSkgeworICAgIGludDY0X3QgaW5kZXhJZCA9IGZpbmRJbmRl
eElkKG5hbWUpOworICAgIGlmIChpbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJ
ZCkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VS
UjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZC0+ZGVsZXRlSW5kZXgo
bmFtZSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgbV9iYWNrZW5kLT5kZWxl
dGVJbmRleChpbmRleElkLCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAo
IWVjKSB7Ci0gICAgICAgIEFTU0VSVChtX21ldGFkYXRhLmNvbnRhaW5zSW5kZXgobmFtZSkpOwog
ICAgICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFtZSk7
CiAgICAgICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKSB7CiAgICAgICAgICAgICBtX21l
dGFkYXRhLmluZGV4ZXMucmVtb3ZlKGl0LT52YWx1ZS0+aWQoKSk7CkBAIC01NTgsNiArNTU4LDE2
IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uRmluaXNoZWQoKQogICAgIG1faW5k
ZXhNYXAuY2xlYXIoKTsKIH0KIAoraW50NjRfdCBJREJPYmplY3RTdG9yZTo6ZmluZEluZGV4SWQo
Y29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRh
ZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5pbmRleGVzLmJl
Z2luKCk7IGl0ICE9IG1fbWV0YWRhdGEuaW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBp
ZiAoaXQtPnZhbHVlLm5hbWUgPT0gbmFtZSkgeworICAgICAgICAgICAgQVNTRVJUKGl0LT5rZXkg
IT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+
a2V5OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBJREJJbmRleE1ldGFkYXRhOjpJbnZh
bGlkSWQ7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKaW5kZXggOWYwMjdlYTBjNjQ2
MjhmNmRkZTA3MDEyMmRhMWE4ZmFlNmZlYjI2YS4uOWNiMmFkNjMzZDNiYjM4N2NkYzA1NWJjZjRk
ODBhODFkYzc2MDRhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZS5oCkBAIC02Niw5ICs2Niw5IEBAIHB1YmxpYzoKIAogICAgIFBhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gYWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNj
cmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFkZChjb250ZXh0
LCB2YWx1ZSwgMCwgZWMpOyAgfQogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgcmV0dXJuIHB1dChjb250ZXh0LCB2YWx1ZSwgMCwgZWMpOyAgfQotICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBz
dGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KDApLCBlYyk7IH0gCi0gICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4g
b3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCks
IGVjKTsgfSAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9u
Q29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6OmRp
cmVjdGlvbk5leHQoKSwgZWMpOyB9IAorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1
cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykg
eyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KDAp
LCBlYyk7IH0KKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2Us
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJhbmdl
LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9CisgICAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29y
KGNvbnRleHQsIGtleSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQogICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgY29uc3QgU3RyaW5nJiBkaXJl
Y3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHJh
bmdlLCBkaXJlY3Rpb24sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6Tm9ybWFsVGFz
aywgZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgY29uc3QgU3RyaW5nJiBk
aXJlY3Rpb24sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIEV4Y2Vw
dGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgY29uc3QgU3RyaW5nJiBkaXJl
Y3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTEwNSw2ICsxMDUsMTIgQEAgcHVibGljOgogcHJp
dmF0ZToKICAgICBJREJPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+LCBJREJUcmFuc2FjdGlv
biopOwogCisgICAgaW50NjRfdCBmaW5kSW5kZXhJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
OworICAgIGJvb2wgY29udGFpbnNJbmRleChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZmluZEluZGV4SWQobmFtZSkgIT0gSURCSW5kZXhNZXRhZGF0YTo6
SW52YWxpZElkOworICAgIH0KKwogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9tZXRhZGF0
YTsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tlbmQ7
CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcAppbmRleCA5NzZhZDBiZGI3Yjk3YjhiZGFiNzIyMmU5OTA2OTVkZWNjYmE1
YTYyLi45MGU1MzIzYTBhODM4OGRlODUwODhjMGU3Y2VjNWM5ODljM2MzODkzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMTA4LDcgKzEwOCw3IEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NS
ZWZQdHI8CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBycEtl
eSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBjb25zdCBW
ZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhL
ZXlzKQogewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0V2l0
aEluZGV4S2V5cyIpOworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
cHV0Iik7CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUgPSB0aGlzOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJw
VmFsdWU7CkBAIC0xMjcsMTAgKzEyNyw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwKICAgICAg
ICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SURCX0FCT1JUX0VSUikpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1vZGUs
IFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRl
eE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBFeGNlcHRpb25Db2Rl
JikKLXsKLSAgICByZXR1cm4gcHV0KHBycFZhbHVlLCBwcnBLZXksIHB1dE1vZGUsIHBycENhbGxi
YWNrcywgdHJhbnNhY3Rpb25QdHIsIGdldEluZGV4SWRzKGluZGV4TmFtZXMpLCBpbmRleEtleXMp
OwotfQogbmFtZXNwYWNlIHsKIGNsYXNzIEluZGV4V3JpdGVyIHsKIHB1YmxpYzoKQEAgLTI2MCwx
MiArMjU2LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMo
UGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGMKICAgICB9CiB9CiAKLXZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBw
cnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVj
dG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvblB0cikKLXsKLSAgICBWZWN0b3I8aW50NjRfdD4gaW5kZXhJZHMgPSBnZXRJ
bmRleElkcyhpbmRleE5hbWVzKTsKLSAgICByZXR1cm4gc2V0SW5kZXhLZXlzKHBycFByaW1hcnlL
ZXksIGluZGV4SWRzLCBpbmRleEtleXMsIHRyYW5zYWN0aW9uUHRyKTsKLX0KLQogdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0
X3Q+JiBpbmRleElkcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
bkludGVyZmFjZSkKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OnNldEluZGV4ZXNSZWFkeSIpOwpAQCAtMjgwLDIyICsyNzAsNiBAQCB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mIGlu
ZGV4SWRzLAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPFN0cmluZz4m
IGluZGV4TmFtZXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25J
bnRlcmZhY2UpCi17Ci0gICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzKGluZGV4TmFtZXMuc2l6
ZSgpKTsKLSAgICAvLyBGSVhNRTogV2UgbWFudWFsbHkgY29udmVydCBlYWNoIG5hbWUgdG8gYW4g
aW5kZXhJZCwgZXZlbiBpZiB0aGUgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIGRlbGV0ZWQsIGJlY2F1
c2Ugd2UgaGF2ZSB0byByZW1vdmUgZXhhY3RseSB0aGF0IG1hbnkgcHJlZW1wdGl2ZSBldmVudHMs
IGJ1dCB0aGlzIHdpbGwgZ28gYXdheSB3aGVuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMDA0MjYgbGFuZHMuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbmRl
eE5hbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGluZGV4SWRzW2ldID0gSW52YWxpZElkOwot
ICAgICAgICBmb3IgKEluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdp
bigpOyBpdCAhPSBtX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+
dmFsdWUtPm5hbWUoKSA9PSBpbmRleE5hbWVzW2ldKSB7Ci0gICAgICAgICAgICAgICAgaW5kZXhJ
ZHNbaV0gPSBpdC0+a2V5OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzZXRJbmRleGVzUmVhZHkoaW5kZXhJZHMsIHRy
YW5zYWN0aW9uSW50ZXJmYWNlKTsKLX0KLQogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpzZXRJbmRleGVzUmVhZHlJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc093blB0cjxW
ZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleElkcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeUludGVybmFsIik7CkBAIC00NzMsMjkgKzQ0Nyw2
IEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsOjppbmRleChpbnQ2NF90IGluCiAgICAgcmV0dXJuIGluZGV4LnJlbGVhc2UoKTsK
IH0KIAotUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpCi17
Ci0gICAgcmV0dXJuIGluZGV4KGdldEluZGV4SWQobmFtZSkpOwotfQotCi1pbnQ2NF90IElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmdldEluZGV4SWQoY29uc3QgU3RyaW5nJiBuYW1lKQotewot
ICAgIGZvciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7
IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlLT5u
YW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwotICAgIH0KLSAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotVmVjdG9yPGludDY0X3Q+
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEluZGV4SWRzKGNvbnN0IFZlY3RvcjxTdHJp
bmc+JiBuYW1lcykKLXsKLSAgICBWZWN0b3I8aW50NjRfdD4gcmVzdWx0OwotICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hcHBlbmQo
Z2V0SW5kZXhJZChuYW1lc1tpXSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgoaW50NjRfdCBpbmRleElkLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBBU1NFUlQobV9pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKQEAgLTUx
NCwxMSArNDY1LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRl
eChpbnQ2NF90IGluZGV4SWQsIElEQlRyYW5zYWN0aW9uQmFja2UKICAgICBtX2luZGV4ZXMucmVt
b3ZlKGluZGV4SWQpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0
ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGRlbGV0
ZUluZGV4KGdldEluZGV4SWQobmFtZSksIHRyYW5zYWN0aW9uUHRyLCBlYyk7Ci19Ci0KIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKICAgICBvYmplY3RT
dG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5nU3Rv
cmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9yZS0+
aWQoKSwgaW5kZXgtPmlkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4IGMyZWZkM2Iw
ZTNhMjFiNjEyNGUwNDljYjAxMjBkN2JmMjRmNjhjOTcuLmNmZGUzYmU3YjM0NTFiYjJiNjMyNmVk
YWI2MDdlZDI4MGI0MzQyMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTY0LDIwICs2
NCwxNSBAQCBwdWJsaWM6CiAKICAgICAvLyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UK
ICAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFs
dWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPGludDY0X3Q+
JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVG
dW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAgICAg
dmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRfdCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVs
dGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFBy
aW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4m
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVj
dG9yPFN0cmluZz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0
dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSopOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGlu
ZGV4KGludDY0X3QpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcm
IG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdmlydHVhbCB2b2lkIG9wZW5D
dXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1cnNvcjo6RGlyZWN0aW9uLCBQYXNz
UmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFz
a1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsK
QEAgLTk2LDkgKzkxLDYgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0b3Jl
PiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLT5iYWNraW5nU3RvcmUo
KTsgfQogICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2Ut
PmlkKCk7IH0KIAotICAgIGludDY0X3QgZ2V0SW5kZXhJZChjb25zdCBTdHJpbmcmKTsKLSAgICBW
ZWN0b3I8aW50NjRfdD4gZ2V0SW5kZXhJZHMoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKLQogcHJp
dmF0ZToKICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNlQmFj
a2VuZEltcGwqLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggOWFiZTg4M2NiYThlZWNkMTQyYzBjYzljNjgwZTg2
OGQ0YWFlYjI3OC4uMjc1MDVjZWYyNGQwOGQxOWVjN2I0MjZiYjhjOTE2YzVmMWI0OGVlYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTYyLDIwICs2MiwxNSBAQCBwdWJs
aWM6CiAKICAgICB0eXBlZGVmIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IEluZGV4S2V5czsKIAot
ICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBFeGNlcHRpb25Db2RlJikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQ
YXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0
aW9uKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAKICAg
ICB2aXJ0dWFsIHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCiAgICAgdmlydHVh
bCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRf
dCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJv
b2wgbXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9u
Q29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURC
S2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJ
bmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOwogICAgIHZp
cnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXks
IGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRl
eGVzUmVhZHkoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0
b3I8aW50NjRfdD4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoY29uc3Qg
U3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGludDY0X3QpID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lk
IGRlbGV0ZUluZGV4KGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4
Y2VwdGlvbkNvZGUmKSA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA0NzAwNWMzYjc2MWUyMGMyNWYwODkxMjFj
NDYzN2YzMGJhODczZmMwLi40NjUwNTgxYjA1MmQ2MDUwZGRiMGIwYjVlYzlkNWRhNGE4YjY2Zjlm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uY3BwCkBAIC0xNjAsMTMgKzE2MCwxMyBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
PiBJREJUcmFuc2FjdGlvbjo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcAog
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IG9iamVjdFN0b3JlQmFja2VuZCA9IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUobmFt
ZSwgZWMpOworCisgICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gbV9kYXRhYmFzZS0+ZmluZE9i
amVjdFN0b3JlSWQobmFtZSk7CisgICAgQVNTRVJUKG9iamVjdFN0b3JlSWQgIT0gSURCT2JqZWN0
U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkKTsKKyAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3Jl
KG9iamVjdFN0b3JlSWQsIGVjKTsKICAgICBBU1NFUlQoIWVjICYmIG9iamVjdFN0b3JlQmFja2Vu
ZCk7CiAKICAgICBjb25zdCBJREJEYXRhYmFzZU1ldGFkYXRhJiBtZXRhZGF0YSA9IG1fZGF0YWJh
c2UtPm1ldGFkYXRhKCk7Ci0gICAgaW50NjRfdCBvYmplY3RTdG9yZUlkID0gbWV0YWRhdGEuZmlu
ZE9iamVjdFN0b3JlKG5hbWUpOwotCi0gICAgQVNTRVJUKG9iamVjdFN0b3JlSWQgIT0gSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9y
ZT4gb2JqZWN0U3RvcmUgPSBJREJPYmplY3RTdG9yZTo6Y3JlYXRlKG1ldGFkYXRhLm9iamVjdFN0
b3Jlcy5nZXQob2JqZWN0U3RvcmVJZCksIG9iamVjdFN0b3JlQmFja2VuZCwgdGhpcyk7CiAgICAg
b2JqZWN0U3RvcmVDcmVhdGVkKG5hbWUsIG9iamVjdFN0b3JlKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW1wbC5jcHAKaW5kZXggZTE2NTJkNjk1ZGY4NTM0MWIzNjA4NmQ4Njc5YjEzNzQ0MDJmZjhlYi4u
ZTM3MjYyYTRmMjQ5YjQwYzEzYWMyYjIwYzM0NDc0YTUyODMzMmJhYSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5jcHAKQEAgLTc2LDExICs3Niw2IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9y
CiAgICAgcmV0dXJuIG9iamVjdFN0b3JlLnJlbGVhc2UoKTsKIH0KIAotUGFzc1JlZlB0cjxJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6Om9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAg
cmV0dXJuIG9iamVjdFN0b3JlKG1fZGF0YWJhc2UtPmdldE9iamVjdFN0b3JlSWQobmFtZSksIGVj
KTsKLX0KLQogYm9vbCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpzY2hlZHVsZVRhc2soVGFz
a1R5cGUgdHlwZSwgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiB0YXNr
LCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGFib3J0VGFzaykKIHsK
ICAgICBpZiAobV9zdGF0ZSA9PSBGaW5pc2hlZCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaAppbmRl
eCA0ZTRkZGVjYzExMjM2OTZjYTQ2NTc1M2RiNWYxMjkyYmMzY2UzNjgxLi5lNjI0ZWQ0MGM1OGY5
Zjk2MGFjYjY0OTI0YTFlNDNkN2QxY2EzZDBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCkBA
IC01Miw3ICs1Miw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsKCk7CiAKICAgICAvLyBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShpbnQ2
NF90LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRlVGFza0V2
ZW50cygpOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UuaAppbmRleCBkMTFlMTgxMWNlNDM1YmY2N2YwODMzZDNlNTU4MDZiODg3Y2U0ZTM4
Li4yZjRjZjMyN2EwYjgxNjlmYWE1MzdmNGY1ZTM1ZDU5M2I1MTFiY2E5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UuaApAQCAtNTMsNyArNTMsNiBAQCBwdWJsaWM6CiAgICAgICAg
IFByZWVtcHRpdmVUYXNrCiAgICAgfTsKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShpbnQ2NF90LCBFeGNlcHRpb25Db2RlJikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKSA9IDA7CiAgICAg
dmlydHVhbCB2b2lkIGNvbW1pdCgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3IuanNvbiBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3IuanNvbgppbmRleCA1MTU2NmFkMzMyZjQ5ZDdhMmM5OGUzNmI0OWNkNTljOTg2YzM0ODJmLi5i
OGQ5ZDY5ZTQ2OGNkMWUxNzI3YWJhYjllYjc2NWU5YWI5MmQxMWRkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmpzb24KKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3Rvci5qc29uCkBAIC0xMTg2LDYgKzExODYsNyBAQAogICAgICAgICAg
ICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
IkRhdGFiYXNlIHdpdGggYW4gYXJyYXkgb2Ygb2JqZWN0IHN0b3Jlcy4iLAogICAgICAgICAgICAg
ICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogImlkIiwg
InR5cGUiOiAibnVtYmVyIiwgImRlc2NyaXB0aW9uIjogIkludGVybmFsIGRhdGFiYXNlIGlkLiIg
fSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJuYW1lIiwgInR5cGUiOiAic3RyaW5n
IiwgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIG5hbWUuIiB9LAogICAgICAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInZlcnNpb24iLCAidHlwZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAi
RGVwcmVjYXRlZCBzdHJpbmcgZGF0YWJhc2UgdmVyc2lvbi4iIH0sCiAgICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiaW50VmVyc2lvbiIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRp
b24iOiAiSW50ZWdlciBkYXRhYmFzZSB2ZXJzaW9uLiIgfSwKQEAgLTExOTcsNiArMTE5OCw3IEBA
CiAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICAgICAiZGVz
Y3JpcHRpb24iOiAiT2JqZWN0IHN0b3JlLiIsCiAgICAgICAgICAgICAgICAgInByb3BlcnRpZXMi
OiBbCisgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiaWQiLCAidHlwZSI6ICJudW1iZXIi
LCAiZGVzY3JpcHRpb24iOiAiSW50ZXJuYWwgc3RvcmFnZSBvYmplY3Qgc3RvcmUgaWQuIiB9LAog
ICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5hbWUiLCAidHlwZSI6ICJzdHJpbmciLCAi
ZGVzY3JpcHRpb24iOiAiT2JqZWN0IHN0b3JlIG5hbWUuIiB9LAogICAgICAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogImtleVBhdGgiLCAiJHJlZiI6ICJLZXlQYXRoIiwgImRlc2NyaXB0aW9uIjog
Ik9iamVjdCBzdG9yZSBrZXkgcGF0aC4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUi
OiAiYXV0b0luY3JlbWVudCIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiSWYg
dHJ1ZSwgb2JqZWN0IHN0b3JlIGhhcyBhdXRvIGluY3JlbWVudCBmbGFnIHNldC4iIH0sCkBAIC0x
MjA4LDYgKzEyMTAsNyBAQAogICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAg
ICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9iamVjdCBzdG9yZSBpbmRleC4iLAogICAgICAg
ICAgICAgICAgICJwcm9wZXJ0aWVzIjogWworICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjog
ImlkIiwgInR5cGUiOiAibnVtYmVyIiwgImRlc2NyaXB0aW9uIjogIkludGVybmFsIHN0b3JhZ2Ug
aW5kZXggaWQuIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm5hbWUiLCAidHlw
ZSI6ICJzdHJpbmciLCAiZGVzY3JpcHRpb24iOiAiSW5kZXggbmFtZS4iIH0sCiAgICAgICAgICAg
ICAgICAgICAgIHsgIm5hbWUiOiAia2V5UGF0aCIsICIkcmVmIjogIktleVBhdGgiLCAiZGVzY3Jp
cHRpb24iOiAiSW5kZXgga2V5IHBhdGguIiB9LAogICAgICAgICAgICAgICAgICAgICB7ICJuYW1l
IjogInVuaXF1ZSIsICJ0eXBlIjogImJvb2xlYW4iLCAiZGVzY3JpcHRpb24iOiAiSWYgdHJ1ZSwg
aW5kZXggaXMgdW5pcXVlLiIgfSwKQEAgLTEyOTYsOCArMTI5OSw4IEBACiAgICAgICAgICAgICAg
ICAgInBhcmFtZXRlcnMiOiBbCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZnJhbWVJ
ZCIsICIkcmVmIjogIk5ldHdvcmsuRnJhbWVJZCIsICJkZXNjcmlwdGlvbiI6ICJGcmFtZSBpZC4i
IH0sCiAgICAgICAgICAgICAgICAgICAgIHsgIm5hbWUiOiAiZGF0YWJhc2VOYW1lIiwgInR5cGUi
OiAic3RyaW5nIiwgImRlc2NyaXB0aW9uIjogIkRhdGFiYXNlIG5hbWUuIiB9LAotICAgICAgICAg
ICAgICAgICAgICB7ICJuYW1lIjogIm9iamVjdFN0b3JlTmFtZSIsICJ0eXBlIjogInN0cmluZyIs
ICJkZXNjcmlwdGlvbiI6ICJPYmplY3Qgc3RvcmUgbmFtZS4iIH0sCi0gICAgICAgICAgICAgICAg
ICAgIHsgIm5hbWUiOiAiaW5kZXhOYW1lIiwgInR5cGUiOiAic3RyaW5nIiwgImRlc2NyaXB0aW9u
IjogIkluZGV4IG5hbWUsIGVtcHR5IHN0cmluZyBmb3Igb2JqZWN0IHN0b3JlIGRhdGEgcmVxdWVz
dHMuIiB9LAorICAgICAgICAgICAgICAgICAgICB7ICJuYW1lIjogIm9iamVjdFN0b3JlSWQiLCAi
dHlwZSI6ICJudW1iZXIiLCAiZGVzY3JpcHRpb24iOiAiSW50ZXJuYWwgb2JqZWN0IHN0b3JlIGlk
LiIgfSwKKyAgICAgICAgICAgICAgICAgICAgeyAibmFtZSI6ICJpbmRleElkIiwgInR5cGUiOiAi
bnVtYmVyIiwgImRlc2NyaXB0aW9uIjogIkludGVybmFsIGluZGV4IG5hbWUsIGVtcHR5IHN0cmlu
ZyBmb3Igb2JqZWN0IHN0b3JlIGRhdGEgcmVxdWVzdHMuIiB9LAogICAgICAgICAgICAgICAgICAg
ICB7ICJuYW1lIjogInNraXBDb3VudCIsICJ0eXBlIjogImludGVnZXIiLCAiZGVzY3JpcHRpb24i
OiAiTnVtYmVyIG9mIHJlY29yZHMgdG8gc2tpcC4iIH0sCiAgICAgICAgICAgICAgICAgICAgIHsg
Im5hbWUiOiAicGFnZVNpemUiLCAidHlwZSI6ICJpbnRlZ2VyIiwgImRlc2NyaXB0aW9uIjogIk51
bWJlciBvZiByZWNvcmRzIHRvIGZldGNoLiIgfSwKICAgICAgICAgICAgICAgICAgICAgeyAibmFt
ZSI6ICJrZXlSYW5nZSIsICIkcmVmIjogIktleVJhbmdlIiwgIm9wdGlvbmFsIjogdHJ1ZSwgImRl
c2NyaXB0aW9uIjogIktleSByYW5nZS4iIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuY3BwCmluZGV4IDYzNDAxZGQ2ZWJhYWZjZjE2
N2E1MzlkMDNiYmNjNWE4YTc2YWNlODUuLjdkMDg2NDU2YTA3OWNkMzY5OGE1ZjU3ZWI5NDllZTdi
MmEyOTQ0MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJ
bmRleGVkREJBZ2VudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckluZGV4ZWREQkFnZW50LmNwcApAQCAtMjMyLDM1ICsyMzIsMjMgQEAgdm9pZCBFeGVjdXRhYmxl
V2l0aERhdGFiYXNlOjpzdGFydChJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZSogaWRiRmFjdG9y
eSwgU2VjdXIKICAgICBpZGJGYWN0b3J5LT5vcGVuKGRhdGFiYXNlTmFtZSwgSURCRGF0YWJhc2VN
ZXRhZGF0YTo6Tm9JbnRWZXJzaW9uLCBjYWxsYmFjaywgbV9jb25uZWN0aW9uLmNhbGxiYWNrcygp
LCBzZWN1cml0eU9yaWdpbiwgY29udGV4dCwgU3RyaW5nKCkpOwogfQogCi1zdGF0aWMgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uRm9yRGF0YWJh
c2UoSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlKiBpZGJEYXRhYmFzZSwgY29uc3QgU3RyaW5n
JiBvYmplY3RTdG9yZU5hbWUpCitzdGF0aWMgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uRm9yRGF0YWJhc2UoSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlKiBpZGJEYXRhYmFzZSwgaW50NjRfdCBvYmplY3RTdG9yZUlkKQogewotICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiB0cmFuc2FjdGlvbk9i
amVjdFN0b3JlTmFtZXNMaXN0ID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAgdHJhbnNh
Y3Rpb25PYmplY3RTdG9yZU5hbWVzTGlzdC0+YXBwZW5kKG9iamVjdFN0b3JlTmFtZSk7Ci0gICAg
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gaWRiVHJhbnNhY3Rpb24gPSBp
ZGJEYXRhYmFzZS0+dHJhbnNhY3Rpb24odHJhbnNhY3Rpb25PYmplY3RTdG9yZU5hbWVzTGlzdC5n
ZXQoKSwgSURCVHJhbnNhY3Rpb246OlJFQURfT05MWSwgZWMpOwotICAgIGlmIChlYykKLSAgICAg
ICAgcmV0dXJuIDA7CisgICAgVmVjdG9yPGludDY0X3Q+IHRyYW5zYWN0aW9uT2JqZWN0U3RvcmVJ
ZHM7CisgICAgdHJhbnNhY3Rpb25PYmplY3RTdG9yZUlkcy5hcHBlbmQob2JqZWN0U3RvcmVJZCk7
CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gaWRiVHJhbnNhY3Rp
b24gPSBpZGJEYXRhYmFzZS0+dHJhbnNhY3Rpb24odHJhbnNhY3Rpb25PYmplY3RTdG9yZUlkcywg
SURCVHJhbnNhY3Rpb246OlJFQURfT05MWSk7CiAgICAgcmV0dXJuIGlkYlRyYW5zYWN0aW9uOwog
fQogCi1zdGF0aWMgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9i
amVjdFN0b3JlRm9yVHJhbnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiBp
ZGJUcmFuc2FjdGlvbiwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5hbWUpCitzdGF0aWMgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlRm9yVHJh
bnNhY3Rpb24oSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiBpZGJUcmFuc2FjdGlvbiwg
aW50NjRfdCBvYmplY3RTdG9yZUlkKQogewogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAg
IFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGlkYk9iamVjdFN0b3JlID0g
aWRiVHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlKG9iamVjdFN0b3JlTmFtZSwgZWMpOworICAgIFJl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGlkYk9iamVjdFN0b3JlID0gaWRi
VHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQsIGVjKTsKICAgICBpZiAoZWMp
CiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBpZGJPYmplY3RTdG9yZTsKIH0KIAotc3Rh
dGljIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleEZvck9iamVjdFN0
b3JlKElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZSogaWRiT2JqZWN0U3RvcmUsIGNvbnN0
IFN0cmluZyYgaW5kZXhOYW1lKQotewotICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIFJl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGlkYkluZGV4ID0gaWRiT2JqZWN0U3RvcmUt
PmluZGV4KGluZGV4TmFtZSwgZWMpOwotICAgIGlmIChlYykKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgcmV0dXJuIGlkYkluZGV4OwotfQotCiBzdGF0aWMgUGFzc1JlZlB0cjxLZXlQYXRoPiBrZXlQ
YXRoRnJvbUlEQktleVBhdGgoY29uc3QgSURCS2V5UGF0aCYgaWRiS2V5UGF0aCkKIHsKICAgICBS
ZWZQdHI8S2V5UGF0aD4ga2V5UGF0aDsKQEAgLTMxNCw4ICszMDIsOCBAQCBwdWJsaWM6CiAKICAg
ICAgICAgICAgIGZvciAoSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmVNZXRhZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG9i
amVjdFN0b3JlTWV0YWRhdGEuaW5kZXhlcy5lbmQoKTsgKytpdCkgewogICAgICAgICAgICAgICAg
IGNvbnN0IElEQkluZGV4TWV0YWRhdGEmIGluZGV4TWV0YWRhdGEgPSBpdC0+dmFsdWU7Ci0KICAg
ICAgICAgICAgICAgICBSZWZQdHI8T2JqZWN0U3RvcmVJbmRleD4gb2JqZWN0U3RvcmVJbmRleCA9
IE9iamVjdFN0b3JlSW5kZXg6OmNyZWF0ZSgpCisgICAgICAgICAgICAgICAgICAgIC5zZXRJZChp
bmRleE1ldGFkYXRhLmlkKQogICAgICAgICAgICAgICAgICAgICAuc2V0TmFtZShpbmRleE1ldGFk
YXRhLm5hbWUpCiAgICAgICAgICAgICAgICAgICAgIC5zZXRLZXlQYXRoKGtleVBhdGhGcm9tSURC
S2V5UGF0aChpbmRleE1ldGFkYXRhLmtleVBhdGgpKQogICAgICAgICAgICAgICAgICAgICAuc2V0
VW5pcXVlKGluZGV4TWV0YWRhdGEudW5pcXVlKQpAQCAtMzI0LDYgKzMxMiw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgUmVmUHRyPE9iamVjdFN0b3JlPiBvYmplY3RT
dG9yZSA9IE9iamVjdFN0b3JlOjpjcmVhdGUoKQorICAgICAgICAgICAgICAgIC5zZXRJZChvYmpl
Y3RTdG9yZU1ldGFkYXRhLmlkKQogICAgICAgICAgICAgICAgIC5zZXROYW1lKG9iamVjdFN0b3Jl
TWV0YWRhdGEubmFtZSkKICAgICAgICAgICAgICAgICAuc2V0S2V5UGF0aChrZXlQYXRoRnJvbUlE
QktleVBhdGgob2JqZWN0U3RvcmVNZXRhZGF0YS5rZXlQYXRoKSkKICAgICAgICAgICAgICAgICAu
c2V0QXV0b0luY3JlbWVudChvYmplY3RTdG9yZU1ldGFkYXRhLmF1dG9JbmNyZW1lbnQpCkBAIC0z
MzEsNiArMzIwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgb2JqZWN0U3RvcmVzLT5hZGRJdGVt
KG9iamVjdFN0b3JlKTsKICAgICAgICAgfQogICAgICAgICBSZWZQdHI8RGF0YWJhc2VXaXRoT2Jq
ZWN0U3RvcmVzPiByZXN1bHQgPSBEYXRhYmFzZVdpdGhPYmplY3RTdG9yZXM6OmNyZWF0ZSgpCisg
ICAgICAgICAgICAuc2V0SWQoZGF0YWJhc2VNZXRhZGF0YS5pZCkKICAgICAgICAgICAgIC5zZXRO
YW1lKGRhdGFiYXNlTWV0YWRhdGEubmFtZSkKICAgICAgICAgICAgIC5zZXRJbnRWZXJzaW9uKGRh
dGFiYXNlTWV0YWRhdGEuaW50VmVyc2lvbikKICAgICAgICAgICAgIC5zZXRWZXJzaW9uKGRhdGFi
YXNlTWV0YWRhdGEudmVyc2lvbikKQEAgLTU0OCw5ICs1MzgsOSBAQCBwcml2YXRlOgogCiBjbGFz
cyBEYXRhTG9hZGVyQ2FsbGJhY2sgOiBwdWJsaWMgRXhlY3V0YWJsZVdpdGhEYXRhYmFzZSB7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RGF0YUxvYWRlckNhbGxiYWNrPiBjcmVhdGUo
UGFzc1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IElu
amVjdGVkU2NyaXB0JiBpbmplY3RlZFNjcmlwdCwgY29uc3QgU3RyaW5nJiBvYmplY3RTdG9yZU5h
bWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBpZGJL
ZXlSYW5nZSwgaW50IHNraXBDb3VudCwgdW5zaWduZWQgcGFnZVNpemUpCisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RGF0YUxvYWRlckNhbGxiYWNrPiBjcmVhdGUoUGFzc1JlZlB0cjxSZXF1ZXN0RGF0
YUNhbGxiYWNrPiByZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IEluamVjdGVkU2NyaXB0JiBpbmplY3Rl
ZFNjcmlwdCwgaW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdl
U2l6ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRGF0YUxvYWRlckNhbGxi
YWNrKHJlcXVlc3RDYWxsYmFjaywgaW5qZWN0ZWRTY3JpcHQsIG9iamVjdFN0b3JlTmFtZSwgaW5k
ZXhOYW1lLCBpZGJLZXlSYW5nZSwgc2tpcENvdW50LCBwYWdlU2l6ZSkpOworICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IERhdGFMb2FkZXJDYWxsYmFjayhyZXF1ZXN0Q2FsbGJhY2ssIGluamVj
dGVkU2NyaXB0LCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBpZGJLZXlSYW5nZSwgc2tpcENvdW50
LCBwYWdlU2l6ZSkpOwogICAgIH0KIAogICAgIHZpcnR1YWwgfkRhdGFMb2FkZXJDYWxsYmFjaygp
IHsgfQpAQCAtNTYxLDE3ICs1NTEsMTcgQEAgcHVibGljOgogICAgICAgICBpZiAoIW1fcmVxdWVz
dENhbGxiYWNrLT5pc0FjdGl2ZSgpKQogICAgICAgICAgICAgcmV0dXJuOwogCi0gICAgICAgIFJl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IGlkYlRyYW5zYWN0aW9uID0gdHJh
bnNhY3Rpb25Gb3JEYXRhYmFzZShpZGJEYXRhYmFzZS5nZXQoKSwgbV9vYmplY3RTdG9yZU5hbWUp
OworICAgICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBpZGJUcmFu
c2FjdGlvbiA9IHRyYW5zYWN0aW9uRm9yRGF0YWJhc2UoaWRiRGF0YWJhc2UuZ2V0KCksIG1fb2Jq
ZWN0U3RvcmVJZCk7CiAgICAgICAgIGlmICghaWRiVHJhbnNhY3Rpb24pCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGlk
Yk9iamVjdFN0b3JlID0gb2JqZWN0U3RvcmVGb3JUcmFuc2FjdGlvbihpZGJUcmFuc2FjdGlvbi5n
ZXQoKSwgbV9vYmplY3RTdG9yZU5hbWUpOworICAgICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW50ZXJmYWNlPiBpZGJPYmplY3RTdG9yZSA9IG9iamVjdFN0b3JlRm9yVHJhbnNhY3Rp
b24oaWRiVHJhbnNhY3Rpb24uZ2V0KCksIG1fb2JqZWN0U3RvcmVJZCk7CiAgICAgICAgIGlmICgh
aWRiT2JqZWN0U3RvcmUpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgUmVmUHRyPE9w
ZW5DdXJzb3JDYWxsYmFjaz4gb3BlbkN1cnNvckNhbGxiYWNrID0gT3BlbkN1cnNvckNhbGxiYWNr
OjpjcmVhdGUobV9pbmplY3RlZFNjcmlwdCwgdGhpcywgaWRiVHJhbnNhY3Rpb24uZ2V0KCksIG1f
cmVxdWVzdENhbGxiYWNrLCBtX3NraXBDb3VudCwgbV9wYWdlU2l6ZSk7CiAKLSAgICAgICAgaWYg
KCFtX2luZGV4TmFtZS5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIFJlZlB0cjxJREJJbmRleEJh
Y2tlbmRJbnRlcmZhY2U+IGlkYkluZGV4ID0gaW5kZXhGb3JPYmplY3RTdG9yZShpZGJPYmplY3RT
dG9yZS5nZXQoKSwgbV9pbmRleE5hbWUpOworICAgICAgICBpZiAobV9pbmRleElkICE9IElEQklu
ZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgeworICAgICAgICAgICAgUmVmUHRyPElEQkluZGV4QmFj
a2VuZEludGVyZmFjZT4gaWRiSW5kZXggPSBpZGJPYmplY3RTdG9yZS0+aW5kZXgobV9pbmRleElk
KTsKICAgICAgICAgICAgIGlmICghaWRiSW5kZXgpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
CkBAIC01ODQsMTggKzU3NCwxOCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIERh
dGFMb2FkZXJDYWxsYmFjayhQYXNzUmVmUHRyPFJlcXVlc3REYXRhQ2FsbGJhY2s+IHJlcXVlc3RD
YWxsYmFjaywgY29uc3QgSW5qZWN0ZWRTY3JpcHQmIGluamVjdGVkU2NyaXB0LCBjb25zdCBTdHJp
bmcmIG9iamVjdFN0b3JlTmFtZSwgY29uc3QgU3RyaW5nJiBpbmRleE5hbWUsIFBhc3NSZWZQdHI8
SURCS2V5UmFuZ2U+IGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6
ZSkKKyAgICBEYXRhTG9hZGVyQ2FsbGJhY2soUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNr
PiByZXF1ZXN0Q2FsbGJhY2ssIGNvbnN0IEluamVjdGVkU2NyaXB0JiBpbmplY3RlZFNjcmlwdCwg
aW50NjRfdCBvYmplY3RTdG9yZUlkLCBpbnQ2NF90IGluZGV4SWQsIFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IGlkYktleVJhbmdlLCBpbnQgc2tpcENvdW50LCB1bnNpZ25lZCBwYWdlU2l6ZSkKICAg
ICAgICAgOiBtX3JlcXVlc3RDYWxsYmFjayhyZXF1ZXN0Q2FsbGJhY2spCiAgICAgICAgICwgbV9p
bmplY3RlZFNjcmlwdChpbmplY3RlZFNjcmlwdCkKLSAgICAgICAgLCBtX29iamVjdFN0b3JlTmFt
ZShvYmplY3RTdG9yZU5hbWUpCi0gICAgICAgICwgbV9pbmRleE5hbWUoaW5kZXhOYW1lKQorICAg
ICAgICAsIG1fb2JqZWN0U3RvcmVJZChvYmplY3RTdG9yZUlkKQorICAgICAgICAsIG1faW5kZXhJ
ZChpbmRleElkKQogICAgICAgICAsIG1faWRiS2V5UmFuZ2UoaWRiS2V5UmFuZ2UpCiAgICAgICAg
ICwgbV9za2lwQ291bnQoc2tpcENvdW50KQogICAgICAgICAsIG1fcGFnZVNpemUocGFnZVNpemUp
IHsgfQogICAgIFJlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPiBtX3JlcXVlc3RDYWxsYmFjazsK
ICAgICBJbmplY3RlZFNjcmlwdCBtX2luamVjdGVkU2NyaXB0OwotICAgIFN0cmluZyBtX29iamVj
dFN0b3JlTmFtZTsKLSAgICBTdHJpbmcgbV9pbmRleE5hbWU7CisgICAgaW50NjRfdCBtX29iamVj
dFN0b3JlSWQ7CisgICAgaW50NjRfdCBtX2luZGV4SWQ7CiAgICAgUmVmUHRyPElEQktleVJhbmdl
PiBtX2lkYktleVJhbmdlOwogICAgIGludCBtX3NraXBDb3VudDsKICAgICB1bnNpZ25lZCBtX3Bh
Z2VTaXplOwpAQCAtNzA2LDcgKzY5Niw3IEBAIHZvaWQgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQ6
OnJlcXVlc3REYXRhYmFzZShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNvbnN0IFN0CiAgICAg
ZGF0YWJhc2VMb2FkZXJDYWxsYmFjay0+c3RhcnQoaWRiRmFjdG9yeSwgZG9jdW1lbnQtPnNlY3Vy
aXR5T3JpZ2luKCksIGRvY3VtZW50LCBkYXRhYmFzZU5hbWUpOwogfQogCi12b2lkIEluc3BlY3Rv
ckluZGV4ZWREQkFnZW50OjpyZXF1ZXN0RGF0YShFcnJvclN0cmluZyogZXJyb3JTdHJpbmcsIGNv
bnN0IFN0cmluZyYgZnJhbWVJZCwgY29uc3QgU3RyaW5nJiBkYXRhYmFzZU5hbWUsIGNvbnN0IFN0
cmluZyYgb2JqZWN0U3RvcmVOYW1lLCBjb25zdCBTdHJpbmcmIGluZGV4TmFtZSwgaW50IHNraXBD
b3VudCwgaW50IHBhZ2VTaXplLCBjb25zdCBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0Pioga2V5UmFu
Z2UsIFBhc3NSZWZQdHI8UmVxdWVzdERhdGFDYWxsYmFjaz4gcmVxdWVzdENhbGxiYWNrKQordm9p
ZCBJbnNwZWN0b3JJbmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcqIGVycm9y
U3RyaW5nLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNvbnN0IFN0cmluZyYgZGF0YWJhc2VOYW1l
LCBkb3VibGUgb2JqZWN0U3RvcmVJZCwgZG91YmxlIGluZGV4SWQsIGludCBza2lwQ291bnQsIGlu
dCBwYWdlU2l6ZSwgY29uc3QgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4qIGtleVJhbmdlLCBQYXNz
UmVmUHRyPFJlcXVlc3REYXRhQ2FsbGJhY2s+IHJlcXVlc3RDYWxsYmFjaykKIHsKICAgICBGcmFt
ZSogZnJhbWUgPSBhc3NlcnRGcmFtZShlcnJvclN0cmluZywgZnJhbWVJZCwgbV9wYWdlQWdlbnQp
OwogICAgIGlmICghZnJhbWUpCkBAIC03MjYsNyArNzE2LDcgQEAgdm9pZCBJbnNwZWN0b3JJbmRl
eGVkREJBZ2VudDo6cmVxdWVzdERhdGEoRXJyb3JTdHJpbmcqIGVycm9yU3RyaW5nLCBjb25zdCBT
dHJpbmcKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxEYXRhTG9hZGVyQ2Fs
bGJhY2s+IGRhdGFMb2FkZXJDYWxsYmFjayA9IERhdGFMb2FkZXJDYWxsYmFjazo6Y3JlYXRlKHJl
cXVlc3RDYWxsYmFjaywgaW5qZWN0ZWRTY3JpcHQsIG9iamVjdFN0b3JlTmFtZSwgaW5kZXhOYW1l
LCBpZGJLZXlSYW5nZSwgc2tpcENvdW50LCBwYWdlU2l6ZSk7CisgICAgUmVmUHRyPERhdGFMb2Fk
ZXJDYWxsYmFjaz4gZGF0YUxvYWRlckNhbGxiYWNrID0gRGF0YUxvYWRlckNhbGxiYWNrOjpjcmVh
dGUocmVxdWVzdENhbGxiYWNrLCBpbmplY3RlZFNjcmlwdCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJ
ZCwgaWRiS2V5UmFuZ2UsIHNraXBDb3VudCwgcGFnZVNpemUpOwogICAgIGRhdGFMb2FkZXJDYWxs
YmFjay0+c3RhcnQoaWRiRmFjdG9yeSwgZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCksIGRvY3Vt
ZW50LCBkYXRhYmFzZU5hbWUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JJbmRleGVkREJBZ2VudC5oCmluZGV4IGQxZDdjMzdkM2EzYjM3MTk1ZTU3YTIw
ZGE4OTMxMTgwNmE2MDQ1MzEuLjA4NWFjNTEwZWNjYmE5ZjJjMTYzMWIwZGEzNGQyMGY3OGFjYWFi
NGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVk
REJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JJbmRleGVk
REJBZ2VudC5oCkBAIC02MCw3ICs2MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGlz
YWJsZShFcnJvclN0cmluZyopOwogICAgIHZpcnR1YWwgdm9pZCByZXF1ZXN0RGF0YWJhc2VOYW1l
c0ZvckZyYW1lKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBQYXNzUmVmUHRy
PFJlcXVlc3REYXRhYmFzZU5hbWVzRm9yRnJhbWVDYWxsYmFjaz4pOwogICAgIHZpcnR1YWwgdm9p
ZCByZXF1ZXN0RGF0YWJhc2UoRXJyb3JTdHJpbmcqLCBjb25zdCBTdHJpbmcmIGZyYW1lSWQsIGNv
bnN0IFN0cmluZyYgZGF0YWJhc2VOYW1lLCBQYXNzUmVmUHRyPFJlcXVlc3REYXRhYmFzZUNhbGxi
YWNrPik7Ci0gICAgdmlydHVhbCB2b2lkIHJlcXVlc3REYXRhKEVycm9yU3RyaW5nKiwgY29uc3Qg
U3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcmIGRhdGFiYXNlTmFtZSwgY29uc3QgU3RyaW5n
JiBvYmplY3RTdG9yZU5hbWUsIGNvbnN0IFN0cmluZyYgaW5kZXhOYW1lLCBpbnQgc2tpcENvdW50
LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBrZXlSYW5nZSwg
UGFzc1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPik7CisgICAgdmlydHVhbCB2b2lkIHJlcXVl
c3REYXRhKEVycm9yU3RyaW5nKiwgY29uc3QgU3RyaW5nJiBmcmFtZUlkLCBjb25zdCBTdHJpbmcm
IGRhdGFiYXNlTmFtZSwgZG91YmxlIG9iamVjdFN0b3JlSWQsIGRvdWJsZSBpbmRleElkLCBpbnQg
c2tpcENvdW50LCBpbnQgcGFnZVNpemUsIGNvbnN0IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KiBr
ZXlSYW5nZSwgUGFzc1JlZlB0cjxSZXF1ZXN0RGF0YUNhbGxiYWNrPik7CiAKIHByaXZhdGU6CiAg
ICAgSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQoSW5zdHJ1bWVudGluZ0FnZW50cyosIEluc3BlY3Rv
clN0YXRlKiwgSW5qZWN0ZWRTY3JpcHRNYW5hZ2VyKiwgSW5zcGVjdG9yUGFnZUFnZW50Kik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luZGV4ZWREQk1v
ZGVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmRleGVkREJNb2Rl
bC5qcwppbmRleCBlNjQ0MGMxYmRlYzA0ZDNjYWVhNTlmMTQ4MTBmOTk5NWJiODYyN2ZjLi5iOGFj
ODI0ZWFjOWU2ZjVhOGNlN2YwNDIyZDNlNmJjZWZmYmE5MjczIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luZGV4ZWREQk1vZGVsLmpzCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5kZXhlZERCTW9kZWwuanMKQEAgLTM5Mywx
NSArMzkzLDE1IEBAIFdlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5wcm90b3R5cGUgPSB7CiAg
ICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICB2YXIgZGF0YWJhc2VNb2RlbCA9
IG5ldyBXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuRGF0YWJhc2UoZGF0YWJhc2VJZCwgZGF0
YWJhc2VXaXRoT2JqZWN0U3RvcmVzLnZlcnNpb24sIGRhdGFiYXNlV2l0aE9iamVjdFN0b3Jlcy5p
bnRWZXJzaW9uKTsKLSAgICAgICAgICAgIHRoaXMuX2RhdGFiYXNlcy5wdXQoZGF0YWJhc2VJZCwg
ZGF0YWJhc2VNb2RlbCk7IAorICAgICAgICAgICAgdGhpcy5fZGF0YWJhc2VzLnB1dChkYXRhYmFz
ZUlkLCBkYXRhYmFzZU1vZGVsKTsKICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZGF0
YWJhc2VXaXRoT2JqZWN0U3RvcmVzLm9iamVjdFN0b3Jlcy5sZW5ndGg7ICsraSkgewogICAgICAg
ICAgICAgICAgIHZhciBvYmplY3RTdG9yZSA9IGRhdGFiYXNlV2l0aE9iamVjdFN0b3Jlcy5vYmpl
Y3RTdG9yZXNbaV07CiAgICAgICAgICAgICAgICAgdmFyIG9iamVjdFN0b3JlSURCS2V5UGF0aCA9
IFdlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5pZGJLZXlQYXRoRnJvbUtleVBhdGgob2JqZWN0
U3RvcmUua2V5UGF0aCk7Ci0gICAgICAgICAgICAgICAgdmFyIG9iamVjdFN0b3JlTW9kZWwgPSBu
ZXcgV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVsLk9iamVjdFN0b3JlKG9iamVjdFN0b3JlLm5h
bWUsIG9iamVjdFN0b3JlSURCS2V5UGF0aCwgb2JqZWN0U3RvcmUuYXV0b0luY3JlbWVudCk7Cisg
ICAgICAgICAgICAgICAgdmFyIG9iamVjdFN0b3JlTW9kZWwgPSBuZXcgV2ViSW5zcGVjdG9yLklu
ZGV4ZWREQk1vZGVsLk9iamVjdFN0b3JlKG9iamVjdFN0b3JlLmlkLCBvYmplY3RTdG9yZS5uYW1l
LCBvYmplY3RTdG9yZUlEQktleVBhdGgsIG9iamVjdFN0b3JlLmF1dG9JbmNyZW1lbnQpOwogICAg
ICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgb2JqZWN0U3RvcmUuaW5kZXhlcy5sZW5n
dGg7ICsraikgewogICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gb2JqZWN0U3RvcmUu
aW5kZXhlc1tqXTsKICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleElEQktleVBhdGggPSBX
ZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuaWRiS2V5UGF0aEZyb21LZXlQYXRoKGluZGV4Lmtl
eVBhdGgpOwotICAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4TW9kZWwgPSBuZXcgV2ViSW5z
cGVjdG9yLkluZGV4ZWREQk1vZGVsLkluZGV4KGluZGV4Lm5hbWUsIGluZGV4SURCS2V5UGF0aCwg
aW5kZXgudW5pcXVlLCBpbmRleC5tdWx0aUVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgIHZh
ciBpbmRleE1vZGVsID0gbmV3IFdlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5JbmRleChpbmRl
eC5pZCwgaW5kZXgubmFtZSwgaW5kZXhJREJLZXlQYXRoLCBpbmRleC51bmlxdWUsIGluZGV4Lm11
bHRpRW50cnkpOwogICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmVNb2RlbC5pbmRleGVz
W2luZGV4TW9kZWwubmFtZV0gPSBpbmRleE1vZGVsOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBkYXRhYmFzZU1vZGVsLm9iamVjdFN0b3Jlc1tvYmplY3RTdG9yZU1vZGVsLm5h
bWVdID0gb2JqZWN0U3RvcmVNb2RlbDsKQEAgLTQxNSw0MiArNDE1LDQyIEBAIFdlYkluc3BlY3Rv
ci5JbmRleGVkREJNb2RlbC5wcm90b3R5cGUgPSB7CiAKICAgICAvKioKICAgICAgKiBAcGFyYW0g
e1dlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5EYXRhYmFzZUlkfSBkYXRhYmFzZUlkCi0gICAg
ICogQHBhcmFtIHtzdHJpbmd9IG9iamVjdFN0b3JlTmFtZQorICAgICAqIEBwYXJhbSB7bnVtYmVy
fSBvYmplY3RTdG9yZUlkCiAgICAgICogQHBhcmFtIHt3ZWJraXRJREJLZXlSYW5nZX0gaWRiS2V5
UmFuZ2UKICAgICAgKiBAcGFyYW0ge251bWJlcn0gc2tpcENvdW50CiAgICAgICogQHBhcmFtIHtu
dW1iZXJ9IHBhZ2VTaXplCiAgICAgICogQHBhcmFtIHtmdW5jdGlvbihBcnJheS48V2ViSW5zcGVj
dG9yLkluZGV4ZWREQk1vZGVsLkVudHJ5PiwgYm9vbGVhbil9IGNhbGxiYWNrCiAgICAgICovCi0g
ICAgbG9hZE9iamVjdFN0b3JlRGF0YTogZnVuY3Rpb24oZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVO
YW1lLCBpZGJLZXlSYW5nZSwgc2tpcENvdW50LCBwYWdlU2l6ZSwgY2FsbGJhY2spCisgICAgbG9h
ZE9iamVjdFN0b3JlRGF0YTogZnVuY3Rpb24oZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaWRi
S2V5UmFuZ2UsIHNraXBDb3VudCwgcGFnZVNpemUsIGNhbGxiYWNrKQogICAgIHsKLSAgICAgICAg
dGhpcy5fcmVxdWVzdERhdGEoZGF0YWJhc2VJZCwgZGF0YWJhc2VJZC5uYW1lLCBvYmplY3RTdG9y
ZU5hbWUsICIiLCBpZGJLZXlSYW5nZSwgc2tpcENvdW50LCBwYWdlU2l6ZSwgY2FsbGJhY2spOwor
ICAgICAgICB0aGlzLl9yZXF1ZXN0RGF0YShkYXRhYmFzZUlkLCBkYXRhYmFzZUlkLm5hbWUsIG9i
amVjdFN0b3JlSWQsIC0xLCBpZGJLZXlSYW5nZSwgc2tpcENvdW50LCBwYWdlU2l6ZSwgY2FsbGJh
Y2spOwogICAgIH0sCiAKICAgICAvKioKICAgICAgKiBAcGFyYW0ge1dlYkluc3BlY3Rvci5JbmRl
eGVkREJNb2RlbC5EYXRhYmFzZUlkfSBkYXRhYmFzZUlkCi0gICAgICogQHBhcmFtIHtzdHJpbmd9
IG9iamVjdFN0b3JlTmFtZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbmRleE5hbWUKKyAgICAg
KiBAcGFyYW0ge251bWJlcn0gb2JqZWN0U3RvcmVJZAorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBp
bmRleElkCiAgICAgICogQHBhcmFtIHt3ZWJraXRJREJLZXlSYW5nZX0gaWRiS2V5UmFuZ2UKICAg
ICAgKiBAcGFyYW0ge251bWJlcn0gc2tpcENvdW50CiAgICAgICogQHBhcmFtIHtudW1iZXJ9IHBh
Z2VTaXplCiAgICAgICogQHBhcmFtIHtmdW5jdGlvbihBcnJheS48V2ViSW5zcGVjdG9yLkluZGV4
ZWREQk1vZGVsLkVudHJ5PiwgYm9vbGVhbil9IGNhbGxiYWNrCiAgICAgICovCi0gICAgbG9hZElu
ZGV4RGF0YTogZnVuY3Rpb24oZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVOYW1lLCBpbmRleE5hbWUs
IGlkYktleVJhbmdlLCBza2lwQ291bnQsIHBhZ2VTaXplLCBjYWxsYmFjaykKKyAgICBsb2FkSW5k
ZXhEYXRhOiBmdW5jdGlvbihkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpbmRleElkLCBpZGJL
ZXlSYW5nZSwgc2tpcENvdW50LCBwYWdlU2l6ZSwgY2FsbGJhY2spCiAgICAgewotICAgICAgICB0
aGlzLl9yZXF1ZXN0RGF0YShkYXRhYmFzZUlkLCBkYXRhYmFzZUlkLm5hbWUsIG9iamVjdFN0b3Jl
TmFtZSwgaW5kZXhOYW1lLCBpZGJLZXlSYW5nZSwgc2tpcENvdW50LCBwYWdlU2l6ZSwgY2FsbGJh
Y2spOworICAgICAgICB0aGlzLl9yZXF1ZXN0RGF0YShkYXRhYmFzZUlkLCBkYXRhYmFzZUlkLm5h
bWUsIG9iamVjdFN0b3JlSWQsIGluZGV4SWQsIGlkYktleVJhbmdlLCBza2lwQ291bnQsIHBhZ2VT
aXplLCBjYWxsYmFjayk7CiAgICAgfSwKIAogICAgIC8qKgogICAgICAqIEBwYXJhbSB7V2ViSW5z
cGVjdG9yLkluZGV4ZWREQk1vZGVsLkRhdGFiYXNlSWR9IGRhdGFiYXNlSWQKICAgICAgKiBAcGFy
YW0ge3N0cmluZ30gZGF0YWJhc2VOYW1lCi0gICAgICogQHBhcmFtIHtzdHJpbmd9IG9iamVjdFN0
b3JlTmFtZQotICAgICAqIEBwYXJhbSB7c3RyaW5nfSBpbmRleE5hbWUKKyAgICAgKiBAcGFyYW0g
e251bWJlcn0gb2JqZWN0U3RvcmVJZAorICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleElkCiAg
ICAgICogQHBhcmFtIHt3ZWJraXRJREJLZXlSYW5nZX0gaWRiS2V5UmFuZ2UKICAgICAgKiBAcGFy
YW0ge251bWJlcn0gc2tpcENvdW50CiAgICAgICogQHBhcmFtIHtudW1iZXJ9IHBhZ2VTaXplCiAg
ICAgICogQHBhcmFtIHtmdW5jdGlvbihBcnJheS48SW5kZXhlZERCQWdlbnQuRGF0YUVudHJ5Piwg
Ym9vbGVhbil9IGNhbGxiYWNrCiAgICAgICovCi0gICAgX3JlcXVlc3REYXRhOiBmdW5jdGlvbihk
YXRhYmFzZUlkLCBkYXRhYmFzZU5hbWUsIG9iamVjdFN0b3JlTmFtZSwgaW5kZXhOYW1lLCBpZGJL
ZXlSYW5nZSwgc2tpcENvdW50LCBwYWdlU2l6ZSwgY2FsbGJhY2spCisgICAgX3JlcXVlc3REYXRh
OiBmdW5jdGlvbihkYXRhYmFzZUlkLCBkYXRhYmFzZU5hbWUsIG9iamVjdFN0b3JlSWQsIGluZGV4
SWQsIGlkYktleVJhbmdlLCBza2lwQ291bnQsIHBhZ2VTaXplLCBjYWxsYmFjaykKICAgICB7CiAg
ICAgICAgIHZhciBmcmFtZUlkID0gdGhpcy5fYXNzZXJ0RnJhbWVJZChkYXRhYmFzZUlkKTsKICAg
ICAgICAgaWYgKCFmcmFtZUlkKQpAQCAtNDY3LDcgKzQ2Nyw3IEBAIFdlYkluc3BlY3Rvci5JbmRl
eGVkREJNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcigi
SW5kZXhlZERCQWdlbnQgZXJyb3I6ICIgKyBlcnJvcik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICghdGhpcy5f
ZnJhbWVzW2ZyYW1lSWRdKQogICAgICAgICAgICAgICAgIHJldHVybjsKIApAQCAtNDgyLDcgKzQ4
Miw3IEBAIFdlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgICAg
IH0KIAogICAgICAgICB2YXIga2V5UmFuZ2UgPSBXZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwu
a2V5UmFuZ2VGcm9tSURCS2V5UmFuZ2UoaWRiS2V5UmFuZ2UpOwotICAgICAgICBJbmRleGVkREJB
Z2VudC5yZXF1ZXN0RGF0YShmcmFtZUlkLCBkYXRhYmFzZU5hbWUsIG9iamVjdFN0b3JlTmFtZSwg
aW5kZXhOYW1lLCBza2lwQ291bnQsIHBhZ2VTaXplLCBrZXlSYW5nZSA/IGtleVJhbmdlIDogdW5k
ZWZpbmVkLCBpbm5lckNhbGxiYWNrLmJpbmQodGhpcykpOworICAgICAgICBJbmRleGVkREJBZ2Vu
dC5yZXF1ZXN0RGF0YShmcmFtZUlkLCBkYXRhYmFzZU5hbWUsIG9iamVjdFN0b3JlSWQsIGluZGV4
SWQsIHNraXBDb3VudCwgcGFnZVNpemUsIGtleVJhbmdlID8ga2V5UmFuZ2UgOiB1bmRlZmluZWQs
IGlubmVyQ2FsbGJhY2suYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIF9fcHJvdG9fXzogV2Vi
SW5zcGVjdG9yLk9iamVjdC5wcm90b3R5cGUKQEAgLTU1MSw4ICs1NTEsOSBAQCBXZWJJbnNwZWN0
b3IuSW5kZXhlZERCTW9kZWwuRGF0YWJhc2UgPSBmdW5jdGlvbihkYXRhYmFzZUlkLCB2ZXJzaW9u
LCBpbnRWZXJzaW9uKQogICogQHBhcmFtIHtzdHJpbmd9IG5hbWUKICAqIEBwYXJhbSB7Kn0ga2V5
UGF0aAogICovCi1XZWJJbnNwZWN0b3IuSW5kZXhlZERCTW9kZWwuT2JqZWN0U3RvcmUgPSBmdW5j
dGlvbihuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KQorV2ViSW5zcGVjdG9yLkluZGV4ZWRE
Qk1vZGVsLk9iamVjdFN0b3JlID0gZnVuY3Rpb24oaWQsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmNy
ZW1lbnQpCiB7CisgICAgdGhpcy5pZCA9IGlkOwogICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAg
dGhpcy5rZXlQYXRoID0ga2V5UGF0aDsKICAgICB0aGlzLmF1dG9JbmNyZW1lbnQgPSBhdXRvSW5j
cmVtZW50OwpAQCAtNTc0LDEzICs1NzUsMTQgQEAgV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVs
Lk9iamVjdFN0b3JlLnByb3RvdHlwZSA9IHsKICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lCiAgKiBA
cGFyYW0geyp9IGtleVBhdGgKICAqLwotV2ViSW5zcGVjdG9yLkluZGV4ZWREQk1vZGVsLkluZGV4
ID0gZnVuY3Rpb24obmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KQorV2ViSW5zcGVj
dG9yLkluZGV4ZWREQk1vZGVsLkluZGV4ID0gZnVuY3Rpb24oaWQsIG5hbWUsIGtleVBhdGgsIHVu
aXF1ZSwgbXVsdGlFbnRyeSkKIHsKKyAgICB0aGlzLmlkID0gaWQ7CiAgICAgdGhpcy5uYW1lID0g
bmFtZTsKICAgICB0aGlzLmtleVBhdGggPSBrZXlQYXRoOwogICAgIHRoaXMudW5pcXVlID0gdW5p
cXVlOwogICAgIHRoaXMubXVsdGlFbnRyeSA9IG11bHRpRW50cnk7Ci19Cit9OwogCiBXZWJJbnNw
ZWN0b3IuSW5kZXhlZERCTW9kZWwuSW5kZXgucHJvdG90eXBlID0gewogICAgIC8qKgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmRleGVkREJWaWV3cy5q
cyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvSW5kZXhlZERCVmlld3MuanMK
aW5kZXggNDFlMmRlOTg3ODNlZjVjNWUyNDU1Y2Y0MTgxOWI0MGJhN2NjMzgxYi4uNDk3MjljOGVk
OTg4MGJmMjhhNjEyZDhiMGVlMGUyNGQ1OTEwNjYzZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9JbmRleGVkREJWaWV3cy5qcworKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0luZGV4ZWREQlZpZXdzLmpzCkBAIC0xNDgsNyArMTQ4
LDcgQEAgV2ViSW5zcGVjdG9yLklEQkRhdGFWaWV3LnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFy
IGtleVBhdGggPSB0aGlzLl9pc0luZGV4ID8gdGhpcy5faW5kZXgua2V5UGF0aCA6IHRoaXMuX29i
amVjdFN0b3JlLmtleVBhdGg7CiAgICAgICAgIGNvbHVtbnNbImtleSJdID0ge307CiAgICAgICAg
IGNvbHVtbnNbImtleSJdLnRpdGxlRE9NRnJhZ21lbnQgPSB0aGlzLl9rZXlDb2x1bW5IZWFkZXJG
cmFnbWVudChXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIktleSIpLCBrZXlQYXRoKTsKLSAgICAgICAg
CisKICAgICAgICAgaWYgKHRoaXMuX2lzSW5kZXgpIHsKICAgICAgICAgICAgIGNvbHVtbnNbInBy
aW1hcnlLZXkiXSA9IHt9OwogICAgICAgICAgICAgY29sdW1uc1sicHJpbWFyeUtleSJdLnRpdGxl
RE9NRnJhZ21lbnQgPSB0aGlzLl9rZXlDb2x1bW5IZWFkZXJGcmFnbWVudChXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIlByaW1hcnkga2V5IiksIHRoaXMuX29iamVjdFN0b3JlLmtleVBhdGgpOwpAQCAt
MTcyLDcgKzE3Miw3IEBAIFdlYkluc3BlY3Rvci5JREJEYXRhVmlldy5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIGtleUNvbHVtbkhlYWRlckZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKHByZWZpeCkpOwogICAgICAgICBpZiAoa2V5UGF0aCA9PT0gbnVsbCkKICAgICAg
ICAgICAgIHJldHVybiBrZXlDb2x1bW5IZWFkZXJGcmFnbWVudDsKLSAgICAgICAgCisKICAgICAg
ICAga2V5Q29sdW1uSGVhZGVyRnJhZ21lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4
dE5vZGUoIiAoIiArIFdlYkluc3BlY3Rvci5VSVN0cmluZygiS2V5IHBhdGg6ICIpKSk7CiAgICAg
ICAgIGlmIChrZXlQYXRoIGluc3RhbmNlb2YgQXJyYXkpIHsKICAgICAgICAgICAgIGtleUNvbHVt
bkhlYWRlckZyYWdtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCJbIikp
OwpAQCAtMzQ1LDkgKzM0NSw5IEBAIFdlYkluc3BlY3Rvci5JREJEYXRhVmlldy5wcm90b3R5cGUg
PSB7CiAKICAgICAgICAgdmFyIGlkYktleVJhbmdlID0ga2V5ID8gd2luZG93LndlYmtpdElEQktl
eVJhbmdlLmxvd2VyQm91bmQoa2V5KSA6IG51bGw7CiAgICAgICAgIGlmICh0aGlzLl9pc0luZGV4
KQotICAgICAgICAgICAgdGhpcy5fbW9kZWwubG9hZEluZGV4RGF0YSh0aGlzLl9kYXRhYmFzZUlk
LCB0aGlzLl9vYmplY3RTdG9yZS5uYW1lLCB0aGlzLl9pbmRleC5uYW1lLCBpZGJLZXlSYW5nZSwg
c2tpcENvdW50LCBwYWdlU2l6ZSwgY2FsbGJhY2suYmluZCh0aGlzKSk7CisgICAgICAgICAgICB0
aGlzLl9tb2RlbC5sb2FkSW5kZXhEYXRhKHRoaXMuX2RhdGFiYXNlSWQsIHRoaXMuX29iamVjdFN0
b3JlLmlkLCB0aGlzLl9pbmRleC5pZCwgaWRiS2V5UmFuZ2UsIHNraXBDb3VudCwgcGFnZVNpemUs
IGNhbGxiYWNrLmJpbmQodGhpcykpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0aGlzLl9t
b2RlbC5sb2FkT2JqZWN0U3RvcmVEYXRhKHRoaXMuX2RhdGFiYXNlSWQsIHRoaXMuX29iamVjdFN0
b3JlLm5hbWUsIGlkYktleVJhbmdlLCBza2lwQ291bnQsIHBhZ2VTaXplLCBjYWxsYmFjay5iaW5k
KHRoaXMpKTsKKyAgICAgICAgICAgIHRoaXMuX21vZGVsLmxvYWRPYmplY3RTdG9yZURhdGEodGhp
cy5fZGF0YWJhc2VJZCwgdGhpcy5fb2JqZWN0U3RvcmUuaWQsIGlkYktleVJhbmdlLCBza2lwQ291
bnQsIHBhZ2VTaXplLCBjYWxsYmFjay5iaW5kKHRoaXMpKTsKICAgICB9LAogCiAgICAgX3JlZnJl
c2hCdXR0b25DbGlja2VkOiBmdW5jdGlvbihldmVudCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvUmVzb3VyY2VzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1Jlc291cmNlc1BhbmVsLmpzCmluZGV4IDJkYTNlOWUxZDZm
ZWE4OWJmM2Y5NTQ4MzU4Y2VmNDBlNjYyZDI4MmYuLjQ3ZjkyNGVhZDliYWRhZDg2ZmU1ODlhZDdj
ZTI3N2NkNTY2YTAzZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvUmVzb3VyY2VzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9SZXNvdXJjZXNQYW5lbC5qcwpAQCAtMTYyMyw4ICsxNjIzLDggQEAgV2ViSW5zcGVj
dG9yLklEQkRhdGFiYXNlVHJlZUVsZW1lbnQucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAg
dGhpcy5fZGF0YWJhc2UgPSBkYXRhYmFzZTsKICAgICAgICAgdmFyIG9iamVjdFN0b3JlTmFtZXMg
PSB7fTsKLSAgICAgICAgZm9yICh2YXIgb2JqZWN0U3RvcmVOYW1lIGluIHRoaXMuX2RhdGFiYXNl
Lm9iamVjdFN0b3JlcykgewotICAgICAgICAgICAgdmFyIG9iamVjdFN0b3JlID0gdGhpcy5fZGF0
YWJhc2Uub2JqZWN0U3RvcmVzW29iamVjdFN0b3JlTmFtZV07CisgICAgICAgIGZvciAodmFyIG9i
amVjdFN0b3JlSWQgaW4gdGhpcy5fZGF0YWJhc2Uub2JqZWN0U3RvcmVzKSB7CisgICAgICAgICAg
ICB2YXIgb2JqZWN0U3RvcmUgPSB0aGlzLl9kYXRhYmFzZS5vYmplY3RTdG9yZXNbb2JqZWN0U3Rv
cmVJZF07CiAgICAgICAgICAgICBvYmplY3RTdG9yZU5hbWVzW29iamVjdFN0b3JlLm5hbWVdID0g
dHJ1ZTsKICAgICAgICAgICAgIGlmICghdGhpcy5faWRiT2JqZWN0U3RvcmVUcmVlRWxlbWVudHNb
b2JqZWN0U3RvcmUubmFtZV0pIHsKICAgICAgICAgICAgICAgICB2YXIgaWRiT2JqZWN0U3RvcmVU
cmVlRWxlbWVudCA9IG5ldyBXZWJJbnNwZWN0b3IuSURCT2JqZWN0U3RvcmVUcmVlRWxlbWVudCh0
aGlzLl9zdG9yYWdlUGFuZWwsIHRoaXMuX21vZGVsLCB0aGlzLl9kYXRhYmFzZUlkLCBvYmplY3RT
dG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RT
dG9yZUJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKaW5kZXggNmEwZDAyNzcyYjg0NGM3ZWY2YWMyMGZiY2Vj
M2NjMzFkMWYzNjE0Mi4uOGU4OWRlYjAzM2YzZGVjOTg4YWE2N2FjM2NkZTRhNWQ5Njk1ZmJmZCAx
MDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0
b3JlQmFja2VuZFByb3h5LmNwcApAQCAtNjcsMTYgKzY3LDYgQEAgdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRQcm94eTo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNz
UmVmUHQKICAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5nZXQoa2V5UmFuZ2UsIG5ldyBXZWJJREJD
YWxsYmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFu
c2FjdGlvbigpLCBlYyk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1
dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQ
YXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5k
ZXhLZXlzPiYgaW5kZXhLZXlzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBUaGUgdHJh
bnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5
IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAotICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMg
b2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCi0gICAgSURCVHJhbnNhY3Rpb25C
YWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlv
bkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsKLSAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiB3
ZWJJbmRleE5hbWVzKGluZGV4TmFtZXMpOwotICAgIFdlYlZlY3RvcjxJbmRleEtleXM+IHdlYklu
ZGV4S2V5cyhpbmRleEtleXMpOwotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnB1dFdpdGhJbmRl
eEtleXModmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8V2ViSURCT2JqZWN0U3RvcmU6OlB1dE1vZGU+
KHB1dE1vZGUpLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rp
b25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgd2ViSW5kZXhOYW1lcywgd2ViSW5kZXhL
ZXlzLCBlYyk7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dChQYXNz
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBr
ZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykK
IHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEg
cG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApAQCAtODUsMTYg
Kzc1LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6cHV0KFBhc3NSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGEKICAgICBtX3dlYklEQk9iamVjdFN0b3Jl
LT5wdXQodmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8V2ViSURCT2JqZWN0U3RvcmU6OlB1dE1vZGU+
KHB1dE1vZGUpLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rp
b25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgaW5kZXhJZHMsIGluZGV4S2V5cyk7CiB9
CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4S2V5cyhQYXNzUmVm
UHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFt
ZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCi17Ci0gICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBv
aW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMs
IGluIHRoZSByZW5kZXJlciwKLSAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRl
cmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5
KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJv
eHkqPih0cmFuc2FjdGlvbik7Ci0gICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gd2ViSW5kZXhOYW1l
cyhpbmRleE5hbWVzKTsKLSAgICBXZWJWZWN0b3I8SW5kZXhLZXlzPiB3ZWJJbmRleEtleXMoaW5k
ZXhLZXlzKTsKLSAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5zZXRJbmRleEtleXMocHJwUHJpbWFy
eUtleSwgd2ViSW5kZXhOYW1lcywgd2ViSW5kZXhLZXlzLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0
V2ViSURCVHJhbnNhY3Rpb24oKSk7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJv
eHk6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3Qg
VmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4
S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKIHsKICAg
ICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRl
ciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApAQCAtMTMwLDI1ICsxMTAs
NiBAQCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVC
YWNrZW5kUHJveHk6OmNyZWF0ZUluZGV4KGludAogICAgIHJldHVybiBJREJJbmRleEJhY2tlbmRQ
cm94eTo6Y3JlYXRlKGluZGV4LnJlbGVhc2UoKSk7CiB9CiAKLVBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6Y3JlYXRlSW5kZXgo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1
ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9p
bnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywg
aW4gdGhlIHJlbmRlcmVyLAotICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVy
ZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkq
IHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94
eSo+KHRyYW5zYWN0aW9uKTsKLSAgICBPd25QdHI8V2ViSURCSW5kZXg+IGluZGV4ID0gYWRvcHRQ
dHIobV93ZWJJREJPYmplY3RTdG9yZS0+Y3JlYXRlSW5kZXgobmFtZSwga2V5UGF0aCwgdW5pcXVl
LCBtdWx0aUVudHJ5LCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwg
ZWMpKTsKLSAgICBpZiAoIWluZGV4KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gSURC
SW5kZXhCYWNrZW5kUHJveHk6OmNyZWF0ZShpbmRleC5yZWxlYXNlKCkpOwotfQotCi12b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPFN0
cmluZz4mIGluZGV4TmFtZXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb24pCi17Ci0gICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0
byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKLSAg
ICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmpl
Y3RzLgotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0g
c3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7Ci0g
ICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5KFdlYlZlY3RvcjxXZWJTdHJp
bmc+KGluZGV4TmFtZXMpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24o
KSk7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4ZXNSZWFk
eShjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVy
IGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0
aGUgcmVuZGVyZXIsCkBAIC0xNTcsMTQgKzExOCw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kUHJveHk6OnNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRz
CiAgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5KFdlYlZlY3Rvcjxsb25n
IGxvbmc+KGluZGV4SWRzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9u
KCkpOwogfQogCi1QYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0
U3RvcmVCYWNrZW5kUHJveHk6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgT3duUHRyPFdlYklEQkluZGV4PiBpbmRleCA9IGFkb3B0UHRyKG1fd2Vi
SURCT2JqZWN0U3RvcmUtPmluZGV4KG5hbWUsIGVjKSk7Ci0gICAgaWYgKCFpbmRleCkKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIElEQkluZGV4QmFja2VuZFByb3h5OjpjcmVhdGUoaW5k
ZXgucmVsZWFzZSgpKTsKLX0KLQogUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjppbmRleChpbnQ2NF90IGluZGV4SWQpCiB7CiAg
ICAgT3duUHRyPFdlYklEQkluZGV4PiBpbmRleCA9IGFkb3B0UHRyKG1fd2ViSURCT2JqZWN0U3Rv
cmUtPmluZGV4KGluZGV4SWQpKTsKQEAgLTE3MywxNCArMTI2LDYgQEAgUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjppbmRleChp
bnQ2NF90IGkKICAgICByZXR1cm4gSURCSW5kZXhCYWNrZW5kUHJveHk6OmNyZWF0ZShpbmRleC5y
ZWxlYXNlKCkpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpkZWxldGVJ
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIFRoZSB0cmFuc2FjdGlv
biBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0
IGFzLCBpbiB0aGUgcmVuZGVyZXIsCi0gICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIg
aW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQ
cm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2Vu
ZFByb3h5Kj4odHJhbnNhY3Rpb24pOwotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPmRlbGV0ZUlu
ZGV4KG5hbWUsICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7
Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmRlbGV0ZUluZGV4KGNvbnN0
IGludDY0X3QgaW5kZXhJZCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50
ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGlu
IHRoZSByZW5kZXJlciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lE
Qk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oCmluZGV4IDc5MTEzYWU5NTY1YTMxNGRjY2YyYmFj
NzgwZWJhNzUzOTRmNmNkYWQuLmRhOGY2YmJkZDgyZDFmMmIwODk0M2U3ODMyZWU1OGFlYmUyMjU5
ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3Jl
QmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0
U3RvcmVCYWNrZW5kUHJveHkuaApAQCAtNDQsMjEgKzQ0LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eSgpOwogCiAgICAgdmlydHVhbCB2b2lkIGdl
dChQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBX
ZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtl
eXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRy
PFdlYkNvcmU6OklEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJh
Y2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgV1RG
OjpWZWN0b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlzPiYsIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8
V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJL
ZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFdURjo6VmVjdG9yPGludDY0
X3Q+JiwgY29uc3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlzPiYpOwogICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNs
ZWFyKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogCiAgICAg
UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4
KGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0
aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJv
b2wgbXVsdGlFbnRyeSwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMo
UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFdURjo6VmVj
dG9yPFdURjo6U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4
S2V5cyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgV1RG
OjpWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6OklE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRl
eGVzUmVhZHkoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0
IFZlY3RvcjxpbnQ2NF90PiYsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSopOwogCi0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAg
IFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChpbnQ2
NF90KTsKLSAgICB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgV2ViQ29yZTo6
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYp
OwogICAgIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdmlydHVh
bCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFdlYkNv
cmU6OklEQkN1cnNvcjo6RGlyZWN0aW9uLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNr
cz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlv
bkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRh
dGFiYXNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFz
ZUltcGwuY3BwCmluZGV4IDkwYzI2MjM4OTQ5ZTQ0YTA3NDI5OTU0Y2Y3ZDg5ZTE1NjUwZTFhYTAu
LjU5YWJkNTMyOTI4MDFmMzA0OTNkYmQwYzQ3ZjZlMDBkMzYwYmRkNDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcApAQCAtNzAsMTEg
KzcwLDYgQEAgV2ViSURCT2JqZWN0U3RvcmUqIFdlYklEQkRhdGFiYXNlSW1wbDo6Y3JlYXRlT2Jq
ZWN0U3RvcmUobG9uZyBsb25nIGlkLCBjb25zdCBXZWIKICAgICByZXR1cm4gbmV3IFdlYklEQk9i
amVjdFN0b3JlSW1wbChvYmplY3RTdG9yZSk7CiB9CiAKLXZvaWQgV2ViSURCRGF0YWJhc2VJbXBs
OjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgbV9k
YXRhYmFzZUJhY2tlbmQtPmRlbGV0ZU9iamVjdFN0b3JlKG5hbWUsIHRyYW5zYWN0aW9uLmdldElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7Ci19Ci0KIHZvaWQgV2ViSURCRGF0
YWJhc2VJbXBsOjpkZWxldGVPYmplY3RTdG9yZShsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgY29u
c3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykK
IHsKICAgICBtX2RhdGFiYXNlQmFja2VuZC0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJ
ZCwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsK
QEAgLTg1LDE3ICs4MCw2IEBAIHZvaWQgV2ViSURCRGF0YWJhc2VJbXBsOjpzZXRWZXJzaW9uKGNv
bnN0IFdlYlN0cmluZyYgdmVyc2lvbiwgV2ViSURCQ2FsbGJhY2tzKiBjCiAgICAgbV9kYXRhYmFz
ZUJhY2tlbmQtPnNldFZlcnNpb24odmVyc2lvbiwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShh
ZG9wdFB0cihjYWxsYmFja3MpKSwgbV9kYXRhYmFzZUNhbGxiYWNrcywgZWMpOwogfQogCi1XZWJJ
REJUcmFuc2FjdGlvbiogV2ViSURCRGF0YWJhc2VJbXBsOjp0cmFuc2FjdGlvbihjb25zdCBXZWJE
T01TdHJpbmdMaXN0JiBuYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgV2ViRXhjZXB0aW9uQ29k
ZSYgZWMpCi17Ci0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG5hbWVMaXN0ID0gUGFzc1JlZlB0
cjxET01TdHJpbmdMaXN0PihuYW1lcyk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBtX2RhdGFiYXNlQmFja2VuZC0+dHJhbnNhY3Rpb24o
bmFtZUxpc3QuZ2V0KCksIG1vZGUsIGVjKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKSB7Ci0gICAg
ICAgIEFTU0VSVChlYyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gbmV3
IFdlYklEQlRyYW5zYWN0aW9uSW1wbCh0cmFuc2FjdGlvbik7Ci19Ci0KIFdlYklEQlRyYW5zYWN0
aW9uKiBXZWJJREJEYXRhYmFzZUltcGw6OnRyYW5zYWN0aW9uKGNvbnN0IFdlYlZlY3Rvcjxsb25n
IGxvbmc+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQgc2hvcnQgbW9kZSkKIHsKICAgICBWZWN0
b3I8aW50NjRfdD4gb2JqZWN0U3RvcmVJZExpc3Qob2JqZWN0U3RvcmVJZHMuc2l6ZSgpKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5o
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmgKaW5kZXgg
NjVhMTk2NjhhOWI3Mjk3NzQ3NzliNmJlNzQxNmI3Yjc0OGYyODE2NC4uZTcyODc0MmM2NDc0ODQx
MjZjZjNlYTdkZDk1NmVkZmYzMmM3MjgwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmgKQEAgLTUzLDEwICs1Myw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFdlYklEQk1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFs
IFdlYklEQk9iamVjdFN0b3JlKiBjcmVhdGVPYmplY3RTdG9yZShsb25nIGxvbmcsIGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwg
Y29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVh
bCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2Vi
SURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGRl
bGV0ZU9iamVjdFN0b3JlKGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lv
bihjb25zdCBXZWJTdHJpbmcmIHZlcnNpb24sIFdlYklEQkNhbGxiYWNrcyosIFdlYkV4Y2VwdGlv
bkNvZGUmKTsKLSAgICB2aXJ0dWFsIFdlYklEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbihjb25z
dCBXZWJET01TdHJpbmdMaXN0JiBuYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgV2ViRXhjZXB0
aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgV2ViSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKGNv
bnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiBuYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSk7CiAg
ICAgdmlydHVhbCB2b2lkIGZvcmNlQ2xvc2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3Jl
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUlt
cGwuY3BwCmluZGV4IDg1YmFjMTNiMzQ4MDBkNDIwZjFjZDE4NzYwYmQ5NTYzOGNkNjRlNWMuLjEw
MjgwNGJjODFkZjY0OGFlYmZiMDkyZTBjMTRhODkzMjJiOWQ1OTcgMTAwNzU1Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcApAQCAtNTgs
MjMgKzU4LDYgQEAgdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OmdldChjb25zdCBXZWJJREJL
ZXlSYW5nZSYga2V5UmFuZ2UsIFdlYklEQkNhbGxiYWNrcyoKICAgICBtX29iamVjdFN0b3JlLT5n
ZXQoa2V5UmFuZ2UsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tz
KSksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7
CiB9CiAKLXZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKGNvbnN0
IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFdlYklEQktleSYga2V5LCBQ
dXRNb2RlIHB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB3ZWJJ
bmRleE5hbWVzLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYgd2ViSW5kZXhLZXlzLCBX
ZWJFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlQod2ViSW5kZXhOYW1lcy5zaXplKCkg
PT0gd2ViSW5kZXhLZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lcyh3
ZWJJbmRleE5hbWVzLnNpemUoKSk7Ci0gICAgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZTo6SW5kZXhLZXlzPiBpbmRleEtleXMod2ViSW5kZXhLZXlzLnNpemUoKSk7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYkluZGV4TmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAg
ICAgICAgaW5kZXhOYW1lc1tpXSA9IHdlYkluZGV4TmFtZXNbaV07Ci0gICAgICAgIFZlY3RvcjxS
ZWZQdHI8SURCS2V5PiA+IGluZGV4S2V5TGlzdCh3ZWJJbmRleEtleXNbaV0uc2l6ZSgpKTsKLSAg
ICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB3ZWJJbmRleEtleXNbaV0uc2l6ZSgpOyArK2op
Ci0gICAgICAgICAgICBpbmRleEtleUxpc3Rbal0gPSB3ZWJJbmRleEtleXNbaV1bal07Ci0gICAg
ICAgIGluZGV4S2V5c1tpXSA9IGluZGV4S2V5TGlzdDsKLSAgICB9Ci0KLSAgICBtX29iamVjdFN0
b3JlLT5wdXRXaXRoSW5kZXhLZXlzKHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZT4ocHV0TW9kZSksIElEQkNhbGxiYWNrc1Byb3h5
OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSgpLCBpbmRleE5hbWVzLCBpbmRleEtleXMsIGVjKTsKLX0KLQog
dm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0
VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJREJLZXkmIGtleSwgUHV0TW9kZSBwdXRNb2RlLCBXZWJJ
REJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0
aW9uLCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYgd2ViSW5kZXhJZHMsIGNvbnN0IFdlYlZl
Y3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRleEtleXMpCiB7CiAgICAgQVNTRVJUKHdlYkluZGV4
SWRzLnNpemUoKSA9PSB3ZWJJbmRleEtleXMuc2l6ZSgpKTsKQEAgLTkyLDIyICs3NSw2IEBAIHZv
aWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZh
bHVlJiB2YWx1ZSwgY29uc3QgV2ViCiAgICAgbV9vYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBrZXks
IHN0YXRpY19jYXN0PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZT4ocHV0
TW9kZSksIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIHRy
YW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBpbmRleElkcywg
aW5kZXhLZXlzKTsKIH0KIAotdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4S2V5
cyhjb25zdCBXZWJJREJLZXkmIHByaW1hcnlLZXksIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+
JiB3ZWJJbmRleE5hbWVzLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYgd2ViSW5kZXhL
ZXlzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJU
KHdlYkluZGV4TmFtZXMuc2l6ZSgpID09IHdlYkluZGV4S2V5cy5zaXplKCkpOwotICAgIFZlY3Rv
cjxTdHJpbmc+IGluZGV4TmFtZXMod2ViSW5kZXhOYW1lcy5zaXplKCkpOwotICAgIFZlY3RvcjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gaW5kZXhLZXlzKHdlYklu
ZGV4S2V5cy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJJbmRleE5h
bWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGluZGV4TmFtZXNbaV0gPSB3ZWJJbmRleE5hbWVz
W2ldOwotICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRleEtleUxpc3Qod2ViSW5k
ZXhLZXlzW2ldLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgd2ViSW5k
ZXhLZXlzW2ldLnNpemUoKTsgKytqKQotICAgICAgICAgICAgaW5kZXhLZXlMaXN0W2pdID0gd2Vi
SW5kZXhLZXlzW2ldW2pdOwotICAgICAgICBpbmRleEtleXNbaV0gPSBpbmRleEtleUxpc3Q7Ci0g
ICAgfQotICAgIG1fb2JqZWN0U3RvcmUtPnNldEluZGV4S2V5cyhwcmltYXJ5S2V5LCBpbmRleE5h
bWVzLCBpbmRleEtleXMsIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSgpKTsKLX0KLQogdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4S2V5cyhj
b25zdCBXZWJJREJLZXkmIHByaW1hcnlLZXksIGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiB3
ZWJJbmRleElkcywgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mIHdlYkluZGV4S2V5cywg
Y29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQogewogICAgIEFTU0VSVCh3ZWJJ
bmRleElkcy5zaXplKCkgPT0gd2ViSW5kZXhLZXlzLnNpemUoKSk7CkBAIC0xMjQsMTQgKzkxLDYg
QEAgdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4S2V5cyhjb25zdCBXZWJJREJL
ZXkmIHByaW1hcnlLZXksIGNvbnN0IFdlYlYKICAgICBtX29iamVjdFN0b3JlLT5zZXRJbmRleEtl
eXMocHJpbWFyeUtleSwgaW5kZXhJZHMsIGluZGV4S2V5cywgdHJhbnNhY3Rpb24uZ2V0SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkpOwogfQogCi12b2lkIFdlYklEQk9iamVjdFN0b3Jl
SW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB3ZWJJbmRl
eE5hbWVzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAgVmVj
dG9yPFN0cmluZz4gaW5kZXhOYW1lcyh3ZWJJbmRleE5hbWVzLnNpemUoKSk7Ci0gICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCB3ZWJJbmRleE5hbWVzLnNpemUoKTsgKytpKQotICAgICAgICBpbmRl
eE5hbWVzW2ldID0gd2ViSW5kZXhOYW1lc1tpXTsKLSAgICBtX29iamVjdFN0b3JlLT5zZXRJbmRl
eGVzUmVhZHkoaW5kZXhOYW1lcywgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKCkpOwotfQotCiB2b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6c2V0SW5kZXhl
c1JlYWR5KGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiB3ZWJJbmRleE5hbWVzLCBjb25zdCBX
ZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7CiAgICAgVmVjdG9yPGludDY0X3Q+IGlu
ZGV4SWRzKHdlYkluZGV4TmFtZXMuc2l6ZSgpKTsKQEAgLTE1OCwxNCArMTE3LDYgQEAgV2ViSURC
SW5kZXgqIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6Y3JlYXRlSW5kZXgobG9uZyBsb25nIGlkLCBj
b25zdCBXZWJTdHJpbmcmIG4KICAgICByZXR1cm4gbmV3IFdlYklEQkluZGV4SW1wbChpbmRleCk7
CiB9CiAKLVdlYklEQkluZGV4KiBXZWJJREJPYmplY3RTdG9yZUltcGw6OmluZGV4KGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQklu
ZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBtX29iamVjdFN0b3JlLT5pbmRleChuYW1lLCBl
Yyk7Ci0gICAgaWYgKCFpbmRleCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBX
ZWJJREJJbmRleEltcGwoaW5kZXgpOwotfQotCiBXZWJJREJJbmRleCogV2ViSURCT2JqZWN0U3Rv
cmVJbXBsOjppbmRleChsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IG1fb2JqZWN0U3RvcmUtPmluZGV4KG9iamVj
dFN0b3JlSWQpOwpAQCAtMTc0LDExICsxMjUsNiBAQCBXZWJJREJJbmRleCogV2ViSURCT2JqZWN0
U3RvcmVJbXBsOjppbmRleChsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCkKICAgICByZXR1cm4gbmV3
IFdlYklEQkluZGV4SW1wbChpbmRleCk7CiB9CiAKLXZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBs
OjpkZWxldGVJbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgbV9vYmplY3RT
dG9yZS0+ZGVsZXRlSW5kZXgobmFtZSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKCksIGVjKTsKLX0KLQogdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OmRl
bGV0ZUluZGV4KGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJUcmFuc2FjdGlv
biYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIG1fb2JqZWN0U3Rv
cmUtPmRlbGV0ZUluZGV4KG9iamVjdFN0b3JlSWQsIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCmluZGV4IDVkZTNjOWExNWFkOGVmNWY0NjBh
ODg2YWMxY2RlYWJjY2JkNTgyZjguLjcwZjE5Y2M4ZmI3ZDk2MjZmMzA4YzY1MGY1NGQ4ZDJjMGVi
ODRmOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVj
dFN0b3JlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVj
dFN0b3JlSW1wbC5oCkBAIC00NiwxOSArNDYsMTQgQEAgcHVibGljOgogICAgIH5XZWJJREJPYmpl
Y3RTdG9yZUltcGwoKTsKIAogICAgIHZvaWQgZ2V0KGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2Vi
SURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0
IFdlYklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mLCBjb25zdCBX
ZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHB1
dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkmLCBQdXRN
b2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIGNvbnN0IFdl
YlZlY3Rvcjxsb25nIGxvbmc+JiwgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mKTsKLSAg
ICB2b2lkIHNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmLCBjb25zdCBXZWJWZWN0b3I8V2Vi
U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mLCBjb25z
dCBXZWJJREJUcmFuc2FjdGlvbiYpOwogICAgIHZvaWQgc2V0SW5kZXhLZXlzKGNvbnN0IFdlYklE
QktleSYsIGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiBpbmRleE5hbWVzLCBjb25zdCBXZWJW
ZWN0b3I8V2ViSW5kZXhLZXlzPiYsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7Ci0gICAgdm9p
ZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mLCBjb25zdCBXZWJJ
REJUcmFuc2FjdGlvbiYpOwogICAgIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3Rv
cjxsb25nIGxvbmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKTsKICAgICB2b2lkIGRlbGV0
ZUZ1bmN0aW9uKGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3Qg
V2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBjbGVhcihX
ZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNv
ZGUmKTsKIAogICAgIFdlYklEQkluZGV4KiBjcmVhdGVJbmRleChsb25nIGxvbmcsIGNvbnN0IFdl
YlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11
bHRpRW50cnksIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwot
ICAgIFdlYklEQkluZGV4KiBpbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYkV4Y2VwdGlv
bkNvZGUmKTsKICAgICBXZWJJREJJbmRleCogaW5kZXgobG9uZyBsb25nKTsKLSAgICB2b2lkIGRl
bGV0ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24m
LCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBkZWxldGVJbmRleChsb25nIGxvbmcsIGNv
bnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBv
cGVuQ3Vyc29yKGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ3Vyc29yOjpEaXJlY3Rpb24s
IFdlYklEQkNhbGxiYWNrcyosIFdlYklEQlRyYW5zYWN0aW9uOjpUYXNrVHlwZSwgY29uc3QgV2Vi
SURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuY3BwIGIvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNwcAppbmRleCA2NjE2ZDY3
MWZjMzBjOTdlNjcyNjE0YzFhNDE5OWUzYTdkMDg4NTc3Li40MGQ3ZDc1NjMxNmMzYzMxZWE4YWJj
NTQ0MDA5YTAwNjYyNjljMjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5jcHAKQEAgLTQ3LDE0ICs0Nyw2IEBAIFdlYklEQlRy
YW5zYWN0aW9uSW1wbDo6fldlYklEQlRyYW5zYWN0aW9uSW1wbCgpCiB7CiB9CiAKLVdlYklEQk9i
amVjdFN0b3JlKiBXZWJJREJUcmFuc2FjdGlvbkltcGw6Om9iamVjdFN0b3JlKGNvbnN0IFdlYlN0
cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3Jl
KG5hbWUsIGVjKTsKLSAgICBpZiAoIW9iamVjdFN0b3JlKQotICAgICAgICByZXR1cm4gMDsKLSAg
ICByZXR1cm4gbmV3IFdlYklEQk9iamVjdFN0b3JlSW1wbChvYmplY3RTdG9yZSk7Ci19Ci0KIFdl
YklEQk9iamVjdFN0b3JlKiBXZWJJREJUcmFuc2FjdGlvbkltcGw6Om9iamVjdFN0b3JlKGxvbmcg
bG9uZyBpbmRleElkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZSA9IG1fYmFja2VuZC0+b2JqZWN0U3Rv
cmUoaW5kZXhJZCwgZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSURCVHJhbnNhY3Rpb25JbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
REJUcmFuc2FjdGlvbkltcGwuaAppbmRleCAxZWU2YWI4MDE5N2VmNzhmYWZhMTNlOTZmZDA1Zjcw
ZjM3YmFkNzQ5Li4wZmI2NTM3Njc2MzE2Y2U3MDBjZmJhYzhkZTg5OTNjZWM2NDY2YTc3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwu
aApAQCAtNDEsNyArNDEsNiBAQCBwdWJsaWM6CiAgICAgV2ViSURCVHJhbnNhY3Rpb25JbXBsKFdU
Rjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsK
ICAgICB2aXJ0dWFsIH5XZWJJREJUcmFuc2FjdGlvbkltcGwoKTsKIAotICAgIHZpcnR1YWwgV2Vi
SURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViRXhj
ZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3Jl
KGxvbmcgbG9uZyBpbmRleElkLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lk
IGNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5kZXhlZGRiL2RhdGFiYXNlLWRhdGEuaHRtbCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luZGV4ZWRkYi9kYXRhYmFzZS1kYXRh
Lmh0bWwKaW5kZXggZjhlZDRhNzkzYjRhZmZmNWU1MGNmZTQ0NDFmNGNkNDYxMDI2Y2NmZC4uNzYz
NDA2NTE5MGM3MTExMjcxYjA3MWIxN2ZkZWQzNTgxYWNjNDc2YSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9pbnNwZWN0b3IvaW5kZXhlZGRiL2RhdGFiYXNlLWRhdGEuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2luc3BlY3Rvci9pbmRleGVkZGIvZGF0YWJhc2Ut
ZGF0YS5odG1sCkBAIC0xMSw3ICsxMSw5IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgIHZhciBzZWN1
cml0eU9yaWdpbiA9ICJodHRwOi8vMTI3LjAuMC4xOjgwMDAiOwogICAgIHZhciBkYXRhYmFzZU5h
bWUgPSAidGVzdERhdGFiYXNlIjsKICAgICB2YXIgb2JqZWN0U3RvcmVOYW1lID0gInRlc3RPYmpl
Y3RTdG9yZSI7CisgICAgdmFyIG9iamVjdFN0b3JlSWQgPSAtMTE7CiAgICAgdmFyIGluZGV4TmFt
ZSA9ICJ0ZXN0SW5kZXhOYW1lIjsKKyAgICB2YXIgaW5kZXhJZCA9IC0xOwogICAgIHZhciBkYXRh
YmFzZUlkID0gbmV3IFdlYkluc3BlY3Rvci5JbmRleGVkREJNb2RlbC5EYXRhYmFzZUlkKHNlY3Vy
aXR5T3JpZ2luLCBkYXRhYmFzZU5hbWUpOwogCiAgICAgZnVuY3Rpb24gYWRkSURCVmFsdWVzKGNv
dW50LCBjYWxsYmFjaykKQEAgLTM4LDkgKzQwLDkgQEAgZnVuY3Rpb24gdGVzdCgpCiAgICAgICAg
IHZhciBpZGJLZXlSYW5nZVN0cmluZyA9IGlkYktleVJhbmdlID8gIntsb3dlcjpcIiIgKyBpZGJL
ZXlSYW5nZS5sb3dlciArICJcIixsb3dlck9wZW46IiArIGlkYktleVJhbmdlLmxvd2VyT3BlbiAr
ICIsdXBwZXI6XCIiICsgaWRiS2V5UmFuZ2UudXBwZXIgKyAiXCIsdXBwZXJPcGVuOiIgKyBpZGJL
ZXlSYW5nZS51cHBlck9wZW4gKyAifSIgOiAibnVsbCI7CiAgICAgICAgIEluc3BlY3RvclRlc3Qu
YWRkUmVzdWx0KCJEdW1waW5nIHZhbHVlcywgZnJvbUluZGV4ID0gIiArIGZyb21JbmRleCArICIs
IHNraXBDb3VudCA9ICIgKyBza2lwQ291bnQgKyAiLCBwYWdlU2l6ZSA9ICIgKyBwYWdlU2l6ZSAr
ICIsIGlkYktleVJhbmdlID0gIiArIGlkYktleVJhbmdlU3RyaW5nKTsKICAgICAgICAgaWYgKGZy
b21JbmRleCkKLSAgICAgICAgICAgIGluZGV4ZWREQk1vZGVsLmxvYWRJbmRleERhdGEoZGF0YWJh
c2VJZCwgb2JqZWN0U3RvcmVOYW1lLCBpbmRleE5hbWUsIGlkYktleVJhbmdlLCBza2lwQ291bnQs
IHBhZ2VTaXplLCBpbm5lckNhbGxiYWNrKTsKKyAgICAgICAgICAgIGluZGV4ZWREQk1vZGVsLmxv
YWRJbmRleERhdGEoZGF0YWJhc2VJZCwgb2JqZWN0U3RvcmVJZCwgaW5kZXhJZCwgaWRiS2V5UmFu
Z2UsIHNraXBDb3VudCwgcGFnZVNpemUsIGlubmVyQ2FsbGJhY2spOwogICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBpbmRleGVkREJNb2RlbC5sb2FkT2JqZWN0U3RvcmVEYXRhKGRhdGFiYXNlSWQs
IG9iamVjdFN0b3JlTmFtZSwgaWRiS2V5UmFuZ2UsIHNraXBDb3VudCwgcGFnZVNpemUsIGlubmVy
Q2FsbGJhY2spOworICAgICAgICAgICAgaW5kZXhlZERCTW9kZWwubG9hZE9iamVjdFN0b3JlRGF0
YShkYXRhYmFzZUlkLCBvYmplY3RTdG9yZUlkLCBpZGJLZXlSYW5nZSwgc2tpcENvdW50LCBwYWdl
U2l6ZSwgaW5uZXJDYWxsYmFjayk7CiAKICAgICAgICAgZnVuY3Rpb24gaW5uZXJDYWxsYmFjayhl
bnRyaWVzLCBoYXNNb3JlKQogICAgICAgICB7CkBAIC0xMDcsOCArMTA5LDExIEBAIGZ1bmN0aW9u
IHRlc3QoKQogICAgICAgICBpbmRleGVkREJNb2RlbC5yZWZyZXNoRGF0YWJhc2UoZGF0YWJhc2VJ
ZCk7CiAgICAgfQogCi0gICAgZnVuY3Rpb24gcnVuT2JqZWN0U3RvcmVUZXN0cygpCisgICAgZnVu
Y3Rpb24gcnVuT2JqZWN0U3RvcmVUZXN0cyhldmVudCkKICAgICB7CisgICAgICAgIHZhciBvYmpl
Y3RTdG9yZXMgPSBldmVudC5kYXRhLm9iamVjdFN0b3JlczsKKyAgICAgICAgb2JqZWN0U3RvcmVJ
ZCA9IG9iamVjdFN0b3Jlc1tvYmplY3RTdG9yZU5hbWVdLmlkOworICAgICAgICBpbmRleElkID0g
b2JqZWN0U3RvcmVzW29iamVjdFN0b3JlTmFtZV0uaW5kZXhlc1tpbmRleE5hbWVdLmlkCiAgICAg
ICAgIGluZGV4ZWREQk1vZGVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkluZGV4
ZWREQk1vZGVsLkV2ZW50VHlwZXMuRGF0YWJhc2VMb2FkZWQsIHJ1bk9iamVjdFN0b3JlVGVzdHMp
OwogICAgICAgICBsb2FkVmFsdWVzQW5kRHVtcChmYWxzZSwgbnVsbCwgMCwgMywgc3RlcDIpCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173082</attachid>
            <date>2012-11-08 11:41:27 -0800</date>
            <delta_ts>2012-11-08 21:29:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-100426-20121108113937.patch</filename>
            <type>text/plain</type>
            <size>59666</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzOTEyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMWFkZDliOGZjMzE0OTJj
NGJiZWU2ODgwMDhlOThmNzgzZTJiZjkyOC4uM2M5MzdjN2NlZDZiM2IwMjkwMGUyM2RhNDg1ZTZl
MjJkYTA3ZGY2YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTExLTAyICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IHN3
aXRjaCBmcm9udGVuZCB0byB1c2UgaW50NjRfdC1iYXNlZCByZWZlcmVuY2VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjYKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgU3RyaW5nLWJhc2Vk
IG9iamVjdFN0b3JlL2luZGV4IHJlZmVyZW5jZXMsIG9ic29sZXRlZCBieQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI1LgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBhcyB0aGlzIGlzIHRoZSBzZWNvbmQgaGFsZiBvZiBhIHJlZmFjdG9yLgorCisg
ICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmg6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0
YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNl
Ojp0cmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VC
YWNrZW5kSW1wbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpzZXRWZXJzaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnRyYW5zYWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbik6CisgICAgICAgICogTW9kdWxlcy9pbmRl
eGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oOgorICAgICAgICAoSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbCk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW50ZXJmYWNlLmg6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UpOgorICAg
ICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpmaW5kSW5kZXgpOgorICAgICAgICAoSURCT2JqZWN0
U3RvcmVNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZU1ldGFkYXRh
Ojpjb250YWluc0luZGV4KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RT
dG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0KToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmluZGV4KToK
KyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpkZWxldGVJbmRleCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbC5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbCk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmg6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci0xLjAuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yLmpzb246CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckluZGV4ZWRE
QkFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9ySW5kZXhlZERCQWdlbnQ6OnJlcXVlc3REYXRhKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9ySW5kZXhlZERCQWdlbnQuaDoKKyAgICAgICAgKEluc3BlY3RvckluZGV4ZWREQkFnZW50
KToKKwogMjAxMi0xMS0wOCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjEzMzg5Mi4KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKaW5kZXggOGIwNTNhNGJiYzQ2ODkwMzViYmJiMDVmZDBjYWZiNDlhZjk5
YmM3OC4uZGE1MThlYTdmNTZlMWEyNWUyNDA4YmU5YWY0NTAwZjIxOThhNzk3NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMyBAQAorMjAxMi0xMS0wMiAgQWxlYyBGbGV0
dCAgPGFsZWNmbGV0dEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBzd2l0Y2gg
ZnJvbnRlbmQgdG8gdXNlIGludDY0X3QtYmFzZWQgcmVmZXJlbmNlcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGltcGxlbWVudGF0aW9uIHN0
dWJzIGZyb20gY2hyb21pdW0gQVBJIGZvcgorICAgICAgICBtZXRob2RzIG9ic29sZXRlZCBieSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI1CisKKyAgICAgICAg
KiBzcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAqIHNyYy9JREJP
YmplY3RTdG9yZUJhY2tlbmRQcm94eS5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHkpOgorICAgICAgICAqIHNyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwOgorICAgICAgICAq
IHNyYy9XZWJJREJEYXRhYmFzZUltcGwuaDoKKyAgICAgICAgKFdlYklEQkRhdGFiYXNlSW1wbCk6
CisgICAgICAgICogc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHA6CisgICAgICAgICogc3Jj
L1dlYklEQk9iamVjdFN0b3JlSW1wbC5oOgorICAgICAgICAoV2ViSURCT2JqZWN0U3RvcmVJbXBs
KToKKwogMjAxMi0xMS0wOCAgS2Vpc2hpIEhhdHRvcmkgIDxrZWlzaGlAd2Via2l0Lm9yZz4KIAog
ICAgICAgICBBZGQgcHJvcGVydGllcyBmb3Igd2Vlay9tb250aCBwaWNrZXIgaW4gRGF0ZVRpbWVD
aG9vc2VySW1wbDo6d3JpdGVEb2N1bWVudApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDYWxsYmFja3MuaAppbmRleCBkZmQ4ZTIwOTIwNGVjMGU0YmI5YWMyOTk5NzFj
ZjIyY2M0ZjFmMDNjLi5iM2VjNGIyNzBmM2E1NjhlM2RmOTk3NWJiMjkxODEyNTc5NWVkNzJlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3Mu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaApA
QCAtMjksNyArMjksNiBAQAogI2lmbmRlZiBJREJDYWxsYmFja3NfaAogI2RlZmluZSBJREJDYWxs
YmFja3NfaAogCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIklEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXJyb3IuaCIKICNp
bmNsdWRlICJJREJLZXkuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlLmNwcAppbmRleCBmY2NiNDU2YzVkNjhhMjE0NjdmNThmMDljZGM2MjdmYzMw
ZmQ5NzgyLi5iMjc1OTc1NGI3ZWZmMTBjM2M3NTY1MDIyYjdkMjJiM2Y5MmVjY2Y4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0x
NDIsNyArMTQyLDcgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNy
ZWF0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgY28KICAgICAgICAgICAgIGtleVBh
dGggPSBJREJLZXlQYXRoKGtleVBhdGhTdHJpbmcpOwogICAgIH0KIAotICAgIGlmIChtX21ldGFk
YXRhLmNvbnRhaW5zT2JqZWN0U3RvcmUobmFtZSkpIHsKKyAgICBpZiAoY29udGFpbnNPYmplY3RT
dG9yZShuYW1lKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJB
SU5UX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTg4LDEzICsxODgsMTMgQEAg
dm9pZCBJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBF
eGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGludDY0IG9i
amVjdFN0b3JlSWQgPSBtX21ldGFkYXRhLmZpbmRPYmplY3RTdG9yZShuYW1lKTsKKyAgICBpbnQ2
NCBvYmplY3RTdG9yZUlkID0gZmluZE9iamVjdFN0b3JlSWQobmFtZSk7CiAgICAgaWYgKG9iamVj
dFN0b3JlSWQgPT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkKSB7CiAgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShuYW1lLCBt
X3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgbV9iYWNrZW5k
LT5kZWxldGVPYmplY3RTdG9yZShvYmplY3RTdG9yZUlkLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2Fj
dGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKCFlYykgewogICAgICAgICBtX3ZlcnNpb25D
aGFuZ2VUcmFuc2FjdGlvbi0+b2JqZWN0U3RvcmVEZWxldGVkKG5hbWUpOwogICAgICAgICBtX21l
dGFkYXRhLm9iamVjdFN0b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7CkBAIC0yNDMsMTggKzI0
MywyMSBAQCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rp
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udAogICAgICAgICByZXR1cm4gMDsKICAgICB9
CiAKKyAgICBWZWN0b3I8aW50NjRfdD4gb2JqZWN0U3RvcmVJZHM7CiAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBzdG9yZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9t
ZXRhZGF0YS5jb250YWluc09iamVjdFN0b3JlKHN0b3JlTmFtZXMtPml0ZW0oaSkpKSB7CisgICAg
ICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IGZpbmRPYmplY3RTdG9yZUlkKHN0b3JlTmFtZXMt
Pml0ZW0oaSkpOworICAgICAgICBpZiAob2JqZWN0U3RvcmVJZCA9PSBJREJPYmplY3RTdG9yZU1l
dGFkYXRhOjpJbnZhbGlkSWQpIHsKICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OklEQl9OT1RfRk9VTkRfRVJSOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0K
KyAgICAgICAgb2JqZWN0U3RvcmVJZHMuYXBwZW5kKG9iamVjdFN0b3JlSWQpOwogICAgIH0KIAog
ICAgIC8vIFdlIG5lZWQgdG8gY3JlYXRlIGEgbmV3IHRyYW5zYWN0aW9uIHN5bmNocm9ub3VzbHku
IExvY2tzIGFyZSBhY3F1aXJlZCBhc3luY2hyb25vdXNseS4gT3BlcmF0aW9ucwogICAgIC8vIGNh
biBiZSBxdWV1ZWQgYWdhaW5zdCB0aGUgdHJhbnNhY3Rpb24gYXQgYW55IHBvaW50LiBUaGV5IHdp
bGwgc3RhcnQgZXhlY3V0aW5nIGFzIHNvb24gYXMgdGhlCiAgICAgLy8gYXBwcm9wcmlhdGUgbG9j
a3MgaGF2ZSBiZWVuIGFjcXVpcmVkLgogICAgIC8vIEFsc28gbm90ZSB0aGF0IGVhY2ggYmFja2Vu
ZCBvYmplY3QgY29ycmVzcG9uZHMgdG8gZXhhY3RseSBvbmUgSURCVHJhbnNhY3Rpb24gb2JqZWN0
LgotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9u
QmFja2VuZCA9IG1fYmFja2VuZC0+dHJhbnNhY3Rpb24oc3RvcmVOYW1lcy5nZXQoKSwgbW9kZSwg
ZWMpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0
aW9uQmFja2VuZCA9IG1fYmFja2VuZC0+dHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVJZHMsIG1vZGUp
OwogICAgIGlmICghdHJhbnNhY3Rpb25CYWNrZW5kKSB7CiAgICAgICAgIEFTU0VSVChlYyk7CiAg
ICAgICAgIHJldHVybiAwOwpAQCAtMzU0LDYgKzM1NywxNyBAQCBib29sIElEQkRhdGFiYXNlOjpk
aXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIHJldHVybiBFdmVudFRh
cmdldDo6ZGlzcGF0Y2hFdmVudChldmVudC5nZXQoKSk7CiB9CiAKK2ludDY0X3QgSURCRGF0YWJh
c2U6OmZpbmRPYmplY3RTdG9yZUlkKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBm
b3IgKElEQkRhdGFiYXNlTWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBp
dCA9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEub2Jq
ZWN0U3RvcmVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBu
YW1lKSB7CisgICAgICAgICAgICBBU1NFUlQoaXQtPmtleSAhPSBJREJPYmplY3RTdG9yZU1ldGFk
YXRhOjpJbnZhbGlkSWQpOworICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZDsKK30K
Kwogdm9pZCBJREJEYXRhYmFzZTo6c3RvcCgpCiB7CiAgICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9w
KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaApp
bmRleCA1ODE2MTY3M2M1YjAzNDk2ZjYwNDA3NDdmMmUyYTVhNGU4ZWM5ZGFlLi4yYzFiZGJmMjA2
ZDkwNmJkZWJjNDRhZWM2NGMyNjZmMzY2YmRiMTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKQEAgLTkxLDYgKzkxLDEyIEBAIHB1YmxpYzoK
ICAgICBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQsIEV4Y2VwdGlv
bkNvZGUmIGVjKSB7IHJldHVybiBFdmVudFRhcmdldDo6ZGlzcGF0Y2hFdmVudChldmVudCwgZWMp
OyB9CiAgICAgdmlydHVhbCBib29sIGRpc3BhdGNoRXZlbnQoUGFzc1JlZlB0cjxFdmVudD4pOwog
CisgICAgaW50NjRfdCBmaW5kT2JqZWN0U3RvcmVJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
OworICAgIGJvb2wgY29udGFpbnNPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gZmluZE9iamVjdFN0b3JlSWQobmFtZSkgIT0gSURCT2Jq
ZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkOworICAgIH0KKwogICAgIHVzaW5nIFJlZkNvdW50
ZWQ8SURCRGF0YWJhc2U+OjpyZWY7CiAgICAgdXNpbmcgUmVmQ291bnRlZDxJREJEYXRhYmFzZT46
OmRlcmVmOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IDVjN2JiZDhmNjU0YTAyMmNhMTAz
MjQzN2FmNTUzNjJkZDAwZTMxODYuLmEwZWMxYjZmZjBhYmJlYWY4ZjY3MmQ2NjRlZTY0N2Y5MjI5
YzAwNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRh
dGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0yMTIsMTYgKzIxMiw2IEBAIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
b2JqZWN0U3RvcmUoaW50NjRfCiAgICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVzLmdldChpZCk7CiB9
CiAKLWludDY0X3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Z2V0T2JqZWN0U3RvcmVJZChjb25z
dCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgZm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBtX29iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQo
KTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlLT5uYW1lKCkgPT0gbmFtZSkKLSAgICAg
ICAgICAgIHJldHVybiBpdC0+a2V5OwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICByZXR1cm4gMDsKLX0KLQogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVP
YmplY3RTdG9yZShpbnQ2NF90IGlkLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRy
YW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQobV9vYmplY3RT
dG9yZXMuY29udGFpbnMoaWQpKTsKQEAgLTI3NCw4ICsyNjQsOCBAQCB2b2lkIElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRy
PElEQkNhbAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPERPTVN0cmluZ0xp
c3Q+IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBSZWZQ
dHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbkludGVyZmFjZSA9
IHRoaXMtPnRyYW5zYWN0aW9uKG9iamVjdFN0b3JlTmFtZXMuZ2V0KCksIElEQlRyYW5zYWN0aW9u
OjpWRVJTSU9OX0NIQU5HRSwgZWMpOworICAgIFZlY3RvcjxpbnQ2NF90PiBvYmplY3RTdG9yZUlk
czsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlv
bkludGVyZmFjZSA9IHRoaXMtPnRyYW5zYWN0aW9uKG9iamVjdFN0b3JlSWRzLCBJREJUcmFuc2Fj
dGlvbjo6VkVSU0lPTl9DSEFOR0UpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNh
Y3Rpb25JbnRlcmZhY2UuZ2V0KCkpOwogICAgIEFTU0VSVCghZWMpOwogCkBAIC00MzQsMTkgKzQy
NCwxMyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5nQ2FsbHMo
KQogICAgIEFTU0VSVChtX3BlbmRpbmdPcGVuQ2FsbHMuaXNFbXB0eSgpKTsKIH0KIAotUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZElt
cGw6OnRyYW5zYWN0aW9uKERPTVN0cmluZ0xpc3QqLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNl
cHRpb25Db2RlJikKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbihjb25zdCBWZWN0b3I8aW50NjRfdD4m
IG9iamVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQogewotICAgIC8vIEZJWE1FOiBG
aXJzdCBwYXJhbWV0ZXIgaXNuJ3QgdXNlZCBmb3IgYW55dGhpbmcgeWV0IGFueXdheSwgYW5kIHRo
aXMgbWV0aG9kIGlzIGdvaW5nIGF3YXkuCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKFZl
Y3RvcjxpbnQ2NF90PigpLCBtb2RlLCB0aGlzKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVh
dGUob2JqZWN0U3RvcmVJZHMsIG1vZGUsIHRoaXMpOwogICAgIG1fdHJhbnNhY3Rpb25zLmFkZCh0
cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlbGVhc2UoKTsKIH0K
IAotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNl
QmFja2VuZEltcGw6OnRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3Rv
cmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpCi17Ci0gICAgcmV0dXJuIHRyYW5zYWN0aW9uKG9i
amVjdFN0b3JlSWRzLCBtb2RlKTsKLX0KLQogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpv
cGVuQ29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKIHsKICAgICBBU1NF
UlQobV9iYWNraW5nU3RvcmUuZ2V0KCkpOwpAQCAtNDk0LDE5ICs0NzgsMTUgQEAgdm9pZCBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oaW50NjRf
dCByZXF1ZXN0ZWRWZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxET01T
dHJpbmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0g
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4gdHJhbnNhY3Rpb25JbnRlcmZhY2UgPSB0cmFuc2FjdGlvbihvYmplY3RTdG9y
ZU5hbWVzLmdldCgpLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIGVjKTsKKyAgICBW
ZWN0b3I8aW50NjRfdD4gb2JqZWN0U3RvcmVJZHM7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25JbnRlcmZhY2UgPSB0cmFuc2FjdGlvbihvYmpl
Y3RTdG9yZUlkcywgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKICAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uSW50ZXJmYWNlLmdldCgpKTsKLSAgICBBU1NFUlQo
IWVjKTsKIAogICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRo
aXM7CiAgICAgT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGludFZlcnNpb25U
YXNrID0gY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbnRW
ZXJzaW9uSW50ZXJuYWwsIGRhdGFiYXNlLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3MsIGRh
dGFiYXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7CiAgICAgT3duUHRyPFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQ6OlRhc2s+IHJlc2V0VmVyc2lvbk9uQWJvcnRUYXNrID0gY3JlYXRlQ2FsbGJhY2tU
YXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZXNldFZlcnNpb24sIGRhdGFiYXNlLCBtX21l
dGFkYXRhLnZlcnNpb24sIG1fbWV0YWRhdGEuaW50VmVyc2lvbik7CiAgICAgaWYgKCF0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVUYXNrKGludFZlcnNpb25UYXNrLnJlbGVhc2UoKSwgcmVzZXRWZXJzaW9u
T25BYm9ydFRhc2sucmVsZWFzZSgpKSkgewotICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIG9uZSBv
ZiB0aGUgZm9sbG93aW5nIGxpbmVzLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJS
OwogICAgIH0KICAgICBBU1NFUlQoIW1fcGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb24p
OwogICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
QmFja2VuZEltcGwuaAppbmRleCA4MTRmMWRlMjFkZmJhODk1Y2Q4NWVmZWRlZTQ3NjI5MTE3YjQ4
Mjk1Li5mMGY0OTM4ZDE3YmVhZDhjZDFkNDI1NGEwNzk4YjZkNmRlMzZiMTRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBs
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbC5oCkBAIC02MiwxNSArNjIsMTIgQEAgcHVibGljOgogICAgIC8vIElEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZQogICAgIHZpcnR1YWwgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0
YSgpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBkZWxl
dGVPYmplY3RTdG9yZShnZXRPYmplY3RTdG9yZUlkKG5hbWUpLCB0cmFuc2FjdGlvblB0ciwgZWMp
OyB9CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QsIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZv
aWQgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsK
LSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0
cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9y
dCBtb2RlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oY29uc3QgVmVjdG9yPGludDY0X3Q+
JiwgdW5zaWduZWQgc2hvcnQpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPElE
QkRhdGFiYXNlQ2FsbGJhY2tzPik7CiAKICAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw+IG9iamVjdFN0b3JlKGludDY0X3QgaWQpOwotICAgIGludDY0X3QgZ2V0T2JqZWN0
U3RvcmVJZChjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0
b3IqIHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9u
Q29vcmRpbmF0b3IuZ2V0KCk7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICB2b2lkIHRyYW5zYWN0aW9uRmlu
aXNoZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZS5oCmluZGV4IDBjNTNjZDdjZjE1ODkxYzA1MTdmZDkzMjQzOWNlMWI3YTE5
MTk3YWEuLmM2OWJmM2I0N2RhMmFlYzk4ZWJjOGI2OWY2YjcwMjgyNTRkMjFjYmUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZElu
dGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFi
YXNlQmFja2VuZEludGVyZmFjZS5oCkBAIC01NSwxMCArNTUsOCBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3QgPSAwOwogCiAgICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3JlYXRlT2Jq
ZWN0U3RvcmUoaW50NjRfdCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwg
Ym9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNl
cHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShjb25z
dCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlv
bkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3Qs
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAg
ICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxsYmFja3M+LCBFeGNl
cHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKERPTVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMsIHVu
c2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oY29uc3Qg
VmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQgc2hvcnQgbW9kZSkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PikgPSAwOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk1ldGFkYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRh
ZGF0YS5oCmluZGV4IDFiMDM4NGJkOTU2OTFlNGNmYTc3MWM0MTkyODU3MmM5YzJiMTYwNTguLmMz
YjMzMzQ2MzAxY2M3MWU2ZTBiMGI1ZWNhYzBhOGM2NTE1MDQ4NGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaApAQCAtNzYsMTQgKzc2LDYgQEAg
c3RydWN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEgewogICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQ2
NF90LCBJREJJbmRleE1ldGFkYXRhPiBJbmRleE1hcDsKICAgICBJbmRleE1hcCBpbmRleGVzOwog
Ci0gICAgYm9vbCBjb250YWluc0luZGV4KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGZvciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gaW5kZXhlcy5iZWdp
bigpOyBpdCAhPSBpbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnZh
bHVlLm5hbWUgPT0gbmFtZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQogfTsKIAogc3RydWN0IElEQkRhdGFiYXNl
TWV0YWRhdGEgewpAQCAtMTA4LDIyICsxMDAsNiBAQCBzdHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0
YSB7CiAgICAgewogICAgIH0KIAotICAgIGludDY0X3QgZmluZE9iamVjdFN0b3JlKGNvbnN0IFN0
cmluZyYgbmFtZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGZvciAoT2JqZWN0U3RvcmVNYXA6OmNv
bnN0X2l0ZXJhdG9yIGl0ID0gb2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG9iamVjdFN0b3Jl
cy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS5uYW1lID09IG5hbWUp
IHsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXQtPmtleSAhPSBJREJPYmplY3RTdG9yZU1ldGFk
YXRhOjpJbnZhbGlkSWQpOwotICAgICAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBJREJPYmplY3RTdG9yZU1ldGFkYXRh
OjpJbnZhbGlkSWQ7Ci0gICAgfQotCi0gICAgYm9vbCBjb250YWluc09iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBmaW5kT2JqZWN0U3Rv
cmUobmFtZSkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkOwotICAgIH0KLQog
ICAgIFN0cmluZyBuYW1lOwogICAgIGludDY0X3QgaWQ7CiAgICAgU3RyaW5nIHZlcnNpb247CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHAKaW5kZXggZDlkMmVjMjgwNDk1OTRlMjcwODhkMWZmY2ZkMjMyMTY5NzY1MTY1ZS4uZjE1Nzlk
OWIzNzk3YjM1NDZhZWEyNzM0OWNkNGIwZWNiYTczOTI2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMjA0LDE4ICsy
MDQsMTcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW8KICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCi0gICAgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lczsKKyAgICBWZWN0b3I8aW50NjRfdD4g
aW5kZXhJZHM7CiAgICAgVmVjdG9yPEluZGV4S2V5cz4gaW5kZXhLZXlzOwogICAgIGZvciAoSURC
T2JqZWN0U3RvcmVNZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRh
ZGF0YS5pbmRleGVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEuaW5kZXhlcy5lbmQoKTsgKytp
dCkgewogICAgICAgICBJbmRleEtleXMga2V5czsKICAgICAgICAgZ2VuZXJhdGVJbmRleEtleXNG
b3JWYWx1ZShpdC0+dmFsdWUsIHZhbHVlLCAma2V5cyk7Ci0gICAgICAgIGluZGV4TmFtZXMuYXBw
ZW5kKGl0LT52YWx1ZS5uYW1lKTsKKyAgICAgICAgaW5kZXhJZHMuYXBwZW5kKGl0LT5rZXkpOwog
ICAgICAgICBpbmRleEtleXMuYXBwZW5kKGtleXMpOwogICAgIH0KLSAgICBBU1NFUlQoaW5kZXhL
ZXlzLnNpemUoKSA9PSBpbmRleE5hbWVzLnNpemUoKSk7CiAKICAgICBSZWZQdHI8SURCUmVxdWVz
dD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBzb3VyY2UsIG1fdHJhbnNh
Y3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+cHV0V2l0aEluZGV4S2V5cyhzZXJpYWxpemVk
VmFsdWUucmVsZWFzZSgpLCBrZXkucmVsZWFzZSgpLCBwdXRNb2RlLCByZXF1ZXN0LCBtX3RyYW5z
YWN0aW9uLT5iYWNrZW5kKCksIGluZGV4TmFtZXMsIGluZGV4S2V5cywgZWMpOworICAgIG1fYmFj
a2VuZC0+cHV0KHNlcmlhbGl6ZWRWYWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNlKCksIHB1dE1v
ZGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgaW5kZXhJZHMsIGluZGV4S2V5
cyk7CiAgICAgQVNTRVJUKCFlYyk7CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQpA
QCAtMzE5LDggKzMxOCw4IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChjdXJzb3JBbnktPnR5cGUo
KSA9PSBJREJBbnk6OklEQkN1cnNvcldpdGhWYWx1ZVR5cGUpCiAgICAgICAgICAgICBjdXJzb3Ig
PSBjdXJzb3JBbnktPmlkYkN1cnNvcldpdGhWYWx1ZSgpOwogCi0gICAgICAgIFZlY3RvcjxTdHJp
bmcsIDE+IGluZGV4TmFtZXM7Ci0gICAgICAgIGluZGV4TmFtZXMuYXBwZW5kKG1faW5kZXhNZXRh
ZGF0YS5uYW1lKTsKKyAgICAgICAgVmVjdG9yPGludDY0X3QsIDE+IGluZGV4SWRzOworICAgICAg
ICBpbmRleElkcy5hcHBlbmQobV9pbmRleE1ldGFkYXRhLmlkKTsKICAgICAgICAgaWYgKGN1cnNv
cikgewogICAgICAgICAgICAgY3Vyc29yLT5jb250aW51ZUZ1bmN0aW9uKGVjKTsKICAgICAgICAg
ICAgIEFTU0VSVCghZWMpOwpAQCAtMzM0LDEyICszMzMsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIFZlY3RvcjxJREJPYmplY3RTdG9yZTo6SW5kZXhLZXlzLCAxPiBpbmRleEtleXNMaXN0Owog
ICAgICAgICAgICAgaW5kZXhLZXlzTGlzdC5hcHBlbmQoaW5kZXhLZXlzKTsKIAotICAgICAgICAg
ICAgbV9vYmplY3RTdG9yZUJhY2tlbmQtPnNldEluZGV4S2V5cyhwcmltYXJ5S2V5LCBpbmRleE5h
bWVzLCBpbmRleEtleXNMaXN0LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICAgICAgICAgIG1f
b2JqZWN0U3RvcmVCYWNrZW5kLT5zZXRJbmRleEtleXMocHJpbWFyeUtleSwgaW5kZXhJZHMsIGlu
ZGV4S2V5c0xpc3QsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogCiAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBhcmUgZG9uZSBpbmRleGluZywgdGVsbCB0aGUgYmFj
a2VuZCB0byBnbwogICAgICAgICAgICAgLy8gYmFjayB0byBwcm9jZXNzaW5nIHRhc2tzIG9mIHR5
cGUgTm9ybWFsVGFzay4KLSAgICAgICAgICAgIG1fb2JqZWN0U3RvcmVCYWNrZW5kLT5zZXRJbmRl
eGVzUmVhZHkoaW5kZXhOYW1lcywgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgICAgICAgICBt
X29iamVjdFN0b3JlQmFja2VuZC0+c2V0SW5kZXhlc1JlYWR5KGluZGV4SWRzLCBtX3RyYW5zYWN0
aW9uLmdldCgpKTsKICAgICAgICAgICAgIG1fb2JqZWN0U3RvcmVCYWNrZW5kLmNsZWFyKCk7CiAg
ICAgICAgICAgICBtX3RyYW5zYWN0aW9uLmNsZWFyKCk7CiAgICAgICAgIH0KQEAgLTM4Miw3ICsz
ODEsNyBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dAogICAgICAgICBlYyA9IE5BVElWRV9UWVBF
X0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmIChtX21ldGFkYXRhLmNvbnRh
aW5zSW5kZXgobmFtZSkpIHsKKyAgICBpZiAoY29udGFpbnNJbmRleChuYW1lKSkgewogICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQpAQCAtNDQ0LDEyICs0NDMsMTMgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4g
SURCT2JqZWN0U3RvcmU6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYg
ZWMKICAgICBpZiAoaXQgIT0gbV9pbmRleE1hcC5lbmQoKSkKICAgICAgICAgcmV0dXJuIGl0LT52
YWx1ZTsKIAotICAgIGlmICghbV9tZXRhZGF0YS5jb250YWluc0luZGV4KG5hbWUpKSB7CisgICAg
aW50NjRfdCBpbmRleElkID0gZmluZEluZGV4SWQobmFtZSk7CisgICAgaWYgKGluZGV4SWQgPT0g
SURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAK
LSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleEJhY2tlbmQgPSBtX2Jh
Y2tlbmQtPmluZGV4KG5hbWUsIGVjKTsKKyAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlPiBpbmRleEJhY2tlbmQgPSBtX2JhY2tlbmQtPmluZGV4KGluZGV4SWQpOwogICAgIEFTU0VS
VCghZWMgJiYgaW5kZXhCYWNrZW5kKTsKIAogICAgIGNvbnN0IElEQkluZGV4TWV0YWRhdGEqIGlu
ZGV4TWV0YWRhdGEoMCk7CkBAIC00NzYsMTQgKzQ3NiwxNCBAQCB2b2lkIElEQk9iamVjdFN0b3Jl
OjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKCFtX21ldGFkYXRhLmNvbnRhaW5zSW5k
ZXgobmFtZSkpIHsKKyAgICBpbnQ2NF90IGluZGV4SWQgPSBmaW5kSW5kZXhJZChuYW1lKTsKKyAg
ICBpZiAoaW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBtX2JhY2tlbmQtPmRlbGV0ZUluZGV4KG5hbWUsIG1fdHJhbnNh
Y3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIG1fYmFja2VuZC0+ZGVsZXRlSW5kZXgoaW5kZXhJ
ZCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKCFlYykgewotICAgICAg
ICBBU1NFUlQobV9tZXRhZGF0YS5jb250YWluc0luZGV4KG5hbWUpKTsKICAgICAgICAgSURCSW5k
ZXhNYXA6Oml0ZXJhdG9yIGl0ID0gbV9pbmRleE1hcC5maW5kKG5hbWUpOwogICAgICAgICBpZiAo
aXQgIT0gbV9pbmRleE1hcC5lbmQoKSkgewogICAgICAgICAgICAgbV9tZXRhZGF0YS5pbmRleGVz
LnJlbW92ZShpdC0+dmFsdWUtPmlkKCkpOwpAQCAtNTU4LDYgKzU1OCwxNiBAQCB2b2lkIElEQk9i
amVjdFN0b3JlOjp0cmFuc2FjdGlvbkZpbmlzaGVkKCkKICAgICBtX2luZGV4TWFwLmNsZWFyKCk7
CiB9CiAKK2ludDY0X3QgSURCT2JqZWN0U3RvcmU6OmZpbmRJbmRleElkKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3QKK3sKKyAgICBmb3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFw
Ojpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBt
X21ldGFkYXRhLmluZGV4ZXMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgaWYgKGl0LT52YWx1ZS5u
YW1lID09IG5hbWUpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdC0+a2V5ICE9IElEQkluZGV4TWV0
YWRhdGE6OkludmFsaWRJZCk7CisgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkOworfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCmluZGV4IDlmMDI3ZWEwYzY0NjI4ZjZkZGUwNzAxMjJk
YTFhOGZhZTZmZWIyNmEuLjljYjJhZDYzM2QzYmIzODdjZGMwNTViY2Y0ZDgwYTgxZGM3NjA0YTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0
b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmUuaApAQCAtNjYsOSArNjYsOSBAQCBwdWJsaWM6CiAKICAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IGFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBTY3JpcHRWYWx1ZSYgdmFs
dWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBhZGQoY29udGV4dCwgdmFsdWUsIDAsIGVj
KTsgIH0KICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IHB1dChTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiBjb250ZXh0LCBTY3JpcHRWYWx1ZSYgdmFsdWUsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBwdXQoY29udGV4dCwgdmFsdWUsIDAsIGVjKTsgIH0KLSAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURC
S2V5UmFuZ2UqPigwKSwgZWMpOyB9IAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1
cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29u
dGV4dCwga2V5UmFuZ2UsIElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0gCi0gICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJl
dHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCks
IGVjKTsgfSAKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5D
dXJzb3IoY29udGV4dCwgc3RhdGljX2Nhc3Q8SURCS2V5UmFuZ2UqPigwKSwgZWMpOyB9CisgICAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2Rl
JiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpk
aXJlY3Rpb25OZXh0KCksIGVjKTsgfQorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1
cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4g
a2V5LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXks
IElEQkN1cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KICAgICBQYXNzUmVmUHRyPElEQlJl
cXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRp
b25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCByYW5nZSwgZGlyZWN0aW9u
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6Ok5vcm1hbFRhc2ssIGVjKTsgfQogICAg
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBFeGNlcHRpb25Db2RlJik7CiAg
ICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHQqLCBQYXNzUmVmUHRyPElEQktleT4sIGNvbnN0IFN0cmluZyYgZGlyZWN0aW9uLCBFeGNlcHRp
b25Db2RlJik7CkBAIC0xMDUsNiArMTA1LDEyIEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgSURC
T2JqZWN0U3RvcmUoY29uc3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYsIFBhc3NSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiwgSURCVHJhbnNhY3Rpb24qKTsKIAorICAgIGlu
dDY0X3QgZmluZEluZGV4SWQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBib29sIGNv
bnRhaW5zSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGZpbmRJbmRleElkKG5hbWUpICE9IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZDsKKyAg
ICB9CisKICAgICBJREJPYmplY3RTdG9yZU1ldGFkYXRhIG1fbWV0YWRhdGE7CiAgICAgUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwogICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbj4gbV90cmFuc2FjdGlvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAK
aW5kZXggNDY0MGMxM2RkMmUzYzc3YjJkZTgwY2MwZGI3YWRiZjU5MDNlMDNmNS4uYjU0ZjAwOGM2
OWU5N2VhZWI5MmMyYzU4MjM3ZmM2NTM0MmZhODk2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bC5jcHAKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6
OmdldEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPAogCiB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0
TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgY29uc3QgVmVjdG9yPGludDY0X3Q+
JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKIHsKLSAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMiKTsK
KyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCIpOwogCiAgICAg
UmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKICAg
ICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwpAQCAtMTI2
LDEwICsxMjYsNiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dChQYXNzUmVm
UHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsCiAgICAgICAgIGNhbGxiYWNrcy0+
b25FcnJvcihJREJEYXRhYmFzZUVycm9yOjpjcmVhdGUoSURCRGF0YWJhc2VFeGNlcHRpb246OklE
Ql9BQk9SVF9FUlIpKTsKIH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRX
aXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwg
UGFzc1JlZlB0cjxJREJLZXk+IHBycEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uUHRyLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3Qg
VmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgRXhjZXB0aW9uQ29kZSYpCi17Ci0gICAgcmV0
dXJuIHB1dChwcnBWYWx1ZSwgcHJwS2V5LCBwdXRNb2RlLCBwcnBDYWxsYmFja3MsIHRyYW5zYWN0
aW9uUHRyLCBnZXRJbmRleElkcyhpbmRleE5hbWVzKSwgaW5kZXhLZXlzKTsKLX0KIG5hbWVzcGFj
ZSB7CiBjbGFzcyBJbmRleFdyaXRlciB7CiBwdWJsaWM6CkBAIC0yNTksMTIgKzI1NSw2IEBAIHZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURC
S2V5PiBwcnBQcmltYXJ5S2V5LCBjCiAgICAgfQogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+
JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25Q
dHIpCi17Ci0gICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzID0gZ2V0SW5kZXhJZHMoaW5kZXhO
YW1lcyk7Ci0gICAgcmV0dXJuIHNldEluZGV4S2V5cyhwcnBQcmltYXJ5S2V5LCBpbmRleElkcywg
aW5kZXhLZXlzLCB0cmFuc2FjdGlvblB0cik7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMs
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25JbnRlcmZhY2UpCiB7
CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVh
ZHkiKTsKQEAgLTI3OSwyMiArMjY5LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uSW50ZXJmYWNlKQotewot
ICAgIFZlY3RvcjxpbnQ2NF90PiBpbmRleElkcyhpbmRleE5hbWVzLnNpemUoKSk7Ci0gICAgLy8g
RklYTUU6IFdlIG1hbnVhbGx5IGNvbnZlcnQgZWFjaCBuYW1lIHRvIGFuIGluZGV4SWQsIGV2ZW4g
aWYgdGhlIG5hbWUgaGFzIGFscmVhZHkgYmVlbiBkZWxldGVkLCBiZWNhdXNlIHdlIGhhdmUgdG8g
cmVtb3ZlIGV4YWN0bHkgdGhhdCBtYW55IHByZWVtcHRpdmUgZXZlbnRzLCBidXQgdGhpcyB3aWxs
IGdvIGF3YXkgd2hlbiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAw
NDI2IGxhbmRzLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgaW5kZXhOYW1lcy5zaXplKCk7
ICsraSkgewotICAgICAgICBpbmRleElkc1tpXSA9IEludmFsaWRJZDsKLSAgICAgICAgZm9yIChJ
bmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9p
bmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnZhbHVlLT5uYW1lKCkg
PT0gaW5kZXhOYW1lc1tpXSkgewotICAgICAgICAgICAgICAgIGluZGV4SWRzW2ldID0gaXQtPmtl
eTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLSAgICByZXR1cm4gc2V0SW5kZXhlc1JlYWR5KGluZGV4SWRzLCB0cmFuc2FjdGlvbkludGVy
ZmFjZSk7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhlc1Jl
YWR5SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NPd25QdHI8VmVjdG9yPGludDY0X3Q+
ID4gcG9wSW5kZXhJZHMsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJh
bnNhY3Rpb24pCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpz
ZXRJbmRleGVzUmVhZHlJbnRlcm5hbCIpOwpAQCAtNDcwLDI5ICs0NDQsNiBAQCBQYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6aW5k
ZXgoaW50NjRfdCBpbgogICAgIHJldHVybiBpbmRleC5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpp
bmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKQotewotICAgIHJldHVybiBp
bmRleChnZXRJbmRleElkKG5hbWUpKTsKLX0KLQotaW50NjRfdCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbmRleElkKGNvbnN0IFN0cmluZyYgbmFtZSkKLXsKLSAgICBmb3IgKEluZGV4
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1faW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX2luZGV4
ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgaWYgKGl0LT52YWx1ZS0+bmFtZSgpID09IG5hbWUp
Ci0gICAgICAgICAgICByZXR1cm4gaXQtPmtleTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLVZlY3RvcjxpbnQ2NF90PiBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpnZXRJbmRleElkcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgbmFtZXMpCi17
Ci0gICAgVmVjdG9yPGludDY0X3Q+IHJlc3VsdDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG5hbWVzLnNpemUoKTsgKytpKQotICAgICAgICByZXN1bHQuYXBwZW5kKGdldEluZGV4SWQobmFt
ZXNbaV0pKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCiB2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmRlbGV0ZUluZGV4KGludDY0X3QgaW5kZXhJZCwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAg
QVNTRVJUKG1faW5kZXhlcy5jb250YWlucyhpbmRleElkKSk7CkBAIC01MTEsMTEgKzQ2Miw2IEBA
IHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgoaW50NjRfdCBpbmRl
eElkLCBJREJUcmFuc2FjdGlvbkJhY2tlCiAgICAgbV9pbmRleGVzLnJlbW92ZShpbmRleElkKTsK
IH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25zdCBT
dHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25Q
dHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBkZWxldGVJbmRleChnZXRJbmRl
eElkKG5hbWUpLCB0cmFuc2FjdGlvblB0ciwgZWMpOwotfQotCiB2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmRlbGV0ZUluZGV4SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NS
ZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24pCiB7CiAgICAgb2JqZWN0U3RvcmUtPmJhY2tpbmdT
dG9yZSgpLT5kZWxldGVJbmRleCh0cmFuc2FjdGlvbi0+YmFja2luZ1N0b3JlVHJhbnNhY3Rpb24o
KSwgb2JqZWN0U3RvcmUtPmRhdGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCksIGluZGV4LT5p
ZCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAppbmRleCBjMmVmZDNiMGUzYTIxYjYxMjRlMDQ5
Y2IwMTIwZDdiZjI0ZjY4Yzk3Li5jZmRlM2JlN2IzNDUxYmIyYjYzMjZlZGFiNjA3ZWQyODBiNDM0
MjA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCkBAIC02NCwyMCArNjQsMTUgQEAgcHVibGlj
OgogCiAgICAgLy8gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlCiAgICAgdmlydHVhbCB2
b2lkIGdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPFN0cmlu
Zz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0
cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3Rv
cjxJbmRleEtleXM+Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1Jl
ZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBj
bGVhcihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGludDY0X3QsIGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQYXNz
UmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29u
c3QgVmVjdG9yPEluZGV4S2V5cz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+Jiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldElu
ZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqKTsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlPiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChpbnQ2NF90KTsK
LSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZUluZGV4KGludDY0X3QsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSos
IEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBvcGVuQ3Vyc29yKFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+LCBJREJDdXJzb3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0cjxJREJDYWxs
YmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CkBAIC05Niw5ICs5MSw2
IEBAIHB1YmxpYzoKICAgICBQYXNzUmVmUHRyPElEQkJhY2tpbmdTdG9yZT4gYmFja2luZ1N0b3Jl
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+YmFja2luZ1N0b3JlKCk7IH0KICAgICBpbnQ2
NF90IGRhdGFiYXNlSWQoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLT5pZCgpOyB9CiAKLSAg
ICBpbnQ2NF90IGdldEluZGV4SWQoY29uc3QgU3RyaW5nJik7Ci0gICAgVmVjdG9yPGludDY0X3Q+
IGdldEluZGV4SWRzKGNvbnN0IFZlY3RvcjxTdHJpbmc+Jik7Ci0KIHByaXZhdGU6CiAgICAgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbChjb25zdCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsKiwgY29u
c3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZS5oCmluZGV4IDlhYmU4ODNjYmE4ZWVjZDE0MmMwY2M5YzY4MGU4NjhkNGFhZWIyNzguLjI3
NTA1Y2VmMjRkMDhkMTllYzdiNDI2YmI4YzkxNmM1ZjFiNDhlZWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZS5oCkBAIC02MiwyMCArNjIsMTUgQEAgcHVibGljOgogCiAgICAgdHlw
ZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBJbmRleEtleXM7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgcHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBh
c3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0
IFZlY3RvcjxJbmRleEtleXM+JiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZv
aWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJL
ZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRl
eEtleXM+JikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRy
PElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lk
IGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGludDY0X3QsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnks
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFy
eUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8
aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSopID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOwog
ICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+Jiwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwg
RXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlPiBpbmRleChpbnQ2NF90KSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0
ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChp
bnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikg
PSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbi5jcHAKaW5kZXggNDcwMDVjM2I3NjFlMjBjMjVmMDg5MTIxYzQ2MzdmMzBiYTg3M2Zj
MC4uNDY1MDU4MWIwNTJkNjA1MGRkYjBiMGI1ZWM5ZDVkYTRhOGI2NmY5ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcApAQCAt
MTYwLDEzICsxNjAsMTMgQEAgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rp
b246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXAKICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KLSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmpl
Y3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKKworICAg
IGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1fZGF0YWJhc2UtPmZpbmRPYmplY3RTdG9yZUlkKG5h
bWUpOworICAgIEFTU0VSVChvYmplY3RTdG9yZUlkICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6
OkludmFsaWRJZCk7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
b2JqZWN0U3RvcmVCYWNrZW5kID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShvYmplY3RTdG9yZUlk
LCBlYyk7CiAgICAgQVNTRVJUKCFlYyAmJiBvYmplY3RTdG9yZUJhY2tlbmQpOwogCiAgICAgY29u
c3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRhdGEgPSBtX2RhdGFiYXNlLT5tZXRhZGF0YSgp
OwotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1ldGFkYXRhLmZpbmRPYmplY3RTdG9yZShu
YW1lKTsKLQotICAgIEFTU0VSVChvYmplY3RTdG9yZUlkICE9IElEQk9iamVjdFN0b3JlTWV0YWRh
dGE6OkludmFsaWRJZCk7CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3Jl
ID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRhZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVj
dFN0b3JlSWQpLCBvYmplY3RTdG9yZUJhY2tlbmQsIHRoaXMpOwogICAgIG9iamVjdFN0b3JlQ3Jl
YXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCmluZGV4
IGUxNjUyZDY5NWRmODUzNDFiMzYwODZkODY3OWIxMzc0NDAyZmY4ZWIuLmUzNzI2MmE0ZjI0OWI0
MGMxM2FjMmIyMGMzNDQ3NGE1MjgzMzJiYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3Bw
CkBAIC03NiwxMSArNzYsNiBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcgogICAgIHJldHVybiBv
YmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9CiAKLVBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShjb25z
dCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIHJldHVybiBvYmplY3RT
dG9yZShtX2RhdGFiYXNlLT5nZXRPYmplY3RTdG9yZUlkKG5hbWUpLCBlYyk7Ci19Ci0KIGJvb2wg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2NoZWR1bGVUYXNrKFRhc2tUeXBlIHR5cGUsIFBh
c3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxT
Y3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBhYm9ydFRhc2spCiB7CiAgICAgaWYgKG1fc3Rh
dGUgPT0gRmluaXNoZWQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgKaW5kZXggNGU0ZGRlY2MxMTIz
Njk2Y2E0NjU3NTNkYjVmMTI5MmJjM2NlMzY4MS4uZTYyNGVkNDBjNThmOWY5NjBhY2I2NDkyNGEx
ZTQzZDdkMWNhM2QwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwuaApAQCAtNTIsNyArNTIsNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbCgpOwogCiAg
ICAgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlCi0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoaW50NjRfdCwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb21wbGV0ZVRhc2tFdmVudHMoKTsKICAgICB2
aXJ0dWFsIHZvaWQgYWJvcnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKaW5k
ZXggZDExZTE4MTFjZTQzNWJmNjdmMDgzM2QzZTU1ODA2Yjg4N2NlNGUzOC4uMmY0Y2YzMjdhMGI4
MTY5ZmFhNTM3ZjRmNWUzNWQ1OTNiNTExYmNhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlLmgKQEAgLTUzLDcgKzUzLDYgQEAgcHVibGljOgogICAgICAgICBQcmVlbXB0aXZlVGFz
awogICAgIH07CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
KSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZT4gb2JqZWN0U3RvcmUoaW50NjRfdCwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0
dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBj
b21taXQoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJP
YmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9J
REJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAKaW5kZXggNmEwZDAyNzcyYjg0NGM3ZWY2YWMy
MGZiY2VjM2NjMzFkMWYzNjE0Mi4uOGU4OWRlYjAzM2YzZGVjOTg4YWE2N2FjM2NkZTRhNWQ5Njk1
ZmJmZCAxMDA3NTUKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9i
amVjdFN0b3JlQmFja2VuZFByb3h5LmNwcApAQCAtNjcsMTYgKzY3LDYgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRQcm94eTo6Z2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
LCBQYXNzUmVmUHQKICAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5nZXQoa2V5UmFuZ2UsIG5ldyBX
ZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJ
REJUcmFuc2FjdGlvbigpLCBlYyk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJv
eHk6OnB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0
b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBU
aGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBh
IHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAotICAgIC8vIGFsbCBpbXBsZW1lbnRh
dGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCi0gICAgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJREJUcmFu
c2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsKLSAgICBXZWJWZWN0b3I8V2ViU3Ry
aW5nPiB3ZWJJbmRleE5hbWVzKGluZGV4TmFtZXMpOwotICAgIFdlYlZlY3RvcjxJbmRleEtleXM+
IHdlYkluZGV4S2V5cyhpbmRleEtleXMpOwotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnB1dFdp
dGhJbmRleEtleXModmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8V2ViSURCT2JqZWN0U3RvcmU6OlB1
dE1vZGU+KHB1dE1vZGUpLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJh
bnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgd2ViSW5kZXhOYW1lcywgd2Vi
SW5kZXhLZXlzLCBlYyk7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1
dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgY29uc3Qg
VmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4
S2V5cykKIHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRv
IGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApAQCAt
ODUsMTYgKzc1LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6cHV0KFBhc3NS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGEKICAgICBtX3dlYklEQk9iamVj
dFN0b3JlLT5wdXQodmFsdWUsIGtleSwgc3RhdGljX2Nhc3Q8V2ViSURCT2JqZWN0U3RvcmU6OlB1
dE1vZGU+KHB1dE1vZGUpLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJh
bnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgaW5kZXhJZHMsIGluZGV4S2V5
cyk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4S2V5cyhQ
YXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGlu
ZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCi17Ci0gICAgLy8gVGhlIHRyYW5zYWN0
aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmpl
Y3QgYXMsIGluIHRoZSByZW5kZXJlciwKLSAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElE
QiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgotICAgIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kUHJveHkqPih0cmFuc2FjdGlvbik7Ci0gICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gd2ViSW5k
ZXhOYW1lcyhpbmRleE5hbWVzKTsKLSAgICBXZWJWZWN0b3I8SW5kZXhLZXlzPiB3ZWJJbmRleEtl
eXMoaW5kZXhLZXlzKTsKLSAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5zZXRJbmRleEtleXMocHJw
UHJpbWFyeUtleSwgd2ViSW5kZXhOYW1lcywgd2ViSW5kZXhLZXlzLCAqdHJhbnNhY3Rpb25Qcm94
eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kUHJveHk6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwg
Y29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4m
IGluZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikK
IHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEg
cG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApAQCAtMTMwLDI1
ICsxMTAsNiBAQCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0
U3RvcmVCYWNrZW5kUHJveHk6OmNyZWF0ZUluZGV4KGludAogICAgIHJldHVybiBJREJJbmRleEJh
Y2tlbmRQcm94eTo6Y3JlYXRlKGluZGV4LnJlbGVhc2UoKSk7CiB9CiAKLVBhc3NSZWZQdHI8SURC
SW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6Y3JlYXRl
SW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29s
IHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBUaGUgdHJhbnNhY3Rp
b24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVj
dCBhcywgaW4gdGhlIHJlbmRlcmVyLAotICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURC
IGludGVyZmFjZXMgYXJlIHByb3h5IG9iamVjdHMuCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5k
UHJveHkqIHRyYW5zYWN0aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tl
bmRQcm94eSo+KHRyYW5zYWN0aW9uKTsKLSAgICBPd25QdHI8V2ViSURCSW5kZXg+IGluZGV4ID0g
YWRvcHRQdHIobV93ZWJJREJPYmplY3RTdG9yZS0+Y3JlYXRlSW5kZXgobmFtZSwga2V5UGF0aCwg
dW5pcXVlLCBtdWx0aUVudHJ5LCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rp
b24oKSwgZWMpKTsKLSAgICBpZiAoIWluZGV4KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gSURCSW5kZXhCYWNrZW5kUHJveHk6OmNyZWF0ZShpbmRleC5yZWxlYXNlKCkpOwotfQotCi12
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVj
dG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSog
dHJhbnNhY3Rpb24pCi17Ci0gICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFu
dGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJl
ciwKLSAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94
eSBvYmplY3RzLgotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblBy
b3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlv
bik7Ci0gICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5KFdlYlZlY3RvcjxX
ZWJTdHJpbmc+KGluZGV4TmFtZXMpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNh
Y3Rpb24oKSk7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4
ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQogewogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBw
b2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFz
LCBpbiB0aGUgcmVuZGVyZXIsCkBAIC0xNTcsMTQgKzExOCw2IEBAIHZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kUHJveHk6OnNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mIGlu
ZGV4SWRzCiAgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5KFdlYlZlY3Rv
cjxsb25nIGxvbmc+KGluZGV4SWRzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5z
YWN0aW9uKCkpOwogfQogCi1QYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURC
T2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgT3duUHRyPFdlYklEQkluZGV4PiBpbmRleCA9IGFkb3B0UHRy
KG1fd2ViSURCT2JqZWN0U3RvcmUtPmluZGV4KG5hbWUsIGVjKSk7Ci0gICAgaWYgKCFpbmRleCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIElEQkluZGV4QmFja2VuZFByb3h5OjpjcmVh
dGUoaW5kZXgucmVsZWFzZSgpKTsKLX0KLQogUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRl
cmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjppbmRleChpbnQ2NF90IGluZGV4SWQp
CiB7CiAgICAgT3duUHRyPFdlYklEQkluZGV4PiBpbmRleCA9IGFkb3B0UHRyKG1fd2ViSURCT2Jq
ZWN0U3RvcmUtPmluZGV4KGluZGV4SWQpKTsKQEAgLTE3MywxNCArMTI2LDYgQEAgUGFzc1JlZlB0
cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Ojpp
bmRleChpbnQ2NF90IGkKICAgICByZXR1cm4gSURCSW5kZXhCYWNrZW5kUHJveHk6OmNyZWF0ZShp
bmRleC5yZWxlYXNlKCkpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Ojpk
ZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIC8vIFRoZSB0cmFu
c2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkg
b2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCi0gICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBv
ZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KLSAgICBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9u
QmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOwotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPmRl
bGV0ZUluZGV4KG5hbWUsICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigp
LCBlYyk7Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmRlbGV0ZUluZGV4
KGNvbnN0IGludDY0X3QgaW5kZXhJZCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgLy8gVGhlIHRyYW5zYWN0aW9u
IHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3Qg
YXMsIGluIHRoZSByZW5kZXJlciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5oCmluZGV4IDc5MTEzYWU5NTY1YTMxNGRj
Y2YyYmFjNzgwZWJhNzUzOTRmNmNkYWQuLmRhOGY2YmJkZDgyZDFmMmIwODk0M2U3ODMyZWU1OGFl
YmUyMjU5ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVj
dFN0b3JlQmFja2VuZFByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
T2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaApAQCAtNDQsMjEgKzQ0LDE1IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eSgpOwogCiAgICAgdmlydHVhbCB2
b2lkIGdldChQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJ
bmRleEtleXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNz
UmVmUHRyPFdlYkNvcmU6OklEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURC
Q2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29u
c3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+JiwgY29uc3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlz
PiYsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NS
ZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFdURjo6VmVjdG9y
PGludDY0X3Q+JiwgY29uc3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlzPiYpOwogICAgIHZpcnR1YWwg
dm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFz
c1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2
b2lkIGNsZWFyKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwog
CiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0
ZUluZGV4KGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6SURC
S2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQ
YXNzUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgo
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJDb3JlOjpJREJLZXlQYXRoJiwgYm9vbCB1bmlx
dWUsIGJvb2wgbXVsdGlFbnRyeSwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRl
eEtleXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFdU
Rjo6VmVjdG9yPFdURjo6U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNl
dEluZGV4S2V5cyhQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4gcHJwUHJpbWFyeUtleSwgY29u
c3QgV1RGOjpWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwotICAgIHZpcnR1YWwgdm9pZCBz
ZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPFN0cmluZz4mLCBXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5
KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSopOwogCi0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbnRl
cmZhY2U+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYp
OwogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRl
eChpbnQ2NF90KTsKLSAgICB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgV2Vi
Q29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9u
Q29kZSYpOwogICAgIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCwgV2ViQ29yZTo6SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogCiAgICAg
dmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4s
IFdlYkNvcmU6OklEQkN1cnNvcjo6RGlyZWN0aW9uLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNh
bGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5
cGUsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklEQkRhdGFiYXNlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJE
YXRhYmFzZUltcGwuY3BwCmluZGV4IDkwYzI2MjM4OTQ5ZTQ0YTA3NDI5OTU0Y2Y3ZDg5ZTE1NjUw
ZTFhYTAuLjU5YWJkNTMyOTI4MDFmMzA0OTNkYmQwYzQ3ZjZlMDBkMzYwYmRkNDEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcApAQCAt
NzAsMTEgKzcwLDYgQEAgV2ViSURCT2JqZWN0U3RvcmUqIFdlYklEQkRhdGFiYXNlSW1wbDo6Y3Jl
YXRlT2JqZWN0U3RvcmUobG9uZyBsb25nIGlkLCBjb25zdCBXZWIKICAgICByZXR1cm4gbmV3IFdl
YklEQk9iamVjdFN0b3JlSW1wbChvYmplY3RTdG9yZSk7CiB9CiAKLXZvaWQgV2ViSURCRGF0YWJh
c2VJbXBsOjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdl
YklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgbV9kYXRhYmFzZUJhY2tlbmQtPmRlbGV0ZU9iamVjdFN0b3JlKG5hbWUsIHRyYW5zYWN0aW9u
LmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7Ci19Ci0KIHZvaWQgV2Vi
SURCRGF0YWJhc2VJbXBsOjpkZWxldGVPYmplY3RTdG9yZShsb25nIGxvbmcgb2JqZWN0U3RvcmVJ
ZCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBtX2RhdGFiYXNlQmFja2VuZC0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0
U3RvcmVJZCwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCks
IGVjKTsKQEAgLTg1LDE3ICs4MCw2IEBAIHZvaWQgV2ViSURCRGF0YWJhc2VJbXBsOjpzZXRWZXJz
aW9uKGNvbnN0IFdlYlN0cmluZyYgdmVyc2lvbiwgV2ViSURCQ2FsbGJhY2tzKiBjCiAgICAgbV9k
YXRhYmFzZUJhY2tlbmQtPnNldFZlcnNpb24odmVyc2lvbiwgSURCQ2FsbGJhY2tzUHJveHk6OmNy
ZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwgbV9kYXRhYmFzZUNhbGxiYWNrcywgZWMpOwogfQog
Ci1XZWJJREJUcmFuc2FjdGlvbiogV2ViSURCRGF0YWJhc2VJbXBsOjp0cmFuc2FjdGlvbihjb25z
dCBXZWJET01TdHJpbmdMaXN0JiBuYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgV2ViRXhjZXB0
aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG5hbWVMaXN0ID0gUGFz
c1JlZlB0cjxET01TdHJpbmdMaXN0PihuYW1lcyk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSBtX2RhdGFiYXNlQmFja2VuZC0+dHJhbnNh
Y3Rpb24obmFtZUxpc3QuZ2V0KCksIG1vZGUsIGVjKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKSB7
Ci0gICAgICAgIEFTU0VSVChlYyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1
cm4gbmV3IFdlYklEQlRyYW5zYWN0aW9uSW1wbCh0cmFuc2FjdGlvbik7Ci19Ci0KIFdlYklEQlRy
YW5zYWN0aW9uKiBXZWJJREJEYXRhYmFzZUltcGw6OnRyYW5zYWN0aW9uKGNvbnN0IFdlYlZlY3Rv
cjxsb25nIGxvbmc+JiBvYmplY3RTdG9yZUlkcywgdW5zaWduZWQgc2hvcnQgbW9kZSkKIHsKICAg
ICBWZWN0b3I8aW50NjRfdD4gb2JqZWN0U3RvcmVJZExpc3Qob2JqZWN0U3RvcmVJZHMuc2l6ZSgp
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNl
SW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmgK
aW5kZXggNjVhMTk2NjhhOWI3Mjk3NzQ3NzliNmJlNzQxNmI3Yjc0OGYyODE2NC4uZTcyODc0MmM2
NDc0ODQxMjZjZjNlYTdkZDk1NmVkZmYzMmM3MjgwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmgKQEAgLTUzLDEwICs1Myw4IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIFdlYklEQk1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3Q7CiAKICAgICB2
aXJ0dWFsIFdlYklEQk9iamVjdFN0b3JlKiBjcmVhdGVPYmplY3RTdG9yZShsb25nIGxvbmcsIGNv
bnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3Jl
bWVudCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7Ci0gICAg
dmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29u
c3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2
b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJ
REJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
VmVyc2lvbihjb25zdCBXZWJTdHJpbmcmIHZlcnNpb24sIFdlYklEQkNhbGxiYWNrcyosIFdlYkV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIFdlYklEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlv
bihjb25zdCBXZWJET01TdHJpbmdMaXN0JiBuYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgV2Vi
RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgV2ViSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0
aW9uKGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiBuYW1lcywgdW5zaWduZWQgc2hvcnQgbW9k
ZSk7CiAgICAgdmlydHVhbCB2b2lkIGZvcmNlQ2xvc2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xv
c2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVj
dFN0b3JlSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RT
dG9yZUltcGwuY3BwCmluZGV4IDg1YmFjMTNiMzQ4MDBkNDIwZjFjZDE4NzYwYmQ5NTYzOGNkNjRl
NWMuLjEwMjgwNGJjODFkZjY0OGFlYmZiMDkyZTBjMTRhODkzMjJiOWQ1OTcgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcApA
QCAtNTgsMjMgKzU4LDYgQEAgdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OmdldChjb25zdCBX
ZWJJREJLZXlSYW5nZSYga2V5UmFuZ2UsIFdlYklEQkNhbGxiYWNrcyoKICAgICBtX29iamVjdFN0
b3JlLT5nZXQoa2V5UmFuZ2UsIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2Fs
bGJhY2tzKSksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgp
LCBlYyk7CiB9CiAKLXZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpwdXRXaXRoSW5kZXhLZXlz
KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUsIGNvbnN0IFdlYklEQktleSYg
a2V5LCBQdXRNb2RlIHB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBX
ZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+
JiB3ZWJJbmRleE5hbWVzLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYgd2ViSW5kZXhL
ZXlzLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBBU1NFUlQod2ViSW5kZXhOYW1lcy5z
aXplKCkgPT0gd2ViSW5kZXhLZXlzLnNpemUoKSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gaW5kZXhO
YW1lcyh3ZWJJbmRleE5hbWVzLnNpemUoKSk7Ci0gICAgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiBpbmRleEtleXMod2ViSW5kZXhLZXlzLnNpemUoKSk7
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYkluZGV4TmFtZXMuc2l6ZSgpOyArK2kp
IHsKLSAgICAgICAgaW5kZXhOYW1lc1tpXSA9IHdlYkluZGV4TmFtZXNbaV07Ci0gICAgICAgIFZl
Y3RvcjxSZWZQdHI8SURCS2V5PiA+IGluZGV4S2V5TGlzdCh3ZWJJbmRleEtleXNbaV0uc2l6ZSgp
KTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCB3ZWJJbmRleEtleXNbaV0uc2l6ZSgp
OyArK2opCi0gICAgICAgICAgICBpbmRleEtleUxpc3Rbal0gPSB3ZWJJbmRleEtleXNbaV1bal07
Ci0gICAgICAgIGluZGV4S2V5c1tpXSA9IGluZGV4S2V5TGlzdDsKLSAgICB9Ci0KLSAgICBtX29i
amVjdFN0b3JlLT5wdXRXaXRoSW5kZXhLZXlzKHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZT4ocHV0TW9kZSksIElEQkNhbGxiYWNr
c1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIHRyYW5zYWN0aW9uLmdldElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBpbmRleE5hbWVzLCBpbmRleEtleXMsIGVjKTsK
LX0KLQogdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnB1dChjb25zdCBXZWJTZXJpYWxpemVk
U2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJREJLZXkmIGtleSwgUHV0TW9kZSBwdXRNb2Rl
LCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRy
YW5zYWN0aW9uLCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYgd2ViSW5kZXhJZHMsIGNvbnN0
IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRleEtleXMpCiB7CiAgICAgQVNTRVJUKHdl
YkluZGV4SWRzLnNpemUoKSA9PSB3ZWJJbmRleEtleXMuc2l6ZSgpKTsKQEAgLTkyLDIyICs3NSw2
IEBAIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNj
cmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgV2ViCiAgICAgbV9vYmplY3RTdG9yZS0+cHV0KHZhbHVl
LCBrZXksIHN0YXRpY19jYXN0PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9k
ZT4ocHV0TW9kZSksIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tz
KSksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBpbmRl
eElkcywgaW5kZXhLZXlzKTsKIH0KIAotdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldElu
ZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmIHByaW1hcnlLZXksIGNvbnN0IFdlYlZlY3RvcjxXZWJT
dHJpbmc+JiB3ZWJJbmRleE5hbWVzLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYgd2Vi
SW5kZXhLZXlzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAg
QVNTRVJUKHdlYkluZGV4TmFtZXMuc2l6ZSgpID09IHdlYkluZGV4S2V5cy5zaXplKCkpOwotICAg
IFZlY3RvcjxTdHJpbmc+IGluZGV4TmFtZXMod2ViSW5kZXhOYW1lcy5zaXplKCkpOwotICAgIFZl
Y3RvcjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5cz4gaW5kZXhLZXlz
KHdlYkluZGV4S2V5cy5zaXplKCkpOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJJ
bmRleE5hbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGluZGV4TmFtZXNbaV0gPSB3ZWJJbmRl
eE5hbWVzW2ldOwotICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBpbmRleEtleUxpc3Qo
d2ViSW5kZXhLZXlzW2ldLnNpemUoKSk7Ci0gICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwg
d2ViSW5kZXhLZXlzW2ldLnNpemUoKTsgKytqKQotICAgICAgICAgICAgaW5kZXhLZXlMaXN0W2pd
ID0gd2ViSW5kZXhLZXlzW2ldW2pdOwotICAgICAgICBpbmRleEtleXNbaV0gPSBpbmRleEtleUxp
c3Q7Ci0gICAgfQotICAgIG1fb2JqZWN0U3RvcmUtPnNldEluZGV4S2V5cyhwcmltYXJ5S2V5LCBp
bmRleE5hbWVzLCBpbmRleEtleXMsIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSgpKTsKLX0KLQogdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4
S2V5cyhjb25zdCBXZWJJREJLZXkmIHByaW1hcnlLZXksIGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxv
bmc+JiB3ZWJJbmRleElkcywgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mIHdlYkluZGV4
S2V5cywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQogewogICAgIEFTU0VS
VCh3ZWJJbmRleElkcy5zaXplKCkgPT0gd2ViSW5kZXhLZXlzLnNpemUoKSk7CkBAIC0xMjQsMTQg
KzkxLDYgQEAgdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4S2V5cyhjb25zdCBX
ZWJJREJLZXkmIHByaW1hcnlLZXksIGNvbnN0IFdlYlYKICAgICBtX29iamVjdFN0b3JlLT5zZXRJ
bmRleEtleXMocHJpbWFyeUtleSwgaW5kZXhJZHMsIGluZGV4S2V5cywgdHJhbnNhY3Rpb24uZ2V0
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkpOwogfQogCi12b2lkIFdlYklEQk9iamVj
dFN0b3JlSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB3
ZWJJbmRleE5hbWVzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0g
ICAgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lcyh3ZWJJbmRleE5hbWVzLnNpemUoKSk7Ci0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJJbmRleE5hbWVzLnNpemUoKTsgKytpKQotICAgICAg
ICBpbmRleE5hbWVzW2ldID0gd2ViSW5kZXhOYW1lc1tpXTsKLSAgICBtX29iamVjdFN0b3JlLT5z
ZXRJbmRleGVzUmVhZHkoaW5kZXhOYW1lcywgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKCkpOwotfQotCiB2b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6c2V0
SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiB3ZWJJbmRleE5hbWVzLCBj
b25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCiB7CiAgICAgVmVjdG9yPGludDY0
X3Q+IGluZGV4SWRzKHdlYkluZGV4TmFtZXMuc2l6ZSgpKTsKQEAgLTE1OCwxNCArMTE3LDYgQEAg
V2ViSURCSW5kZXgqIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6Y3JlYXRlSW5kZXgobG9uZyBsb25n
IGlkLCBjb25zdCBXZWJTdHJpbmcmIG4KICAgICByZXR1cm4gbmV3IFdlYklEQkluZGV4SW1wbChp
bmRleCk7CiB9CiAKLVdlYklEQkluZGV4KiBXZWJJREJPYmplY3RTdG9yZUltcGw6OmluZGV4KGNv
bnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRy
PElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXggPSBtX29iamVjdFN0b3JlLT5pbmRleChu
YW1lLCBlYyk7Ci0gICAgaWYgKCFpbmRleCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJu
IG5ldyBXZWJJREJJbmRleEltcGwoaW5kZXgpOwotfQotCiBXZWJJREJJbmRleCogV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsOjppbmRleChsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBSZWZQ
dHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleCA9IG1fb2JqZWN0U3RvcmUtPmluZGV4
KG9iamVjdFN0b3JlSWQpOwpAQCAtMTc0LDExICsxMjUsNiBAQCBXZWJJREJJbmRleCogV2ViSURC
T2JqZWN0U3RvcmVJbXBsOjppbmRleChsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCkKICAgICByZXR1
cm4gbmV3IFdlYklEQkluZGV4SW1wbChpbmRleCk7CiB9CiAKLXZvaWQgV2ViSURCT2JqZWN0U3Rv
cmVJbXBsOjpkZWxldGVJbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgbV9v
YmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgobmFtZSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKLX0KLQogdm9pZCBXZWJJREJPYmplY3RTdG9yZUlt
cGw6OmRlbGV0ZUluZGV4KGxvbmcgbG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIG1fb2Jq
ZWN0U3RvcmUtPmRlbGV0ZUluZGV4KG9iamVjdFN0b3JlSWQsIHRyYW5zYWN0aW9uLmdldElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCmluZGV4IDVkZTNjOWExNWFkOGVm
NWY0NjBhODg2YWMxY2RlYWJjY2JkNTgyZjguLjcwZjE5Y2M4ZmI3ZDk2MjZmMzA4YzY1MGY1NGQ4
ZDJjMGViODRmOGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklE
Qk9iamVjdFN0b3JlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklE
Qk9iamVjdFN0b3JlSW1wbC5oCkBAIC00NiwxOSArNDYsMTQgQEAgcHVibGljOgogICAgIH5XZWJJ
REJPYmplY3RTdG9yZUltcGwoKTsKIAogICAgIHZvaWQgZ2V0KGNvbnN0IFdlYklEQktleVJhbmdl
JiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRp
b25Db2RlJik7Ci0gICAgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKGNvbnN0IFdlYlNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZSYsIGNvbnN0IFdlYklEQktleSYsIFB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyos
IGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mLCBj
b25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2
b2lkIHB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkm
LCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIGNv
bnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiwgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4m
KTsKLSAgICB2b2lkIHNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmLCBjb25zdCBXZWJWZWN0
b3I8V2ViU3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4m
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpOwogICAgIHZvaWQgc2V0SW5kZXhLZXlzKGNvbnN0
IFdlYklEQktleSYsIGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiBpbmRleE5hbWVzLCBjb25z
dCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7Ci0g
ICAgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mLCBjb25z
dCBXZWJJREJUcmFuc2FjdGlvbiYpOwogICAgIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdl
YlZlY3Rvcjxsb25nIGxvbmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mKTsKICAgICB2b2lk
IGRlbGV0ZUZ1bmN0aW9uKGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKiwg
Y29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBj
bGVhcihXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2Vw
dGlvbkNvZGUmKTsKIAogICAgIFdlYklEQkluZGV4KiBjcmVhdGVJbmRleChsb25nIGxvbmcsIGNv
bnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBi
b29sIG11bHRpRW50cnksIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29k
ZSYpOwotICAgIFdlYklEQkluZGV4KiBpbmRleChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYkV4
Y2VwdGlvbkNvZGUmKTsKICAgICBXZWJJREJJbmRleCogaW5kZXgobG9uZyBsb25nKTsKLSAgICB2
b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCVHJhbnNh
Y3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBkZWxldGVJbmRleChsb25nIGxv
bmcsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogCiAgICAg
dm9pZCBvcGVuQ3Vyc29yKGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ3Vyc29yOjpEaXJl
Y3Rpb24sIFdlYklEQkNhbGxiYWNrcyosIFdlYklEQlRyYW5zYWN0aW9uOjpUYXNrVHlwZSwgY29u
c3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuY3BwIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNwcAppbmRleCA2
NjE2ZDY3MWZjMzBjOTdlNjcyNjE0YzFhNDE5OWUzYTdkMDg4NTc3Li40MGQ3ZDc1NjMxNmMzYzMx
ZWE4YWJjNTQ0MDA5YTAwNjYyNjljMjQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5jcHAKQEAgLTQ3LDE0ICs0Nyw2IEBAIFdl
YklEQlRyYW5zYWN0aW9uSW1wbDo6fldlYklEQlRyYW5zYWN0aW9uSW1wbCgpCiB7CiB9CiAKLVdl
YklEQk9iamVjdFN0b3JlKiBXZWJJREJUcmFuc2FjdGlvbkltcGw6Om9iamVjdFN0b3JlKGNvbnN0
IFdlYlN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUgPSBtX2JhY2tlbmQtPm9iamVj
dFN0b3JlKG5hbWUsIGVjKTsKLSAgICBpZiAoIW9iamVjdFN0b3JlKQotICAgICAgICByZXR1cm4g
MDsKLSAgICByZXR1cm4gbmV3IFdlYklEQk9iamVjdFN0b3JlSW1wbChvYmplY3RTdG9yZSk7Ci19
Ci0KIFdlYklEQk9iamVjdFN0b3JlKiBXZWJJREJUcmFuc2FjdGlvbkltcGw6Om9iamVjdFN0b3Jl
KGxvbmcgbG9uZyBpbmRleElkLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZSA9IG1fYmFja2VuZC0+b2Jq
ZWN0U3RvcmUoaW5kZXhJZCwgZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaAppbmRleCAxZWU2YWI4MDE5N2VmNzhmYWZhMTNlOTZm
ZDA1ZjcwZjM3YmFkNzQ5Li4wZmI2NTM3Njc2MzE2Y2U3MDBjZmJhYzhkZTg5OTNjZWM2NDY2YTc3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlv
bkltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlv
bkltcGwuaApAQCAtNDEsNyArNDEsNiBAQCBwdWJsaWM6CiAgICAgV2ViSURCVHJhbnNhY3Rpb25J
bXBsKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2U+KTsKICAgICB2aXJ0dWFsIH5XZWJJREJUcmFuc2FjdGlvbkltcGwoKTsKIAotICAgIHZpcnR1
YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwg
V2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVj
dFN0b3JlKGxvbmcgbG9uZyBpbmRleElkLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVh
bCB2b2lkIGNvbW1pdCgpOwogICAgIHZpcnR1YWwgdm9pZCBhYm9ydCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173198</attachid>
            <date>2012-11-08 21:29:17 -0800</date>
            <delta_ts>2012-11-09 10:58:25 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-100426-20121108212725.patch</filename>
            <type>text/plain</type>
            <size>64488</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMzOTY1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGY5NWI4MTRlZDRkMzRk
ZWJmOTBmZDhkNTY5MjVjMGEyMGM2MzI3MC4uYmM2MTRlZTY1YTcxYmExMzM1NTc1MGQwYWQ5ZWQy
NzM2YjdlZDljNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTExLTAyICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IHN3
aXRjaCBmcm9udGVuZCB0byB1c2UgaW50NjRfdC1iYXNlZCByZWZlcmVuY2VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjYKKworICAgICAgICBS
ZXZpZXdlZCBieSBUb255IENoYW5nLgorCisgICAgICAgIFJlbW92ZSBTdHJpbmctYmFzZWQgb2Jq
ZWN0U3RvcmUvaW5kZXggcmVmZXJlbmNlcywgb2Jzb2xldGVkIGJ5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjUuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGFzIHRoaXMgaXMgdGhlIHNlY29uZCBoYWxmIG9mIGEgcmVmYWN0b3IuCisKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaDoKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnRy
YW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNl
dFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJh
bnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cnVu
SW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2UuaDoKKyAgICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlTWV0YWRhdGE6OmZpbmRJbmRleCk6CisgICAgICAgIChJREJPYmplY3RTdG9y
ZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGE6OmNv
bnRhaW5zSW5kZXgpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmg6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLTEuMC5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3IuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5oOgorICAgICAgICAoSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQpOgor
CiAyMDEyLTExLTA4ICBPdHRvIERlcmVrIENoZXVuZyAgPG90Y2hldW5nQHJpbS5jb20+CiAKICAg
ICAgICAgW0JsYWNrQmVycnldIERpc2FibGUgY29va2llcyBvbiBmaWxlOi8vCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCmluZGV4IGYyMTc3MzhjNDA4YmY2ODFkMzE2ZDMxNzgzN2Y1YmIyYjM2YjQ0
MGMuLjY5MDRjZTQyYzU1N2NkOGMzNTU5MWM1YjFkMjc5ZWRiMDhlZWMxZWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTItMTEtMDIgIEFsZWMgRmxldHQg
IDxhbGVjZmxldHRAY2hyb21pdW0ub3JnPgorCisgICAgICAgIEluZGV4ZWREQjogc3dpdGNoIGZy
b250ZW5kIHRvIHVzZSBpbnQ2NF90LWJhc2VkIHJlZmVyZW5jZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDQyNgorCisgICAgICAgIFJldmlld2Vk
IGJ5IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgUmVtb3ZlIGltcGxlbWVudGF0aW9uIHN0dWJzIGZy
b20gY2hyb21pdW0gQVBJIGZvcgorICAgICAgICBtZXRob2RzIG9ic29sZXRlZCBieSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTAwNDI1CisKKyAgICAgICAgKiBzcmMv
SURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwOgorICAgICAgICAqIHNyYy9JREJPYmplY3RT
dG9yZUJhY2tlbmRQcm94eS5oOgorICAgICAgICAoSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkp
OgorICAgICAgICAqIHNyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwOgorICAgICAgICAqIHNyYy9X
ZWJJREJEYXRhYmFzZUltcGwuaDoKKyAgICAgICAgKFdlYklEQkRhdGFiYXNlSW1wbCk6CisgICAg
ICAgICogc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHA6CisgICAgICAgICogc3JjL1dlYklE
Qk9iamVjdFN0b3JlSW1wbC5oOgorICAgICAgICAoV2ViSURCT2JqZWN0U3RvcmVJbXBsKToKKwog
MjAxMi0xMS0wOCAgSm9zaHVhIEJlbGwgIDxqc2JlbGxAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IEV4cG9zZSBzbmFwc2hvdHMgaW4gcGxhdGZvcm0vbGV2ZWxkYiB3cmFwcGVyIEFQSQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAKaW5kZXggYzYwMzI1NWE3ZTdj
MDhiMDc2NmEzNTVkMGY5ODVkZmZkYTEyMmFhYy4uYzlkMzA2ZGYzYzY5YzU3ZTMzZTVkYTQxMDZi
NjMzYmUzODUwM2MxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQW55LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJB
bnkuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiSURCSW5kZXguaCIKICNpbmNsdWRl
ICJJREJLZXlQYXRoLmgiCiAjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIKKyNpbmNsdWRlICJE
T01TdHJpbmdMaXN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ2FsbGJhY2tzLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaAppbmRleCBkZmQ4ZTIwOTIwNGVj
MGU0YmI5YWMyOTk5NzFjZjIyY2M0ZjFmMDNjLi5kMTUxMTQ1NGQ4MTg5NzBhMjNmNWRlZDhiNjIy
ODMwNzNjYjE4MjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDYWxsYmFja3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJDYWxsYmFja3MuaApAQCAtMjksNyArMjksNiBAQAogI2lmbmRlZiBJREJDYWxsYmFja3NfaAog
I2RlZmluZSBJREJDYWxsYmFja3NfaAogCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2lu
Y2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQkRhdGFi
YXNlRXJyb3IuaCIKICNpbmNsdWRlICJJREJLZXkuaCIKQEAgLTQxLDYgKzQwLDcgQEAKICNpZiBF
TkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAogbmFtZXNwYWNlIFdlYkNvcmUgeworY2xhc3MgRE9N
U3RyaW5nTGlzdDsKIGNsYXNzIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U7CiBjbGFzcyBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAppbmRleCBmY2NiNDU2YzVkNjhhMjE0NjdmNThm
MDljZGM2MjdmYzMwZmQ5NzgyLi4yMGIwZmY4OWJhMWNhYjRhODk1MTI4ZjE0NDYyZmNkZjQyMzIy
YTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJh
c2UuY3BwCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkK
IAorI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJFdmVudFF1ZXVlLmgiCiAj
aW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIklEQkFueS5oIgpAQCAtMTQyLDcg
KzE0Myw3IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVP
YmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvCiAgICAgICAgICAgICBrZXlQYXRoID0g
SURCS2V5UGF0aChrZXlQYXRoU3RyaW5nKTsKICAgICB9CiAKLSAgICBpZiAobV9tZXRhZGF0YS5j
b250YWluc09iamVjdFN0b3JlKG5hbWUpKSB7CisgICAgaWYgKGNvbnRhaW5zT2JqZWN0U3RvcmUo
bmFtZSkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9F
UlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTE4OCwxMyArMTg5LDEzIEBAIHZvaWQg
SURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpbnQ2NCBvYmplY3RT
dG9yZUlkID0gbV9tZXRhZGF0YS5maW5kT2JqZWN0U3RvcmUobmFtZSk7CisgICAgaW50NjQgb2Jq
ZWN0U3RvcmVJZCA9IGZpbmRPYmplY3RTdG9yZUlkKG5hbWUpOwogICAgIGlmIChvYmplY3RTdG9y
ZUlkID09IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCkgewogICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIG1fYmFja2VuZC0+ZGVsZXRlT2JqZWN0U3RvcmUobmFtZSwgbV92ZXJz
aW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIG1fYmFja2VuZC0+ZGVs
ZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24t
PmJhY2tlbmQoKSwgZWMpOwogICAgIGlmICghZWMpIHsKICAgICAgICAgbV92ZXJzaW9uQ2hhbmdl
VHJhbnNhY3Rpb24tPm9iamVjdFN0b3JlRGVsZXRlZChuYW1lKTsKICAgICAgICAgbV9tZXRhZGF0
YS5vYmplY3RTdG9yZXMucmVtb3ZlKG9iamVjdFN0b3JlSWQpOwpAQCAtMjQzLDE4ICsyNDQsMjEg
QEAgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbj4gSURCRGF0YWJhc2U6OnRyYW5zYWN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnQKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisg
ICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOwogICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgc3RvcmVOYW1lcy0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBpZiAoIW1fbWV0YWRh
dGEuY29udGFpbnNPYmplY3RTdG9yZShzdG9yZU5hbWVzLT5pdGVtKGkpKSkgeworICAgICAgICBp
bnQ2NF90IG9iamVjdFN0b3JlSWQgPSBmaW5kT2JqZWN0U3RvcmVJZChzdG9yZU5hbWVzLT5pdGVt
KGkpKTsKKyAgICAgICAgaWYgKG9iamVjdFN0b3JlSWQgPT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0
YTo6SW52YWxpZElkKSB7CiAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJ
REJfTk9UX0ZPVU5EX0VSUjsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CisgICAg
ICAgIG9iamVjdFN0b3JlSWRzLmFwcGVuZChvYmplY3RTdG9yZUlkKTsKICAgICB9CiAKICAgICAv
LyBXZSBuZWVkIHRvIGNyZWF0ZSBhIG5ldyB0cmFuc2FjdGlvbiBzeW5jaHJvbm91c2x5LiBMb2Nr
cyBhcmUgYWNxdWlyZWQgYXN5bmNocm9ub3VzbHkuIE9wZXJhdGlvbnMKICAgICAvLyBjYW4gYmUg
cXVldWVkIGFnYWluc3QgdGhlIHRyYW5zYWN0aW9uIGF0IGFueSBwb2ludC4gVGhleSB3aWxsIHN0
YXJ0IGV4ZWN1dGluZyBhcyBzb29uIGFzIHRoZQogICAgIC8vIGFwcHJvcHJpYXRlIGxvY2tzIGhh
dmUgYmVlbiBhY3F1aXJlZC4KICAgICAvLyBBbHNvIG5vdGUgdGhhdCBlYWNoIGJhY2tlbmQgb2Jq
ZWN0IGNvcnJlc3BvbmRzIHRvIGV4YWN0bHkgb25lIElEQlRyYW5zYWN0aW9uIG9iamVjdC4KLSAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbkJhY2tl
bmQgPSBtX2JhY2tlbmQtPnRyYW5zYWN0aW9uKHN0b3JlTmFtZXMuZ2V0KCksIG1vZGUsIGVjKTsK
KyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbkJh
Y2tlbmQgPSBtX2JhY2tlbmQtPnRyYW5zYWN0aW9uKG9iamVjdFN0b3JlSWRzLCBtb2RlKTsKICAg
ICBpZiAoIXRyYW5zYWN0aW9uQmFja2VuZCkgewogICAgICAgICBBU1NFUlQoZWMpOwogICAgICAg
ICByZXR1cm4gMDsKQEAgLTM1NCw2ICszNTgsMTcgQEAgYm9vbCBJREJEYXRhYmFzZTo6ZGlzcGF0
Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCkKICAgICByZXR1cm4gRXZlbnRUYXJnZXQ6
OmRpc3BhdGNoRXZlbnQoZXZlbnQuZ2V0KCkpOwogfQogCitpbnQ2NF90IElEQkRhdGFiYXNlOjpm
aW5kT2JqZWN0U3RvcmVJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgZm9yIChJ
REJEYXRhYmFzZU1ldGFkYXRhOjpPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBt
X21ldGFkYXRhLm9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLm9iamVjdFN0
b3Jlcy5lbmQoKTsgKytpdCkgeworICAgICAgICBpZiAoaXQtPnZhbHVlLm5hbWUgPT0gbmFtZSkg
eworICAgICAgICAgICAgQVNTRVJUKGl0LT5rZXkgIT0gSURCT2JqZWN0U3RvcmVNZXRhZGF0YTo6
SW52YWxpZElkKTsKKyAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQ7Cit9CisKIHZv
aWQgSURCRGF0YWJhc2U6OnN0b3AoKQogewogICAgIEFjdGl2ZURPTU9iamVjdDo6c3RvcCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2Uu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmgKaW5kZXgg
NTgxNjE2NzNjNWIwMzQ5NmY2MDQwNzQ3ZjJlMmE1YTRlOGVjOWRhZS4uNzljODczZDU2MjU0MjQ5
NWE4YTYyNzFjNjYwMGZmODc3Zjg4NTFjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oCkBAIC05MSwxMiArOTEsMTkgQEAgcHVibGljOgogICAg
IGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50PiBldmVudCwgRXhjZXB0aW9uQ29k
ZSYgZWMpIHsgcmV0dXJuIEV2ZW50VGFyZ2V0OjpkaXNwYXRjaEV2ZW50KGV2ZW50LCBlYyk7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRyPEV2ZW50Pik7CiAKKyAg
ICBpbnQ2NF90IGZpbmRPYmplY3RTdG9yZUlkKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7Cisg
ICAgYm9vbCBjb250YWluc09iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBmaW5kT2JqZWN0U3RvcmVJZChuYW1lKSAhPSBJREJPYmplY3RT
dG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQ7CisgICAgfQorCiAgICAgdXNpbmcgUmVmQ291bnRlZDxJ
REJEYXRhYmFzZT46OnJlZjsKICAgICB1c2luZyBSZWZDb3VudGVkPElEQkRhdGFiYXNlPjo6ZGVy
ZWY7CiAKIHByaXZhdGU6CiAgICAgSURCRGF0YWJhc2UoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCos
IFBhc3NSZWZQdHI8SURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlPiwgUGFzc1JlZlB0cjxJREJE
YXRhYmFzZUNhbGxiYWNrcz4pOwogCisKICAgICAvLyBFdmVudFRhcmdldAogICAgIHZpcnR1YWwg
dm9pZCByZWZFdmVudFRhcmdldCgpIHsgcmVmKCk7IH0KICAgICB2aXJ0dWFsIHZvaWQgZGVyZWZF
dmVudFRhcmdldCgpIHsgZGVyZWYoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA1Yzdi
YmQ4ZjY1NGEwMjJjYTEwMzI0MzdhZjU1MzYyZGQwMGUzMTg2Li5lOGUxNDNmNDc4ODRlMDA3YTFh
MGVlZTQ0NWE4ZTc5MzcxYmQ4NDNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMjksNyAr
MjksNiBAQAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCiAjaW5jbHVkZSAiQ3Jvc3NU
aHJlYWRUYXNrLmgiCi0jaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIklEQkJh
Y2tpbmdTdG9yZS5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVk
ZSAiSURCRmFjdG9yeUJhY2tlbmRJbXBsLmgiCkBAIC0yMTIsMTYgKzIxMSw2IEBAIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6b2Jq
ZWN0U3RvcmUoaW50NjRfCiAgICAgcmV0dXJuIG1fb2JqZWN0U3RvcmVzLmdldChpZCk7CiB9CiAK
LWludDY0X3QgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6Z2V0T2JqZWN0U3RvcmVJZChjb25zdCBT
dHJpbmcmIG5hbWUpCi17Ci0gICAgZm9yIChPYmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBtX29iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBtX29iamVjdFN0b3Jlcy5lbmQoKTsg
KytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVlLT5uYW1lKCkgPT0gbmFtZSkKLSAgICAgICAg
ICAgIHJldHVybiBpdC0+a2V5OwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmpl
Y3RTdG9yZShpbnQ2NF90IGlkLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQobV9vYmplY3RTdG9y
ZXMuY29udGFpbnMoaWQpKTsKQEAgLTI3NCw4ICsyNjMsOCBAQCB2b2lkIElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElE
QkNhbAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+
IG9iamVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbkludGVyZmFjZSA9IHRo
aXMtPnRyYW5zYWN0aW9uKG9iamVjdFN0b3JlTmFtZXMuZ2V0KCksIElEQlRyYW5zYWN0aW9uOjpW
RVJTSU9OX0NIQU5HRSwgZWMpOworICAgIFZlY3RvcjxpbnQ2NF90PiBvYmplY3RTdG9yZUlkczsK
KyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbklu
dGVyZmFjZSA9IHRoaXMtPnRyYW5zYWN0aW9uKG9iamVjdFN0b3JlSWRzLCBJREJUcmFuc2FjdGlv
bjo6VkVSU0lPTl9DSEFOR0UpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
PiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZyb20odHJhbnNhY3Rp
b25JbnRlcmZhY2UuZ2V0KCkpOwogICAgIEFTU0VSVCghZWMpOwogCkBAIC00MzQsMTkgKzQyMywx
MyBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnByb2Nlc3NQZW5kaW5nQ2FsbHMoKQog
ICAgIEFTU0VSVChtX3BlbmRpbmdPcGVuQ2FsbHMuaXNFbXB0eSgpKTsKIH0KIAotUGFzc1JlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6
OnRyYW5zYWN0aW9uKERPTVN0cmluZ0xpc3QqLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRp
b25Db2RlJikKK1Bhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiBJREJE
YXRhYmFzZUJhY2tlbmRJbXBsOjp0cmFuc2FjdGlvbihjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9i
amVjdFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQogewotICAgIC8vIEZJWE1FOiBGaXJz
dCBwYXJhbWV0ZXIgaXNuJ3QgdXNlZCBmb3IgYW55dGhpbmcgeWV0IGFueXdheSwgYW5kIHRoaXMg
bWV0aG9kIGlzIGdvaW5nIGF3YXkuCi0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IHRyYW5zYWN0aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6Y3JlYXRlKFZlY3Rv
cjxpbnQ2NF90PigpLCBtb2RlLCB0aGlzKTsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUo
b2JqZWN0U3RvcmVJZHMsIG1vZGUsIHRoaXMpOwogICAgIG1fdHJhbnNhY3Rpb25zLmFkZCh0cmFu
c2FjdGlvbi5nZXQoKSk7CiAgICAgcmV0dXJuIHRyYW5zYWN0aW9uLnJlbGVhc2UoKTsKIH0KIAot
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJ
ZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpCi17Ci0gICAgcmV0dXJuIHRyYW5zYWN0aW9uKG9iamVj
dFN0b3JlSWRzLCBtb2RlKTsKLX0KLQogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvcGVu
Q29ubmVjdGlvbihQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRy
PElEQkRhdGFiYXNlQ2FsbGJhY2tzPiBkYXRhYmFzZUNhbGxiYWNrcykKIHsKICAgICBBU1NFUlQo
bV9iYWNraW5nU3RvcmUuZ2V0KCkpOwpAQCAtNDk0LDE5ICs0NzcsMTUgQEAgdm9pZCBJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjpydW5JbnRWZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24oaW50NjRfdCBy
ZXF1ZXN0ZWRWZXIKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxET01TdHJp
bmdMaXN0PiBvYmplY3RTdG9yZU5hbWVzID0gRE9NU3RyaW5nTGlzdDo6Y3JlYXRlKCk7Ci0gICAg
RXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZT4gdHJhbnNhY3Rpb25JbnRlcmZhY2UgPSB0cmFuc2FjdGlvbihvYmplY3RTdG9yZU5h
bWVzLmdldCgpLCBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UsIGVjKTsKKyAgICBWZWN0
b3I8aW50NjRfdD4gb2JqZWN0U3RvcmVJZHM7CisgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25JbnRlcmZhY2UgPSB0cmFuc2FjdGlvbihvYmplY3RT
dG9yZUlkcywgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKICAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNhY3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsOjpmcm9tKHRyYW5zYWN0aW9uSW50ZXJmYWNlLmdldCgpKTsKLSAgICBBU1NFUlQoIWVj
KTsKIAogICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9IHRoaXM7
CiAgICAgT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OlRhc2s+IGludFZlcnNpb25UYXNr
ID0gY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRJbnRWZXJz
aW9uSW50ZXJuYWwsIGRhdGFiYXNlLCByZXF1ZXN0ZWRWZXJzaW9uLCBjYWxsYmFja3MsIGRhdGFi
YXNlQ2FsbGJhY2tzLCB0cmFuc2FjdGlvbik7CiAgICAgT3duUHRyPFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQ6OlRhc2s+IHJlc2V0VmVyc2lvbk9uQWJvcnRUYXNrID0gY3JlYXRlQ2FsbGJhY2tUYXNr
KCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZXNldFZlcnNpb24sIGRhdGFiYXNlLCBtX21ldGFk
YXRhLnZlcnNpb24sIG1fbWV0YWRhdGEuaW50VmVyc2lvbik7CiAgICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKGludFZlcnNpb25UYXNrLnJlbGVhc2UoKSwgcmVzZXRWZXJzaW9uT25B
Ym9ydFRhc2sucmVsZWFzZSgpKSkgewotICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIG9uZSBvZiB0
aGUgZm9sbG93aW5nIGxpbmVzLgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwog
ICAgIH0KICAgICBBU1NFUlQoIW1fcGVuZGluZ1NlY29uZEhhbGZPcGVuV2l0aFZlcnNpb24pOwog
ICAgIG1fZGF0YWJhc2VDYWxsYmFja3NTZXQuYWRkKGRhdGFiYXNlQ2FsbGJhY2tzKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEltcGwuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFj
a2VuZEltcGwuaAppbmRleCA4MTRmMWRlMjFkZmJhODk1Y2Q4NWVmZWRlZTQ3NjI5MTE3YjQ4Mjk1
Li5mMGY0OTM4ZDE3YmVhZDhjZDFkNDI1NGEwNzk4YjZkNmRlMzZiMTRmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5k
SW1wbC5oCkBAIC02MiwxNSArNjIsMTIgQEAgcHVibGljOgogICAgIC8vIElEQkRhdGFiYXNlQmFj
a2VuZEludGVyZmFjZQogICAgIHZpcnR1YWwgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSgp
IGNvbnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U+IGNyZWF0ZU9iamVjdFN0b3JlKGludDY0X3QgaWQsIGNvbnN0IFN0cmluZyYgbmFtZSwg
Y29uc3QgSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNr
ZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVP
YmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBkZWxldGVP
YmplY3RTdG9yZShnZXRPYmplY3RTdG9yZUlkKG5hbWUpLCB0cmFuc2FjdGlvblB0ciwgZWMpOyB9
CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKTsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFu
c2FjdGlvbihET01TdHJpbmdMaXN0KiBvYmplY3RTdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBt
b2RlLCBFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oY29uc3QgVmVjdG9yPGludDY0X3Q+Jiwg
dW5zaWduZWQgc2hvcnQpOwogICAgIHZpcnR1YWwgdm9pZCBjbG9zZShQYXNzUmVmUHRyPElEQkRh
dGFiYXNlQ2FsbGJhY2tzPik7CiAKICAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw+IG9iamVjdFN0b3JlKGludDY0X3QgaWQpOwotICAgIGludDY0X3QgZ2V0T2JqZWN0U3Rv
cmVJZChjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIElEQlRyYW5zYWN0aW9uQ29vcmRpbmF0b3Iq
IHRyYW5zYWN0aW9uQ29vcmRpbmF0b3IoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zYWN0aW9uQ29v
cmRpbmF0b3IuZ2V0KCk7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uU3RhcnRlZChQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKICAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNo
ZWQoUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZh
Y2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2Vu
ZEludGVyZmFjZS5oCmluZGV4IDBjNTNjZDdjZjE1ODkxYzA1MTdmZDkzMjQzOWNlMWI3YTE5MTk3
YWEuLjlhYWI1NjQ0YmE0ODYzYzA3YTY3ZTQxZDkwN2Y0MWQxZDE4ZTQ4MzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
QmFja2VuZEludGVyZmFjZS5oCkBAIC0zNCw3ICszNCw2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotY2xhc3MgRE9NU3RyaW5nTGlzdDsKIGNsYXNzIElEQkNhbGxiYWNrczsKIGNsYXNzIElE
QkRhdGFiYXNlQ2FsbGJhY2tzOwogY2xhc3MgSURCS2V5UGF0aDsKQEAgLTU1LDEwICs1NCw4IEBA
IHB1YmxpYzoKICAgICB2aXJ0dWFsIElEQkRhdGFiYXNlTWV0YWRhdGEgbWV0YWRhdGEoKSBjb25z
dCA9IDA7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50
ZXJmYWNlPiBjcmVhdGVPYmplY3RTdG9yZShpbnQ2NF90LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IElEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0
ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2Jq
ZWN0U3RvcmUoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0
aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcm
IHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxJREJEYXRhYmFz
ZUNhbGxiYWNrcz4sIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlz
dCogc3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsK
ICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0
cmFuc2FjdGlvbihjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVjdFN0b3JlSWRzLCB1bnNpZ25l
ZCBzaG9ydCBtb2RlKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURC
RGF0YWJhc2VDYWxsYmFja3M+KSA9IDA7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgKaW5kZXggMWIwMzg0YmQ5NTY5MWU0Y2ZhNzcxYzQxOTI4
NTcyYzljMmIxNjA1OC4uYzNiMzMzNDYzMDFjYzcxZTZlMGIwYjVlY2FjMGE4YzY1MTUwNDg0ZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oCkBA
IC03NiwxNCArNzYsNiBAQCBzdHJ1Y3QgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSB7CiAgICAgdHlw
ZWRlZiBIYXNoTWFwPGludDY0X3QsIElEQkluZGV4TWV0YWRhdGE+IEluZGV4TWFwOwogICAgIElu
ZGV4TWFwIGluZGV4ZXM7CiAKLSAgICBib29sIGNvbnRhaW5zSW5kZXgoY29uc3QgU3RyaW5nJiBu
YW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yIChJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBpbmRleGVzLmJlZ2luKCk7IGl0ICE9IGluZGV4ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAg
ICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKQotICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9CiB9OwogCiBz
dHJ1Y3QgSURCRGF0YWJhc2VNZXRhZGF0YSB7CkBAIC0xMDgsMjIgKzEwMCw2IEBAIHN0cnVjdCBJ
REJEYXRhYmFzZU1ldGFkYXRhIHsKICAgICB7CiAgICAgfQogCi0gICAgaW50NjRfdCBmaW5kT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgZm9yIChP
YmplY3RTdG9yZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBvYmplY3RTdG9yZXMuYmVnaW4oKTsg
aXQgIT0gb2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgICAgICBpZiAoaXQtPnZh
bHVlLm5hbWUgPT0gbmFtZSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChpdC0+a2V5ICE9IElE
Qk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGl0LT5rZXk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIElEQk9i
amVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZDsKLSAgICB9Ci0KLSAgICBib29sIGNvbnRhaW5z
T2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0
dXJuIGZpbmRPYmplY3RTdG9yZShuYW1lKSAhPSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZh
bGlkSWQ7Ci0gICAgfQotCiAgICAgU3RyaW5nIG5hbWU7CiAgICAgaW50NjRfdCBpZDsKICAgICBT
dHJpbmcgdmVyc2lvbjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCBkOWQyZWMyODA0OTU5NGUyNzA4OGQxZmZjZmQyMzIx
Njk3NjUxNjVlLi5mMTU3OWQ5YjM3OTdiMzU0NmFlYTI3MzQ5Y2Q0YjBlY2JhNzM5MjYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUu
Y3BwCkBAIC0yMDQsMTggKzIwNCwxNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVj
dFN0b3JlOjpwdXQoSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpQdXRNbwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBWZWN0b3I8U3RyaW5nPiBpbmRleE5hbWVzOworICAg
IFZlY3RvcjxpbnQ2NF90PiBpbmRleElkczsKICAgICBWZWN0b3I8SW5kZXhLZXlzPiBpbmRleEtl
eXM7CiAgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbmRleE1hcDo6Y29uc3RfaXRl
cmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsgaXQgIT0gbV9tZXRhZGF0YS5p
bmRleGVzLmVuZCgpOyArK2l0KSB7CiAgICAgICAgIEluZGV4S2V5cyBrZXlzOwogICAgICAgICBn
ZW5lcmF0ZUluZGV4S2V5c0ZvclZhbHVlKGl0LT52YWx1ZSwgdmFsdWUsICZrZXlzKTsKLSAgICAg
ICAgaW5kZXhOYW1lcy5hcHBlbmQoaXQtPnZhbHVlLm5hbWUpOworICAgICAgICBpbmRleElkcy5h
cHBlbmQoaXQtPmtleSk7CiAgICAgICAgIGluZGV4S2V5cy5hcHBlbmQoa2V5cyk7CiAgICAgfQot
ICAgIEFTU0VSVChpbmRleEtleXMuc2l6ZSgpID09IGluZGV4TmFtZXMuc2l6ZSgpKTsKIAogICAg
IFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQs
IHNvdXJjZSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5wdXRXaXRoSW5k
ZXhLZXlzKHNlcmlhbGl6ZWRWYWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNlKCksIHB1dE1vZGUs
IHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgaW5kZXhOYW1lcywgaW5kZXhLZXlz
LCBlYyk7CisgICAgbV9iYWNrZW5kLT5wdXQoc2VyaWFsaXplZFZhbHVlLnJlbGVhc2UoKSwga2V5
LnJlbGVhc2UoKSwgcHV0TW9kZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBp
bmRleElkcywgaW5kZXhLZXlzKTsKICAgICBBU1NFUlQoIWVjKTsKICAgICByZXR1cm4gcmVxdWVz
dC5yZWxlYXNlKCk7CiB9CkBAIC0zMTksOCArMzE4LDggQEAgcHJpdmF0ZToKICAgICAgICAgaWYg
KGN1cnNvckFueS0+dHlwZSgpID09IElEQkFueTo6SURCQ3Vyc29yV2l0aFZhbHVlVHlwZSkKICAg
ICAgICAgICAgIGN1cnNvciA9IGN1cnNvckFueS0+aWRiQ3Vyc29yV2l0aFZhbHVlKCk7CiAKLSAg
ICAgICAgVmVjdG9yPFN0cmluZywgMT4gaW5kZXhOYW1lczsKLSAgICAgICAgaW5kZXhOYW1lcy5h
cHBlbmQobV9pbmRleE1ldGFkYXRhLm5hbWUpOworICAgICAgICBWZWN0b3I8aW50NjRfdCwgMT4g
aW5kZXhJZHM7CisgICAgICAgIGluZGV4SWRzLmFwcGVuZChtX2luZGV4TWV0YWRhdGEuaWQpOwog
ICAgICAgICBpZiAoY3Vyc29yKSB7CiAgICAgICAgICAgICBjdXJzb3ItPmNvbnRpbnVlRnVuY3Rp
b24oZWMpOwogICAgICAgICAgICAgQVNTRVJUKCFlYyk7CkBAIC0zMzQsMTIgKzMzMywxMiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgVmVjdG9yPElEQk9iamVjdFN0b3JlOjpJbmRleEtleXMsIDE+
IGluZGV4S2V5c0xpc3Q7CiAgICAgICAgICAgICBpbmRleEtleXNMaXN0LmFwcGVuZChpbmRleEtl
eXMpOwogCi0gICAgICAgICAgICBtX29iamVjdFN0b3JlQmFja2VuZC0+c2V0SW5kZXhLZXlzKHBy
aW1hcnlLZXksIGluZGV4TmFtZXMsIGluZGV4S2V5c0xpc3QsIG1fdHJhbnNhY3Rpb24uZ2V0KCkp
OworICAgICAgICAgICAgbV9vYmplY3RTdG9yZUJhY2tlbmQtPnNldEluZGV4S2V5cyhwcmltYXJ5
S2V5LCBpbmRleElkcywgaW5kZXhLZXlzTGlzdCwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGFyZSBkb25lIGluZGV4
aW5nLCB0ZWxsIHRoZSBiYWNrZW5kIHRvIGdvCiAgICAgICAgICAgICAvLyBiYWNrIHRvIHByb2Nl
c3NpbmcgdGFza3Mgb2YgdHlwZSBOb3JtYWxUYXNrLgotICAgICAgICAgICAgbV9vYmplY3RTdG9y
ZUJhY2tlbmQtPnNldEluZGV4ZXNSZWFkeShpbmRleE5hbWVzLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKKyAgICAgICAgICAgIG1fb2JqZWN0U3RvcmVCYWNrZW5kLT5zZXRJbmRleGVzUmVhZHkoaW5k
ZXhJZHMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgICAgICAgICAgbV9vYmplY3RTdG9yZUJh
Y2tlbmQuY2xlYXIoKTsKICAgICAgICAgICAgIG1fdHJhbnNhY3Rpb24uY2xlYXIoKTsKICAgICAg
ICAgfQpAQCAtMzgyLDcgKzM4MSw3IEBAIFBhc3NSZWZQdHI8SURCSW5kZXg+IElEQk9iamVjdFN0
b3JlOjpjcmVhdGVJbmRleChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0CiAgICAgICAg
IGVjID0gTkFUSVZFX1RZUEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYg
KG1fbWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSkgeworICAgIGlmIChjb250YWluc0luZGV4
KG5hbWUpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkNPTlNUUkFJTlRf
RVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC00NDQsMTIgKzQ0MywxMyBAQCBQYXNz
UmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1l
LCBFeGNlcHRpb25Db2RlJiBlYwogICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKQogICAg
ICAgICByZXR1cm4gaXQtPnZhbHVlOwogCi0gICAgaWYgKCFtX21ldGFkYXRhLmNvbnRhaW5zSW5k
ZXgobmFtZSkpIHsKKyAgICBpbnQ2NF90IGluZGV4SWQgPSBmaW5kSW5kZXhJZChuYW1lKTsKKyAg
ICBpZiAoaW5kZXhJZCA9PSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpIHsKICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGlu
ZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+aW5kZXgobmFtZSwgZWMpOworICAgIFJlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4QmFja2VuZCA9IG1fYmFja2VuZC0+aW5kZXgoaW5k
ZXhJZCk7CiAgICAgQVNTRVJUKCFlYyAmJiBpbmRleEJhY2tlbmQpOwogCiAgICAgY29uc3QgSURC
SW5kZXhNZXRhZGF0YSogaW5kZXhNZXRhZGF0YSgwKTsKQEAgLTQ3NiwxNCArNDc2LDE0IEBAIHZv
aWQgSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0
aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNU
SU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoIW1fbWV0
YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSkgeworICAgIGludDY0X3QgaW5kZXhJZCA9IGZpbmRJ
bmRleElkKG5hbWUpOworICAgIGlmIChpbmRleElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFs
aWRJZCkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5E
X0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1fYmFja2VuZC0+ZGVsZXRlSW5k
ZXgobmFtZSwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgbV9iYWNrZW5kLT5k
ZWxldGVJbmRleChpbmRleElkLCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBp
ZiAoIWVjKSB7Ci0gICAgICAgIEFTU0VSVChtX21ldGFkYXRhLmNvbnRhaW5zSW5kZXgobmFtZSkp
OwogICAgICAgICBJREJJbmRleE1hcDo6aXRlcmF0b3IgaXQgPSBtX2luZGV4TWFwLmZpbmQobmFt
ZSk7CiAgICAgICAgIGlmIChpdCAhPSBtX2luZGV4TWFwLmVuZCgpKSB7CiAgICAgICAgICAgICBt
X21ldGFkYXRhLmluZGV4ZXMucmVtb3ZlKGl0LT52YWx1ZS0+aWQoKSk7CkBAIC01NTgsNiArNTU4
LDE2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OnRyYW5zYWN0aW9uRmluaXNoZWQoKQogICAgIG1f
aW5kZXhNYXAuY2xlYXIoKTsKIH0KIAoraW50NjRfdCBJREJPYmplY3RTdG9yZTo6ZmluZEluZGV4
SWQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAoreworICAgIGZvciAoSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YTo6SW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9tZXRhZGF0YS5pbmRleGVz
LmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEuaW5kZXhlcy5lbmQoKTsgKytpdCkgeworICAgICAg
ICBpZiAoaXQtPnZhbHVlLm5hbWUgPT0gbmFtZSkgeworICAgICAgICAgICAgQVNTRVJUKGl0LT5r
ZXkgIT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKTsKKyAgICAgICAgICAgIHJldHVybiBp
dC0+a2V5OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBJREJJbmRleE1ldGFkYXRhOjpJ
bnZhbGlkSWQ7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKaW5kZXggOWYwMjdlYTBj
NjQ2MjhmNmRkZTA3MDEyMmRhMWE4ZmFlNmZlYjI2YS4uOWNiMmFkNjMzZDNiYjM4N2NkYzA1NWJj
ZjRkODBhODFkYzc2MDRhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5oCkBAIC02Niw5ICs2Niw5IEBAIHB1YmxpYzoKIAogICAgIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gYWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGFkZChjb250
ZXh0LCB2YWx1ZSwgMCwgZWMpOyAgfQogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gcHV0KFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFNjcmlwdFZhbHVlJiB2YWx1ZSwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgcmV0dXJuIHB1dChjb250ZXh0LCB2YWx1ZSwgMCwgZWMpOyAgfQotICAg
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0
LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+KDApLCBlYyk7IH0gCi0gICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1
cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXlSYW5nZSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0
KCksIGVjKTsgfSAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5LCBJREJDdXJzb3I6
OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9IAorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3Bl
bkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBzdGF0aWNfY2FzdDxJREJLZXlSYW5nZSo+
KDApLCBlYyk7IH0KKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFu
Z2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIGtleVJh
bmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9CisgICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vy
c29yKGNvbnRleHQsIGtleSwgSURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCksIGVjKTsgfQogICAg
IFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiByYW5nZSwgY29uc3QgU3RyaW5nJiBk
aXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQs
IHJhbmdlLCBkaXJlY3Rpb24sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6Tm9ybWFs
VGFzaywgZWMpOyB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgY29uc3QgU3RyaW5n
JiBkaXJlY3Rpb24sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIEV4
Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5PiwgY29uc3QgU3RyaW5nJiBk
aXJlY3Rpb24sIEV4Y2VwdGlvbkNvZGUmKTsKQEAgLTEwNSw2ICsxMDUsMTIgQEAgcHVibGljOgog
cHJpdmF0ZToKICAgICBJREJPYmplY3RTdG9yZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRh
JiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+LCBJREJUcmFuc2Fj
dGlvbiopOwogCisgICAgaW50NjRfdCBmaW5kSW5kZXhJZChjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0OworICAgIGJvb2wgY29udGFpbnNJbmRleChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gZmluZEluZGV4SWQobmFtZSkgIT0gSURCSW5kZXhNZXRhZGF0
YTo6SW52YWxpZElkOworICAgIH0KKwogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEgbV9tZXRh
ZGF0YTsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBtX2JhY2tl
bmQ7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uPiBtX3RyYW5zYWN0aW9uOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsLmNwcAppbmRleCA0NjQwYzEzZGQyZTNjNzdiMmRlODBjYzBkYjdhZGJmNTkw
M2UwM2Y1Li5iNTRmMDA4YzY5ZTk3ZWFlYjkyYzJjNTgyMzdmYzY1MzQyZmE4OTYyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsLmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBh
c3NSZWZQdHI8CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0KFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IHBy
cEtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJh
Y2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5k
ZXhLZXlzKQogewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0
V2l0aEluZGV4S2V5cyIpOworICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6cHV0Iik7CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUgPSB0aGlzOwogICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0g
cHJwVmFsdWU7CkBAIC0xMjYsMTAgKzEyNiw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwKICAg
ICAgICAgY2FsbGJhY2tzLT5vbkVycm9yKElEQkRhdGFiYXNlRXJyb3I6OmNyZWF0ZShJREJEYXRh
YmFzZUV4Y2VwdGlvbjo6SURCX0FCT1JUX0VSUikpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRNb2RlIHB1dE1v
ZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBp
bmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBFeGNlcHRpb25D
b2RlJikKLXsKLSAgICByZXR1cm4gcHV0KHBycFZhbHVlLCBwcnBLZXksIHB1dE1vZGUsIHBycENh
bGxiYWNrcywgdHJhbnNhY3Rpb25QdHIsIGdldEluZGV4SWRzKGluZGV4TmFtZXMpLCBpbmRleEtl
eXMpOwotfQogbmFtZXNwYWNlIHsKIGNsYXNzIEluZGV4V3JpdGVyIHsKIHB1YmxpYzoKQEAgLTI1
OSwxMiArMjU1LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtl
eXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGMKICAgICB9CiB9CiAKLXZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5
PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3Qg
VmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvblB0cikKLXsKLSAgICBWZWN0b3I8aW50NjRfdD4gaW5kZXhJZHMgPSBn
ZXRJbmRleElkcyhpbmRleE5hbWVzKTsKLSAgICByZXR1cm4gc2V0SW5kZXhLZXlzKHBycFByaW1h
cnlLZXksIGluZGV4SWRzLCBpbmRleEtleXMsIHRyYW5zYWN0aW9uUHRyKTsKLX0KLQogdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGlu
dDY0X3Q+JiBpbmRleElkcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2Fj
dGlvbkludGVyZmFjZSkKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnNldEluZGV4ZXNSZWFkeSIpOwpAQCAtMjc5LDIyICsyNjksNiBAQCB2b2lkIElEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4m
IGluZGV4SWRzLAogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotdm9pZCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPFN0cmlu
Zz4mIGluZGV4TmFtZXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b25JbnRlcmZhY2UpCi17Ci0gICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzKGluZGV4TmFtZXMu
c2l6ZSgpKTsKLSAgICAvLyBGSVhNRTogV2UgbWFudWFsbHkgY29udmVydCBlYWNoIG5hbWUgdG8g
YW4gaW5kZXhJZCwgZXZlbiBpZiB0aGUgbmFtZSBoYXMgYWxyZWFkeSBiZWVuIGRlbGV0ZWQsIGJl
Y2F1c2Ugd2UgaGF2ZSB0byByZW1vdmUgZXhhY3RseSB0aGF0IG1hbnkgcHJlZW1wdGl2ZSBldmVu
dHMsIGJ1dCB0aGlzIHdpbGwgZ28gYXdheSB3aGVuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMDA0MjYgbGFuZHMuCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBp
bmRleE5hbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGluZGV4SWRzW2ldID0gSW52YWxpZElk
OwotICAgICAgICBmb3IgKEluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1faW5kZXhlcy5i
ZWdpbigpOyBpdCAhPSBtX2luZGV4ZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChp
dC0+dmFsdWUtPm5hbWUoKSA9PSBpbmRleE5hbWVzW2ldKSB7Ci0gICAgICAgICAgICAgICAgaW5k
ZXhJZHNbaV0gPSBpdC0+a2V5OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBzZXRJbmRleGVzUmVhZHkoaW5kZXhJZHMs
IHRyYW5zYWN0aW9uSW50ZXJmYWNlKTsKLX0KLQogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjpzZXRJbmRleGVzUmVhZHlJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFz
c1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc093blB0
cjxWZWN0b3I8aW50NjRfdD4gPiBwb3BJbmRleElkcywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKICAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeUludGVybmFsIik7CkBAIC00NzAsMjkgKzQ0
NCw2IEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjppbmRleChpbnQ2NF90IGluCiAgICAgcmV0dXJuIGluZGV4LnJlbGVhc2Uo
KTsKIH0KIAotUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OmluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYp
Ci17Ci0gICAgcmV0dXJuIGluZGV4KGdldEluZGV4SWQobmFtZSkpOwotfQotCi1pbnQ2NF90IElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEluZGV4SWQoY29uc3QgU3RyaW5nJiBuYW1lKQot
ewotICAgIGZvciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2lu
KCk7IGl0ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkgewotICAgICAgICBpZiAoaXQtPnZhbHVl
LT5uYW1lKCkgPT0gbmFtZSkKLSAgICAgICAgICAgIHJldHVybiBpdC0+a2V5OwotICAgIH0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotVmVjdG9yPGludDY0
X3Q+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEluZGV4SWRzKGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBuYW1lcykKLXsKLSAgICBWZWN0b3I8aW50NjRfdD4gcmVzdWx0OwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbmFtZXMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hcHBl
bmQoZ2V0SW5kZXhJZChuYW1lc1tpXSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgoaW50NjRfdCBpbmRleElkLCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25D
b2RlJiBlYykKIHsKICAgICBBU1NFUlQobV9pbmRleGVzLmNvbnRhaW5zKGluZGV4SWQpKTsKQEAg
LTUxMSwxMSArNDYyLDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJ
bmRleChpbnQ2NF90IGluZGV4SWQsIElEQlRyYW5zYWN0aW9uQmFja2UKICAgICBtX2luZGV4ZXMu
cmVtb3ZlKGluZGV4SWQpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRl
bGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgcmV0dXJuIGRl
bGV0ZUluZGV4KGdldEluZGV4SWQobmFtZSksIHRyYW5zYWN0aW9uUHRyLCBlYyk7Ci19Ci0KIHZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbChTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBv
YmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCwgUGFzc1Jl
ZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbikKIHsKICAgICBvYmpl
Y3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmRlbGV0ZUluZGV4KHRyYW5zYWN0aW9uLT5iYWNraW5n
U3RvcmVUcmFuc2FjdGlvbigpLCBvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmplY3RTdG9y
ZS0+aWQoKSwgaW5kZXgtPmlkKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCmluZGV4IGMyZWZk
M2IwZTNhMjFiNjEyNGUwNDljYjAxMjBkN2JmMjRmNjhjOTcuLmNmZGUzYmU3YjM0NTFiYjJiNjMy
NmVkYWI2MDdlZDI4MGI0MzQyMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKQEAgLTY0LDIw
ICs2NCwxNSBAQCBwdWJsaWM6CiAKICAgICAvLyBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2UKICAgICB2aXJ0dWFsIHZvaWQgZ2V0KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVm
UHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2Vw
dGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBwdXQoUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgVmVjdG9yPGludDY0
X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mKTsKIAogICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJDYWxsYmFj
a3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAg
ICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdmlydHVhbCBQ
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoaW50NjRfdCwg
Y29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wg
bXVsdGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBy
cFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5
cz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0
b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3Qg
VmVjdG9yPFN0cmluZz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKICAgICB2
aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJ
bmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGluZGV4KGludDY0X3QpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJp
bmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdmlydHVhbCB2b2lkIG9w
ZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIElEQkN1cnNvcjo6RGlyZWN0aW9uLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZTo6
VGFza1R5cGUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUm
KTsKQEAgLTk2LDkgKzkxLDYgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8SURCQmFja2luZ1N0
b3JlPiBiYWNraW5nU3RvcmUoKSBjb25zdCB7IHJldHVybiBtX2RhdGFiYXNlLT5iYWNraW5nU3Rv
cmUoKTsgfQogICAgIGludDY0X3QgZGF0YWJhc2VJZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJh
c2UtPmlkKCk7IH0KIAotICAgIGludDY0X3QgZ2V0SW5kZXhJZChjb25zdCBTdHJpbmcmKTsKLSAg
ICBWZWN0b3I8aW50NjRfdD4gZ2V0SW5kZXhJZHMoY29uc3QgVmVjdG9yPFN0cmluZz4mKTsKLQog
cHJpdmF0ZToKICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKGNvbnN0IElEQkRhdGFiYXNl
QmFja2VuZEltcGwqLCBjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJik7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggOWFiZTg4M2NiYThlZWNkMTQyYzBjYzljNjgw
ZTg2OGQ0YWFlYjI3OC4uODNiZGZkY2VkOTA2ZjBiYjc2MTU5ODNiYzIyNmYyZDJmMjNmOGE0OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTM1LDcgKzM1LDYgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBET01TdHJpbmdMaXN0OwogY2xhc3MgSURCQ2Fs
bGJhY2tzOwogY2xhc3MgSURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlOwogY2xhc3MgSURCS2V5OwpA
QCAtNjIsMjAgKzYxLDE1IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxJ
REJLZXk+ID4gSW5kZXhLZXlzOwogCi0gICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMo
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPElEQktleT4sIFB1
dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYs
IEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25z
dCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYpID0gMDsKICAgICB2
aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NS
ZWZQdHI8SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhj
ZXB0aW9uQ29kZSYpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNv
ZGUmKSA9IDA7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJm
YWNlPiBjcmVhdGVJbmRleChpbnQ2NF90LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktl
eVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJ
bmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRy
PElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgY29uc3QgVmVj
dG9yPEluZGV4S2V5cz4mLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKSA9IDA7Ci0g
ICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8U3RyaW5nPiYsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0
SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSopID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBpbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7
CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgo
aW50NjRfdCkgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcm
IG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKSA9
IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlSW5kZXgoaW50NjRfdCwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwCmluZGV4IDQ3
MDA1YzNiNzYxZTIwYzI1ZjA4OTEyMWM0NjM3ZjMwYmE4NzNmYzAuLjQ2NTA1ODFiMDUyZDYwNTBk
ZGIwYjBiNWVjOWQ1ZGE0YThiNjZmOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTE2MCwxMyArMTYwLDEzIEBAIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQlRyYW5zYWN0aW9uOjpvYmplY3RTdG9yZShjb25z
dCBTdHJpbmcmIG5hbWUsIEV4Y2VwCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OklEQl9OT1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmVCYWNrZW5kID0gbV9i
YWNrZW5kLT5vYmplY3RTdG9yZShuYW1lLCBlYyk7CisKKyAgICBpbnQ2NF90IG9iamVjdFN0b3Jl
SWQgPSBtX2RhdGFiYXNlLT5maW5kT2JqZWN0U3RvcmVJZChuYW1lKTsKKyAgICBBU1NFUlQob2Jq
ZWN0U3RvcmVJZCAhPSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpOworICAgIFJl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlQmFja2VuZCA9
IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCwgZWMpOwogICAgIEFTU0VSVCgh
ZWMgJiYgb2JqZWN0U3RvcmVCYWNrZW5kKTsKIAogICAgIGNvbnN0IElEQkRhdGFiYXNlTWV0YWRh
dGEmIG1ldGFkYXRhID0gbV9kYXRhYmFzZS0+bWV0YWRhdGEoKTsKLSAgICBpbnQ2NF90IG9iamVj
dFN0b3JlSWQgPSBtZXRhZGF0YS5maW5kT2JqZWN0U3RvcmUobmFtZSk7Ci0KLSAgICBBU1NFUlQo
b2JqZWN0U3RvcmVJZCAhPSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQpOwogCiAg
ICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlOjpj
cmVhdGUobWV0YWRhdGEub2JqZWN0U3RvcmVzLmdldChvYmplY3RTdG9yZUlkKSwgb2JqZWN0U3Rv
cmVCYWNrZW5kLCB0aGlzKTsKICAgICBvYmplY3RTdG9yZUNyZWF0ZWQobmFtZSwgb2JqZWN0U3Rv
cmUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAppbmRleCBlMTY1MmQ2OTVkZjg1MzQxYjM2
MDg2ZDg2NzliMTM3NDQwMmZmOGViLi5lMzcyNjJhNGYyNDliNDBjMTNhYzJiMjBjMzQ0NzRhNTI4
MzMyYmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmNwcApAQCAtNzYsMTEgKzc2LDYgQEAg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IElEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGw6Om9iamVjdFN0b3IKICAgICByZXR1cm4gb2JqZWN0U3RvcmUucmVsZWFzZSgp
OwogfQogCi1QYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNl
cHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gb2JqZWN0U3RvcmUobV9kYXRhYmFzZS0+Z2V0
T2JqZWN0U3RvcmVJZChuYW1lKSwgZWMpOwotfQotCiBib29sIElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEltcGw6OnNjaGVkdWxlVGFzayhUYXNrVHlwZSB0eXBlLCBQYXNzT3duUHRyPFNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQ6OlRhc2s+IHRhc2ssIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4gYWJvcnRUYXNrKQogewogICAgIGlmIChtX3N0YXRlID09IEZpbmlzaGVkKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW1wbC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbC5oCmluZGV4IDRlNGRkZWNjMTEyMzY5NmNhNDY1NzUzZGI1ZjEyOTJi
YzNjZTM2ODEuLmU2MjRlZDQwYzU4ZjlmOTYwYWNiNjQ5MjRhMWU0M2Q3ZDFjYTNkMGUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFu
c2FjdGlvbkJhY2tlbmRJbXBsLmgKQEAgLTUyLDcgKzUyLDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgfklEQlRyYW5zYWN0aW9uQmFja2VuZEltcGwoKTsKIAogICAgIC8vIElEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZQotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYpOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U+IG9iamVjdFN0b3JlKGludDY0X3QsIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFs
IHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRzKCk7CiAgICAgdmlydHVhbCB2b2lkIGFib3J0KCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCmluZGV4IGQxMWUxODExY2U0MzViZjY3
ZjA4MzNkM2U1NTgwNmI4ODdjZTRlMzguLjJmNGNmMzI3YTBiODE2OWZhYTUzN2Y0ZjVlMzVkNTkz
YjUxMWJjYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZS5oCkBAIC01Myw3ICs1
Myw2IEBAIHB1YmxpYzoKICAgICAgICAgUHJlZW1wdGl2ZVRhc2sKICAgICB9OwogCi0gICAgdmly
dHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG9iamVjdFN0b3JlKGlu
dDY0X3QsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRpZENvbXBsZXRl
VGFza0V2ZW50cygpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY29tbWl0KCkgPSAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2FsbGJhY2tzUHJveHkuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCQ2FsbGJhY2tzUHJveHkuY3BwCmluZGV4IDQy
YWM3NmJhNTU3MjFkYmI5YzFhMjE5NDNhNjM5OGI2ODZmMjY1NTAuLjgxY2I1NDllNTQ3NzU5ZjM0
MWUxMTQzOWI1ODk3OGUxMzAwZTJiMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL0lEQkNhbGxiYWNrc1Byb3h5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9JREJDYWxsYmFja3NQcm94eS5jcHAKQEAgLTMxLDYgKzMxLDcgQEAKIAogI2lmIEVOQUJM
RShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1
ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJh
Y2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUJhY2tlbmRQcm94eS5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5k
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5k
UHJveHkuY3BwCmluZGV4IGY2ZDk2NDQ3MGVmYjQxNTE0NGZkYzFkMDQwODI5MDljZGNkOGU1MDgu
LmY3YjllZGMzZTUzMWE4YmRjZWVlOTMzODc1ZmVlZDRlOGQwMzU0YjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5LmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5jcHAK
QEAgLTk5LDE3ICs5OSw2IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kUHJveHk6OnNldFZlcnNp
b24oY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBQYXNzUmVmUHRyPElEQkNhCiAgICAgbV93ZWJJREJE
YXRhYmFzZS0+c2V0VmVyc2lvbih2ZXJzaW9uLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1wbChjYWxs
YmFja3MpLCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiBJREJEYXRhYmFzZUJhY2tlbmRQcm94eTo6dHJhbnNhY3Rpb24oRE9NU3RyaW5nTGlzdCog
c3RvcmVOYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0g
ICAgV2ViRE9NU3RyaW5nTGlzdCBuYW1lcyhzdG9yZU5hbWVzKTsKLSAgICBPd25QdHI8V2ViSURC
VHJhbnNhY3Rpb24+IHRyYW5zYWN0aW9uID0gYWRvcHRQdHIobV93ZWJJREJEYXRhYmFzZS0+dHJh
bnNhY3Rpb24obmFtZXMsIG1vZGUsIGVjKSk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikgewotICAg
ICAgICBBU1NFUlQoZWMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIElE
QlRyYW5zYWN0aW9uQmFja2VuZFByb3h5OjpjcmVhdGUodHJhbnNhY3Rpb24ucmVsZWFzZSgpKTsK
LX0KLQogUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFi
YXNlQmFja2VuZFByb3h5Ojp0cmFuc2FjdGlvbihjb25zdCBWZWN0b3I8aW50NjRfdD4mIG9iamVj
dFN0b3JlSWRzLCB1bnNpZ25lZCBzaG9ydCBtb2RlKQogewogICAgIE93blB0cjxXZWJJREJUcmFu
c2FjdGlvbj4gdHJhbnNhY3Rpb24gPSBhZG9wdFB0cihtX3dlYklEQkRhdGFiYXNlLT50cmFuc2Fj
dGlvbihvYmplY3RTdG9yZUlkcywgbW9kZSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5kUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5LmgKaW5kZXggOTE2ZjgzM2FiN2VmYmZj
ZDQwNjYxZWRhNzdmYTlhYzk1MzhkYzQ2OS4uM2RjYzI5NWYyMWVmZjliM2MxMTEzYzAyYzUzZWFl
MTBjOTUwYmQ1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCRGF0
YWJhc2VCYWNrZW5kUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJE
YXRhYmFzZUJhY2tlbmRQcm94eS5oCkBAIC00OCw3ICs0OCw2IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBXZWJDb3JlOjpJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7
CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGludDY0X3QsIFdlYkNvcmU6OklE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsK
ICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NS
ZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJEYXRh
YmFzZUNhbGxiYWNrcz4sIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIFBh
c3NSZWZQdHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2Fj
dGlvbihXZWJDb3JlOjpET01TdHJpbmdMaXN0KiBzdG9yZU5hbWVzLCB1bnNpZ25lZCBzaG9ydCBt
b2RlLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24oY29uc3Qg
VmVjdG9yPGludDY0X3Q+JiwgdW5zaWduZWQgc2hvcnQgbW9kZSk7CiAgICAgdmlydHVhbCB2b2lk
IGNsb3NlKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCRGF0YWJhc2VDYWxsYmFja3M+KTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5k
UHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNr
ZW5kUHJveHkuY3BwCmluZGV4IDZhMGQwMjc3MmI4NDRjN2VmNmFjMjBmYmNlYzNjYzMxZDFmMzYx
NDIuLjhlODlkZWIwMzNmM2RlYzk4OGFhNjdhYzNjZGU0YTVkOTY5NWZiZmQgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQ
cm94eS5jcHAKQEAgLTY3LDE2ICs2Nyw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJv
eHk6OmdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0CiAgICAg
bV93ZWJJREJPYmplY3RTdG9yZS0+Z2V0KGtleVJhbmdlLCBuZXcgV2ViSURCQ2FsbGJhY2tzSW1w
bChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwg
ZWMpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpwdXRXaXRoSW5kZXhL
ZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgUHV0TW9kZSBwdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2Fs
bGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhOYW1lcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGlu
ZGV4S2V5cywgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBv
aW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMs
IGluIHRoZSByZW5kZXJlciwKLSAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRl
cmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5
KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJv
eHkqPih0cmFuc2FjdGlvbik7Ci0gICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gd2ViSW5kZXhOYW1l
cyhpbmRleE5hbWVzKTsKLSAgICBXZWJWZWN0b3I8SW5kZXhLZXlzPiB3ZWJJbmRleEtleXMoaW5k
ZXhLZXlzKTsKLSAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5wdXRXaXRoSW5kZXhLZXlzKHZhbHVl
LCBrZXksIHN0YXRpY19jYXN0PFdlYklEQk9iamVjdFN0b3JlOjpQdXRNb2RlPihwdXRNb2RlKSwg
bmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdl
dFdlYklEQlRyYW5zYWN0aW9uKCksIHdlYkluZGV4TmFtZXMsIHdlYkluZGV4S2V5cywgZWMpOwot
fQotCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpwdXQoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBQdXRNb2Rl
IHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYg
aW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCiB7CiAgICAgLy8g
VGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8g
YSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKQEAgLTg1LDE2ICs3NSw2IEBAIHZv
aWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gdmFsdWUsIFBhCiAgICAgbV93ZWJJREJPYmplY3RTdG9yZS0+cHV0KHZhbHVl
LCBrZXksIHN0YXRpY19jYXN0PFdlYklEQk9iamVjdFN0b3JlOjpQdXRNb2RlPihwdXRNb2RlKSwg
bmV3IFdlYklEQkNhbGxiYWNrc0ltcGwoY2FsbGJhY2tzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdl
dFdlYklEQlRyYW5zYWN0aW9uKCksIGluZGV4SWRzLCBpbmRleEtleXMpOwogfQogCi12b2lkIElE
Qk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+
IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBW
ZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqIHRyYW5zYWN0aW9uKQotewotICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1
YXJhbnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVu
ZGVyZXIsCi0gICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUg
cHJveHkgb2JqZWN0cy4KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rp
b25Qcm94eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNh
Y3Rpb24pOwotICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHdlYkluZGV4TmFtZXMoaW5kZXhOYW1l
cyk7Ci0gICAgV2ViVmVjdG9yPEluZGV4S2V5cz4gd2ViSW5kZXhLZXlzKGluZGV4S2V5cyk7Ci0g
ICAgbV93ZWJJREJPYmplY3RTdG9yZS0+c2V0SW5kZXhLZXlzKHBycFByaW1hcnlLZXksIHdlYklu
ZGV4TmFtZXMsIHdlYkluZGV4S2V5cywgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5z
YWN0aW9uKCkpOwotfQotCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRl
eEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2
NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCiB7CiAgICAgLy8gVGhlIHRy
YW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94
eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKQEAgLTEzMCwyNSArMTEwLDYgQEAgUGFzc1Jl
ZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5
OjpjcmVhdGVJbmRleChpbnQKICAgICByZXR1cm4gSURCSW5kZXhCYWNrZW5kUHJveHk6OmNyZWF0
ZShpbmRleC5yZWxlYXNlKCkpOwogfQogCi1QYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVy
ZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVs
dGlFbnRyeSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3Vh
cmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5k
ZXJlciwKLSAgICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBw
cm94eSBvYmplY3RzLgotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlv
blByb3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2Fj
dGlvbik7Ci0gICAgT3duUHRyPFdlYklEQkluZGV4PiBpbmRleCA9IGFkb3B0UHRyKG1fd2ViSURC
T2JqZWN0U3RvcmUtPmNyZWF0ZUluZGV4KG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRy
eSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCksIGVjKSk7Ci0gICAg
aWYgKCFpbmRleCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIElEQkluZGV4QmFja2Vu
ZFByb3h5OjpjcmVhdGUoaW5kZXgucmVsZWFzZSgpKTsKLX0KLQotdm9pZCBJREJPYmplY3RTdG9y
ZUJhY2tlbmRQcm94eTo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRl
eE5hbWVzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uKQotewot
ICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUgYSBwb2lu
dGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCi0gICAgLy8gYWxsIGlt
cGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkgb2JqZWN0cy4KLSAgICBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94eSA9IHN0YXRpY19jYXN0
PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24pOwotICAgIG1fd2ViSURC
T2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShXZWJWZWN0b3I8V2ViU3RyaW5nPihpbmRleE5h
bWVzKSwgKnRyYW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkpOwotfQotCiB2
b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVj
dG9yPGludDY0X3Q+JiBpbmRleElkcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0
cmFuc2FjdGlvbikKIHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50
ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVy
LApAQCAtMTU3LDE0ICsxMTgsNiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5Ojpz
ZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcwogICAgIG1fd2Vi
SURCT2JqZWN0U3RvcmUtPnNldEluZGV4ZXNSZWFkeShXZWJWZWN0b3I8bG9uZyBsb25nPihpbmRl
eElkcyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpKTsKIH0KIAot
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2Vu
ZFByb3h5OjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIE93blB0cjxXZWJJREJJbmRleD4gaW5kZXggPSBhZG9wdFB0cihtX3dlYklEQk9iamVjdFN0
b3JlLT5pbmRleChuYW1lLCBlYykpOwotICAgIGlmICghaW5kZXgpCi0gICAgICAgIHJldHVybiAw
OwotICAgIHJldHVybiBJREJJbmRleEJhY2tlbmRQcm94eTo6Y3JlYXRlKGluZGV4LnJlbGVhc2Uo
KSk7Ci19Ci0KIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RT
dG9yZUJhY2tlbmRQcm94eTo6aW5kZXgoaW50NjRfdCBpbmRleElkKQogewogICAgIE93blB0cjxX
ZWJJREJJbmRleD4gaW5kZXggPSBhZG9wdFB0cihtX3dlYklEQk9iamVjdFN0b3JlLT5pbmRleChp
bmRleElkKSk7CkBAIC0xNzMsMTQgKzEyNiw2IEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5k
SW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6aW5kZXgoaW50NjRfdCBpCiAg
ICAgcmV0dXJuIElEQkluZGV4QmFja2VuZFByb3h5OjpjcmVhdGUoaW5kZXgucmVsZWFzZSgpKTsK
IH0KIAotdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6ZGVsZXRlSW5kZXgoY29uc3Qg
U3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBp
cyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhl
IHJlbmRlcmVyLAotICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMg
YXJlIHByb3h5IG9iamVjdHMuCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5z
YWN0aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRy
YW5zYWN0aW9uKTsKLSAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5kZWxldGVJbmRleChuYW1lLCAq
dHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgZWMpOwotfQotCiB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpkZWxldGVJbmRleChjb25zdCBpbnQ2NF90IGlu
ZGV4SWQsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJh
bnRlZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVy
ZXIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9y
ZUJhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kUHJveHkuaAppbmRleCA3OTExM2FlOTU2NWEzMTRkY2NmMmJhYzc4MGViYTc1Mzk0
ZjZjZGFkLi5kYThmNmJiZGQ4MmQxZjJiMDg5NDNlNzgzMmVlNThhZWJlMjI1OWVjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94
eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2Vu
ZFByb3h5LmgKQEAgLTQ0LDIxICs0NCwxNSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kUHJveHkoKTsKIAogICAgIHZpcnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tz
PiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhj
ZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQ
dHI8V2ViQ29yZTo6U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNv
cmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFdURjo6VmVjdG9yPFdU
Rjo6U3RyaW5nPiYsIGNvbnN0IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpFeGNl
cHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFdlYkNvcmU6OlNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5PiwgUHV0TW9k
ZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3JlOjpJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBXVEY6OlZlY3RvcjxpbnQ2NF90PiYsIGNvbnN0
IFdURjo6VmVjdG9yPEluZGV4S2V5cz4mKTsKICAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlRnVuY3Rp
b24oUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8V2ViQ29yZTo6
SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwg
V2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcihQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFBhc3NSZWZQdHI8
V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVJbmRleChpbnQ2NF90IGlk
LCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYkNvcmU6OklEQktleVBhdGgmLCBib29sIHVu
aXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50
cnksIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4
Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8
V2ViQ29yZTo6SURCS2V5PiBwcnBQcmltYXJ5S2V5LCBjb25zdCBXVEY6OlZlY3RvcjxXVEY6OlN0
cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFdURjo6VmVjdG9yPGlu
dDY0X3Q+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBXZWJDb3JlOjpJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqKTsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNv
bnN0IFZlY3RvcjxTdHJpbmc+JiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50
NjRfdD4mLCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKIAotICAg
IFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChjb25z
dCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVmUHRy
PFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoaW50NjRfdCk7Ci0gICAg
dm9pZCBkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lk
IGRlbGV0ZUluZGV4KGludDY0X3QsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZpcnR1YWwgdm9pZCBvcGVu
Q3Vyc29yKFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCS2V5UmFuZ2U+LCBXZWJDb3JlOjpJREJDdXJz
b3I6OkRpcmVjdGlvbiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U6OlRhc2tUeXBlLCBXZWJDb3JlOjpJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2RlJik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwu
Y3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcApp
bmRleCA5MGMyNjIzODk0OWU0NGEwNzQyOTk1NGNmN2Q4OWUxNTY1MGUxYWEwLi41OWFiZDUzMjky
ODAxZjMwNDkzZGJkMGM0N2Y2ZTAwZDM2MGJkZDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKQEAgLTcwLDExICs3MCw2IEBAIFdl
YklEQk9iamVjdFN0b3JlKiBXZWJJREJEYXRhYmFzZUltcGw6OmNyZWF0ZU9iamVjdFN0b3JlKGxv
bmcgbG9uZyBpZCwgY29uc3QgV2ViCiAgICAgcmV0dXJuIG5ldyBXZWJJREJPYmplY3RTdG9yZUlt
cGwob2JqZWN0U3RvcmUpOwogfQogCi12b2lkIFdlYklEQkRhdGFiYXNlSW1wbDo6ZGVsZXRlT2Jq
ZWN0U3RvcmUoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYg
dHJhbnNhY3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIG1fZGF0YWJhc2VCYWNr
ZW5kLT5kZWxldGVPYmplY3RTdG9yZShuYW1lLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOwotfQotCiB2b2lkIFdlYklEQkRhdGFiYXNlSW1wbDo6
ZGVsZXRlT2JqZWN0U3RvcmUobG9uZyBsb25nIG9iamVjdFN0b3JlSWQsIGNvbnN0IFdlYklEQlRy
YW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgbV9k
YXRhYmFzZUJhY2tlbmQtPmRlbGV0ZU9iamVjdFN0b3JlKG9iamVjdFN0b3JlSWQsIHRyYW5zYWN0
aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7CkBAIC04NSwxNyAr
ODAsNiBAQCB2b2lkIFdlYklEQkRhdGFiYXNlSW1wbDo6c2V0VmVyc2lvbihjb25zdCBXZWJTdHJp
bmcmIHZlcnNpb24sIFdlYklEQkNhbGxiYWNrcyogYwogICAgIG1fZGF0YWJhc2VCYWNrZW5kLT5z
ZXRWZXJzaW9uKHZlcnNpb24sIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2Fs
bGJhY2tzKSksIG1fZGF0YWJhc2VDYWxsYmFja3MsIGVjKTsKIH0KIAotV2ViSURCVHJhbnNhY3Rp
b24qIFdlYklEQkRhdGFiYXNlSW1wbDo6dHJhbnNhY3Rpb24oY29uc3QgV2ViRE9NU3RyaW5nTGlz
dCYgbmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQotewot
ICAgIFJlZlB0cjxET01TdHJpbmdMaXN0PiBuYW1lTGlzdCA9IFBhc3NSZWZQdHI8RE9NU3RyaW5n
TGlzdD4obmFtZXMpOwotICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+
IHRyYW5zYWN0aW9uID0gbV9kYXRhYmFzZUJhY2tlbmQtPnRyYW5zYWN0aW9uKG5hbWVMaXN0Lmdl
dCgpLCBtb2RlLCBlYyk7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbikgewotICAgICAgICBBU1NFUlQo
ZWMpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIG5ldyBXZWJJREJUcmFu
c2FjdGlvbkltcGwodHJhbnNhY3Rpb24pOwotfQotCiBXZWJJREJUcmFuc2FjdGlvbiogV2ViSURC
RGF0YWJhc2VJbXBsOjp0cmFuc2FjdGlvbihjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYgb2Jq
ZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpCiB7CiAgICAgVmVjdG9yPGludDY0X3Q+
IG9iamVjdFN0b3JlSWRMaXN0KG9iamVjdFN0b3JlSWRzLnNpemUoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuaCBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5oCmluZGV4IDY1YTE5NjY4YTli
NzI5Nzc0Nzc5YjZiZTc0MTZiN2I3NDhmMjgxNjQuLmU3Mjg3NDJjNjQ3NDg0MTI2Y2YzZWE3ZGQ5
NTZlZGZmMzJjNzI4MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YklEQkRhdGFiYXNlSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklE
QkRhdGFiYXNlSW1wbC5oCkBAIC01MywxMCArNTMsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBX
ZWJJREJNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBXZWJJREJPYmpl
Y3RTdG9yZSogY3JlYXRlT2JqZWN0U3RvcmUobG9uZyBsb25nLCBjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIGNvbnN0IFdlYklEQktleVBhdGgmLCBib29sIGF1dG9JbmNyZW1lbnQsIGNvbnN0IFdlYklE
QlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgdm9pZCBkZWxl
dGVPYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RT
dG9yZShsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBX
ZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIHNldFZlcnNpb24oY29uc3QgV2Vi
U3RyaW5nJiB2ZXJzaW9uLCBXZWJJREJDYWxsYmFja3MqLCBXZWJFeGNlcHRpb25Db2RlJik7Ci0g
ICAgdmlydHVhbCBXZWJJREJUcmFuc2FjdGlvbiogdHJhbnNhY3Rpb24oY29uc3QgV2ViRE9NU3Ry
aW5nTGlzdCYgbmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIFdlYkV4Y2VwdGlvbkNvZGUmKTsK
ICAgICB2aXJ0dWFsIFdlYklEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbihjb25zdCBXZWJWZWN0
b3I8bG9uZyBsb25nPiYgbmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUpOwogICAgIHZpcnR1YWwg
dm9pZCBmb3JjZUNsb3NlKCk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcAppbmRl
eCA4NWJhYzEzYjM0ODAwZDQyMGYxY2QxODc2MGJkOTU2MzhjZDY0ZTVjLi4xMDI4MDRiYzgxZGY2
NDhhZWJmYjA5MmUwYzE0YTg5MzIyYjlkNTk3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKQEAgLTU4LDIzICs1OCw2IEBA
IHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpnZXQoY29uc3QgV2ViSURCS2V5UmFuZ2UmIGtl
eVJhbmdlLCBXZWJJREJDYWxsYmFja3MqCiAgICAgbV9vYmplY3RTdG9yZS0+Z2V0KGtleVJhbmdl
LCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCB0cmFuc2Fj
dGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgZWMpOwogfQogCi12b2lk
IFdlYklEQk9iamVjdFN0b3JlSW1wbDo6cHV0V2l0aEluZGV4S2V5cyhjb25zdCBXZWJTZXJpYWxp
emVkU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBXZWJJREJLZXkmIGtleSwgUHV0TW9kZSBwdXRN
b2RlLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNrcywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uLCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgd2ViSW5kZXhOYW1lcywg
Y29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mIHdlYkluZGV4S2V5cywgV2ViRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgQVNTRVJUKHdlYkluZGV4TmFtZXMuc2l6ZSgpID09IHdlYkluZGV4
S2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxTdHJpbmc+IGluZGV4TmFtZXMod2ViSW5kZXhOYW1l
cy5zaXplKCkpOwotICAgIFZlY3RvcjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6Oklu
ZGV4S2V5cz4gaW5kZXhLZXlzKHdlYkluZGV4S2V5cy5zaXplKCkpOwotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCB3ZWJJbmRleE5hbWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGluZGV4
TmFtZXNbaV0gPSB3ZWJJbmRleE5hbWVzW2ldOwotICAgICAgICBWZWN0b3I8UmVmUHRyPElEQktl
eT4gPiBpbmRleEtleUxpc3Qod2ViSW5kZXhLZXlzW2ldLnNpemUoKSk7Ci0gICAgICAgIGZvciAo
c2l6ZV90IGogPSAwOyBqIDwgd2ViSW5kZXhLZXlzW2ldLnNpemUoKTsgKytqKQotICAgICAgICAg
ICAgaW5kZXhLZXlMaXN0W2pdID0gd2ViSW5kZXhLZXlzW2ldW2pdOwotICAgICAgICBpbmRleEtl
eXNbaV0gPSBpbmRleEtleUxpc3Q7Ci0gICAgfQotCi0gICAgbV9vYmplY3RTdG9yZS0+cHV0V2l0
aEluZGV4S2V5cyh2YWx1ZSwga2V5LCBzdGF0aWNfY2FzdDxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OlB1dE1vZGU+KHB1dE1vZGUpLCBJREJDYWxsYmFja3NQcm94eTo6Y3JlYXRlKGFk
b3B0UHRyKGNhbGxiYWNrcykpLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UoKSwgaW5kZXhOYW1lcywgaW5kZXhLZXlzLCBlYyk7Ci19Ci0KIHZvaWQgV2ViSURC
T2JqZWN0U3RvcmVJbXBsOjpwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1
ZSwgY29uc3QgV2ViSURCS2V5JiBrZXksIFB1dE1vZGUgcHV0TW9kZSwgV2ViSURCQ2FsbGJhY2tz
KiBjYWxsYmFja3MsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgY29uc3Qg
V2ViVmVjdG9yPGxvbmcgbG9uZz4mIHdlYkluZGV4SWRzLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5k
ZXhLZXlzPiYgd2ViSW5kZXhLZXlzKQogewogICAgIEFTU0VSVCh3ZWJJbmRleElkcy5zaXplKCkg
PT0gd2ViSW5kZXhLZXlzLnNpemUoKSk7CkBAIC05MiwyMiArNzUsNiBAQCB2b2lkIFdlYklEQk9i
amVjdFN0b3JlSW1wbDo6cHV0KGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYgdmFsdWUs
IGNvbnN0IFdlYgogICAgIG1fb2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwga2V5LCBzdGF0aWNfY2Fz
dDxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGU+KHB1dE1vZGUpLCBJREJD
YWxsYmFja3NQcm94eTo6Y3JlYXRlKGFkb3B0UHRyKGNhbGxiYWNrcykpLCB0cmFuc2FjdGlvbi5n
ZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSwgaW5kZXhJZHMsIGluZGV4S2V5cyk7
CiB9CiAKLXZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleEtleXMoY29uc3QgV2Vi
SURCS2V5JiBwcmltYXJ5S2V5LCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgd2ViSW5kZXhO
YW1lcywgY29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mIHdlYkluZGV4S2V5cywgY29uc3Qg
V2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQotewotICAgIEFTU0VSVCh3ZWJJbmRleE5h
bWVzLnNpemUoKSA9PSB3ZWJJbmRleEtleXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8U3RyaW5nPiBp
bmRleE5hbWVzKHdlYkluZGV4TmFtZXMuc2l6ZSgpKTsKLSAgICBWZWN0b3I8SURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleXM+IGluZGV4S2V5cyh3ZWJJbmRleEtleXMuc2l6
ZSgpKTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViSW5kZXhOYW1lcy5zaXplKCk7
ICsraSkgewotICAgICAgICBpbmRleE5hbWVzW2ldID0gd2ViSW5kZXhOYW1lc1tpXTsKLSAgICAg
ICAgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4gaW5kZXhLZXlMaXN0KHdlYkluZGV4S2V5c1tpXS5z
aXplKCkpOwotICAgICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IHdlYkluZGV4S2V5c1tpXS5z
aXplKCk7ICsraikKLSAgICAgICAgICAgIGluZGV4S2V5TGlzdFtqXSA9IHdlYkluZGV4S2V5c1tp
XVtqXTsKLSAgICAgICAgaW5kZXhLZXlzW2ldID0gaW5kZXhLZXlMaXN0OwotICAgIH0KLSAgICBt
X29iamVjdFN0b3JlLT5zZXRJbmRleEtleXMocHJpbWFyeUtleSwgaW5kZXhOYW1lcywgaW5kZXhL
ZXlzLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UoKSk7Ci19
Ci0KIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleEtleXMoY29uc3QgV2ViSURC
S2V5JiBwcmltYXJ5S2V5LCBjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25nPiYgd2ViSW5kZXhJZHMs
IGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3ZWJJbmRleEtleXMsIGNvbnN0IFdlYklE
QlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbikKIHsKICAgICBBU1NFUlQod2ViSW5kZXhJZHMuc2l6
ZSgpID09IHdlYkluZGV4S2V5cy5zaXplKCkpOwpAQCAtMTI0LDE0ICs5MSw2IEBAIHZvaWQgV2Vi
SURCT2JqZWN0U3RvcmVJbXBsOjpzZXRJbmRleEtleXMoY29uc3QgV2ViSURCS2V5JiBwcmltYXJ5
S2V5LCBjb25zdCBXZWJWCiAgICAgbV9vYmplY3RTdG9yZS0+c2V0SW5kZXhLZXlzKHByaW1hcnlL
ZXksIGluZGV4SWRzLCBpbmRleEtleXMsIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSgpKTsKIH0KIAotdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldElu
ZGV4ZXNSZWFkeShjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgd2ViSW5kZXhOYW1lcywgY29u
c3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uKQotewotICAgIFZlY3RvcjxTdHJpbmc+
IGluZGV4TmFtZXMod2ViSW5kZXhOYW1lcy5zaXplKCkpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgd2ViSW5kZXhOYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgaW5kZXhOYW1lc1tpXSA9
IHdlYkluZGV4TmFtZXNbaV07Ci0gICAgbV9vYmplY3RTdG9yZS0+c2V0SW5kZXhlc1JlYWR5KGlu
ZGV4TmFtZXMsIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgp
KTsKLX0KLQogdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4ZXNSZWFkeShjb25z
dCBXZWJWZWN0b3I8bG9uZyBsb25nPiYgd2ViSW5kZXhOYW1lcywgY29uc3QgV2ViSURCVHJhbnNh
Y3Rpb24mIHRyYW5zYWN0aW9uKQogewogICAgIFZlY3RvcjxpbnQ2NF90PiBpbmRleElkcyh3ZWJJ
bmRleE5hbWVzLnNpemUoKSk7CkBAIC0xNTgsMTQgKzExNyw2IEBAIFdlYklEQkluZGV4KiBXZWJJ
REJPYmplY3RTdG9yZUltcGw6OmNyZWF0ZUluZGV4KGxvbmcgbG9uZyBpZCwgY29uc3QgV2ViU3Ry
aW5nJiBuCiAgICAgcmV0dXJuIG5ldyBXZWJJREJJbmRleEltcGwoaW5kZXgpOwogfQogCi1XZWJJ
REJJbmRleCogV2ViSURCT2JqZWN0U3RvcmVJbXBsOjppbmRleChjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJ
bnRlcmZhY2U+IGluZGV4ID0gbV9vYmplY3RTdG9yZS0+aW5kZXgobmFtZSwgZWMpOwotICAgIGlm
ICghaW5kZXgpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBuZXcgV2ViSURCSW5kZXhJ
bXBsKGluZGV4KTsKLX0KLQogV2ViSURCSW5kZXgqIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6aW5k
ZXgobG9uZyBsb25nIG9iamVjdFN0b3JlSWQpCiB7CiAgICAgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gaW5kZXggPSBtX29iamVjdFN0b3JlLT5pbmRleChvYmplY3RTdG9yZUlkKTsK
QEAgLTE3NCwxMSArMTI1LDYgQEAgV2ViSURCSW5kZXgqIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6
aW5kZXgobG9uZyBsb25nIG9iamVjdFN0b3JlSWQpCiAgICAgcmV0dXJuIG5ldyBXZWJJREJJbmRl
eEltcGwoaW5kZXgpOwogfQogCi12b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6ZGVsZXRlSW5k
ZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNh
Y3Rpb24sIFdlYkV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIG1fb2JqZWN0U3RvcmUtPmRlbGV0
ZUluZGV4KG5hbWUsIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSgpLCBlYyk7Ci19Ci0KIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpkZWxldGVJbmRleChs
b25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0
aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBtX29iamVjdFN0b3JlLT5kZWxldGVJ
bmRleChvYmplY3RTdG9yZUlkLCB0cmFuc2FjdGlvbi5nZXRJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UoKSwgZWMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViSURCT2JqZWN0U3RvcmVJbXBsLmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJ
REJPYmplY3RTdG9yZUltcGwuaAppbmRleCA1ZGUzYzlhMTVhZDhlZjVmNDYwYTg4NmFjMWNkZWFi
Y2NiZDU4MmY4Li43MGYxOWNjOGZiN2Q5NjI2ZjMwOGM2NTBmNTRkOGQyYzBlYjg0ZjhkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwu
aApAQCAtNDYsMTkgKzQ2LDE0IEBAIHB1YmxpYzoKICAgICB+V2ViSURCT2JqZWN0U3RvcmVJbXBs
KCk7CiAKICAgICB2b2lkIGdldChjb25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkNhbGxiYWNr
cyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgcHV0V2l0aEluZGV4S2V5cyhjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmLCBjb25z
dCBXZWJJREJLZXkmLCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiwgY29uc3QgV2ViVmVjdG9yPFdl
YkluZGV4S2V5cz4mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBwdXQoY29uc3QgV2Vi
U2VyaWFsaXplZFNjcmlwdFZhbHVlJiwgY29uc3QgV2ViSURCS2V5JiwgUHV0TW9kZSwgV2ViSURC
Q2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBjb25zdCBXZWJWZWN0b3I8bG9u
ZyBsb25nPiYsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+Jik7Ci0gICAgdm9pZCBzZXRJ
bmRleEtleXMoY29uc3QgV2ViSURCS2V5JiwgY29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mIGlu
ZGV4TmFtZXMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiwgY29uc3QgV2ViSURCVHJh
bnNhY3Rpb24mKTsKICAgICB2b2lkIHNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmLCBjb25z
dCBXZWJWZWN0b3I8bG9uZyBsb25nPiYgaW5kZXhOYW1lcywgY29uc3QgV2ViVmVjdG9yPFdlYklu
ZGV4S2V5cz4mLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpOwotICAgIHZvaWQgc2V0SW5kZXhl
c1JlYWR5KGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiwgY29uc3QgV2ViSURCVHJhbnNhY3Rp
b24mKTsKICAgICB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBXZWJWZWN0b3I8bG9uZyBsb25n
PiYsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7CiAgICAgdm9pZCBkZWxldGVGdW5jdGlvbihj
b25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5z
YWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgY2xlYXIoV2ViSURCQ2FsbGJh
Y2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7CiAKICAg
ICBXZWJJREJJbmRleCogY3JlYXRlSW5kZXgobG9uZyBsb25nLCBjb25zdCBXZWJTdHJpbmcmIG5h
bWUsIGNvbnN0IFdlYklEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBj
b25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKLSAgICBXZWJJREJJ
bmRleCogaW5kZXgoY29uc3QgV2ViU3RyaW5nJiBuYW1lLCBXZWJFeGNlcHRpb25Db2RlJik7CiAg
ICAgV2ViSURCSW5kZXgqIGluZGV4KGxvbmcgbG9uZyk7Ci0gICAgdm9pZCBkZWxldGVJbmRleChj
b25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0
aW9uQ29kZSYpOwogICAgIHZvaWQgZGVsZXRlSW5kZXgobG9uZyBsb25nLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIHZvaWQgb3BlbkN1cnNvcihj
b25zdCBXZWJJREJLZXlSYW5nZSYsIFdlYklEQkN1cnNvcjo6RGlyZWN0aW9uLCBXZWJJREJDYWxs
YmFja3MqLCBXZWJJREJUcmFuc2FjdGlvbjo6VGFza1R5cGUsIGNvbnN0IFdlYklEQlRyYW5zYWN0
aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmNwcCBiL1NvdXJjZS9XZWJLaXQvY2hyb21p
dW0vc3JjL1dlYklEQlRyYW5zYWN0aW9uSW1wbC5jcHAKaW5kZXggNjYxNmQ2NzFmYzMwYzk3ZTY3
MjYxNGMxYTQxOTllM2E3ZDA4ODU3Ny4uNDBkN2Q3NTYzMTZjM2MzMWVhOGFiYzU0NDAwOWEwMDY2
MjY5YzI0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJh
bnNhY3Rpb25JbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJU
cmFuc2FjdGlvbkltcGwuY3BwCkBAIC00NywxNCArNDcsNiBAQCBXZWJJREJUcmFuc2FjdGlvbklt
cGw6On5XZWJJREJUcmFuc2FjdGlvbkltcGwoKQogewogfQogCi1XZWJJREJPYmplY3RTdG9yZSog
V2ViSURCVHJhbnNhY3Rpb25JbXBsOjpvYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUs
IEV4Y2VwdGlvbkNvZGUmIGVjKQotewotICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U+IG9iamVjdFN0b3JlID0gbV9iYWNrZW5kLT5vYmplY3RTdG9yZShuYW1lLCBlYyk7
Ci0gICAgaWYgKCFvYmplY3RTdG9yZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5l
dyBXZWJJREJPYmplY3RTdG9yZUltcGwob2JqZWN0U3RvcmUpOwotfQotCiBXZWJJREJPYmplY3RT
dG9yZSogV2ViSURCVHJhbnNhY3Rpb25JbXBsOjpvYmplY3RTdG9yZShsb25nIGxvbmcgaW5kZXhJ
ZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2Vu
ZEludGVyZmFjZT4gb2JqZWN0U3RvcmUgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKGluZGV4SWQs
IGVjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5z
YWN0aW9uSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rp
b25JbXBsLmgKaW5kZXggMWVlNmFiODAxOTdlZjc4ZmFmYTEzZTk2ZmQwNWY3MGYzN2JhZDc0OS4u
MGZiNjUzNzY3NjMxNmNlNzAwY2ZiYWM4ZGU4OTkzY2VjNjQ2NmE3NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmgKKysrIGIvU291
cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBsLmgKQEAgLTQxLDcg
KzQxLDYgQEAgcHVibGljOgogICAgIFdlYklEQlRyYW5zYWN0aW9uSW1wbChXVEY6OlBhc3NSZWZQ
dHI8V2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPik7CiAgICAgdmlydHVh
bCB+V2ViSURCVHJhbnNhY3Rpb25JbXBsKCk7CiAKLSAgICB2aXJ0dWFsIFdlYklEQk9iamVjdFN0
b3JlKiBvYmplY3RTdG9yZShjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYkV4Y2VwdGlvbkNvZGUm
KTsKICAgICB2aXJ0dWFsIFdlYklEQk9iamVjdFN0b3JlKiBvYmplY3RTdG9yZShsb25nIGxvbmcg
aW5kZXhJZCwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBjb21taXQoKTsK
ICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vdGVzdHMvSURCUmVxdWVzdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90
ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAKaW5kZXggNTJhMDM4ZDViZjU3NDRjZmI2MmZkYWYwOTE0
YzBjMTA3YjFlMTI0YS4uMjdmNmMxZTZiMzY0YTRlMjIzNmExNDI1NzViMzI5N2U2OWFmNmNmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJSZXF1ZXN0VGVzdC5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAK
QEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKIAorI2luY2x1ZGUg
IkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlLmgi
CiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQlRyYW5z
YWN0aW9uQ29vcmRpbmF0b3IuaCIK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173337</attachid>
            <date>2012-11-09 10:58:28 -0800</date>
            <delta_ts>2012-11-09 11:55:37 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-100426-20121109105635.patch</filename>
            <type>text/plain</type>
            <size>65004</size>
            <attacher name="Alec Flett">alecflett</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0MDIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2EyOWNjM2Y2NmY0MzQ4
YjY2ZjU5N2QxNjViZDNlNTAwMjEyYTBiYy4uNTlhMjFmYjk5OGRiMmI4Y2VjODdlNGM1MTJlNTc0
Yjc0YTczYTZlZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUwIEBACisyMDEyLTExLTAyICBBbGVj
IEZsZXR0ICA8YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IHN3
aXRjaCBmcm9udGVuZCB0byB1c2UgaW50NjRfdC1iYXNlZCByZWZlcmVuY2VzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjYKKworICAgICAgICBS
ZXZpZXdlZCBieSBUb255IENoYW5nLgorCisgICAgICAgIFJlbW92ZSBTdHJpbmctYmFzZWQgb2Jq
ZWN0U3RvcmUvaW5kZXggcmVmZXJlbmNlcywgb2Jzb2xldGVkIGJ5CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjUuCisKKyAgICAgICAgTm8gbmV3
IHRlc3RzIGFzIHRoaXMgaXMgdGhlIHNlY29uZCBoYWxmIG9mIGEgcmVmYWN0b3IuCisKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaDoKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFz
ZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OnRy
YW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tl
bmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNl
dFZlcnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJh
bnNhY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cnVu
SW50VmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmg6CisgICAgICAgIChJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbnRl
cmZhY2UuaDoKKyAgICAgICAgKElEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZSk6CisgICAgICAg
ICogTW9kdWxlcy9pbmRleGVkZGIvSURCTWV0YWRhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlTWV0YWRhdGE6OmZpbmRJbmRleCk6CisgICAgICAgIChJREJPYmplY3RTdG9y
ZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlTWV0YWRhdGE6OmNv
bnRhaW5zSW5kZXgpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpwdXQpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6aW5kZXgpOgorICAg
ICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCk6CisgICAgICAgIChXZWJD
b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsLmg6CisgICAgICAgIChJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsKToKKyAgICAgICAgKiBN
b2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaDoKKyAgICAg
ICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLTEuMC5qc29uOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3IuanNvbjoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9ySW5kZXhlZERCQWdl
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JJ
bmRleGVkREJBZ2VudDo6cmVxdWVzdERhdGEpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0
b3JJbmRleGVkREJBZ2VudC5oOgorICAgICAgICAoSW5zcGVjdG9ySW5kZXhlZERCQWdlbnQpOgor
CiAyMDEyLTExLTA4ICBTaGVyaWZmIEJvdCAgPHdlYmtpdC5yZXZpZXcuYm90QGdtYWlsLmNvbT4K
IAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTM0MDEwLgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L0NoYW5nZUxvZwppbmRleCBkNTg2ZmJhNDMyMjM5MmRlY2JiNzUzY2M0ZGMwYjRhMDAxNDgxYWRi
Li4yODAxM2UwMWNiZTQ0NDkzZWE4MzM3MjhmN2YxMmY2MGYyMjRhOGU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisyMDEyLTExLTAyICBBbGVjIEZsZXR0ICA8
YWxlY2ZsZXR0QGNocm9taXVtLm9yZz4KKworICAgICAgICBJbmRleGVkREI6IHN3aXRjaCBmcm9u
dGVuZCB0byB1c2UgaW50NjRfdC1iYXNlZCByZWZlcmVuY2VzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDA0MjYKKworICAgICAgICBSZXZpZXdlZCBi
eSBUb255IENoYW5nLgorCisgICAgICAgIFJlbW92ZSBpbXBsZW1lbnRhdGlvbiBzdHVicyBmcm9t
IGNocm9taXVtIEFQSSBmb3IKKyAgICAgICAgbWV0aG9kcyBvYnNvbGV0ZWQgYnkgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMDQyNQorCisgICAgICAgICogc3JjL0lE
Qk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKiBzcmMvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kUHJveHkuaDoKKyAgICAgICAgKElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5KToK
KyAgICAgICAgKiBzcmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcDoKKyAgICAgICAgKiBzcmMvV2Vi
SURCRGF0YWJhc2VJbXBsLmg6CisgICAgICAgIChXZWJJREJEYXRhYmFzZUltcGwpOgorICAgICAg
ICAqIHNyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwOgorICAgICAgICAqIHNyYy9XZWJJREJP
YmplY3RTdG9yZUltcGwuaDoKKyAgICAgICAgKFdlYklEQk9iamVjdFN0b3JlSW1wbCk6CisKIDIw
MTItMTEtMDggIFNoZXJpZmYgQm90ICA8d2Via2l0LnJldmlldy5ib3RAZ21haWwuY29tPgogCiAg
ICAgICAgIFVucmV2aWV3ZWQsIHJvbGxpbmcgb3V0IHIxMzQwMTAuCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnkuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQW55LmNwcAppbmRleCBjNjAzMjU1YTdlN2MwOGIwNzY2YTM1
NWQwZjk4NWRmZmRhMTIyYWFjLi5jOWQzMDZkZjNjNjljNTdlMzNlNWRhNDEwNmI2MzNiZTM4NTAz
YzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJBbnku
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkFueS5jcHAKQEAg
LTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJJREJJbmRleC5oIgogI2luY2x1ZGUgIklEQktleVBh
dGguaCIKICNpbmNsdWRlICJJREJPYmplY3RTdG9yZS5oIgorI2luY2x1ZGUgIkRPTVN0cmluZ0xp
c3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDYWxsYmFja3MuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNrcy5oCmluZGV4IGRmZDhlMjA5MjA0ZWMwZTRiYjlhYzI5
OTk3MWNmMjJjYzRmMWYwM2MuLmQxNTExNDU0ZDgxODk3MGEyM2Y1ZGVkOGI2MjI4MzA3M2NiMTgy
NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxi
YWNrcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkNhbGxiYWNr
cy5oCkBAIC0yOSw3ICsyOSw2IEBACiAjaWZuZGVmIElEQkNhbGxiYWNrc19oCiAjZGVmaW5lIElE
QkNhbGxiYWNrc19oCiAKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURC
RGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFcnJvci5o
IgogI2luY2x1ZGUgIklEQktleS5oIgpAQCAtNDEsNiArNDAsNyBAQAogI2lmIEVOQUJMRShJTkRF
WEVEX0RBVEFCQVNFKQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBET01TdHJpbmdMaXN0
OwogY2xhc3MgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTsKIGNsYXNzIElEQk9iamVjdFN0b3Jl
QmFja2VuZEludGVyZmFjZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCRGF0YWJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCRGF0YWJhc2UuY3BwCmluZGV4IGZjY2I0NTZjNWQ2OGEyMTQ2N2Y1OGYwOWNkYzYyN2Zj
MzBmZDk3ODIuLjIwYjBmZjg5YmExY2FiNGE4OTUxMjhmMTQ0NjJmY2RmNDIzMjJhNTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKQEAg
LTI4LDYgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShJTkRFWEVEX0RBVEFCQVNFKQogCisjaW5jbHVk
ZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIkV2ZW50UXVldWUuaCIKICNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiSURCQW55LmgiCkBAIC0xNDIsNyArMTQzLDcgQEAg
UGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgbmFtZSwgY28KICAgICAgICAgICAgIGtleVBhdGggPSBJREJLZXlQYXRo
KGtleVBhdGhTdHJpbmcpOwogICAgIH0KIAotICAgIGlmIChtX21ldGFkYXRhLmNvbnRhaW5zT2Jq
ZWN0U3RvcmUobmFtZSkpIHsKKyAgICBpZiAoY29udGFpbnNPYmplY3RTdG9yZShuYW1lKSkgewog
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKICAgICAg
ICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMTg4LDEzICsxODksMTMgQEAgdm9pZCBJREJEYXRhYmFz
ZTo6ZGVsZXRlT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGludDY0IG9iamVjdFN0b3JlSWQgPSBt
X21ldGFkYXRhLmZpbmRPYmplY3RTdG9yZShuYW1lKTsKKyAgICBpbnQ2NCBvYmplY3RTdG9yZUlk
ID0gZmluZE9iamVjdFN0b3JlSWQobmFtZSk7CiAgICAgaWYgKG9iamVjdFN0b3JlSWQgPT0gSURC
T2JqZWN0U3RvcmVNZXRhZGF0YTo6SW52YWxpZElkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgbV9iYWNrZW5kLT5kZWxldGVPYmplY3RTdG9yZShuYW1lLCBtX3ZlcnNpb25DaGFuZ2VU
cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgbV9iYWNrZW5kLT5kZWxldGVPYmplY3RT
dG9yZShvYmplY3RTdG9yZUlkLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2VuZCgp
LCBlYyk7CiAgICAgaWYgKCFlYykgewogICAgICAgICBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlv
bi0+b2JqZWN0U3RvcmVEZWxldGVkKG5hbWUpOwogICAgICAgICBtX21ldGFkYXRhLm9iamVjdFN0
b3Jlcy5yZW1vdmUob2JqZWN0U3RvcmVJZCk7CkBAIC0yNDMsMTggKzI0NCwyMSBAQCBQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uPiBJREJEYXRhYmFzZTo6dHJhbnNhY3Rpb24oU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKKyAgICBWZWN0b3I8
aW50NjRfdD4gb2JqZWN0U3RvcmVJZHM7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdG9y
ZU5hbWVzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICghbV9tZXRhZGF0YS5jb250YWlu
c09iamVjdFN0b3JlKHN0b3JlTmFtZXMtPml0ZW0oaSkpKSB7CisgICAgICAgIGludDY0X3Qgb2Jq
ZWN0U3RvcmVJZCA9IGZpbmRPYmplY3RTdG9yZUlkKHN0b3JlTmFtZXMtPml0ZW0oaSkpOworICAg
ICAgICBpZiAob2JqZWN0U3RvcmVJZCA9PSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlk
SWQpIHsKICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9V
TkRfRVJSOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KKyAgICAgICAgb2JqZWN0
U3RvcmVJZHMuYXBwZW5kKG9iamVjdFN0b3JlSWQpOwogICAgIH0KIAogICAgIC8vIFdlIG5lZWQg
dG8gY3JlYXRlIGEgbmV3IHRyYW5zYWN0aW9uIHN5bmNocm9ub3VzbHkuIExvY2tzIGFyZSBhY3F1
aXJlZCBhc3luY2hyb25vdXNseS4gT3BlcmF0aW9ucwogICAgIC8vIGNhbiBiZSBxdWV1ZWQgYWdh
aW5zdCB0aGUgdHJhbnNhY3Rpb24gYXQgYW55IHBvaW50LiBUaGV5IHdpbGwgc3RhcnQgZXhlY3V0
aW5nIGFzIHNvb24gYXMgdGhlCiAgICAgLy8gYXBwcm9wcmlhdGUgbG9ja3MgaGF2ZSBiZWVuIGFj
cXVpcmVkLgogICAgIC8vIEFsc28gbm90ZSB0aGF0IGVhY2ggYmFja2VuZCBvYmplY3QgY29ycmVz
cG9uZHMgdG8gZXhhY3RseSBvbmUgSURCVHJhbnNhY3Rpb24gb2JqZWN0LgotICAgIFJlZlB0cjxJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uQmFja2VuZCA9IG1fYmFj
a2VuZC0+dHJhbnNhY3Rpb24oc3RvcmVOYW1lcy5nZXQoKSwgbW9kZSwgZWMpOworICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uQmFja2VuZCA9IG1f
YmFja2VuZC0+dHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVJZHMsIG1vZGUpOwogICAgIGlmICghdHJh
bnNhY3Rpb25CYWNrZW5kKSB7CiAgICAgICAgIEFTU0VSVChlYyk7CiAgICAgICAgIHJldHVybiAw
OwpAQCAtMzU0LDYgKzM1OCwxNyBAQCBib29sIElEQkRhdGFiYXNlOjpkaXNwYXRjaEV2ZW50KFBh
c3NSZWZQdHI8RXZlbnQ+IGV2ZW50KQogICAgIHJldHVybiBFdmVudFRhcmdldDo6ZGlzcGF0Y2hF
dmVudChldmVudC5nZXQoKSk7CiB9CiAKK2ludDY0X3QgSURCRGF0YWJhc2U6OmZpbmRPYmplY3RT
dG9yZUlkKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKK3sKKyAgICBmb3IgKElEQkRhdGFiYXNl
TWV0YWRhdGE6Ok9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fbWV0YWRhdGEu
b2JqZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmVuZCgp
OyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9PSBuYW1lKSB7CisgICAgICAg
ICAgICBBU1NFUlQoaXQtPmtleSAhPSBJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJbnZhbGlkSWQp
OworICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZDsKK30KKwogdm9pZCBJREJEYXRh
YmFzZTo6c3RvcCgpCiB7CiAgICAgQWN0aXZlRE9NT2JqZWN0OjpzdG9wKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuaAppbmRleCA1ODE2MTY3M2M1
YjAzNDk2ZjYwNDA3NDdmMmUyYTVhNGU4ZWM5ZGFlLi43OWM4NzNkNTYyNTQyNDk1YThhNjI3MWM2
NjAwZmY4NzdmODg1MWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlLmgKQEAgLTkxLDEyICs5MSwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBkaXNw
YXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+IGV2ZW50LCBFeGNlcHRpb25Db2RlJiBlYykgeyBy
ZXR1cm4gRXZlbnRUYXJnZXQ6OmRpc3BhdGNoRXZlbnQoZXZlbnQsIGVjKTsgfQogICAgIHZpcnR1
YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+KTsKIAorICAgIGludDY0X3Qg
ZmluZE9iamVjdFN0b3JlSWQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKKyAgICBib29sIGNv
bnRhaW5zT2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGZpbmRPYmplY3RTdG9yZUlkKG5hbWUpICE9IElEQk9iamVjdFN0b3JlTWV0YWRh
dGE6OkludmFsaWRJZDsKKyAgICB9CisKICAgICB1c2luZyBSZWZDb3VudGVkPElEQkRhdGFiYXNl
Pjo6cmVmOwogICAgIHVzaW5nIFJlZkNvdW50ZWQ8SURCRGF0YWJhc2U+OjpkZXJlZjsKIAogcHJp
dmF0ZToKICAgICBJREJEYXRhYmFzZShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2U+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2Fs
bGJhY2tzPik7CiAKKwogICAgIC8vIEV2ZW50VGFyZ2V0CiAgICAgdmlydHVhbCB2b2lkIHJlZkV2
ZW50VGFyZ2V0KCkgeyByZWYoKTsgfQogICAgIHZpcnR1YWwgdm9pZCBkZXJlZkV2ZW50VGFyZ2V0
KCkgeyBkZXJlZigpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCmluZGV4IDVjN2JiZDhmNjU0YTAy
MmNhMTAzMjQzN2FmNTUzNjJkZDAwZTMxODYuLmU4ZTE0M2Y0Nzg4NGUwMDdhMWEwZWVlNDQ1YThl
NzkzNzFiZDg0M2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAj
aWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRlICJDcm9zc1RocmVhZFRhc2su
aCIKLSNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQmFja2luZ1N0b3Jl
LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJGYWN0
b3J5QmFja2VuZEltcGwuaCIKQEAgLTIxMiwxNiArMjExLDYgQEAgUGFzc1JlZlB0cjxJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZShp
bnQ2NF8KICAgICByZXR1cm4gbV9vYmplY3RTdG9yZXMuZ2V0KGlkKTsKIH0KIAotaW50NjRfdCBJ
REJEYXRhYmFzZUJhY2tlbmRJbXBsOjpnZXRPYmplY3RTdG9yZUlkKGNvbnN0IFN0cmluZyYgbmFt
ZSkKLXsKLSAgICBmb3IgKE9iamVjdFN0b3JlTWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG1fb2Jq
ZWN0U3RvcmVzLmJlZ2luKCk7IGl0ICE9IG1fb2JqZWN0U3RvcmVzLmVuZCgpOyArK2l0KSB7Ci0g
ICAgICAgIGlmIChpdC0+dmFsdWUtPm5hbWUoKSA9PSBuYW1lKQotICAgICAgICAgICAgcmV0dXJu
IGl0LT5rZXk7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAw
OwotfQotCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGlu
dDY0X3QgaWQsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIs
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIEFTU0VSVChtX29iamVjdFN0b3Jlcy5jb250YWlu
cyhpZCkpOwpAQCAtMjc0LDggKzI2Myw4IEBAIHZvaWQgSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
c2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2FsCiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8RE9NU3RyaW5nTGlzdD4gb2JqZWN0U3Rv
cmVOYW1lcyA9IERPTVN0cmluZ0xpc3Q6OmNyZWF0ZSgpOwotICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uSW50ZXJmYWNlID0gdGhpcy0+dHJhbnNh
Y3Rpb24ob2JqZWN0U3RvcmVOYW1lcy5nZXQoKSwgSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hB
TkdFLCBlYyk7CisgICAgVmVjdG9yPGludDY0X3Q+IG9iamVjdFN0b3JlSWRzOworICAgIFJlZlB0
cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uSW50ZXJmYWNlID0g
dGhpcy0+dHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVJZHMsIElEQlRyYW5zYWN0aW9uOjpWRVJTSU9O
X0NIQU5HRSk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0
aW9uID0gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6ZnJvbSh0cmFuc2FjdGlvbkludGVyZmFj
ZS5nZXQoKSk7CiAgICAgQVNTRVJUKCFlYyk7CiAKQEAgLTQzNCwxOSArNDIzLDEzIEBAIHZvaWQg
SURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cHJvY2Vzc1BlbmRpbmdDYWxscygpCiAgICAgQVNTRVJU
KG1fcGVuZGluZ09wZW5DYWxscy5pc0VtcHR5KCkpOwogfQogCi1QYXNzUmVmUHRyPElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6dHJhbnNhY3Rp
b24oRE9NU3RyaW5nTGlzdCosIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2VwdGlvbkNvZGUmKQor
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFj
a2VuZEltcGw6OnRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJ
ZHMsIHVuc2lnbmVkIHNob3J0IG1vZGUpCiB7Ci0gICAgLy8gRklYTUU6IEZpcnN0IHBhcmFtZXRl
ciBpc24ndCB1c2VkIGZvciBhbnl0aGluZyB5ZXQgYW55d2F5LCBhbmQgdGhpcyBtZXRob2QgaXMg
Z29pbmcgYXdheS4KLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbD4gdHJhbnNh
Y3Rpb24gPSBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsOjpjcmVhdGUoVmVjdG9yPGludDY0X3Q+
KCksIG1vZGUsIHRoaXMpOworICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsPiB0
cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmNyZWF0ZShvYmplY3RTdG9y
ZUlkcywgbW9kZSwgdGhpcyk7CiAgICAgbV90cmFuc2FjdGlvbnMuYWRkKHRyYW5zYWN0aW9uLmdl
dCgpKTsKICAgICByZXR1cm4gdHJhbnNhY3Rpb24ucmVsZWFzZSgpOwogfQogCi1QYXNzUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6
dHJhbnNhY3Rpb24oY29uc3QgVmVjdG9yPGludDY0X3Q+JiBvYmplY3RTdG9yZUlkcywgdW5zaWdu
ZWQgc2hvcnQgbW9kZSkKLXsKLSAgICByZXR1cm4gdHJhbnNhY3Rpb24ob2JqZWN0U3RvcmVJZHMs
IG1vZGUpOwotfQotCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om9wZW5Db25uZWN0aW9u
KFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCRGF0YWJh
c2VDYWxsYmFja3M+IGRhdGFiYXNlQ2FsbGJhY2tzKQogewogICAgIEFTU0VSVChtX2JhY2tpbmdT
dG9yZS5nZXQoKSk7CkBAIC00OTQsMTkgKzQ3NywxNSBAQCB2b2lkIElEQkRhdGFiYXNlQmFja2Vu
ZEltcGw6OnJ1bkludFZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbihpbnQ2NF90IHJlcXVlc3RlZFZl
cgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgUmVmUHRyPERPTVN0cmluZ0xpc3Q+IG9i
amVjdFN0b3JlTmFtZXMgPSBET01TdHJpbmdMaXN0OjpjcmVhdGUoKTsKLSAgICBFeGNlcHRpb25D
b2RlIGVjID0gMDsKLSAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0
cmFuc2FjdGlvbkludGVyZmFjZSA9IHRyYW5zYWN0aW9uKG9iamVjdFN0b3JlTmFtZXMuZ2V0KCks
IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSwgZWMpOworICAgIFZlY3RvcjxpbnQ2NF90
PiBvYmplY3RTdG9yZUlkczsKKyAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPiB0cmFuc2FjdGlvbkludGVyZmFjZSA9IHRyYW5zYWN0aW9uKG9iamVjdFN0b3JlSWRzLCBJ
REJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbXBsPiB0cmFuc2FjdGlvbiA9IElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw6OmZy
b20odHJhbnNhY3Rpb25JbnRlcmZhY2UuZ2V0KCkpOwotICAgIEFTU0VSVCghZWMpOwogCiAgICAg
UmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKICAgICBPd25Q
dHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFzaz4gaW50VmVyc2lvblRhc2sgPSBjcmVhdGVD
YWxsYmFja1Rhc2soJklEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldEludFZlcnNpb25JbnRlcm5h
bCwgZGF0YWJhc2UsIHJlcXVlc3RlZFZlcnNpb24sIGNhbGxiYWNrcywgZGF0YWJhc2VDYWxsYmFj
a3MsIHRyYW5zYWN0aW9uKTsKICAgICBPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6VGFz
az4gcmVzZXRWZXJzaW9uT25BYm9ydFRhc2sgPSBjcmVhdGVDYWxsYmFja1Rhc2soJklEQkRhdGFi
YXNlQmFja2VuZEltcGw6OnJlc2V0VmVyc2lvbiwgZGF0YWJhc2UsIG1fbWV0YWRhdGEudmVyc2lv
biwgbV9tZXRhZGF0YS5pbnRWZXJzaW9uKTsKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soaW50VmVyc2lvblRhc2sucmVsZWFzZSgpLCByZXNldFZlcnNpb25PbkFib3J0VGFzay5y
ZWxlYXNlKCkpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgb25lIG9mIHRoZSBmb2xsb3dp
bmcgbGluZXMuCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiAgICAgfQogICAg
IEFTU0VSVCghbV9wZW5kaW5nU2Vjb25kSGFsZk9wZW5XaXRoVmVyc2lvbik7CiAgICAgbV9kYXRh
YmFzZUNhbGxiYWNrc1NldC5hZGQoZGF0YWJhc2VDYWxsYmFja3MpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5o
CmluZGV4IDgxNGYxZGUyMWRmYmE4OTVjZDg1ZWZlZGVlNDc2MjkxMTdiNDgyOTUuLmYwZjQ5Mzhk
MTdiZWFkOGNkMWQ0MjU0YTA3OThiNmQ2ZGUzNmIxNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmgKQEAg
LTYyLDE1ICs2MiwxMiBAQCBwdWJsaWM6CiAgICAgLy8gSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJm
YWNlCiAgICAgdmlydHVhbCBJREJEYXRhYmFzZU1ldGFkYXRhIG1ldGFkYXRhKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gY3Jl
YXRlT2JqZWN0U3RvcmUoaW50NjRfdCBpZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJL
ZXlQYXRoJiwgYm9vbCBhdXRvSW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZh
Y2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIGRlbGV0ZU9iamVjdFN0b3Jl
KGdldE9iamVjdFN0b3JlSWQobmFtZSksIHRyYW5zYWN0aW9uUHRyLCBlYyk7IH0KICAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9u
KGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVm
UHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tzPiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKERP
TVN0cmluZ0xpc3QqIG9iamVjdFN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIEV4Y2Vw
dGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiB0cmFuc2FjdGlvbihjb25zdCBWZWN0b3I8aW50NjRfdD4mLCB1bnNpZ25lZCBz
aG9ydCk7CiAgICAgdmlydHVhbCB2b2lkIGNsb3NlKFBhc3NSZWZQdHI8SURCRGF0YWJhc2VDYWxs
YmFja3M+KTsKIAogICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2Jq
ZWN0U3RvcmUoaW50NjRfdCBpZCk7Ci0gICAgaW50NjRfdCBnZXRPYmplY3RTdG9yZUlkKGNvbnN0
IFN0cmluZyYgbmFtZSk7CiAgICAgSURCVHJhbnNhY3Rpb25Db29yZGluYXRvciogdHJhbnNhY3Rp
b25Db29yZGluYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNhY3Rpb25Db29yZGluYXRvci5n
ZXQoKTsgfQogICAgIHZvaWQgdHJhbnNhY3Rpb25TdGFydGVkKFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW1wbD4pOwogICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZChQYXNzUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEltcGw+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEludGVyZmFjZS5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNl
LmgKaW5kZXggMGM1M2NkN2NmMTU4OTFjMDUxN2ZkOTMyNDM5Y2UxYjdhMTkxOTdhYS4uOWFhYjU2
NDRiYTQ4NjNjMDdhNjdlNDFkOTA3ZjQxZDFkMThlNDgzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50ZXJmYWNlLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW50
ZXJmYWNlLmgKQEAgLTM0LDcgKzM0LDYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFz
cyBET01TdHJpbmdMaXN0OwogY2xhc3MgSURCQ2FsbGJhY2tzOwogY2xhc3MgSURCRGF0YWJhc2VD
YWxsYmFja3M7CiBjbGFzcyBJREJLZXlQYXRoOwpAQCAtNTUsMTAgKzU0LDggQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgSURCRGF0YWJhc2VNZXRhZGF0YSBtZXRhZGF0YSgpIGNvbnN0ID0gMDsKIAog
ICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IGNy
ZWF0ZU9iamVjdFN0b3JlKGludDY0X3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5
UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3Rv
cmUoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBF
eGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVPYmplY3RTdG9yZShp
bnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikg
PSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPElEQkRhdGFiYXNlQ2FsbGJhY2tz
PiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBzdG9yZU5h
bWVzLCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJikgPSAwOwogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9u
KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMsIHVuc2lnbmVkIHNob3J0IG1v
ZGUpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFzc1JlZlB0cjxJREJEYXRhYmFzZUNh
bGxiYWNrcz4pID0gMDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJNZXRhZGF0YS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCTWV0YWRhdGEuaAppbmRleCAxYjAzODRiZDk1NjkxZTRjZmE3NzFjNDE5Mjg1NzJjOWMyYjE2
MDU4Li5jM2IzMzM0NjMwMWNjNzFlNmUwYjBiNWVjYWMwYThjNjUxNTA0ODRlIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJNZXRhZGF0YS5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk1ldGFkYXRhLmgKQEAgLTc2LDE0ICs3
Niw2IEBAIHN0cnVjdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhIHsKICAgICB0eXBlZGVmIEhhc2hN
YXA8aW50NjRfdCwgSURCSW5kZXhNZXRhZGF0YT4gSW5kZXhNYXA7CiAgICAgSW5kZXhNYXAgaW5k
ZXhlczsKIAotICAgIGJvb2wgY29udGFpbnNJbmRleChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0
Ci0gICAgewotICAgICAgICBmb3IgKEluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGluZGV4
ZXMuYmVnaW4oKTsgaXQgIT0gaW5kZXhlcy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYg
KGl0LT52YWx1ZS5uYW1lID09IG5hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KIH07CiAKIHN0cnVjdCBJREJE
YXRhYmFzZU1ldGFkYXRhIHsKQEAgLTEwOCwyMiArMTAwLDYgQEAgc3RydWN0IElEQkRhdGFiYXNl
TWV0YWRhdGEgewogICAgIHsKICAgICB9CiAKLSAgICBpbnQ2NF90IGZpbmRPYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci0gICAgewotICAgICAgICBmb3IgKE9iamVjdFN0b3Jl
TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IG9iamVjdFN0b3Jlcy5iZWdpbigpOyBpdCAhPSBvYmpl
Y3RTdG9yZXMuZW5kKCk7ICsraXQpIHsKLSAgICAgICAgICAgIGlmIChpdC0+dmFsdWUubmFtZSA9
PSBuYW1lKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGl0LT5rZXkgIT0gSURCT2JqZWN0U3Rv
cmVNZXRhZGF0YTo6SW52YWxpZElkKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gaXQtPmtleTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4gSURCT2JqZWN0U3RvcmVN
ZXRhZGF0YTo6SW52YWxpZElkOwotICAgIH0KLQotICAgIGJvb2wgY29udGFpbnNPYmplY3RTdG9y
ZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZmluZE9i
amVjdFN0b3JlKG5hbWUpICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZDsKLSAg
ICB9Ci0KICAgICBTdHJpbmcgbmFtZTsKICAgICBpbnQ2NF90IGlkOwogICAgIFN0cmluZyB2ZXJz
aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0
U3RvcmUuY3BwCmluZGV4IGQ5ZDJlYzI4MDQ5NTk0ZTI3MDg4ZDFmZmNmZDIzMjE2OTc2NTE2NWUu
LmYxNTc5ZDliMzc5N2IzNTQ2YWVhMjczNDljZDRiMGVjYmE3MzkyNjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKQEAgLTIw
NCwxOCArMjA0LDE3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1
dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vCiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIFZlY3RvcjxTdHJpbmc+IGluZGV4TmFtZXM7CisgICAgVmVjdG9yPGlu
dDY0X3Q+IGluZGV4SWRzOwogICAgIFZlY3RvcjxJbmRleEtleXM+IGluZGV4S2V5czsKICAgICBm
b3IgKElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkluZGV4TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9
IG1fbWV0YWRhdGEuaW5kZXhlcy5iZWdpbigpOyBpdCAhPSBtX21ldGFkYXRhLmluZGV4ZXMuZW5k
KCk7ICsraXQpIHsKICAgICAgICAgSW5kZXhLZXlzIGtleXM7CiAgICAgICAgIGdlbmVyYXRlSW5k
ZXhLZXlzRm9yVmFsdWUoaXQtPnZhbHVlLCB2YWx1ZSwgJmtleXMpOwotICAgICAgICBpbmRleE5h
bWVzLmFwcGVuZChpdC0+dmFsdWUubmFtZSk7CisgICAgICAgIGluZGV4SWRzLmFwcGVuZChpdC0+
a2V5KTsKICAgICAgICAgaW5kZXhLZXlzLmFwcGVuZChrZXlzKTsKICAgICB9Ci0gICAgQVNTRVJU
KGluZGV4S2V5cy5zaXplKCkgPT0gaW5kZXhOYW1lcy5zaXplKCkpOwogCiAgICAgUmVmUHRyPElE
QlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgc291cmNlLCBt
X3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPnB1dFdpdGhJbmRleEtleXMoc2Vy
aWFsaXplZFZhbHVlLnJlbGVhc2UoKSwga2V5LnJlbGVhc2UoKSwgcHV0TW9kZSwgcmVxdWVzdCwg
bV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBpbmRleE5hbWVzLCBpbmRleEtleXMsIGVjKTsKKyAg
ICBtX2JhY2tlbmQtPnB1dChzZXJpYWxpemVkVmFsdWUucmVsZWFzZSgpLCBrZXkucmVsZWFzZSgp
LCBwdXRNb2RlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGluZGV4SWRzLCBp
bmRleEtleXMpOwogICAgIEFTU0VSVCghZWMpOwogICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2Uo
KTsKIH0KQEAgLTMxOSw4ICszMTgsOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAoY3Vyc29yQW55
LT50eXBlKCkgPT0gSURCQW55OjpJREJDdXJzb3JXaXRoVmFsdWVUeXBlKQogICAgICAgICAgICAg
Y3Vyc29yID0gY3Vyc29yQW55LT5pZGJDdXJzb3JXaXRoVmFsdWUoKTsKIAotICAgICAgICBWZWN0
b3I8U3RyaW5nLCAxPiBpbmRleE5hbWVzOwotICAgICAgICBpbmRleE5hbWVzLmFwcGVuZChtX2lu
ZGV4TWV0YWRhdGEubmFtZSk7CisgICAgICAgIFZlY3RvcjxpbnQ2NF90LCAxPiBpbmRleElkczsK
KyAgICAgICAgaW5kZXhJZHMuYXBwZW5kKG1faW5kZXhNZXRhZGF0YS5pZCk7CiAgICAgICAgIGlm
IChjdXJzb3IpIHsKICAgICAgICAgICAgIGN1cnNvci0+Y29udGludWVGdW5jdGlvbihlYyk7CiAg
ICAgICAgICAgICBBU1NFUlQoIWVjKTsKQEAgLTMzNCwxMiArMzMzLDEyIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBWZWN0b3I8SURCT2JqZWN0U3RvcmU6OkluZGV4S2V5cywgMT4gaW5kZXhLZXlz
TGlzdDsKICAgICAgICAgICAgIGluZGV4S2V5c0xpc3QuYXBwZW5kKGluZGV4S2V5cyk7CiAKLSAg
ICAgICAgICAgIG1fb2JqZWN0U3RvcmVCYWNrZW5kLT5zZXRJbmRleEtleXMocHJpbWFyeUtleSwg
aW5kZXhOYW1lcywgaW5kZXhLZXlzTGlzdCwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgICAg
ICAgICBtX29iamVjdFN0b3JlQmFja2VuZC0+c2V0SW5kZXhLZXlzKHByaW1hcnlLZXksIGluZGV4
SWRzLCBpbmRleEtleXNMaXN0LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKIAogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gTm93IHRoYXQgd2UgYXJlIGRvbmUgaW5kZXhpbmcsIHRlbGwg
dGhlIGJhY2tlbmQgdG8gZ28KICAgICAgICAgICAgIC8vIGJhY2sgdG8gcHJvY2Vzc2luZyB0YXNr
cyBvZiB0eXBlIE5vcm1hbFRhc2suCi0gICAgICAgICAgICBtX29iamVjdFN0b3JlQmFja2VuZC0+
c2V0SW5kZXhlc1JlYWR5KGluZGV4TmFtZXMsIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgICAg
ICAgICAgbV9vYmplY3RTdG9yZUJhY2tlbmQtPnNldEluZGV4ZXNSZWFkeShpbmRleElkcywgbV90
cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgICAgICAgICBtX29iamVjdFN0b3JlQmFja2VuZC5jbGVh
cigpOwogICAgICAgICAgICAgbV90cmFuc2FjdGlvbi5jbGVhcigpOwogICAgICAgICB9CkBAIC0z
ODIsNyArMzgxLDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0
ZUluZGV4KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQKICAgICAgICAgZWMgPSBOQVRJ
VkVfVFlQRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAobV9tZXRhZGF0
YS5jb250YWluc0luZGV4KG5hbWUpKSB7CisgICAgaWYgKGNvbnRhaW5zSW5kZXgobmFtZSkpIHsK
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlI7CiAgICAg
ICAgIHJldHVybiAwOwogICAgIH0KQEAgLTQ0NCwxMiArNDQzLDEzIEBAIFBhc3NSZWZQdHI8SURC
SW5kZXg+IElEQk9iamVjdFN0b3JlOjppbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlv
bkNvZGUmIGVjCiAgICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpCiAgICAgICAgIHJldHVy
biBpdC0+dmFsdWU7CiAKLSAgICBpZiAoIW1fbWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSkg
eworICAgIGludDY0X3QgaW5kZXhJZCA9IGZpbmRJbmRleElkKG5hbWUpOworICAgIGlmIChpbmRl
eElkID09IElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZCkgewogICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQogCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXhCYWNrZW5k
ID0gbV9iYWNrZW5kLT5pbmRleChuYW1lLCBlYyk7CisgICAgUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gaW5kZXhCYWNrZW5kID0gbV9iYWNrZW5kLT5pbmRleChpbmRleElkKTsKICAg
ICBBU1NFUlQoIWVjICYmIGluZGV4QmFja2VuZCk7CiAKICAgICBjb25zdCBJREJJbmRleE1ldGFk
YXRhKiBpbmRleE1ldGFkYXRhKDApOwpAQCAtNDc2LDE0ICs0NzYsMTQgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBl
YykKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJ
VkVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICghbV9tZXRhZGF0YS5jb250
YWluc0luZGV4KG5hbWUpKSB7CisgICAgaW50NjRfdCBpbmRleElkID0gZmluZEluZGV4SWQobmFt
ZSk7CisgICAgaWYgKGluZGV4SWQgPT0gSURCSW5kZXhNZXRhZGF0YTo6SW52YWxpZElkKSB7CiAg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgbV9iYWNrZW5kLT5kZWxldGVJbmRleChuYW1lLCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBtX2JhY2tlbmQtPmRlbGV0ZUluZGV4
KGluZGV4SWQsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmICghZWMpIHsK
LSAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEuY29udGFpbnNJbmRleChuYW1lKSk7CiAgICAgICAg
IElEQkluZGV4TWFwOjppdGVyYXRvciBpdCA9IG1faW5kZXhNYXAuZmluZChuYW1lKTsKICAgICAg
ICAgaWYgKGl0ICE9IG1faW5kZXhNYXAuZW5kKCkpIHsKICAgICAgICAgICAgIG1fbWV0YWRhdGEu
aW5kZXhlcy5yZW1vdmUoaXQtPnZhbHVlLT5pZCgpKTsKQEAgLTU1OCw2ICs1NTgsMTYgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZTo6dHJhbnNhY3Rpb25GaW5pc2hlZCgpCiAgICAgbV9pbmRleE1hcC5j
bGVhcigpOwogfQogCitpbnQ2NF90IElEQk9iamVjdFN0b3JlOjpmaW5kSW5kZXhJZChjb25zdCBT
dHJpbmcmIG5hbWUpIGNvbnN0Cit7CisgICAgZm9yIChJREJPYmplY3RTdG9yZU1ldGFkYXRhOjpJ
bmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX21ldGFkYXRhLmluZGV4ZXMuYmVnaW4oKTsg
aXQgIT0gbV9tZXRhZGF0YS5pbmRleGVzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+
dmFsdWUubmFtZSA9PSBuYW1lKSB7CisgICAgICAgICAgICBBU1NFUlQoaXQtPmtleSAhPSBJREJJ
bmRleE1ldGFkYXRhOjpJbnZhbGlkSWQpOworICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIElEQkluZGV4TWV0YWRhdGE6OkludmFsaWRJZDsK
K30KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaAppbmRleCA5ZjAyN2VhMGM2NDYyOGY2ZGRl
MDcwMTIyZGExYThmYWU2ZmViMjZhLi45Y2IyYWQ2MzNkM2JiMzg3Y2RjMDU1YmNmNGQ4MGE4MWRj
NzYwNGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJP
YmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlLmgKQEAgLTY2LDkgKzY2LDkgQEAgcHVibGljOgogCiAgICAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBhZGQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFs
dWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykgeyByZXR1cm4gYWRkKGNvbnRleHQsIHZhbHVl
LCAwLCBlYyk7ICB9CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBwdXQoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwgU2NyaXB0VmFsdWUmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gcHV0KGNvbnRleHQsIHZhbHVlLCAwLCBlYyk7ICB9Ci0gICAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19j
YXN0PElEQktleVJhbmdlKj4oMCksIGVjKTsgfSAKLSAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4ga2V5UmFuZ2UsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVybiBvcGVuQ3Vy
c29yKGNvbnRleHQsIGtleVJhbmdlLCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9
IAotICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBl
YykgeyByZXR1cm4gb3BlbkN1cnNvcihjb250ZXh0LCBrZXksIElEQkN1cnNvcjo6ZGlyZWN0aW9u
TmV4dCgpLCBlYyk7IH0gCisgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKSB7IHJldHVy
biBvcGVuQ3Vyc29yKGNvbnRleHQsIHN0YXRpY19jYXN0PElEQktleVJhbmdlKj4oMCksIGVjKTsg
fQorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25D
b250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgRXhjZXB0
aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwga2V5UmFuZ2UsIElEQkN1
cnNvcjo6ZGlyZWN0aW9uTmV4dCgpLCBlYyk7IH0KKyAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4
dCwga2V5LCBJREJDdXJzb3I6OmRpcmVjdGlvbk5leHQoKSwgZWMpOyB9CiAgICAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBvcGVuQ3Vyc29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwg
RXhjZXB0aW9uQ29kZSYgZWMpIHsgcmV0dXJuIG9wZW5DdXJzb3IoY29udGV4dCwgcmFuZ2UsIGRp
cmVjdGlvbiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpOb3JtYWxUYXNrLCBlYyk7
IH0KICAgICBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IG9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlv
biwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gb3BlbkN1cnNvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJLZXk+LCBjb25zdCBTdHJpbmcmIGRpcmVjdGlvbiwg
RXhjZXB0aW9uQ29kZSYpOwpAQCAtMTA1LDYgKzEwNSwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgog
ICAgIElEQk9iamVjdFN0b3JlKGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVm
UHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4sIElEQlRyYW5zYWN0aW9uKik7CiAK
KyAgICBpbnQ2NF90IGZpbmRJbmRleElkKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CisgICAg
Ym9vbCBjb250YWluc0luZGV4KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBmaW5kSW5kZXhJZChuYW1lKSAhPSBJREJJbmRleE1ldGFkYXRhOjpJbnZhbGlk
SWQ7CisgICAgfQorCiAgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX21ldGFkYXRhOwogICAg
IFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKICAgICBS
ZWZQdHI8SURCVHJhbnNhY3Rpb24+IG1fdHJhbnNhY3Rpb247CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZElt
cGwuY3BwCmluZGV4IDQ2NDBjMTNkZDJlM2M3N2IyZGU4MGNjMGRiN2FkYmY1OTAzZTAzZjUuLmI1
NGYwMDhjNjllOTdlYWViOTJjMmM1ODIzN2ZjNjUzNDJmYTg5NjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGwuY3BwCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjwK
IAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4gcHJwS2V5LCBQdXRN
b2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3MsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYgaW5kZXhJZHMsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMpCiB7
Ci0gICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRXaXRoSW5kZXhL
ZXlzIik7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQiKTsK
IAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRo
aXM7CiAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsK
QEAgLTEyNiwxMCArMTI2LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQo
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLAogICAgICAgICBjYWxs
YmFja3MtPm9uRXJyb3IoSURCRGF0YWJhc2VFcnJvcjo6Y3JlYXRlKElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpJREJfQUJPUlRfRVJSKSk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6cHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJw
VmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBwcnBLZXksIFB1dE1vZGUgcHV0TW9kZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMs
IGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiBpbmRleEtleXMsIEV4Y2VwdGlvbkNvZGUmKQotewot
ICAgIHJldHVybiBwdXQocHJwVmFsdWUsIHBycEtleSwgcHV0TW9kZSwgcHJwQ2FsbGJhY2tzLCB0
cmFuc2FjdGlvblB0ciwgZ2V0SW5kZXhJZHMoaW5kZXhOYW1lcyksIGluZGV4S2V5cyk7Ci19CiBu
YW1lc3BhY2UgewogY2xhc3MgSW5kZXhXcml0ZXIgewogcHVibGljOgpAQCAtMjU5LDEyICsyNTUs
NiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldEluZGV4S2V5cyhQYXNzUmVm
UHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgYwogICAgIH0KIH0KIAotdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1h
cnlLZXksIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5k
ZXhLZXlzPiYgaW5kZXhLZXlzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyKQotewotICAgIFZlY3RvcjxpbnQ2NF90PiBpbmRleElkcyA9IGdldEluZGV4SWRz
KGluZGV4TmFtZXMpOwotICAgIHJldHVybiBzZXRJbmRleEtleXMocHJwUHJpbWFyeUtleSwgaW5k
ZXhJZHMsIGluZGV4S2V5cywgdHJhbnNhY3Rpb25QdHIpOwotfQotCiB2b2lkIElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mIGlu
ZGV4SWRzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uSW50ZXJm
YWNlKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6c2V0SW5k
ZXhlc1JlYWR5Iik7CkBAIC0yNzksMjIgKzI2OSw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgaW5kZXhJZHMs
CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8U3RyaW5nPiYgaW5kZXhO
YW1lcywgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbkludGVyZmFj
ZSkKLXsKLSAgICBWZWN0b3I8aW50NjRfdD4gaW5kZXhJZHMoaW5kZXhOYW1lcy5zaXplKCkpOwot
ICAgIC8vIEZJWE1FOiBXZSBtYW51YWxseSBjb252ZXJ0IGVhY2ggbmFtZSB0byBhbiBpbmRleElk
LCBldmVuIGlmIHRoZSBuYW1lIGhhcyBhbHJlYWR5IGJlZW4gZGVsZXRlZCwgYmVjYXVzZSB3ZSBo
YXZlIHRvIHJlbW92ZSBleGFjdGx5IHRoYXQgbWFueSBwcmVlbXB0aXZlIGV2ZW50cywgYnV0IHRo
aXMgd2lsbCBnbyBhd2F5IHdoZW4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTEwMDQyNiBsYW5kcy4KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGluZGV4TmFtZXMu
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaW5kZXhJZHNbaV0gPSBJbnZhbGlkSWQ7Ci0gICAgICAg
IGZvciAoSW5kZXhNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbV9pbmRleGVzLmJlZ2luKCk7IGl0
ICE9IG1faW5kZXhlcy5lbmQoKTsgKytpdCkgewotICAgICAgICAgICAgaWYgKGl0LT52YWx1ZS0+
bmFtZSgpID09IGluZGV4TmFtZXNbaV0pIHsKLSAgICAgICAgICAgICAgICBpbmRleElkc1tpXSA9
IGl0LT5rZXk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgcmV0dXJuIHNldEluZGV4ZXNSZWFkeShpbmRleElkcywgdHJhbnNhY3Rp
b25JbnRlcmZhY2UpOwotfQotCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnNldElu
ZGV4ZXNSZWFkeUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzT3duUHRyPFZlY3Rvcjxp
bnQ2NF90PiA+IHBvcEluZGV4SWRzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZElt
cGw+IHRyYW5zYWN0aW9uKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6c2V0SW5kZXhlc1JlYWR5SW50ZXJuYWwiKTsKQEAgLTQ3MCwyOSArNDQ0LDYgQEAgUGFz
c1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmluZGV4KGludDY0X3QgaW4KICAgICByZXR1cm4gaW5kZXgucmVsZWFzZSgpOwogfQogCi1Q
YXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6aW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJikKLXsKLSAgICBy
ZXR1cm4gaW5kZXgoZ2V0SW5kZXhJZChuYW1lKSk7Ci19Ci0KLWludDY0X3QgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6Z2V0SW5kZXhJZChjb25zdCBTdHJpbmcmIG5hbWUpCi17Ci0gICAgZm9y
IChJbmRleE1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBtX2luZGV4ZXMuYmVnaW4oKTsgaXQgIT0g
bV9pbmRleGVzLmVuZCgpOyArK2l0KSB7Ci0gICAgICAgIGlmIChpdC0+dmFsdWUtPm5hbWUoKSA9
PSBuYW1lKQotICAgICAgICAgICAgcmV0dXJuIGl0LT5rZXk7Ci0gICAgfQotICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1WZWN0b3I8aW50NjRfdD4gSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW5kZXhJZHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIG5h
bWVzKQotewotICAgIFZlY3RvcjxpbnQ2NF90PiByZXN1bHQ7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBuYW1lcy5zaXplKCk7ICsraSkKLSAgICAgICAgcmVzdWx0LmFwcGVuZChnZXRJbmRl
eElkKG5hbWVzW2ldKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQogdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChpbnQ2NF90IGluZGV4SWQsIElEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewogICAgIEFTU0VSVChtX2luZGV4ZXMuY29udGFpbnMoaW5kZXhJZCkpOwpAQCAtNTExLDExICs0
NjIsNiBAQCB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KGludDY0
X3QgaW5kZXhJZCwgSURCVHJhbnNhY3Rpb25CYWNrZQogICAgIG1faW5kZXhlcy5yZW1vdmUoaW5k
ZXhJZCk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgo
Y29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5z
YWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICByZXR1cm4gZGVsZXRlSW5kZXgo
Z2V0SW5kZXhJZChuYW1lKSwgdHJhbnNhY3Rpb25QdHIsIGVjKTsKLX0KLQogdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQqLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
LCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEltcGw+IHRyYW5zYWN0aW9uKQogewogICAgIG9iamVjdFN0b3JlLT5i
YWNraW5nU3RvcmUoKS0+ZGVsZXRlSW5kZXgodHJhbnNhY3Rpb24tPmJhY2tpbmdTdG9yZVRyYW5z
YWN0aW9uKCksIG9iamVjdFN0b3JlLT5kYXRhYmFzZUlkKCksIG9iamVjdFN0b3JlLT5pZCgpLCBp
bmRleC0+aWQoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmgKaW5kZXggYzJlZmQzYjBlM2EyMWI2
MTI0ZTA0OWNiMDEyMGQ3YmYyNGY2OGM5Ny4uY2ZkZTNiZTdiMzQ1MWJiMmI2MzI2ZWRhYjYwN2Vk
MjgwYjQzNDIwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuaApAQCAtNjQsMjAgKzY0LDE1IEBA
IHB1YmxpYzoKIAogICAgIC8vIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZQogICAgIHZp
cnR1YWwgdm9pZCBnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYp
OwotICAgIHZpcnR1YWwgdm9pZCBwdXRXaXRoSW5kZXhLZXlzKFBhc3NSZWZQdHI8U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiwgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mLCBFeGNlcHRpb25Db2RlJik7CiAg
ICAgdmlydHVhbCB2b2lkIHB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBh
c3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBjb25z
dCBWZWN0b3I8SW5kZXhLZXlzPiYpOwogCiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZUZ1bmN0aW9u
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4sIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIEV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFs
IHZvaWQgY2xlYXIoUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8
SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBjcmVhdGVJbmRleChpbnQ2NF90LCBjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5
LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJik7Ci0gICAg
dmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtl
eSwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtl
eXMoUGFzc1JlZlB0cjxJREJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFZlY3RvcjxpbnQ2NF90
PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKik7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8U3Ry
aW5nPiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwogICAgIHZpcnR1YWwgdm9p
ZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKik7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2Vu
ZEludGVyZmFjZT4gaW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gaW5kZXgoaW50
NjRfdCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZp
cnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICB2aXJ0dWFsIHZvaWQgb3BlbkN1cnNvcihQ
YXNzUmVmUHRyPElEQktleVJhbmdlPiwgSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlOjpUYXNrVHlwZSwg
SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpOwpAQCAtOTYs
OSArOTEsNiBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJREJCYWNraW5nU3RvcmU+IGJhY2tp
bmdTdG9yZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YWJhc2UtPmJhY2tpbmdTdG9yZSgpOyB9CiAg
ICAgaW50NjRfdCBkYXRhYmFzZUlkKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhYmFzZS0+aWQoKTsg
fQogCi0gICAgaW50NjRfdCBnZXRJbmRleElkKGNvbnN0IFN0cmluZyYpOwotICAgIFZlY3Rvcjxp
bnQ2NF90PiBnZXRJbmRleElkcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYpOwotCiBwcml2YXRlOgog
ICAgIElEQk9iamVjdFN0b3JlQmFja2VuZEltcGwoY29uc3QgSURCRGF0YWJhc2VCYWNrZW5kSW1w
bCosIGNvbnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2UuaAppbmRleCA5YWJlODgzY2JhOGVlY2QxNDJjMGNjOWM2ODBlODY4ZDRhYWVi
Mjc4Li44M2JkZmRjZWQ5MDZmMGJiNzYxNTk4M2JjMjI2ZjJkMmYyM2Y4YTQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbnRlcmZhY2UuaApAQCAtMzUsNyArMzUsNiBAQAogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKLWNsYXNzIERPTVN0cmluZ0xpc3Q7CiBjbGFzcyBJREJDYWxsYmFja3M7CiBj
bGFzcyBJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U7CiBjbGFzcyBJREJLZXk7CkBAIC02MiwyMCAr
NjEsMTUgQEAgcHVibGljOgogCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPElEQktleT4gPiBJ
bmRleEtleXM7CiAKLSAgICB2aXJ0dWFsIHZvaWQgcHV0V2l0aEluZGV4S2V5cyhQYXNzUmVmUHRy
PFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NSZWZQdHI8SURCS2V5PiwgUHV0TW9kZSwgUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBj
b25zdCBWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JiwgRXhjZXB0aW9u
Q29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4sIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIGNvbnN0IFZlY3Rvcjxp
bnQ2NF90PiYsIGNvbnN0IFZlY3RvcjxJbmRleEtleXM+JikgPSAwOwogICAgIHZpcnR1YWwgdm9p
ZCBkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxJREJD
YWxsYmFja3M+LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBFeGNlcHRpb25Db2Rl
JikgPSAwOwogCiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsK
IAogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0
ZUluZGV4KGludDY0X3QsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYsIGJv
b2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZSosIEV4Y2VwdGlvbkNvZGUmKSA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQ
YXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mLCBj
b25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSop
ID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhLZXlzKFBhc3NSZWZQdHI8SURCS2V5PiBw
cnBQcmltYXJ5S2V5LCBjb25zdCBWZWN0b3I8aW50NjRfdD4mLCBjb25zdCBWZWN0b3I8SW5kZXhL
ZXlzPiYsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopID0gMDsKLSAgICB2aXJ0dWFs
IHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiwgSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVh
ZHkoY29uc3QgVmVjdG9yPGludDY0X3Q+JiwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KikgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IGluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChpbnQ2NF90KSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgRXhjZXB0aW9uQ29kZSYpID0gMDsKIAogICAg
IHZpcnR1YWwgdm9pZCBkZWxldGVJbmRleChpbnQ2NF90LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJ
bnRlcmZhY2UqLCBFeGNlcHRpb25Db2RlJikgPSAwOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKaW5kZXggNWQ4YWM1ZmNhNWYx
ZTU5Nzk0OWE4NmViZDA2MjRmZjJhMDNlMjlhNC4uNTMxZjJmMDkxNThhMjc1Njk2NWU1MTNhMzZi
NmExMmNkYjY2ZmNmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmNwcApAQCAtMTYwLDEzICsxNjAsMTMgQEAgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZT4gSURCVHJhbnNhY3Rpb246Om9iamVjdFN0b3JlKGNvbnN0IFN0cmluZyYg
bmFtZSwgRXhjZXAKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9G
T1VORF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZUJhY2tlbmQgPSBtX2JhY2tlbmQtPm9i
amVjdFN0b3JlKG5hbWUsIGVjKTsKKworICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9IG1fZGF0
YWJhc2UtPmZpbmRPYmplY3RTdG9yZUlkKG5hbWUpOworICAgIEFTU0VSVChvYmplY3RTdG9yZUlk
ICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCk7CisgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmVCYWNrZW5kID0gbV9iYWNrZW5k
LT5vYmplY3RTdG9yZShvYmplY3RTdG9yZUlkLCBlYyk7CiAgICAgQVNTRVJUKCFlYyAmJiBvYmpl
Y3RTdG9yZUJhY2tlbmQpOwogCiAgICAgY29uc3QgSURCRGF0YWJhc2VNZXRhZGF0YSYgbWV0YWRh
dGEgPSBtX2RhdGFiYXNlLT5tZXRhZGF0YSgpOwotICAgIGludDY0X3Qgb2JqZWN0U3RvcmVJZCA9
IG1ldGFkYXRhLmZpbmRPYmplY3RTdG9yZShuYW1lKTsKLQotICAgIEFTU0VSVChvYmplY3RTdG9y
ZUlkICE9IElEQk9iamVjdFN0b3JlTWV0YWRhdGE6OkludmFsaWRJZCk7CiAKICAgICBSZWZQdHI8
SURCT2JqZWN0U3RvcmU+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZShtZXRh
ZGF0YS5vYmplY3RTdG9yZXMuZ2V0KG9iamVjdFN0b3JlSWQpLCBvYmplY3RTdG9yZUJhY2tlbmQs
IHRoaXMpOwogICAgIG9iamVjdFN0b3JlQ3JlYXRlZChuYW1lLCBvYmplY3RTdG9yZSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5z
YWN0aW9uQmFja2VuZEltcGwuY3BwCmluZGV4IGUxNjUyZDY5NWRmODUzNDFiMzYwODZkODY3OWIx
Mzc0NDAyZmY4ZWIuLmUzNzI2MmE0ZjI0OWI0MGMxM2FjMmIyMGMzNDQ3NGE1MjgzMzJiYWEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9u
QmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uQmFja2VuZEltcGwuY3BwCkBAIC03NiwxMSArNzYsNiBAQCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1w
bDo6b2JqZWN0U3RvcgogICAgIHJldHVybiBvYmplY3RTdG9yZS5yZWxlYXNlKCk7CiB9CiAKLVBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbXBsOjpvYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUm
IGVjKQotewotICAgIHJldHVybiBvYmplY3RTdG9yZShtX2RhdGFiYXNlLT5nZXRPYmplY3RTdG9y
ZUlkKG5hbWUpLCBlYyk7Ci19Ci0KIGJvb2wgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbDo6c2No
ZWR1bGVUYXNrKFRhc2tUeXBlIHR5cGUsIFBhc3NPd25QdHI8U2NyaXB0RXhlY3V0aW9uQ29udGV4
dDo6VGFzaz4gdGFzaywgUGFzc093blB0cjxTY3JpcHRFeGVjdXRpb25Db250ZXh0OjpUYXNrPiBh
Ym9ydFRhc2spCiB7CiAgICAgaWYgKG1fc3RhdGUgPT0gRmluaXNoZWQpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBs
LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbkJhY2tl
bmRJbXBsLmgKaW5kZXggNGU0ZGRlY2MxMTIzNjk2Y2E0NjU3NTNkYjVmMTI5MmJjM2NlMzY4MS4u
ZTYyNGVkNDBjNThmOWY5NjBhY2I2NDkyNGExZTQzZDdkMWNhM2QwZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW1wbC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFj
a2VuZEltcGwuaApAQCAtNTIsNyArNTIsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW1wbCgpOwogCiAgICAgLy8gSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVy
ZmFjZT4gb2JqZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJik7CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2Jq
ZWN0U3RvcmUoaW50NjRfdCwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1YWwgdm9pZCBkaWRD
b21wbGV0ZVRhc2tFdmVudHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKaW5kZXggZDExZTE4MTFjZTQzNWJmNjdmMDgzM2QzZTU1
ODA2Yjg4N2NlNGUzOC4uMmY0Y2YzMjdhMGI4MTY5ZmFhNTM3ZjRmNWUzNWQ1OTNiNTExYmNhOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlLmgKQEAgLTUzLDcgKzUzLDYgQEAgcHVi
bGljOgogICAgICAgICBQcmVlbXB0aXZlVGFzawogICAgIH07CiAKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBvYmplY3RTdG9yZShjb25zdCBT
dHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmKSA9IDA7CiAgICAgdmlydHVhbCBQYXNzUmVmUHRy
PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gb2JqZWN0U3RvcmUoaW50NjRfdCwgRXhj
ZXB0aW9uQ29kZSYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29tcGxldGVUYXNrRXZlbnRz
KCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjb21taXQoKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJDYWxsYmFja3NQcm94eS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9JREJDYWxsYmFja3NQcm94eS5jcHAKaW5kZXggNDJhYzc2YmE1NTcy
MWRiYjljMWEyMTk0M2E2Mzk4YjY4NmYyNjU1MC4uODFjYjU0OWU1NDc3NTlmMzQxZTExNDM5YjU4
OTc4ZTEzMDBlMmIwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURC
Q2FsbGJhY2tzUHJveHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkNh
bGxiYWNrc1Byb3h5LmNwcApAQCAtMzEsNiArMzEsNyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURf
REFUQUJBU0UpCiAKKyNpbmNsdWRlICJET01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZS5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZEludGVy
ZmFjZS5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlQmFja2VuZFByb3h5LmgiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5jcHAK
aW5kZXggZjZkOTY0NDcwZWZiNDE1MTQ0ZmRjMWQwNDA4MjkwOWNkY2Q4ZTUwOC4uZjdiOWVkYzNl
NTMxYThiZGNlZWU5MzM4NzVmZWVkNGU4ZDAzNTRiMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvSURCRGF0YWJhc2VCYWNrZW5kUHJveHkuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFja2VuZFByb3h5LmNwcApAQCAtOTksMTcg
Kzk5LDYgQEAgdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRQcm94eTo6c2V0VmVyc2lvbihjb25zdCBT
dHJpbmcmIHZlcnNpb24sIFBhc3NSZWZQdHI8SURCQ2EKICAgICBtX3dlYklEQkRhdGFiYXNlLT5z
ZXRWZXJzaW9uKHZlcnNpb24sIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNrcyksIGVj
KTsKIH0KIAotUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IElEQkRh
dGFiYXNlQmFja2VuZFByb3h5Ojp0cmFuc2FjdGlvbihET01TdHJpbmdMaXN0KiBzdG9yZU5hbWVz
LCB1bnNpZ25lZCBzaG9ydCBtb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBXZWJET01T
dHJpbmdMaXN0IG5hbWVzKHN0b3JlTmFtZXMpOwotICAgIE93blB0cjxXZWJJREJUcmFuc2FjdGlv
bj4gdHJhbnNhY3Rpb24gPSBhZG9wdFB0cihtX3dlYklEQkRhdGFiYXNlLT50cmFuc2FjdGlvbihu
YW1lcywgbW9kZSwgZWMpKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKSB7Ci0gICAgICAgIEFTU0VS
VChlYyk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gSURCVHJhbnNhY3Rp
b25CYWNrZW5kUHJveHk6OmNyZWF0ZSh0cmFuc2FjdGlvbi5yZWxlYXNlKCkpOwotfQotCiBQYXNz
UmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VCYWNrZW5k
UHJveHk6OnRyYW5zYWN0aW9uKGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgb2JqZWN0U3RvcmVJZHMs
IHVuc2lnbmVkIHNob3J0IG1vZGUpCiB7CiAgICAgT3duUHRyPFdlYklEQlRyYW5zYWN0aW9uPiB0
cmFuc2FjdGlvbiA9IGFkb3B0UHRyKG1fd2ViSURCRGF0YWJhc2UtPnRyYW5zYWN0aW9uKG9iamVj
dFN0b3JlSWRzLCBtb2RlKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9JREJEYXRhYmFzZUJhY2tlbmRQcm94eS5oIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
SURCRGF0YWJhc2VCYWNrZW5kUHJveHkuaAppbmRleCA5MTZmODMzYWI3ZWZiZmNkNDA2NjFlZGE3
N2ZhOWFjOTUzOGRjNDY5Li4zZGNjMjk1ZjIxZWZmOWIzYzExMTNjMDJjNTNlYWUxMGM5NTBiZDU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJEYXRhYmFzZUJhY2tl
bmRQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQkRhdGFiYXNlQmFj
a2VuZFByb3h5LmgKQEAgLTQ4LDcgKzQ4LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
ZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIFdlYkNvcmU6OklEQlRyYW5zYWN0
aW9uQmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0
dWFsIHZvaWQgZGVsZXRlT2JqZWN0U3RvcmUoaW50NjRfdCwgV2ViQ29yZTo6SURCVHJhbnNhY3Rp
b25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1
YWwgdm9pZCBzZXRWZXJzaW9uKGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpJREJDYWxsYmFja3M+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkRhdGFiYXNlQ2FsbGJh
Y2tzPiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxX
ZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uKFdlYkNv
cmU6OkRPTVN0cmluZ0xpc3QqIHN0b3JlTmFtZXMsIHVuc2lnbmVkIHNob3J0IG1vZGUsIFdlYkNv
cmU6OkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbihjb25zdCBWZWN0b3I8aW50
NjRfdD4mLCB1bnNpZ25lZCBzaG9ydCBtb2RlKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoUGFz
c1JlZlB0cjxXZWJDb3JlOjpJREJEYXRhYmFzZUNhbGxiYWNrcz4pOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eS5j
cHAKaW5kZXggNmEwZDAyNzcyYjg0NGM3ZWY2YWMyMGZiY2VjM2NjMzFkMWYzNjE0Mi4uOGU4OWRl
YjAzM2YzZGVjOTg4YWE2N2FjM2NkZTRhNWQ5Njk1ZmJmZCAxMDA3NTUKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuY3BwCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmNwcApA
QCAtNjcsMTYgKzY3LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRQcm94eTo6Z2V0KFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHQKICAgICBtX3dlYklEQk9i
amVjdFN0b3JlLT5nZXQoa2V5UmFuZ2UsIG5ldyBXZWJJREJDYWxsYmFja3NJbXBsKGNhbGxiYWNr
cyksICp0cmFuc2FjdGlvblByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7CiB9CiAK
LXZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dFdpdGhJbmRleEtleXMoUGFzc1Jl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5
LCBQdXRNb2RlIHB1dE1vZGUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIGNvbnN0IFZlY3RvcjxT
dHJpbmc+JiBpbmRleE5hbWVzLCBjb25zdCBWZWN0b3I8SW5kZXhLZXlzPiYgaW5kZXhLZXlzLCBF
eGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBn
dWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJl
bmRlcmVyLAotICAgIC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJl
IHByb3h5IG9iamVjdHMuCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0
aW9uUHJveHkgPSBzdGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5z
YWN0aW9uKTsKLSAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiB3ZWJJbmRleE5hbWVzKGluZGV4TmFt
ZXMpOwotICAgIFdlYlZlY3RvcjxJbmRleEtleXM+IHdlYkluZGV4S2V5cyhpbmRleEtleXMpOwot
ICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPnB1dFdpdGhJbmRleEtleXModmFsdWUsIGtleSwgc3Rh
dGljX2Nhc3Q8V2ViSURCT2JqZWN0U3RvcmU6OlB1dE1vZGU+KHB1dE1vZGUpLCBuZXcgV2ViSURC
Q2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJh
bnNhY3Rpb24oKSwgd2ViSW5kZXhOYW1lcywgd2ViSW5kZXhLZXlzLCBlYyk7Ci19Ci0KIHZvaWQg
SURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnB1dChQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gdmFsdWUsIFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIFB1dE1vZGUgcHV0TW9kZSwg
UGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRleElkcywg
Y29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cykKIHsKICAgICAvLyBUaGUgdHJhbnNh
Y3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9i
amVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLApAQCAtODUsMTYgKzc1LDYgQEAgdm9pZCBJREJPYmpl
Y3RTdG9yZUJhY2tlbmRQcm94eTo6cHV0KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZSwgUGEKICAgICBtX3dlYklEQk9iamVjdFN0b3JlLT5wdXQodmFsdWUsIGtleSwgc3Rh
dGljX2Nhc3Q8V2ViSURCT2JqZWN0U3RvcmU6OlB1dE1vZGU+KHB1dE1vZGUpLCBuZXcgV2ViSURC
Q2FsbGJhY2tzSW1wbChjYWxsYmFja3MpLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJh
bnNhY3Rpb24oKSwgaW5kZXhJZHMsIGluZGV4S2V5cyk7CiB9CiAKLXZvaWQgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kUHJveHk6OnNldEluZGV4S2V5cyhQYXNzUmVmUHRyPElEQktleT4gcHJwUHJpbWFy
eUtleSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIGNvbnN0IFZlY3RvcjxJbmRl
eEtleXM+JiBpbmRleEtleXMsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb24pCi17Ci0gICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0
byBiZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKLSAg
ICAvLyBhbGwgaW1wbGVtZW50YXRpb25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmpl
Y3RzLgotICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0g
c3RhdGljX2Nhc3Q8SURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7Ci0g
ICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gd2ViSW5kZXhOYW1lcyhpbmRleE5hbWVzKTsKLSAgICBX
ZWJWZWN0b3I8SW5kZXhLZXlzPiB3ZWJJbmRleEtleXMoaW5kZXhLZXlzKTsKLSAgICBtX3dlYklE
Qk9iamVjdFN0b3JlLT5zZXRJbmRleEtleXMocHJwUHJpbWFyeUtleSwgd2ViSW5kZXhOYW1lcywg
d2ViSW5kZXhLZXlzLCAqdHJhbnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7
Ci19Ci0KIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4S2V5cyhQYXNz
UmVmUHRyPElEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBpbmRl
eElkcywgY29uc3QgVmVjdG9yPEluZGV4S2V5cz4mIGluZGV4S2V5cywgSURCVHJhbnNhY3Rpb25C
YWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbikKIHsKICAgICAvLyBUaGUgdHJhbnNhY3Rpb24g
cG9pbnRlciBpcyBndWFyYW50ZWVkIHRvIGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBh
cywgaW4gdGhlIHJlbmRlcmVyLApAQCAtMTMwLDI1ICsxMTAsNiBAQCBQYXNzUmVmUHRyPElEQklu
ZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OmNyZWF0ZUlu
ZGV4KGludAogICAgIHJldHVybiBJREJJbmRleEJhY2tlbmRQcm94eTo6Y3JlYXRlKGluZGV4LnJl
bGVhc2UoKSk7CiB9CiAKLVBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJP
YmplY3RTdG9yZUJhY2tlbmRQcm94eTo6Y3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBJREJLZXlQYXRoJiBrZXlQYXRoLCBib29sIHVuaXF1ZSwgYm9vbCBtdWx0aUVudHJ5LCBJ
REJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2Rl
JiBlYykKLXsKLSAgICAvLyBUaGUgdHJhbnNhY3Rpb24gcG9pbnRlciBpcyBndWFyYW50ZWVkIHRv
IGJlIGEgcG9pbnRlciB0byBhIHByb3h5IG9iamVjdCBhcywgaW4gdGhlIHJlbmRlcmVyLAotICAg
IC8vIGFsbCBpbXBsZW1lbnRhdGlvbnMgb2YgSURCIGludGVyZmFjZXMgYXJlIHByb3h5IG9iamVj
dHMuCi0gICAgSURCVHJhbnNhY3Rpb25CYWNrZW5kUHJveHkqIHRyYW5zYWN0aW9uUHJveHkgPSBz
dGF0aWNfY2FzdDxJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSo+KHRyYW5zYWN0aW9uKTsKLSAg
ICBPd25QdHI8V2ViSURCSW5kZXg+IGluZGV4ID0gYWRvcHRQdHIobV93ZWJJREJPYmplY3RTdG9y
ZS0+Y3JlYXRlSW5kZXgobmFtZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5LCAqdHJhbnNh
Y3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSwgZWMpKTsKLSAgICBpZiAoIWluZGV4
KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gSURCSW5kZXhCYWNrZW5kUHJveHk6OmNy
ZWF0ZShpbmRleC5yZWxlYXNlKCkpOwotfQotCi12b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZFBy
b3h5OjpzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9yPFN0cmluZz4mIGluZGV4TmFtZXMsIElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24pCi17Ci0gICAgLy8gVGhl
IHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBiZSBhIHBvaW50ZXIgdG8gYSBw
cm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKLSAgICAvLyBhbGwgaW1wbGVtZW50YXRp
b25zIG9mIElEQiBpbnRlcmZhY2VzIGFyZSBwcm94eSBvYmplY3RzLgotICAgIElEQlRyYW5zYWN0
aW9uQmFja2VuZFByb3h5KiB0cmFuc2FjdGlvblByb3h5ID0gc3RhdGljX2Nhc3Q8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kUHJveHkqPih0cmFuc2FjdGlvbik7Ci0gICAgbV93ZWJJREJPYmplY3RTdG9y
ZS0+c2V0SW5kZXhlc1JlYWR5KFdlYlZlY3RvcjxXZWJTdHJpbmc+KGluZGV4TmFtZXMpLCAqdHJh
bnNhY3Rpb25Qcm94eS0+Z2V0V2ViSURCVHJhbnNhY3Rpb24oKSk7Ci19Ci0KIHZvaWQgSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4ZXNSZWFkeShjb25zdCBWZWN0b3I8aW50NjRf
dD4mIGluZGV4SWRzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9u
KQogewogICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRlZWQgdG8gYmUg
YSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIsCkBAIC0xNTcs
MTQgKzExOCw2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6OnNldEluZGV4ZXNS
ZWFkeShjb25zdCBWZWN0b3I8aW50NjRfdD4mIGluZGV4SWRzCiAgICAgbV93ZWJJREJPYmplY3RT
dG9yZS0+c2V0SW5kZXhlc1JlYWR5KFdlYlZlY3Rvcjxsb25nIGxvbmc+KGluZGV4SWRzKSwgKnRy
YW5zYWN0aW9uUHJveHktPmdldFdlYklEQlRyYW5zYWN0aW9uKCkpOwogfQogCi1QYXNzUmVmUHRy
PElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHk6Omlu
ZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgT3duUHRy
PFdlYklEQkluZGV4PiBpbmRleCA9IGFkb3B0UHRyKG1fd2ViSURCT2JqZWN0U3RvcmUtPmluZGV4
KG5hbWUsIGVjKSk7Ci0gICAgaWYgKCFpbmRleCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIElEQkluZGV4QmFja2VuZFByb3h5OjpjcmVhdGUoaW5kZXgucmVsZWFzZSgpKTsKLX0KLQog
UGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2Vu
ZFByb3h5OjppbmRleChpbnQ2NF90IGluZGV4SWQpCiB7CiAgICAgT3duUHRyPFdlYklEQkluZGV4
PiBpbmRleCA9IGFkb3B0UHRyKG1fd2ViSURCT2JqZWN0U3RvcmUtPmluZGV4KGluZGV4SWQpKTsK
QEAgLTE3MywxNCArMTI2LDYgQEAgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjppbmRleChpbnQ2NF90IGkKICAgICByZXR1cm4g
SURCSW5kZXhCYWNrZW5kUHJveHk6OmNyZWF0ZShpbmRleC5yZWxlYXNlKCkpOwogfQogCi12b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5OjpkZWxldGVJbmRleChjb25zdCBTdHJpbmcmIG5h
bWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlv
bkNvZGUmIGVjKQotewotICAgIC8vIFRoZSB0cmFuc2FjdGlvbiBwb2ludGVyIGlzIGd1YXJhbnRl
ZWQgdG8gYmUgYSBwb2ludGVyIHRvIGEgcHJveHkgb2JqZWN0IGFzLCBpbiB0aGUgcmVuZGVyZXIs
Ci0gICAgLy8gYWxsIGltcGxlbWVudGF0aW9ucyBvZiBJREIgaW50ZXJmYWNlcyBhcmUgcHJveHkg
b2JqZWN0cy4KLSAgICBJREJUcmFuc2FjdGlvbkJhY2tlbmRQcm94eSogdHJhbnNhY3Rpb25Qcm94
eSA9IHN0YXRpY19jYXN0PElEQlRyYW5zYWN0aW9uQmFja2VuZFByb3h5Kj4odHJhbnNhY3Rpb24p
OwotICAgIG1fd2ViSURCT2JqZWN0U3RvcmUtPmRlbGV0ZUluZGV4KG5hbWUsICp0cmFuc2FjdGlv
blByb3h5LT5nZXRXZWJJREJUcmFuc2FjdGlvbigpLCBlYyk7Ci19Ci0KIHZvaWQgSURCT2JqZWN0
U3RvcmVCYWNrZW5kUHJveHk6OmRlbGV0ZUluZGV4KGNvbnN0IGludDY0X3QgaW5kZXhJZCwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgLy8gVGhlIHRyYW5zYWN0aW9uIHBvaW50ZXIgaXMgZ3VhcmFudGVlZCB0byBi
ZSBhIHBvaW50ZXIgdG8gYSBwcm94eSBvYmplY3QgYXMsIGluIHRoZSByZW5kZXJlciwKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFBy
b3h5LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9JREJPYmplY3RTdG9yZUJhY2tlbmRQ
cm94eS5oCmluZGV4IDc5MTEzYWU5NTY1YTMxNGRjY2YyYmFjNzgwZWJhNzUzOTRmNmNkYWQuLmRh
OGY2YmJkZDgyZDFmMmIwODk0M2U3ODMyZWU1OGFlYmUyMjU5ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vc3JjL0lEQk9iamVjdFN0b3JlQmFja2VuZFByb3h5LmgKKysrIGIv
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvSURCT2JqZWN0U3RvcmVCYWNrZW5kUHJveHkuaApA
QCAtNDQsMjEgKzQ0LDE1IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIH5JREJPYmplY3RTdG9yZUJh
Y2tlbmRQcm94eSgpOwogCiAgICAgdmlydHVhbCB2b2lkIGdldChQYXNzUmVmUHRyPFdlYkNvcmU6
OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFja3M+LCBXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpFeGNlcHRpb25Db2Rl
Jik7Ci0gICAgdmlydHVhbCB2b2lkIHB1dFdpdGhJbmRleEtleXMoUGFzc1JlZlB0cjxXZWJDb3Jl
OjpTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQktleT4sIFB1
dE1vZGUsIFBhc3NSZWZQdHI8V2ViQ29yZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgY29uc3QgV1RGOjpWZWN0b3I8V1RGOjpTdHJpbmc+
JiwgY29uc3QgV1RGOjpWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUm
KTsKICAgICB2aXJ0dWFsIHZvaWQgcHV0KFBhc3NSZWZQdHI8V2ViQ29yZTo6U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJLZXk+LCBQdXRNb2RlLCBQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZSosIGNvbnN0IFdURjo6VmVjdG9yPGludDY0X3Q+JiwgY29uc3QgV1RGOjpWZWN0
b3I8SW5kZXhLZXlzPiYpOwogICAgIHZpcnR1YWwgdm9pZCBkZWxldGVGdW5jdGlvbihQYXNzUmVm
UHRyPFdlYkNvcmU6OklEQktleVJhbmdlPiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpJREJDYWxsYmFj
a3M+LCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqLCBXZWJDb3JlOjpF
eGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKFBhc3NSZWZQdHI8V2ViQ29y
ZTo6SURCQ2FsbGJhY2tzPiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
KiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogCiAgICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGNyZWF0ZUluZGV4KGludDY0X3QgaWQsIGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgV2ViQ29yZTo6SURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29s
IG11bHRpRW50cnksIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSosIFdl
YkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkluZGV4
QmFja2VuZEludGVyZmFjZT4gY3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBX
ZWJDb3JlOjpJREJLZXlQYXRoJiwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRyeSwgV2ViQ29y
ZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29k
ZSYpOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleEtleXMoUGFzc1JlZlB0cjxXZWJDb3JlOjpJ
REJLZXk+IHBycFByaW1hcnlLZXksIGNvbnN0IFdURjo6VmVjdG9yPFdURjo6U3RyaW5nPiYsIGNv
bnN0IFZlY3RvcjxJbmRleEtleXM+JiwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50
ZXJmYWNlKik7CiAgICAgdmlydHVhbCB2b2lkIHNldEluZGV4S2V5cyhQYXNzUmVmUHRyPFdlYkNv
cmU6OklEQktleT4gcHJwUHJpbWFyeUtleSwgY29uc3QgV1RGOjpWZWN0b3I8aW50NjRfdD4mLCBj
b25zdCBWZWN0b3I8SW5kZXhLZXlzPiYsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSopOwotICAgIHZpcnR1YWwgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29uc3QgVmVjdG9y
PFN0cmluZz4mLCBXZWJDb3JlOjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqKTsKICAg
ICB2aXJ0dWFsIHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYsIFdl
YkNvcmU6OklEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSopOwogCi0gICAgUGFzc1JlZlB0
cjxXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+IGluZGV4KGNvbnN0IFN0cmluZyYg
bmFtZSwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6
SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBpbmRleChpbnQ2NF90KTsKLSAgICB2b2lkIGRlbGV0
ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlKiwgV2ViQ29yZTo6RXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgZGVsZXRlSW5k
ZXgoaW50NjRfdCwgV2ViQ29yZTo6SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiwgV2Vi
Q29yZTo6RXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdmlydHVhbCB2b2lkIG9wZW5DdXJzb3IoUGFz
c1JlZlB0cjxXZWJDb3JlOjpJREJLZXlSYW5nZT4sIFdlYkNvcmU6OklEQkN1cnNvcjo6RGlyZWN0
aW9uLCBQYXNzUmVmUHRyPFdlYkNvcmU6OklEQkNhbGxiYWNrcz4sIFdlYkNvcmU6OklEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZTo6VGFza1R5cGUsIFdlYkNvcmU6OklEQlRyYW5zYWN0aW9u
QmFja2VuZEludGVyZmFjZSosIFdlYkNvcmU6OkV4Y2VwdGlvbkNvZGUmKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJEYXRhYmFzZUltcGwuY3BwCmluZGV4IDkwYzI2
MjM4OTQ5ZTQ0YTA3NDI5OTU0Y2Y3ZDg5ZTE1NjUwZTFhYTAuLjU5YWJkNTMyOTI4MDFmMzA0OTNk
YmQwYzQ3ZjZlMDBkMzYwYmRkNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYklEQkRhdGFiYXNlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCRGF0YWJhc2VJbXBsLmNwcApAQCAtNzAsMTEgKzcwLDYgQEAgV2ViSURCT2JqZWN0
U3RvcmUqIFdlYklEQkRhdGFiYXNlSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmUobG9uZyBsb25nIGlk
LCBjb25zdCBXZWIKICAgICByZXR1cm4gbmV3IFdlYklEQk9iamVjdFN0b3JlSW1wbChvYmplY3RT
dG9yZSk7CiB9CiAKLXZvaWQgV2ViSURCRGF0YWJhc2VJbXBsOjpkZWxldGVPYmplY3RTdG9yZShj
b25zdCBXZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlv
biwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgbV9kYXRhYmFzZUJhY2tlbmQtPmRlbGV0
ZU9iamVjdFN0b3JlKG5hbWUsIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSgpLCBlYyk7Ci19Ci0KIHZvaWQgV2ViSURCRGF0YWJhc2VJbXBsOjpkZWxldGVPYmpl
Y3RTdG9yZShsb25nIGxvbmcgb2JqZWN0U3RvcmVJZCwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24m
IHRyYW5zYWN0aW9uLCBXZWJFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBtX2RhdGFiYXNlQmFj
a2VuZC0+ZGVsZXRlT2JqZWN0U3RvcmUob2JqZWN0U3RvcmVJZCwgdHJhbnNhY3Rpb24uZ2V0SURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsKQEAgLTg1LDE3ICs4MCw2IEBAIHZv
aWQgV2ViSURCRGF0YWJhc2VJbXBsOjpzZXRWZXJzaW9uKGNvbnN0IFdlYlN0cmluZyYgdmVyc2lv
biwgV2ViSURCQ2FsbGJhY2tzKiBjCiAgICAgbV9kYXRhYmFzZUJhY2tlbmQtPnNldFZlcnNpb24o
dmVyc2lvbiwgSURCQ2FsbGJhY2tzUHJveHk6OmNyZWF0ZShhZG9wdFB0cihjYWxsYmFja3MpKSwg
bV9kYXRhYmFzZUNhbGxiYWNrcywgZWMpOwogfQogCi1XZWJJREJUcmFuc2FjdGlvbiogV2ViSURC
RGF0YWJhc2VJbXBsOjp0cmFuc2FjdGlvbihjb25zdCBXZWJET01TdHJpbmdMaXN0JiBuYW1lcywg
dW5zaWduZWQgc2hvcnQgbW9kZSwgV2ViRXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRy
PERPTVN0cmluZ0xpc3Q+IG5hbWVMaXN0ID0gUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PihuYW1l
cyk7Ci0gICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24gPSBtX2RhdGFiYXNlQmFja2VuZC0+dHJhbnNhY3Rpb24obmFtZUxpc3QuZ2V0KCksIG1vZGUs
IGVjKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uKSB7Ci0gICAgICAgIEFTU0VSVChlYyk7Ci0gICAg
ICAgIHJldHVybiAwOwotICAgIH0KLSAgICByZXR1cm4gbmV3IFdlYklEQlRyYW5zYWN0aW9uSW1w
bCh0cmFuc2FjdGlvbik7Ci19Ci0KIFdlYklEQlRyYW5zYWN0aW9uKiBXZWJJREJEYXRhYmFzZUlt
cGw6OnRyYW5zYWN0aW9uKGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiBvYmplY3RTdG9yZUlk
cywgdW5zaWduZWQgc2hvcnQgbW9kZSkKIHsKICAgICBWZWN0b3I8aW50NjRfdD4gb2JqZWN0U3Rv
cmVJZExpc3Qob2JqZWN0U3RvcmVJZHMuc2l6ZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYklEQkRhdGFiYXNlSW1wbC5oIGIvU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJbXBsLmgKaW5kZXggNjVhMTk2NjhhOWI3Mjk3NzQ3Nzli
NmJlNzQxNmI3Yjc0OGYyODE2NC4uZTcyODc0MmM2NDc0ODQxMjZjZjNlYTdkZDk1NmVkZmYzMmM3
MjgwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJh
c2VJbXBsLmgKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCRGF0YWJhc2VJ
bXBsLmgKQEAgLTUzLDEwICs1Myw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIFdlYklEQk1ldGFk
YXRhIG1ldGFkYXRhKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIFdlYklEQk9iamVjdFN0b3JlKiBj
cmVhdGVPYmplY3RTdG9yZShsb25nIGxvbmcsIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3Qg
V2ViSURCS2V5UGF0aCYsIGJvb2wgYXV0b0luY3JlbWVudCwgY29uc3QgV2ViSURCVHJhbnNhY3Rp
b24mLCBXZWJFeGNlcHRpb25Db2RlJik7Ci0gICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0
b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJF
eGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGRlbGV0ZU9iamVjdFN0b3JlKGxvbmcg
bG9uZyBvYmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0VmVyc2lvbihjb25zdCBXZWJTdHJpbmcmIHZl
cnNpb24sIFdlYklEQkNhbGxiYWNrcyosIFdlYkV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2aXJ0dWFs
IFdlYklEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbihjb25zdCBXZWJET01TdHJpbmdMaXN0JiBu
YW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZpcnR1
YWwgV2ViSURCVHJhbnNhY3Rpb24qIHRyYW5zYWN0aW9uKGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxv
bmc+JiBuYW1lcywgdW5zaWduZWQgc2hvcnQgbW9kZSk7CiAgICAgdmlydHVhbCB2b2lkIGZvcmNl
Q2xvc2UoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2xvc2UoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmplY3RTdG9yZUltcGwuY3BwCmluZGV4IDg1YmFjMTNi
MzQ4MDBkNDIwZjFjZDE4NzYwYmQ5NTYzOGNkNjRlNWMuLjEwMjgwNGJjODFkZjY0OGFlYmZiMDky
ZTBjMTRhODkzMjJiOWQ1OTcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L1dlYklEQk9iamVjdFN0b3JlSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViSURCT2JqZWN0U3RvcmVJbXBsLmNwcApAQCAtNTgsMjMgKzU4LDYgQEAgdm9pZCBXZWJJ
REJPYmplY3RTdG9yZUltcGw6OmdldChjb25zdCBXZWJJREJLZXlSYW5nZSYga2V5UmFuZ2UsIFdl
YklEQkNhbGxiYWNrcyoKICAgICBtX29iamVjdFN0b3JlLT5nZXQoa2V5UmFuZ2UsIElEQkNhbGxi
YWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIHRyYW5zYWN0aW9uLmdldElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBlYyk7CiB9CiAKLXZvaWQgV2ViSURCT2Jq
ZWN0U3RvcmVJbXBsOjpwdXRXaXRoSW5kZXhLZXlzKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZSYgdmFsdWUsIGNvbnN0IFdlYklEQktleSYga2V5LCBQdXRNb2RlIHB1dE1vZGUsIFdlYklE
QkNhbGxiYWNrcyogY2FsbGJhY2tzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rp
b24sIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB3ZWJJbmRleE5hbWVzLCBjb25zdCBXZWJW
ZWN0b3I8V2ViSW5kZXhLZXlzPiYgd2ViSW5kZXhLZXlzLCBXZWJFeGNlcHRpb25Db2RlJiBlYykK
LXsKLSAgICBBU1NFUlQod2ViSW5kZXhOYW1lcy5zaXplKCkgPT0gd2ViSW5kZXhLZXlzLnNpemUo
KSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1lcyh3ZWJJbmRleE5hbWVzLnNpemUoKSk7
Ci0gICAgVmVjdG9yPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlzPiBp
bmRleEtleXMod2ViSW5kZXhLZXlzLnNpemUoKSk7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHdlYkluZGV4TmFtZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaW5kZXhOYW1lc1tpXSA9
IHdlYkluZGV4TmFtZXNbaV07Ci0gICAgICAgIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+IGluZGV4
S2V5TGlzdCh3ZWJJbmRleEtleXNbaV0uc2l6ZSgpKTsKLSAgICAgICAgZm9yIChzaXplX3QgaiA9
IDA7IGogPCB3ZWJJbmRleEtleXNbaV0uc2l6ZSgpOyArK2opCi0gICAgICAgICAgICBpbmRleEtl
eUxpc3Rbal0gPSB3ZWJJbmRleEtleXNbaV1bal07Ci0gICAgICAgIGluZGV4S2V5c1tpXSA9IGlu
ZGV4S2V5TGlzdDsKLSAgICB9Ci0KLSAgICBtX29iamVjdFN0b3JlLT5wdXRXaXRoSW5kZXhLZXlz
KHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6
UHV0TW9kZT4ocHV0TW9kZSksIElEQkNhbGxiYWNrc1Byb3h5OjpjcmVhdGUoYWRvcHRQdHIoY2Fs
bGJhY2tzKSksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgp
LCBpbmRleE5hbWVzLCBpbmRleEtleXMsIGVjKTsKLX0KLQogdm9pZCBXZWJJREJPYmplY3RTdG9y
ZUltcGw6OnB1dChjb25zdCBXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUmIHZhbHVlLCBjb25zdCBX
ZWJJREJLZXkmIGtleSwgUHV0TW9kZSBwdXRNb2RlLCBXZWJJREJDYWxsYmFja3MqIGNhbGxiYWNr
cywgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mIHRyYW5zYWN0aW9uLCBjb25zdCBXZWJWZWN0b3I8
bG9uZyBsb25nPiYgd2ViSW5kZXhJZHMsIGNvbnN0IFdlYlZlY3RvcjxXZWJJbmRleEtleXM+JiB3
ZWJJbmRleEtleXMpCiB7CiAgICAgQVNTRVJUKHdlYkluZGV4SWRzLnNpemUoKSA9PSB3ZWJJbmRl
eEtleXMuc2l6ZSgpKTsKQEAgLTkyLDIyICs3NSw2IEBAIHZvaWQgV2ViSURCT2JqZWN0U3RvcmVJ
bXBsOjpwdXQoY29uc3QgV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlJiB2YWx1ZSwgY29uc3QgV2Vi
CiAgICAgbV9vYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBrZXksIHN0YXRpY19jYXN0PElEQk9iamVj
dFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZT4ocHV0TW9kZSksIElEQkNhbGxiYWNrc1By
b3h5OjpjcmVhdGUoYWRvcHRQdHIoY2FsbGJhY2tzKSksIHRyYW5zYWN0aW9uLmdldElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSgpLCBpbmRleElkcywgaW5kZXhLZXlzKTsKIH0KIAotdm9p
ZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmIHBy
aW1hcnlLZXksIGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB3ZWJJbmRleE5hbWVzLCBjb25z
dCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYgd2ViSW5kZXhLZXlzLCBjb25zdCBXZWJJREJUcmFu
c2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAgQVNTRVJUKHdlYkluZGV4TmFtZXMuc2l6ZSgp
ID09IHdlYkluZGV4S2V5cy5zaXplKCkpOwotICAgIFZlY3RvcjxTdHJpbmc+IGluZGV4TmFtZXMo
d2ViSW5kZXhOYW1lcy5zaXplKCkpOwotICAgIFZlY3RvcjxJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OkluZGV4S2V5cz4gaW5kZXhLZXlzKHdlYkluZGV4S2V5cy5zaXplKCkpOwotCi0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJJbmRleE5hbWVzLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgIGluZGV4TmFtZXNbaV0gPSB3ZWJJbmRleE5hbWVzW2ldOwotICAgICAgICBWZWN0b3I8
UmVmUHRyPElEQktleT4gPiBpbmRleEtleUxpc3Qod2ViSW5kZXhLZXlzW2ldLnNpemUoKSk7Ci0g
ICAgICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgd2ViSW5kZXhLZXlzW2ldLnNpemUoKTsgKytq
KQotICAgICAgICAgICAgaW5kZXhLZXlMaXN0W2pdID0gd2ViSW5kZXhLZXlzW2ldW2pdOwotICAg
ICAgICBpbmRleEtleXNbaV0gPSBpbmRleEtleUxpc3Q7Ci0gICAgfQotICAgIG1fb2JqZWN0U3Rv
cmUtPnNldEluZGV4S2V5cyhwcmltYXJ5S2V5LCBpbmRleE5hbWVzLCBpbmRleEtleXMsIHRyYW5z
YWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgpKTsKLX0KLQogdm9pZCBX
ZWJJREJPYmplY3RTdG9yZUltcGw6OnNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmIHByaW1h
cnlLZXksIGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiB3ZWJJbmRleElkcywgY29uc3QgV2Vi
VmVjdG9yPFdlYkluZGV4S2V5cz4mIHdlYkluZGV4S2V5cywgY29uc3QgV2ViSURCVHJhbnNhY3Rp
b24mIHRyYW5zYWN0aW9uKQogewogICAgIEFTU0VSVCh3ZWJJbmRleElkcy5zaXplKCkgPT0gd2Vi
SW5kZXhLZXlzLnNpemUoKSk7CkBAIC0xMjQsMTQgKzkxLDYgQEAgdm9pZCBXZWJJREJPYmplY3RT
dG9yZUltcGw6OnNldEluZGV4S2V5cyhjb25zdCBXZWJJREJLZXkmIHByaW1hcnlLZXksIGNvbnN0
IFdlYlYKICAgICBtX29iamVjdFN0b3JlLT5zZXRJbmRleEtleXMocHJpbWFyeUtleSwgaW5kZXhJ
ZHMsIGluZGV4S2V5cywgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKCkpOwogfQogCi12b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6c2V0SW5kZXhlc1JlYWR5
KGNvbnN0IFdlYlZlY3RvcjxXZWJTdHJpbmc+JiB3ZWJJbmRleE5hbWVzLCBjb25zdCBXZWJJREJU
cmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24pCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gaW5kZXhOYW1l
cyh3ZWJJbmRleE5hbWVzLnNpemUoKSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB3ZWJJ
bmRleE5hbWVzLnNpemUoKTsgKytpKQotICAgICAgICBpbmRleE5hbWVzW2ldID0gd2ViSW5kZXhO
YW1lc1tpXTsKLSAgICBtX29iamVjdFN0b3JlLT5zZXRJbmRleGVzUmVhZHkoaW5kZXhOYW1lcywg
dHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCkpOwotfQotCiB2
b2lkIFdlYklEQk9iamVjdFN0b3JlSW1wbDo6c2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3Rv
cjxsb25nIGxvbmc+JiB3ZWJJbmRleE5hbWVzLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJh
bnNhY3Rpb24pCiB7CiAgICAgVmVjdG9yPGludDY0X3Q+IGluZGV4SWRzKHdlYkluZGV4TmFtZXMu
c2l6ZSgpKTsKQEAgLTE1OCwxNCArMTE3LDYgQEAgV2ViSURCSW5kZXgqIFdlYklEQk9iamVjdFN0
b3JlSW1wbDo6Y3JlYXRlSW5kZXgobG9uZyBsb25nIGlkLCBjb25zdCBXZWJTdHJpbmcmIG4KICAg
ICByZXR1cm4gbmV3IFdlYklEQkluZGV4SW1wbChpbmRleCk7CiB9CiAKLVdlYklEQkluZGV4KiBX
ZWJJREJPYmplY3RTdG9yZUltcGw6OmluZGV4KGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViRXhj
ZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4g
aW5kZXggPSBtX29iamVjdFN0b3JlLT5pbmRleChuYW1lLCBlYyk7Ci0gICAgaWYgKCFpbmRleCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG5ldyBXZWJJREJJbmRleEltcGwoaW5kZXgp
OwotfQotCiBXZWJJREJJbmRleCogV2ViSURCT2JqZWN0U3RvcmVJbXBsOjppbmRleChsb25nIGxv
bmcgb2JqZWN0U3RvcmVJZCkKIHsKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNl
PiBpbmRleCA9IG1fb2JqZWN0U3RvcmUtPmluZGV4KG9iamVjdFN0b3JlSWQpOwpAQCAtMTc0LDEx
ICsxMjUsNiBAQCBXZWJJREJJbmRleCogV2ViSURCT2JqZWN0U3RvcmVJbXBsOjppbmRleChsb25n
IGxvbmcgb2JqZWN0U3RvcmVJZCkKICAgICByZXR1cm4gbmV3IFdlYklEQkluZGV4SW1wbChpbmRl
eCk7CiB9CiAKLXZvaWQgV2ViSURCT2JqZWN0U3RvcmVJbXBsOjpkZWxldGVJbmRleChjb25zdCBX
ZWJTdHJpbmcmIG5hbWUsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiB0cmFuc2FjdGlvbiwgV2Vi
RXhjZXB0aW9uQ29kZSYgZWMpCi17Ci0gICAgbV9vYmplY3RTdG9yZS0+ZGVsZXRlSW5kZXgobmFt
ZSwgdHJhbnNhY3Rpb24uZ2V0SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKCksIGVjKTsK
LX0KLQogdm9pZCBXZWJJREJPYmplY3RTdG9yZUltcGw6OmRlbGV0ZUluZGV4KGxvbmcgbG9uZyBv
YmplY3RTdG9yZUlkLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYgdHJhbnNhY3Rpb24sIFdlYkV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIG1fb2JqZWN0U3RvcmUtPmRlbGV0ZUluZGV4KG9iamVj
dFN0b3JlSWQsIHRyYW5zYWN0aW9uLmdldElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSgp
LCBlYyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJPYmpl
Y3RTdG9yZUltcGwuaCBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0
b3JlSW1wbC5oCmluZGV4IDVkZTNjOWExNWFkOGVmNWY0NjBhODg2YWMxY2RlYWJjY2JkNTgyZjgu
LjcwZjE5Y2M4ZmI3ZDk2MjZmMzA4YzY1MGY1NGQ4ZDJjMGViODRmOGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQk9iamVjdFN0b3JlSW1wbC5oCkBAIC00Niwx
OSArNDYsMTQgQEAgcHVibGljOgogICAgIH5XZWJJREJPYmplY3RTdG9yZUltcGwoKTsKIAogICAg
IHZvaWQgZ2V0KGNvbnN0IFdlYklEQktleVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3Qg
V2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7Ci0gICAgdm9pZCBwdXRXaXRo
SW5kZXhLZXlzKGNvbnN0IFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZSYsIGNvbnN0IFdlYklEQktl
eSYsIFB1dE1vZGUsIFdlYklEQkNhbGxiYWNrcyosIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJiwg
Y29uc3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlz
PiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICB2b2lkIHB1dChjb25zdCBXZWJTZXJpYWxpemVk
U2NyaXB0VmFsdWUmLCBjb25zdCBXZWJJREJLZXkmLCBQdXRNb2RlLCBXZWJJREJDYWxsYmFja3Mq
LCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYsIGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+Jiwg
Y29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mKTsKLSAgICB2b2lkIHNldEluZGV4S2V5cyhj
b25zdCBXZWJJREJLZXkmLCBjb25zdCBXZWJWZWN0b3I8V2ViU3RyaW5nPiYgaW5kZXhOYW1lcywg
Y29uc3QgV2ViVmVjdG9yPFdlYkluZGV4S2V5cz4mLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYp
OwogICAgIHZvaWQgc2V0SW5kZXhLZXlzKGNvbnN0IFdlYklEQktleSYsIGNvbnN0IFdlYlZlY3Rv
cjxsb25nIGxvbmc+JiBpbmRleE5hbWVzLCBjb25zdCBXZWJWZWN0b3I8V2ViSW5kZXhLZXlzPiYs
IGNvbnN0IFdlYklEQlRyYW5zYWN0aW9uJik7Ci0gICAgdm9pZCBzZXRJbmRleGVzUmVhZHkoY29u
c3QgV2ViVmVjdG9yPFdlYlN0cmluZz4mLCBjb25zdCBXZWJJREJUcmFuc2FjdGlvbiYpOwogICAg
IHZvaWQgc2V0SW5kZXhlc1JlYWR5KGNvbnN0IFdlYlZlY3Rvcjxsb25nIGxvbmc+JiwgY29uc3Qg
V2ViSURCVHJhbnNhY3Rpb24mKTsKICAgICB2b2lkIGRlbGV0ZUZ1bmN0aW9uKGNvbnN0IFdlYklE
QktleVJhbmdlJiwgV2ViSURCQ2FsbGJhY2tzKiwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBX
ZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBjbGVhcihXZWJJREJDYWxsYmFja3MqLCBjb25z
dCBXZWJJREJUcmFuc2FjdGlvbiYsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIFdlYklEQklu
ZGV4KiBjcmVhdGVJbmRleChsb25nIGxvbmcsIGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgY29uc3Qg
V2ViSURCS2V5UGF0aCYsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIGNvbnN0IFdlYklE
QlRyYW5zYWN0aW9uJiwgV2ViRXhjZXB0aW9uQ29kZSYpOwotICAgIFdlYklEQkluZGV4KiBpbmRl
eChjb25zdCBXZWJTdHJpbmcmIG5hbWUsIFdlYkV4Y2VwdGlvbkNvZGUmKTsKICAgICBXZWJJREJJ
bmRleCogaW5kZXgobG9uZyBsb25nKTsKLSAgICB2b2lkIGRlbGV0ZUluZGV4KGNvbnN0IFdlYlN0
cmluZyYgbmFtZSwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJFeGNlcHRpb25Db2RlJik7
CiAgICAgdm9pZCBkZWxldGVJbmRleChsb25nIGxvbmcsIGNvbnN0IFdlYklEQlRyYW5zYWN0aW9u
JiwgV2ViRXhjZXB0aW9uQ29kZSYpOwogCiAgICAgdm9pZCBvcGVuQ3Vyc29yKGNvbnN0IFdlYklE
QktleVJhbmdlJiwgV2ViSURCQ3Vyc29yOjpEaXJlY3Rpb24sIFdlYklEQkNhbGxiYWNrcyosIFdl
YklEQlRyYW5zYWN0aW9uOjpUYXNrVHlwZSwgY29uc3QgV2ViSURCVHJhbnNhY3Rpb24mLCBXZWJF
eGNlcHRpb25Db2RlJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9X
ZWJJREJUcmFuc2FjdGlvbkltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2Vi
SURCVHJhbnNhY3Rpb25JbXBsLmNwcAppbmRleCA2NjE2ZDY3MWZjMzBjOTdlNjcyNjE0YzFhNDE5
OWUzYTdkMDg4NTc3Li40MGQ3ZDc1NjMxNmMzYzMxZWE4YWJjNTQ0MDA5YTAwNjYyNjljMjQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbklt
cGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYklEQlRyYW5zYWN0aW9u
SW1wbC5jcHAKQEAgLTQ3LDE0ICs0Nyw2IEBAIFdlYklEQlRyYW5zYWN0aW9uSW1wbDo6fldlYklE
QlRyYW5zYWN0aW9uSW1wbCgpCiB7CiB9CiAKLVdlYklEQk9iamVjdFN0b3JlKiBXZWJJREJUcmFu
c2FjdGlvbkltcGw6Om9iamVjdFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCi17Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4g
b2JqZWN0U3RvcmUgPSBtX2JhY2tlbmQtPm9iamVjdFN0b3JlKG5hbWUsIGVjKTsKLSAgICBpZiAo
IW9iamVjdFN0b3JlKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbmV3IFdlYklEQk9i
amVjdFN0b3JlSW1wbChvYmplY3RTdG9yZSk7Ci19Ci0KIFdlYklEQk9iamVjdFN0b3JlKiBXZWJJ
REJUcmFuc2FjdGlvbkltcGw6Om9iamVjdFN0b3JlKGxvbmcgbG9uZyBpbmRleElkLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
PiBvYmplY3RTdG9yZSA9IG1fYmFja2VuZC0+b2JqZWN0U3RvcmUoaW5kZXhJZCwgZWMpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViSURCVHJhbnNhY3Rpb25JbXBs
LmggYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaApp
bmRleCAxZWU2YWI4MDE5N2VmNzhmYWZhMTNlOTZmZDA1ZjcwZjM3YmFkNzQ5Li4wZmI2NTM3Njc2
MzE2Y2U3MDBjZmJhYzhkZTg5OTNjZWM2NDY2YTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9XZWJJREJUcmFuc2FjdGlvbkltcGwuaApAQCAtNDEsNyArNDEsNiBAQCBw
dWJsaWM6CiAgICAgV2ViSURCVHJhbnNhY3Rpb25JbXBsKFdURjo6UGFzc1JlZlB0cjxXZWJDb3Jl
OjpJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KTsKICAgICB2aXJ0dWFsIH5XZWJJREJU
cmFuc2FjdGlvbkltcGwoKTsKIAotICAgIHZpcnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVj
dFN0b3JlKGNvbnN0IFdlYlN0cmluZyYgbmFtZSwgV2ViRXhjZXB0aW9uQ29kZSYpOwogICAgIHZp
cnR1YWwgV2ViSURCT2JqZWN0U3RvcmUqIG9iamVjdFN0b3JlKGxvbmcgbG9uZyBpbmRleElkLCBX
ZWJFeGNlcHRpb25Db2RlJik7CiAgICAgdmlydHVhbCB2b2lkIGNvbW1pdCgpOwogICAgIHZpcnR1
YWwgdm9pZCBhYm9ydCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0
cy9JREJBYm9ydE9uQ29ycnVwdFRlc3QuY3BwCmluZGV4IDJiZTRlNTY3ZTczMTVhZGNlZTZhNWQx
NjQ3OGEyOGZmMmE2YzdmYmUuLmVjMDc5ZjUwY2QzY2JjZTlkZmUyMTIxMzlkNDYwN2UxOTQ0ZjNh
MmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vdGVzdHMvSURCQWJvcnRPbkNv
cnJ1cHRUZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Rlc3RzL0lEQkFib3J0
T25Db3JydXB0VGVzdC5jcHAKQEAgLTI0LDYgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIklEQkNhbGxiYWNr
cy5oIgogI2luY2x1ZGUgIklEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2UuaCIKICNpbmNsdWRlICJJ
REJEYXRhYmFzZUJhY2tlbmRJbnRlcmZhY2UuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vdGVzdHMvSURCUmVxdWVzdFRlc3QuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS90ZXN0cy9JREJSZXF1ZXN0VGVzdC5jcHAKaW5kZXggNTJhMDM4ZDViZjU3NDRjZmI2MmZkYWYw
OTE0YzBjMTA3YjFlMTI0YS4uMjdmNmMxZTZiMzY0YTRlMjIzNmExNDI1NzViMzI5N2U2OWFmNmNm
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJSZXF1ZXN0VGVz
dC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS90ZXN0cy9JREJSZXF1ZXN0VGVzdC5j
cHAKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgIklEQlJlcXVlc3QuaCIKIAorI2luY2x1
ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
LmgiCiAjaW5jbHVkZSAiSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5oIgogI2luY2x1ZGUgIklEQlRy
YW5zYWN0aW9uQ29vcmRpbmF0b3IuaCIK
</data>

          </attachment>
      

    </bug>

</bugzilla>