<?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>89377</bug_id>
          
          <creation_ts>2012-06-18 13:55:18 -0700</creation_ts>
          <short_desc>IndexedDB: Move method precondition checks to front end objects</short_desc>
          <delta_ts>2012-06-26 15:04:40 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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>88467</dependson>
          <blocked>90001</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Joshua Bell">jsbell</reporter>
          <assigned_to name="Joshua Bell">jsbell</assigned_to>
          <cc>alecflett</cc>
    
    <cc>dgrogan</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>651695</commentid>
    <comment_count>0</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-18 13:55:18 -0700</bug_when>
    <thetext>Currently, most IDB object implementations look like this (pseudocode):

IDBFooThingy::foo(param1, param2, ec) {
  request = IDBRequest::create(...);
  m_backend-&gt;foo(param1, param2, request, ec);
  if (ec) { // reporting this back is extra work
    request.markEarlyDeath(); // Complicated extra state
  }
  return request;
}

IDBFooThingyBackendImpl::foo(param1, param2, callbacks, ec) {
  if (param1.isBad()) { // Would have been nice to detect this earlier
    ec = SOME_ERR;
    return;
  }
  if (!param2.isGood()) { // Ditto.
    ec = OTHER_ERR;
    return;
  }
  if (m_transaction-&gt;scheduleTask(...)) {
    ec = TRANSACTION_INACTIVE_ERR; // Can&apos;t we know this earlier?
  }
}

Now that the metadata for stores/indexes is on the front end, this logic can be moved to the front end so that parameters can be validated prior to IPC. Additionally, the front end knows when the transaction is active, so in most cases the scheduling can be avoided.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654868</commentid>
    <comment_count>1</comment_count>
      <attachid>148887</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-21 14:14:45 -0700</bug_when>
    <thetext>Created attachment 148887
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654869</commentid>
    <comment_count>2</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-21 14:15:27 -0700</bug_when>
    <thetext>Patch depends on the 88467, but here&apos;s some of the back-&gt;front migration work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>654915</commentid>
    <comment_count>3</comment_count>
      <attachid>148887</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-21 15:05:00 -0700</bug_when>
    <thetext>Comment on attachment 148887
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:136
&gt; +    if (!m_transaction-&gt;isActive()) {

The transaction internal |active| flag used here is implemented in a non-spec-compliant way. http://webkit.org/b/89379 will land a real implementation. Just enough logic exists to move these checks from the back-end to the front-end.

As seen below, a transaction will be born with active=true and will have active=false when either abort is called explicitly or when an complete or abort event is fired at it.

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:150
&gt; +    RefPtr&lt;IDBObjectStore&gt; objectStore = effectiveObjectStore();

Logic moved from IDBObjectStoreBackendImpl::put() to IDBCursor::update().

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:163
&gt; +    ASSERT(!ec);

This pattern (that the back end calls are guaranteed to succeed, so requests don&apos;t need &quot;early death&quot; states) is used throughout now.

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:175
&gt; +    if (!m_transaction-&gt;isActive()) {

Previously, m_request was cleared out when the transaction is finished. This narrows the scope further (and http://webkit.org/b/89379 will take it even farther)

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:198
&gt; +    if (key &amp;&amp; !key-&gt;isValid()) {

As seen in such patches as http://webkit.org/b/86123

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:213
&gt; +    if (!m_request-&gt;resetReadyState(m_transaction.get())) {

WebKit style - return early in error case.

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:266
&gt; +PassRefPtr&lt;IDBObjectStore&gt; IDBCursor::effectiveObjectStore()

The &quot;effective object store&quot; terminology is per spec.

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.h:94
&gt; +    virtual bool isKeyCursor() const { return true; }

&quot;Key&quot; cursors and &quot;value&quot; cursors are distinguished in the back end by type flags, but on the front end by different classes. This seemed like the easiest way to expose this distinction, but alternatives welcome.

&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:123
&gt; +        ASSERT_NOT_REACHED();

... and this pattern is now common on the back end - the only reason task scheduling can fail is if the back end is inactive, but the front end now tracks this state.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:132
&gt; +    if (!usesInLineKeys &amp;&amp; !hasKeyGenerator &amp;&amp; !key) {

Logic moved from IDBObjectStoreBackendImpl::add() to IDBObjectStore::add() - it should also match the ordering in the spec for these clauses.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:161
&gt; +    // TODO: Pass through keyPathKey as key

Oops, need to change to a FIXME. Changing what&apos;s passed through will be a follow-up patch.

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStore.cpp:189
&gt; +    const IDBKeyPath&amp; keyPath = m_metadata.keyPath;

Right now, the logic is duplicated between add() and put() - I&apos;ll refactor to a common method that takes the enum flag.

&gt; Source/WebCore/Modules/indexeddb/IDBRequest.cpp:327
&gt; +        m_readyState = EarlyDeath;

The public method for setting this state goes away, but we still need it for this case (context stopping while request is pending).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655923</commentid>
    <comment_count>4</comment_count>
      <attachid>149139</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-22 16:38:41 -0700</bug_when>
    <thetext>Created attachment 149139
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>655927</commentid>
    <comment_count>5</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-22 16:42:26 -0700</bug_when>
    <thetext>alecflett@, dgrogan@ - how&apos;s this look?

tony@ - r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656768</commentid>
    <comment_count>6</comment_count>
      <attachid>149139</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-06-25 11:52:44 -0700</bug_when>
    <thetext>Comment on attachment 149139
Patch

David or Alec, can one or both of you review this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>656827</commentid>
    <comment_count>7</comment_count>
      <attachid>149139</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-06-25 13:50:57 -0700</bug_when>
    <thetext>Comment on attachment 149139
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:151
&gt; +    const IDBKeyPath&amp; keyPath = objectStore-&gt;metadata().keyPath;

Minor, but in general I&apos;d sooner see calling objectStore-&gt;keyPath() so most callers aren&apos;t dependent on the actual use of metadata objects.

&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:213
&gt; +    if (!m_request-&gt;resetReadyState(m_transaction.get())) {

Sanity check just because it wasn&apos;t mentioned: the FIXME is ok to remove?

&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:123
&gt; +        ASSERT_NOT_REACHED();

Why wouldn&apos;t this be reached? Is there something else we can also assert here, like m_transaction-&gt;isActive()?

&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:186
&gt; +        ASSERT_NOT_REACHED();

Same here as my previous comment

&gt; Source/WebCore/Modules/indexeddb/IDBDatabaseBackendImpl.cpp:166
&gt; +        ASSERT_NOT_REACHED();

another.. you get the idea... :)

&gt; Source/WebCore/Modules/indexeddb/IDBIndex.cpp:125
&gt; +    ASSERT(!ec);

Assert does seem dangerous here - maybe worth a comment (I see the m_transaction-&gt;isActive()

(looks like you got a lot of them, but I wonder how many of the ones that are left could be removed? Mostly in the interest of getting rid of an extra state for IDBRequest)

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:-160
&gt; -    if (putMode != CursorUpdate) {

this is great, and vastly simplifies some of my put() work coming up!

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:434
&gt; +    ASSERT(transaction-&gt;mode() == IDBTransaction::VERSION_CHANGE);

this is the sort of ASSERT I was wondering if we could throw above with all the ASSERT_NOT_REACHED stuff - i.e. making sure we&apos;re in a specific state

&gt; Source/WebCore/Modules/indexeddb/IDBObjectStoreBackendImpl.cpp:445
&gt; +        ASSERT_NOT_REACHED();

Can we remove this entirely then?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657007</commentid>
    <comment_count>8</comment_count>
      <attachid>149139</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-25 16:48:23 -0700</bug_when>
    <thetext>Comment on attachment 149139
Patch

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

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:151
&gt;&gt; +    const IDBKeyPath&amp; keyPath = objectStore-&gt;metadata().keyPath;
&gt; 
&gt; Minor, but in general I&apos;d sooner see calling objectStore-&gt;keyPath() so most callers aren&apos;t dependent on the actual use of metadata objects.

Unfortunately, objectStore-&gt;keyPath() implements the IDL which produces an IDBAny which is a one-way transform. Otherwise I&apos;d agree.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBCursor.cpp:213
&gt;&gt; +    if (!m_request-&gt;resetReadyState(m_transaction.get())) {
&gt; 
&gt; Sanity check just because it wasn&apos;t mentioned: the FIXME is ok to remove?

Hrm, good point. I thought it was a dead comment, but I now understand the question. I&apos;ll put it back, and undo this unrelated cleanup.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBCursorBackendImpl.cpp:123
&gt;&gt; +        ASSERT_NOT_REACHED();
&gt; 
&gt; Why wouldn&apos;t this be reached? Is there something else we can also assert here, like m_transaction-&gt;isActive()?

Re: the logic: IDBTransactionBackendImpl::scheduleTask only fails if the transaction is finished. The front end should never call into this while the transaction is inactive (via the isActive tests). Once the transaction is finished it can never be active again.

However (as we discussed offline), there&apos;s a scenario where this isn&apos;t true in a multiprocess port. If the transaction aborts while the front-end-&gt;back-end call is &quot;in flight&quot; the transaction could be in a &quot;finished&quot; state before this is reached, and we need to signal the front-end as the code previously did. So I&apos;m going to remove these assertions and restore the error handling path on the front-end.

&gt;&gt; Source/WebCore/Modules/indexeddb/IDBIndex.cpp:125
&gt;&gt; +    ASSERT(!ec);
&gt; 
&gt; Assert does seem dangerous here - maybe worth a comment (I see the m_transaction-&gt;isActive()
&gt; 
&gt; (looks like you got a lot of them, but I wonder how many of the ones that are left could be removed? Mostly in the interest of getting rid of an extra state for IDBRequest)

This is now reverted. The extra state needs to stay, alas.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657012</commentid>
    <comment_count>9</comment_count>
      <attachid>149394</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-25 16:52:20 -0700</bug_when>
    <thetext>Created attachment 149394
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657673</commentid>
    <comment_count>10</comment_count>
      <attachid>149394</attachid>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-06-26 09:54:56 -0700</bug_when>
    <thetext>Comment on attachment 149394
Patch

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

&gt; Source/WebCore/Modules/indexeddb/IDBTransaction.h:71
&gt; +    // FIXME: Implement internal |active| flag per spec. http://webkit.org/b/89379

Last thing: Is this fixme just cruft from development? if not, how are we divergent from the spec at this point - put at least a simple explanation here..</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657680</commentid>
    <comment_count>11</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-26 10:03:01 -0700</bug_when>
    <thetext>(In reply to comment #10)

&gt; &gt; Source/WebCore/Modules/indexeddb/IDBTransaction.h:71
&gt; &gt; +    // FIXME: Implement internal |active| flag per spec. http://webkit.org/b/89379
&gt; 
&gt; Last thing: Is this fixme just cruft from development? if not, how are we divergent from the spec at this point - put at least a simple explanation here..

The details on how we diverge from the spec are captured in the linked bug but I can clarify the comment somewhat.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657683</commentid>
    <comment_count>12</comment_count>
      <attachid>149549</attachid>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-26 10:04:43 -0700</bug_when>
    <thetext>Created attachment 149549
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657684</commentid>
    <comment_count>13</comment_count>
    <who name="Joshua Bell">jsbell</who>
    <bug_when>2012-06-26 10:05:56 -0700</bug_when>
    <thetext>&gt; The details on how we diverge from the spec are captured in the linked bug but I can clarify the comment somewhat.

Actually, I just removed the comment; the subtle details are more than belongs in a FIXME when there&apos;s already a bug filed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657687</commentid>
    <comment_count>14</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2012-06-26 10:08:30 -0700</bug_when>
    <thetext>ok, sorry I wasn&apos;t sure if the details in the other bug were a superset of what is left after this patch... LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658022</commentid>
    <comment_count>15</comment_count>
      <attachid>149549</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-26 15:04:28 -0700</bug_when>
    <thetext>Comment on attachment 149549
Patch

Clearing flags on attachment: 149549

Committed r121291: &lt;http://trac.webkit.org/changeset/121291&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658025</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-26 15:04:40 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>148887</attachid>
            <date>2012-06-21 14:14:45 -0700</date>
            <delta_ts>2012-06-22 16:38:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89377-20120621141445.patch</filename>
            <type>text/plain</type>
            <size>49962</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIwOTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yLmNwcAppbmRleCA4ZDIxOGVlODU1NzhlODJlMWY3ZTQxYzA5NmI5
ZGUyYzVmOWMyMDYwLi4wYmFiMWUzYTM2NjQ2YTVjZDJmMDc0Zjc3Mzg0NjkwNzYyNTIyNzU4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAKQEAg
LTI5LDkgKzI5LDExIEBACiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKICNpbmNsdWRl
ICJJREJBbnkuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
SURCQ2FsbGJhY2tzLmgiCiAjaW5jbHVkZSAiSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZS5oIgog
I2luY2x1ZGUgIklEQktleS5oIgorI2luY2x1ZGUgIklEQk9iamVjdFN0b3JlLmgiCiAjaW5jbHVk
ZSAiSURCUmVxdWVzdC5oIgogI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKICNpbmNsdWRlICJJREJU
cmFuc2FjdGlvbi5oIgpAQCAtMTI1LDMwICsxMjcsNDAgQEAgSURCQW55KiBJREJDdXJzb3I6OnNv
dXJjZSgpIGNvbnN0CiBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkN1cnNvcjo6dXBkYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlw
dFZhbHVlPiBwcnBWYWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJ
REJDdXJzb3I6OnVwZGF0ZSIpOworICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZh
bHVlID0gcHJwVmFsdWU7CiAKLSAgICBpZiAoIW1fZ290VmFsdWUpIHsKKyAgICBpZiAoIW1fZ290
VmFsdWUgfHwgaXNLZXlDdXJzb3IoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLQor
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KICAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CiAgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJFQURfT05MWV9FUlI7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KLQotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVl
ID0gcHJwVmFsdWU7CiAgICAgaWYgKHZhbHVlLT5ibG9iVVJMcygpLnNpemUoKSA+IDApIHsKICAg
ICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxpc3Qgc3VwcG9ydAogICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfREFUQV9DTE9ORV9FUlI7CiAgICAgICAgIHJl
dHVybiAwOwogICAgIH0KIAorICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZT4gb2JqZWN0U3RvcmUg
PSBlZmZlY3RpdmVPYmplY3RTdG9yZSgpOworICAgIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgg
PSBvYmplY3RTdG9yZS0+bWV0YWRhdGEoKS5rZXlQYXRoOworICAgIGNvbnN0IGJvb2wgdXNlc0lu
TGluZUtleXMgPSAha2V5UGF0aC5pc051bGwoKTsKKyAgICBpZiAodXNlc0luTGluZUtleXMpIHsK
KyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJp
YWxpemVkVmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgaWYgKCFrZXlQ
YXRoS2V5IHx8ICFrZXlQYXRoS2V5LT5pc0VxdWFsKG1fY3VycmVudFByaW1hcnlLZXkuZ2V0KCkp
KSB7CisgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCiAgICAgUmVmUHRyPElEQlJl
cXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVh
dGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIG1fYmFja2VuZC0+dXBkYXRlKHZh
bHVlLCByZXF1ZXN0LCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtF
YXJseURlYXRoKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBBU1NFUlQoIWVjKTsK
ICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKQEAgLTE2MCw3ICsxNzIsNyBAQCB2
b2lkIElEQkN1cnNvcjo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50LCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9yZXF1ZXN0KSB7Cisg
ICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTE4MywxMiArMTk1LDEyIEBAIHZvaWQgSURCQ3Vyc29yOjphZHZhbmNlKHVu
c2lnbmVkIGxvbmcgY291bnQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogdm9pZCBJREJDdXJzb3I6OmNv
bnRpbnVlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMp
CiB7CiAgICAgSURCX1RSQUNFKCJJREJDdXJzb3I6OmNvbnRpbnVlIik7Ci0gICAgaWYgKGtleSAm
JiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKKyAgICBpZiAoa2V5ICYm
ICFrZXktPmlzVmFsaWQoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpE
QVRBX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9yZXF1ZXN0KSB7
CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CiAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KQEAgLTE5OCwyMSArMjEwLDIzIEBAIHZvaWQgSURCQ3Vyc29yOjpjb250aW51
ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gRklYTUU6IFdlJ3JlIG5vdCB1c2luZyB0aGUg
Y29udGV4dCBmcm9tIHdoZW4gY29udGludWUgd2FzIGNhbGxlZCwgd2hpY2ggbWVhbnMgdGhlIGNh
bGxiYWNrCi0gICAgLy8gICAgICAgIHdpbGwgYmUgb24gdGhlIG9yaWdpbmFsIGNvbnRleHQgb3Bl
bkN1cnNvciB3YXMgY2FsbGVkIG9uLiBJcyB0aGlzIHJpZ2h0PwotICAgIGlmIChtX3JlcXVlc3Qt
PnJlc2V0UmVhZHlTdGF0ZShtX3RyYW5zYWN0aW9uLmdldCgpKSkgewotICAgICAgICBtX3JlcXVl
c3QtPnNldEN1cnNvcih0aGlzKTsKLSAgICAgICAgbV9nb3RWYWx1ZSA9IGZhbHNlOwotICAgICAg
ICBtX2JhY2tlbmQtPmNvbnRpbnVlRnVuY3Rpb24oa2V5LCBtX3JlcXVlc3QsIGVjKTsKLSAgICB9
IGVsc2UgeworICAgIGlmICghbV9yZXF1ZXN0LT5yZXNldFJlYWR5U3RhdGUobV90cmFuc2FjdGlv
bi5nZXQoKSkpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKKyAgICAgICAgcmV0
dXJuOwogICAgIH0KKyAgICBtX3JlcXVlc3QtPnNldEN1cnNvcih0aGlzKTsKKyAgICBtX2dvdFZh
bHVlID0gZmFsc2U7CisgICAgbV9iYWNrZW5kLT5jb250aW51ZUZ1bmN0aW9uKGtleSwgbV9yZXF1
ZXN0LCBlYyk7CiB9CiAKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjpkZWxldGVG
dW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKICAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6ZGVsZXRlIik7CisgICAgaWYgKCFtX3Ry
YW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQog
ICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0y
MjQsMTAgKzIzOCw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjpkZWxldGVG
dW5jdGlvbihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0CiAgICAgfQogICAgIFJlZlB0
cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFu
eTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICBtX2JhY2tlbmQtPmRl
bGV0ZUZ1bmN0aW9uKHJlcXVlc3QsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVz
dC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIEFTU0VS
VCghZWMpOwogICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKIH0KIApAQCAtMjUyLDYgKzI2
MywxNCBAQCB2b2lkIElEQkN1cnNvcjo6c2V0VmFsdWVSZWFkeSgpCiAgICAgbV92YWx1ZUlzRGly
dHkgPSB0cnVlOwogfQogCitQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJDdXJzb3I6OmVm
ZmVjdGl2ZU9iamVjdFN0b3JlKCkKK3sKKyAgICBpZiAobV9zb3VyY2UtPnR5cGUoKSA9PSBJREJB
bnk6OklEQk9iamVjdFN0b3JlVHlwZSkKKyAgICAgICAgcmV0dXJuIG1fc291cmNlLT5pZGJPYmpl
Y3RTdG9yZSgpOworICAgIFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBtX3NvdXJjZS0+aWRiSW5k
ZXgoKTsKKyAgICByZXR1cm4gaW5kZXgtPm9iamVjdFN0b3JlKCk7Cit9CisKIHVuc2lnbmVkIHNo
b3J0IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJlY3Rpb24oY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25T
dHJpbmcsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmIChkaXJlY3Rpb25TdHJpbmcgPT0g
SURCQ3Vyc29yOjpkaXJlY3Rpb25OZXh0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5oCmluZGV4IDNmOWQ4NGY5ODgxMTgxMmM2YmZjYjUzYzIzODgzMWVl
M2ZiYjVlNmUuLjRmNDU2NGVlYjQyMTI3YWE4N2IwNjkzNmI1NGUwNDNmNGU3ZjU1ODYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCkBAIC05MSw4ICs5
MSwxMSBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICBJREJDdXJzb3IoUGFzc1JlZlB0cjxJ
REJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJ
REJUcmFuc2FjdGlvbiopOworICAgIHZpcnR1YWwgYm9vbCBpc0tleUN1cnNvcigpIGNvbnN0IHsg
cmV0dXJuIHRydWU7IH0KIAogcHJpdmF0ZToKKyAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3Jl
PiBlZmZlY3RpdmVPYmplY3RTdG9yZSgpOworCiAgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJ
bnRlcmZhY2U+IG1fYmFja2VuZDsKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gbV9yZXF1ZXN0Owog
ICAgIFJlZlB0cjxJREJBbnk+IG1fc291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCmluZGV4IGI2MjQ2
ZTkxOWUwYjE4NzI3YzAzNTE0ZDdiODFhOTJiODk5OGYyOTguLjlmMTZjMjk3NDM4ZDZhZGU5MGQx
NzljYWNlNWFlZWRkOWQxNjdhNTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAgLTkzLDEwICs5Myw4
IEBAIHZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OnVwZGF0ZShQYXNzUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUsIFBhc3NSCiB7CiAgICAgSURCX1RSQUNFKCJJREJDdXJzb3JC
YWNrZW5kSW1wbDo6dXBkYXRlIik7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAh
PSBJREJUcmFuc2FjdGlvbjo6UkVBRF9PTkxZKTsKLSAgICBpZiAoIW1fY3Vyc29yIHx8IG1fY3Vy
c29yVHlwZSA9PSBJbmRleEtleUN1cnNvcikgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Cisg
ICAgQVNTRVJUKG1fY3Vyc29yKTsKKyAgICBBU1NFUlQobV9jdXJzb3JUeXBlICE9IEluZGV4S2V5
Q3Vyc29yKTsKIAogICAgIG1fb2JqZWN0U3RvcmUtPnB1dCh2YWx1ZSwgbV9jdXJzb3ItPnByaW1h
cnlLZXkoKSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpDdXJzb3JVcGRhdGUsIGNh
bGxiYWNrcywgbV90cmFuc2FjdGlvbi5nZXQoKSwgZWMpOwogfQpAQCAtMTIxLDE2ICsxMTksMjAg
QEAgdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRy
PElEQktleT4gcHJwS2V5LCBQYXNzUmVmUHQKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICgh
bV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCQ3Vyc29y
QmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rpb25JbnRlcm5hbCwgdGhpcywga2V5LCBwcnBDYWxs
YmFja3MpKSkKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxs
YmFja1Rhc2soJklEQkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uSW50ZXJuYWws
IHRoaXMsIGtleSwgcHJwQ2FsbGJhY2tzKSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNU
SVZFX0VSUjsKKyAgICB9CiB9CiAKIHZvaWQgSURCQ3Vyc29yQmFja2VuZEltcGw6OmFkdmFuY2Uo
dW5zaWduZWQgbG9uZyBjb3VudCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNr
cywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5k
SW1wbDo6YWR2YW5jZSIpOwogCi0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2so
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJDdXJzb3JCYWNrZW5kSW1wbDo6YWR2YW5jZUludGVybmFs
LCB0aGlzLCBjb3VudCwgcHJwQ2FsbGJhY2tzKSkpCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5z
Y2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJDdXJzb3JCYWNrZW5kSW1wbDo6YWR2
YW5jZUludGVybmFsLCB0aGlzLCBjb3VudCwgcHJwQ2FsbGJhY2tzKSkpIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRS
QU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICB9CiB9CiAKIHZvaWQgSURCQ3Vyc29yQmFja2Vu
ZEltcGw6OmFkdmFuY2VJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0
cjxJREJDdXJzb3JCYWNrZW5kSW1wbD4gcHJwQ3Vyc29yLCB1bnNpZ25lZCBsb25nIGNvdW50LCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQpAQCAtMTgwLDggKzE4MiwxMCBAQCB2
b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpkZWxldGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gcHJwQ2FsbGJhY2tzLAogdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0
Y2hDb250aW51ZShpbnQgbnVtYmVyVG9GZXRjaCwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IHBy
cENhbGxiYWNrcywgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJDdXJz
b3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZSIpOwotICAgIGlmICghbV90cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCQ3Vyc29yQmFja2VuZEltcGw6
OnByZWZldGNoQ29udGludWVJbnRlcm5hbCwgdGhpcywgbnVtYmVyVG9GZXRjaCwgcHJwQ2FsbGJh
Y2tzKSkpCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hDb250aW51ZUludGVybmFsLCB0
aGlzLCBudW1iZXJUb0ZldGNoLCBwcnBDYWxsYmFja3MpKSkgeworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJ
T05fSU5BQ1RJVkVfRVJSOworICAgIH0KIH0KIAogdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6
cHJlZmV0Y2hDb250aW51ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVm
UHRyPElEQkN1cnNvckJhY2tlbmRJbXBsPiBwcnBDdXJzb3IsIGludCBudW1iZXJUb0ZldGNoLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yV2l0aFZhbHVlLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaAppbmRleCBhMWJhMTRm
OTYxYzVhMGI4OGNlZGVjYzMwYTUwOWExNTRhNjE3OWUwLi45YjM5NmJhMzVhYTA2YjM5MTRlMDcy
YTY4MWQ3MDRlMDVjYWVmOGNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaApAQCAtNDEsNiArNDEsOSBAQCBwdWJsaWM6
CiAgICAgLy8gVGhlIHZhbHVlIGF0dHJpYnV0ZSBkZWZpbmVkIGluIHRoZSBJREwgaXMgc2ltcGx5
IGltcGxlbWVudGVkIGluIElEQkN1cnNvciAoYnV0IG5vdCBleHBvc2VkIHZpYQogICAgIC8vIGl0
cyBJREwpLiBUaGlzIGlzIHRvIG1ha2UgdGhlIGltcGxlbWVudGF0aW9uIG1vcmUgc2ltcGxlIHdo
aWxlIG1hdGNoaW5nIHdoYXQgdGhlIHNwZWMgc2F5cy4KIAorcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgYm9vbCBpc0tleUN1cnNvcigpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisK
IHByaXZhdGU6CiAgICAgSURCQ3Vyc29yV2l0aFZhbHVlKFBhc3NSZWZQdHI8SURCQ3Vyc29yQmFj
a2VuZEludGVyZmFjZT4sIElEQlJlcXVlc3QqLCBJREJBbnkqIHNvdXJjZSwgSURCVHJhbnNhY3Rp
b24qKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJEYXRhYmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRh
YmFzZS5jcHAKaW5kZXggMGE0OTQwMGJiODY1NWVhZTkwNGZjZTY5ZDllZDdiNDA4NmJiN2ZjYS4u
YWIxMjNjM2RjYzk0ODY2ZGVlYWNlYTAxNzg5Y2E1ZjIyODQ3MzkzOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcApAQCAtMTE3LDYgKzEx
NywxMCBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJEYXRhYmFzZTo6Y3JlYXRlT2Jq
ZWN0U3RvcmUoY29uc3QgU3RyaW5nJiBuYW1lLCBjbwogICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KKyAgICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Cisg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgSURCS2V5UGF0aCBrZXlQYXRoOwog
ICAgIGlmICghb3B0aW9ucy5pc1VuZGVmaW5lZE9yTnVsbCgpKSB7CkBAIC0xMjgsNiArMTMyLDEx
IEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RT
dG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvCiAgICAgICAgICAgICBrZXlQYXRoID0gSURCS2V5
UGF0aChrZXlQYXRoU3RyaW5nKTsKICAgICB9CiAKKyAgICBpZiAobV9tZXRhZGF0YS5vYmplY3RT
dG9yZXMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6Q09OU1RSQUlOVF9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwogICAgIGlmICgh
a2V5UGF0aC5pc051bGwoKSAmJiAha2V5UGF0aC5pc1ZhbGlkKCkpIHsKICAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX1NZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAwOwpA
QCAtMTYyLDYgKzE3MSwxNCBAQCB2b2lkIElEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CisgICAgaWYgKCFtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFtX21ldGFkYXRhLm9iamVj
dFN0b3Jlcy5jb250YWlucyhuYW1lKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIG1f
YmFja2VuZC0+ZGVsZXRlT2JqZWN0U3RvcmUobmFtZSwgbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rp
b24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmICghZWMpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAK
aW5kZXggYjYzNmQ4MGE2OWZiNTY1YmEwNjI1ZDgxNjI4YmYyNGUxNDY1NTYwNC4uMmQzZjM3MTU1
Mjg0Mjc4YjUwOWM0YTRiOTY4ZjA1MjQ2NDVlZTQwMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAK
QEAgLTE1NCwxMCArMTU0LDcgQEAgUGFzc1JlZlB0cjxET01TdHJpbmdMaXN0PiBJREJEYXRhYmFz
ZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9yZU5hbWVzKCkgY29uc3QKIFBhc3NSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVP
YmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgs
IGJvb2wgYXV0b0luY3JlbWVudCwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFu
c2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9u
UHRyLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKLSAgICBpZiAo
bV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAg
ICBBU1NFUlQoIW1fb2JqZWN0U3RvcmVzLmNvbnRhaW5zKG5hbWUpKTsKIAogICAgIFJlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBuYW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKICAg
ICBBU1NFUlQob2JqZWN0U3RvcmUtPm5hbWUoKSA9PSBuYW1lKTsKQEAgLTE2Niw2ICsxNjMsNyBA
QCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6Y3JlYXRlT2JqZWN0UwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tl
bmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CiAgICAgaWYgKCF0cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNr
ZW5kSW1wbDo6Y3JlYXRlT2JqZWN0U3RvcmVJbnRlcm5hbCwgZGF0YWJhc2UsIG9iamVjdFN0b3Jl
LCB0cmFuc2FjdGlvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0
ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6cmVtb3ZlT2JqZWN0U3RvcmVG
cm9tTWFwLCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUpKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05f
SU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xOTUsMTUgKzE5Mywx
NCBAQCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZT4gSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6b2JqZWN0U3RvcmUoYwogdm9pZCBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpkZWxldGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFj
a2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IEFTU0VSVCh0cmFuc2FjdGlvblB0ci0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9O
X0NIQU5HRSk7Ci0gICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0
b3JlID0gbV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUpOwotICAgIGlmICghb2JqZWN0U3RvcmUpIHsK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9CisgICAgQVNTRVJUKG1fb2JqZWN0U3RvcmVzLmNvbnRhaW5z
KG5hbWUpKTsKKwogICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBsPiBkYXRhYmFzZSA9
IHRoaXM7CisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3Jl
ID0gbV9vYmplY3RTdG9yZXMuZ2V0KG5hbWUpOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2U+IHRyYW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7CiAgICAgaWYgKCF0
cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VC
YWNrZW5kSW1wbDo6ZGVsZXRlT2JqZWN0U3RvcmVJbnRlcm5hbCwgZGF0YWJhc2UsIG9iamVjdFN0
b3JlLCB0cmFuc2FjdGlvbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNy
ZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6YWRkT2JqZWN0U3RvcmVU
b01hcCwgZGF0YWJhc2UsIG9iamVjdFN0b3JlKSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lO
QUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTI1MCw2ICsyNDcsNyBAQCB2
b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OnNldFZlcnNpb24oY29uc3QgU3RyaW5nJiB2ZXJz
aW9uLCBQYXNzUmVmUHRyPElEQkNhbAogICAgIFJlZlB0cjxJREJEYXRhYmFzZUJhY2tlbmRJbXBs
PiBkYXRhYmFzZSA9IHRoaXM7CiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNy
ZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbkludGVy
bmFsLCBkYXRhYmFzZSwgdmVyc2lvbiwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCRGF0YWJh
c2VCYWNrZW5kSW1wbDo6cmVzZXRWZXJzaW9uLCBkYXRhYmFzZSwgbV92ZXJzaW9uKSkpIHsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKaW5kZXggMzFlN2Y1ZDRlNzYyZmNj
ZGJkYTQzMTY3OTQ5OWRhYmFhYWJhZDBmNC4uMzQzNmFiYjdkYjFkNzM1OWE1ODQ0MWI3NzYxYWRi
YzU0NzZhNGZmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCSW5kZXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQklu
ZGV4LmNwcApAQCAtNjUsNiArNjUsMTAgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRl
eDo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXMKICAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgp
KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNU
SVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIHVuc2lnbmVkIHNob3J0IGRp
cmVjdGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJlY3Rpb24oZGlyZWN0aW9uU3RyaW5nLCBl
Yyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKQEAgLTcyLDEwICs3Niw3IEBAIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJ
REJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNh
Y3Rpb24uZ2V0KCkpOwogICAgIHJlcXVlc3QtPnNldEN1cnNvclR5cGUoSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6SW5kZXhDdXJzb3IpOwogICAgIG1fYmFja2VuZC0+b3BlbkN1cnNvcihrZXlS
YW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsK
LSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIEFTU0VSVCghZWMpOwogICAgIHJldHVybiByZXF1ZXN0
OwogfQogCkBAIC0xMTUsMTIgKzExNiwxMyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQklu
ZGV4Ojpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUAogICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9
IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFu
c2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5jb3VudChrZXlSYW5nZSwgcmVxdWVzdCwg
bV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJl
cXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2
ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lO
QUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIFJlZlB0cjxJREJSZXF1
ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRl
KHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tlbmQtPmNvdW50KGtleVJh
bmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKKyAgICBBU1NFUlQo
IWVjKTsKICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApAQCAtMTQwLDYgKzE0MiwxMCBAQCBQYXNz
UmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklE
Ql9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlmICgh
bV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KIAogICAgIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9E
aXJlY3Rpb24oZGlyZWN0aW9uU3RyaW5nLCBlYyk7CiAgICAgaWYgKGVjKQpAQCAtMTQ4LDEwICsx
NTQsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJl
cXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyks
IG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIHJlcXVlc3QtPnNldEN1cnNvclR5cGUoSURCQ3Vy
c29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJzb3IpOwogICAgIG1fYmFja2VuZC0+b3Bl
bktleUN1cnNvcihrZXlSYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5i
YWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5
RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIEFTU0VSVCghZWMpOwogICAg
IHJldHVybiByZXF1ZXN0OwogfQogCkBAIC0xODksNiArMTkyLDcgQEAgUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHIKICAgICBJREJfVFJBQ0UoIklEQkluZGV4OjpnZXQiKTsKICAgICBSZWZQdHI8SURC
S2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHkoa2V5LCBlYyk7CiAgICAgaWYg
KGVjKQorCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBnZXQoY29udGV4dCwga2V5UmFu
Z2UucmVsZWFzZSgpLCBlYyk7CiB9CkBAIC0yMDAsNiArMjA0LDEwIEBAIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCSW5kZXg6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElE
X1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlmICghbV90cmFuc2Fj
dGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpU
UkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBp
ZiAoIWtleVJhbmdlKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFf
RVJSOwogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNywxMCArMjE1LDcgQEAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQs
IFBhc3NSZWZQdHIKIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVz
dDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdl
dCgpKTsKICAgICBtX2JhY2tlbmQtPmdldChrZXlSYW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlv
bi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtF
YXJseURlYXRoKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBBU1NFUlQoIWVjKTsK
ICAgICByZXR1cm4gcmVxdWVzdDsKIH0KIApAQCAtMjIwLDcgKzIyNSw2IEBAIFBhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldEtleShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmCiAgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IElEQktleVJh
bmdlOjpvbmx5KGtleSwgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7Ci0KICAg
ICByZXR1cm4gZ2V0S2V5KGNvbnRleHQsIGtleVJhbmdlLnJlbGVhc2UoKSwgZWMpOwogfQogCkBA
IC0yMzEsNiArMjM1LDEwIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmdldEtl
eShTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmCiAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBpZiAoIWtleVJhbmdlKSB7CiAgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICByZXR1cm4gMDsK
QEAgLTIzOCwxMCArMjQ2LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0
S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWYKIAogICAgIFJlZlB0
cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFu
eTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICBtX2JhY2tlbmQtPmdl
dEtleShrZXlSYW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0g
ICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KKyAgICBBU1NFUlQoIWVjKTsKICAgICByZXR1cm4gcmVxdWVzdDsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5k
ZXhCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleEJhY2tlbmRJbXBsLmNwcAppbmRleCBhMDg3ZTZhYWYyZjUyNDIzNWY4NTA3YTZlZjQ4ZTVi
MmVjN2Q5ZWU3Li43MWQzYjZmMzgyNGJjMGQyMWNhZThhN2NlOGI3NDI1NjVlNDcyOGEwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJ
bXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJh
Y2tlbmRJbXBsLmNwcApAQCAtMTA5LDggKzEwOSwxMCBAQCB2b2lkIElEQkluZGV4QmFja2VuZElt
cGw6Om9wZW5DdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIHVuc2ln
bgogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBLZXlSYW5nZTsKICAgICBS
ZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAgICAgUmVmUHRy
PElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlv
blB0cjsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tU
YXNrKCZvcGVuQ3Vyc29ySW50ZXJuYWwsIGluZGV4LCBrZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJD
dXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEN1cnNvciwgY2FsbGJhY2tzLCB0cmFuc2FjdGlv
bikpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rh
c2soJm9wZW5DdXJzb3JJbnRlcm5hbCwgaW5kZXgsIGtleVJhbmdlLCBkaXJlY3Rpb24sIElEQkN1
cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4Q3Vyc29yLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9u
KSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICB9CiB9CiAKIHZv
aWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbktleUN1cnNvcihQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBwcnBLZXlSYW5nZSwgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uLCBQYXNzUmVmUHRyPElE
QkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2Uq
IHRyYW5zYWN0aW9uUHRyLCBFeGNlcHRpb25Db2RlJiBlYykKQEAgLTEyMCw4ICsxMjIsMTAgQEAg
dm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5
UmFuZ2U+IHBycEtleVJhbmdlLCB1bnMKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdl
ID0gcHJwS2V5UmFuZ2U7CiAgICAgUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzID0gcHJw
Q2FsbGJhY2tzOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IHRy
YW5zYWN0aW9uID0gdHJhbnNhY3Rpb25QdHI7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1
bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkN1cnNvckludGVybmFsLCBpbmRleCwga2V5
UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2VuZEludGVyZmFjZTo6SW5kZXhLZXlDdXJz
b3IsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZvcGVuQ3Vyc29ySW50ZXJuYWwsIGluZGV4LCBr
ZXlSYW5nZSwgZGlyZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1
cnNvciwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9J
TkFDVElWRV9FUlI7CisgICAgfQogfQogCiB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50
SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW1wbD4gaW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHJhbmdlLCBQYXNzUmVmUHRy
PElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBQYXNzUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2Vu
ZEludGVyZmFjZT4pCkBAIC0xNDUsOCArMTQ5LDEwIEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1w
bDo6Y291bnRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJ
CiB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6OmNvdW50KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+
IHJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzLCBJREJUcmFuc2FjdGlv
bkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAg
ICBJREJfVFJBQ0UoIklEQkluZGV4QmFja2VuZEltcGw6OmNvdW50Iik7Ci0gICAgaWYgKCF0cmFu
c2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmY291bnRJbnRlcm5hbCwg
dGhpcywgcmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkKKyAgICBpZiAoIXRyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZjb3VudEludGVybmFsLCB0aGlz
LCByYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKSB7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElP
Tl9JTkFDVElWRV9FUlI7CisgICAgfQogfQogCiB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6Omdl
dEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkluZGV4QmFj
a2VuZEltcGw+IGluZGV4LCBQYXNzUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSwgUGFzc1Jl
ZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKQEAgLTIwNSw4ICsyMTEsMTAgQEAgdm9pZCBJ
REJJbmRleEJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFu
Z2UsIFBhc3NSZWZQdHI8SUQKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXgg
PSB0aGlzOwogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBLZXlSYW5nZTsK
ICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAg
aWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0SW50
ZXJuYWwsIGluZGV4LCBrZXlSYW5nZSwgY2FsbGJhY2tzKSkpCisgICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0SW50ZXJuYWwsIGluZGV4LCBr
ZXlSYW5nZSwgY2FsbGJhY2tzKSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VS
UjsKKyAgICB9CiB9CiAKIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0S2V5KFBhc3NSZWZQ
dHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJw
Q2FsbGJhY2tzLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBF
eGNlcHRpb25Db2RlJiBlYykKQEAgLTIxNSw4ICsyMjMsMTAgQEAgdm9pZCBJREJJbmRleEJhY2tl
bmRJbXBsOjpnZXRLZXkoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIFBhc3NS
ZWZQdHIKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSB0aGlzOwogICAg
IFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBLZXlSYW5nZTsKICAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgaWYgKCF0cmFuc2Fj
dGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0S2V5SW50ZXJuYWwsIGlu
ZGV4LCBrZXlSYW5nZSwgY2FsbGJhY2tzKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1
bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmZ2V0S2V5SW50ZXJuYWwsIGluZGV4LCBrZXlSYW5n
ZSwgY2FsbGJhY2tzKSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAg
ICB9CiB9CiAKIGJvb2wgSURCSW5kZXhCYWNrZW5kSW1wbDo6YWRkaW5nS2V5QWxsb3dlZChjb25z
dCBJREJLZXkqIGluZGV4S2V5LCBjb25zdCBJREJLZXkqIHByaW1hcnlLZXkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKaW5kZXgg
NWNmZGEwNWU1YmU1N2Y1ZTQ4NWI5NWRmZTNiMjJjMjNkNTI0NmU2My4uNzRiNGRmMjNkMmJlMGU4
ZjVlY2RhYTM0NTljMGVmZmRmZDQ0YmE5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAj
aW5jbHVkZSAiRE9NU3RyaW5nTGlzdC5oIgogI2luY2x1ZGUgIklEQkFueS5oIgorI2luY2x1ZGUg
IklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZS5oIgogI2luY2x1
ZGUgIklEQkRhdGFiYXNlRXhjZXB0aW9uLmgiCiAjaW5jbHVkZSAiSURCSW5kZXguaCIKQEAgLTc4
LDEyICs3OSwxMyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzcwogICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAg
IFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQs
IElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tl
bmQtPmdldChrZXlSYW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7
Ci0gICAgaWYgKGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAg
aWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQorICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3Jl
YXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsK
KyAgICBtX2JhY2tlbmQtPmdldChrZXlSYW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFj
a2VuZCgpLCBlYyk7CisgICAgQVNTRVJUKCFlYyk7CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFz
ZSgpOwogfQogCkBAIC05OSwzMyArMTAxLDY2IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzCiBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjphZGQoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZh
bHVlLCBQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJ
REJfVFJBQ0UoIklEQk9iamVjdFN0b3JlOjphZGQiKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOworCiAgICAgaWYgKG1fZGVsZXRlZCkgewogICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZl
KCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5B
Q1RJVkVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgaWYgKG1fdHJhbnNhY3Rp
b24tPmlzUmVhZE9ubHkoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpS
RUFEX09OTFlfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKHZhbHVlLT5i
bG9iVVJMcygpLnNpemUoKSA+IDApIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBCbG9iL0ZpbGUv
RmlsZUxpc3Qgc3VwcG9ydAorICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJf
REFUQV9DTE9ORV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGNvbnN0IElE
QktleVBhdGgmIGtleVBhdGggPSBtX21ldGFkYXRhLmtleVBhdGg7CisgICAgY29uc3QgYm9vbCB1
c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOworICAgIGNvbnN0IGJvb2wgaGFzS2V5
R2VuZXJhdG9yID0gYXV0b0luY3JlbWVudCgpOwogCi0gICAgaWYgKGtleSAmJiAoa2V5LT50eXBl
KCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKKyAgICBpZiAodXNlc0luTGluZUtleXMgJiYg
a2V5KSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZSA9IHBycFZhbHVlOwotICAgIGlmICh2YWx1ZS0+YmxvYlVSTHMoKS5zaXplKCkgPiAw
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgQmxvYi9GaWxlL0ZpbGVMaXN0IHN1cHBvcnQKLSAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0RBVEFfQ0xPTkVfRVJSOworICAg
IGlmICghdXNlc0luTGluZUtleXMgJiYgIWhhc0tleUdlbmVyYXRvciAmJiAha2V5KSB7CisgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisgICAgaWYgKHVzZXNJbkxpbmVLZXlzKSB7CisgICAgICAgIFJlZlB0cjxJREJL
ZXk+IGtleVBhdGhLZXkgPSBjcmVhdGVJREJLZXlGcm9tU2VyaWFsaXplZFZhbHVlQW5kS2V5UGF0
aCh2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgIGlmIChrZXlQYXRoS2V5ICYmICFrZXlQYXRoS2V5
LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRB
VEFfRVJSOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFo
YXNLZXlHZW5lcmF0b3IgJiYgIWtleVBhdGhLZXkpIHsKKyAgICAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGhhc0tleUdlbmVyYXRvciAmJiAha2V5UGF0aEtleSkgeworICAgICAg
ICAgICAgUmVmUHRyPElEQktleT4gZHVtbXlLZXkgPSBJREJLZXk6OmNyZWF0ZU51bWJlcigtMSk7
CisgICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFmdGVySW5q
ZWN0aW9uID0gaW5qZWN0SURCS2V5SW50b1NlcmlhbGl6ZWRWYWx1ZShkdW1teUtleSwgdmFsdWUs
IGtleVBhdGgpOworICAgICAgICAgICAgaWYgKCF2YWx1ZUFmdGVySW5qZWN0aW9uKSB7CisgICAg
ICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAg
aWYgKGtleSAmJiAha2V5LT5pc1ZhbGlkKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAogICAgIFJlZlB0
cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFu
eTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICAvLyBUT0RPOiBQYXNz
IHRocm91Z2gga2V5UGF0aEtleSBhcyBrZXkKICAgICBtX2JhY2tlbmQtPnB1dCh2YWx1ZSwga2V5
LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9ubHksIHJlcXVlc3QsIG1fdHJh
bnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0
LT5tYXJrRWFybHlEZWF0aCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgQVNTRVJU
KCFlYyk7CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCkBAIC0xMzYsMTYgKzE3
MSwxNCBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzcwogICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLSAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7Ci0gICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlJFQURfT05MWV9FUlI7CisgICAgaWYgKCFtX3RyYW5zYWN0
aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRS
QU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAg
aWYgKGtleSAmJiAoa2V5LT50eXBlKCkgPT0gSURCS2V5OjpJbnZhbGlkVHlwZSkpIHsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgaWYgKG1fdHJhbnNh
Y3Rpb24tPmlzUmVhZE9ubHkoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpSRUFEX09OTFlfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KICAgICBSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwogICAgIGlmICh2YWx1ZS0+
YmxvYlVSTHMoKS5zaXplKCkgPiAwKSB7CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgQmxvYi9GaWxl
L0ZpbGVMaXN0IHN1cHBvcnQKQEAgLTE1MywxMiArMTg2LDQ2IEBAIFBhc3NSZWZQdHI8SURCUmVx
dWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0
LCBQYXNzCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIAotICAgIFJlZlB0cjxJREJSZXF1ZXN0
PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRo
aXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAgICBtX2JhY2tlbmQtPnB1dCh2YWx1ZSwga2V5
LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9yVXBkYXRlLCByZXF1ZXN0LCBt
X3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVx
dWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICBjb25zdCBJREJLZXlQYXRoJiBrZXlQYXRoID0g
bV9tZXRhZGF0YS5rZXlQYXRoOworICAgIGNvbnN0IGJvb2wgdXNlc0luTGluZUtleXMgPSAha2V5
UGF0aC5pc051bGwoKTsKKyAgICBjb25zdCBib29sIGhhc0tleUdlbmVyYXRvciA9IGF1dG9JbmNy
ZW1lbnQoKTsKKworICAgIGlmICh1c2VzSW5MaW5lS2V5cyAmJiBrZXkpIHsKKyAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KKyAgICBpZiAoIXVzZXNJbkxpbmVLZXlzICYmICFoYXNLZXlHZW5lcmF0b3IgJiYgIWtleSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQorICAgIGlmICh1c2VzSW5MaW5lS2V5cykgeworICAgICAgICBSZWZQ
dHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFu
ZEtleVBhdGgodmFsdWUsIGtleVBhdGgpOworICAgICAgICBpZiAoa2V5UGF0aEtleSAmJiAha2V5
UGF0aEtleS0+aXNWYWxpZCgpKSB7CisgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAg
IGlmICghaGFzS2V5R2VuZXJhdG9yICYmICFrZXlQYXRoS2V5KSB7CisgICAgICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisgICAgICAgIGlmIChoYXNLZXlHZW5lcmF0b3IgJiYgIWtleVBhdGhLZXkpIHsK
KyAgICAgICAgICAgIFJlZlB0cjxJREJLZXk+IGR1bW15S2V5ID0gSURCS2V5OjpjcmVhdGVOdW1i
ZXIoLTEpOworICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWVB
ZnRlckluamVjdGlvbiA9IGluamVjdElEQktleUludG9TZXJpYWxpemVkVmFsdWUoZHVtbXlLZXks
IHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgICAgIGlmICghdmFsdWVBZnRlckluamVjdGlvbikg
eworICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwor
ICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorICAgIGlmIChrZXkgJiYgIWtleS0+aXNWYWxpZCgpKSB7CisgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0
LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgLy8gVE9E
TzogcGFzcyB0aHJvdWdoIGtleVBhdGhLZXkgYXMga2V5CisgICAgbV9iYWNrZW5kLT5wdXQodmFs
dWUsIGtleSwgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlOjpBZGRPclVwZGF0ZSwgcmVx
dWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CisgICAgQVNTRVJUKCFlYyk7CiAg
ICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCkBAIC0xNjksMTEgKzIzNiwxNCBAQCBQ
YXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjbwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBp
ZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CiAgICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewogICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSRUFEX09OTFlfRVJSOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9Ci0KICAgICBpZiAoIWtleVJhbmdlKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICByZXR1cm4gMDsKQEAgLTE4MSwxMCArMjUx
LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rp
b24oU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY28KIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBy
ZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMp
LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICBtX2JhY2tlbmQtPmRlbGV0ZUZ1bmN0aW9uKGtl
eVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAo
ZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgfQorICAgIEFTU0VSVCghZWMpOwogICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2Uo
KTsKIH0KIApAQCAtMjA0LDYgKzI3MSwxMCBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9i
amVjdFN0b3JlOjpjbGVhcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBFeAogICAg
ICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CiAg
ICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZl
KCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5B
Q1RJVkVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgaWYgKG1fdHJhbnNhY3Rp
b24tPmlzUmVhZE9ubHkoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpS
RUFEX09OTFlfRVJSOwogICAgICAgICByZXR1cm4gMDsKQEAgLTIxMSwxMCArMjgyLDcgQEAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y2xlYXIoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgRXgKIAogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0g
SURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5z
YWN0aW9uLmdldCgpKTsKICAgICBtX2JhY2tlbmQtPmNsZWFyKHJlcXVlc3QsIG1fdHJhbnNhY3Rp
b24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJr
RWFybHlEZWF0aCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgQVNTRVJUKCFlYyk7
CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCkBAIC0yMzksMTEgKzMwNywyMiBA
QCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9yZTo6Y3JlYXRlSW5kZXgoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLQor
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CisgICAgICAgIHJldHVy
biAwOworICAgIH0KICAgICBpZiAoIWtleVBhdGguaXNWYWxpZCgpKSB7CiAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9TWU5UQVhfRVJSOwogICAgICAgICByZXR1cm4gMDsK
ICAgICB9CisgICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SURCX1RZUEVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAg
aWYgKG1fbWV0YWRhdGEuaW5kZXhlcy5jb250YWlucyhuYW1lKSkgeworICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogCiAgICAgYm9vbCB1bmlxdWUgPSBmYWxzZTsKICAgICBvcHRpb25zLmdldCgidW5pcXVl
IiwgdW5pcXVlKTsKQEAgLTMwNCw2ICszODMsMTQgQEAgdm9pZCBJREJPYmplY3RTdG9yZTo6ZGVs
ZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwogICAgICAg
ICByZXR1cm47CiAgICAgfQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewor
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9F
UlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFtX21ldGFkYXRhLmluZGV4ZXMu
Y29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURC
X05PVF9GT1VORF9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBtX2JhY2tlbmQt
PmRlbGV0ZUluZGV4KG5hbWUsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlm
ICghZWMpIHsKQEAgLTMyNSw2ICs0MTIsMTAgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJP
YmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXgKICAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2
ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lO
QUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIHVuc2lnbmVkIHNob3J0
IGRpcmVjdGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJlY3Rpb24oZGlyZWN0aW9uU3RyaW5n
LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKQEAgLTMzMiwxMCArNDIzLDcg
QEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXgKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVz
dCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90
cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgcmVxdWVzdC0+c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JC
YWNrZW5kSW50ZXJmYWNlOjpPYmplY3RTdG9yZUN1cnNvcik7CiAgICAgbV9iYWNrZW5kLT5vcGVu
Q3Vyc29yKHJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQo
KSwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgp
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgQVNTRVJUKCFlYyk7CiAgICAgcmV0dXJu
IHJlcXVlc3QucmVsZWFzZSgpOwogfQogCkBAIC0zNzUsMTIgKzQ2MywxMyBAQCBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiBjb250ZXh0LCBQYQogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5W
QUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBSZWZQdHI8SURC
UmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNy
ZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7Ci0gICAgbV9iYWNrZW5kLT5jb3VudChy
YW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYgKGVj
KSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7CisgICAgaWYgKCFtX3RyYW5z
YWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAg
IFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQs
IElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKKyAgICBtX2JhY2tl
bmQtPmNvdW50KHJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsK
KyAgICBBU1NFUlQoIWVjKTsKICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggOWM3MzY2ZTRiOWI1ZTc3ZTUzNTQ2NWRmNWJl
YjlmN2NkNTc3NGY4My4uYjA1MjdjMjQ2NDM5OTE0MTgzNjJjODBmOGNhNTNiMGIyYWNmMTEwMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTkyLDE2ICs5MiwyMCBAQCBQYXNzUmVm
UHRyPERPTVN0cmluZ0xpc3Q+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4TmFtZXMo
KSBjb25zdAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJ
REJLZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxs
YmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6Z2V0Iik7CisKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0
U3RvcmUgPSB0aGlzOwogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBLZXlS
YW5nZTsKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7
Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygm
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCBrZXlS
YW5nZSwgY2FsbGJhY2tzKSkpCisKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2so
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRlcm5h
bCwgb2JqZWN0U3RvcmUsIGtleVJhbmdlLCBjYWxsYmFja3MpKSkgeworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNB
Q1RJT05fSU5BQ1RJVkVfRVJSOworICAgIH0KIH0KIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4ga2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7Ci0g
ICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRCeVJhbmdlSW50ZXJu
YWwiKTsKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmdldEludGVy
bmFsIik7CiAgICAgUmVmUHRyPElEQktleT4ga2V5OwogICAgIGlmIChrZXlSYW5nZS0+aXNPbmx5
S2V5KCkpCiAgICAgICAgIGtleSA9IGtleVJhbmdlLT5sb3dlcigpOwpAQCAtMTU3LDU4ICsxNjEs
MTMgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQoUGFzc1JlZlB0cjxTZXJp
YWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLAogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNh
bGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5k
SW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uUHRyOwogCi0gICAgaWYgKHB1dE1v
ZGUgIT0gQ3Vyc29yVXBkYXRlKSB7Ci0gICAgICAgIGNvbnN0IGJvb2wgYXV0b0luY3JlbWVudCA9
IG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7Ci0gICAgICAgIGNvbnN0IGJvb2wgaGFzS2V5
UGF0aCA9ICFvYmplY3RTdG9yZS0+bV9rZXlQYXRoLmlzTnVsbCgpOwotCi0gICAgICAgIGlmICho
YXNLZXlQYXRoICYmIGtleSkgewotICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6REFUQV9FUlI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYg
KCFoYXNLZXlQYXRoICYmICFhdXRvSW5jcmVtZW50ICYmICFrZXkpIHsKLSAgICAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIGlmIChoYXNLZXlQYXRoKSB7Ci0gICAgICAgICAgICBSZWZQdHI8
SURCS2V5PiBrZXlQYXRoS2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2YWx1ZS5nZXQoKSwgb2Jq
ZWN0U3RvcmUtPm1fa2V5UGF0aCk7Ci0gICAgICAgICAgICBpZiAoa2V5UGF0aEtleSAmJiAha2V5
UGF0aEtleS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgaWYgKCFhdXRvSW5jcmVtZW50ICYmICFrZXlQYXRoS2V5KSB7Ci0gICAg
ICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGF1dG9JbmNy
ZW1lbnQgJiYgIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBk
dW1teUtleSA9IElEQktleTo6Y3JlYXRlTnVtYmVyKC0xKTsKLSAgICAgICAgICAgICAgICBSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFmdGVySW5qZWN0aW9uID0gaW5qZWN0S2V5
SW50b0tleVBhdGgoZHVtbXlLZXksIHZhbHVlLCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAg
ICAgICAgICAgICAgICBpZiAoIXZhbHVlQWZ0ZXJJbmplY3Rpb24pIHsKLSAgICAgICAgICAgICAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKGtleSAmJiAha2V5LT5pc1ZhbGlkKCkpIHsKLSAgICAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGtleSk7Ci0gICAgICAgIGNv
bnN0IGJvb2wgaGFzS2V5UGF0aCA9ICFvYmplY3RTdG9yZS0+bV9rZXlQYXRoLmlzTnVsbCgpOwot
ICAgICAgICBpZiAoaGFzS2V5UGF0aCkgewotICAgICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5
UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlLT5t
X2tleVBhdGgpOwotICAgICAgICAgICAgaWYgKCFrZXlQYXRoS2V5IHx8ICFrZXlQYXRoS2V5LT5p
c0VxdWFsKGtleS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2so
CiAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwgcHV0TW9kZSwgY2FsbGJh
Y2tzLCB0cmFuc2FjdGlvbiksCiAgICAgICAgICAgICAvLyBGSVhNRTogT25lIG9mIHRoZXNlIHBl
ciBwdXQoKSBpcyBvdmVya2lsbCwgc2luY2UgaXQncyBzaW1wbHkgYSBjYWNoZSBpbnZhbGlkYXRp
b24uCi0gICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnJldmVydEF1dG9JbmNyZW1lbnRLZXlDYWNoZSwgb2JqZWN0U3RvcmUpKSkKKyAgICAg
ICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmV2
ZXJ0QXV0b0luY3JlbWVudEtleUNhY2hlLCBvYmplY3RTdG9yZSkpKSB7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFO
U0FDVElPTl9JTkFDVElWRV9FUlI7CisgICAgfQogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OnJldmVydEF1dG9JbmNyZW1lbnRLZXlDYWNoZShTY3JpcHRFeGVjdXRpb25Db250
ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSkK
QEAgLTM1NSw4ICszMTQsMTAgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxl
dGVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW4KICAgICBSZWZQdHI8
SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gcHJwS2V5UmFuZ2U7CiAgICAgUmVmUHRyPElEQkNhbGxi
YWNrcz4gY2FsbGJhY2tzID0gcHJwQ2FsbGJhY2tzOwogCi0gICAgaWYgKCF0cmFuc2FjdGlvbi0+
c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bDo6ZGVsZXRlSW50ZXJuYWwsIG9iamVjdFN0b3JlLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSkpCisg
ICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJuYWwsIG9iamVjdFN0b3JlLCBrZXlS
YW5nZSwgY2FsbGJhY2tzKSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsK
KyAgICB9CiB9CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW50ZXJu
YWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQ
YXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gY2FsbGJhY2tzKQpAQCAtMzk3LDEyICszNTgsMTYgQEAg
dm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhcihQYXNzUmVmUHRyPElEQkNhbGxi
YWNrcz4gcHJwQ2FsbGJhY2tzLCBJREIKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwogICAgIFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxi
YWNrcyA9IHBycENhbGxiYWNrczsKIAotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
ayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFySW50
ZXJuYWwsIG9iamVjdFN0b3JlLCBjYWxsYmFja3MpKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5z
Y2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
OjpjbGVhckludGVybmFsLCBvYmplY3RTdG9yZSwgY2FsbGJhY2tzKSkpIHsKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRS
QU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICB9CiB9CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSwgUGFzc1JlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcykKIHsKKyAgICBJREJfVFJBQ0UoIklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OmNsZWFySW50ZXJuYWwiKTsKKwogICAgIG9iamVjdFN0b3JlLT5iYWNraW5n
U3RvcmUoKS0+Y2xlYXJPYmplY3RTdG9yZShvYmplY3RTdG9yZS0+ZGF0YWJhc2VJZCgpLCBvYmpl
Y3RTdG9yZS0+aWQoKSk7CiAgICAgY2FsbGJhY2tzLT5vblN1Y2Nlc3MoU2VyaWFsaXplZFNjcmlw
dFZhbHVlOjp1bmRlZmluZWRWYWx1ZSgpKTsKIH0KQEAgLTQ2MiwxOSArNDI3LDcgQEAgYm9vbCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwb3B1bGF0ZUluZGV4KElEQkJhY2tpbmdTdG9yZSYg
YmFja2luZ1N0b3JlLCBpbnQKIAogUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCB1bmlxdWUsIGJvb2wgbXVsdGlFbnRy
eSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7Ci0gICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKLSAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6SURCX1RZUEVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9
Ci0gICAgaWYgKG1faW5kZXhlcy5jb250YWlucyhuYW1lKSkgewotICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9O
X0NIQU5HRSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJ
RF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQorICAgIEFTU0VSVCh0cmFu
c2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7CiAgICAg
UmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gSURCSW5kZXhCYWNrZW5kSW1wbDo6
Y3JlYXRlKG1fZGF0YWJhc2UsIHRoaXMsIG5hbWUsIGtleVBhdGgsIHVuaXF1ZSwgbXVsdGlFbnRy
eSk7CiAgICAgQVNTRVJUKGluZGV4LT5uYW1lKCkgPT0gbmFtZSk7CiAKQEAgLTQ4NSw2ICs0Mzgs
NyBAQCBQYXNzUmVmUHRyPElEQkluZGV4QmFja2VuZEludGVyZmFjZT4gSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6Y3JlYXRlSW5kZXgoY29ucwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb2JqZWN0U3RvcmUsIGluZGV4LCB0cmFuc2FjdGlvblB0ciksCiAgICAgICAgICAgICAg
IGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cmVtb3ZlSW5k
ZXhGcm9tTWFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUs
IGluZGV4KSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQpAQCAtNTIzLDI0ICs0NzcsMTggQEAgUGFzc1JlZlB0cjxJREJJbmRl
eEJhY2tlbmRJbnRlcmZhY2U+IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmluZGV4KGNvbnN0
IFN0cmkKIAogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleChjb25z
dCBTdHJpbmcmIG5hbWUsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmICh0cmFuc2FjdGlvbi0+bW9kZSgpICE9
IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSkgewotICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4gaW5kZXggPSBtX2luZGV4ZXMu
Z2V0KG5hbWUpOwotICAgIGlmICghaW5kZXgpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
QVNTRVJUKHRyYW5zYWN0aW9uLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hB
TkdFKTsKKyAgICBBU1NFUlQobV9pbmRleGVzLmNvbnRhaW5zKG5hbWUpKTsKIAogICAgIFJlZlB0
cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmplY3RTdG9yZSA9IHRoaXM7CisgICAgUmVm
UHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gbV9pbmRleGVzLmdldChuYW1lKTsKICAg
ICBSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvblB0ciA9
IHRyYW5zYWN0aW9uOwogICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzaygKICAgICAg
ICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpk
ZWxldGVJbmRleEludGVybmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Jq
ZWN0U3RvcmUsIGluZGV4LCB0cmFuc2FjdGlvblB0ciksCiAgICAgICAgICAgICAgIGNyZWF0ZUNh
bGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6YWRkSW5kZXhUb01hcCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCkpKSB7Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC01NjMsNiArNTExLDcgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVu
Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycFJhbmdlLCB1bnMKICAgICBpZiAoIXRy
YW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCiAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2so
JklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9yZSwgcmFuZ2UsIGRpcmVjdGlvbiwgY2Fs
bGJhY2tzLCB0cmFuc2FjdGlvblB0cikpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7CiAgICAgfQogfQpAQCAtNTg1LDggKzUzNCwxMCBAQCB2b2lkIElEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6Om9wZW5DdXJzb3JJbnRlcm5hbChTY3JpcHRFeGVjdXRpb25Db250ZXh0Kiwg
UGFzcwogdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudChQYXNzUmVmUHRyPElE
QktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcywgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvbiwgRXhjZXB0aW9uQ29kZSYg
ZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudCIp
OwotICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2so
JklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNvdW50SW50ZXJuYWwsIHRoaXMsIHJhbmdlLCBj
YWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCisgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVU
YXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJ
bnRlcm5hbCwgdGhpcywgcmFuZ2UsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkgeworICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgIH0KIH0KIAogdm9pZCBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQ
YXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVm
UHRyPElEQktleVJhbmdlPiByYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNr
cywgUGFzc1JlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAppbmRleCA3NjYyMTVi
YjljMDA1ZGFlOWEzYjAxN2Y1YmU5N2I3MmI5MzJkYTE0Li4yZTQxMTJkM2RjYzAxMjVhMjYzOGYw
YTBlOTAxZjdkODYzOWM5N2EyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJSZXF1ZXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmNwcApAQCAtMTM0LDEyICsxMzQsNiBAQCBjb25zdCBTdHJpbmcmIElE
QlJlcXVlc3Q6OnJlYWR5U3RhdGUoKSBjb25zdAogICAgIHJldHVybiBkb25lOwogfQogCi12b2lk
IElEQlJlcXVlc3Q6Om1hcmtFYXJseURlYXRoKCkKLXsKLSAgICBBU1NFUlQobV9yZWFkeVN0YXRl
ID09IFBFTkRJTkcpOwotICAgIG1fcmVhZHlTdGF0ZSA9IEVhcmx5RGVhdGg7Ci19Ci0KIGJvb2wg
SURCUmVxdWVzdDo6cmVzZXRSZWFkeVN0YXRlKElEQlRyYW5zYWN0aW9uKiB0cmFuc2FjdGlvbikK
IHsKICAgICBBU1NFUlQoIW1fcmVxdWVzdEZpbmlzaGVkKTsKQEAgLTMzMCw3ICszMjQsNyBAQCB2
b2lkIElEQlJlcXVlc3Q6OnN0b3AoKQogCiAgICAgbV9jb250ZXh0U3RvcHBlZCA9IHRydWU7CiAg
ICAgaWYgKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKQotICAgICAgICBtYXJrRWFybHlEZWF0aCgp
OworICAgICAgICBtX3JlYWR5U3RhdGUgPSBFYXJseURlYXRoOwogfQogCiB2b2lkIElEQlJlcXVl
c3Q6Om9uQmxvY2tlZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJSZXF1ZXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJS
ZXF1ZXN0LmgKaW5kZXggZTEwNGQ4ZjFlODE1Y2I1YzQ1N2Y2M2UxM2Q4NDk0M2JiMmNmOWJmZC4u
NGY0ZGZhZDVlMjZkMWNiM2IwNTUxMzVhZWU4MzBlMzEyNjEyNTM1OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaApAQCAtNzEsNyArNzEsNiBAQCBw
dWJsaWM6CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihzdWNjZXNzKTsKICAg
ICBERUZJTkVfQVRUUklCVVRFX0VWRU5UX0xJU1RFTkVSKGVycm9yKTsKIAotICAgIHZvaWQgbWFy
a0Vhcmx5RGVhdGgoKTsKICAgICBib29sIHJlc2V0UmVhZHlTdGF0ZShJREJUcmFuc2FjdGlvbiop
OwogICAgIHZvaWQgc2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpDdXJz
b3JUeXBlKTsKICAgICB2b2lkIHNldEN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNvcj4pOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3Bw
CmluZGV4IDcwODdjNjU3ZTA2Njg2YzE3ZDE1YjM2ZDg4YzY5MjQ5ZDIzZTliNTkuLjZhZDMwMDcy
MzhlZjM2ZjY1OGY2YzIyYjVlYjljNmE3MzY3NzQ1YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAKQEAgLTg0LDYgKzg0LDcg
QEAgSURCVHJhbnNhY3Rpb246OklEQlRyYW5zYWN0aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQq
IGNvbnRleHQsIFBhc3NSZWZQdHI8SURCVHIKICAgICAsIG1fYmFja2VuZChiYWNrZW5kKQogICAg
ICwgbV9kYXRhYmFzZShkYikKICAgICAsIG1fbW9kZShtb2RlKQorICAgICwgbV9hY3RpdmUodHJ1
ZSkKICAgICAsIG1fdHJhbnNhY3Rpb25GaW5pc2hlZChmYWxzZSkKICAgICAsIG1fY29udGV4dFN0
b3BwZWQoZmFsc2UpCiB7CkBAIC0xOTMsNiArMTk0LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6
YWJvcnQoKQogewogICAgIGlmIChtX3RyYW5zYWN0aW9uRmluaXNoZWQpCiAgICAgICAgIHJldHVy
bjsKKyAgICBtX2FjdGl2ZSA9IGZhbHNlOwogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbj4gc2Vs
ZlJlZiA9IHRoaXM7CiAgICAgaWYgKG1fYmFja2VuZCkKICAgICAgICAgbV9iYWNrZW5kLT5hYm9y
dCgpOwpAQCAtMjQyLDYgKzI0NCw3IEBAIHZvaWQgSURCVHJhbnNhY3Rpb246OnVucmVnaXN0ZXJS
ZXF1ZXN0KElEQlJlcXVlc3QqIHJlcXVlc3QpCiB2b2lkIElEQlRyYW5zYWN0aW9uOjpvbkFib3J0
KCkKIHsKICAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25GaW5pc2hlZCk7CisgICAgbV9hY3RpdmUg
PSBmYWxzZTsKICAgICB3aGlsZSAoIW1fY2hpbGRSZXF1ZXN0cy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgSURCUmVxdWVzdCogcmVxdWVzdCA9ICptX2NoaWxkUmVxdWVzdHMuYmVnaW4oKTsKICAgICAg
ICAgbV9jaGlsZFJlcXVlc3RzLnJlbW92ZShyZXF1ZXN0KTsKQEAgLTI2NSw2ICsyNjgsNyBAQCB2
b2lkIElEQlRyYW5zYWN0aW9uOjpvbkFib3J0KCkKIHZvaWQgSURCVHJhbnNhY3Rpb246Om9uQ29t
cGxldGUoKQogewogICAgIEFTU0VSVCghbV90cmFuc2FjdGlvbkZpbmlzaGVkKTsKKyAgICBtX2Fj
dGl2ZSA9IGZhbHNlOwogICAgIG1fb2JqZWN0U3RvcmVDbGVhbnVwTWFwLmNsZWFyKCk7CiAgICAg
Y2xvc2VPcGVuQ3Vyc29ycygpOwogICAgIG1fZGF0YWJhc2UtPnRyYW5zYWN0aW9uRmluaXNoZWQo
dGhpcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJU
cmFuc2FjdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uaAppbmRleCAwYjJkZWM2ZWMwOGYxZDFlMmI5NjBlZGIwMTE2ZmNmODlkMWNmOTZkLi5k
YjdiMTdjZjE5MjJjMDJlN2ExODRmMzVlNTg4NWRhODAyZDU3YzFjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKQEAgLTY4LDEyICs2
OCwxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgbW9kZVRvU3Ry
aW5nKE1vZGUsIEV4Y2VwdGlvbkNvZGUmKTsKIAogICAgIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogYmFja2VuZCgpIGNvbnN0OworICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgaW50ZXJu
YWwgfGFjdGl2ZXwgZmxhZyBwZXIgc3BlYy4gaHR0cDovL3dlYmtpdC5vcmcvYi84OTM3OQorICAg
IGJvb2wgaXNBY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZTsgfQogICAgIGJvb2wgaXNG
aW5pc2hlZCgpIGNvbnN0OworICAgIGJvb2wgaXNSZWFkT25seSgpIGNvbnN0IHsgcmV0dXJuIG1f
bW9kZSA9PSBSRUFEX09OTFk7IH0KICAgICBib29sIGlzVmVyc2lvbkNoYW5nZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbW9kZSA9PSBWRVJTSU9OX0NIQU5HRTsgfQogCiAgICAgLy8gSW1wbGVtZW50IHRo
ZSBJREJUcmFuc2FjdGlvbiBJREwKICAgICBjb25zdCBTdHJpbmcmIG1vZGUoKSBjb25zdDsKLSAg
ICBib29sIGlzUmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gUkVBRF9PTkxZOyB9
CiAgICAgSURCRGF0YWJhc2UqIGRiKCkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxET01FcnJvcj4g
ZXJyb3IoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIHZvaWQgc2V0RXJyb3IoUGFzc1JlZlB0
cjxET01FcnJvcj4pOwpAQCAtMTM1LDYgKzEzNyw3IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPElE
QlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gbV9iYWNrZW5kOwogICAgIFJlZlB0cjxJREJE
YXRhYmFzZT4gbV9kYXRhYmFzZTsKICAgICBjb25zdCBNb2RlIG1fbW9kZTsKKyAgICBib29sIG1f
YWN0aXZlOwogICAgIGJvb2wgbV90cmFuc2FjdGlvbkZpbmlzaGVkOyAvLyBJcyBpdCBwb3NzaWJs
ZSB0aGF0IHdlJ2xsIGZpcmUgYW55IG1vcmUgZXZlbnRzIG9yIGFsbG93IGFueSBuZXcgcmVxdWVz
dHM/IElmIG5vdCwgd2UncmUgZmluaXNoZWQuCiAgICAgYm9vbCBtX2NvbnRleHRTdG9wcGVkOwog
ICAgIFJlZlB0cjxET01FcnJvcj4gbV9lcnJvcjsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149139</attachid>
            <date>2012-06-22 16:38:41 -0700</date>
            <delta_ts>2012-06-25 16:52:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89377-20120622163840.patch</filename>
            <type>text/plain</type>
            <size>54994</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMDY3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2UwMzljM2JmMDg1ZmUy
N2NmYjhjZGJiM2VhYjQzOTNlNzA4ZDcyMy4uOWRjNzFiNjQ0Mzc0NTQ3NGU0N2U1MTA1YzE1OTY4
OWZlOGQ4MWFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk5IEBACisyMDEyLTA2LTIyICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBNb3Zl
IG1ldGhvZCBwcmVjb25kaXRpb24gY2hlY2tzIHRvIGZyb250IGVuZCBvYmplY3RzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTM3NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyB0aGF0IG1ldGFkYXRh
IGV4aXN0cyBvbiB0aGUgZnJvbnQgZW5kLCBtb3N0IG9mIHRoZSBwcmUtY29uZGl0aW9uIHZhbGlk
YXRpb24gY2hlY2tzCisgICAgICAgIGRvbmUgb24gSURCIG1ldGhvZCBjYWxscyBmcm9tIHNjcmlw
dCBjYW4gYmUgbW92ZWQgdG8gdGhlIGZyb250IGVuZCB3aGljaCBzaW1wbGlmaWVzIHRoZQorICAg
ICAgICBjb2RlIHNpZ25pZmljYW50bHkuIEluIG1vc3QgY2FzZXMgdGhlIGNvZGUgaXMgc2ltcGx5
IG1vdmVkIGZyb20gSURCWFhYQmFja2VuZEltcGwKKyAgICAgICAgdG8gSURCWFhYLgorCisgICAg
ICAgIEFkZHMgYW4gaW50ZXJuYWwgImFjdGl2ZSIgZmxhZyBmb3IgdHJhbnNhY3Rpb25zLCBhbHRo
b3VnaCB0aGUgYmVoYXZpb3IgaXMgbm90IGFjY3VyYXRlCisgICAgICAgIHRvIHRoZSBzcGVjIChp
dCBzaG91bGQgb25seSBiZSB0cnVlIGR1cmluZyBldmVudCBjYWxsYmFja3MgLSBodHRwOi8vd2Vi
a2l0Lm9yZy9iLzg5Mzc5KS4KKyAgICAgICAgVGhlIGJhY2stZW5kIG1ldGhvZHMgY2FuIHRoZW4g
YmUgc2ltcGxpZmVkIHRvIGp1c3QgYWRkaW5nIGFzeW5jIHRhc2tzIHRvIHRoZSB0cmFuc2FjdGlv
biwKKyAgICAgICAgd2hpY2ggc2hvdWxkIG5ldmVyIGZhaWwsIGFuZCB0aGUgZnJvbnQgZW5kIG1l
dGhvZHMgY2FuIHRha2UgY2FyZSBvZiBhbGwgZXhjZXB0aW9uIGNhc2VzLgorICAgICAgICBUaGlz
IGFsc28gbWVhbnMgdGhhdCB0aGUgcGF0dGVybiBvZiAiSSBjcmVhdGVkIGFuIElEQlJlcXVlc3Qg
b29vcHMgSSBjb3VsZG4ndCBldmVuIGZpbGUgaXQKKyAgICAgICAgYmV0dGVyIG1hcmsgaXQgZm9y
IGVhcmx5IGRlYXRoIiBwYXR0ZXJuIGNhbiBiZSBlbGltaW5hdGVkIGF3YXkuCisKKyAgICAgICAg
Tm8gZnVuY3Rpb25hbCBjaGFuZ2VzIC0gbm8gbmV3IHRlc3RzLgorCisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCQ3Vyc29yLmNwcDogTWlncmF0ZSBjaGVja3MuCisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3I6OnVwZGF0ZSk6IE1pZ3JhdGUgZnJvbSBJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpwdXQuCisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmFkdmFuY2UpOiBBZGQg
bW9yZSBleHBsaWNpdCB0cmFuc2FjdGlvbi1pcy1hY3RpdmUgY2hlY2suCisgICAgICAgIChXZWJD
b3JlOjpJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURC
Q3Vyc29yOjpkZWxldGVGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmVm
ZmVjdGl2ZU9iamVjdFN0b3JlKTogQ29udmVuaWVuY2UgZnVuY3Rpb24gKHNvdXJjZSBtYXkgYmUg
c3RvcmUgb3IgaW5kZXgpLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogTW9kdWxlcy9p
bmRleGVkZGIvSURCQ3Vyc29yLmg6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmlzS2V5
Q3Vyc29yKTogRGlzdGluZ3Vpc2ggZnJvbSBJREJDdXJzb3JXaXRoVmFsdWUuCisgICAgICAgIChJ
REJDdXJzb3IpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJ
bXBsLmNwcDogUmVtb3ZlIG1pZ3JhdGVkIGNoZWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1
cnNvckJhY2tlbmRJbXBsOjp1cGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFj
a2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29y
QmFja2VuZEltcGw6OmFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2Vu
ZEltcGw6OnByZWZldGNoQ29udGludWUpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvcldpdGhWYWx1ZS5oOgorICAgICAgICAoSURCQ3Vyc29yV2l0aFZhbHVlKToKKyAgICAg
ICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHA6IE1pZ3JhdGUgY2hlY2tzLgor
ICAgICAgICAoV2ViQ29yZTo6SURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQkRhdGFiYXNlOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgICog
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHA6IFJlbW92ZSBtaWdy
YXRlZCBjaGVja3MuCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpj
cmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJh
Y2tlbmRJbXBsOjpzZXRWZXJzaW9uKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJJ
bmRleC5jcHA6IE1pZ3JhdGUgY2hlY2tzLgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6Om9w
ZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmNvdW50KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkluZGV4OjpvcGVuS2V5Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklE
QkluZGV4OjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXg6OmdldEtleSk6CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXhCYWNrZW5kSW1wbC5jcHA6IFJlbW92ZSBt
aWdyYXRlZCBjaGVja3MuCisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleEJhY2tlbmRJbXBsOjpv
cGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6Om9wZW5L
ZXlDdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0KToKKyAgICAgICAg
KFdlYkNvcmU6OklEQkluZGV4QmFja2VuZEltcGw6OmdldEtleSk6CisgICAgICAgICogTW9kdWxl
cy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwOiBNaWdyYXRlIGNlaGNrcy4KKyAgICAgICAg
KFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpnZXQpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2Jq
ZWN0U3RvcmU6OmFkZCk6IERlbGVnYXRlcyB0byBwdXQoUHV0TW9kZSkKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjpwdXQpOiBEZWxlZ2F0ZXMgdG8gcHV0KFB1dE1vZGUpCisgICAg
ICAgIChXZWJDb3JlKTogQWRkcyBwdXQoUHV0TW9kZSkgd2hpY2ggaGFzIHRoZSB1bmlmaWVkIGNo
ZWNrcyBtaWdyYXRlZCBmcm9tIAorICAgICAgICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpw
dXQuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNv
cmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3Rv
cmU6Om9wZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNvdW50
KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oOiBBZGRzIHB1
dChQdXRNb2RlKS4KKyAgICAgICAgKElEQk9iamVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVz
L2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcDogUmVtb3ZlIG1pZ3JhdGVk
IGNoZWNrcy4KKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6Omdl
dCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXRJbnRl
cm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQp
OgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlRnVu
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xl
YXIpOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJ
bnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6Om9wZW5DdXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6
SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnQpOgorICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQlJlcXVlc3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SURCUmVxdWVzdDo6c3Rv
cCk6IENhbid0IHVzZSBtYXJrRWFybHlEZWF0aCgpIGFueSBtb3JlLgorICAgICAgICAqIE1vZHVs
ZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3QuaDogUmVtb3ZlIG1hcmtFYXJseURlYXRoKCk7CisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOiBBZGQgYWN0aXZlIGZs
YWcgdHJhY2tpbmcuCisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNh
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmFib3J0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvbkFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpvbkNvbXBsZXRlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Omlz
QWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjppc1JlYWRPbmx5KToK
KyAgICAgICAgKElEQlRyYW5zYWN0aW9uKToKKwogMjAxMi0wNi0yMiAgQWxlYyBGbGV0dCAgPGFs
ZWNmbGV0dEBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgSW5kZXhlZERCOiByZWZhY3RvciBpbmRl
eC13cml0aW5nIHRvIGJlIG1vcmUgc2VsZi1jb250YWluZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4IDI3NTk1MTRlZmY3NDIyNGM2MTc5
OWNmNWY2MDc3OWZkY2U0ZDI0MjMuLjBiYWIxZTNhMzY2NDZhNWNkMmYwNzRmNzczODQ2OTA3NjI1
MjI3NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29y
LmNwcApAQCAtMjksOSArMjksMTEgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAog
I2luY2x1ZGUgIklEQkFueS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRpZXMuaCIKICNp
bmNsdWRlICJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCT2JqZWN0U3RvcmUuaCIK
ICNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSURCVHJhY2luZy5oIgogI2luY2x1
ZGUgIklEQlRyYW5zYWN0aW9uLmgiCkBAIC0xMjUsMzAgKzEyNyw0MCBAQCBJREJBbnkqIElEQkN1
cnNvcjo6c291cmNlKCkgY29uc3QKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCQ3Vyc29yOjp1
cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJf
VFJBQ0UoIklEQkN1cnNvcjo6dXBkYXRlIik7CisgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKIAotICAgIGlmICghbV9nb3RWYWx1ZSkgeworICAgIGlm
ICghbV9nb3RWYWx1ZSB8fCBpc0tleUN1cnNvcigpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgfQotCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQogICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkp
IHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKICAgICBpZiAodmFsdWUtPmJsb2JVUkxzKCkuc2l6ZSgpID4g
MCkgewogICAgICAgICAvLyBGSVhNRTogQWRkIEJsb2IvRmlsZS9GaWxlTGlzdCBzdXBwb3J0CiAg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9EQVRBX0NMT05FX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisgICAgUmVmUHRyPElEQk9iamVjdFN0b3JlPiBvYmpl
Y3RTdG9yZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7CisgICAgY29uc3QgSURCS2V5UGF0aCYg
a2V5UGF0aCA9IG9iamVjdFN0b3JlLT5tZXRhZGF0YSgpLmtleVBhdGg7CisgICAgY29uc3QgYm9v
bCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOworICAgIGlmICh1c2VzSW5MaW5l
S2V5cykgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3JlYXRlSURCS2V5
RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGgpOworICAgICAgICBp
ZiAoIWtleVBhdGhLZXkgfHwgIWtleVBhdGhLZXktPmlzRXF1YWwobV9jdXJyZW50UHJpbWFyeUtl
eS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFf
RVJSOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKICAgICBSZWZQ
dHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJB
bnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgbV9iYWNrZW5kLT51
cGRhdGUodmFsdWUsIHJlcXVlc3QsIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVz
dC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIEFTU0VS
VCghZWMpOwogICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKIH0KIApAQCAtMTYwLDcgKzE3
Miw3IEBAIHZvaWQgSURCQ3Vyc29yOjphZHZhbmNlKHVuc2lnbmVkIGxvbmcgY291bnQsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtX3JlcXVl
c3QpIHsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtMTg4LDcgKzIwMCw3IEBAIHZvaWQgSURCQ3Vyc29yOjpjb250
aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKCFtX3JlcXVlc3QpIHsKKyAgICBpZiAo
IW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAg
fQpAQCAtMTk4LDIxICsyMTAsMjMgQEAgdm9pZCBJREJDdXJzb3I6OmNvbnRpbnVlRnVuY3Rpb24o
UGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICAvLyBGSVhNRTogV2UncmUgbm90IHVzaW5nIHRoZSBjb250ZXh0IGZy
b20gd2hlbiBjb250aW51ZSB3YXMgY2FsbGVkLCB3aGljaCBtZWFucyB0aGUgY2FsbGJhY2sKLSAg
ICAvLyAgICAgICAgd2lsbCBiZSBvbiB0aGUgb3JpZ2luYWwgY29udGV4dCBvcGVuQ3Vyc29yIHdh
cyBjYWxsZWQgb24uIElzIHRoaXMgcmlnaHQ/Ci0gICAgaWYgKG1fcmVxdWVzdC0+cmVzZXRSZWFk
eVN0YXRlKG1fdHJhbnNhY3Rpb24uZ2V0KCkpKSB7Ci0gICAgICAgIG1fcmVxdWVzdC0+c2V0Q3Vy
c29yKHRoaXMpOwotICAgICAgICBtX2dvdFZhbHVlID0gZmFsc2U7Ci0gICAgICAgIG1fYmFja2Vu
ZC0+Y29udGludWVGdW5jdGlvbihrZXksIG1fcmVxdWVzdCwgZWMpOwotICAgIH0gZWxzZSB7Cisg
ICAgaWYgKCFtX3JlcXVlc3QtPnJlc2V0UmVhZHlTdGF0ZShtX3RyYW5zYWN0aW9uLmdldCgpKSkg
ewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOworICAgICAgICByZXR1cm47CiAgICAg
fQorICAgIG1fcmVxdWVzdC0+c2V0Q3Vyc29yKHRoaXMpOworICAgIG1fZ290VmFsdWUgPSBmYWxz
ZTsKKyAgICBtX2JhY2tlbmQtPmNvbnRpbnVlRnVuY3Rpb24oa2V5LCBtX3JlcXVlc3QsIGVjKTsK
IH0KIAogUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAg
IElEQl9UUkFDRSgiSURCQ3Vyc29yOjpkZWxldGUiKTsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24t
PmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNB
Q1RJT05fSU5BQ1RJVkVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgaWYgKG1f
dHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhj
ZXB0aW9uOjpSRUFEX09OTFlfRVJSOwogICAgICAgICByZXR1cm4gMDsKQEAgLTIyNCwxMCArMjM4
LDcgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJDdXJzb3I6OmRlbGV0ZUZ1bmN0aW9uKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQKICAgICB9CiAgICAgUmVmUHRyPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUo
dGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIG1fYmFja2VuZC0+ZGVsZXRlRnVuY3Rp
b24ocmVxdWVzdCwgZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFy
bHlEZWF0aCgpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgQVNTRVJUKCFlYyk7CiAg
ICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCkBAIC0yNTIsNiArMjYzLDE0IEBAIHZv
aWQgSURCQ3Vyc29yOjpzZXRWYWx1ZVJlYWR5KCkKICAgICBtX3ZhbHVlSXNEaXJ0eSA9IHRydWU7
CiB9CiAKK1Bhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkN1cnNvcjo6ZWZmZWN0aXZlT2Jq
ZWN0U3RvcmUoKQoreworICAgIGlmIChtX3NvdXJjZS0+dHlwZSgpID09IElEQkFueTo6SURCT2Jq
ZWN0U3RvcmVUeXBlKQorICAgICAgICByZXR1cm4gbV9zb3VyY2UtPmlkYk9iamVjdFN0b3JlKCk7
CisgICAgUmVmUHRyPElEQkluZGV4PiBpbmRleCA9IG1fc291cmNlLT5pZGJJbmRleCgpOworICAg
IHJldHVybiBpbmRleC0+b2JqZWN0U3RvcmUoKTsKK30KKwogdW5zaWduZWQgc2hvcnQgSURCQ3Vy
c29yOjpzdHJpbmdUb0RpcmVjdGlvbihjb25zdCBTdHJpbmcmIGRpcmVjdGlvblN0cmluZywgRXhj
ZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgaWYgKGRpcmVjdGlvblN0cmluZyA9PSBJREJDdXJzb3I6
OmRpcmVjdGlvbk5leHQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
Q3Vyc29yLmgKaW5kZXggM2Y5ZDg0Zjk4ODExODEyYzZiZmNiNTNjMjM4ODMxZWUzZmJiNWU2ZS4u
NGY0NTY0ZWViNDIxMjdhYTg3YjA2OTM2YjU0ZTA0M2Y0ZTdmNTU4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yLmgKQEAgLTkxLDggKzkxLDExIEBAIHB1
YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIElEQkN1cnNvcihQYXNzUmVmUHRyPElEQkN1cnNvckJh
Y2tlbmRJbnRlcmZhY2U+LCBJREJSZXF1ZXN0KiwgSURCQW55KiBzb3VyY2UsIElEQlRyYW5zYWN0
aW9uKik7CisgICAgdmlydHVhbCBib29sIGlzS2V5Q3Vyc29yKCkgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQogCiBwcml2YXRlOgorICAgIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IGVmZmVjdGl2
ZU9iamVjdFN0b3JlKCk7CisKICAgICBSZWZQdHI8SURCQ3Vyc29yQmFja2VuZEludGVyZmFjZT4g
bV9iYWNrZW5kOwogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBtX3JlcXVlc3Q7CiAgICAgUmVmUHRy
PElEQkFueT4gbV9zb3VyY2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2lu
ZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKaW5kZXggYjYyNDZlOTE5ZTBiMTg3
MjdjMDM1MTRkN2I4MWE5MmI4OTk4ZjI5OC4uOWYxNmMyOTc0MzhkNmFkZTkwZDE3OWNhY2U1YWVl
ZGQ5ZDE2N2E1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvckJhY2tlbmRJbXBsLmNwcApAQCAtOTMsMTAgKzkzLDggQEAgdm9pZCBJ
REJDdXJzb3JCYWNrZW5kSW1wbDo6dXBkYXRlKFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZh
bHVlPiB2YWx1ZSwgUGFzc1IKIHsKICAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBs
Ojp1cGRhdGUiKTsKICAgICBBU1NFUlQobV90cmFuc2FjdGlvbi0+bW9kZSgpICE9IElEQlRyYW5z
YWN0aW9uOjpSRUFEX09OTFkpOwotICAgIGlmICghbV9jdXJzb3IgfHwgbV9jdXJzb3JUeXBlID09
IEluZGV4S2V5Q3Vyc29yKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklE
Ql9JTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBBU1NFUlQo
bV9jdXJzb3IpOworICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSW5kZXhLZXlDdXJzb3IpOwog
CiAgICAgbV9vYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBtX2N1cnNvci0+cHJpbWFyeUtleSgpLCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclVwZGF0ZSwgY2FsbGJhY2tzLCBt
X3RyYW5zYWN0aW9uLmdldCgpLCBlYyk7CiB9CkBAIC0xMjEsMTYgKzExOSwyMCBAQCB2b2lkIElE
QkN1cnNvckJhY2tlbmRJbXBsOjpjb250aW51ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCS2V5PiBw
cnBLZXksIFBhc3NSZWZQdAogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCFtX3RyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJDdXJzb3JCYWNrZW5kSW1w
bDo6Y29udGludWVGdW5jdGlvbkludGVybmFsLCB0aGlzLCBrZXksIHBycENhbGxiYWNrcykpKQor
ICAgIGlmICghbV90cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygm
SURCQ3Vyc29yQmFja2VuZEltcGw6OmNvbnRpbnVlRnVuY3Rpb25JbnRlcm5hbCwgdGhpcywga2V5
LCBwcnBDYWxsYmFja3MpKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwor
ICAgIH0KIH0KIAogdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6YWR2YW5jZSh1bnNpZ25lZCBs
b25nIGNvdW50LCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tzLCBFeGNlcHRp
b25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJbXBsOjphZHZh
bmNlIik7CiAKLSAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxs
YmFja1Rhc2soJklEQkN1cnNvckJhY2tlbmRJbXBsOjphZHZhbmNlSW50ZXJuYWwsIHRoaXMsIGNv
dW50LCBwcnBDYWxsYmFja3MpKSkKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFz
ayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQkN1cnNvckJhY2tlbmRJbXBsOjphZHZhbmNlSW50ZXJu
YWwsIHRoaXMsIGNvdW50LCBwcnBDYWxsYmFja3MpKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05f
SU5BQ1RJVkVfRVJSOworICAgIH0KIH0KIAogdm9pZCBJREJDdXJzb3JCYWNrZW5kSW1wbDo6YWR2
YW5jZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkN1cnNv
ckJhY2tlbmRJbXBsPiBwcnBDdXJzb3IsIHVuc2lnbmVkIGxvbmcgY291bnQsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCkBAIC0xODAsOCArMTgyLDEwIEBAIHZvaWQgSURCQ3Vy
c29yQmFja2VuZEltcGw6OmRlbGV0ZUZ1bmN0aW9uKFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBw
cnBDYWxsYmFja3MsCiB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRpbnVl
KGludCBudW1iZXJUb0ZldGNoLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4gcHJwQ2FsbGJhY2tz
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBJREJfVFJBQ0UoIklEQkN1cnNvckJhY2tlbmRJ
bXBsOjpwcmVmZXRjaENvbnRpbnVlIik7Ci0gICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJDdXJzb3JCYWNrZW5kSW1wbDo6cHJlZmV0Y2hD
b250aW51ZUludGVybmFsLCB0aGlzLCBudW1iZXJUb0ZldGNoLCBwcnBDYWxsYmFja3MpKSkKKyAg
ICBpZiAoIW1fdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklE
QkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENvbnRpbnVlSW50ZXJuYWwsIHRoaXMsIG51bWJl
clRvRmV0Y2gsIHBycENhbGxiYWNrcykpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7CisgICAgfQogfQogCiB2b2lkIElEQkN1cnNvckJhY2tlbmRJbXBsOjpwcmVmZXRjaENv
bnRpbnVlSW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCQ3Vy
c29yQmFja2VuZEltcGw+IHBycEN1cnNvciwgaW50IG51bWJlclRvRmV0Y2gsIFBhc3NSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oCmluZGV4IGExYmExNGY5NjFjNWEwYjg4
Y2VkZWNjMzBhNTA5YTE1NGE2MTc5ZTAuLjliMzk2YmEzNWFhMDZiMzkxNGUwNzJhNjgxZDcwNGUw
NWNhZWY4Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvcldpdGhWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvcldpdGhWYWx1ZS5oCkBAIC00MSw2ICs0MSw5IEBAIHB1YmxpYzoKICAgICAvLyBU
aGUgdmFsdWUgYXR0cmlidXRlIGRlZmluZWQgaW4gdGhlIElETCBpcyBzaW1wbHkgaW1wbGVtZW50
ZWQgaW4gSURCQ3Vyc29yIChidXQgbm90IGV4cG9zZWQgdmlhCiAgICAgLy8gaXRzIElETCkuIFRo
aXMgaXMgdG8gbWFrZSB0aGUgaW1wbGVtZW50YXRpb24gbW9yZSBzaW1wbGUgd2hpbGUgbWF0Y2hp
bmcgd2hhdCB0aGUgc3BlYyBzYXlzLgogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIGlz
S2V5Q3Vyc29yKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKwogcHJpdmF0ZToK
ICAgICBJREJDdXJzb3JXaXRoVmFsdWUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcApp
bmRleCAwYTQ5NDAwYmI4NjU1ZWFlOTA0ZmNlNjlkOWVkN2I0MDg2YmI3ZmNhLi5hYjEyM2MzZGNj
OTQ4NjZkZWVhY2VhMDE3ODljYTVmMjI4NDczOTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0xMTcsNiArMTE3LDEwIEBAIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlm
ICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CiAKICAgICBJREJLZXlQYXRoIGtleVBhdGg7CiAgICAgaWYgKCFv
cHRpb25zLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKQEAgLTEyOCw2ICsxMzIsMTEgQEAgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY28KICAgICAgICAgICAgIGtleVBhdGggPSBJREJLZXlQYXRoKGtleVBh
dGhTdHJpbmcpOwogICAgIH0KIAorICAgIGlmIChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250
YWlucyhuYW1lKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJB
SU5UX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgaWYgKCFrZXlQYXRoLmlz
TnVsbCgpICYmICFrZXlQYXRoLmlzVmFsaWQoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJREJfU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjIsNiAr
MTcxLDE0IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAg
ICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNv
bnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9O
T1RfRk9VTkRfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgbV9iYWNrZW5kLT5k
ZWxldGVPYmplY3RTdG9yZShuYW1lLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2Vu
ZCgpLCBlYyk7CiAgICAgaWYgKCFlYykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCBiNjM2
ZDgwYTY5ZmI1NjViYTA2MjVkODE2MjhiZjI0ZTE0NjU1NjA0Li4yZDNmMzcxNTUyODQyNzhiNTA5
YzRhNGI5NjhmMDUyNDY0NWVlNDAxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTU0LDEw
ICsxNTQsNyBAQCBQYXNzUmVmUHRyPERPTVN0cmluZ0xpc3Q+IElEQkRhdGFiYXNlQmFja2VuZElt
cGw6Om9iamVjdFN0b3JlTmFtZXMoKSBjb25zdAogUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJh
Y2tlbmRJbnRlcmZhY2U+IElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmNyZWF0ZU9iamVjdFN0b3Jl
KGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2V5UGF0aCYga2V5UGF0aCwgYm9vbCBhdXRv
SW5jcmVtZW50LCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uUHRy
LCBFeGNlcHRpb25Db2RlJiBlYykKIHsKICAgICBBU1NFUlQodHJhbnNhY3Rpb25QdHItPm1vZGUo
KSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpOwotICAgIGlmIChtX29iamVjdFN0
b3Jlcy5jb250YWlucyhuYW1lKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpDT05TVFJBSU5UX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIEFTU0VSVCgh
bV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkpOwogCiAgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Y3JlYXRlKHRoaXMsIG5hbWUsIGtleVBhdGgsIGF1dG9JbmNyZW1lbnQpOwogICAgIEFTU0VSVChv
YmplY3RTdG9yZS0+bmFtZSgpID09IG5hbWUpOwpAQCAtMTY2LDYgKzE2Myw3IEBAIFBhc3NSZWZQ
dHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpjcmVhdGVPYmplY3RTCiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFj
ZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblB0cjsKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5z
Y2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpj
cmVhdGVPYmplY3RTdG9yZUludGVybmFsLCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0
aW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tU
YXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpyZW1vdmVPYmplY3RTdG9yZUZyb21NYXAsIGRh
dGFiYXNlLCBvYmplY3RTdG9yZSkpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9F
UlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTE5NSwxNSArMTkzLDE0IEBAIFBhc3NS
ZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpvYmplY3RTdG9yZShjCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9i
amVjdFN0b3JlKGNvbnN0IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKHRy
YW5zYWN0aW9uUHRyLT5tb2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsK
LSAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX29i
amVjdFN0b3Jlcy5nZXQobmFtZSk7Ci0gICAgaWYgKCFvYmplY3RTdG9yZSkgewotICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0
dXJuOwotICAgIH0KKyAgICBBU1NFUlQobV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkpOwor
CiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKKyAg
ICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX29iamVj
dFN0b3Jlcy5nZXQobmFtZSk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVy
ZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblB0cjsKICAgICBpZiAoIXRyYW5zYWN0aW9u
LT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBs
OjpkZWxldGVPYmplY3RTdG9yZUludGVybmFsLCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUsIHRyYW5z
YWN0aW9uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjphZGRPYmplY3RTdG9yZVRvTWFwLCBkYXRh
YmFzZSwgb2JqZWN0U3RvcmUpKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJS
OwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMjUwLDYgKzI0Nyw3IEBAIHZvaWQgSURCRGF0
YWJhc2VCYWNrZW5kSW1wbDo6c2V0VmVyc2lvbihjb25zdCBTdHJpbmcmIHZlcnNpb24sIFBhc3NS
ZWZQdHI8SURCQ2FsCiAgICAgUmVmUHRyPElEQkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNl
ID0gdGhpczsKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJh
Y2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpzZXRWZXJzaW9uSW50ZXJuYWwsIGRhdGFi
YXNlLCB2ZXJzaW9uLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpyZXNldFZlcnNpb24sIGRhdGFiYXNlLCBtX3ZlcnNpb24pKSkgeworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJB
TlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAppbmRleCAzMWU3ZjVkNGU3NjJmY2NkYmRhNDMxNjc5
NDk5ZGFiYWFhYmFkMGY0Li43YmI2Mjg2MGFiOTUyNTNkNDFiZDQ1MzUwNzJiZjBkODE0ODIyNzYw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3BwCkBA
IC02NSw2ICs2NSwxMCBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpvcGVuQ3Vy
c29yKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhcwogICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVy
biAwOwogICAgIH0KKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAgICAgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uID0g
SURCQ3Vyc29yOjpzdHJpbmdUb0RpcmVjdGlvbihkaXJlY3Rpb25TdHJpbmcsIGVjKTsKICAgICBp
ZiAoZWMpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNzIsMTAgKzc2LDcgQEAgUGFzc1JlZlB0cjxJ
REJSZXF1ZXN0PiBJREJJbmRleDo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBj
b250ZXh0LCBQYXMKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6
OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQo
KSk7CiAgICAgcmVxdWVzdC0+c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNl
OjpJbmRleEN1cnNvcik7CiAgICAgbV9iYWNrZW5kLT5vcGVuQ3Vyc29yKGtleVJhbmdlLCBkaXJl
Y3Rpb24sIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmIChl
YykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwotICAgICAgICByZXR1cm4g
MDsKLSAgICB9CisgICAgQVNTRVJUKCFlYyk7CiAgICAgcmV0dXJuIHJlcXVlc3Q7CiB9CiAKQEAg
LTExNSwxMiArMTE2LDEzIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmNvdW50
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQCiAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVz
dDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdl
dCgpKTsKLSAgICBtX2JhY2tlbmQtPmNvdW50KGtleVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0
aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFy
a0Vhcmx5RGVhdGgoKTsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJS
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVl
c3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1f
dHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFja2VuZC0+Y291bnQoa2V5UmFuZ2UsIHJlcXVl
c3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIEFTU0VSVCghZWMpOwogICAg
IHJldHVybiByZXF1ZXN0OwogfQogCkBAIC0xNDAsNiArMTQyLDEwIEBAIFBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCog
Y29udGV4dCwKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURf
U1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0
aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRS
QU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAg
dW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uID0gSURCQ3Vyc29yOjpzdHJpbmdUb0RpcmVjdGlvbihk
aXJlY3Rpb25TdHJpbmcsIGVjKTsKICAgICBpZiAoZWMpCkBAIC0xNDgsMTAgKzE1NCw3IEBAIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlDdXJzb3IoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCogY29udGV4dCwKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElE
QlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2Fj
dGlvbi5nZXQoKSk7CiAgICAgcmVxdWVzdC0+c2V0Q3Vyc29yVHlwZShJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlOjpJbmRleEtleUN1cnNvcik7CiAgICAgbV9iYWNrZW5kLT5vcGVuS2V5Q3Vyc29y
KGtleVJhbmdlLCBkaXJlY3Rpb24sIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgQVNTRVJUKCFlYyk7CiAgICAgcmV0dXJuIHJl
cXVlc3Q7CiB9CiAKQEAgLTIwMCw2ICsyMDMsMTAgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJ
REJJbmRleDo6Z2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQdHIK
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJS
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0Fj
dGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9O
X0lOQUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGlmICgha2V5UmFu
Z2UpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAg
ICAgIHJldHVybiAwOwpAQCAtMjA3LDEwICsyMTQsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IElEQkluZGV4OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cgogCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAg
IG1fYmFja2VuZC0+Z2V0KGtleVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5k
KCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgo
KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIEFTU0VSVCghZWMpOwogICAgIHJldHVy
biByZXF1ZXN0OwogfQogCkBAIC0yMjAsNyArMjI0LDYgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NS
ZWYKICAgICBSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlID0gSURCS2V5UmFuZ2U6Om9ubHko
a2V5LCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4gMDsKLQogICAgIHJldHVybiBn
ZXRLZXkoY29udGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7CiB9CiAKQEAgLTIzMSw2ICsy
MzQsMTAgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJbmRleDo6Z2V0S2V5KFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWYKICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgfQogICAgIGlmICgha2V5UmFuZ2UpIHsKICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjM4LDEw
ICsyNDUsNyBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQkluZGV4OjpnZXRLZXkoU2NyaXB0
RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZgogCiAgICAgUmVmUHRyPElEQlJlcXVl
c3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUo
dGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIG1fYmFja2VuZC0+Z2V0S2V5KGtleVJh
bmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMp
IHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQorICAgIEFTU0VSVCghZWMpOwogICAgIHJldHVybiByZXF1ZXN0OwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleEJhY2tlbmRJ
bXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2Vu
ZEltcGwuY3BwCmluZGV4IGEwODdlNmFhZjJmNTI0MjM1Zjg1MDdhNmVmNDhlNWIyZWM3ZDllZTcu
LjcxZDNiNmYzODI0YmMwZDIxY2FlOGE3Y2U4Yjc0MjU2NWU0NzI4YTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4QmFja2VuZEltcGwu
Y3BwCkBAIC0xMDksOCArMTA5LDEwIEBAIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6b3BlbkN1
cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgdW5zaWduCiAgICAgUmVm
UHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOwogICAgIFJlZlB0cjxJREJD
YWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8SURCVHJhbnNh
Y3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uUHRyOwotICAg
IGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJm9wZW5D
dXJzb3JJbnRlcm5hbCwgaW5kZXgsIGtleVJhbmdlLCBkaXJlY3Rpb24sIElEQkN1cnNvckJhY2tl
bmRJbnRlcmZhY2U6OkluZGV4Q3Vyc29yLCBjYWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpCisgICAg
aWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmb3BlbkN1
cnNvckludGVybmFsLCBpbmRleCwga2V5UmFuZ2UsIGRpcmVjdGlvbiwgSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6SW5kZXhDdXJzb3IsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pKSkgeworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgIH0KIH0KIAogdm9pZCBJREJJbmRl
eEJhY2tlbmRJbXBsOjpvcGVuS2V5Q3Vyc29yKFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtl
eVJhbmdlLCB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24sIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBwcnBDYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rp
b25QdHIsIEV4Y2VwdGlvbkNvZGUmIGVjKQpAQCAtMTIwLDggKzEyMiwxMCBAQCB2b2lkIElEQklu
ZGV4QmFja2VuZEltcGw6Om9wZW5LZXlDdXJzb3IoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJw
S2V5UmFuZ2UsIHVucwogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4ga2V5UmFuZ2UgPSBwcnBLZXlS
YW5nZTsKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7
CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24g
PSB0cmFuc2FjdGlvblB0cjsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZvcGVuQ3Vyc29ySW50ZXJuYWwsIGluZGV4LCBrZXlSYW5nZSwgZGly
ZWN0aW9uLCBJREJDdXJzb3JCYWNrZW5kSW50ZXJmYWNlOjpJbmRleEtleUN1cnNvciwgY2FsbGJh
Y2tzLCB0cmFuc2FjdGlvbikpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhj
cmVhdGVDYWxsYmFja1Rhc2soJm9wZW5DdXJzb3JJbnRlcm5hbCwgaW5kZXgsIGtleVJhbmdlLCBk
aXJlY3Rpb24sIElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U6OkluZGV4S2V5Q3Vyc29yLCBjYWxs
YmFja3MsIHRyYW5zYWN0aW9uKSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VS
UjsKKyAgICB9CiB9CiAKIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbChT
Y3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBp
bmRleCwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJh
Y2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNl
PikKQEAgLTE0NSw4ICsxNDksMTAgQEAgdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpjb3VudElu
dGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElEQkkKIHZvaWQgSURC
SW5kZXhCYWNrZW5kSW1wbDo6Y291bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBh
c3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZElu
dGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFD
RSgiSURCSW5kZXhCYWNrZW5kSW1wbDo6Y291bnQiKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5z
Y2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZjb3VudEludGVybmFsLCB0aGlzLCByYW5n
ZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVk
dWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJmNvdW50SW50ZXJuYWwsIHRoaXMsIHJhbmdlLCBj
YWxsYmFja3MsIHRyYW5zYWN0aW9uKSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZF
X0VSUjsKKyAgICB9CiB9CiAKIHZvaWQgSURCSW5kZXhCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXgsIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNh
bGxiYWNrcz4gY2FsbGJhY2tzKQpAQCAtMjA1LDggKzIxMSwxMCBAQCB2b2lkIElEQkluZGV4QmFj
a2VuZEltcGw6OmdldChQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1Jl
ZlB0cjxJRAogICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IHRoaXM7CiAg
ICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOwogICAgIFJlZlB0
cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBpZiAoIXRyYW5z
YWN0aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZnZXRJbnRlcm5hbCwgaW5k
ZXgsIGtleVJhbmdlLCBjYWxsYmFja3MpKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVs
ZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZnZXRJbnRlcm5hbCwgaW5kZXgsIGtleVJhbmdlLCBj
YWxsYmFja3MpKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgIH0K
IH0KIAogdm9pZCBJREJJbmRleEJhY2tlbmRJbXBsOjpnZXRLZXkoUGFzc1JlZlB0cjxJREJLZXlS
YW5nZT4gcHJwS2V5UmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBwcnBDYWxsYmFja3Ms
IElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNv
ZGUmIGVjKQpAQCAtMjE1LDggKzIyMywxMCBAQCB2b2lkIElEQkluZGV4QmFja2VuZEltcGw6Omdl
dEtleShQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBLZXlSYW5nZSwgUGFzc1JlZlB0cgogICAg
IFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IHRoaXM7CiAgICAgUmVmUHRyPElE
QktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOwogICAgIFJlZlB0cjxJREJDYWxsYmFj
a3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZnZXRLZXlJbnRlcm5hbCwgaW5kZXgsIGtleVJh
bmdlLCBjYWxsYmFja3MpKSkKKyAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZnZXRLZXlJbnRlcm5hbCwgaW5kZXgsIGtleVJhbmdlLCBjYWxsYmFj
a3MpKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgIH0KIH0KIAog
Ym9vbCBJREJJbmRleEJhY2tlbmRJbXBsOjphZGRpbmdLZXlBbGxvd2VkKGNvbnN0IElEQktleSog
aW5kZXhLZXksIGNvbnN0IElEQktleSogcHJpbWFyeUtleSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAppbmRleCA2OGJjMTcxNjVk
ZjcyNWU3MTQxYzgxYzE4OGZjNzU2YTQxYzUyOTI2Li5kYTgzOTgzYTllM2YyY2E2Zjg2MWQ1MzEy
ZmRhMjdjZGZkNGZjZmE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCT2JqZWN0U3RvcmUuY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJE
T01TdHJpbmdMaXN0LmgiCiAjaW5jbHVkZSAiSURCQW55LmgiCisjaW5jbHVkZSAiSURCQmluZGlu
Z1V0aWxpdGllcy5oIgogI2luY2x1ZGUgIklEQkRhdGFiYXNlLmgiCiAjaW5jbHVkZSAiSURCRGF0
YWJhc2VFeGNlcHRpb24uaCIKICNpbmNsdWRlICJJREJJbmRleC5oIgpAQCAtNzgsMTIgKzc5LDEz
IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmdldChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OkRBVEFfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgUmVmUHRyPElE
QlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55Ojpj
cmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+Z2V0KGtl
eVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAo
ZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgoKTsKKyAgICBpZiAoIW1fdHJh
bnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Cisg
ICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4
dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOworICAgIG1fYmFj
a2VuZC0+Z2V0KGtleVJhbmdlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVj
KTsKKyAgICBBU1NFUlQoIWVjKTsKICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7CiB9CiAK
QEAgLTk2LDY5ICs5OCw4MSBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3Jl
OjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzcwogICAgIHJldHVybiBn
ZXQoY29udGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8SURC
UmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250
ZXh0LCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQ
dHI8SURCS2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6YWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9y
ZTo6YWRkIik7CisgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6
OkFkZE9ubHksIGNvbnRleHQsIHZhbHVlLCBrZXksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJS
ZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRl
eHQsIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJ
REJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJPYmpl
Y3RTdG9yZTo6cHV0Iik7CisgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U6OkFkZE9yVXBkYXRlLCBjb250ZXh0LCB2YWx1ZSwga2V5LCBlYyk7Cit9CisKK1Bhc3NS
ZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tl
bmRJbnRlcmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVm
UHRyPElEQktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0Uo
IklEQk9iamVjdFN0b3JlOjpwdXQiKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVl
PiB2YWx1ZSA9IHBycFZhbHVlOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKICAg
ICBpZiAobV9kZWxldGVkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklE
Ql9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmICht
X3RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZl
KCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5B
Q1RJVkVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICBpZiAoa2V5ICYmICFr
ZXktPmlzVmFsaWQoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRB
X0VSUjsKKyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJFQURfT05MWV9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KLQotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJw
VmFsdWU7CiAgICAgaWYgKHZhbHVlLT5ibG9iVVJMcygpLnNpemUoKSA+IDApIHsKICAgICAgICAg
Ly8gRklYTUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxpc3Qgc3VwcG9ydAogICAgICAgICBlYyA9IElE
QkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfREFUQV9DTE9ORV9FUlI7CiAgICAgICAgIHJldHVybiAw
OwogICAgIH0KIAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6
Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgp
KTsKLSAgICBtX2JhY2tlbmQtPnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bnRlcmZhY2U6OkFkZE9ubHksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMp
OwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQor
ICAgIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGggPSBtX21ldGFkYXRhLmtleVBhdGg7CisgICAg
Y29uc3QgYm9vbCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOworICAgIGNvbnN0
IGJvb2wgaGFzS2V5R2VuZXJhdG9yID0gYXV0b0luY3JlbWVudCgpOwogCi1QYXNzUmVmUHRyPElE
QlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCwgUGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVm
UHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklE
Qk9iamVjdFN0b3JlOjpwdXQiKTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKKyAgICBpZiAodXNl
c0luTGluZUtleXMgJiYga2V5KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OkRBVEFfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKG1fdHJhbnNhY3Rp
b24tPmlzUmVhZE9ubHkoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpS
RUFEX09OTFlfRVJSOworICAgIGlmICghdXNlc0luTGluZUtleXMgJiYgIWhhc0tleUdlbmVyYXRv
ciAmJiAha2V5KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJS
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KKyAgICBpZiAodXNlc0luTGluZUtleXMpIHsK
KyAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJp
YWxpemVkVmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgaWYgKGtleVBh
dGhLZXkgJiYgIWtleVBhdGhLZXktPmlzVmFsaWQoKSkgeworICAgICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoIWhhc0tleUdlbmVyYXRvciAmJiAha2V5UGF0aEtleSkgeworICAg
ICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzS2V5R2VuZXJhdG9yICYmICFr
ZXlQYXRoS2V5KSB7CisgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBkdW1teUtleSA9IElEQktl
eTo6Y3JlYXRlTnVtYmVyKC0xKTsKKyAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0
VmFsdWU+IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZh
bHVlKGR1bW15S2V5LCB2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgICAgICBpZiAoIXZhbHVlQWZ0
ZXJJbmplY3Rpb24pIHsKKyAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpEQVRBX0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KICAgICBpZiAoa2V5ICYmICFrZXktPmlzVmFsaWQoKSkgewogICAgICAg
ICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQogCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBW
YWx1ZTsKLSAgICBpZiAodmFsdWUtPmJsb2JVUkxzKCkuc2l6ZSgpID4gMCkgewotICAgICAgICAv
LyBGSVhNRTogQWRkIEJsb2IvRmlsZS9GaWxlTGlzdCBzdXBwb3J0Ci0gICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OklEQl9EQVRBX0NMT05FX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQotCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0Ojpj
cmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkp
OwotICAgIG1fYmFja2VuZC0+cHV0KHZhbHVlLCBrZXksIElEQk9iamVjdFN0b3JlQmFja2VuZElu
dGVyZmFjZTo6QWRkT3JVcGRhdGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwg
ZWMpOwotICAgIGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwot
ICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgLy8gRklYTUU6IFBhc3MgdGhyb3VnaCBrZXlQ
YXRoS2V5IGFzIGtleSB0byBzaW1wbGlmeSBiYWNrIGVuZCBpbXBsZW1lbnRhdGlvbi4KKyAgICBt
X2JhY2tlbmQtPnB1dCh2YWx1ZS5yZWxlYXNlKCksIGtleS5yZWxlYXNlKCksIHB1dE1vZGUsIHJl
cXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOworICAgIEFTU0VSVCghZWMpOwog
ICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKIH0KIApAQCAtMTY5LDExICsxODMsMTQgQEAg
UGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24oU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY28KICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAg
aWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfQogICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKICAgICAgICAgcmV0dXJu
IDA7CiAgICAgfQotCiAgICAgaWYgKCFrZXlSYW5nZSkgewogICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xODEsMTAgKzE5
OCw3IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmRlbGV0ZUZ1bmN0
aW9uKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvCiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4g
cmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlz
KSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgbV9iYWNrZW5kLT5kZWxldGVGdW5jdGlvbihr
ZXlSYW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7Ci0gICAgaWYg
KGVjKSB7Ci0gICAgICAgIHJlcXVlc3QtPm1hcmtFYXJseURlYXRoKCk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KKyAgICBBU1NFUlQoIWVjKTsKICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNl
KCk7CiB9CiAKQEAgLTIwNCw2ICsyMTgsMTAgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJP
YmplY3RTdG9yZTo6Y2xlYXIoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgRXgKICAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2
ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lO
QUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGlmIChtX3RyYW5zYWN0
aW9uLT5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
UkVBRF9PTkxZX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0yMTEsMTAgKzIyOSw3IEBAIFBh
c3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OmNsZWFyKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQqIGNvbnRleHQsIEV4CiAKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9
IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFu
c2FjdGlvbi5nZXQoKSk7CiAgICAgbV9iYWNrZW5kLT5jbGVhcihyZXF1ZXN0LCBtX3RyYW5zYWN0
aW9uLT5iYWNrZW5kKCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFy
a0Vhcmx5RGVhdGgoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIEFTU0VSVCghZWMp
OwogICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKIH0KIApAQCAtMjM5LDExICsyNTQsMjIg
QEAgUGFzc1JlZlB0cjxJREJJbmRleD4gSURCT2JqZWN0U3RvcmU6OmNyZWF0ZUluZGV4KGNvbnN0
IFN0cmluZyYgbmFtZSwgY29uc3QgSURCS2UKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0K
KyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgICAgICByZXR1
cm4gMDsKKyAgICB9CiAgICAgaWYgKCFrZXlQYXRoLmlzVmFsaWQoKSkgewogICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQorICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OklEQl9UWVBFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IGlmIChtX21ldGFkYXRhLmluZGV4ZXMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJ
REJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlI7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KIAogICAgIGJvb2wgdW5pcXVlID0gZmFsc2U7CiAgICAgb3B0aW9ucy5nZXQoInVuaXF1
ZSIsIHVuaXF1ZSk7CkBAIC0zMDQsNiArMzMwLDE0IEBAIHZvaWQgSURCT2JqZWN0U3RvcmU6OmRl
bGV0ZUluZGV4KGNvbnN0IFN0cmluZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsK
KyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVf
RVJSOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghbV9tZXRhZGF0YS5pbmRleGVz
LmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklE
Ql9OT1RfRk9VTkRfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgbV9iYWNrZW5k
LT5kZWxldGVJbmRleChuYW1lLCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBp
ZiAoIWVjKSB7CkBAIC0zMjUsNiArMzU5LDEwIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
T2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4CiAg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsK
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3Rp
dmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9J
TkFDVElWRV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICB1bnNpZ25lZCBzaG9y
dCBkaXJlY3Rpb24gPSBJREJDdXJzb3I6OnN0cmluZ1RvRGlyZWN0aW9uKGRpcmVjdGlvblN0cmlu
ZywgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7CkBAIC0zMzIsMTAgKzM3MCw3
IEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4CiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVl
c3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1f
dHJhbnNhY3Rpb24uZ2V0KCkpOwogICAgIHJlcXVlc3QtPnNldEN1cnNvclR5cGUoSURCQ3Vyc29y
QmFja2VuZEludGVyZmFjZTo6T2JqZWN0U3RvcmVDdXJzb3IpOwogICAgIG1fYmFja2VuZC0+b3Bl
bkN1cnNvcihyYW5nZSwgZGlyZWN0aW9uLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5k
KCksIGVjKTsKLSAgICBpZiAoZWMpIHsKLSAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVhdGgo
KTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQorICAgIEFTU0VSVCghZWMpOwogICAgIHJldHVy
biByZXF1ZXN0LnJlbGVhc2UoKTsKIH0KIApAQCAtMzc1LDEyICs0MTAsMTMgQEAgUGFzc1JlZlB0
cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGEKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lO
VkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgUmVmUHRyPElE
QlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUoY29udGV4dCwgSURCQW55Ojpj
cmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAgIG1fYmFja2VuZC0+Y291bnQo
cmFuZ2UsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAgIGlmIChl
YykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOworICAgIGlmICghbV90cmFu
c2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9u
OjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAg
ICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0
LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CisgICAgbV9iYWNr
ZW5kLT5jb3VudChyYW5nZSwgcmVxdWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7
CisgICAgQVNTRVJUKCFlYyk7CiAgICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwogfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9y
ZS5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaApp
bmRleCA4MTgxZWI5MzFmYTcwY2M1OTAwNDJmMjI1NjJjZjc4ZGMyY2NmNGMxLi42N2IzNmY5OTU1
MTdhOWI4NGQyYTFjMjI1MjQ5NThmY2RhYTQ4NGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKQEAgLTk1LDYgKzk1LDcgQEAgcHVi
bGljOgogICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gY291bnQoU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dCosIFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiwgUGFzc1Jl
ZlB0cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7CiAKKyAgICBQYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OlB1dE1vZGUsIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4sIFBhc3NS
ZWZQdHI8SURCS2V5PiwgRXhjZXB0aW9uQ29kZSYpOwogICAgIHZvaWQgbWFya0RlbGV0ZWQoKSB7
IG1fZGVsZXRlZCA9IHRydWU7IH0KICAgICB2b2lkIHRyYW5zYWN0aW9uRmluaXNoZWQoKTsKIApA
QCAtMTAzLDcgKzEwNCw2IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBJREJPYmplY3RTdG9y
ZShjb25zdCBJREJPYmplY3RTdG9yZU1ldGFkYXRhJiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbnRlcmZhY2U+LCBJREJUcmFuc2FjdGlvbiopOwotICAgIHZvaWQgcmVtb3ZlVHJh
bnNhY3Rpb25Gcm9tUGVuZGluZ0xpc3QoKTsKIAogICAgIElEQk9iamVjdFN0b3JlTWV0YWRhdGEg
bV9tZXRhZGF0YTsKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBt
X2JhY2tlbmQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9J
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCmluZGV4IGE2MmRkYThiNDQ5ZDEz
N2ZmMDY2NjdmMjM1MGYxODk2MTQ5MTliMGQuLmNhOTg2YTBmYmVkMGY4ZTQwMDRmMGIyMmYzMGVh
YWQ4YzIxYzA5MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlQmFja2VuZEltcGwuY3BwCkBAIC05NSwxMyArOTUs
MTUgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpnZXQoUGFzc1JlZlB0cjxJREJL
ZXlSYW5nZT4gcHJwS2V5UmFuZ2UsIFBhc3NSZWYKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOwogICAgIFJlZlB0cjxJREJLZXlSYW5nZT4g
a2V5UmFuZ2UgPSBwcnBLZXlSYW5nZTsKICAgICBSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFj
a3MgPSBwcnBDYWxsYmFja3M7Ci0gICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNy
ZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWws
IG9iamVjdFN0b3JlLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSkpCisgICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5k
SW1wbDo6Z2V0SW50ZXJuYWwsIG9iamVjdFN0b3JlLCBrZXlSYW5nZSwgY2FsbGJhY2tzKSkpIHsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICB9CiB9CiAKIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQogewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Z2V0QnlSYW5nZUludGVybmFsIik7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbnRlcm5hbCIpOwogICAgIFJlZlB0cjxJREJLZXk+IGtleTsKICAgICBpZiAo
a2V5UmFuZ2UtPmlzT25seUtleSgpKQogICAgICAgICBrZXkgPSBrZXlSYW5nZS0+bG93ZXIoKTsK
QEAgLTE1Nyw1OCArMTU5LDEzIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cHV0
KFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiBwcnBWYWx1ZSwKICAgICBSZWZQdHI8
SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAgICAgUmVmUHRyPElEQlRy
YW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb24gPSB0cmFuc2FjdGlvblB0cjsK
IAotICAgIGlmIChwdXRNb2RlICE9IEN1cnNvclVwZGF0ZSkgewotICAgICAgICBjb25zdCBib29s
IGF1dG9JbmNyZW1lbnQgPSBvYmplY3RTdG9yZS0+YXV0b0luY3JlbWVudCgpOwotICAgICAgICBj
b25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5UGF0aC5pc051bGwoKTsK
LQotICAgICAgICBpZiAoaGFzS2V5UGF0aCAmJiBrZXkpIHsKLSAgICAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICB9Ci0gICAgICAgIGlmICghaGFzS2V5UGF0aCAmJiAhYXV0b0luY3JlbWVudCAmJiAha2V5KSB7
Ci0gICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAoaGFzS2V5UGF0aCkgewotICAg
ICAgICAgICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgo
dmFsdWUuZ2V0KCksIG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOwotICAgICAgICAgICAgaWYgKGtl
eVBhdGhLZXkgJiYgIWtleVBhdGhLZXktPmlzVmFsaWQoKSkgewotICAgICAgICAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICghYXV0b0luY3JlbWVudCAmJiAha2V5
UGF0aEtleSkgewotICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRB
VEFfRVJSOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGlmIChhdXRvSW5jcmVtZW50ICYmICFrZXlQYXRoS2V5KSB7Ci0gICAgICAgICAgICAgICAg
UmVmUHRyPElEQktleT4gZHVtbXlLZXkgPSBJREJLZXk6OmNyZWF0ZU51bWJlcigtMSk7Ci0gICAg
ICAgICAgICAgICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWVBZnRlckluamVj
dGlvbiA9IGluamVjdEtleUludG9LZXlQYXRoKGR1bW15S2V5LCB2YWx1ZSwgb2JqZWN0U3RvcmUt
Pm1fa2V5UGF0aCk7Ci0gICAgICAgICAgICAgICAgaWYgKCF2YWx1ZUFmdGVySW5qZWN0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJS
OwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChrZXkgJiYgIWtleS0+aXNWYWxpZCgpKSB7
Ci0gICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEFTU0VSVChr
ZXkpOwotICAgICAgICBjb25zdCBib29sIGhhc0tleVBhdGggPSAhb2JqZWN0U3RvcmUtPm1fa2V5
UGF0aC5pc051bGwoKTsKLSAgICAgICAgaWYgKGhhc0tleVBhdGgpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxJREJLZXk+IGtleVBhdGhLZXkgPSBmZXRjaEtleUZyb21LZXlQYXRoKHZhbHVlLmdldCgp
LCBvYmplY3RTdG9yZS0+bV9rZXlQYXRoKTsKLSAgICAgICAgICAgIGlmICgha2V5UGF0aEtleSB8
fCAha2V5UGF0aEtleS0+aXNFcXVhbChrZXkuZ2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCiAgICAgaWYgKCF0cmFuc2FjdGlv
bi0+c2NoZWR1bGVUYXNrKAogICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmpl
Y3RTdG9yZUJhY2tlbmRJbXBsOjpwdXRJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIHZhbHVlLCBrZXks
IHB1dE1vZGUsIGNhbGxiYWNrcywgdHJhbnNhY3Rpb24pLAogICAgICAgICAgICAgLy8gRklYTUU6
IE9uZSBvZiB0aGVzZSBwZXIgcHV0KCkgaXMgb3ZlcmtpbGwsIHNpbmNlIGl0J3Mgc2ltcGx5IGEg
Y2FjaGUgaW52YWxpZGF0aW9uLgotICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJP
YmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUsIG9iamVj
dFN0b3JlKSkpCisgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3Jl
QmFja2VuZEltcGw6OnJldmVydEF1dG9JbmNyZW1lbnRLZXlDYWNoZSwgb2JqZWN0U3RvcmUpKSkg
eworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgIH0KIH0KIAogdm9pZCBJ
REJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpyZXZlcnRBdXRvSW5jcmVtZW50S2V5Q2FjaGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1w
bD4gb2JqZWN0U3RvcmUpCkBAIC0zNzksOCArMzM2LDEwIEBAIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6ZGVsZXRlRnVuY3Rpb24oUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcHJwS2V5
UmFuCiAgICAgUmVmUHRyPElEQktleVJhbmdlPiBrZXlSYW5nZSA9IHBycEtleVJhbmdlOwogICAg
IFJlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKIAotICAgIGlm
ICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsLCBvYmplY3RTdG9yZSwga2V5UmFuZ2Us
IGNhbGxiYWNrcykpKQorICAgIGlmICghdHJhbnNhY3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVD
YWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmRlbGV0ZUludGVybmFsLCBv
YmplY3RTdG9yZSwga2V5UmFuZ2UsIGNhbGxiYWNrcykpKSB7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElP
Tl9JTkFDVElWRV9FUlI7CisgICAgfQogfQogCiB2b2lkIElEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmRlbGV0ZUludGVybmFsKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRyPElE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlLCBQYXNzUmVmUHRyPElEQktleVJh
bmdlPiBrZXlSYW5nZSwgUGFzc1JlZlB0cjxJREJDYWxsYmFja3M+IGNhbGxiYWNrcykKQEAgLTQy
MSwxMiArMzgwLDE2IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXIoUGFz
c1JlZlB0cjxJREJDYWxsYmFja3M+IHBycENhbGxiYWNrcywgSURCCiAgICAgUmVmUHRyPElEQk9i
amVjdFN0b3JlQmFja2VuZEltcGw+IG9iamVjdFN0b3JlID0gdGhpczsKICAgICBSZWZQdHI8SURC
Q2FsbGJhY2tzPiBjYWxsYmFja3MgPSBwcnBDYWxsYmFja3M7CiAKLSAgICBpZiAoIXRyYW5zYWN0
aW9uLT5zY2hlZHVsZVRhc2soY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpjbGVhckludGVybmFsLCBvYmplY3RTdG9yZSwgY2FsbGJhY2tzKSkpCisgICAgaWYg
KCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0
U3RvcmVCYWNrZW5kSW1wbDo6Y2xlYXJJbnRlcm5hbCwgb2JqZWN0U3RvcmUsIGNhbGxiYWNrcykp
KSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CisgICAgfQogfQogCiB2b2lk
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNsZWFySW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3Rv
cmUsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tzPiBjYWxsYmFja3MpCiB7CisgICAgSURCX1RSQUNF
KCJJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjbGVhckludGVybmFsIik7CisKICAgICBvYmpl
Y3RTdG9yZS0+YmFja2luZ1N0b3JlKCktPmNsZWFyT2JqZWN0U3RvcmUob2JqZWN0U3RvcmUtPmRh
dGFiYXNlSWQoKSwgb2JqZWN0U3RvcmUtPmlkKCkpOwogICAgIGNhbGxiYWNrcy0+b25TdWNjZXNz
KFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZTo6dW5kZWZpbmVkVmFsdWUoKSk7CiB9CkBAIC00NjgsMTkg
KzQzMSw3IEBAIGJvb2wgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6cG9wdWxhdGVJbmRleChJ
REJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9yZSwgaW50CiAKIFBhc3NSZWZQdHI8SURCSW5kZXhC
YWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVl
LCBib29sIG11bHRpRW50cnksIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNh
Y3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewotICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7Ci0g
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9UWVBFX0VSUjsKLSAgICAgICAg
cmV0dXJuIDA7Ci0gICAgfQotICAgIGlmIChtX2luZGV4ZXMuY29udGFpbnMobmFtZSkpIHsKLSAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9FUlI7Ci0gICAgICAg
IHJldHVybiAwOwotICAgIH0KLSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFu
c2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
KyAgICBBU1NFUlQodHJhbnNhY3Rpb24tPm1vZGUoKSA9PSBJREJUcmFuc2FjdGlvbjo6VkVSU0lP
Tl9DSEFOR0UpOwogICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IElEQklu
ZGV4QmFja2VuZEltcGw6OmNyZWF0ZShtX2RhdGFiYXNlLCB0aGlzLCBuYW1lLCBrZXlQYXRoLCB1
bmlxdWUsIG11bHRpRW50cnkpOwogICAgIEFTU0VSVChpbmRleC0+bmFtZSgpID09IG5hbWUpOwog
CkBAIC00OTEsNiArNDQyLDcgQEAgUGFzc1JlZlB0cjxJREJJbmRleEJhY2tlbmRJbnRlcmZhY2U+
IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZUluZGV4KGNvbnMKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rpb25QdHIp
LAogICAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2Vu
ZEltcGw6OnJlbW92ZUluZGV4RnJvbU1hcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG9iamVjdFN0b3JlLCBpbmRleCkpKSB7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KQEAgLTUyOSwyNCArNDgxLDE4IEBAIFBh
c3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJ
bXBsOjppbmRleChjb25zdCBTdHJpCiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRl
cmZhY2UqIHRyYW5zYWN0aW9uLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAodHJhbnNh
Y3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsKLSAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwotICAg
ICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGlu
ZGV4ID0gbV9pbmRleGVzLmdldChuYW1lKTsKLSAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9OT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1
cm47Ci0gICAgfQorICAgIEFTU0VSVCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0
aW9uOjpWRVJTSU9OX0NIQU5HRSk7CisgICAgQVNTRVJUKG1faW5kZXhlcy5jb250YWlucyhuYW1l
KSk7CiAKICAgICBSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUg
PSB0aGlzOworICAgIFJlZlB0cjxJREJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IG1faW5kZXhl
cy5nZXQobmFtZSk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4g
dHJhbnNhY3Rpb25QdHIgPSB0cmFuc2FjdGlvbjsKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hl
ZHVsZVRhc2soCiAgICAgICAgICAgICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXhJbnRlcm5hbCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG9iamVjdFN0b3JlLCBpbmRleCwgdHJhbnNhY3Rpb25QdHIpLAogICAgICAg
ICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmFk
ZEluZGV4VG9NYXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RTdG9y
ZSwgaW5kZXgpKSkgeworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgICAg
ICByZXR1cm47CiAgICAgfQpAQCAtNTY5LDYgKzUxNSw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVC
YWNrZW5kSW1wbDo6b3BlbkN1cnNvcihQYXNzUmVmUHRyPElEQktleVJhbmdlPiBwcnBSYW5nZSwg
dW5zCiAgICAgaWYgKCF0cmFuc2FjdGlvbi0+c2NoZWR1bGVUYXNrKAogICAgICAgICAgICAgY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50
ZXJuYWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0U3RvcmUsIHJhbmdl
LCBkaXJlY3Rpb24sIGNhbGxiYWNrcywgdHJhbnNhY3Rpb25QdHIpKSkgeworICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJB
TlNBQ1RJT05fSU5BQ1RJVkVfRVJSOwogICAgIH0KIH0KQEAgLTU5MSw4ICs1MzgsMTAgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpvcGVuQ3Vyc29ySW50ZXJuYWwoU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCosIFBhc3MKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291
bnQoUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2FsbGJhY2tz
PiBjYWxsYmFja3MsIElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24s
IEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNr
ZW5kSW1wbDo6Y291bnQiKTsKLSAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soY3Jl
YXRlQ2FsbGJhY2tUYXNrKCZJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjb3VudEludGVybmFs
LCB0aGlzLCByYW5nZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbikpKQorICAgIGlmICghdHJhbnNh
Y3Rpb24tPnNjaGVkdWxlVGFzayhjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVjdFN0b3JlQmFj
a2VuZEltcGw6OmNvdW50SW50ZXJuYWwsIHRoaXMsIHJhbmdlLCBjYWxsYmFja3MsIHRyYW5zYWN0
aW9uKSkpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICB9CiB9CiAK
IHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Y291bnRJbnRlcm5hbChTY3JpcHRFeGVj
dXRpb25Db250ZXh0KiwgUGFzc1JlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsPiBvYmpl
Y3RTdG9yZSwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4gcmFuZ2UsIFBhc3NSZWZQdHI8SURCQ2Fs
bGJhY2tzPiBjYWxsYmFja3MsIFBhc3NSZWZQdHI8SURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJm
YWNlPikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJl
cXVlc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5j
cHAKaW5kZXggNzY2MjE1YmI5YzAwNWRhZTlhM2IwMTdmNWJlOTdiNzJiOTMyZGExNC4uMmU0MTEy
ZDNkY2MwMTI1YTI2MzhmMGEwZTkwMWY3ZDg2MzljOTdhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5jcHAKQEAgLTEzNCwxMiArMTM0LDYgQEAg
Y29uc3QgU3RyaW5nJiBJREJSZXF1ZXN0OjpyZWFkeVN0YXRlKCkgY29uc3QKICAgICByZXR1cm4g
ZG9uZTsKIH0KIAotdm9pZCBJREJSZXF1ZXN0OjptYXJrRWFybHlEZWF0aCgpCi17Ci0gICAgQVNT
RVJUKG1fcmVhZHlTdGF0ZSA9PSBQRU5ESU5HKTsKLSAgICBtX3JlYWR5U3RhdGUgPSBFYXJseURl
YXRoOwotfQotCiBib29sIElEQlJlcXVlc3Q6OnJlc2V0UmVhZHlTdGF0ZShJREJUcmFuc2FjdGlv
biogdHJhbnNhY3Rpb24pCiB7CiAgICAgQVNTRVJUKCFtX3JlcXVlc3RGaW5pc2hlZCk7CkBAIC0z
MzAsNyArMzI0LDcgQEAgdm9pZCBJREJSZXF1ZXN0OjpzdG9wKCkKIAogICAgIG1fY29udGV4dFN0
b3BwZWQgPSB0cnVlOwogICAgIGlmIChtX3JlYWR5U3RhdGUgPT0gUEVORElORykKLSAgICAgICAg
bWFya0Vhcmx5RGVhdGgoKTsKKyAgICAgICAgbV9yZWFkeVN0YXRlID0gRWFybHlEZWF0aDsKIH0K
IAogdm9pZCBJREJSZXF1ZXN0OjpvbkJsb2NrZWQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9pbmRleGVkZGIvSURCUmVxdWVzdC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCUmVxdWVzdC5oCmluZGV4IGUxMDRkOGYxZTgxNWNiNWM0NTdmNjNlMTNk
ODQ5NDNiYjJjZjliZmQuLjRmNGRmYWQ1ZTI2ZDFjYjNiMDU1MTM1YWVlODMwZTMxMjYxMjUzNTkg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQlJlcXVlc3Qu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJSZXF1ZXN0LmgKQEAg
LTcxLDcgKzcxLDYgQEAgcHVibGljOgogICAgIERFRklORV9BVFRSSUJVVEVfRVZFTlRfTElTVEVO
RVIoc3VjY2Vzcyk7CiAgICAgREVGSU5FX0FUVFJJQlVURV9FVkVOVF9MSVNURU5FUihlcnJvcik7
CiAKLSAgICB2b2lkIG1hcmtFYXJseURlYXRoKCk7CiAgICAgYm9vbCByZXNldFJlYWR5U3RhdGUo
SURCVHJhbnNhY3Rpb24qKTsKICAgICB2b2lkIHNldEN1cnNvclR5cGUoSURCQ3Vyc29yQmFja2Vu
ZEludGVyZmFjZTo6Q3Vyc29yVHlwZSk7CiAgICAgdm9pZCBzZXRDdXJzb3IoUGFzc1JlZlB0cjxJ
REJDdXJzb3I+KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QlRyYW5zYWN0aW9uLmNwcAppbmRleCA3MDg3YzY1N2UwNjY4NmMxN2QxNWIzNmQ4OGM2OTI0OWQy
M2U5YjU5Li42YWQzMDA3MjM4ZWYzNmY2NThmNmMyMmI1ZWI5YzZhNzM2Nzc0NWE1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3Bw
CkBAIC04NCw2ICs4NCw3IEBAIElEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQlRyCiAgICAgLCBtX2JhY2tl
bmQoYmFja2VuZCkKICAgICAsIG1fZGF0YWJhc2UoZGIpCiAgICAgLCBtX21vZGUobW9kZSkKKyAg
ICAsIG1fYWN0aXZlKHRydWUpCiAgICAgLCBtX3RyYW5zYWN0aW9uRmluaXNoZWQoZmFsc2UpCiAg
ICAgLCBtX2NvbnRleHRTdG9wcGVkKGZhbHNlKQogewpAQCAtMTkzLDYgKzE5NCw3IEBAIHZvaWQg
SURCVHJhbnNhY3Rpb246OmFib3J0KCkKIHsKICAgICBpZiAobV90cmFuc2FjdGlvbkZpbmlzaGVk
KQogICAgICAgICByZXR1cm47CisgICAgbV9hY3RpdmUgPSBmYWxzZTsKICAgICBSZWZQdHI8SURC
VHJhbnNhY3Rpb24+IHNlbGZSZWYgPSB0aGlzOwogICAgIGlmIChtX2JhY2tlbmQpCiAgICAgICAg
IG1fYmFja2VuZC0+YWJvcnQoKTsKQEAgLTI0Miw2ICsyNDQsNyBAQCB2b2lkIElEQlRyYW5zYWN0
aW9uOjp1bnJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0KiByZXF1ZXN0KQogdm9pZCBJREJUcmFu
c2FjdGlvbjo6b25BYm9ydCgpCiB7CiAgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uRmluaXNoZWQp
OworICAgIG1fYWN0aXZlID0gZmFsc2U7CiAgICAgd2hpbGUgKCFtX2NoaWxkUmVxdWVzdHMuaXNF
bXB0eSgpKSB7CiAgICAgICAgIElEQlJlcXVlc3QqIHJlcXVlc3QgPSAqbV9jaGlsZFJlcXVlc3Rz
LmJlZ2luKCk7CiAgICAgICAgIG1fY2hpbGRSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdCk7CkBAIC0y
NjUsNiArMjY4LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6b25BYm9ydCgpCiB2b2lkIElEQlRy
YW5zYWN0aW9uOjpvbkNvbXBsZXRlKCkKIHsKICAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25GaW5p
c2hlZCk7CisgICAgbV9hY3RpdmUgPSBmYWxzZTsKICAgICBtX29iamVjdFN0b3JlQ2xlYW51cE1h
cC5jbGVhcigpOwogICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKICAgICBtX2RhdGFiYXNlLT50cmFu
c2FjdGlvbkZpbmlzaGVkKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5k
ZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKaW5kZXggMGIyZGVjNmVjMDhmMWQxZTJiOTYwZWRiMDEx
NmZjZjg5ZDFjZjk2ZC4uZGI3YjE3Y2YxOTIyYzAyZTdhMTg0ZjM1ZTU4ODVkYTgwMmQ1N2MxYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlv
bi5oCkBAIC02OCwxMiArNjgsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBBdG9taWNT
dHJpbmcmIG1vZGVUb1N0cmluZyhNb2RlLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBJREJUcmFu
c2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIGJhY2tlbmQoKSBjb25zdDsKKyAgICAvLyBGSVhNRTog
SW1wbGVtZW50IGludGVybmFsIHxhY3RpdmV8IGZsYWcgcGVyIHNwZWMuIGh0dHA6Ly93ZWJraXQu
b3JnL2IvODkzNzkKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmU7
IH0KICAgICBib29sIGlzRmluaXNoZWQoKSBjb25zdDsKKyAgICBib29sIGlzUmVhZE9ubHkoKSBj
b25zdCB7IHJldHVybiBtX21vZGUgPT0gUkVBRF9PTkxZOyB9CiAgICAgYm9vbCBpc1ZlcnNpb25D
aGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gVkVSU0lPTl9DSEFOR0U7IH0KIAogICAg
IC8vIEltcGxlbWVudCB0aGUgSURCVHJhbnNhY3Rpb24gSURMCiAgICAgY29uc3QgU3RyaW5nJiBt
b2RlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9tb2Rl
ID09IFJFQURfT05MWTsgfQogICAgIElEQkRhdGFiYXNlKiBkYigpIGNvbnN0OwogICAgIFBhc3NS
ZWZQdHI8RE9NRXJyb3I+IGVycm9yKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICB2b2lkIHNl
dEVycm9yKFBhc3NSZWZQdHI8RE9NRXJyb3I+KTsKQEAgLTEzNSw2ICsxMzcsNyBAQCBwcml2YXRl
OgogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsK
ICAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7CiAgICAgY29uc3QgTW9kZSBtX21v
ZGU7CisgICAgYm9vbCBtX2FjdGl2ZTsKICAgICBib29sIG1fdHJhbnNhY3Rpb25GaW5pc2hlZDsg
Ly8gSXMgaXQgcG9zc2libGUgdGhhdCB3ZSdsbCBmaXJlIGFueSBtb3JlIGV2ZW50cyBvciBhbGxv
dyBhbnkgbmV3IHJlcXVlc3RzPyBJZiBub3QsIHdlJ3JlIGZpbmlzaGVkLgogICAgIGJvb2wgbV9j
b250ZXh0U3RvcHBlZDsKICAgICBSZWZQdHI8RE9NRXJyb3I+IG1fZXJyb3I7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149394</attachid>
            <date>2012-06-25 16:52:20 -0700</date>
            <delta_ts>2012-06-26 10:04:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89377-20120625165219.patch</filename>
            <type>text/plain</type>
            <size>34762</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDkzZDJiZGZhOTYyYWJk
ODQyZDZkMjY0MjJjZWM3NmQ1M2M2NGY4ZS4uNGJiOTNjNjIzYzFmZWI0YWJjMWU1NzliN2Q3Y2Zm
YWE5ZDZjNmVhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDEyLTA2LTIyICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBNb3Zl
IG1ldGhvZCBwcmVjb25kaXRpb24gY2hlY2tzIHRvIGZyb250IGVuZCBvYmplY3RzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTM3NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyB0aGF0IG1ldGFkYXRh
IGV4aXN0cyBvbiB0aGUgZnJvbnQgZW5kLCBtb3N0IG9mIHRoZSBwcmUtY29uZGl0aW9uIHZhbGlk
YXRpb24gY2hlY2tzCisgICAgICAgIGRvbmUgb24gSURCIG1ldGhvZCBjYWxscyBmcm9tIHNjcmlw
dCBjYW4gYmUgbW92ZWQgdG8gdGhlIGZyb250IGVuZCB3aGljaCBzaW1wbGlmaWVzIHRoZQorICAg
ICAgICBjb2RlIHNpZ25pZmljYW50bHkgaW4gdGhlIGNhc2Ugb2YgY29tcGxleCBtZXRob2RzIGxp
a2UgSURCT2JqZWN0U3RvcmU6OnB1dCgpLgorCisgICAgICAgIEFkZHMgYW4gaW50ZXJuYWwgImFj
dGl2ZSIgZmxhZyBmb3IgdHJhbnNhY3Rpb25zLCBhbHRob3VnaCB0aGUgYmVoYXZpb3IgaXMgbm90
IGFjY3VyYXRlCisgICAgICAgIHRvIHRoZSBzcGVjIChpdCBzaG91bGQgb25seSBiZSB0cnVlIGR1
cmluZyBldmVudCBjYWxsYmFja3MgLSBodHRwOi8vd2Via2l0Lm9yZy9iLzg5Mzc5KS4KKyAgICAg
ICAgVGhlIGJhY2stZW5kIG1ldGhvZHMgY2FuIHRoZW4gYmUgc2ltcGxpZmVkIHRvIGp1c3QgYWRk
aW5nIGFzeW5jIHRhc2tzIHRvIHRoZSB0cmFuc2FjdGlvbiwKKyAgICAgICAgYW5kIHRoZSBmcm9u
dCBlbmQgbWV0aG9kcyBjYW4gdGFrZSBjYXJlIG9mIGFsbCBleGNlcHRpb24gY2FzZXMgZXhjZXB0
IGZvciBhc3luY2hyb25vdXMKKyAgICAgICAgdHJhbnNhY3Rpb24gYWJvcnQgd2hpY2ggc3RpbGwg
cmVxdWlyZXMgcGx1bWJpbmcgYmFjayB0byB0aGUgZnJvbnQgZW5kLgorCisgICAgICAgIE5vIGZ1
bmN0aW9uYWwgY2hhbmdlcyAtIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVwZGF0
ZSk6IE1pZ3JhdGUgZnJvbSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQuCisgICAgICAg
IChXZWJDb3JlOjpJREJDdXJzb3I6OmFkdmFuY2UpOiBBZGQgbW9yZSBleHBsaWNpdCB0cmFuc2Fj
dGlvbi1pcy1hY3RpdmUgY2hlY2suCisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRp
bnVlRnVuY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6ZGVsZXRl
RnVuY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6ZWZmZWN0aXZl
T2JqZWN0U3RvcmUpOiBDb252ZW5pZW5jZSBmdW5jdGlvbiAoc291cmNlIG1heSBiZSBzdG9yZSBv
ciBpbmRleCkuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6aXNLZXlDdXJzb3Ip
OiBEaXN0aW5ndWlzaCBmcm9tIElEQkN1cnNvcldpdGhWYWx1ZS4KKyAgICAgICAgKElEQkN1cnNv
cik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OnVwZGF0ZSk6IFJlbW92
ZSBtaWdyYXRlZCBjaGVjay4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JX
aXRoVmFsdWUuaDoKKyAgICAgICAgKElEQkN1cnNvcldpdGhWYWx1ZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOiBNaWdyYXRlIGNoZWNrcy4KKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOiBSZXBsYWNlIGNoZWNrcyB3aXRo
IGFzc2VydGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpj
cmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
SW5kZXguY3BwOiBBZGQgdHJhbnNhY3Rpb24taXMtYWN0aXZlIGNoZWNrcy4KKyAgICAgICAgKFdl
YkNvcmU6OklEQkluZGV4OjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4
Ojpjb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6b3BlbktleUN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQklu
ZGV4OjpnZXRLZXkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcDogTWlncmF0ZSBjZWhja3MuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjphZGQpOiBEZWxlZ2F0ZXMg
dG8gcHV0KFB1dE1vZGUpCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0KTog
RGVsZWdhdGVzIHRvIHB1dChQdXRNb2RlKQorICAgICAgICAoV2ViQ29yZSk6IEFkZHMgcHV0KFB1
dE1vZGUpIHdoaWNoIGhhcyB0aGUgdW5pZmllZCBjaGVja3MgbWlncmF0ZWQgZnJvbQorICAgICAg
ICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQuCisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNvdW50KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5oOiBBZGRzIHB1dChQdXRNb2RlKS4KKyAgICAgICAgKElEQk9i
amVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmdldEludGVybmFsKTogRml4IHRyYWNlIHN5bWJvbC4KKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCk6IFJlbW92ZSBtaWdyYXRlZCBjaGVja3MuCisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleCk6
IFJlbW92ZSBtaWdyYXRlZCBjaGVja3MuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleCk6IFJlbW92ZSBtaWdyYXRlZCBjaGVja3MuCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOiBBZGQgYWN0aXZlIGZs
YWcgdHJhY2tpbmcuCisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNh
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmFib3J0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvbkFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpvbkNvbXBsZXRlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Omlz
QWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjppc1JlYWRPbmx5KTog
R3JvdXAgSURML25vbi1JREwgbWV0aG9kcy4KKyAgICAgICAgKElEQlRyYW5zYWN0aW9uKToKKwog
MjAxMi0wNi0yNSAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgRml4IGZvciBhIG1lbW9yeSBsZWFrIHdpdGggTUhUTUxBcmNoaXZlcy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4IDI3NTk1MTRlZmY3
NDIyNGM2MTc5OWNmNWY2MDc3OWZkY2U0ZDI0MjMuLmFmMWM1MDQ0NDczNWViOTQ2MjNmY2I4ODZh
NjQ2ZjA0YmNhNjU4MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmNwcApAQCAtMjksOSArMjksMTEgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIAogI2luY2x1ZGUgIklEQkFueS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmUuaCIKICNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSURCVHJhY2luZy5o
IgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCkBAIC0xMjUsMjQgKzEyNywzNyBAQCBJREJB
bnkqIElEQkN1cnNvcjo6c291cmNlKCkgY29uc3QKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
Q3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6dXBkYXRlIik7CisgICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKIAotICAgIGlmICghbV9nb3RWYWx1ZSkg
eworICAgIGlmICghbV9nb3RWYWx1ZSB8fCBpc0tleUN1cnNvcigpKSB7CiAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQotCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Cisg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc1Jl
YWRPbmx5KCkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZ
X0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKICAgICBpZiAodmFsdWUtPmJsb2JVUkxzKCku
c2l6ZSgpID4gMCkgewogICAgICAgICAvLyBGSVhNRTogQWRkIEJsb2IvRmlsZS9GaWxlTGlzdCBz
dXBwb3J0CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9EQVRBX0NMT05F
X0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBvYmplY3RTdG9yZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7CisgICAgY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCA9IG9iamVjdFN0b3JlLT5tZXRhZGF0YSgpLmtleVBhdGg7CisgICAg
Y29uc3QgYm9vbCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOworICAgIGlmICh1
c2VzSW5MaW5lS2V5cykgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3Jl
YXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGgpOwor
ICAgICAgICBpZiAoIWtleVBhdGhLZXkgfHwgIWtleVBhdGhLZXktPmlzRXF1YWwobV9jdXJyZW50
UHJpbWFyeUtleS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkRBVEFfRVJSOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisK
ICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250
ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgbV9i
YWNrZW5kLT51cGRhdGUodmFsdWUsIHJlcXVlc3QsIGVjKTsKICAgICBpZiAoZWMpIHsKQEAgLTE2
MCw3ICsxNzUsNyBAQCB2b2lkIElEQkN1cnNvcjo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50
LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgh
bV9yZXF1ZXN0KSB7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CiAgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE4OCw3ICsyMDMsNyBAQCB2b2lkIElEQkN1cnNv
cjo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9yZXF1ZXN0KSB7Cisg
ICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTIxMyw2ICsyMjgsMTAgQEAgdm9pZCBJREJDdXJzb3I6OmNvbnRpbnVlRnVu
Y3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IElEQkN1cnNvcjo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJ
REJDdXJzb3I6OmRlbGV0ZSIpOworICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBpZiAobV90cmFuc2FjdGlvbi0+
aXNSZWFkT25seSgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJFQURf
T05MWV9FUlI7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjUyLDYgKzI3MSwxNCBAQCB2b2lkIElE
QkN1cnNvcjo6c2V0VmFsdWVSZWFkeSgpCiAgICAgbV92YWx1ZUlzRGlydHkgPSB0cnVlOwogfQog
CitQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJDdXJzb3I6OmVmZmVjdGl2ZU9iamVjdFN0
b3JlKCkKK3sKKyAgICBpZiAobV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQk9iamVjdFN0
b3JlVHlwZSkKKyAgICAgICAgcmV0dXJuIG1fc291cmNlLT5pZGJPYmplY3RTdG9yZSgpOworICAg
IFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBtX3NvdXJjZS0+aWRiSW5kZXgoKTsKKyAgICByZXR1
cm4gaW5kZXgtPm9iamVjdFN0b3JlKCk7Cit9CisKIHVuc2lnbmVkIHNob3J0IElEQkN1cnNvcjo6
c3RyaW5nVG9EaXJlY3Rpb24oY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIGlmIChkaXJlY3Rpb25TdHJpbmcgPT0gSURCQ3Vyc29yOjpkaXJl
Y3Rpb25OZXh0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ci5oCmluZGV4IDNmOWQ4NGY5ODgxMTgxMmM2YmZjYjUzYzIzODgzMWVlM2ZiYjVlNmUuLjRmNDU2
NGVlYjQyMTI3YWE4N2IwNjkzNmI1NGUwNDNmNGU3ZjU1ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCkBAIC05MSw4ICs5MSwxMSBAQCBwdWJsaWM6
CiAKIHByb3RlY3RlZDoKICAgICBJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiop
OworICAgIHZpcnR1YWwgYm9vbCBpc0tleUN1cnNvcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
IAogcHJpdmF0ZToKKyAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBlZmZlY3RpdmVPYmpl
Y3RTdG9yZSgpOworCiAgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IG1fYmFj
a2VuZDsKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gbV9yZXF1ZXN0OwogICAgIFJlZlB0cjxJREJB
bnk+IG1fc291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCmluZGV4IGI2MjQ2ZTkxOWUwYjE4NzI3YzAz
NTE0ZDdiODFhOTJiODk5OGYyOTguLjBhMTRhNmYxYTFiNTkzMDBmOGJlOTg5ZDMyY2FlMWUwZmI5
MzQzM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAgLTkzLDEwICs5Myw5IEBAIHZvaWQgSURCQ3Vy
c29yQmFja2VuZEltcGw6OnVwZGF0ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
dmFsdWUsIFBhc3NSCiB7CiAgICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBk
YXRlIik7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlv
bjo6UkVBRF9PTkxZKTsKLSAgICBpZiAoIW1fY3Vyc29yIHx8IG1fY3Vyc29yVHlwZSA9PSBJbmRl
eEtleUN1cnNvcikgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5W
QUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisKKyAgICBBU1NFUlQobV9j
dXJzb3IpOworICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSW5kZXhLZXlDdXJzb3IpOwogCiAg
ICAgbV9vYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBtX2N1cnNvci0+cHJpbWFyeUtleSgpLCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclVwZGF0ZSwgY2FsbGJhY2tzLCBtX3Ry
YW5zYWN0aW9uLmdldCgpLCBlYyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oCmluZGV4IGExYmExNGY5NjFjNWEwYjg4
Y2VkZWNjMzBhNTA5YTE1NGE2MTc5ZTAuLjliMzk2YmEzNWFhMDZiMzkxNGUwNzJhNjgxZDcwNGUw
NWNhZWY4Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvcldpdGhWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvcldpdGhWYWx1ZS5oCkBAIC00MSw2ICs0MSw5IEBAIHB1YmxpYzoKICAgICAvLyBU
aGUgdmFsdWUgYXR0cmlidXRlIGRlZmluZWQgaW4gdGhlIElETCBpcyBzaW1wbHkgaW1wbGVtZW50
ZWQgaW4gSURCQ3Vyc29yIChidXQgbm90IGV4cG9zZWQgdmlhCiAgICAgLy8gaXRzIElETCkuIFRo
aXMgaXMgdG8gbWFrZSB0aGUgaW1wbGVtZW50YXRpb24gbW9yZSBzaW1wbGUgd2hpbGUgbWF0Y2hp
bmcgd2hhdCB0aGUgc3BlYyBzYXlzLgogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIGlz
S2V5Q3Vyc29yKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKwogcHJpdmF0ZToK
ICAgICBJREJDdXJzb3JXaXRoVmFsdWUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcApp
bmRleCAwYTQ5NDAwYmI4NjU1ZWFlOTA0ZmNlNjlkOWVkN2I0MDg2YmI3ZmNhLi5hYjEyM2MzZGNj
OTQ4NjZkZWVhY2VhMDE3ODljYTVmMjI4NDczOTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0xMTcsNiArMTE3LDEwIEBAIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlm
ICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CiAKICAgICBJREJLZXlQYXRoIGtleVBhdGg7CiAgICAgaWYgKCFv
cHRpb25zLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKQEAgLTEyOCw2ICsxMzIsMTEgQEAgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY28KICAgICAgICAgICAgIGtleVBhdGggPSBJREJLZXlQYXRoKGtleVBh
dGhTdHJpbmcpOwogICAgIH0KIAorICAgIGlmIChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250
YWlucyhuYW1lKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJB
SU5UX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgaWYgKCFrZXlQYXRoLmlz
TnVsbCgpICYmICFrZXlQYXRoLmlzVmFsaWQoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJREJfU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjIsNiAr
MTcxLDE0IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAg
ICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNv
bnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9O
T1RfRk9VTkRfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgbV9iYWNrZW5kLT5k
ZWxldGVPYmplY3RTdG9yZShuYW1lLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2Vu
ZCgpLCBlYyk7CiAgICAgaWYgKCFlYykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA1Y2Nj
YWEyOWE3ZmQ2YjU2OTA4YjU2NzgzOGViMmMxMzFiZDczYzgzLi41MDViYTc1N2JlNDhmYzFhZmNh
NDVjNTk2NmZmYmZhMDA0ZDQ3NWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTQ1LDEw
ICsxNDUsNyBAQCBJREJEYXRhYmFzZU1ldGFkYXRhIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1l
dGFkYXRhKCkgY29uc3QKIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
PiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uUHRyLT5tb2RlKCkgPT0gSURCVHJhbnNh
Y3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKLSAgICBpZiAobV9vYmplY3RTdG9yZXMuY29udGFpbnMo
bmFtZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9F
UlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBBU1NFUlQoIW1fb2JqZWN0U3RvcmVz
LmNvbnRhaW5zKG5hbWUpKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBu
YW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmUtPm5h
bWUoKSA9PSBuYW1lKTsKQEAgLTE4NiwxMiArMTgzLDEwIEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9y
ZShjCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
blB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uUHRyLT5t
b2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKLSAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5nZXQo
bmFtZSk7Ci0gICAgaWYgKCFvYmplY3RTdG9yZSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBBU1NFUlQobV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkpOworCiAgICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKKyAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5nZXQobmFt
ZSk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24gPSB0cmFuc2FjdGlvblB0cjsKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2so
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RT
dG9yZUludGVybmFsLCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjphZGRPYmplY3RTdG9yZVRvTWFwLCBkYXRhYmFzZSwgb2JqZWN0U3Rv
cmUpKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
SW5kZXguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3Bw
CmluZGV4IDMxZTdmNWQ0ZTc2MmZjY2RiZGE0MzE2Nzk0OTlkYWJhYWFiYWQwZjQuLmZkOTM5NDk0
NzQ5MjcyMjU1OTE5ZGMzMDIyOGYzYzA1Yzk3OGQzMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKQEAgLTY1LDYgKzY1LDEwIEBAIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9J
TlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlmICghbV90
cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
ICAgICB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24gPSBJREJDdXJzb3I6OnN0cmluZ1RvRGlyZWN0
aW9uKGRpcmVjdGlvblN0cmluZywgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0xMTUsNiArMTE5LDEwIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmNv
dW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQCiAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewor
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVx
dWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwg
bV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgbV9iYWNrZW5kLT5jb3VudChrZXlSYW5nZSwgcmVx
dWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKGVjKSB7CkBAIC0x
NDAsNiArMTQ4LDEwIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlD
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uID0g
SURCQ3Vyc29yOjpzdHJpbmdUb0RpcmVjdGlvbihkaXJlY3Rpb25TdHJpbmcsIGVjKTsKICAgICBp
ZiAoZWMpCkBAIC0yMDAsNiArMjEyLDEwIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5k
ZXg6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyCiAgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUo
KSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFD
VElWRV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBpZiAoIWtleVJhbmdlKSB7
CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIzMSw2ICsyNDcsMTAgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJ
bmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWYKICAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2
ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lO
QUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGlmICgha2V5UmFuZ2Up
IHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAgICAg
IHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCmluZGV4IDY4YmMxNzE2NWRmNzI1ZTcxNDFjODFjMTg4ZmM3NTZhNDFj
NTI5MjYuLjZjMDY0MTU5MjljZThiYjdjODU3YTExYWVmOGRkMWY4MWUzMzIxNTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRl
ICJJREJBbnkuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
SURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIklEQkluZGV4LmgiCkBAIC03OCw2ICs3OSwxMCBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
cwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewor
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVx
dWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwg
bV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgbV9iYWNrZW5kLT5nZXQoa2V5UmFuZ2UsIHJlcXVl
c3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmIChlYykgewpAQCAtOTYs
NjUgKzEwMSw4MCBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzcwogICAgIHJldHVybiBnZXQoY29u
dGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJP
YmplY3RTdG9yZTo6YWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6YWRk
Iik7CisgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9u
bHksIGNvbnRleHQsIHZhbHVlLCBrZXksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9y
ZTo6cHV0Iik7CisgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6
OkFkZE9yVXBkYXRlLCBjb250ZXh0LCB2YWx1ZSwga2V5LCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElE
QktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9i
amVjdFN0b3JlOjpwdXQiKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1
ZSA9IHBycFZhbHVlOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKICAgICBpZiAo
bV9kZWxldGVkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZB
TElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmIChtX3RyYW5z
YWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6UkVBRF9PTkxZX0VSUjsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsK
KyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVf
RVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICBpZiAoa2V5ICYmICFrZXktPmlz
VmFsaWQoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsK
KyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlJFQURfT05MWV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLQotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7
CiAgICAgaWYgKHZhbHVlLT5ibG9iVVJMcygpLnNpemUoKSA+IDApIHsKICAgICAgICAgLy8gRklY
TUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxpc3Qgc3VwcG9ydAogICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJREJfREFUQV9DTE9ORV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KIAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAg
ICBtX2JhY2tlbmQtPnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U6OkFkZE9ubHksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAg
IGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQorICAgIGNv
bnN0IElEQktleVBhdGgmIGtleVBhdGggPSBtX21ldGFkYXRhLmtleVBhdGg7CisgICAgY29uc3Qg
Ym9vbCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOworICAgIGNvbnN0IGJvb2wg
aGFzS2V5R2VuZXJhdG9yID0gYXV0b0luY3JlbWVudCgpOwogCi1QYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVj
dFN0b3JlOjpwdXQiKTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKKyAgICBpZiAodXNlc0luTGlu
ZUtleXMgJiYga2V5KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFf
RVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlz
UmVhZE9ubHkoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSRUFEX09O
TFlfRVJSOworICAgIGlmICghdXNlc0luTGluZUtleXMgJiYgIWhhc0tleUdlbmVyYXRvciAmJiAh
a2V5KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9Ci0KKyAgICBpZiAodXNlc0luTGluZUtleXMpIHsKKyAgICAg
ICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVk
VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgaWYgKGtleVBhdGhLZXkg
JiYgIWtleVBhdGhLZXktPmlzVmFsaWQoKSkgeworICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIWhhc0tleUdlbmVyYXRvciAmJiAha2V5UGF0aEtleSkgeworICAgICAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzS2V5R2VuZXJhdG9yICYmICFrZXlQYXRo
S2V5KSB7CisgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBkdW1teUtleSA9IElEQktleTo6Y3Jl
YXRlTnVtYmVyKC0xKTsKKyAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGR1
bW15S2V5LCB2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgICAgICBpZiAoIXZhbHVlQWZ0ZXJJbmpl
Y3Rpb24pIHsKKyAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRB
X0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KICAgICBpZiAoa2V5ICYmICFrZXktPmlzVmFsaWQoKSkgewogICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsK
LSAgICBpZiAodmFsdWUtPmJsb2JVUkxzKCkuc2l6ZSgpID4gMCkgewotICAgICAgICAvLyBGSVhN
RTogQWRkIEJsb2IvRmlsZS9GaWxlTGlzdCBzdXBwb3J0Ci0gICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OklEQl9EQVRBX0NMT05FX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAg
IG1fYmFja2VuZC0+cHV0KHZhbHVlLCBrZXksIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTo6QWRkT3JVcGRhdGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwor
ICAgIC8vIEZJWE1FOiBQYXNzIHRocm91Z2gga2V5UGF0aEtleSBhcyBrZXkgdG8gc2ltcGxpZnkg
YmFjayBlbmQgaW1wbGVtZW50YXRpb24uCisgICAgbV9iYWNrZW5kLT5wdXQodmFsdWUucmVsZWFz
ZSgpLCBrZXkucmVsZWFzZSgpLCBwdXRNb2RlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNr
ZW5kKCksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVh
dGgoKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjksMTEgKzE4OSwxNCBAQCBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjbwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5W
QUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpZiAoIW1fdHJh
bnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAg
ICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewogICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpSRUFEX09OTFlfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
Ci0KICAgICBpZiAoIWtleVJhbmdlKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkRBVEFfRVJSOwogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNCw2ICsyMjcsMTAgQEAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y2xlYXIoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgRXgKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SURCX0lOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYg
KCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0yMzksMTEgKzI2NiwyMiBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9y
ZTo6Y3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZQogICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KLQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBpZiAoIWtleVBhdGguaXNWYWxp
ZCgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9TWU5UQVhfRVJS
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKKyAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX1RZUEVfRVJSOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG1fbWV0YWRhdGEuaW5kZXhlcy5jb250YWlucyhuYW1l
KSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgYm9vbCB1bmlxdWUgPSBmYWxzZTsKICAg
ICBvcHRpb25zLmdldCgidW5pcXVlIiwgdW5pcXVlKTsKQEAgLTMwNCw2ICszNDIsMTQgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFM
SURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmICghbV90cmFuc2Fj
dGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpU
UkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KCFtX21ldGFkYXRhLmluZGV4ZXMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKICAgICBtX2JhY2tlbmQtPmRlbGV0ZUluZGV4KG5hbWUsIG1fdHJhbnNhY3Rpb24tPmJh
Y2tlbmQoKSwgZWMpOwogICAgIGlmICghZWMpIHsKQEAgLTMyNSw2ICszNzEsMTAgQEAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXgKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURC
X0lOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKCFt
X3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQogICAgIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJl
Y3Rpb24oZGlyZWN0aW9uU3RyaW5nLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4g
MDsKQEAgLTM3NSw2ICs0MjUsMTAgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RT
dG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGEKICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7
CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZF
X0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBy
ZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMp
LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICBtX2JhY2tlbmQtPmNvdW50KHJhbmdlLCByZXF1
ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoZWMpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCmluZGV4
IDgxODFlYjkzMWZhNzBjYzU5MDA0MmYyMjU2MmNmNzhkYzJjY2Y0YzEuLjY3YjM2Zjk5NTUxN2E5
Yjg0ZDJhMWMyMjUyNDk1OGZjZGFhNDg0Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaApAQCAtOTUsNiArOTUsNyBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0
cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBtYXJrRGVsZXRlZCgpIHsgbV9k
ZWxldGVkID0gdHJ1ZTsgfQogICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZCgpOwogCkBAIC0x
MDMsNyArMTA0LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlKGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZT4sIElEQlRyYW5zYWN0aW9uKik7Ci0gICAgdm9pZCByZW1vdmVUcmFuc2Fj
dGlvbkZyb21QZW5kaW5nTGlzdCgpOwogCiAgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX21l
dGFkYXRhOwogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFj
a2VuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggYTQ2ODY1NGUwN2I4MTYyZjFh
NTdiZDUwNTRlMDM1OWM4ZTJjN2U0ZC4uYWYzMGVmMzcxMTVhNTExMzljNTIwMWIwOWFjYmI0OTQy
NzJhMjM0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTQyLDcgKzQyLDcgQEAK
ICNpbmNsdWRlICJJREJLZXlQYXRoQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJLZXlSYW5n
ZS5oIgogI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmCiAKIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQogewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Z2V0QnlSYW5nZUludGVybmFsIik7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbnRlcm5hbCIpOwogICAgIFJlZlB0cjxJREJLZXk+IGtleTsKICAgICBpZiAo
a2V5UmFuZ2UtPmlzT25seUtleSgpKQogICAgICAgICBrZXkgPSBrZXlSYW5nZS0+bG93ZXIoKTsK
QEAgLTE0OCw1MyArMTQ4LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQo
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLAogICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uUHRyOwog
Ci0gICAgaWYgKHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlKSB7Ci0gICAgICAgIGNvbnN0IGJvb2wg
YXV0b0luY3JlbWVudCA9IG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7Ci0gICAgICAgIGNv
bnN0IGJvb2wgaGFzS2V5UGF0aCA9ICFvYmplY3RTdG9yZS0+bV9rZXlQYXRoLmlzTnVsbCgpOwot
Ci0gICAgICAgIGlmIChoYXNLZXlQYXRoICYmIGtleSkgewotICAgICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCFoYXNLZXlQYXRoICYmICFhdXRvSW5jcmVtZW50ICYmICFrZXkpIHsK
LSAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoYXNLZXlQYXRoKSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2
YWx1ZS5nZXQoKSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7Ci0gICAgICAgICAgICBpZiAoa2V5
UGF0aEtleSAmJiAha2V5UGF0aEtleS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFhdXRvSW5jcmVtZW50ICYmICFrZXlQ
YXRoS2V5KSB7Ci0gICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFU
QV9FUlI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGF1dG9JbmNyZW1lbnQgJiYgIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAgICAgICBS
ZWZQdHI8SURCS2V5PiBkdW1teUtleSA9IElEQktleTo6Y3JlYXRlTnVtYmVyKC0xKTsKLSAgICAg
ICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFmdGVySW5qZWN0
aW9uID0gaW5qZWN0S2V5SW50b0tleVBhdGgoZHVtbXlLZXksIHZhbHVlLCBvYmplY3RTdG9yZS0+
bV9rZXlQYXRoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZhbHVlQWZ0ZXJJbmplY3Rpb24pIHsK
LSAgICAgICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtleSAmJiAha2V5LT5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGtl
eSk7Ci0gICAgICAgIGNvbnN0IGJvb2wgaGFzS2V5UGF0aCA9ICFvYmplY3RTdG9yZS0+bV9rZXlQ
YXRoLmlzTnVsbCgpOwotICAgICAgICBpZiAoaGFzS2V5UGF0aCkgewotICAgICAgICAgICAgUmVm
UHRyPElEQktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCks
IG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOwotICAgICAgICAgICAgaWYgKCFrZXlQYXRoS2V5IHx8
ICFrZXlQYXRoS2V5LT5pc0VxdWFsKGtleS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBpZiAoIXRyYW5zYWN0aW9u
LT5zY2hlZHVsZVRhc2soCiAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwg
cHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiksCiAgICAgICAgICAgICAvLyBGSVhNRTog
T25lIG9mIHRoZXNlIHBlciBwdXQoKSBpcyBvdmVya2lsbCwgc2luY2UgaXQncyBzaW1wbHkgYSBj
YWNoZSBpbnZhbGlkYXRpb24uCkBAIC00NTksMTggKzQxMiw4IEBAIGJvb2wgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cG9wdWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9y
ZSwgaW50CiAKIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OklEQl9UWVBFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICht
X2luZGV4ZXMuY29udGFpbnMobmFtZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Q09OU1RSQUlOVF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAo
dHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJS
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2Rl
KCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKKyAgICBBU1NFUlQoIW1faW5k
ZXhlcy5jb250YWlucyhuYW1lKSk7CiAKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywgbmFt
ZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKICAgICBBU1NFUlQoaW5kZXgtPm5hbWUo
KSA9PSBuYW1lKTsKQEAgLTUyMCwxOCArNDYzLDExIEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleChjb25zdCBTdHJp
CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJU
cmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gbV9pbmRleGVzLmdldChu
YW1lKTsKLSAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OklEQl9OT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VS
VCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7
CisgICAgQVNTRVJUKG1faW5kZXhlcy5jb250YWlucyhuYW1lKSk7CiAKICAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOworICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IG1faW5kZXhlcy5nZXQobmFtZSk7CiAgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0cmFu
c2FjdGlvbjsKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCiAgICAgICAgICAg
ICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRl
SW5kZXhJbnRlcm5hbCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA3MDg3YzY1N2UwNjY4NmMxN2QxNWIzNmQ4OGM2OTI0
OWQyM2U5YjU5Li42YWQzMDA3MjM4ZWYzNmY2NThmNmMyMmI1ZWI5YzZhNzM2Nzc0NWE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
Y3BwCkBAIC04NCw2ICs4NCw3IEBAIElEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQlRyCiAgICAgLCBtX2Jh
Y2tlbmQoYmFja2VuZCkKICAgICAsIG1fZGF0YWJhc2UoZGIpCiAgICAgLCBtX21vZGUobW9kZSkK
KyAgICAsIG1fYWN0aXZlKHRydWUpCiAgICAgLCBtX3RyYW5zYWN0aW9uRmluaXNoZWQoZmFsc2Up
CiAgICAgLCBtX2NvbnRleHRTdG9wcGVkKGZhbHNlKQogewpAQCAtMTkzLDYgKzE5NCw3IEBAIHZv
aWQgSURCVHJhbnNhY3Rpb246OmFib3J0KCkKIHsKICAgICBpZiAobV90cmFuc2FjdGlvbkZpbmlz
aGVkKQogICAgICAgICByZXR1cm47CisgICAgbV9hY3RpdmUgPSBmYWxzZTsKICAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb24+IHNlbGZSZWYgPSB0aGlzOwogICAgIGlmIChtX2JhY2tlbmQpCiAgICAg
ICAgIG1fYmFja2VuZC0+YWJvcnQoKTsKQEAgLTI0Miw2ICsyNDQsNyBAQCB2b2lkIElEQlRyYW5z
YWN0aW9uOjp1bnJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0KiByZXF1ZXN0KQogdm9pZCBJREJU
cmFuc2FjdGlvbjo6b25BYm9ydCgpCiB7CiAgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uRmluaXNo
ZWQpOworICAgIG1fYWN0aXZlID0gZmFsc2U7CiAgICAgd2hpbGUgKCFtX2NoaWxkUmVxdWVzdHMu
aXNFbXB0eSgpKSB7CiAgICAgICAgIElEQlJlcXVlc3QqIHJlcXVlc3QgPSAqbV9jaGlsZFJlcXVl
c3RzLmJlZ2luKCk7CiAgICAgICAgIG1fY2hpbGRSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdCk7CkBA
IC0yNjUsNiArMjY4LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6b25BYm9ydCgpCiB2b2lkIElE
QlRyYW5zYWN0aW9uOjpvbkNvbXBsZXRlKCkKIHsKICAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25G
aW5pc2hlZCk7CisgICAgbV9hY3RpdmUgPSBmYWxzZTsKICAgICBtX29iamVjdFN0b3JlQ2xlYW51
cE1hcC5jbGVhcigpOwogICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKaW5kZXggMGIyZGVjNmVjMDhmMWQxZTJiOTYwZWRi
MDExNmZjZjg5ZDFjZjk2ZC4uZGI3YjE3Y2YxOTIyYzAyZTdhMTg0ZjM1ZTU4ODVkYTgwMmQ1N2Mx
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5oCkBAIC02OCwxMiArNjgsMTQgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBBdG9t
aWNTdHJpbmcmIG1vZGVUb1N0cmluZyhNb2RlLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIGJhY2tlbmQoKSBjb25zdDsKKyAgICAvLyBGSVhN
RTogSW1wbGVtZW50IGludGVybmFsIHxhY3RpdmV8IGZsYWcgcGVyIHNwZWMuIGh0dHA6Ly93ZWJr
aXQub3JnL2IvODkzNzkKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9hY3Rp
dmU7IH0KICAgICBib29sIGlzRmluaXNoZWQoKSBjb25zdDsKKyAgICBib29sIGlzUmVhZE9ubHko
KSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gUkVBRF9PTkxZOyB9CiAgICAgYm9vbCBpc1ZlcnNp
b25DaGFuZ2UoKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0gVkVSU0lPTl9DSEFOR0U7IH0KIAog
ICAgIC8vIEltcGxlbWVudCB0aGUgSURCVHJhbnNhY3Rpb24gSURMCiAgICAgY29uc3QgU3RyaW5n
JiBtb2RlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9t
b2RlID09IFJFQURfT05MWTsgfQogICAgIElEQkRhdGFiYXNlKiBkYigpIGNvbnN0OwogICAgIFBh
c3NSZWZQdHI8RE9NRXJyb3I+IGVycm9yKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICB2b2lk
IHNldEVycm9yKFBhc3NSZWZQdHI8RE9NRXJyb3I+KTsKQEAgLTEzNSw2ICsxMzcsNyBAQCBwcml2
YXRlOgogICAgIFJlZlB0cjxJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2Vu
ZDsKICAgICBSZWZQdHI8SURCRGF0YWJhc2U+IG1fZGF0YWJhc2U7CiAgICAgY29uc3QgTW9kZSBt
X21vZGU7CisgICAgYm9vbCBtX2FjdGl2ZTsKICAgICBib29sIG1fdHJhbnNhY3Rpb25GaW5pc2hl
ZDsgLy8gSXMgaXQgcG9zc2libGUgdGhhdCB3ZSdsbCBmaXJlIGFueSBtb3JlIGV2ZW50cyBvciBh
bGxvdyBhbnkgbmV3IHJlcXVlc3RzPyBJZiBub3QsIHdlJ3JlIGZpbmlzaGVkLgogICAgIGJvb2wg
bV9jb250ZXh0U3RvcHBlZDsKICAgICBSZWZQdHI8RE9NRXJyb3I+IG1fZXJyb3I7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>149549</attachid>
            <date>2012-06-26 10:04:43 -0700</date>
            <delta_ts>2012-06-26 15:04:28 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-89377-20120626100443.patch</filename>
            <type>text/plain</type>
            <size>34678</size>
            <attacher name="Joshua Bell">jsbell</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTIxMTkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDkzZDJiZGZhOTYyYWJk
ODQyZDZkMjY0MjJjZWM3NmQ1M2M2NGY4ZS4uNGJiOTNjNjIzYzFmZWI0YWJjMWU1NzliN2Q3Y2Zm
YWE5ZDZjNmVhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc3IEBACisyMDEyLTA2LTIyICBKb3No
dWEgQmVsbCAgPGpzYmVsbEBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgSW5kZXhlZERCOiBNb3Zl
IG1ldGhvZCBwcmVjb25kaXRpb24gY2hlY2tzIHRvIGZyb250IGVuZCBvYmplY3RzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04OTM3NworCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vdyB0aGF0IG1ldGFkYXRh
IGV4aXN0cyBvbiB0aGUgZnJvbnQgZW5kLCBtb3N0IG9mIHRoZSBwcmUtY29uZGl0aW9uIHZhbGlk
YXRpb24gY2hlY2tzCisgICAgICAgIGRvbmUgb24gSURCIG1ldGhvZCBjYWxscyBmcm9tIHNjcmlw
dCBjYW4gYmUgbW92ZWQgdG8gdGhlIGZyb250IGVuZCB3aGljaCBzaW1wbGlmaWVzIHRoZQorICAg
ICAgICBjb2RlIHNpZ25pZmljYW50bHkgaW4gdGhlIGNhc2Ugb2YgY29tcGxleCBtZXRob2RzIGxp
a2UgSURCT2JqZWN0U3RvcmU6OnB1dCgpLgorCisgICAgICAgIEFkZHMgYW4gaW50ZXJuYWwgImFj
dGl2ZSIgZmxhZyBmb3IgdHJhbnNhY3Rpb25zLCBhbHRob3VnaCB0aGUgYmVoYXZpb3IgaXMgbm90
IGFjY3VyYXRlCisgICAgICAgIHRvIHRoZSBzcGVjIChpdCBzaG91bGQgb25seSBiZSB0cnVlIGR1
cmluZyBldmVudCBjYWxsYmFja3MgLSBodHRwOi8vd2Via2l0Lm9yZy9iLzg5Mzc5KS4KKyAgICAg
ICAgVGhlIGJhY2stZW5kIG1ldGhvZHMgY2FuIHRoZW4gYmUgc2ltcGxpZmVkIHRvIGp1c3QgYWRk
aW5nIGFzeW5jIHRhc2tzIHRvIHRoZSB0cmFuc2FjdGlvbiwKKyAgICAgICAgYW5kIHRoZSBmcm9u
dCBlbmQgbWV0aG9kcyBjYW4gdGFrZSBjYXJlIG9mIGFsbCBleGNlcHRpb24gY2FzZXMgZXhjZXB0
IGZvciBhc3luY2hyb25vdXMKKyAgICAgICAgdHJhbnNhY3Rpb24gYWJvcnQgd2hpY2ggc3RpbGwg
cmVxdWlyZXMgcGx1bWJpbmcgYmFjayB0byB0aGUgZnJvbnQgZW5kLgorCisgICAgICAgIE5vIGZ1
bmN0aW9uYWwgY2hhbmdlcyAtIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIE1vZHVsZXMvaW5k
ZXhlZGRiL0lEQkN1cnNvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OnVwZGF0
ZSk6IE1pZ3JhdGUgZnJvbSBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQuCisgICAgICAg
IChXZWJDb3JlOjpJREJDdXJzb3I6OmFkdmFuY2UpOiBBZGQgbW9yZSBleHBsaWNpdCB0cmFuc2Fj
dGlvbi1pcy1hY3RpdmUgY2hlY2suCisgICAgICAgIChXZWJDb3JlOjpJREJDdXJzb3I6OmNvbnRp
bnVlRnVuY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6ZGVsZXRl
RnVuY3Rpb24pOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6ZWZmZWN0aXZl
T2JqZWN0U3RvcmUpOiBDb252ZW5pZW5jZSBmdW5jdGlvbiAoc291cmNlIG1heSBiZSBzdG9yZSBv
ciBpbmRleCkuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuaDoKKyAgICAgICAgKFdlYkNvcmU6OklEQkN1cnNvcjo6aXNLZXlDdXJzb3Ip
OiBEaXN0aW5ndWlzaCBmcm9tIElEQkN1cnNvcldpdGhWYWx1ZS4KKyAgICAgICAgKElEQkN1cnNv
cik6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SURCQ3Vyc29yQmFja2VuZEltcGw6OnVwZGF0ZSk6IFJlbW92
ZSBtaWdyYXRlZCBjaGVjay4KKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JX
aXRoVmFsdWUuaDoKKyAgICAgICAgKElEQkN1cnNvcldpdGhWYWx1ZSk6CisgICAgICAgICogTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwOiBNaWdyYXRlIGNoZWNrcy4KKyAgICAgICAg
KFdlYkNvcmU6OklEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJD
b3JlOjpJREJEYXRhYmFzZTo6ZGVsZXRlT2JqZWN0U3RvcmUpOgorICAgICAgICAqIE1vZHVsZXMv
aW5kZXhlZGRiL0lEQkRhdGFiYXNlQmFja2VuZEltcGwuY3BwOiBSZXBsYWNlIGNoZWNrcyB3aXRo
IGFzc2VydGlvbnMuCisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpj
cmVhdGVPYmplY3RTdG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJREJEYXRhYmFzZUJhY2tlbmRJ
bXBsOjpkZWxldGVPYmplY3RTdG9yZSk6CisgICAgICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURC
SW5kZXguY3BwOiBBZGQgdHJhbnNhY3Rpb24taXMtYWN0aXZlIGNoZWNrcy4KKyAgICAgICAgKFdl
YkNvcmU6OklEQkluZGV4OjpvcGVuQ3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkluZGV4
Ojpjb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6b3BlbktleUN1cnNvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpJREJJbmRleDo6Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQklu
ZGV4OjpnZXRLZXkpOgorICAgICAgICAqIE1vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3Jl
LmNwcDogTWlncmF0ZSBjZWhja3MuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6
Z2V0KToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjphZGQpOiBEZWxlZ2F0ZXMg
dG8gcHV0KFB1dE1vZGUpCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6cHV0KTog
RGVsZWdhdGVzIHRvIHB1dChQdXRNb2RlKQorICAgICAgICAoV2ViQ29yZSk6IEFkZHMgcHV0KFB1
dE1vZGUpIHdoaWNoIGhhcyB0aGUgdW5pZmllZCBjaGVja3MgbWlncmF0ZWQgZnJvbQorICAgICAg
ICBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQuCisgICAgICAgIChXZWJDb3JlOjpJREJP
YmplY3RTdG9yZTo6ZGVsZXRlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0
U3RvcmU6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlOjpjcmVhdGVJ
bmRleCk6CisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgpOgor
ICAgICAgICAoV2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6Om9wZW5DdXJzb3IpOgorICAgICAgICAo
V2ViQ29yZTo6SURCT2JqZWN0U3RvcmU6OmNvdW50KToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4
ZWRkYi9JREJPYmplY3RTdG9yZS5oOiBBZGRzIHB1dChQdXRNb2RlKS4KKyAgICAgICAgKElEQk9i
amVjdFN0b3JlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZUJh
Y2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQk9iamVjdFN0b3JlQmFja2VuZElt
cGw6OmdldEludGVybmFsKTogRml4IHRyYWNlIHN5bWJvbC4KKyAgICAgICAgKFdlYkNvcmU6OklE
Qk9iamVjdFN0b3JlQmFja2VuZEltcGw6OnB1dCk6IFJlbW92ZSBtaWdyYXRlZCBjaGVja3MuCisg
ICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleCk6
IFJlbW92ZSBtaWdyYXRlZCBjaGVja3MuCisgICAgICAgIChXZWJDb3JlOjpJREJPYmplY3RTdG9y
ZUJhY2tlbmRJbXBsOjpkZWxldGVJbmRleCk6IFJlbW92ZSBtaWdyYXRlZCBjaGVja3MuCisgICAg
ICAgICogTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uY3BwOiBBZGQgYWN0aXZlIGZs
YWcgdHJhY2tpbmcuCisgICAgICAgIChXZWJDb3JlOjpJREJUcmFuc2FjdGlvbjo6SURCVHJhbnNh
Y3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246OmFib3J0KToKKyAgICAg
ICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjpvbkFib3J0KToKKyAgICAgICAgKFdlYkNvcmU6
OklEQlRyYW5zYWN0aW9uOjpvbkNvbXBsZXRlKToKKyAgICAgICAgKiBNb2R1bGVzL2luZGV4ZWRk
Yi9JREJUcmFuc2FjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6SURCVHJhbnNhY3Rpb246Omlz
QWN0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQlRyYW5zYWN0aW9uOjppc1JlYWRPbmx5KTog
R3JvdXAgSURML25vbi1JREwgbWV0aG9kcy4KKyAgICAgICAgKElEQlRyYW5zYWN0aW9uKToKKwog
MjAxMi0wNi0yNSAgSmF5IENpdmVsbGkgIDxqY2l2ZWxsaUBjaHJvbWl1bS5vcmc+CiAKICAgICAg
ICAgRml4IGZvciBhIG1lbW9yeSBsZWFrIHdpdGggTUhUTUxBcmNoaXZlcy4KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJDdXJzb3IuY3BwCmluZGV4IDI3NTk1MTRlZmY3
NDIyNGM2MTc5OWNmNWY2MDc3OWZkY2U0ZDI0MjMuLmFmMWM1MDQ0NDczNWViOTQ2MjNmY2I4ODZh
NjQ2ZjA0YmNhNjU4MDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQkN1cnNvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCQ3Vyc29yLmNwcApAQCAtMjksOSArMjksMTEgQEAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIAogI2luY2x1ZGUgIklEQkFueS5oIgorI2luY2x1ZGUgIklEQkJpbmRpbmdVdGlsaXRp
ZXMuaCIKICNpbmNsdWRlICJJREJDYWxsYmFja3MuaCIKICNpbmNsdWRlICJJREJDdXJzb3JCYWNr
ZW5kSW50ZXJmYWNlLmgiCiAjaW5jbHVkZSAiSURCS2V5LmgiCisjaW5jbHVkZSAiSURCT2JqZWN0
U3RvcmUuaCIKICNpbmNsdWRlICJJREJSZXF1ZXN0LmgiCiAjaW5jbHVkZSAiSURCVHJhY2luZy5o
IgogI2luY2x1ZGUgIklEQlRyYW5zYWN0aW9uLmgiCkBAIC0xMjUsMjQgKzEyNywzNyBAQCBJREJB
bnkqIElEQkN1cnNvcjo6c291cmNlKCkgY29uc3QKIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURC
Q3Vyc29yOjp1cGRhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzc1JlZlB0
cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsK
ICAgICBJREJfVFJBQ0UoIklEQkN1cnNvcjo6dXBkYXRlIik7CisgICAgUmVmUHRyPFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKIAotICAgIGlmICghbV9nb3RWYWx1ZSkg
eworICAgIGlmICghbV9nb3RWYWx1ZSB8fCBpc0tleUN1cnNvcigpKSB7CiAgICAgICAgIGVjID0g
SURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0
dXJuIDA7CiAgICAgfQotCisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7Cisg
ICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc1Jl
YWRPbmx5KCkpIHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZ
X0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKICAgICBpZiAodmFsdWUtPmJsb2JVUkxzKCku
c2l6ZSgpID4gMCkgewogICAgICAgICAvLyBGSVhNRTogQWRkIEJsb2IvRmlsZS9GaWxlTGlzdCBz
dXBwb3J0CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9EQVRBX0NMT05F
X0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCisgICAgUmVmUHRyPElEQk9iamVjdFN0
b3JlPiBvYmplY3RTdG9yZSA9IGVmZmVjdGl2ZU9iamVjdFN0b3JlKCk7CisgICAgY29uc3QgSURC
S2V5UGF0aCYga2V5UGF0aCA9IG9iamVjdFN0b3JlLT5tZXRhZGF0YSgpLmtleVBhdGg7CisgICAg
Y29uc3QgYm9vbCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOworICAgIGlmICh1
c2VzSW5MaW5lS2V5cykgeworICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gY3Jl
YXRlSURCS2V5RnJvbVNlcmlhbGl6ZWRWYWx1ZUFuZEtleVBhdGgodmFsdWUsIGtleVBhdGgpOwor
ICAgICAgICBpZiAoIWtleVBhdGhLZXkgfHwgIWtleVBhdGhLZXktPmlzRXF1YWwobV9jdXJyZW50
UHJpbWFyeUtleS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkRBVEFfRVJSOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisK
ICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVxdWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250
ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwgbV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgbV9i
YWNrZW5kLT51cGRhdGUodmFsdWUsIHJlcXVlc3QsIGVjKTsKICAgICBpZiAoZWMpIHsKQEAgLTE2
MCw3ICsxNzUsNyBAQCB2b2lkIElEQkN1cnNvcjo6YWR2YW5jZSh1bnNpZ25lZCBsb25nIGNvdW50
LCBFeGNlcHRpb25Db2RlJiBlYykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICgh
bV9yZXF1ZXN0KSB7CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CiAgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE4OCw3ICsyMDMsNyBAQCB2b2lkIElEQkN1cnNv
cjo6Y29udGludWVGdW5jdGlvbihQYXNzUmVmUHRyPElEQktleT4ga2V5LCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghbV9yZXF1ZXN0KSB7Cisg
ICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KQEAgLTIxMyw2ICsyMjgsMTAgQEAgdm9pZCBJREJDdXJzb3I6OmNvbnRpbnVlRnVu
Y3Rpb24oUGFzc1JlZlB0cjxJREJLZXk+IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCiBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IElEQkN1cnNvcjo6ZGVsZXRlRnVuY3Rpb24oU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJ
REJDdXJzb3I6OmRlbGV0ZSIpOworICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBpZiAobV90cmFuc2FjdGlvbi0+
aXNSZWFkT25seSgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlJFQURf
T05MWV9FUlI7CiAgICAgICAgIHJldHVybiAwOwpAQCAtMjUyLDYgKzI3MSwxNCBAQCB2b2lkIElE
QkN1cnNvcjo6c2V0VmFsdWVSZWFkeSgpCiAgICAgbV92YWx1ZUlzRGlydHkgPSB0cnVlOwogfQog
CitQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBJREJDdXJzb3I6OmVmZmVjdGl2ZU9iamVjdFN0
b3JlKCkKK3sKKyAgICBpZiAobV9zb3VyY2UtPnR5cGUoKSA9PSBJREJBbnk6OklEQk9iamVjdFN0
b3JlVHlwZSkKKyAgICAgICAgcmV0dXJuIG1fc291cmNlLT5pZGJPYmplY3RTdG9yZSgpOworICAg
IFJlZlB0cjxJREJJbmRleD4gaW5kZXggPSBtX3NvdXJjZS0+aWRiSW5kZXgoKTsKKyAgICByZXR1
cm4gaW5kZXgtPm9iamVjdFN0b3JlKCk7Cit9CisKIHVuc2lnbmVkIHNob3J0IElEQkN1cnNvcjo6
c3RyaW5nVG9EaXJlY3Rpb24oY29uc3QgU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcsIEV4Y2VwdGlv
bkNvZGUmIGVjKQogewogICAgIGlmIChkaXJlY3Rpb25TdHJpbmcgPT0gSURCQ3Vyc29yOjpkaXJl
Y3Rpb25OZXh0KCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNv
ci5oCmluZGV4IDNmOWQ4NGY5ODgxMTgxMmM2YmZjYjUzYzIzODgzMWVlM2ZiYjVlNmUuLjRmNDU2
NGVlYjQyMTI3YWE4N2IwNjkzNmI1NGUwNDNmNGU3ZjU1ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1cnNvci5oCkBAIC05MSw4ICs5MSwxMSBAQCBwdWJsaWM6
CiAKIHByb3RlY3RlZDoKICAgICBJREJDdXJzb3IoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5k
SW50ZXJmYWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiop
OworICAgIHZpcnR1YWwgYm9vbCBpc0tleUN1cnNvcigpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
IAogcHJpdmF0ZToKKyAgICBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlPiBlZmZlY3RpdmVPYmpl
Y3RTdG9yZSgpOworCiAgICAgUmVmUHRyPElEQkN1cnNvckJhY2tlbmRJbnRlcmZhY2U+IG1fYmFj
a2VuZDsKICAgICBSZWZQdHI8SURCUmVxdWVzdD4gbV9yZXF1ZXN0OwogICAgIFJlZlB0cjxJREJB
bnk+IG1fc291cmNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRl
eGVkZGIvSURCQ3Vyc29yQmFja2VuZEltcGwuY3BwCmluZGV4IGI2MjQ2ZTkxOWUwYjE4NzI3YzAz
NTE0ZDdiODFhOTJiODk5OGYyOTguLjBhMTRhNmYxYTFiNTkzMDBmOGJlOTg5ZDMyY2FlMWUwZmI5
MzQzM2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkN1
cnNvckJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRk
Yi9JREJDdXJzb3JCYWNrZW5kSW1wbC5jcHAKQEAgLTkzLDEwICs5Myw5IEBAIHZvaWQgSURCQ3Vy
c29yQmFja2VuZEltcGw6OnVwZGF0ZShQYXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
dmFsdWUsIFBhc3NSCiB7CiAgICAgSURCX1RSQUNFKCJJREJDdXJzb3JCYWNrZW5kSW1wbDo6dXBk
YXRlIik7CiAgICAgQVNTRVJUKG1fdHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlv
bjo6UkVBRF9PTkxZKTsKLSAgICBpZiAoIW1fY3Vyc29yIHx8IG1fY3Vyc29yVHlwZSA9PSBJbmRl
eEtleUN1cnNvcikgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5W
QUxJRF9TVEFURV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisKKyAgICBBU1NFUlQobV9j
dXJzb3IpOworICAgIEFTU0VSVChtX2N1cnNvclR5cGUgIT0gSW5kZXhLZXlDdXJzb3IpOwogCiAg
ICAgbV9vYmplY3RTdG9yZS0+cHV0KHZhbHVlLCBtX2N1cnNvci0+cHJpbWFyeUtleSgpLCBJREJP
YmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkN1cnNvclVwZGF0ZSwgY2FsbGJhY2tzLCBtX3Ry
YW5zYWN0aW9uLmdldCgpLCBlYyk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL2luZGV4ZWRkYi9JREJDdXJzb3JXaXRoVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvaW5kZXhlZGRiL0lEQkN1cnNvcldpdGhWYWx1ZS5oCmluZGV4IGExYmExNGY5NjFjNWEwYjg4
Y2VkZWNjMzBhNTA5YTE1NGE2MTc5ZTAuLjliMzk2YmEzNWFhMDZiMzkxNGUwNzJhNjgxZDcwNGUw
NWNhZWY4Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lE
QkN1cnNvcldpdGhWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQkN1cnNvcldpdGhWYWx1ZS5oCkBAIC00MSw2ICs0MSw5IEBAIHB1YmxpYzoKICAgICAvLyBU
aGUgdmFsdWUgYXR0cmlidXRlIGRlZmluZWQgaW4gdGhlIElETCBpcyBzaW1wbHkgaW1wbGVtZW50
ZWQgaW4gSURCQ3Vyc29yIChidXQgbm90IGV4cG9zZWQgdmlhCiAgICAgLy8gaXRzIElETCkuIFRo
aXMgaXMgdG8gbWFrZSB0aGUgaW1wbGVtZW50YXRpb24gbW9yZSBzaW1wbGUgd2hpbGUgbWF0Y2hp
bmcgd2hhdCB0aGUgc3BlYyBzYXlzLgogCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCBib29sIGlz
S2V5Q3Vyc29yKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KKwogcHJpdmF0ZToK
ICAgICBJREJDdXJzb3JXaXRoVmFsdWUoUGFzc1JlZlB0cjxJREJDdXJzb3JCYWNrZW5kSW50ZXJm
YWNlPiwgSURCUmVxdWVzdCosIElEQkFueSogc291cmNlLCBJREJUcmFuc2FjdGlvbiopOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkRhdGFiYXNlLmNwcApp
bmRleCAwYTQ5NDAwYmI4NjU1ZWFlOTA0ZmNlNjlkOWVkN2I0MDg2YmI3ZmNhLi5hYjEyM2MzZGNj
OTQ4NjZkZWVhY2VhMDE3ODljYTVmMjI4NDczOTM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2UuY3BwCkBAIC0xMTcsNiArMTE3LDEwIEBAIFBh
c3NSZWZQdHI8SURCT2JqZWN0U3RvcmU+IElEQkRhdGFiYXNlOjpjcmVhdGVPYmplY3RTdG9yZShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246
OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlm
ICghbV92ZXJzaW9uQ2hhbmdlVHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgICAg
ICByZXR1cm4gMDsKKyAgICB9CiAKICAgICBJREJLZXlQYXRoIGtleVBhdGg7CiAgICAgaWYgKCFv
cHRpb25zLmlzVW5kZWZpbmVkT3JOdWxsKCkpIHsKQEAgLTEyOCw2ICsxMzIsMTEgQEAgUGFzc1Jl
ZlB0cjxJREJPYmplY3RTdG9yZT4gSURCRGF0YWJhc2U6OmNyZWF0ZU9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgY28KICAgICAgICAgICAgIGtleVBhdGggPSBJREJLZXlQYXRoKGtleVBh
dGhTdHJpbmcpOwogICAgIH0KIAorICAgIGlmIChtX21ldGFkYXRhLm9iamVjdFN0b3Jlcy5jb250
YWlucyhuYW1lKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJB
SU5UX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgaWYgKCFrZXlQYXRoLmlz
TnVsbCgpICYmICFrZXlQYXRoLmlzVmFsaWQoKSkgewogICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJREJfU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjIsNiAr
MTcxLDE0IEBAIHZvaWQgSURCRGF0YWJhc2U6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAg
ICBpZiAoIW1fdmVyc2lvbkNoYW5nZVRyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIW1fbWV0YWRhdGEub2JqZWN0U3RvcmVzLmNv
bnRhaW5zKG5hbWUpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9O
T1RfRk9VTkRfRVJSOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgbV9iYWNrZW5kLT5k
ZWxldGVPYmplY3RTdG9yZShuYW1lLCBtX3ZlcnNpb25DaGFuZ2VUcmFuc2FjdGlvbi0+YmFja2Vu
ZCgpLCBlYyk7CiAgICAgaWYgKCFlYykgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCRGF0YWJhc2VCYWNrZW5kSW1wbC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAppbmRleCA1Y2Nj
YWEyOWE3ZmQ2YjU2OTA4YjU2NzgzOGViMmMxMzFiZDczYzgzLi41MDViYTc1N2JlNDhmYzFhZmNh
NDVjNTk2NmZmYmZhMDA0ZDQ3NWU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJEYXRhYmFzZUJhY2tlbmRJbXBsLmNwcApAQCAtMTQ1LDEw
ICsxNDUsNyBAQCBJREJEYXRhYmFzZU1ldGFkYXRhIElEQkRhdGFiYXNlQmFja2VuZEltcGw6Om1l
dGFkYXRhKCkgY29uc3QKIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW50ZXJmYWNl
PiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpjcmVhdGVPYmplY3RTdG9yZShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IElEQktleVBhdGgmIGtleVBhdGgsIGJvb2wgYXV0b0luY3JlbWVudCwgSURC
VHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlvblB0ciwgRXhjZXB0aW9uQ29k
ZSYgZWMpCiB7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uUHRyLT5tb2RlKCkgPT0gSURCVHJhbnNh
Y3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKLSAgICBpZiAobV9vYmplY3RTdG9yZXMuY29udGFpbnMo
bmFtZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6Q09OU1RSQUlOVF9F
UlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBBU1NFUlQoIW1fb2JqZWN0U3RvcmVz
LmNvbnRhaW5zKG5hbWUpKTsKIAogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBs
PiBvYmplY3RTdG9yZSA9IElEQk9iamVjdFN0b3JlQmFja2VuZEltcGw6OmNyZWF0ZSh0aGlzLCBu
YW1lLCBrZXlQYXRoLCBhdXRvSW5jcmVtZW50KTsKICAgICBBU1NFUlQob2JqZWN0U3RvcmUtPm5h
bWUoKSA9PSBuYW1lKTsKQEAgLTE4NiwxMiArMTgzLDEwIEBAIFBhc3NSZWZQdHI8SURCT2JqZWN0
U3RvcmVCYWNrZW5kSW50ZXJmYWNlPiBJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpvYmplY3RTdG9y
ZShjCiB2b2lkIElEQkRhdGFiYXNlQmFja2VuZEltcGw6OmRlbGV0ZU9iamVjdFN0b3JlKGNvbnN0
IFN0cmluZyYgbmFtZSwgSURCVHJhbnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlKiB0cmFuc2FjdGlv
blB0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgQVNTRVJUKHRyYW5zYWN0aW9uUHRyLT5t
b2RlKCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKLSAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5nZXQo
bmFtZSk7Ci0gICAgaWYgKCFvYmplY3RTdG9yZSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNl
RXhjZXB0aW9uOjpJREJfTk9UX0ZPVU5EX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAg
ICBBU1NFUlQobV9vYmplY3RTdG9yZXMuY29udGFpbnMobmFtZSkpOworCiAgICAgUmVmUHRyPElE
QkRhdGFiYXNlQmFja2VuZEltcGw+IGRhdGFiYXNlID0gdGhpczsKKyAgICBSZWZQdHI8SURCT2Jq
ZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSBtX29iamVjdFN0b3Jlcy5nZXQobmFt
ZSk7CiAgICAgUmVmUHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rp
b24gPSB0cmFuc2FjdGlvblB0cjsKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2so
Y3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRhYmFzZUJhY2tlbmRJbXBsOjpkZWxldGVPYmplY3RT
dG9yZUludGVybmFsLCBkYXRhYmFzZSwgb2JqZWN0U3RvcmUsIHRyYW5zYWN0aW9uKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlQ2FsbGJhY2tUYXNrKCZJREJEYXRh
YmFzZUJhY2tlbmRJbXBsOjphZGRPYmplY3RTdG9yZVRvTWFwLCBkYXRhYmFzZSwgb2JqZWN0U3Rv
cmUpKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
SW5kZXguY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCSW5kZXguY3Bw
CmluZGV4IDMxZTdmNWQ0ZTc2MmZjY2RiZGE0MzE2Nzk0OTlkYWJhYWFiYWQwZjQuLmZkOTM5NDk0
NzQ5MjcyMjU1OTE5ZGMzMDIyOGYzYzA1Yzk3OGQzMTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQkluZGV4LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL2luZGV4ZWRkYi9JREJJbmRleC5jcHAKQEAgLTY1LDYgKzY1LDEwIEBAIFBhc3NSZWZQ
dHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5DdXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogY29udGV4dCwgUGFzCiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9J
TlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlmICghbV90
cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0
aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0K
ICAgICB1bnNpZ25lZCBzaG9ydCBkaXJlY3Rpb24gPSBJREJDdXJzb3I6OnN0cmluZ1RvRGlyZWN0
aW9uKGRpcmVjdGlvblN0cmluZywgZWMpOwogICAgIGlmIChlYykKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0xMTUsNiArMTE5LDEwIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6OmNv
dW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQCiAgICAgICAgIGVj
ID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewor
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVx
dWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwg
bV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgbV9iYWNrZW5kLT5jb3VudChrZXlSYW5nZSwgcmVx
dWVzdCwgbV90cmFuc2FjdGlvbi0+YmFja2VuZCgpLCBlYyk7CiAgICAgaWYgKGVjKSB7CkBAIC0x
NDAsNiArMTQ4LDEwIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5kZXg6Om9wZW5LZXlD
dXJzb3IoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwKICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4g
MDsKICAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAg
IGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgdW5zaWduZWQgc2hvcnQgZGlyZWN0aW9uID0g
SURCQ3Vyc29yOjpzdHJpbmdUb0RpcmVjdGlvbihkaXJlY3Rpb25TdHJpbmcsIGVjKTsKICAgICBp
ZiAoZWMpCkBAIC0yMDAsNiArMjEyLDEwIEBAIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4gSURCSW5k
ZXg6OmdldChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyCiAgICAg
ICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUo
KSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFD
VElWRV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBpZiAoIWtleVJhbmdlKSB7
CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAgICAgICBy
ZXR1cm4gMDsKQEAgLTIzMSw2ICsyNDcsMTAgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJJ
bmRleDo6Z2V0S2V5KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWYKICAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwog
ICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2
ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lO
QUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIGlmICgha2V5UmFuZ2Up
IHsKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CiAgICAgICAg
IHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIv
SURCT2JqZWN0U3RvcmUuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmUuY3BwCmluZGV4IDY4YmMxNzE2NWRmNzI1ZTcxNDFjODFjMTg4ZmM3NTZhNDFj
NTI5MjYuLjZjMDY0MTU5MjljZThiYjdjODU3YTExYWVmOGRkMWY4MWUzMzIxNTMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5jcHAK
QEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRPTVN0cmluZ0xpc3QuaCIKICNpbmNsdWRl
ICJJREJBbnkuaCIKKyNpbmNsdWRlICJJREJCaW5kaW5nVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAi
SURCRGF0YWJhc2UuaCIKICNpbmNsdWRlICJJREJEYXRhYmFzZUV4Y2VwdGlvbi5oIgogI2luY2x1
ZGUgIklEQkluZGV4LmgiCkBAIC03OCw2ICs3OSwxMCBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+
IElEQk9iamVjdFN0b3JlOjpnZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFz
cwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgfQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkgewor
ICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElWRV9F
UlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBSZWZQdHI8SURCUmVxdWVzdD4gcmVx
dWVzdCA9IElEQlJlcXVlc3Q6OmNyZWF0ZShjb250ZXh0LCBJREJBbnk6OmNyZWF0ZSh0aGlzKSwg
bV90cmFuc2FjdGlvbi5nZXQoKSk7CiAgICAgbV9iYWNrZW5kLT5nZXQoa2V5UmFuZ2UsIHJlcXVl
c3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwogICAgIGlmIChlYykgewpAQCAtOTYs
NjUgKzEwMSw4MCBAQCBQYXNzUmVmUHRyPElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpnZXQo
U2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGFzcwogICAgIHJldHVybiBnZXQoY29u
dGV4dCwga2V5UmFuZ2UucmVsZWFzZSgpLCBlYyk7CiB9CiAKLVBhc3NSZWZQdHI8SURCUmVxdWVz
dD4gSURCT2JqZWN0U3RvcmU6OmFkZChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQ
YXNzUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gcHJwVmFsdWUsIFBhc3NSZWZQdHI8SURC
S2V5PiBrZXksIEV4Y2VwdGlvbkNvZGUmIGVjKQorUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJP
YmplY3RTdG9yZTo6YWRkKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBhc3NSZWZQ
dHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+IGtleSwg
RXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZTo6YWRk
Iik7CisgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6OkFkZE9u
bHksIGNvbnRleHQsIHZhbHVlLCBrZXksIGVjKTsKK30KKworUGFzc1JlZlB0cjxJREJSZXF1ZXN0
PiBJREJPYmplY3RTdG9yZTo6cHV0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqIGNvbnRleHQsIFBh
c3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZSwgUGFzc1JlZlB0cjxJREJLZXk+
IGtleSwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9y
ZTo6cHV0Iik7CisgICAgcmV0dXJuIHB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U6
OkFkZE9yVXBkYXRlLCBjb250ZXh0LCB2YWx1ZSwga2V5LCBlYyk7Cit9CisKK1Bhc3NSZWZQdHI8
SURCUmVxdWVzdD4gSURCT2JqZWN0U3RvcmU6OnB1dChJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRl
cmZhY2U6OlB1dE1vZGUgcHV0TW9kZSwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElE
QktleT4gcHJwS2V5LCBFeGNlcHRpb25Db2RlJiBlYykKK3sKKyAgICBJREJfVFJBQ0UoIklEQk9i
amVjdFN0b3JlOjpwdXQiKTsKKyAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1
ZSA9IHBycFZhbHVlOworICAgIFJlZlB0cjxJREJLZXk+IGtleSA9IHBycEtleTsKICAgICBpZiAo
bV9kZWxldGVkKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9JTlZB
TElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmIChtX3RyYW5z
YWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6UkVBRF9PTkxZX0VSUjsKKyAgICBpZiAoIW1fdHJhbnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsK
KyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVf
RVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0KLSAgICBpZiAoa2V5ICYmICFrZXktPmlz
VmFsaWQoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsK
KyAgICBpZiAobV90cmFuc2FjdGlvbi0+aXNSZWFkT25seSgpKSB7CisgICAgICAgIGVjID0gSURC
RGF0YWJhc2VFeGNlcHRpb246OlJFQURfT05MWV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KLQotICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHZhbHVlID0gcHJwVmFsdWU7
CiAgICAgaWYgKHZhbHVlLT5ibG9iVVJMcygpLnNpemUoKSA+IDApIHsKICAgICAgICAgLy8gRklY
TUU6IEFkZCBCbG9iL0ZpbGUvRmlsZUxpc3Qgc3VwcG9ydAogICAgICAgICBlYyA9IElEQkRhdGFi
YXNlRXhjZXB0aW9uOjpJREJfREFUQV9DTE9ORV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KIAotICAgIFJlZlB0cjxJREJSZXF1ZXN0PiByZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRl
KGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMpLCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKLSAg
ICBtX2JhY2tlbmQtPnB1dCh2YWx1ZSwga2V5LCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZh
Y2U6OkFkZE9ubHksIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwotICAg
IGlmIChlYykgewotICAgICAgICByZXF1ZXN0LT5tYXJrRWFybHlEZWF0aCgpOwotICAgICAgICBy
ZXR1cm4gMDsKLSAgICB9Ci0gICAgcmV0dXJuIHJlcXVlc3QucmVsZWFzZSgpOwotfQorICAgIGNv
bnN0IElEQktleVBhdGgmIGtleVBhdGggPSBtX21ldGFkYXRhLmtleVBhdGg7CisgICAgY29uc3Qg
Ym9vbCB1c2VzSW5MaW5lS2V5cyA9ICFrZXlQYXRoLmlzTnVsbCgpOworICAgIGNvbnN0IGJvb2wg
aGFzS2V5R2VuZXJhdG9yID0gYXV0b0luY3JlbWVudCgpOwogCi1QYXNzUmVmUHRyPElEQlJlcXVl
c3Q+IElEQk9iamVjdFN0b3JlOjpwdXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwg
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLCBQYXNzUmVmUHRyPElE
QktleT4ga2V5LCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBJREJfVFJBQ0UoIklEQk9iamVj
dFN0b3JlOjpwdXQiKTsKLSAgICBpZiAobV9kZWxldGVkKSB7Ci0gICAgICAgIGVjID0gSURCRGF0
YWJhc2VFeGNlcHRpb246OklEQl9JTlZBTElEX1NUQVRFX0VSUjsKKyAgICBpZiAodXNlc0luTGlu
ZUtleXMgJiYga2V5KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFf
RVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlz
UmVhZE9ubHkoKSkgewotICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpSRUFEX09O
TFlfRVJSOworICAgIGlmICghdXNlc0luTGluZUtleXMgJiYgIWhhc0tleUdlbmVyYXRvciAmJiAh
a2V5KSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwogICAg
ICAgICByZXR1cm4gMDsKICAgICB9Ci0KKyAgICBpZiAodXNlc0luTGluZUtleXMpIHsKKyAgICAg
ICAgUmVmUHRyPElEQktleT4ga2V5UGF0aEtleSA9IGNyZWF0ZUlEQktleUZyb21TZXJpYWxpemVk
VmFsdWVBbmRLZXlQYXRoKHZhbHVlLCBrZXlQYXRoKTsKKyAgICAgICAgaWYgKGtleVBhdGhLZXkg
JiYgIWtleVBhdGhLZXktPmlzVmFsaWQoKSkgeworICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFz
ZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoIWhhc0tleUdlbmVyYXRvciAmJiAha2V5UGF0aEtleSkgeworICAgICAgICAg
ICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoaGFzS2V5R2VuZXJhdG9yICYmICFrZXlQYXRo
S2V5KSB7CisgICAgICAgICAgICBSZWZQdHI8SURCS2V5PiBkdW1teUtleSA9IElEQktleTo6Y3Jl
YXRlTnVtYmVyKC0xKTsKKyAgICAgICAgICAgIFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+
IHZhbHVlQWZ0ZXJJbmplY3Rpb24gPSBpbmplY3RJREJLZXlJbnRvU2VyaWFsaXplZFZhbHVlKGR1
bW15S2V5LCB2YWx1ZSwga2V5UGF0aCk7CisgICAgICAgICAgICBpZiAoIXZhbHVlQWZ0ZXJJbmpl
Y3Rpb24pIHsKKyAgICAgICAgICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRB
X0VSUjsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KICAgICBpZiAoa2V5ICYmICFrZXktPmlzVmFsaWQoKSkgewogICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAg
fQogCi0gICAgUmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsK
LSAgICBpZiAodmFsdWUtPmJsb2JVUkxzKCkuc2l6ZSgpID4gMCkgewotICAgICAgICAvLyBGSVhN
RTogQWRkIEJsb2IvRmlsZS9GaWxlTGlzdCBzdXBwb3J0Ci0gICAgICAgIGVjID0gSURCRGF0YWJh
c2VFeGNlcHRpb246OklEQl9EQVRBX0NMT05FX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAg
fQotCiAgICAgUmVmUHRyPElEQlJlcXVlc3Q+IHJlcXVlc3QgPSBJREJSZXF1ZXN0OjpjcmVhdGUo
Y29udGV4dCwgSURCQW55OjpjcmVhdGUodGhpcyksIG1fdHJhbnNhY3Rpb24uZ2V0KCkpOwotICAg
IG1fYmFja2VuZC0+cHV0KHZhbHVlLCBrZXksIElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFj
ZTo6QWRkT3JVcGRhdGUsIHJlcXVlc3QsIG1fdHJhbnNhY3Rpb24tPmJhY2tlbmQoKSwgZWMpOwor
ICAgIC8vIEZJWE1FOiBQYXNzIHRocm91Z2gga2V5UGF0aEtleSBhcyBrZXkgdG8gc2ltcGxpZnkg
YmFjayBlbmQgaW1wbGVtZW50YXRpb24uCisgICAgbV9iYWNrZW5kLT5wdXQodmFsdWUucmVsZWFz
ZSgpLCBrZXkucmVsZWFzZSgpLCBwdXRNb2RlLCByZXF1ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNr
ZW5kKCksIGVjKTsKICAgICBpZiAoZWMpIHsKICAgICAgICAgcmVxdWVzdC0+bWFya0Vhcmx5RGVh
dGgoKTsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNjksMTEgKzE4OSwxNCBAQCBQYXNzUmVmUHRy
PElEQlJlcXVlc3Q+IElEQk9iamVjdFN0b3JlOjpkZWxldGVGdW5jdGlvbihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjbwogICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5W
QUxJRF9TVEFURV9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KKyAgICBpZiAoIW1fdHJh
bnNhY3Rpb24tPmlzQWN0aXZlKCkpIHsKKyAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlv
bjo6VFJBTlNBQ1RJT05fSU5BQ1RJVkVfRVJSOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAg
ICAgaWYgKG1fdHJhbnNhY3Rpb24tPmlzUmVhZE9ubHkoKSkgewogICAgICAgICBlYyA9IElEQkRh
dGFiYXNlRXhjZXB0aW9uOjpSRUFEX09OTFlfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9
Ci0KICAgICBpZiAoIWtleVJhbmdlKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OkRBVEFfRVJSOwogICAgICAgICByZXR1cm4gMDsKQEAgLTIwNCw2ICsyMjcsMTAgQEAgUGFz
c1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6Y2xlYXIoU2NyaXB0RXhlY3V0aW9u
Q29udGV4dCogY29udGV4dCwgRXgKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6
SURCX0lOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYg
KCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VF
eGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgfQogICAgIGlmIChtX3RyYW5zYWN0aW9uLT5pc1JlYWRPbmx5KCkpIHsKICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6UkVBRF9PTkxZX0VSUjsKICAgICAgICAgcmV0dXJuIDA7
CkBAIC0yMzksMTEgKzI2NiwyMiBAQCBQYXNzUmVmUHRyPElEQkluZGV4PiBJREJPYmplY3RTdG9y
ZTo6Y3JlYXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBJREJLZQogICAgICAgICBl
YyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpJREJfSU5WQUxJRF9TVEFURV9FUlI7CiAgICAgICAg
IHJldHVybiAwOwogICAgIH0KLQorICAgIGlmICghbV90cmFuc2FjdGlvbi0+aXNBY3RpdmUoKSkg
eworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpUUkFOU0FDVElPTl9JTkFDVElW
RV9FUlI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICBpZiAoIWtleVBhdGguaXNWYWxp
ZCgpKSB7CiAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OklEQl9TWU5UQVhfRVJS
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKG5hbWUuaXNOdWxsKCkpIHsKKyAg
ICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX1RZUEVfRVJSOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKG1fbWV0YWRhdGEuaW5kZXhlcy5jb250YWlucyhuYW1l
KSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpDT05TVFJBSU5UX0VSUjsK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogCiAgICAgYm9vbCB1bmlxdWUgPSBmYWxzZTsKICAg
ICBvcHRpb25zLmdldCgidW5pcXVlIiwgdW5pcXVlKTsKQEAgLTMwNCw2ICszNDIsMTQgQEAgdm9p
ZCBJREJPYmplY3RTdG9yZTo6ZGVsZXRlSW5kZXgoY29uc3QgU3RyaW5nJiBuYW1lLCBFeGNlcHRp
b25Db2RlJiBlYykKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFM
SURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIGlmICghbV90cmFuc2Fj
dGlvbi0+aXNBY3RpdmUoKSkgeworICAgICAgICBlYyA9IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpU
UkFOU0FDVElPTl9JTkFDVElWRV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYg
KCFtX21ldGFkYXRhLmluZGV4ZXMuY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6SURCX05PVF9GT1VORF9FUlI7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CiAKICAgICBtX2JhY2tlbmQtPmRlbGV0ZUluZGV4KG5hbWUsIG1fdHJhbnNhY3Rpb24tPmJh
Y2tlbmQoKSwgZWMpOwogICAgIGlmICghZWMpIHsKQEAgLTMyNSw2ICszNzEsMTAgQEAgUGFzc1Jl
ZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RTdG9yZTo6b3BlbkN1cnNvcihTY3JpcHRFeGVjdXRp
b25Db250ZXh0KiBjb250ZXgKICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURC
X0lOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKCFt
X3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZFX0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQogICAgIHVuc2lnbmVkIHNob3J0IGRpcmVjdGlvbiA9IElEQkN1cnNvcjo6c3RyaW5nVG9EaXJl
Y3Rpb24oZGlyZWN0aW9uU3RyaW5nLCBlYyk7CiAgICAgaWYgKGVjKQogICAgICAgICByZXR1cm4g
MDsKQEAgLTM3NSw2ICs0MjUsMTAgQEAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBJREJPYmplY3RT
dG9yZTo6Y291bnQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4dCwgUGEKICAgICAgICAg
ZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwogICAgICAg
ICByZXR1cm4gMDsKICAgICB9CisgICAgaWYgKCFtX3RyYW5zYWN0aW9uLT5pc0FjdGl2ZSgpKSB7
CisgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OlRSQU5TQUNUSU9OX0lOQUNUSVZF
X0VSUjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIFJlZlB0cjxJREJSZXF1ZXN0PiBy
ZXF1ZXN0ID0gSURCUmVxdWVzdDo6Y3JlYXRlKGNvbnRleHQsIElEQkFueTo6Y3JlYXRlKHRoaXMp
LCBtX3RyYW5zYWN0aW9uLmdldCgpKTsKICAgICBtX2JhY2tlbmQtPmNvdW50KHJhbmdlLCByZXF1
ZXN0LCBtX3RyYW5zYWN0aW9uLT5iYWNrZW5kKCksIGVjKTsKICAgICBpZiAoZWMpIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJPYmplY3RTdG9yZS5oCmluZGV4
IDgxODFlYjkzMWZhNzBjYzU5MDA0MmYyMjU2MmNmNzhkYzJjY2Y0YzEuLjY3YjM2Zjk5NTUxN2E5
Yjg0ZDJhMWMyMjUyNDk1OGZjZGFhNDg0Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvaW5kZXhlZGRiL0lEQk9iamVjdFN0b3JlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCT2JqZWN0U3RvcmUuaApAQCAtOTUsNiArOTUsNyBAQCBwdWJsaWM6
CiAgICAgUGFzc1JlZlB0cjxJREJSZXF1ZXN0PiBjb3VudChTY3JpcHRFeGVjdXRpb25Db250ZXh0
KiwgUGFzc1JlZlB0cjxJREJLZXlSYW5nZT4sIEV4Y2VwdGlvbkNvZGUmKTsKICAgICBQYXNzUmVm
UHRyPElEQlJlcXVlc3Q+IGNvdW50KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQqLCBQYXNzUmVmUHRy
PElEQktleT4sIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIFBhc3NSZWZQdHI8SURCUmVxdWVzdD4g
cHV0KElEQk9iamVjdFN0b3JlQmFja2VuZEludGVyZmFjZTo6UHV0TW9kZSwgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCosIFBhc3NSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiwgUGFzc1JlZlB0
cjxJREJLZXk+LCBFeGNlcHRpb25Db2RlJik7CiAgICAgdm9pZCBtYXJrRGVsZXRlZCgpIHsgbV9k
ZWxldGVkID0gdHJ1ZTsgfQogICAgIHZvaWQgdHJhbnNhY3Rpb25GaW5pc2hlZCgpOwogCkBAIC0x
MDMsNyArMTA0LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIElEQk9iamVjdFN0b3JlKGNv
bnN0IElEQk9iamVjdFN0b3JlTWV0YWRhdGEmLCBQYXNzUmVmUHRyPElEQk9iamVjdFN0b3JlQmFj
a2VuZEludGVyZmFjZT4sIElEQlRyYW5zYWN0aW9uKik7Ci0gICAgdm9pZCByZW1vdmVUcmFuc2Fj
dGlvbkZyb21QZW5kaW5nTGlzdCgpOwogCiAgICAgSURCT2JqZWN0U3RvcmVNZXRhZGF0YSBtX21l
dGFkYXRhOwogICAgIFJlZlB0cjxJREJPYmplY3RTdG9yZUJhY2tlbmRJbnRlcmZhY2U+IG1fYmFj
a2VuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRiL0lEQk9i
amVjdFN0b3JlQmFja2VuZEltcGwuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVk
ZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKaW5kZXggYTQ2ODY1NGUwN2I4MTYyZjFh
NTdiZDUwNTRlMDM1OWM4ZTJjN2U0ZC4uYWYzMGVmMzcxMTVhNTExMzljNTIwMWIwOWFjYmI0OTQy
NzJhMjM0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9p
bmRleGVkZGIvSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbC5jcHAKQEAgLTQyLDcgKzQyLDcgQEAK
ICNpbmNsdWRlICJJREJLZXlQYXRoQmFja2VuZEltcGwuaCIKICNpbmNsdWRlICJJREJLZXlSYW5n
ZS5oIgogI2luY2x1ZGUgIklEQlRyYWNpbmcuaCIKLSNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJh
Y2tlbmRJbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJJREJUcmFuc2FjdGlvbkJhY2tlbmRJbXBsLmgi
CiAjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CkBAIC05Miw3ICs5Miw3IEBAIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0
KFBhc3NSZWZQdHI8SURCS2V5UmFuZ2U+IHBycEtleVJhbmdlLCBQYXNzUmVmCiAKIHZvaWQgSURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6Z2V0SW50ZXJuYWwoU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCosIFBhc3NSZWZQdHI8SURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUsIFBh
c3NSZWZQdHI8SURCS2V5UmFuZ2U+IGtleVJhbmdlLCBQYXNzUmVmUHRyPElEQkNhbGxiYWNrcz4g
Y2FsbGJhY2tzKQogewotICAgIElEQl9UUkFDRSgiSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6
Z2V0QnlSYW5nZUludGVybmFsIik7CisgICAgSURCX1RSQUNFKCJJREJPYmplY3RTdG9yZUJhY2tl
bmRJbXBsOjpnZXRJbnRlcm5hbCIpOwogICAgIFJlZlB0cjxJREJLZXk+IGtleTsKICAgICBpZiAo
a2V5UmFuZ2UtPmlzT25seUtleSgpKQogICAgICAgICBrZXkgPSBrZXlSYW5nZS0+bG93ZXIoKTsK
QEAgLTE0OCw1MyArMTQ4LDYgQEAgdm9pZCBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjpwdXQo
UGFzc1JlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHBycFZhbHVlLAogICAgIFJlZlB0cjxJ
REJDYWxsYmFja3M+IGNhbGxiYWNrcyA9IHBycENhbGxiYWNrczsKICAgICBSZWZQdHI8SURCVHJh
bnNhY3Rpb25CYWNrZW5kSW50ZXJmYWNlPiB0cmFuc2FjdGlvbiA9IHRyYW5zYWN0aW9uUHRyOwog
Ci0gICAgaWYgKHB1dE1vZGUgIT0gQ3Vyc29yVXBkYXRlKSB7Ci0gICAgICAgIGNvbnN0IGJvb2wg
YXV0b0luY3JlbWVudCA9IG9iamVjdFN0b3JlLT5hdXRvSW5jcmVtZW50KCk7Ci0gICAgICAgIGNv
bnN0IGJvb2wgaGFzS2V5UGF0aCA9ICFvYmplY3RTdG9yZS0+bV9rZXlQYXRoLmlzTnVsbCgpOwot
Ci0gICAgICAgIGlmIChoYXNLZXlQYXRoICYmIGtleSkgewotICAgICAgICAgICAgZWMgPSBJREJE
YXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
IH0KLSAgICAgICAgaWYgKCFoYXNLZXlQYXRoICYmICFhdXRvSW5jcmVtZW50ICYmICFrZXkpIHsK
LSAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChoYXNLZXlQYXRoKSB7Ci0gICAg
ICAgICAgICBSZWZQdHI8SURCS2V5PiBrZXlQYXRoS2V5ID0gZmV0Y2hLZXlGcm9tS2V5UGF0aCh2
YWx1ZS5nZXQoKSwgb2JqZWN0U3RvcmUtPm1fa2V5UGF0aCk7Ci0gICAgICAgICAgICBpZiAoa2V5
UGF0aEtleSAmJiAha2V5UGF0aEtleS0+aXNWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgZWMg
PSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFhdXRvSW5jcmVtZW50ICYmICFrZXlQ
YXRoS2V5KSB7Ci0gICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFU
QV9FUlI7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKGF1dG9JbmNyZW1lbnQgJiYgIWtleVBhdGhLZXkpIHsKLSAgICAgICAgICAgICAgICBS
ZWZQdHI8SURCS2V5PiBkdW1teUtleSA9IElEQktleTo6Y3JlYXRlTnVtYmVyKC0xKTsKLSAgICAg
ICAgICAgICAgICBSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB2YWx1ZUFmdGVySW5qZWN0
aW9uID0gaW5qZWN0S2V5SW50b0tleVBhdGgoZHVtbXlLZXksIHZhbHVlLCBvYmplY3RTdG9yZS0+
bV9rZXlQYXRoKTsKLSAgICAgICAgICAgICAgICBpZiAoIXZhbHVlQWZ0ZXJJbmplY3Rpb24pIHsK
LSAgICAgICAgICAgICAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6REFUQV9FUlI7
Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtleSAmJiAha2V5LT5pc1ZhbGlkKCkpIHsK
LSAgICAgICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRpb246OkRBVEFfRVJSOwotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgQVNTRVJUKGtl
eSk7Ci0gICAgICAgIGNvbnN0IGJvb2wgaGFzS2V5UGF0aCA9ICFvYmplY3RTdG9yZS0+bV9rZXlQ
YXRoLmlzTnVsbCgpOwotICAgICAgICBpZiAoaGFzS2V5UGF0aCkgewotICAgICAgICAgICAgUmVm
UHRyPElEQktleT4ga2V5UGF0aEtleSA9IGZldGNoS2V5RnJvbUtleVBhdGgodmFsdWUuZ2V0KCks
IG9iamVjdFN0b3JlLT5tX2tleVBhdGgpOwotICAgICAgICAgICAgaWYgKCFrZXlQYXRoS2V5IHx8
ICFrZXlQYXRoS2V5LT5pc0VxdWFsKGtleS5nZXQoKSkpIHsKLSAgICAgICAgICAgICAgICBlYyA9
IElEQkRhdGFiYXNlRXhjZXB0aW9uOjpEQVRBX0VSUjsKLSAgICAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBpZiAoIXRyYW5zYWN0aW9u
LT5zY2hlZHVsZVRhc2soCiAgICAgICAgICAgICBjcmVhdGVDYWxsYmFja1Rhc2soJklEQk9iamVj
dFN0b3JlQmFja2VuZEltcGw6OnB1dEludGVybmFsLCBvYmplY3RTdG9yZSwgdmFsdWUsIGtleSwg
cHV0TW9kZSwgY2FsbGJhY2tzLCB0cmFuc2FjdGlvbiksCiAgICAgICAgICAgICAvLyBGSVhNRTog
T25lIG9mIHRoZXNlIHBlciBwdXQoKSBpcyBvdmVya2lsbCwgc2luY2UgaXQncyBzaW1wbHkgYSBj
YWNoZSBpbnZhbGlkYXRpb24uCkBAIC00NTksMTggKzQxMiw4IEBAIGJvb2wgSURCT2JqZWN0U3Rv
cmVCYWNrZW5kSW1wbDo6cG9wdWxhdGVJbmRleChJREJCYWNraW5nU3RvcmUmIGJhY2tpbmdTdG9y
ZSwgaW50CiAKIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW50ZXJmYWNlPiBJREJPYmplY3RT
dG9yZUJhY2tlbmRJbXBsOjpjcmVhdGVJbmRleChjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IElE
QktleVBhdGgmIGtleVBhdGgsIGJvb2wgdW5pcXVlLCBib29sIG11bHRpRW50cnksIElEQlRyYW5z
YWN0aW9uQmFja2VuZEludGVyZmFjZSogdHJhbnNhY3Rpb24sIEV4Y2VwdGlvbkNvZGUmIGVjKQog
ewotICAgIGlmIChuYW1lLmlzTnVsbCgpKSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNl
cHRpb246OklEQl9UWVBFX0VSUjsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotICAgIGlmICht
X2luZGV4ZXMuY29udGFpbnMobmFtZSkpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2Vw
dGlvbjo6Q09OU1RSQUlOVF9FUlI7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBpZiAo
dHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJUcmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsK
LSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJS
OwotICAgICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgQVNTRVJUKHRyYW5zYWN0aW9uLT5tb2Rl
KCkgPT0gSURCVHJhbnNhY3Rpb246OlZFUlNJT05fQ0hBTkdFKTsKKyAgICBBU1NFUlQoIW1faW5k
ZXhlcy5jb250YWlucyhuYW1lKSk7CiAKICAgICBSZWZQdHI8SURCSW5kZXhCYWNrZW5kSW1wbD4g
aW5kZXggPSBJREJJbmRleEJhY2tlbmRJbXBsOjpjcmVhdGUobV9kYXRhYmFzZSwgdGhpcywgbmFt
ZSwga2V5UGF0aCwgdW5pcXVlLCBtdWx0aUVudHJ5KTsKICAgICBBU1NFUlQoaW5kZXgtPm5hbWUo
KSA9PSBuYW1lKTsKQEAgLTUyMCwxOCArNDYzLDExIEBAIFBhc3NSZWZQdHI8SURCSW5kZXhCYWNr
ZW5kSW50ZXJmYWNlPiBJREJPYmplY3RTdG9yZUJhY2tlbmRJbXBsOjppbmRleChjb25zdCBTdHJp
CiAKIHZvaWQgSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRlSW5kZXgoY29uc3QgU3Ry
aW5nJiBuYW1lLCBJREJUcmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIHRyYW5zYWN0aW9uLCBF
eGNlcHRpb25Db2RlJiBlYykKIHsKLSAgICBpZiAodHJhbnNhY3Rpb24tPm1vZGUoKSAhPSBJREJU
cmFuc2FjdGlvbjo6VkVSU0lPTl9DSEFOR0UpIHsKLSAgICAgICAgZWMgPSBJREJEYXRhYmFzZUV4
Y2VwdGlvbjo6SURCX0lOVkFMSURfU1RBVEVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgUmVmUHRyPElEQkluZGV4QmFja2VuZEltcGw+IGluZGV4ID0gbV9pbmRleGVzLmdldChu
YW1lKTsKLSAgICBpZiAoIWluZGV4KSB7Ci0gICAgICAgIGVjID0gSURCRGF0YWJhc2VFeGNlcHRp
b246OklEQl9OT1RfRk9VTkRfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIEFTU0VS
VCh0cmFuc2FjdGlvbi0+bW9kZSgpID09IElEQlRyYW5zYWN0aW9uOjpWRVJTSU9OX0NIQU5HRSk7
CisgICAgQVNTRVJUKG1faW5kZXhlcy5jb250YWlucyhuYW1lKSk7CiAKICAgICBSZWZQdHI8SURC
T2JqZWN0U3RvcmVCYWNrZW5kSW1wbD4gb2JqZWN0U3RvcmUgPSB0aGlzOworICAgIFJlZlB0cjxJ
REJJbmRleEJhY2tlbmRJbXBsPiBpbmRleCA9IG1faW5kZXhlcy5nZXQobmFtZSk7CiAgICAgUmVm
UHRyPElEQlRyYW5zYWN0aW9uQmFja2VuZEludGVyZmFjZT4gdHJhbnNhY3Rpb25QdHIgPSB0cmFu
c2FjdGlvbjsKICAgICBpZiAoIXRyYW5zYWN0aW9uLT5zY2hlZHVsZVRhc2soCiAgICAgICAgICAg
ICAgIGNyZWF0ZUNhbGxiYWNrVGFzaygmSURCT2JqZWN0U3RvcmVCYWNrZW5kSW1wbDo6ZGVsZXRl
SW5kZXhJbnRlcm5hbCwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhl
ZGRiL0lEQlRyYW5zYWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvaW5kZXhlZGRi
L0lEQlRyYW5zYWN0aW9uLmNwcAppbmRleCA3MDg3YzY1N2UwNjY4NmMxN2QxNWIzNmQ4OGM2OTI0
OWQyM2U5YjU5Li42YWQzMDA3MjM4ZWYzNmY2NThmNmMyMmI1ZWI5YzZhNzM2Nzc0NWE1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2FjdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24u
Y3BwCkBAIC04NCw2ICs4NCw3IEBAIElEQlRyYW5zYWN0aW9uOjpJREJUcmFuc2FjdGlvbihTY3Jp
cHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0LCBQYXNzUmVmUHRyPElEQlRyCiAgICAgLCBtX2Jh
Y2tlbmQoYmFja2VuZCkKICAgICAsIG1fZGF0YWJhc2UoZGIpCiAgICAgLCBtX21vZGUobW9kZSkK
KyAgICAsIG1fYWN0aXZlKHRydWUpCiAgICAgLCBtX3RyYW5zYWN0aW9uRmluaXNoZWQoZmFsc2Up
CiAgICAgLCBtX2NvbnRleHRTdG9wcGVkKGZhbHNlKQogewpAQCAtMTkzLDYgKzE5NCw3IEBAIHZv
aWQgSURCVHJhbnNhY3Rpb246OmFib3J0KCkKIHsKICAgICBpZiAobV90cmFuc2FjdGlvbkZpbmlz
aGVkKQogICAgICAgICByZXR1cm47CisgICAgbV9hY3RpdmUgPSBmYWxzZTsKICAgICBSZWZQdHI8
SURCVHJhbnNhY3Rpb24+IHNlbGZSZWYgPSB0aGlzOwogICAgIGlmIChtX2JhY2tlbmQpCiAgICAg
ICAgIG1fYmFja2VuZC0+YWJvcnQoKTsKQEAgLTI0Miw2ICsyNDQsNyBAQCB2b2lkIElEQlRyYW5z
YWN0aW9uOjp1bnJlZ2lzdGVyUmVxdWVzdChJREJSZXF1ZXN0KiByZXF1ZXN0KQogdm9pZCBJREJU
cmFuc2FjdGlvbjo6b25BYm9ydCgpCiB7CiAgICAgQVNTRVJUKCFtX3RyYW5zYWN0aW9uRmluaXNo
ZWQpOworICAgIG1fYWN0aXZlID0gZmFsc2U7CiAgICAgd2hpbGUgKCFtX2NoaWxkUmVxdWVzdHMu
aXNFbXB0eSgpKSB7CiAgICAgICAgIElEQlJlcXVlc3QqIHJlcXVlc3QgPSAqbV9jaGlsZFJlcXVl
c3RzLmJlZ2luKCk7CiAgICAgICAgIG1fY2hpbGRSZXF1ZXN0cy5yZW1vdmUocmVxdWVzdCk7CkBA
IC0yNjUsNiArMjY4LDcgQEAgdm9pZCBJREJUcmFuc2FjdGlvbjo6b25BYm9ydCgpCiB2b2lkIElE
QlRyYW5zYWN0aW9uOjpvbkNvbXBsZXRlKCkKIHsKICAgICBBU1NFUlQoIW1fdHJhbnNhY3Rpb25G
aW5pc2hlZCk7CisgICAgbV9hY3RpdmUgPSBmYWxzZTsKICAgICBtX29iamVjdFN0b3JlQ2xlYW51
cE1hcC5jbGVhcigpOwogICAgIGNsb3NlT3BlbkN1cnNvcnMoKTsKICAgICBtX2RhdGFiYXNlLT50
cmFuc2FjdGlvbkZpbmlzaGVkKHRoaXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9pbmRleGVkZGIvSURCVHJhbnNhY3Rpb24uaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
aW5kZXhlZGRiL0lEQlRyYW5zYWN0aW9uLmgKaW5kZXggMGIyZGVjNmVjMDhmMWQxZTJiOTYwZWRi
MDExNmZjZjg5ZDFjZjk2ZC4uMmNlODJiMWNmNzdhYWYyMGZkMjI0MGRhMWI4ZjY4YzFiOTFkMjJl
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9pbmRleGVkZGIvSURCVHJhbnNh
Y3Rpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL2luZGV4ZWRkYi9JREJUcmFuc2Fj
dGlvbi5oCkBAIC02OCwxMiArNjgsMTMgQEAgcHVibGljOgogICAgIHN0YXRpYyBjb25zdCBBdG9t
aWNTdHJpbmcmIG1vZGVUb1N0cmluZyhNb2RlLCBFeGNlcHRpb25Db2RlJik7CiAKICAgICBJREJU
cmFuc2FjdGlvbkJhY2tlbmRJbnRlcmZhY2UqIGJhY2tlbmQoKSBjb25zdDsKKyAgICBib29sIGlz
QWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmU7IH0KICAgICBib29sIGlzRmluaXNoZWQo
KSBjb25zdDsKKyAgICBib29sIGlzUmVhZE9ubHkoKSBjb25zdCB7IHJldHVybiBtX21vZGUgPT0g
UkVBRF9PTkxZOyB9CiAgICAgYm9vbCBpc1ZlcnNpb25DaGFuZ2UoKSBjb25zdCB7IHJldHVybiBt
X21vZGUgPT0gVkVSU0lPTl9DSEFOR0U7IH0KIAogICAgIC8vIEltcGxlbWVudCB0aGUgSURCVHJh
bnNhY3Rpb24gSURMCiAgICAgY29uc3QgU3RyaW5nJiBtb2RlKCkgY29uc3Q7Ci0gICAgYm9vbCBp
c1JlYWRPbmx5KCkgY29uc3QgeyByZXR1cm4gbV9tb2RlID09IFJFQURfT05MWTsgfQogICAgIElE
QkRhdGFiYXNlKiBkYigpIGNvbnN0OwogICAgIFBhc3NSZWZQdHI8RE9NRXJyb3I+IGVycm9yKEV4
Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICB2b2lkIHNldEVycm9yKFBhc3NSZWZQdHI8RE9NRXJy
b3I+KTsKQEAgLTEzNSw2ICsxMzYsNyBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxJREJUcmFuc2Fj
dGlvbkJhY2tlbmRJbnRlcmZhY2U+IG1fYmFja2VuZDsKICAgICBSZWZQdHI8SURCRGF0YWJhc2U+
IG1fZGF0YWJhc2U7CiAgICAgY29uc3QgTW9kZSBtX21vZGU7CisgICAgYm9vbCBtX2FjdGl2ZTsK
ICAgICBib29sIG1fdHJhbnNhY3Rpb25GaW5pc2hlZDsgLy8gSXMgaXQgcG9zc2libGUgdGhhdCB3
ZSdsbCBmaXJlIGFueSBtb3JlIGV2ZW50cyBvciBhbGxvdyBhbnkgbmV3IHJlcXVlc3RzPyBJZiBu
b3QsIHdlJ3JlIGZpbmlzaGVkLgogICAgIGJvb2wgbV9jb250ZXh0U3RvcHBlZDsKICAgICBSZWZQ
dHI8RE9NRXJyb3I+IG1fZXJyb3I7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>