<?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>154937</bug_id>
          
          <creation_ts>2016-03-02 16:28:43 -0800</creation_ts>
          <short_desc>Heap Snapshot should include different Edge types and data (Property, Index, Variable)</short_desc>
          <delta_ts>2016-03-07 15:45:33 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joseph Pecoraro">joepeck</reporter>
          <assigned_to name="Joseph Pecoraro">joepeck</assigned_to>
          <cc>bburg</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>keith_miller</cc>
    
    <cc>kling</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>timothy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1170004</commentid>
    <comment_count>0</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-02 16:28:43 -0800</bug_when>
    <thetext>* SUMMARY
Heap Snapshot should include different Edge types and data (Property, Index, Variable).

This will be useful in visualizing exactly what the retaining edge it.

* Property Edge
- data is the property name string
- JS*Object with inline storage ({x:&quot;x&quot;, y:&quot;y&quot;})
- JS*Object with out of line storage (objects with a bunch of properties, dictionary mode structures)
- JS*Object with index &gt; 2^32 =&gt; becomes a string property

We should mark the edge from &quot;Object&quot; cell (myObject) to &quot;string&quot; cell (&quot;value&quot;) is a Property with name &quot;propertyName&quot; in example:

    var myObject = {};
    myObject.propertyName = &quot;value&quot;;


* Index Edge
- data is the uint32_t index
- JS*Object with indexed values (o[0])

We should mark the edge from &quot;Object&quot; cell (myArray) to &quot;string&quot; cell (&quot;value&quot;) is an Index with index 100 in example:

    var myArray = [];
    myArray[23] = &quot;value&quot;;


* Variable Edge
- data is the variable name string
- JSScope subclasses such as (JSGlobalLexicalEnvironment, JSLexicalEnvironment, JSSegmentedVariableObject)
- a closure variable name in global scope
- a closure variable name in function scope

We should mark the edge from &quot;Function&quot; cell&apos;s scope (myFunction) to &quot;string&quot; cell (&quot;value&quot;) is a Variable with name &quot;closureVariable&quot; in example:

      var closureVariable = &quot;value&quot;;
      function myFunction() {
          console.log(closureVariable);
      }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170006</commentid>
    <comment_count>1</comment_count>
      <attachid>272702</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-02 16:34:42 -0800</bug_when>
    <thetext>Created attachment 272702
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170016</commentid>
    <comment_count>2</comment_count>
      <attachid>272702</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-02 16:53:12 -0800</bug_when>
    <thetext>Comment on attachment 272702
[PATCH] Proposed Fix

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

&gt; Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:97
&gt; +    std::lock_guard&lt;Lock&gt; lock(m_appendingEdgeMutex);

The m_appendingEdgeMutex mutex guards the data in m_edges, so we should call it m_edgesMutex. You would take the mutex even if you were not appending. For example, you would take the mutex if you were reading.

&gt; Source/JavaScriptCore/runtime/JSEnvironmentRecord.cpp:47
&gt; +        ConcurrentJITLocker locker(thisObject-&gt;symbolTable()-&gt;m_lock);

I don&apos;t think you need this because you&apos;re not writing to a value that the JIT will read.

&gt; Source/JavaScriptCore/runtime/JSObject.cpp:197
&gt; +        if (mode == VisitChildrenModeNormal)
&gt; +            visitor.appendValues(butterfly-&gt;contiguous().data(), butterfly-&gt;publicLength());
&gt; +        else
&gt; +            visitor.appendAndSnapshotIndexedProperties(butterfly-&gt;contiguous().data(), butterfly-&gt;publicLength());
&gt;          break;
&gt;      case ALL_ARRAY_STORAGE_INDEXING_TYPES:
&gt; -        visitor.appendValues(butterfly-&gt;arrayStorage()-&gt;m_vector, butterfly-&gt;arrayStorage()-&gt;vectorLength());
&gt; +        if (mode == VisitChildrenModeNormal)
&gt; +            visitor.appendValues(butterfly-&gt;arrayStorage()-&gt;m_vector, butterfly-&gt;arrayStorage()-&gt;vectorLength());
&gt; +        else
&gt; +            visitor.appendAndSnapshotIndexedProperties(butterfly-&gt;arrayStorage()-&gt;m_vector, butterfly-&gt;arrayStorage()-&gt;vectorLength());

I&apos;m worried about snapshotting intruding into the logic of GC. GC is complex and easy to get wrong, and I&apos;d like to keep it as simple as possible. I&apos;d really prefer not to intermingle &quot;do this or else we&apos;ll crash and/or have a security bug&quot; code with &quot;please gather this diagnostic information&quot; code.

Can we do better here at separating the logic of GC from the logic of recording diagnostic edges?

Here&apos;s one idea:

Add a new methodTable function: heapSnapshot. At the end of a heap snapshotting GC, iterate all live objects in the heap and call heapSnapshot on them.

This may even make it possible to perform a snapshot without running a GC.

What do you think?

&gt; Source/JavaScriptCore/runtime/JSSegmentedVariableObject.cpp:72
&gt; +        ConcurrentJITLocker locker(thisObject-&gt;symbolTable()-&gt;m_lock);

I don&apos;t think you need this because you&apos;re not writing to a value that the JIT will read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170044</commentid>
    <comment_count>3</comment_count>
      <attachid>272702</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-02 17:43:19 -0800</bug_when>
    <thetext>Comment on attachment 272702
[PATCH] Proposed Fix

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

&gt;&gt; Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:97
&gt;&gt; +    std::lock_guard&lt;Lock&gt; lock(m_appendingEdgeMutex);
&gt; 
&gt; The m_appendingEdgeMutex mutex guards the data in m_edges, so we should call it m_edgesMutex. You would take the mutex even if you were not appending. For example, you would take the mutex if you were reading.

At this point we only have simultaneous access to m_edges during building. When building is complete we don&apos;t use a lock to access the list. I don&apos;t foresee a need to access edges while building, but perhaps the name &quot;m_buildingEdgesMutex&quot; would be clearer? Then if someone repurposes this lock it would be clear that they should rename it.

&gt;&gt; Source/JavaScriptCore/runtime/JSObject.cpp:197
&gt;&gt; +            visitor.appendAndSnapshotIndexedProperties(butterfly-&gt;arrayStorage()-&gt;m_vector, butterfly-&gt;arrayStorage()-&gt;vectorLength());
&gt; 
&gt; I&apos;m worried about snapshotting intruding into the logic of GC. GC is complex and easy to get wrong, and I&apos;d like to keep it as simple as possible. I&apos;d really prefer not to intermingle &quot;do this or else we&apos;ll crash and/or have a security bug&quot; code with &quot;please gather this diagnostic information&quot; code.
&gt; 
&gt; Can we do better here at separating the logic of GC from the logic of recording diagnostic edges?
&gt; 
&gt; Here&apos;s one idea:
&gt; 
&gt; Add a new methodTable function: heapSnapshot. At the end of a heap snapshotting GC, iterate all live objects in the heap and call heapSnapshot on them.
&gt; 
&gt; This may even make it possible to perform a snapshot without running a GC.
&gt; 
&gt; What do you think?

I think that will work well!

- Still have SlotVisitor::append add a basic edge during snapshotting GC (gets us all internal edges)
- For these few places where we have things we want to better label:
  - SlotVisitor::appendHidden (name TBD) behaves the same as SlotVisitor::append without informing the snapshot builder
  - Method Table function heapSnapshot on live cells to name the hidden edges

My original concern was making sure snapshotting edges had 100% accurate data so I put it in visitChildren. However, since there are only a handful of cases that want extra data it would be easy to move that out of visitChildren. Also, it is an easy pattern to follow.

---

I also have plans to do a micro snapshot without running GC by looking at the heap. However the plans for that are only for node data and not edges. I&apos;m not sure how useful it would be to gather edge data outside of a GC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170069</commentid>
    <comment_count>4</comment_count>
      <attachid>272702</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-02 19:52:30 -0800</bug_when>
    <thetext>Comment on attachment 272702
[PATCH] Proposed Fix

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

&gt;&gt; Source/JavaScriptCore/runtime/JSSegmentedVariableObject.cpp:72
&gt;&gt; +        ConcurrentJITLocker locker(thisObject-&gt;symbolTable()-&gt;m_lock);
&gt; 
&gt; I don&apos;t think you need this because you&apos;re not writing to a value that the JIT will read.

These locks are only used to get the iterator begin/end. I don&apos;t see any way to iterate the symbolTable() without a ConcurrentJITLocker. I may have some questions about this tomorrow.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170071</commentid>
    <comment_count>5</comment_count>
      <attachid>272722</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-02 19:53:13 -0800</bug_when>
    <thetext>Created attachment 272722
[PATCH] Proposed Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170072</commentid>
    <comment_count>6</comment_count>
      <attachid>272722</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-02 19:57:18 -0800</bug_when>
    <thetext>Comment on attachment 272722
[PATCH] Proposed Fix

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

&gt; Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:97
&gt; +void HeapSnapshotBuilder::appendPropertyNameEdge(JSCell* from, JSCell* to, UniquedStringImpl* propertyName)
&gt; +{
&gt; +    ASSERT(m_profiler.activeSnapshotBuilder() == this);
&gt; +    ASSERT(to);
&gt; +
&gt; +    std::lock_guard&lt;Lock&gt; lock(m_buildingEdgeMutex);

With gathering extra heap snapshot data (named edges) no longer happening via SlotVisitor it is no longer in parallel, so we could avoid locking in these specialized cases. However it may be worth adding a parallel way to visit live cells.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170216</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-03 08:59:05 -0800</bug_when>
    <thetext>&gt; &gt;&gt; Source/JavaScriptCore/heap/HeapSnapshotBuilder.cpp:97
&gt; &gt;&gt; +    std::lock_guard&lt;Lock&gt; lock(m_appendingEdgeMutex);
&gt; &gt; 
&gt; &gt; The m_appendingEdgeMutex mutex guards the data in m_edges, so we should call it m_edgesMutex. You would take the mutex even if you were not appending. For example, you would take the mutex if you were reading.
&gt; 
&gt; At this point we only have simultaneous access to m_edges during building.

Okeedokee.

&gt; - For these few places where we have things we want to better label:
&gt;   - SlotVisitor::appendHidden (name TBD) behaves the same as
&gt; SlotVisitor::append without informing the snapshot builder
&gt;   - Method Table function heapSnapshot on live cells to name the hidden edges

Is the purpose of appendHidden() just to say &quot;don&apos;t label this normally, because I&apos;m going to label it specially later in heapSnapshot()?&quot; If so, can we remove the distinction between append() and appendHidden(), and just have heapSnapshot() override or remove the edge added by append()? This will serve two goals: First, it will further reduce the overlap between the GC algorithm and the snapshotting algorithm; and second, it will ensure accurate accounting, by preventing cases where appendHidden() and heapSnapshot() get out of sync.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170540</commentid>
    <comment_count>8</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-03 23:50:56 -0800</bug_when>
    <thetext>&gt; &gt; - For these few places where we have things we want to better label:
&gt; &gt;   - SlotVisitor::appendHidden (name TBD) behaves the same as
&gt; &gt; SlotVisitor::append without informing the snapshot builder
&gt; &gt;   - Method Table function heapSnapshot on live cells to name the hidden edges
&gt; 
&gt; Is the purpose of appendHidden() just to say &quot;don&apos;t label this normally,
&gt; because I&apos;m going to label it specially later in heapSnapshot()?&quot;

Yep.

&gt; If so, can
&gt; we remove the distinction between append() and appendHidden(), and just have
&gt; heapSnapshot() override or remove the edge added by append()? This will
&gt; serve two goals: First, it will further reduce the overlap between the GC
&gt; algorithm and the snapshotting algorithm; and second, it will ensure
&gt; accurate accounting, by preventing cases where appendHidden() and
&gt; heapSnapshot() get out of sync.

I can move in that direction. To do it efficiently I think I will want to sort and de/dup the list of edges for serialization. Sorting the edges is something I had already considered doing for other reasons.

Do you want to see an updated patch taking this approach or can this be done in a follow-up?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1170543</commentid>
    <comment_count>9</comment_count>
      <attachid>272839</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2016-03-03 23:59:05 -0800</bug_when>
    <thetext>Created attachment 272839
[PATCH] Proposed Fix

Rebaselined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171771</commentid>
    <comment_count>10</comment_count>
      <attachid>272839</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-03-07 14:52:26 -0800</bug_when>
    <thetext>Comment on attachment 272839
[PATCH] Proposed Fix

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171811</commentid>
    <comment_count>11</comment_count>
      <attachid>272839</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-07 15:45:28 -0800</bug_when>
    <thetext>Comment on attachment 272839
[PATCH] Proposed Fix

Clearing flags on attachment: 272839

Committed r197712: &lt;http://trac.webkit.org/changeset/197712&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171812</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-03-07 15:45:33 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272702</attachid>
            <date>2016-03-02 16:34:42 -0800</date>
            <delta_ts>2016-03-02 19:53:13 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>edge-types-1.patch</filename>
            <type>text/plain</type>
            <size>29004</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGY2YWU1YmMuLjgyNWNjYjQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY1IEBACisyMDE2LTAzLTAxICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CisKKyAgICAgICAgSGVhcCBTbmFwc2hvdCBzaG91bGQg
aW5jbHVkZSBkaWZmZXJlbnQgRWRnZSB0eXBlcyBhbmQgZGF0YSAoUHJvcGVydHksIEluZGV4LCBW
YXJpYWJsZSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NDkzNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IER1cmluZyBoZWFwIHNuYXBzaG90dGluZyBnYXJiYWdlIGNvbGxlY3Rpb24gY2FwdHVyZSBleHRy
YSBkYXRhIGFib3V0CisgICAgICAgIGNlcnRhaW4gY2VsbCByZWZlcmVuY2VzLCBzdWNoIGFzIHRo
b3NlIGZvciBPYmplY3QgcHJvcGVydGllcywgaW5kZXhlcywKKyAgICAgICAgYW5kIHNjb3BlIHZh
cmlhYmxlcy4KKworICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmFwcGVuZEFuZFNuYXBzaG90SW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpTQzo6U2xvdFZp
c2l0b3I6OmFwcGVuZEFuZFNuYXBzaG90SW5kZXhlZFByb3BlcnRpZXMpOgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6c25hcHNob3RQcm9wZXJ0eU5hbWUpOgorICAgICAgICAoSlNDOjpTbG90
VmlzaXRvcjo6c25hcHNob3RWYXJpYWJsZU5hbWUpOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0
b3IuaDoKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6YXBwZW5kSGlkZGVuKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6
OmFwcGVuZFZhbHVlc0hpZGRlbik6CisgICAgICAgIEFkZCBuZXcgdmlzaXQgbWV0aG9kcyB0byBi
ZSB1c2VkIGR1cmluZyBoZWFwIHNuYXBzaG90dGluZyB0bworICAgICAgICBjYXB0dXJlIGV4dHJh
IGRhdGEgd2hlbiB2aXNpdGluZyBhIHJlZmVyZW5jZS4KKworICAgICAgICAqIGhlYXAvSGVhcFNu
YXBzaG90QnVpbGRlci5jcHA6CisgICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFw
cGVuZFByb3BlcnR5TmFtZUVkZ2UpOgorICAgICAgICAoSlNDOjpIZWFwU25hcHNob3RCdWlsZGVy
OjphcHBlbmRWYXJpYWJsZU5hbWVFZGdlKToKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90QnVp
bGRlcjo6YXBwZW5kSW5kZXhFZGdlKToKKyAgICAgICAgKEpTQzo6SGVhcFNuYXBzaG90QnVpbGRl
cjo6anNvbik6CisgICAgICAgICogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmg6CisgICAgICAg
IChKU0M6OkhlYXBTbmFwc2hvdEVkZ2U6OkhlYXBTbmFwc2hvdEVkZ2UpOgorICAgICAgICBDb25z
dHJ1Y3QgZWRnZXMgd2l0aCBleHRyYSBkYXRhLgorCisgICAgICAgICogcnVudGltZS9KU0Vudmly
b25tZW50UmVjb3JkLmNwcDoKKyAgICAgICAgKEpTQzo6SlNFbnZpcm9ubWVudFJlY29yZDo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlzaXRDaGls
ZHJlbik6CisgICAgICAgIENhcHR1cmUgc2NvcGUgdmFyaWFibGUgbmFtZXMgd2hlbiBoZWFwIHNu
YXBzaG90dGluZy4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRy
ZW4pOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgQ2FwdHVyZSBvYmpl
Y3QgcHJvcGVydHkgbmFtZXMgYW5kIGluZGV4IG5hbWVzIHdoZW4gaGVhcCBzbmFwc2hvdHRpbmcu
CisKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZTo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKyAg
ICAgICAgKiBydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U3RydWN0
dXJlOjpwcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgV2hlbiBwZXJmb3JtaW5nIGEgaGVhcCBzbmFw
c2hvdHRpbmcgY29sbGVjdGlvbiwgZG9uJ3QgY2xlYXIgdGhlCisgICAgICAgIHByb3BlcnR5IHRh
YmxlLCBzbyB0aGF0IGFjY2Vzc2luZyB0aGUgdGFibGUgZHVyaW5nIHRoaXMgR0MgaXMgb2theS4K
KyAgICAgICAgV2hlbiBzbmFwc2hvdHRpbmcsIHdlIHdvdWxkIHByZWZlciBpdGVyYXRpbmcgdGhl
IHByb3BlcnR5IHRhYmxlCisgICAgICAgIGZvciBwcm9wZXJ0eSBuYW1lcywgaW5zdGVhZCBvZiBh
bHdheXMgd2Fsa2luZyB0aGUgc3RydWN0dXJlIGNoYWluLgorCisgICAgICAgICogdGVzdHMvaGVh
cFByb2ZpbGVyL2RyaXZlci9kcml2ZXIuanM6CisgICAgICAgIChmb2xsb3dQYXRoKToKKyAgICAg
ICAgKiB0ZXN0cy9oZWFwUHJvZmlsZXIvcHJvcGVydHktZWRnZS10eXBlcy5qczogQWRkZWQuCisg
ICAgICAgICogdGVzdHMvaGVhcFByb2ZpbGVyL3ZhcmlhYmxlLWVkZ2UtdHlwZXMuanM6IEFkZGVk
LgorICAgICAgICBUZXN0cyBjb3ZlcmluZyB0aGUgZGlmZmVyZW50IGVkZ2UgdHlwZXMgYW5kIGRh
dGEgd2UgY2FwdHVyZS4KKwogMjAxNi0wMy0wMiAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9A
YXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBhYmlsaXR5IHRvIGdlbmVyYXRlIGEgSGVhcCBTbmFw
c2hvdApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90
QnVpbGRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWls
ZGVyLmNwcAppbmRleCBjZmY5ZTEzLi4yOGY5Yzc0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcApAQCAtODksNiArODksMzYgQEAg
dm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmRFZGdlKEpTQ2VsbCogZnJvbSwgSlNDZWxs
KiB0bykKICAgICBtX2VkZ2VzLmFwcGVuZChIZWFwU25hcHNob3RFZGdlKGZyb20sIHRvKSk7CiB9
CiAKK3ZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kUHJvcGVydHlOYW1lRWRnZShKU0Nl
bGwqIGZyb20sIEpTQ2VsbCogdG8sIFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eU5hbWUpCit7
CisgICAgQVNTRVJUKG1fcHJvZmlsZXIuYWN0aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7
CisgICAgQVNTRVJUKHRvKTsKKworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fYXBw
ZW5kaW5nRWRnZU11dGV4KTsKKworICAgIG1fZWRnZXMuYXBwZW5kKEhlYXBTbmFwc2hvdEVkZ2Uo
ZnJvbSwgdG8sIEVkZ2VUeXBlOjpQcm9wZXJ0eSwgcHJvcGVydHlOYW1lKSk7Cit9CisKK3ZvaWQg
SGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kVmFyaWFibGVOYW1lRWRnZShKU0NlbGwqIGZyb20s
IEpTQ2VsbCogdG8sIFVuaXF1ZWRTdHJpbmdJbXBsKiB2YXJpYWJsZU5hbWUpCit7CisgICAgQVNT
RVJUKG1fcHJvZmlsZXIuYWN0aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7CisgICAgQVNT
RVJUKHRvKTsKKworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fYXBwZW5kaW5nRWRn
ZU11dGV4KTsKKworICAgIG1fZWRnZXMuYXBwZW5kKEhlYXBTbmFwc2hvdEVkZ2UoZnJvbSwgdG8s
IEVkZ2VUeXBlOjpWYXJpYWJsZSwgdmFyaWFibGVOYW1lKSk7Cit9CisKK3ZvaWQgSGVhcFNuYXBz
aG90QnVpbGRlcjo6YXBwZW5kSW5kZXhFZGdlKEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bywgdWlu
dDMyX3QgaW5kZXgpCit7CisgICAgQVNTRVJUKG1fcHJvZmlsZXIuYWN0aXZlU25hcHNob3RCdWls
ZGVyKCkgPT0gdGhpcyk7CisgICAgQVNTRVJUKHRvKTsKKworICAgIHN0ZDo6bG9ja19ndWFyZDxM
b2NrPiBsb2NrKG1fYXBwZW5kaW5nRWRnZU11dGV4KTsKKworICAgIG1fZWRnZXMuYXBwZW5kKEhl
YXBTbmFwc2hvdEVkZ2UoZnJvbSwgdG8sIGluZGV4KSk7Cit9CisKIGJvb2wgSGVhcFNuYXBzaG90
QnVpbGRlcjo6aGFzRXhpc3RpbmdOb2RlRm9yQ2VsbChKU0NlbGwqIGNlbGwpCiB7CiAgICAgaWYg
KCFtX3NuYXBzaG90LT5wcmV2aW91cygpKQpAQCAtMjIxLDYgKzI1MSwyMCBAQCBTdHJpbmcgSGVh
cFNuYXBzaG90QnVpbGRlcjo6anNvbihzdGQ6OmZ1bmN0aW9uPGJvb2wgKGNvbnN0IEhlYXBTbmFw
c2hvdE5vZGUmKT4gYQogICAgICAgICBqc29uLmFwcGVuZE51bWJlcih0b0lkZW50aWZpZXIpOwog
ICAgICAgICBqc29uLmFwcGVuZCgnLCcpOwogICAgICAgICBqc29uLmFwcGVuZE51bWJlcihlZGdl
VHlwZVRvTnVtYmVyKGVkZ2UudHlwZSkpOworICAgICAgICBzd2l0Y2ggKGVkZ2UudHlwZSkgewor
ICAgICAgICBjYXNlIEVkZ2VUeXBlOjpQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFZGdlVHlwZTo6
VmFyaWFibGU6CisgICAgICAgICAgICBqc29uLmFwcGVuZCgnLCcpOworICAgICAgICAgICAganNv
bi5hcHBlbmRRdW90ZWRKU09OU3RyaW5nKGVkZ2UudS5uYW1lKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEVkZ2VUeXBlOjpJbmRleDoKKyAgICAgICAgICAgIGpzb24uYXBwZW5k
KCcsJyk7CisgICAgICAgICAgICBqc29uLmFwcGVuZE51bWJlcihlZGdlLnUuaW5kZXgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBObyBkYXRh
IGZvciB0aGlzIGVkZ2UgdHlwZS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAg
ICAgIGpzb24uYXBwZW5kKCddJyk7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5oCmluZGV4IDU5NjAwMzYuLmU4Zjc3MDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmgK
QEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9M
b2NrLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1VuaXF1
ZWRTdHJpbmdJbXBsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtNjIsOSArNjMsMzAgQEAgc3RydWN0IEhlYXBTbmFwc2hvdEVkZ2Ugewog
ICAgICAgICAsIHR5cGUoRWRnZVR5cGU6OkludGVybmFsKQogICAgIHsgfQogCisgICAgSGVhcFNu
YXBzaG90RWRnZShKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8sIEVkZ2VUeXBlIHR5cGUsIFVuaXF1
ZWRTdHJpbmdJbXBsKiBuYW1lKQorICAgICAgICA6IGZyb20oZnJvbSkKKyAgICAgICAgLCB0byh0
bykKKyAgICAgICAgLCB0eXBlKHR5cGUpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZSA9PSBF
ZGdlVHlwZTo6UHJvcGVydHkgfHwgdHlwZSA9PSBFZGdlVHlwZTo6VmFyaWFibGUpOworICAgICAg
ICB1Lm5hbWUgPSBuYW1lOworICAgIH0KKworICAgIEhlYXBTbmFwc2hvdEVkZ2UoSlNDZWxsKiBm
cm9tLCBKU0NlbGwqIHRvLCB1aW50MzJfdCBpbmRleCkKKyAgICAgICAgOiBmcm9tKGZyb20pCisg
ICAgICAgICwgdG8odG8pCisgICAgICAgICwgdHlwZShFZGdlVHlwZTo6SW5kZXgpCisgICAgewor
ICAgICAgICB1LmluZGV4ID0gaW5kZXg7CisgICAgfQorCiAgICAgSlNDZWxsKiBmcm9tOwogICAg
IEpTQ2VsbCogdG87CiAgICAgRWRnZVR5cGUgdHlwZTsKKyAgICB1bmlvbiB7CisgICAgICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiBuYW1lOworICAgICAgICB1aW50MzJfdCBpbmRleDsKKyAgICB9IHU7
CiB9OwogCiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBIZWFwU25hcHNob3RCdWlsZGVyIHsKQEAg
LTg0LDYgKzEwNiw5IEBAIHB1YmxpYzoKIAogICAgIC8vIEEgcmVmZXJlbmNlIGZyb20gb25lIGNl
bGwgdG8gYW5vdGhlci4KICAgICB2b2lkIGFwcGVuZEVkZ2UoSlNDZWxsKiBmcm9tLCBKU0NlbGwq
IHRvKTsKKyAgICB2b2lkIGFwcGVuZFByb3BlcnR5TmFtZUVkZ2UoSlNDZWxsKiBmcm9tLCBKU0Nl
bGwqIHRvLCBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHlOYW1lKTsKKyAgICB2b2lkIGFwcGVu
ZFZhcmlhYmxlTmFtZUVkZ2UoSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvLCBVbmlxdWVkU3RyaW5n
SW1wbCogdmFyaWFibGVOYW1lKTsKKyAgICB2b2lkIGFwcGVuZEluZGV4RWRnZShKU0NlbGwqIGZy
b20sIEpTQ2VsbCogdG8sIHVpbnQzMl90IGluZGV4KTsKIAogICAgIFN0cmluZyBqc29uKCk7CiAg
ICAgU3RyaW5nIGpzb24oc3RkOjpmdW5jdGlvbjxib29sIChjb25zdCBIZWFwU25hcHNob3ROb2Rl
Jik+IGFsbG93Tm9kZUNhbGxiYWNrKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RW
aXNpdG9yLmNwcAppbmRleCA2NDFlNTkwLi43MzkxY2ZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCkBAIC0xMzUsNiArMTM1LDUyIEBAIHZvaWQgU2xvdFZp
c2l0b3I6OmFwcGVuZChKU1ZhbHVlIHZhbHVlKQogICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFy
a1N0YWNrKHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAordm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kSGlk
ZGVuKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXNDZWxsKCkp
CisgICAgICAgIHJldHVybjsKKworICAgIHNldE1hcmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKHZh
bHVlLmFzQ2VsbCgpKTsKK30KKwordm9pZCBTbG90VmlzaXRvcjo6YXBwZW5kQW5kU25hcHNob3RJ
bmRleGVkUHJvcGVydHkoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogc2xvdCwgdWludDMyX3Qg
aW5kZXgpCit7CisgICAgQVNTRVJUKG1faGVhcFNuYXBzaG90QnVpbGRlcik7CisgICAgSlNWYWx1
ZSB2YWx1ZSA9IHNsb3QtPmdldCgpOworICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXItPmFwcGVuZElu
ZGV4RWRnZShtX2N1cnJlbnRDZWxsLCB2YWx1ZS5hc0NlbGwoKSwgaW5kZXgpOworICAgIHNldE1h
cmtlZEFuZEFwcGVuZFRvTWFya1N0YWNrKHZhbHVlLmFzQ2VsbCgpKTsKK30KKwordm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kQW5kU25hcHNob3RJbmRleGVkUHJvcGVydGllcyhXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+KiBiYXJyaWVycywgdWludDMyX3QgY291bnQpCit7CisgICAgQVNTRVJUKG1f
aGVhcFNuYXBzaG90QnVpbGRlcik7CisgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCisgICAgICAgIGFwcGVuZEFuZFNuYXBzaG90SW5kZXhlZFByb3BlcnR5KCZiYXJyaWVy
c1tpXSwgaSk7Cit9CisKK3ZvaWQgU2xvdFZpc2l0b3I6OnNuYXBzaG90UHJvcGVydHlOYW1lKEpT
VmFsdWUgdmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eU5hbWUpCit7CisgICAgQVNT
RVJUKG1faGVhcFNuYXBzaG90QnVpbGRlcik7CisgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUuaXND
ZWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIG1faGVhcFNuYXBzaG90QnVpbGRlci0+YXBw
ZW5kUHJvcGVydHlOYW1lRWRnZShtX2N1cnJlbnRDZWxsLCB2YWx1ZS5hc0NlbGwoKSwgcHJvcGVy
dHlOYW1lKTsKKyAgICBBU1NFUlQoSGVhcDo6aXNNYXJrZWQodmFsdWUuYXNDZWxsKCkpKTsKK30K
Kwordm9pZCBTbG90VmlzaXRvcjo6c25hcHNob3RWYXJpYWJsZU5hbWUoSlNWYWx1ZSB2YWx1ZSwg
VW5pcXVlZFN0cmluZ0ltcGwqIHZhcmlhYmxlTmFtZSkKK3sKKyAgICBBU1NFUlQobV9oZWFwU25h
cHNob3RCdWlsZGVyKTsKKyAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0NlbGwoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgbV9oZWFwU25hcHNob3RCdWlsZGVyLT5hcHBlbmRWYXJpYWJsZU5h
bWVFZGdlKG1fY3VycmVudENlbGwsIHZhbHVlLmFzQ2VsbCgpLCB2YXJpYWJsZU5hbWUpOworICAg
IEFTU0VSVChIZWFwOjppc01hcmtlZCh2YWx1ZS5hc0NlbGwoKSkpOworfQorCiB2b2lkIFNsb3RW
aXNpdG9yOjpzZXRNYXJrZWRBbmRBcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqIGNlbGwpCiB7CiAg
ICAgQVNTRVJUKCFtX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAppbmRleCAyNmI2MTVlLi4xZmJiZjZkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmgKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJIYW5kbGVUeXBlcy5oIgogI2luY2x1ZGUgIk1hcmtTdGFjay5oIgogI2lu
Y2x1ZGUgIk9wYXF1ZVJvb3RTZXQuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9VbmlxdWVkU3RyaW5n
SW1wbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjcsOSArNjgsMTYgQEAgcHVibGljOgog
ICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYXBwZW5kKEpJVFdyaXRlQmFycmll
cjxUPiopOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYXBwZW5kKFdyaXRlQmFycmll
ckJhc2U8VD4qKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB2b2lkIGFwcGVuZEhpZGRlbihX
cml0ZUJhcnJpZXJCYXNlPFQ+Kik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgSXRlcmF0b3I+IHZv
aWQgYXBwZW5kKEl0ZXJhdG9yIGJlZ2luICwgSXRlcmF0b3IgZW5kKTsKICAgICB2b2lkIGFwcGVu
ZFZhbHVlcyhXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kiwgc2l6ZV90IGNvdW50KTsKLSAgICAK
KyAgICB2b2lkIGFwcGVuZFZhbHVlc0hpZGRlbihXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+Kiwg
c2l6ZV90IGNvdW50KTsKKworICAgIHZvaWQgYXBwZW5kQW5kU25hcHNob3RJbmRleGVkUHJvcGVy
dHkoV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiosIHVpbnQzMl90IGluZGV4KTsKKyAgICB2b2lk
IGFwcGVuZEFuZFNuYXBzaG90SW5kZXhlZFByb3BlcnRpZXMoV3JpdGVCYXJyaWVyQmFzZTxVbmtu
b3duPiosIHVpbnQzMl90IGNvdW50KTsKKyAgICB2b2lkIHNuYXBzaG90UHJvcGVydHlOYW1lKEpT
VmFsdWUsIFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eU5hbWUpOworICAgIHZvaWQgc25hcHNo
b3RWYXJpYWJsZU5hbWUoSlNWYWx1ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHZhcmlhYmxlTmFtZSk7
CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogICAgIHZvaWQgYXBwZW5kVW5iYXJyaWVyZWRQ
b2ludGVyKFQqKik7CiAgICAgdm9pZCBhcHBlbmRVbmJhcnJpZXJlZFZhbHVlKEpTVmFsdWUqKTsK
QEAgLTExOSw2ICsxMjcsNyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1v
ZGVFbmFibGVyOwogICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKEpTVmFs
dWUpOyAvLyBUaGlzIGlzIHByaXZhdGUgdG8gZW5jb3VyYWdlIGNsaWVudHMgdG8gdXNlIFdyaXRl
QmFycmllcjxUPi4KKyAgICB2b2lkIGFwcGVuZEhpZGRlbihKU1ZhbHVlKTsKIAogICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7
CiAgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhKU0NlbGwqKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9ySW5saW5lcy5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKaW5kZXggMDMzODcyYy4uYTM3OTIz
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxp
bmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVz
LmgKQEAgLTY5LDYgKzY5LDEyIEBAIGlubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmQoV3Jp
dGVCYXJyaWVyQmFzZTxUPiogc2xvdCkKICAgICBhcHBlbmQoc2xvdC0+Z2V0KCkpOwogfQogCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRl
bihXcml0ZUJhcnJpZXJCYXNlPFQ+KiBzbG90KQoreworICAgIGFwcGVuZEhpZGRlbihzbG90LT5n
ZXQoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPgogaW5saW5lIHZvaWQgU2xv
dFZpc2l0b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKQogewpAQCAtODIs
NiArODgsMTIgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlcyhXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6ZV8KICAgICAgICAgYXBwZW5kKCZiYXJy
aWVyc1tpXSk7CiB9CiAKK2lubGluZSB2b2lkIFNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXNIaWRk
ZW4oV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFycmllcnMsIHNpemVfdCBjb3VudCkKK3sK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpCisgICAgICAgIGFwcGVuZEhp
ZGRlbigmYmFycmllcnNbaV0pOworfQorCiBpbmxpbmUgdm9pZCBTbG90VmlzaXRvcjo6YWRkV2Vh
a1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNlSGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNl
SGFydmVzdGVyKQogewogICAgIG1faGVhcC5tX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLmFkZFRo
cmVhZFNhZmUod2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCmluZGV4IGYxZDc2OTUu
LjgxY2VlZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52
aXJvbm1lbnRSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RW52aXJvbm1lbnRSZWNvcmQuY3BwCkBAIC00MCw3ICs0MCwyMSBAQCB2b2lkIEpTRW52aXJvbm1l
bnRSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRv
cikKICAgICBKU0Vudmlyb25tZW50UmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRW52aXJv
bm1lbnRSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRoaXNP
YmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2aXNp
dG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT52YXJpYWJsZXMoKSwg
dGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+c2NvcGVTaXplKCkpOworCisgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXNIaWRkZW4odGhpc09iamVjdC0+dmFyaWFibGVzKCksIHRoaXNPYmplY3QtPnN5
bWJvbFRhYmxlKCktPnNjb3BlU2l6ZSgpKTsKKworICAgIGlmIChVTkxJS0VMWSh2aXNpdG9yLmlz
QnVpbGRpbmdIZWFwU25hcHNob3QoKSkpIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIodGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+bV9sb2NrKTsKKyAgICAgICAgU3ltYm9s
VGFibGU6Ok1hcDo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5k
KGxvY2tlcik7CisgICAgICAgIGZvciAoU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQgPSB0
aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsraXQp
IHsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnk6OkZhc3QgZW50cnkgPSBpdC0+dmFsdWU7
CisgICAgICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKKyAgICAgICAgICAgIFNjb3Bl
T2Zmc2V0IG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CisgICAgICAgICAgICBpZiAoIXRo
aXNPYmplY3QtPmlzVmFsaWRTY29wZU9mZnNldChvZmZzZXQpKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgdmlzaXRvci5zbmFwc2hvdFZhcmlhYmxlTmFtZSh0aGlzT2Jq
ZWN0LT52YXJpYWJsZUF0KG9mZnNldCkuZ2V0KCksIGl0LT5rZXkuZ2V0KCkpOworICAgICAgICB9
CisgICAgfQogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0LmNwcAppbmRleCAxODdlNzc0Li4yMmQ2ZWQ3IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCkBAIC0xNTcsMTIgKzE1NywxMiBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmNvcHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImIHZp
c2l0b3IsIEJ1dHRlcmZseSogYnV0dAogICAgIH0gCiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBK
U09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSog
YnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUpCit0ZW1wbGF0ZTxKU09iamVjdDo6VmlzaXRD
aGlsZHJlbk1vZGUgbW9kZT4KK0FMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0
ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKIHsKICAgICBBU1NFUlQoYnV0dGVyZmx5KTsKLSAgICAKLSAgICBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXMtPnN0cnVjdHVyZSh2aXNpdG9yLnZtKCkpOwotICAgIAor
CisgICAgc2l6ZV90IHN0b3JhZ2VTaXplID0gc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCk7CiAg
ICAgc2l6ZV90IHByb3BlcnR5Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5
KCk7CiAgICAgc2l6ZV90IHByZUNhcGFjaXR5OwogICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRT
aXplSW5CeXRlczsKQEAgLTE3Nyw3ICsxNzcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmpl
Y3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dAog
ICAgIHNpemVfdCBjYXBhY2l0eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBh
Y2l0eSwgcHJvcGVydHlDYXBhY2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9h
ZFNpemVJbkJ5dGVzKTsKIAogICAgIC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCi0gICAgdmlzaXRv
ci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXpl
LCBzdG9yYWdlU2l6ZSk7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5
LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7CiAgICAgdmlz
aXRvci5jb3B5TGF0ZXIoCiAgICAgICAgIHRoaXMsIEJ1dHRlcmZseUNvcHlUb2tlbiwKICAgICAg
ICAgYnV0dGVyZmx5LT5iYXNlKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNp
dHlJbkJ5dGVzKTsKQEAgLTE4NSwxMCArMTg1LDE2IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09i
amVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0
CiAgICAgLy8gTWFyayB0aGUgYXJyYXkgaWYgYXBwcm9wcmlhdGUuCiAgICAgc3dpdGNoICh0aGlz
LT5pbmRleGluZ1R5cGUoKSkgewogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQ
RVM6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+Y29udGlndW91cygp
LmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgIGlmIChtb2RlID09
IFZpc2l0Q2hpbGRyZW5Nb2RlTm9ybWFsKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXMoYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0
aCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRBbmRTbmFwc2hv
dEluZGV4ZWRQcm9wZXJ0aWVzKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVy
Zmx5LT5wdWJsaWNMZW5ndGgoKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQUxMX0FSUkFZ
X1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1
dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFn
ZSgpLT52ZWN0b3JMZW5ndGgoKSk7CisgICAgICAgIGlmIChtb2RlID09IFZpc2l0Q2hpbGRyZW5N
b2RlTm9ybWFsKQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5h
cnJheVN0b3JhZ2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rv
ckxlbmd0aCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmlzaXRvci5hcHBlbmRBbmRT
bmFwc2hvdEluZGV4ZWRQcm9wZXJ0aWVzKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fdmVj
dG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7CiAgICAgICAg
IGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkKICAgICAgICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCk7
CiAgICAgICAgIGJyZWFrOwpAQCAtMjE1LDkgKzIyMSwxOSBAQCB2b2lkIEpTT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgCiAgICAg
SlNDZWxsOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwogCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKTsKICAg
ICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3QtPm1fYnV0dGVyZmx5LmdldFdpdGhv
dXRCYXJyaWVyKCk7Ci0gICAgaWYgKGJ1dHRlcmZseSkKLSAgICAgICAgdGhpc09iamVjdC0+dmlz
aXRCdXR0ZXJmbHkodmlzaXRvciwgYnV0dGVyZmx5LCB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUodmlz
aXRvci52bSgpKS0+b3V0T2ZMaW5lU2l6ZSgpKTsKKyAgICBpZiAoYnV0dGVyZmx5KSB7CisgICAg
ICAgIGlmIChMSUtFTFkoIXZpc2l0b3IuaXNCdWlsZGluZ0hlYXBTbmFwc2hvdCgpKSkKKyAgICAg
ICAgICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5PFZpc2l0Q2hpbGRyZW5Nb2RlTm9ybWFs
Pih2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHRoaXNPYmplY3QtPnZpc2l0QnV0dGVyZmx5PFZpc2l0Q2hpbGRyZW5Nb2RlSGVhcFNuYXBz
aG90Pih2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7CisgICAgfQorCisgICAgaWYgKFVO
TElLRUxZKHZpc2l0b3IuaXNCdWlsZGluZ0hlYXBTbmFwc2hvdCgpKSkgeworICAgICAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpCisg
ICAgICAgICAgICB2aXNpdG9yLnNuYXBzaG90UHJvcGVydHlOYW1lKHRoaXNPYmplY3QtPmdldERp
cmVjdChlbnRyeS5vZmZzZXQpLCBlbnRyeS5rZXkpOworICAgIH0KIAogI2lmICFBU1NFUlRfRElT
QUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0g
d2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKQEAgLTI0OCwxMyArMjY0LDIyIEBA
IHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpc09iamVjdC0+c3Ry
dWN0dXJlKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1
cmUodmlzaXRvci52bSgpKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNPYmplY3Qt
PmJ1dHRlcmZseSgpOwotICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNPYmplY3QtPnZp
c2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlLT5vdXRPZkxpbmVTaXpl
KCkpOworICAgIGlmIChidXR0ZXJmbHkpIHsKKyAgICAgICAgaWYgKExJS0VMWSghdmlzaXRvci5p
c0J1aWxkaW5nSGVhcFNuYXBzaG90KCkpKQorICAgICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRC
dXR0ZXJmbHk8VmlzaXRDaGlsZHJlbk1vZGVOb3JtYWw+KHZpc2l0b3IsIGJ1dHRlcmZseSwgc3Ry
dWN0dXJlKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0
ZXJmbHk8VmlzaXRDaGlsZHJlbk1vZGVIZWFwU25hcHNob3Q+KHZpc2l0b3IsIGJ1dHRlcmZseSwg
c3RydWN0dXJlKTsKKyAgICB9CiAKICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSBzdHJ1Y3R1cmUt
PmlubGluZVNpemUoKTsKLSAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT5pbmxp
bmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRl
bih0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKKworICAgIGlmIChV
TkxJS0VMWSh2aXNpdG9yLmlzQnVpbGRpbmdIZWFwU25hcHNob3QoKSkpIHsKKyAgICAgICAgZm9y
IChhdXRvJiBlbnRyeSA6IHN0cnVjdHVyZS0+Z2V0UHJvcGVydGllc0NvbmN1cnJlbnRseSgpKQor
ICAgICAgICAgICAgdmlzaXRvci5zbmFwc2hvdFByb3BlcnR5TmFtZSh0aGlzT2JqZWN0LT5nZXRE
aXJlY3QoZW50cnkub2Zmc2V0KSwgZW50cnkua2V5KTsKKyAgICB9CiAKICNpZiAhQVNTRVJUX0RJ
U0FCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbiA9
IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3QuaAppbmRleCAxNjg3NmQ0Li5iNmYxNmMyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKQEAgLTkyLDYgKzkyLDExIEBAIGNsYXNzIEpT
T2JqZWN0IDogcHVibGljIEpTQ2VsbCB7CiAgICAgICAgIFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0
eSwKICAgICB9OwogCisgICAgZW51bSBWaXNpdENoaWxkcmVuTW9kZSB7CisgICAgICAgIFZpc2l0
Q2hpbGRyZW5Nb2RlTm9ybWFsLAorICAgICAgICBWaXNpdENoaWxkcmVuTW9kZUhlYXBTbmFwc2hv
dCwKKyAgICB9OworCiBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKIApAQCAtNzg2
LDcgKzc5MSw4IEBAIHByb3RlY3RlZDoKICAgICAvLyBUbyBjcmVhdGUgZGVyaXZlZCB0eXBlcyB5
b3UgbGlrZWx5IHdhbnQgSlNOb25GaW5hbE9iamVjdCwgYmVsb3cuCiAgICAgSlNPYmplY3QoVk0m
LCBTdHJ1Y3R1cmUqLCBCdXR0ZXJmbHkqID0gMCk7CiAgICAgICAgIAotICAgIHZvaWQgdmlzaXRC
dXR0ZXJmbHkoU2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNpemUpOwor
ICAgIHRlbXBsYXRlPFZpc2l0Q2hpbGRyZW5Nb2RlPgorICAgIHZvaWQgdmlzaXRCdXR0ZXJmbHko
U2xvdFZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBTdHJ1Y3R1cmUqKTsKICAgICB2b2lkIGNvcHlCdXR0
ZXJmbHkoQ29weVZpc2l0b3ImLCBCdXR0ZXJmbHkqLCBzaXplX3Qgc3RvcmFnZVNpemUpOwogCiAg
ICAgLy8gQ2FsbCB0aGlzIGlmIHlvdSBrbm93IHRoYXQgdGhlIG9iamVjdCBpcyBpbiBhIG1vZGUg
d2hlcmUgaXQgaGFzIGFycmF5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCmluZGV4IDE1ZjE5ZjUuLmVk
OWM5YzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVu
dGVkVmFyaWFibGVPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwCkBAIC02Niw3ICs2NiwyMCBAQCB2b2lkIEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90
VmlzaXRvciYgc2xvdFZpcwogICAgIEpTU3ltYm9sVGFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgc2xvdFZpc2l0b3IpOwogICAgIAogICAgIGZvciAodW5zaWduZWQgaSA9IHRo
aXNPYmplY3QtPm1fdmFyaWFibGVzLnNpemUoKTsgaS0tOykKLSAgICAgICAgc2xvdFZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3ZhcmlhYmxlc1tpXSk7CisgICAgICAgIHNsb3RWaXNpdG9y
LmFwcGVuZEhpZGRlbigmdGhpc09iamVjdC0+bV92YXJpYWJsZXNbaV0pOworCisgICAgaWYgKFVO
TElLRUxZKHNsb3RWaXNpdG9yLmlzQnVpbGRpbmdIZWFwU25hcHNob3QoKSkpIHsKKyAgICAgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIodGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+bV9s
b2NrKTsKKyAgICAgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgZW5kID0gdGhpc09iamVj
dC0+c3ltYm9sVGFibGUoKS0+ZW5kKGxvY2tlcik7CisgICAgICAgIGZvciAoU3ltYm9sVGFibGU6
Ok1hcDo6aXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdpbihsb2Nr
ZXIpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnk6OkZh
c3QgZW50cnkgPSBpdC0+dmFsdWU7CisgICAgICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgp
KTsKKyAgICAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7
CisgICAgICAgICAgICBpZiAoIXRoaXNPYmplY3QtPmlzVmFsaWRTY29wZU9mZnNldChvZmZzZXQp
KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc2xvdFZpc2l0b3Iuc25h
cHNob3RWYXJpYWJsZU5hbWUodGhpc09iamVjdC0+dmFyaWFibGVBdChvZmZzZXQpLmdldCgpLCBp
dC0+a2V5LmdldCgpKTsKKyAgICAgICAgfQorICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgSlND
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAppbmRleCBjMTk1
Y2M2Li4wYzJjNDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAKQEAgLTExMTYsNyArMTExNiw5IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgaWYgKHRoaXNPYmplY3Qt
PmlzUGlubmVkUHJvcGVydHlUYWJsZSgpKSB7CiAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5t
X3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKLSAgICB9IGVsc2UgaWYgKHRoaXNPYmplY3QtPm1f
cHJvcGVydHlUYWJsZVVuc2FmZSkKKyAgICB9IGVsc2UgaWYgKHZpc2l0b3IuaXNCdWlsZGluZ0hl
YXBTbmFwc2hvdCgpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcm9w
ZXJ0eVRhYmxlVW5zYWZlKTsKKyAgICBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFi
bGVVbnNhZmUpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVh
cigpOwogCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faW5mZXJyZWRUeXBlVGFi
bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAppbmRleCA0YTlj
NTY3Li4yYzMwM2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aApAQCAtNzE2LDYgKzcxNiw3IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlIG1fdHJhbnNpdGlvblRhYmxlOwogCiAgICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91
Z2ggcHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90
aGVyIHRocmVhZC4KKyAgICAvLyBEdXJpbmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNs
ZWFyaW5nIHRoZSB0YWJsZSBzbyBpdCBpcyBzYWZlIHRvIHVzZS4KICAgICBXcml0ZUJhcnJpZXI8
UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogCiAgICAgV3JpdGVCYXJyaWVy
PEluZmVycmVkVHlwZVRhYmxlPiBtX2luZmVycmVkVHlwZVRhYmxlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDIxYmNhYTUuLmE1
ZTRiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmgKQEAgLTI0Miw3ICsyNDIsNyBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnB1dFdp
bGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpCiAKIEFMV0FZU19JTkxJTkUgV3JpdGVCYXJyaWVyPFBy
b3BlcnR5VGFibGU+JiBTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGUoKQogewotICAgIEFTU0VSVCgh
Z2xvYmFsT2JqZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT52bSgpLmhlYXAuaXNDb2xsZWN0aW5n
KCkpOworICAgIEFTU0VSVCghZ2xvYmFsT2JqZWN0KCkgfHwgKCFnbG9iYWxPYmplY3QoKS0+dm0o
KS5oZWFwLmlzQ29sbGVjdGluZygpIHx8IGdsb2JhbE9iamVjdCgpLT52bSgpLmhlYXAuaXNIZWFw
U25hcHNob3R0aW5nKCkpKTsKICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2Ry
aXZlci9kcml2ZXIuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVy
L2RyaXZlci9kcml2ZXIuanMKaW5kZXggZDA2Y2E4Mi4uODJmODBmMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvZHJpdmVyL2RyaXZl
ci5qcwpAQCAtMjQwLDMgKzI0MCwxNyBAQCBmdW5jdGlvbiBjcmVhdGVIZWFwU25hcHNob3QoKSB7
CiAKICAgICByZXR1cm4gbmV3IEhlYXBTbmFwc2hvdChqc29uKTsKIH0KKworZnVuY3Rpb24gZm9s
bG93UGF0aChub2RlLCBwYXRoKSB7CisgICAgbGV0IGN1cnJlbnQgPSBub2RlOworICAgIGZvciAo
bGV0IGNvbXBvbmVudCBvZiBwYXRoKSB7CisgICAgICAgIGxldCBlZGdlcyA9IG51bGw7CisgICAg
ICAgIGlmIChjb21wb25lbnQuZWRnZSkKKyAgICAgICAgICAgIGVkZ2VzID0gY3VycmVudC5vdXRn
b2luZ0VkZ2VzLmZpbHRlcigoZSkgPT4gZS5kYXRhID09PSBjb21wb25lbnQuZWRnZSk7CisgICAg
ICAgIGVsc2UgaWYgKGNvbXBvbmVudC5ub2RlKQorICAgICAgICAgICAgZWRnZXMgPSBjdXJyZW50
Lm91dGdvaW5nRWRnZXMuZmlsdGVyKChlKSA9PiBlLnRvLmNsYXNzTmFtZSA9PT0gY29tcG9uZW50
Lm5vZGUpOworICAgICAgICBhc3NlcnQoZWRnZXMubGVuZ3RoID09PSAxLCAiQW1iaWd1b3VzIG9y
IGJhZCBwYXRoIGNvbXBvbmVudDogIiArIEpTT04uc3RyaW5naWZ5KGNvbXBvbmVudCkpOworICAg
ICAgICBjdXJyZW50ID0gZWRnZXNbMF0udG87CisgICAgfQorICAgIHJldHVybiBjdXJyZW50Owor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9w
cm9wZXJ0eS1lZGdlLXR5cGVzLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQ
cm9maWxlci9wcm9wZXJ0eS1lZGdlLXR5cGVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmE5YmFmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvaGVhcFByb2ZpbGVyL3Byb3BlcnR5LWVkZ2UtdHlwZXMuanMKQEAgLTAsMCArMSw5
OCBAQAorbG9hZCgiLi9kcml2ZXIvZHJpdmVyLmpzIik7CisKK2xldCBzaW1wbGVPYmplY3QgPSBu
ZXcgU2ltcGxlT2JqZWN0Oworc2V0SGlkZGVuVmFsdWUoc2ltcGxlT2JqZWN0LCAiaGlkZGVuVmFs
dWUiKTsgLy8gSW50ZXJuYWwKK3NpbXBsZU9iamVjdC5wcm9wZXJ0eU5hbWUxID0gInByb3BlcnR5
VmFsdWUxIjsgLy8gUHJvcGVydHkKK3NpbXBsZU9iamVjdFsicHJvcGVydHlOYW1lMiJdID0gInBy
b3BlcnR5VmFsdWUyIjsgLy8gUHJvcGVydHkKK3NpbXBsZU9iamVjdFsxMDBdID0gImluZGV4ZWRW
YWx1ZSI7IC8vIEluZGV4CitzaW1wbGVPYmplY3RbMHhmZmZmZmZmZiArIDEwMF0gPSAibGFyZ2VJ
bmRleFZhbHVlQmVjb21pbmdQcm9wZXJ0eSI7IC8vIFByb3BlcnR5CitzaW1wbGVPYmplY3QucG9p
bnQgPSB7eDoieDEiLCB5OiJ5MSJ9OyAvLyBQcm9wZXJ0eSA9PiBvYmplY3Qgd2l0aCAyIGlubGlu
ZSBwcm9wZXJ0aWVzLgorCisvLyAtLS0tLS0tLS0tCisKK2Z1bmN0aW9uIGV4Y2x1ZGVTdHJ1Y3R1
cmUoZWRnZXMpIHsKKyAgICByZXR1cm4gZWRnZXMuZmlsdGVyKCh4KSA9PiB4LnRvLmNsYXNzTmFt
ZSAhPT0gIlN0cnVjdHVyZSIpOworfQorCitsZXQgc25hcHNob3QgPSBjcmVhdGVIZWFwU25hcHNo
b3QoKTsKKworLy8gSW50ZXJuYWwsIFByb3BlcnR5LCBhbmQgSW5kZXggZWRnZXMgb24gYW4gT2Jq
ZWN0LgorbGV0IG5vZGVzID0gc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJTaW1wbGVPYmpl
Y3QiKTsKK2Fzc2VydChub2Rlcy5sZW5ndGggPT09IDEsICJTbmFwc2hvdCBzaG91bGQgY29udGFp
biAxICdTaW1wbGVPYmplY3QnIGluc3RhbmNlIik7CitsZXQgc2ltcGxlT2JqZWN0Tm9kZSA9IG5v
ZGVzWzBdOworbGV0IGVkZ2VzID0gZXhjbHVkZVN0cnVjdHVyZShzaW1wbGVPYmplY3ROb2RlLm91
dGdvaW5nRWRnZXMpOworbGV0IHBvaW50Tm9kZSA9IG51bGw7CisKK2xldCBzZWVuSGlkZGVuVmFs
dWUgPSBmYWxzZTsKK2xldCBzZWVuUHJvcGVydHlOYW1lMSA9IGZhbHNlOworbGV0IHNlZW5Qcm9w
ZXJ0eU5hbWUyID0gZmFsc2U7CitsZXQgc2VlbkluZGV4MTAwID0gZmFsc2U7CitsZXQgc2Vlbkxh
cmdlSW5kZXggPSBmYWxzZTsKK2xldCBzZWVuT2JqZWN0V2l0aElubGluZVN0b3JhZ2UgPSBmYWxz
ZTsKK2xldCBsYXJnZUluZGV4TmFtZSA9ICgweGZmZmZmZmZmICsgMTAwKS50b1N0cmluZygpOwor
Citmb3IgKGxldCBlZGdlIG9mIGVkZ2VzKSB7CisgICAgc3dpdGNoIChlZGdlLnR5cGUpIHsKKyAg
ICBjYXNlICJJbnRlcm5hbCI6CisgICAgICAgIGFzc2VydCghc2VlbkhpZGRlblZhbHVlKTsKKyAg
ICAgICAgc2VlbkhpZGRlblZhbHVlID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAi
UHJvcGVydHkiOgorICAgICAgICBpZiAoZWRnZS5kYXRhID09PSAicHJvcGVydHlOYW1lMSIpCisg
ICAgICAgICAgICBzZWVuUHJvcGVydHlOYW1lMSA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGVk
Z2UuZGF0YSA9PT0gInByb3BlcnR5TmFtZTIiKQorICAgICAgICAgICAgc2VlblByb3BlcnR5TmFt
ZTIgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChlZGdlLmRhdGEgPT09IGxhcmdlSW5kZXhOYW1l
KQorICAgICAgICAgICAgc2VlbkxhcmdlSW5kZXggPSB0cnVlOworICAgICAgICBlbHNlIGlmIChl
ZGdlLmRhdGEgPT09ICJwb2ludCIpIHsKKyAgICAgICAgICAgIHNlZW5Qb2ludCA9IHRydWU7Cisg
ICAgICAgICAgICBwb2ludE5vZGUgPSBlZGdlLnRvOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgcHJvcGVydHkgbmFtZSIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlICJJbmRleCI6CisgICAgICAgIGlmIChlZGdlLmRhdGEgPT09IDEwMCkK
KyAgICAgICAgICAgIHNlZW5JbmRleDEwMCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgIlZhcmlhYmxlIjoKKyAgICAgICAgYXNzZXJ0KGZhbHNlLCAiU2hvdWxkIG5vdCBzZWUgYSB2
YXJpYWJsZSBlZGdlIGZvciBTaW1wbGVPYmplY3QgaW5zdGFuY2UiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlLCAiVW5leHBlY3RlZCBlZGdlIHR5
cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCithc3NlcnQoc2VlbkhpZGRlblZhbHVl
LCAiU2hvdWxkIHNlZSBJbnRlcm5hbCBlZGdlIGZvciBoaWRkZW4gdmFsdWUiKTsKK2Fzc2VydChz
ZWVuUHJvcGVydHlOYW1lMSwgIlNob3VsZCBzZWUgUHJvcGVydHkgZWRnZSBmb3IgcHJvcGVydHlO
YW1lMSIpOworYXNzZXJ0KHNlZW5Qcm9wZXJ0eU5hbWUyLCAiU2hvdWxkIHNlZSBQcm9wZXJ0eSBl
ZGdlIGZvciBwcm9wZXJ0eU5hbWUyIik7Cithc3NlcnQoc2VlbkluZGV4MTAwLCAiU2hvdWxkIHNl
ZSBJbmRleCBlZGdlIGZvciBpbmRleCAxMDAiKTsKK2Fzc2VydChzZWVuTGFyZ2VJbmRleCwgIlNo
b3VsZCBzZWUgUHJvcGVydHkgZWRnZSBmb3IgaW5kZXggIiArIGxhcmdlSW5kZXhOYW1lKTsKKwor
CisvLyBQcm9wZXJ0eSBvbiBhbiBPYmplY3QncyBpbmxpbmUgc3RvcmFnZS4KK2xldCBwb2ludEVk
Z2VzID0gZXhjbHVkZVN0cnVjdHVyZShwb2ludE5vZGUub3V0Z29pbmdFZGdlcyk7CisKK2xldCBz
ZWVuUHJvcGVydHlYID0gZmFsc2U7CitsZXQgc2VlblByb3BlcnR5WSA9IGZhbHNlOworCitmb3Ig
KGxldCBlZGdlIG9mIHBvaW50RWRnZXMpIHsKKyAgICBzd2l0Y2ggKGVkZ2UudHlwZSkgeworICAg
IGNhc2UgIlByb3BlcnR5IjoKKyAgICAgICAgaWYgKGVkZ2UuZGF0YSA9PT0gIngiKQorICAgICAg
ICAgICAgc2VlblByb3BlcnR5WCA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGVkZ2UuZGF0YSA9
PT0gInkiKQorICAgICAgICAgICAgc2VlblByb3BlcnR5WSA9IHRydWU7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgcHJvcGVydHkgbmFtZSIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlICJJbmRleCI6CisgICAgY2FzZSAiVmFyaWFibGUiOgor
ICAgIGNhc2UgIkludGVybmFsIjoKKyAgICAgICAgYXNzZXJ0KGZhbHNlLCAiVW5leHBlY3RlZCBl
ZGdlIHR5cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCithc3NlcnQoc2VlblByb3Bl
cnR5WCwgIlNob3VsZCBzZWUgUHJvcGVydHkgZWRnZSBmb3IgeCIpOworYXNzZXJ0KHNlZW5Qcm9w
ZXJ0eVksICJTaG91bGQgc2VlIFByb3BlcnR5IGVkZ2UgZm9yIHkiKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvdmFyaWFibGUtZWRnZS10eXBl
cy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvdmFyaWFibGUt
ZWRnZS10eXBlcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmE2NzVl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9m
aWxlci92YXJpYWJsZS1lZGdlLXR5cGVzLmpzCkBAIC0wLDAgKzEsNjkgQEAKK2xvYWQoIi4vZHJp
dmVyL2RyaXZlci5qcyIpOworCitsZXQgZ2xvYmFsU2NvcGVWYXJpYWJsZSA9ICJnbG9iYWxTY29w
ZVZhcmlhYmxlVmFsdWUiOworbGV0IHNpbXBsZU9iamVjdCA9IG5ldyBTaW1wbGVPYmplY3Q7CisK
KyhmdW5jdGlvbigpIHsKKyAgICBsZXQgY2xvc3VyZVZhcmlhYmxlID0ge307CisgICAgc2ltcGxl
T2JqZWN0LmYgPSBmdW5jdGlvbigpIHsgY2xvc3VyZVZhcmlhYmxlLnggPSAwOyB9Cit9KSgpOwor
CisvLyAtLS0tLS0tLS0tCisKK2xldCBzbmFwc2hvdCA9IGNyZWF0ZUhlYXBTbmFwc2hvdCgpOwor
CisvLyBHbG9iYWwgU2NvcGUgPT4gImdsb2JhbFNjb3BlVmFyaWFibGUiCitsZXQgbm9kZXMgPSBz
bmFwc2hvdC5ub2Rlc1dpdGhDbGFzc05hbWUoIkpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Iik7
Cithc3NlcnQobm9kZXMubGVuZ3RoID09PSAxLCAiU2hvdWxkIGJlIG9ubHkgMSAnSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQnIGluc3RhbmNlIik7CitsZXQgZ2xvYmFsU2NvcGVOb2RlID0gbm9k
ZXNbMF07CisKK2xldCBzZWVuR2xvYmFsU2NvcGVWYXJpYWJsZSA9IGZhbHNlOworbGV0IHNlZW5T
aW1wbGVPYmplY3RWYXJpYWJsZSA9IGZhbHNlOworCitmb3IgKGxldCBlZGdlIG9mIGdsb2JhbFNj
b3BlTm9kZS5vdXRnb2luZ0VkZ2VzKSB7CisgICAgc3dpdGNoIChlZGdlLnR5cGUpIHsKKyAgICBj
YXNlICJWYXJpYWJsZSI6CisgICAgICAgIGlmIChlZGdlLmRhdGEgPT09ICJnbG9iYWxTY29wZVZh
cmlhYmxlIikKKyAgICAgICAgICAgIHNlZW5HbG9iYWxTY29wZVZhcmlhYmxlID0gdHJ1ZTsKKyAg
ICAgICAgZWxzZSBpZiAoZWRnZS5kYXRhID09PSAic2ltcGxlT2JqZWN0IikKKyAgICAgICAgICAg
IHNlZW5TaW1wbGVPYmplY3RWYXJpYWJsZSA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgdmFyaWFibGUgbmFtZTogIiArIGVkZ2UuZGF0
YSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIkluZGV4IjoKKyAgICBjYXNlICJQcm9wZXJ0
eSI6CisgICAgICAgIGFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgZWRnZSB0eXBlIik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgIkludGVybmFsIjoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCithc3NlcnQoc2Vlbkdsb2JhbFNjb3BlVmFyaWFibGUsICJTaG91bGQgc2VlIFZhcmlhYmxl
IGVkZ2UgZm9yIHZhcmlhYmxlICdnbG9iYWxTY29wZVZhcmlhYmxlJyIpOworYXNzZXJ0KHNlZW5T
aW1wbGVPYmplY3RWYXJpYWJsZSwgIlNob3VsZCBzZWUgVmFyaWFibGUgZWRnZSBmb3IgdmFyaWFi
bGUgJ3NpbXBsZU9iamVjdCciKTsKKworLy8gRnVuY3Rpb24gU2NvcGUgPT4gImNsb3N1cmVWYXJp
YWJsZSIKK25vZGVzID0gc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJTaW1wbGVPYmplY3Qi
KTsKK2Fzc2VydChub2Rlcy5sZW5ndGggPT09IDEsICJTaG91bGQgYmUgb25seSAxICdTaW1wbGVP
YmplY3QnIGluc3RhbmNlIik7CitsZXQgc2NvcGVOb2RlID0gZm9sbG93UGF0aChub2Rlc1swXSwg
W3tlZGdlOiAiZiJ9LCB7bm9kZTogIkpTTGV4aWNhbEVudmlyb25tZW50In1dKTsKKworbGV0IHNl
ZW5DbG9zdXJlVmFyaWFibGUgPSBmYWxzZTsKKworZm9yIChsZXQgZWRnZSBvZiBzY29wZU5vZGUu
b3V0Z29pbmdFZGdlcykgeworICAgIHN3aXRjaCAoZWRnZS50eXBlKSB7CisgICAgY2FzZSAiVmFy
aWFibGUiOgorICAgICAgICBpZiAoZWRnZS5kYXRhID09PSAiY2xvc3VyZVZhcmlhYmxlIikKKyAg
ICAgICAgICAgIHNlZW5DbG9zdXJlVmFyaWFibGUgPSB0cnVlOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBhc3NlcnQoZmFsc2UsICJVbmV4cGVjdGVkIHZhcmlhYmxlIG5hbWU6ICIgKyBlZGdl
LmRhdGEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICJJbmRleCI6CisgICAgY2FzZSAiUHJv
cGVydHkiOgorICAgICAgICBhc3NlcnQoZmFsc2UsICJVbmV4cGVjdGVkIGVkZ2UgdHlwZSIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlICJJbnRlcm5hbCI6CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworYXNzZXJ0KHNlZW5DbG9zdXJlVmFyaWFibGUsICJTaG91bGQgc2VlIFZhcmlhYmxl
IGVkZ2UgZm9yIGNsb3N1cmUgdmFyaWFibGUgJ2Nsb3N1cmVWYXJpYWJsZSciKTsK
</data>
<flag name="review"
          id="297463"
          type_id="1"
          status="-"
          setter="joepeck"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272722</attachid>
            <date>2016-03-02 19:53:13 -0800</date>
            <delta_ts>2016-03-03 23:59:24 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>edge-2.patch</filename>
            <type>text/plain</type>
            <size>37782</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGY2YWU1YmMuLjFhMTExZTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDgwIEBACiAyMDE2LTAzLTAyICBKb3NlcGggUGVjb3Jh
cm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKKyAgICAgICAgSGVhcCBTbmFwc2hvdCBzaG91bGQg
aW5jbHVkZSBkaWZmZXJlbnQgRWRnZSB0eXBlcyBhbmQgZGF0YSAoUHJvcGVydHksIEluZGV4LCBW
YXJpYWJsZSkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1NDkzNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogaGVhcC9TbG90VmlzaXRvci5jcHA6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBl
bmRIaWRkZW4pOgorICAgICAgICAqIGhlYXAvU2xvdFZpc2l0b3IuaDoKKyAgICAgICAgKiBoZWFw
L1Nsb3RWaXNpdG9ySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBwZW5k
SGlkZGVuKToKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVuZFZhbHVlc0hpZGRlbik6
CisgICAgICAgIEFkZCBuZXcgdmlzaXQgbWV0aG9kcyB0byB2aXNpdCBhIHJlZmVyZW5jZSB3aXRo
b3V0IHNuYXBzaG90dGluZyB0aGUgZWRnZS4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6Cisg
ICAgICAgIChKU0M6OkFkZEV4dHJhSGVhcFNuYXBzaG90RWRnZXM6OkFkZEV4dHJhSGVhcFNuYXBz
aG90RWRnZXMpOgorICAgICAgICAoSlNDOjpBZGRFeHRyYUhlYXBTbmFwc2hvdEVkZ2VzOjpvcGVy
YXRvcigpKToKKyAgICAgICAgKEpTQzo6SGVhcDo6YWRkSGVhcFNuYXBzaG90RWRnZXMpOgorICAg
ICAgICAoSlNDOjpIZWFwOjpyZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMpOgorICAgICAgICAo
SlNDOjpIZWFwOjpjb2xsZWN0SW1wbCk6CisgICAgICAgICogaGVhcC9IZWFwLmg6CisgICAgICAg
IEFmdGVyIG1hcmtpbmcsIHZpc2l0IHRoZSBsaXZlIGNlbGxzIGZvciBhIGNoYW5jZSB0byByZWNv
cmQgZXh0cmEKKyAgICAgICAgaGVhcCBzbmFwc2hvdHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgdGhl
IGNlbGwuCisKKyAgICAgICAgKiBoZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwOgorICAgICAg
ICAoSlNDOjpIZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmROb2RlKToKKyAgICAgICAgKEpTQzo6
SGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kRWRnZSk6CisgICAgICAgIChKU0M6OkhlYXBTbmFw
c2hvdEJ1aWxkZXI6OmFwcGVuZFByb3BlcnR5TmFtZUVkZ2UpOgorICAgICAgICAoSlNDOjpIZWFw
U25hcHNob3RCdWlsZGVyOjphcHBlbmRWYXJpYWJsZU5hbWVFZGdlKToKKyAgICAgICAgKEpTQzo6
SGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kSW5kZXhFZGdlKToKKyAgICAgICAgKEpTQzo6SGVh
cFNuYXBzaG90QnVpbGRlcjo6anNvbik6CisgICAgICAgICogaGVhcC9IZWFwU25hcHNob3RCdWls
ZGVyLmg6CisgICAgICAgIChKU0M6OkhlYXBTbmFwc2hvdEVkZ2U6OkhlYXBTbmFwc2hvdEVkZ2Up
OgorICAgICAgICBDb25zdHJ1Y3QgZWRnZXMgd2l0aCBleHRyYSBkYXRhLgorCisgICAgICAgICog
cnVudGltZS9DbGFzc0luZm8uaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ2VsbC5jcHA6CisgICAg
ICAgIChKU0M6OkpTQ2VsbDo6aGVhcFNuYXBzaG90KToKKyAgICAgICAgKiBydW50aW1lL0pTQ2Vs
bC5oOgorICAgICAgICBBZGQgYSBuZXcgbWV0aG9kIHRvIHByb3ZpZGUgY2VsbHMgd2l0aCBhbiBv
cHBvcnR1bml0eSB0byBwcm92aWRlCisgICAgICAgIGV4dHJhIGhlYXAgc25hcHNob3R0aW5nIGlu
Zm9ybWF0aW9uLgorCisgICAgICAgICogcnVudGltZS9KU09iamVjdC5jcHA6CisgICAgICAgIChK
U0M6OkpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojp2
aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmhlYXBTbmFwc2hvdCk6Cisg
ICAgICAgIChKU0M6OkpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1
bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgQ2FwdHVyZSBvYmplY3QgcHJvcGVydHkgbmFtZXMg
YW5kIGluZGV4IG5hbWVzIHdoZW4gaGVhcCBzbmFwc2hvdHRpbmcuCisgICAgICAgIERvIG5vdCBp
bmNsdWRlIHRoZW0gYXMgaW50ZXJuYWwgZWRnZXMgaW4gbm9ybWFsIHZpc2l0Q2hpbGRyZW4uCisK
KyAgICAgICAgKiBydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwOgorICAgICAgICAoSlND
OjpKU0Vudmlyb25tZW50UmVjb3JkOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNF
bnZpcm9ubWVudFJlY29yZDo6aGVhcFNuYXBzaG90KToKKyAgICAgICAgKiBydW50aW1lL0pTRW52
aXJvbm1lbnRSZWNvcmQuaDoKKyAgICAgICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0Ojp2aXNp
dENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6aGVh
cFNuYXBzaG90KToKKyAgICAgICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3Qu
aDoKKyAgICAgICAgQ2FwdHVyZSBzY29wZSB2YXJpYWJsZSBuYW1lcyB3aGVuIGhlYXAgc25hcHNo
b3R0aW5nLgorCisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuY3BwOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJl
Lmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6
OlN0cnVjdHVyZTo6cHJvcGVydHlUYWJsZSk6CisgICAgICAgIFdoZW4gcGVyZm9ybWluZyBhIGhl
YXAgc25hcHNob3R0aW5nIGNvbGxlY3Rpb24sIGRvbid0IGNsZWFyIHRoZQorICAgICAgICBwcm9w
ZXJ0eSB0YWJsZSBzbyB0aGF0IGFjY2Vzc2luZyB0aGUgdGFibGUgZHVyaW5nIHRoaXMgR0MgaXMg
b2theS4KKworICAgICAgICAqIHRlc3RzL2hlYXBQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzOgor
ICAgICAgICAqIHRlc3RzL2hlYXBQcm9maWxlci9wcm9wZXJ0eS1lZGdlLXR5cGVzLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiB0ZXN0cy9oZWFwUHJvZmlsZXIvdmFyaWFibGUtZWRnZS10eXBlcy5qczog
QWRkZWQuCisgICAgICAgIFRlc3RzIGNvdmVyaW5nIHRoZSBkaWZmZXJlbnQgZWRnZSB0eXBlcyBh
bmQgZGF0YSB3ZSBjYXB0dXJlLgorCisyMDE2LTAzLTAyICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNv
cmFyb0BhcHBsZS5jb20+CisKICAgICAgICAgQWRkIGFiaWxpdHkgdG8gZ2VuZXJhdGUgYSBIZWFw
IFNuYXBzaG90CiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTQ4NDcKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAppbmRleCBkMzg4ZDU3Li5l
ZTE3ZWRkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcApAQCAtNzY4LDYgKzc2OCwz
MSBAQCBib29sIEhlYXA6OmlzSGVhcFNuYXBzaG90dGluZygpIGNvbnN0CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCitzdHJ1Y3QgR2F0aGVySGVhcFNuYXBzaG90RGF0YSA6IE1hcmtlZEJsb2NrOjpD
b3VudEZ1bmN0b3IgeworICAgIEdhdGhlckhlYXBTbmFwc2hvdERhdGEoSGVhcFNuYXBzaG90QnVp
bGRlciYgYnVpbGRlcikKKyAgICAgICAgOiBtX2J1aWxkZXIoYnVpbGRlcikKKyAgICB7CisgICAg
fQorCisgICAgSXRlcmF0aW9uU3RhdHVzIG9wZXJhdG9yKCkoSlNDZWxsKiBjZWxsKQorICAgIHsK
KyAgICAgICAgY2VsbC0+bWV0aG9kVGFibGUoKS0+aGVhcFNuYXBzaG90KGNlbGwsIG1fYnVpbGRl
cik7CisgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOworICAgIH0KKwor
ICAgIEhlYXBTbmFwc2hvdEJ1aWxkZXImIG1fYnVpbGRlcjsKK307CisKK3ZvaWQgSGVhcDo6Z2F0
aGVyRXh0cmFIZWFwU25hcHNob3REYXRhKEhlYXBQcm9maWxlciYgaGVhcFByb2ZpbGVyKQorewor
ICAgIEdDUEhBU0UoR2F0aGVyRXh0cmFIZWFwU25hcHNob3REYXRhKTsKKyAgICBpZiAoSGVhcFNu
YXBzaG90QnVpbGRlciogYnVpbGRlciA9IGhlYXBQcm9maWxlci5hY3RpdmVTbmFwc2hvdEJ1aWxk
ZXIoKSkgeworICAgICAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaGVhcEl0ZXJhdGlvblNjb3BlKCp0
aGlzKTsKKyAgICAgICAgR2F0aGVySGVhcFNuYXBzaG90RGF0YSBmdW5jdG9yKCpidWlsZGVyKTsK
KyAgICAgICAgbV9vYmplY3RTcGFjZS5mb3JFYWNoTGl2ZUNlbGwoaGVhcEl0ZXJhdGlvblNjb3Bl
LCBmdW5jdG9yKTsKKyAgICB9Cit9CisKIHN0cnVjdCBSZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9k
ZXMgOiBNYXJrZWRCbG9jazo6Q291bnRGdW5jdG9yIHsKICAgICBSZW1vdmVEZWFkSGVhcFNuYXBz
aG90Tm9kZXMoSGVhcFNuYXBzaG90JiBzbmFwc2hvdCkKICAgICAgICAgOiBtX3NuYXBzaG90KHNu
YXBzaG90KQpAQCAtNzgzLDE3ICs4MDgsMTQgQEAgc3RydWN0IFJlbW92ZURlYWRIZWFwU25hcHNo
b3ROb2RlcyA6IE1hcmtlZEJsb2NrOjpDb3VudEZ1bmN0b3IgewogICAgIEhlYXBTbmFwc2hvdCYg
bV9zbmFwc2hvdDsKIH07CiAKLXZvaWQgSGVhcDo6cmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVz
KCkKK3ZvaWQgSGVhcDo6cmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVzKEhlYXBQcm9maWxlciYg
aGVhcFByb2ZpbGVyKQogewogICAgIEdDUEhBU0UoUmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVz
KTsKLSAgICBIZWFwUHJvZmlsZXIqIGhlYXBQcm9maWxlciA9IG1fdm0tPmhlYXBQcm9maWxlcigp
OwotICAgIGlmIChVTkxJS0VMWShoZWFwUHJvZmlsZXIpKSB7Ci0gICAgICAgIGlmIChIZWFwU25h
cHNob3QqIHNuYXBzaG90ID0gaGVhcFByb2ZpbGVyLT5tb3N0UmVjZW50U25hcHNob3QoKSkgewot
ICAgICAgICAgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGhlYXBJdGVyYXRpb25TY29wZSgqdGhpcyk7
Ci0gICAgICAgICAgICBSZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMgZnVuY3Rvcigqc25hcHNo
b3QpOwotICAgICAgICAgICAgbV9vYmplY3RTcGFjZS5mb3JFYWNoRGVhZENlbGwoaGVhcEl0ZXJh
dGlvblNjb3BlLCBmdW5jdG9yKTsKLSAgICAgICAgICAgIHNuYXBzaG90LT5zaHJpbmtUb0ZpdCgp
OwotICAgICAgICB9CisgICAgaWYgKEhlYXBTbmFwc2hvdCogc25hcHNob3QgPSBoZWFwUHJvZmls
ZXIubW9zdFJlY2VudFNuYXBzaG90KCkpIHsKKyAgICAgICAgSGVhcEl0ZXJhdGlvblNjb3BlIGhl
YXBJdGVyYXRpb25TY29wZSgqdGhpcyk7CisgICAgICAgIFJlbW92ZURlYWRIZWFwU25hcHNob3RO
b2RlcyBmdW5jdG9yKCpzbmFwc2hvdCk7CisgICAgICAgIG1fb2JqZWN0U3BhY2UuZm9yRWFjaERl
YWRDZWxsKGhlYXBJdGVyYXRpb25TY29wZSwgZnVuY3Rvcik7CisgICAgICAgIHNuYXBzaG90LT5z
aHJpbmtUb0ZpdCgpOwogICAgIH0KIH0KIApAQCAtMTE2Myw3ICsxMTg1LDEyIEBAIE5FVkVSX0lO
TElORSB2b2lkIEhlYXA6OmNvbGxlY3RJbXBsKEhlYXBPcGVyYXRpb24gY29sbGVjdGlvblR5cGUs
IHZvaWQqIHN0YWNrT3JpCiAgICAgcmVtb3ZlRGVhZENvbXBpbGVyV29ya2xpc3RFbnRyaWVzKCk7
CiAgICAgZGVsZXRlVW5tYXJrZWRDb21waWxlZENvZGUoKTsKICAgICBkZWxldGVTb3VyY2VQcm92
aWRlckNhY2hlcygpOwotICAgIHJlbW92ZURlYWRIZWFwU25hcHNob3ROb2RlcygpOworCisgICAg
aWYgKEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92bS0+aGVhcFByb2ZpbGVyKCkpIHsK
KyAgICAgICAgZ2F0aGVyRXh0cmFIZWFwU25hcHNob3REYXRhKCpoZWFwUHJvZmlsZXIpOworICAg
ICAgICByZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMoKmhlYXBQcm9maWxlcik7CisgICAgfQor
CiAgICAgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CiAgICAgd3JpdGVCYXJyaWVyQ3VycmVu
dGx5RXhlY3V0aW5nQ29kZUJsb2NrcygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKaW5k
ZXggMTEwYWMyNy4uMDgwMWI2MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaApAQCAtNjAs
NiArNjAsNyBAQCBjbGFzcyBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrOwogY2xhc3MgR0NBY3Rpdml0
eUNhbGxiYWNrOwogY2xhc3MgR0NBd2FyZUpJVFN0dWJSb3V0aW5lOwogY2xhc3MgSGVhcDsKK2Ns
YXNzIEhlYXBQcm9maWxlcjsKIGNsYXNzIEhlYXBSb290VmlzaXRvcjsKIGNsYXNzIEhlYXBWZXJp
ZmllcjsKIGNsYXNzIEluY3JlbWVudGFsU3dlZXBlcjsKQEAgLTMyOSw3ICszMzAsNiBAQCBwcml2
YXRlOgogICAgIHZvaWQgc3dlZXBBcnJheUJ1ZmZlcnMoKTsKICAgICB2b2lkIHNuYXBzaG90TWFy
a2VkU3BhY2UoKTsKICAgICB2b2lkIGRlbGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7Ci0gICAg
dm9pZCByZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMoKTsKICAgICB2b2lkIG5vdGlmeUluY3Jl
bWVudGFsU3dlZXBlcigpOwogICAgIHZvaWQgd3JpdGVCYXJyaWVyQ3VycmVudGx5RXhlY3V0aW5n
Q29kZUJsb2NrcygpOwogICAgIHZvaWQgcmVzZXRBbGxvY2F0b3JzKCk7CkBAIC0zNDQsNiArMzQ0
LDggQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc3VtZUNvbXBpbGVyVGhyZWFkcygpOwogICAgIHZv
aWQgem9tYmlmeURlYWRPYmplY3RzKCk7CiAgICAgdm9pZCBtYXJrRGVhZE9iamVjdHMoKTsKKyAg
ICB2b2lkIGdhdGhlckV4dHJhSGVhcFNuYXBzaG90RGF0YShIZWFwUHJvZmlsZXImKTsKKyAgICB2
b2lkIHJlbW92ZURlYWRIZWFwU25hcHNob3ROb2RlcyhIZWFwUHJvZmlsZXImKTsKIAogICAgIHZv
aWQgc3dlZXBBbGxMb2dpY2FsbHlFbXB0eVdlYWtCbG9ja3MoKTsKICAgICBib29sIHN3ZWVwTmV4
dExvZ2ljYWxseUVtcHR5V2Vha0Jsb2NrKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwCmluZGV4IGNmZjllMTMuLmQ2MmY4ZGQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIu
Y3BwCkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kTm9k
ZShKU0NlbGwqIGNlbGwpCiAgICAgaWYgKGhhc0V4aXN0aW5nTm9kZUZvckNlbGwoY2VsbCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fYXBwZW5k
aW5nTm9kZU11dGV4KTsKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2J1aWxkaW5n
Tm9kZU11dGV4KTsKIAogICAgIG1fc25hcHNob3QtPmFwcGVuZE5vZGUoSGVhcFNuYXBzaG90Tm9k
ZShjZWxsLCBnZXROZXh0T2JqZWN0SWRlbnRpZmllcigpKSk7CiB9CkBAIC04NCwxMSArODQsNDEg
QEAgdm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmRFZGdlKEpTQ2VsbCogZnJvbSwgSlND
ZWxsKiB0bykKICAgICBpZiAoZnJvbSA9PSB0bykKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3Rk
Ojpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9hcHBlbmRpbmdFZGdlTXV0ZXgpOworICAgIHN0ZDo6
bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fYnVpbGRpbmdFZGdlTXV0ZXgpOwogCiAgICAgbV9lZGdl
cy5hcHBlbmQoSGVhcFNuYXBzaG90RWRnZShmcm9tLCB0bykpOwogfQogCit2b2lkIEhlYXBTbmFw
c2hvdEJ1aWxkZXI6OmFwcGVuZFByb3BlcnR5TmFtZUVkZ2UoSlNDZWxsKiBmcm9tLCBKU0NlbGwq
IHRvLCBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHlOYW1lKQoreworICAgIEFTU0VSVChtX3By
b2ZpbGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigpID09IHRoaXMpOworICAgIEFTU0VSVCh0byk7
CisKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2J1aWxkaW5nRWRnZU11dGV4KTsK
KworICAgIG1fZWRnZXMuYXBwZW5kKEhlYXBTbmFwc2hvdEVkZ2UoZnJvbSwgdG8sIEVkZ2VUeXBl
OjpQcm9wZXJ0eSwgcHJvcGVydHlOYW1lKSk7Cit9CisKK3ZvaWQgSGVhcFNuYXBzaG90QnVpbGRl
cjo6YXBwZW5kVmFyaWFibGVOYW1lRWRnZShKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8sIFVuaXF1
ZWRTdHJpbmdJbXBsKiB2YXJpYWJsZU5hbWUpCit7CisgICAgQVNTRVJUKG1fcHJvZmlsZXIuYWN0
aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7CisgICAgQVNTRVJUKHRvKTsKKworICAgIHN0
ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fYnVpbGRpbmdFZGdlTXV0ZXgpOworCisgICAgbV9l
ZGdlcy5hcHBlbmQoSGVhcFNuYXBzaG90RWRnZShmcm9tLCB0bywgRWRnZVR5cGU6OlZhcmlhYmxl
LCB2YXJpYWJsZU5hbWUpKTsKK30KKwordm9pZCBIZWFwU25hcHNob3RCdWlsZGVyOjphcHBlbmRJ
bmRleEVkZ2UoSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvLCB1aW50MzJfdCBpbmRleCkKK3sKKyAg
ICBBU1NFUlQobV9wcm9maWxlci5hY3RpdmVTbmFwc2hvdEJ1aWxkZXIoKSA9PSB0aGlzKTsKKyAg
ICBBU1NFUlQodG8pOworCisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9idWlsZGlu
Z0VkZ2VNdXRleCk7CisKKyAgICBtX2VkZ2VzLmFwcGVuZChIZWFwU25hcHNob3RFZGdlKGZyb20s
IHRvLCBpbmRleCkpOworfQorCiBib29sIEhlYXBTbmFwc2hvdEJ1aWxkZXI6Omhhc0V4aXN0aW5n
Tm9kZUZvckNlbGwoSlNDZWxsKiBjZWxsKQogewogICAgIGlmICghbV9zbmFwc2hvdC0+cHJldmlv
dXMoKSkKQEAgLTIyMSw2ICsyNTEsMjAgQEAgU3RyaW5nIEhlYXBTbmFwc2hvdEJ1aWxkZXI6Ompz
b24oc3RkOjpmdW5jdGlvbjxib29sIChjb25zdCBIZWFwU25hcHNob3ROb2RlJik+IGEKICAgICAg
ICAganNvbi5hcHBlbmROdW1iZXIodG9JZGVudGlmaWVyKTsKICAgICAgICAganNvbi5hcHBlbmQo
JywnKTsKICAgICAgICAganNvbi5hcHBlbmROdW1iZXIoZWRnZVR5cGVUb051bWJlcihlZGdlLnR5
cGUpKTsKKyAgICAgICAgc3dpdGNoIChlZGdlLnR5cGUpIHsKKyAgICAgICAgY2FzZSBFZGdlVHlw
ZTo6UHJvcGVydHk6CisgICAgICAgIGNhc2UgRWRnZVR5cGU6OlZhcmlhYmxlOgorICAgICAgICAg
ICAganNvbi5hcHBlbmQoJywnKTsKKyAgICAgICAgICAgIGpzb24uYXBwZW5kUXVvdGVkSlNPTlN0
cmluZyhlZGdlLnUubmFtZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFZGdl
VHlwZTo6SW5kZXg6CisgICAgICAgICAgICBqc29uLmFwcGVuZCgnLCcpOworICAgICAgICAgICAg
anNvbi5hcHBlbmROdW1iZXIoZWRnZS51LmluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gTm8gZGF0YSBmb3IgdGhpcyBlZGdlIHR5cGUu
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICBqc29uLmFwcGVuZCgnXScp
OwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBT
bmFwc2hvdEJ1aWxkZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hv
dEJ1aWxkZXIuaAppbmRleCA1OTYwMDM2Li44MDA1OGNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5oCkBAIC0yOSw2ICsyOSw3IEBACiAj
aW5jbHVkZSA8ZnVuY3Rpb25hbD4KICNpbmNsdWRlIDx3dGYvTG9jay5oPgogI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTYyLDkg
KzYzLDMwIEBAIHN0cnVjdCBIZWFwU25hcHNob3RFZGdlIHsKICAgICAgICAgLCB0eXBlKEVkZ2VU
eXBlOjpJbnRlcm5hbCkKICAgICB7IH0KIAorICAgIEhlYXBTbmFwc2hvdEVkZ2UoSlNDZWxsKiBm
cm9tLCBKU0NlbGwqIHRvLCBFZGdlVHlwZSB0eXBlLCBVbmlxdWVkU3RyaW5nSW1wbCogbmFtZSkK
KyAgICAgICAgOiBmcm9tKGZyb20pCisgICAgICAgICwgdG8odG8pCisgICAgICAgICwgdHlwZSh0
eXBlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHR5cGUgPT0gRWRnZVR5cGU6OlByb3BlcnR5IHx8
IHR5cGUgPT0gRWRnZVR5cGU6OlZhcmlhYmxlKTsKKyAgICAgICAgdS5uYW1lID0gbmFtZTsKKyAg
ICB9CisKKyAgICBIZWFwU25hcHNob3RFZGdlKEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bywgdWlu
dDMyX3QgaW5kZXgpCisgICAgICAgIDogZnJvbShmcm9tKQorICAgICAgICAsIHRvKHRvKQorICAg
ICAgICAsIHR5cGUoRWRnZVR5cGU6OkluZGV4KQorICAgIHsKKyAgICAgICAgdS5pbmRleCA9IGlu
ZGV4OworICAgIH0KKwogICAgIEpTQ2VsbCogZnJvbTsKICAgICBKU0NlbGwqIHRvOwogICAgIEVk
Z2VUeXBlIHR5cGU7CisgICAgdW5pb24geworICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogbmFt
ZTsKKyAgICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgfSB1OwogfTsKIAogY2xhc3MgSlNfRVhQ
T1JUX1BSSVZBVEUgSGVhcFNuYXBzaG90QnVpbGRlciB7CkBAIC04NCw2ICsxMDYsOSBAQCBwdWJs
aWM6CiAKICAgICAvLyBBIHJlZmVyZW5jZSBmcm9tIG9uZSBjZWxsIHRvIGFub3RoZXIuCiAgICAg
dm9pZCBhcHBlbmRFZGdlKEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0byk7CisgICAgdm9pZCBhcHBl
bmRQcm9wZXJ0eU5hbWVFZGdlKEpTQ2VsbCogZnJvbSwgSlNDZWxsKiB0bywgVW5pcXVlZFN0cmlu
Z0ltcGwqIHByb3BlcnR5TmFtZSk7CisgICAgdm9pZCBhcHBlbmRWYXJpYWJsZU5hbWVFZGdlKEpT
Q2VsbCogZnJvbSwgSlNDZWxsKiB0bywgVW5pcXVlZFN0cmluZ0ltcGwqIHZhcmlhYmxlTmFtZSk7
CisgICAgdm9pZCBhcHBlbmRJbmRleEVkZ2UoSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvLCB1aW50
MzJfdCBpbmRleCk7CiAKICAgICBTdHJpbmcganNvbigpOwogICAgIFN0cmluZyBqc29uKHN0ZDo6
ZnVuY3Rpb248Ym9vbCAoY29uc3QgSGVhcFNuYXBzaG90Tm9kZSYpPiBhbGxvd05vZGVDYWxsYmFj
ayk7CkBAIC05Niw5ICsxMjEsOSBAQCBwcml2YXRlOgogICAgIEhlYXBQcm9maWxlciYgbV9wcm9m
aWxlcjsKIAogICAgIC8vIFNsb3RWaXNpdG9ycyBydW4gaW4gcGFyYWxsZWwuCi0gICAgTG9jayBt
X2FwcGVuZGluZ05vZGVNdXRleDsKKyAgICBMb2NrIG1fYnVpbGRpbmdOb2RlTXV0ZXg7CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEhlYXBTbmFwc2hvdD4gbV9zbmFwc2hvdDsKLSAgICBMb2NrIG1fYXBw
ZW5kaW5nRWRnZU11dGV4OworICAgIExvY2sgbV9idWlsZGluZ0VkZ2VNdXRleDsKICAgICBWZWN0
b3I8SGVhcFNuYXBzaG90RWRnZT4gbV9lZGdlczsKIH07CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL1Nsb3RWaXNpdG9yLmNwcAppbmRleCA2NDFlNTkwLi43MzRmODE4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCkBAIC0xMzUsNiArMTM1LDE0IEBA
IHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChKU1ZhbHVlIHZhbHVlKQogICAgIHNldE1hcmtlZEFu
ZEFwcGVuZFRvTWFya1N0YWNrKHZhbHVlLmFzQ2VsbCgpKTsKIH0KIAordm9pZCBTbG90VmlzaXRv
cjo6YXBwZW5kSGlkZGVuKEpTVmFsdWUgdmFsdWUpCit7CisgICAgaWYgKCF2YWx1ZSB8fCAhdmFs
dWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIHNldE1hcmtlZEFuZEFwcGVuZFRv
TWFya1N0YWNrKHZhbHVlLmFzQ2VsbCgpKTsKK30KKwogdm9pZCBTbG90VmlzaXRvcjo6c2V0TWFy
a2VkQW5kQXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQogewogICAgIEFTU0VSVCghbV9p
c0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgKaW5kZXggMjZiNjE1ZS4uNTU5MDE1OSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCkBAIC02Nyw4ICs2NywxMCBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhcHBlbmQoSklUV3JpdGVCYXJyaWVy
PFQ+Kik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhcHBlbmQoV3JpdGVCYXJyaWVy
QmFzZTxUPiopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYXBwZW5kSGlkZGVuKFdy
aXRlQmFycmllckJhc2U8VD4qKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9p
ZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOwogICAgIHZvaWQgYXBwZW5k
VmFsdWVzKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qLCBzaXplX3QgY291bnQpOworICAgIHZv
aWQgYXBwZW5kVmFsdWVzSGlkZGVuKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qLCBzaXplX3Qg
Y291bnQpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBhcHBlbmRV
bmJhcnJpZXJlZFBvaW50ZXIoVCoqKTsKQEAgLTExOSw2ICsxMjEsNyBAQCBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwogICAgIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYXBwZW5kKEpTVmFsdWUpOyAvLyBUaGlzIGlzIHByaXZhdGUgdG8gZW5jb3Vy
YWdlIGNsaWVudHMgdG8gdXNlIFdyaXRlQmFycmllcjxUPi4KKyAgICB2b2lkIGFwcGVuZEhpZGRl
bihKU1ZhbHVlKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0TWFya2VkQW5kQXBw
ZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7CiAgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhKU0Nl
bGwqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVz
LmgKaW5kZXggMDMzODcyYy4uYTM3OTIzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKQEAgLTY5LDYgKzY5LDEyIEBAIGlubGluZSB2b2lk
IFNsb3RWaXNpdG9yOjphcHBlbmQoV3JpdGVCYXJyaWVyQmFzZTxUPiogc2xvdCkKICAgICBhcHBl
bmQoc2xvdC0+Z2V0KCkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQg
U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihXcml0ZUJhcnJpZXJCYXNlPFQ+KiBzbG90KQorewor
ICAgIGFwcGVuZEhpZGRlbihzbG90LT5nZXQoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEl0
ZXJhdG9yPgogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwg
SXRlcmF0b3IgZW5kKQogewpAQCAtODIsNiArODgsMTIgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0
b3I6OmFwcGVuZFZhbHVlcyhXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6
ZV8KICAgICAgICAgYXBwZW5kKCZiYXJyaWVyc1tpXSk7CiB9CiAKK2lubGluZSB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRWYWx1ZXNIaWRkZW4oV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFy
cmllcnMsIHNpemVfdCBjb3VudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCisgICAgICAgIGFwcGVuZEhpZGRlbigmYmFycmllcnNbaV0pOworfQorCiBpbmxpbmUg
dm9pZCBTbG90VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNl
SGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQogewogICAgIG1faGVhcC5tX3dlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXJzLmFkZFRocmVhZFNhZmUod2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGUxNGY2OGMuLjAwNGVkMTUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCkBAIC00ODUsMTEgKzQ4NSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNpbXBs
ZU9iamVjdDsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKLSAgICB7
Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICB9Ci0KICAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICBTaW1wbGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2Jq
ZWN0Kj4oY2VsbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
bGFzc0luZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCmlu
ZGV4IDUwNTNmMTQuLjIwMmIxY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
YXNzSW5mby5oCkBAIC0zMCw2ICszMCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBI
ZWFwU25hcHNob3RCdWlsZGVyOwogY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFz
aFRhYmxlOwogCkBAIC0xMTUsNiArMTE2LDkgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB0
eXBlZGVmIHZvaWQgKCpEdW1wVG9TdHJlYW1GdW5jdGlvblB0cikoY29uc3QgSlNDZWxsKiwgUHJp
bnRTdHJlYW0mKTsKICAgICBEdW1wVG9TdHJlYW1GdW5jdGlvblB0ciBkdW1wVG9TdHJlYW07CiAK
KyAgICB0eXBlZGVmIHZvaWQgKCpIZWFwU25hcHNob3RGdW5jdGlvblB0cikoSlNDZWxsKiwgSGVh
cFNuYXBzaG90QnVpbGRlciYpOworICAgIEhlYXBTbmFwc2hvdEZ1bmN0aW9uUHRyIGhlYXBTbmFw
c2hvdDsKKwogICAgIHR5cGVkZWYgc2l6ZV90ICgqRXN0aW1hdGVkU2l6ZUZ1bmN0aW9uUHRyKShK
U0NlbGwqKTsKICAgICBFc3RpbWF0ZWRTaXplRnVuY3Rpb25QdHIgZXN0aW1hdGVkU2l6ZTsKIH07
CkBAIC0xNjcsNiArMTcxLDcgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNz
TmFtZTo6aXNFeHRlbnNpYmxlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnNldFByb3RvdHlwZU9m
LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmR1bXBUb1N0cmVhbSwgXAorICAgICAgICAmQ2xhc3NO
YW1lOjpoZWFwU25hcHNob3QsIFwKICAgICAgICAgJkNsYXNzTmFtZTo6ZXN0aW1hdGVkU2l6ZSBc
CiAgICAgfSwgXAogICAgIENsYXNzTmFtZTo6VHlwZWRBcnJheVN0b3JhZ2VUeXBlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAppbmRleCA1YmFiMzg2Li4zY2MzOTEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKQEAgLTY1LDYgKzY1LDEw
IEBAIHZvaWQgSlNDZWxsOjpjb3B5QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwg
Q29weVRva2VuKQogewogfQogCit2b2lkIEpTQ2VsbDo6aGVhcFNuYXBzaG90KEpTQ2VsbCosIEhl
YXBTbmFwc2hvdEJ1aWxkZXImKQoreworfQorCiBib29sIEpTQ2VsbDo6Z2V0U3RyaW5nKEV4ZWNT
dGF0ZSogZXhlYywgU3RyaW5nJiBzdHJpbmdWYWx1ZSkgY29uc3QKIHsKICAgICBpZiAoIWlzU3Ry
aW5nKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCmluZGV4IDk2NGNmOTgu
LmZlYTcyMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2Vs
bC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5oCkBAIC0xNDEs
NiArMTQxLDggQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiwgU2xvdFZpc2l0b3ImKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBjb3B5
QmFja2luZ1N0b3JlKEpTQ2VsbCosIENvcHlWaXNpdG9yJiwgQ29weVRva2VuKTsKIAorICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGhlYXBTbmFwc2hvdChKU0NlbGwqLCBIZWFwU25h
cHNob3RCdWlsZGVyJik7CisKICAgICAvLyBPYmplY3Qgb3BlcmF0aW9ucywgd2l0aCB0aGUgdG9P
YmplY3Qgb3BlcmF0aW9uIGluY2x1ZGVkLgogICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
KCkgY29uc3Q7CiAgICAgY29uc3QgTWV0aG9kVGFibGUqIG1ldGhvZFRhYmxlKCkgY29uc3Q7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVj
b3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNv
cmQuY3BwCmluZGV4IGYxZDc2OTUuLjkyM2NkNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSlNFbnZpcm9ubWVudFJlY29yZC5o
IgogCisjaW5jbHVkZSAiSGVhcFNuYXBzaG90QnVpbGRlci5oIgogI2luY2x1ZGUgIkpTQ0lubGlu
ZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC00MCw3ICs0MSwyNyBAQCB2b2lkIEpTRW52aXJv
bm1lbnRSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlz
aXRvcikKICAgICBKU0Vudmlyb25tZW50UmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRW52
aXJvbm1lbnRSZWNvcmQqPihjZWxsKTsKICAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7CiAgICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT52YXJpYWJsZXMo
KSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+c2NvcGVTaXplKCkpOworICAgIHZpc2l0b3Iu
YXBwZW5kVmFsdWVzSGlkZGVuKHRoaXNPYmplY3QtPnZhcmlhYmxlcygpLCB0aGlzT2JqZWN0LT5z
eW1ib2xUYWJsZSgpLT5zY29wZVNpemUoKSk7Cit9CisKK3ZvaWQgSlNFbnZpcm9ubWVudFJlY29y
ZDo6aGVhcFNuYXBzaG90KEpTQ2VsbCogY2VsbCwgSGVhcFNuYXBzaG90QnVpbGRlciYgYnVpbGRl
cikKK3sKKyAgICBKU0Vudmlyb25tZW50UmVjb3JkKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRW52
aXJvbm1lbnRSZWNvcmQqPihjZWxsKTsKKyAgICBCYXNlOjpoZWFwU25hcHNob3QoY2VsbCwgYnVp
bGRlcik7CisKKyAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcih0aGlzT2JqZWN0LT5zeW1i
b2xUYWJsZSgpLT5tX2xvY2spOworICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGVuZCA9
IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmVuZChsb2NrZXIpOworICAgIGZvciAoU3ltYm9s
VGFibGU6Ok1hcDo6aXRlcmF0b3IgaXQgPSB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5iZWdp
bihsb2NrZXIpOyBpdCAhPSBlbmQ7ICsraXQpIHsKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeTo6
RmFzdCBlbnRyeSA9IGl0LT52YWx1ZTsKKyAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7
CisgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CisgICAg
ICAgIGlmICghdGhpc09iamVjdC0+aXNWYWxpZFNjb3BlT2Zmc2V0KG9mZnNldCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBKU1ZhbHVlIHRvVmFsdWUgPSB0aGlzT2JqZWN0LT52
YXJpYWJsZUF0KG9mZnNldCkuZ2V0KCk7CisgICAgICAgIGlmICh0b1ZhbHVlICYmIHRvVmFsdWUu
aXNDZWxsKCkpCisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZFZhcmlhYmxlTmFtZUVkZ2UodGhp
c09iamVjdCwgdG9WYWx1ZS5hc0NlbGwoKSwgaXQtPmtleS5nZXQoKSk7CisgICAgfQogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRW52aXJvbm1lbnRSZWNvcmQuaAppbmRleCA4Y2IzZGQwLi5jYTI2MWRiIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5oCkBA
IC0xMTEsNiArMTExLDcgQEAgcHJvdGVjdGVkOgogICAgIH0KIAogICAgIHN0YXRpYyB2b2lkIHZp
c2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICBzdGF0aWMgdm9pZCBoZWFw
U25hcHNob3QoSlNDZWxsKiwgSGVhcFNuYXBzaG90QnVpbGRlciYpOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAKaW5k
ZXggMTg3ZTc3NC4uMjkyNzcwMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmNwcApAQCAtMzUsMTUgKzM1LDE2IEBACiAjaW5jbHVkZSAiRXhjZXB0aW9uLmgiCiAj
aW5jbHVkZSAiRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2luY2x1
ZGUgIkhlYXBTbmFwc2hvdEJ1aWxkZXIuaCIKICNpbmNsdWRlICJJbmRleGluZ0hlYWRlcklubGlu
ZXMuaCIKICNpbmNsdWRlICJKU0JvdW5kU2xvdEJhc2VGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxP
YmplY3QuaCIKICNpbmNsdWRlICJMb29rdXAuaCIKICNpbmNsdWRlICJOYXRpdmVFcnJvckNvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUu
aCIKLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9y
LmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lQXJyYXkuaCIKICNpbmNsdWRlICJQcm94eU9iamVj
dC5oIgpAQCAtMTU3LDEyICsxNTgsMTEgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojpj
b3B5QnV0dGVyZmx5KENvcHlWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHQKICAgICB9
IAogfQogCi1BTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RW
aXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgc2l6ZV90IHN0b3JhZ2VTaXpl
KQorQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRv
ciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXR0ZXJmbHksIFN0cnVjdHVyZSogc3RydWN0dXJlKQog
ewogICAgIEFTU0VSVChidXR0ZXJmbHkpOwogICAgIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
ID0gdGhpcy0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSk7Ci0gICAgCisgICAgc2l6ZV90IHN0b3Jh
Z2VTaXplID0gc3RydWN0dXJlLT5vdXRPZkxpbmVTaXplKCk7CiAgICAgc2l6ZV90IHByb3BlcnR5
Q2FwYWNpdHkgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZUNhcGFjaXR5KCk7CiAgICAgc2l6ZV90IHBy
ZUNhcGFjaXR5OwogICAgIHNpemVfdCBpbmRleGluZ1BheWxvYWRTaXplSW5CeXRlczsKQEAgLTE3
Nyw3ICsxNzcsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5
KFNsb3RWaXNpdG9yJiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dAogICAgIHNpemVfdCBjYXBhY2l0
eUluQnl0ZXMgPSBCdXR0ZXJmbHk6OnRvdGFsU2l6ZShwcmVDYXBhY2l0eSwgcHJvcGVydHlDYXBh
Y2l0eSwgaGFzSW5kZXhpbmdIZWFkZXIsIGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzKTsKIAog
ICAgIC8vIE1hcmsgdGhlIHByb3BlcnRpZXMuCi0gICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0
dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7Cisg
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2Uo
KSAtIHN0b3JhZ2VTaXplLCBzdG9yYWdlU2l6ZSk7CiAgICAgdmlzaXRvci5jb3B5TGF0ZXIoCiAg
ICAgICAgIHRoaXMsIEJ1dHRlcmZseUNvcHlUb2tlbiwKICAgICAgICAgYnV0dGVyZmx5LT5iYXNl
KHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFjaXR5KSwgY2FwYWNpdHlJbkJ5dGVzKTsKQEAgLTE4
NSwxMCArMTg1LDEwIEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJm
bHkoU2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0CiAgICAgLy8gTWFyayB0aGUg
YXJyYXkgaWYgYXBwcm9wcmlhdGUuCiAgICAgc3dpdGNoICh0aGlzLT5pbmRleGluZ1R5cGUoKSkg
ewogICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIHZpc2l0
b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5
LT5wdWJsaWNMZW5ndGgoKSk7CisgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1
dHRlcmZseS0+Y29udGlndW91cygpLmRhdGEoKSwgYnV0dGVyZmx5LT5wdWJsaWNMZW5ndGgoKSk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQ
RVM6Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdl
KCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgoKSk7
CisgICAgICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzSGlkZGVuKGJ1dHRlcmZseS0+YXJyYXlTdG9y
YWdlKCktPm1fdmVjdG9yLCBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT52ZWN0b3JMZW5ndGgo
KSk7CiAgICAgICAgIGlmIChidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3NwYXJzZU1hcCkK
ICAgICAgICAgICAgIHZpc2l0b3IuYXBwZW5kKCZidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5t
X3NwYXJzZU1hcCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMjE3LDcgKzIxNyw3IEBAIHZvaWQgSlNP
YmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikK
IAogICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09iamVjdC0+bV9idXR0ZXJmbHkuZ2V0
V2l0aG91dEJhcnJpZXIoKTsKICAgICBpZiAoYnV0dGVyZmx5KQotICAgICAgICB0aGlzT2JqZWN0
LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVy
ZSh2aXNpdG9yLnZtKCkpLT5vdXRPZkxpbmVTaXplKCkpOworICAgICAgICB0aGlzT2JqZWN0LT52
aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRoaXNPYmplY3QtPnN0cnVjdHVyZSh2
aXNpdG9yLnZtKCkpKTsKIAogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXND
aGVja2luZ0ZvckRlZmF1bHRNYXJrVmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbjsKQEAgLTIzNyw2ICsyMzcsNDQgQEAgdm9pZCBKU09iamVjdDo6Y29weUJhY2tp
bmdTdG9yZShKU0NlbGwqIGNlbGwsIENvcHlWaXNpdG9yJiB2aXNpdG9yLCBDb3B5VG9rZW4gdG8K
ICAgICAgICAgdGhpc09iamVjdC0+Y29weUJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHRo
aXNPYmplY3QtPnN0cnVjdHVyZSgpLT5vdXRPZkxpbmVTaXplKCkpOwogfQogCit2b2lkIEpTT2Jq
ZWN0OjpoZWFwU25hcHNob3QoSlNDZWxsKiBjZWxsLCBIZWFwU25hcHNob3RCdWlsZGVyJiBidWls
ZGVyKQoreworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTT2JqZWN0Kj4oY2Vs
bCk7CisgICAgQmFzZTo6aGVhcFNuYXBzaG90KGNlbGwsIGJ1aWxkZXIpOworCisgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0LT5zdHJ1Y3R1cmUoKTsKKyAgICBmb3IgKGF1dG8m
IGVudHJ5IDogc3RydWN0dXJlLT5nZXRQcm9wZXJ0aWVzQ29uY3VycmVudGx5KCkpIHsKKyAgICAg
ICAgSlNWYWx1ZSB0b1ZhbHVlID0gdGhpc09iamVjdC0+Z2V0RGlyZWN0KGVudHJ5Lm9mZnNldCk7
CisgICAgICAgIGlmICh0b1ZhbHVlICYmIHRvVmFsdWUuaXNDZWxsKCkpCisgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZFByb3BlcnR5TmFtZUVkZ2UodGhpc09iamVjdCwgdG9WYWx1ZS5hc0NlbGwo
KSwgZW50cnkua2V5KTsKKyAgICB9CisKKyAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRoaXNP
YmplY3QtPm1fYnV0dGVyZmx5LmdldFdpdGhvdXRCYXJyaWVyKCk7CisgICAgaWYgKGJ1dHRlcmZs
eSkgeworICAgICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4qIGRhdGE7CisgICAgICAgIHVpbnQz
Ml90IGNvdW50ID0gMDsKKworICAgICAgICBzd2l0Y2ggKHRoaXNPYmplY3QtPmluZGV4aW5nVHlw
ZSgpKSB7CisgICAgICAgIGNhc2UgQUxMX0NPTlRJR1VPVVNfSU5ERVhJTkdfVFlQRVM6CisgICAg
ICAgICAgICBkYXRhID0gYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpOworICAgICAgICAg
ICAgY291bnQgPSBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQUxMX0FSUkFZX1NUT1JBR0VfSU5ERVhJTkdfVFlQRVM6CisgICAgICAg
ICAgICBkYXRhID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+bV92ZWN0b3I7CisgICAgICAg
ICAgICBjb3VudCA9IGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorCisgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBjb3VudDsgKytp
KSB7CisgICAgICAgICAgICBKU1ZhbHVlIHRvVmFsdWUgPSBkYXRhW2ldLmdldCgpOworICAgICAg
ICAgICAgaWYgKHRvVmFsdWUgJiYgdG9WYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgICAgICBi
dWlsZGVyLmFwcGVuZEluZGV4RWRnZSh0aGlzT2JqZWN0LCB0b1ZhbHVlLmFzQ2VsbCgpLCBpKTsK
KyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNGaW5hbE9iamVj
dCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0ZpbmFsT2JqZWN0Kj4oY2VsbCk7CkBAIC0yNDgsMTMg
KzI4NiwxMyBAQCB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxs
LCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICAKICAgICBKU0NlbGw6OnZpc2l0Q2hpbGRyZW4o
dGhpc09iamVjdCwgdmlzaXRvcik7CiAKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHRoaXNP
YmplY3QtPnN0cnVjdHVyZSgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpc09iamVj
dC0+c3RydWN0dXJlKHZpc2l0b3Iudm0oKSk7CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0
aGlzT2JqZWN0LT5idXR0ZXJmbHkoKTsKICAgICBpZiAoYnV0dGVyZmx5KQotICAgICAgICB0aGlz
T2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9yLCBidXR0ZXJmbHksIHN0cnVjdHVyZS0+b3V0
T2ZMaW5lU2l6ZSgpKTsKKyAgICAgICAgdGhpc09iamVjdC0+dmlzaXRCdXR0ZXJmbHkodmlzaXRv
ciwgYnV0dGVyZmx5LCBzdHJ1Y3R1cmUpOwogCiAgICAgc2l6ZV90IHN0b3JhZ2VTaXplID0gc3Ry
dWN0dXJlLT5pbmxpbmVTaXplKCk7Ci0gICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVj
dC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXNIaWRkZW4odGhpc09iamVjdC0+aW5saW5lU3RvcmFnZSgpLCBzdG9yYWdlU2l6ZSk7CiAKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECiAgICAgdmlzaXRvci5tX2lzQ2hlY2tpbmdGb3JEZWZhdWx0TWFy
a1Zpb2xhdGlvbiA9IHdhc0NoZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb247CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuaAppbmRleCAxNjg3NmQ0Li5kY2FiNTRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKQEAgLTk4LDYgKzk4LDcg
QEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVk
U2l6ZShKU0NlbGwqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tl
bik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgaGVhcFNuYXBzaG90KEpTQ2Vs
bCosIEhlYXBTbmFwc2hvdEJ1aWxkZXImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFN0cmluZyBjYWxjdWxhdGVkQ2xhc3NOYW1lKEpTT2JqZWN0Kik7CkBAIC03ODYs
NyArNzg3LDcgQEAgcHJvdGVjdGVkOgogICAgIC8vIFRvIGNyZWF0ZSBkZXJpdmVkIHR5cGVzIHlv
dSBsaWtlbHkgd2FudCBKU05vbkZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICBKU09iamVjdChWTSYs
IFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSAwKTsKICAgICAgICAgCi0gICAgdm9pZCB2aXNpdEJ1
dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7Cisg
ICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVy
ZSopOwogICAgIHZvaWQgY29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYsIEJ1dHRlcmZseSosIHNp
emVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0
aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dC5jcHAKaW5kZXggMTVmMTlmNS4uOWQ1YmRmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJIZWFwU25hcHNob3RCdWlsZGVyLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTYzLDEwICs2NCwz
MCBAQCB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgc2xvdFZpcwogewogICAgIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LSAgICBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHNsb3RW
aXNpdG9yKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHNsb3RWaXNpdG9y
KTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0aGlzT2JqZWN0LT5tX3ZhcmlhYmxlcy5z
aXplKCk7IGktLTspCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV92
YXJpYWJsZXNbaV0pOworICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRIaWRkZW4oJnRoaXNPYmpl
Y3QtPm1fdmFyaWFibGVzW2ldKTsKK30KKwordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
OjpoZWFwU25hcHNob3QoSlNDZWxsKiBjZWxsLCBIZWFwU25hcHNob3RCdWlsZGVyJiBidWlsZGVy
KQoreworICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOworICAgIEJhc2U6OmhlYXBTbmFwc2hv
dChjZWxsLCBidWlsZGVyKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNP
YmplY3QtPnN5bWJvbFRhYmxlKCktPm1fbG9jayk7CisgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRl
cmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKGxvY2tlcik7CisgICAg
Zm9yIChTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRh
YmxlKCktPmJlZ2luKGxvY2tlcik7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTeW1ib2xU
YWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXQtPnZhbHVlOworICAgICAgICBBU1NFUlQoIWVudHJ5
LmlzTnVsbCgpKTsKKyAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZz
ZXQoKTsKKyAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlkU2NvcGVPZmZzZXQob2Zmc2V0
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTVmFsdWUgdG9WYWx1ZSA9IHRo
aXNPYmplY3QtPnZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKTsKKyAgICAgICAgaWYgKHRvVmFsdWUg
JiYgdG9WYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVmFyaWFibGVO
YW1lRWRnZSh0aGlzT2JqZWN0LCB0b1ZhbHVlLmFzQ2VsbCgpLCBpdC0+a2V5LmdldCgpKTsKKyAg
ICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCmluZGV4IDQ3NmMy
ODguLjRiMDZiYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKQEAgLTg1LDYgKzg1LDcgQEAgcHVibGlj
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNjb3BlT2Zmc2V0IGFkZFZhcmlhYmxlcyh1bnNpZ25l
ZCBudW1iZXJPZlZhcmlhYmxlc1RvQWRkLCBKU1ZhbHVlKTsKICAgICAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgaGVhcFNuYXBzaG90KEpTQ2VsbCos
IEhlYXBTbmFwc2hvdEJ1aWxkZXImKTsKIAogcHJvdGVjdGVkOgogICAgIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogc2NvcGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAppbmRleCBjMTk1
Y2M2Li4wYzJjNDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAKQEAgLTExMTYsNyArMTExNiw5IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgaWYgKHRoaXNPYmplY3Qt
PmlzUGlubmVkUHJvcGVydHlUYWJsZSgpKSB7CiAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5t
X3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKLSAgICB9IGVsc2UgaWYgKHRoaXNPYmplY3QtPm1f
cHJvcGVydHlUYWJsZVVuc2FmZSkKKyAgICB9IGVsc2UgaWYgKHZpc2l0b3IuaXNCdWlsZGluZ0hl
YXBTbmFwc2hvdCgpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcm9w
ZXJ0eVRhYmxlVW5zYWZlKTsKKyAgICBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFi
bGVVbnNhZmUpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVh
cigpOwogCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faW5mZXJyZWRUeXBlVGFi
bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAppbmRleCA0YTlj
NTY3Li4yYzMwM2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aApAQCAtNzE2LDYgKzcxNiw3IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlIG1fdHJhbnNpdGlvblRhYmxlOwogCiAgICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91
Z2ggcHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90
aGVyIHRocmVhZC4KKyAgICAvLyBEdXJpbmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNs
ZWFyaW5nIHRoZSB0YWJsZSBzbyBpdCBpcyBzYWZlIHRvIHVzZS4KICAgICBXcml0ZUJhcnJpZXI8
UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogCiAgICAgV3JpdGVCYXJyaWVy
PEluZmVycmVkVHlwZVRhYmxlPiBtX2luZmVycmVkVHlwZVRhYmxlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDIxYmNhYTUuLmE1
ZTRiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmgKQEAgLTI0Miw3ICsyNDIsNyBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnB1dFdp
bGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpCiAKIEFMV0FZU19JTkxJTkUgV3JpdGVCYXJyaWVyPFBy
b3BlcnR5VGFibGU+JiBTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGUoKQogewotICAgIEFTU0VSVCgh
Z2xvYmFsT2JqZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT52bSgpLmhlYXAuaXNDb2xsZWN0aW5n
KCkpOworICAgIEFTU0VSVCghZ2xvYmFsT2JqZWN0KCkgfHwgKCFnbG9iYWxPYmplY3QoKS0+dm0o
KS5oZWFwLmlzQ29sbGVjdGluZygpIHx8IGdsb2JhbE9iamVjdCgpLT52bSgpLmhlYXAuaXNIZWFw
U25hcHNob3R0aW5nKCkpKTsKICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2Ry
aXZlci9kcml2ZXIuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVy
L2RyaXZlci9kcml2ZXIuanMKaW5kZXggZDA2Y2E4Mi4uODJmODBmMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvZHJpdmVyL2RyaXZl
ci5qcwpAQCAtMjQwLDMgKzI0MCwxNyBAQCBmdW5jdGlvbiBjcmVhdGVIZWFwU25hcHNob3QoKSB7
CiAKICAgICByZXR1cm4gbmV3IEhlYXBTbmFwc2hvdChqc29uKTsKIH0KKworZnVuY3Rpb24gZm9s
bG93UGF0aChub2RlLCBwYXRoKSB7CisgICAgbGV0IGN1cnJlbnQgPSBub2RlOworICAgIGZvciAo
bGV0IGNvbXBvbmVudCBvZiBwYXRoKSB7CisgICAgICAgIGxldCBlZGdlcyA9IG51bGw7CisgICAg
ICAgIGlmIChjb21wb25lbnQuZWRnZSkKKyAgICAgICAgICAgIGVkZ2VzID0gY3VycmVudC5vdXRn
b2luZ0VkZ2VzLmZpbHRlcigoZSkgPT4gZS5kYXRhID09PSBjb21wb25lbnQuZWRnZSk7CisgICAg
ICAgIGVsc2UgaWYgKGNvbXBvbmVudC5ub2RlKQorICAgICAgICAgICAgZWRnZXMgPSBjdXJyZW50
Lm91dGdvaW5nRWRnZXMuZmlsdGVyKChlKSA9PiBlLnRvLmNsYXNzTmFtZSA9PT0gY29tcG9uZW50
Lm5vZGUpOworICAgICAgICBhc3NlcnQoZWRnZXMubGVuZ3RoID09PSAxLCAiQW1iaWd1b3VzIG9y
IGJhZCBwYXRoIGNvbXBvbmVudDogIiArIEpTT04uc3RyaW5naWZ5KGNvbXBvbmVudCkpOworICAg
ICAgICBjdXJyZW50ID0gZWRnZXNbMF0udG87CisgICAgfQorICAgIHJldHVybiBjdXJyZW50Owor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9w
cm9wZXJ0eS1lZGdlLXR5cGVzLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQ
cm9maWxlci9wcm9wZXJ0eS1lZGdlLXR5cGVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmE5YmFmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvaGVhcFByb2ZpbGVyL3Byb3BlcnR5LWVkZ2UtdHlwZXMuanMKQEAgLTAsMCArMSw5
OCBAQAorbG9hZCgiLi9kcml2ZXIvZHJpdmVyLmpzIik7CisKK2xldCBzaW1wbGVPYmplY3QgPSBu
ZXcgU2ltcGxlT2JqZWN0Oworc2V0SGlkZGVuVmFsdWUoc2ltcGxlT2JqZWN0LCAiaGlkZGVuVmFs
dWUiKTsgLy8gSW50ZXJuYWwKK3NpbXBsZU9iamVjdC5wcm9wZXJ0eU5hbWUxID0gInByb3BlcnR5
VmFsdWUxIjsgLy8gUHJvcGVydHkKK3NpbXBsZU9iamVjdFsicHJvcGVydHlOYW1lMiJdID0gInBy
b3BlcnR5VmFsdWUyIjsgLy8gUHJvcGVydHkKK3NpbXBsZU9iamVjdFsxMDBdID0gImluZGV4ZWRW
YWx1ZSI7IC8vIEluZGV4CitzaW1wbGVPYmplY3RbMHhmZmZmZmZmZiArIDEwMF0gPSAibGFyZ2VJ
bmRleFZhbHVlQmVjb21pbmdQcm9wZXJ0eSI7IC8vIFByb3BlcnR5CitzaW1wbGVPYmplY3QucG9p
bnQgPSB7eDoieDEiLCB5OiJ5MSJ9OyAvLyBQcm9wZXJ0eSA9PiBvYmplY3Qgd2l0aCAyIGlubGlu
ZSBwcm9wZXJ0aWVzLgorCisvLyAtLS0tLS0tLS0tCisKK2Z1bmN0aW9uIGV4Y2x1ZGVTdHJ1Y3R1
cmUoZWRnZXMpIHsKKyAgICByZXR1cm4gZWRnZXMuZmlsdGVyKCh4KSA9PiB4LnRvLmNsYXNzTmFt
ZSAhPT0gIlN0cnVjdHVyZSIpOworfQorCitsZXQgc25hcHNob3QgPSBjcmVhdGVIZWFwU25hcHNo
b3QoKTsKKworLy8gSW50ZXJuYWwsIFByb3BlcnR5LCBhbmQgSW5kZXggZWRnZXMgb24gYW4gT2Jq
ZWN0LgorbGV0IG5vZGVzID0gc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJTaW1wbGVPYmpl
Y3QiKTsKK2Fzc2VydChub2Rlcy5sZW5ndGggPT09IDEsICJTbmFwc2hvdCBzaG91bGQgY29udGFp
biAxICdTaW1wbGVPYmplY3QnIGluc3RhbmNlIik7CitsZXQgc2ltcGxlT2JqZWN0Tm9kZSA9IG5v
ZGVzWzBdOworbGV0IGVkZ2VzID0gZXhjbHVkZVN0cnVjdHVyZShzaW1wbGVPYmplY3ROb2RlLm91
dGdvaW5nRWRnZXMpOworbGV0IHBvaW50Tm9kZSA9IG51bGw7CisKK2xldCBzZWVuSGlkZGVuVmFs
dWUgPSBmYWxzZTsKK2xldCBzZWVuUHJvcGVydHlOYW1lMSA9IGZhbHNlOworbGV0IHNlZW5Qcm9w
ZXJ0eU5hbWUyID0gZmFsc2U7CitsZXQgc2VlbkluZGV4MTAwID0gZmFsc2U7CitsZXQgc2Vlbkxh
cmdlSW5kZXggPSBmYWxzZTsKK2xldCBzZWVuT2JqZWN0V2l0aElubGluZVN0b3JhZ2UgPSBmYWxz
ZTsKK2xldCBsYXJnZUluZGV4TmFtZSA9ICgweGZmZmZmZmZmICsgMTAwKS50b1N0cmluZygpOwor
Citmb3IgKGxldCBlZGdlIG9mIGVkZ2VzKSB7CisgICAgc3dpdGNoIChlZGdlLnR5cGUpIHsKKyAg
ICBjYXNlICJJbnRlcm5hbCI6CisgICAgICAgIGFzc2VydCghc2VlbkhpZGRlblZhbHVlKTsKKyAg
ICAgICAgc2VlbkhpZGRlblZhbHVlID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAi
UHJvcGVydHkiOgorICAgICAgICBpZiAoZWRnZS5kYXRhID09PSAicHJvcGVydHlOYW1lMSIpCisg
ICAgICAgICAgICBzZWVuUHJvcGVydHlOYW1lMSA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGVk
Z2UuZGF0YSA9PT0gInByb3BlcnR5TmFtZTIiKQorICAgICAgICAgICAgc2VlblByb3BlcnR5TmFt
ZTIgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChlZGdlLmRhdGEgPT09IGxhcmdlSW5kZXhOYW1l
KQorICAgICAgICAgICAgc2VlbkxhcmdlSW5kZXggPSB0cnVlOworICAgICAgICBlbHNlIGlmIChl
ZGdlLmRhdGEgPT09ICJwb2ludCIpIHsKKyAgICAgICAgICAgIHNlZW5Qb2ludCA9IHRydWU7Cisg
ICAgICAgICAgICBwb2ludE5vZGUgPSBlZGdlLnRvOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgcHJvcGVydHkgbmFtZSIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlICJJbmRleCI6CisgICAgICAgIGlmIChlZGdlLmRhdGEgPT09IDEwMCkK
KyAgICAgICAgICAgIHNlZW5JbmRleDEwMCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgIlZhcmlhYmxlIjoKKyAgICAgICAgYXNzZXJ0KGZhbHNlLCAiU2hvdWxkIG5vdCBzZWUgYSB2
YXJpYWJsZSBlZGdlIGZvciBTaW1wbGVPYmplY3QgaW5zdGFuY2UiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlLCAiVW5leHBlY3RlZCBlZGdlIHR5
cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCithc3NlcnQoc2VlbkhpZGRlblZhbHVl
LCAiU2hvdWxkIHNlZSBJbnRlcm5hbCBlZGdlIGZvciBoaWRkZW4gdmFsdWUiKTsKK2Fzc2VydChz
ZWVuUHJvcGVydHlOYW1lMSwgIlNob3VsZCBzZWUgUHJvcGVydHkgZWRnZSBmb3IgcHJvcGVydHlO
YW1lMSIpOworYXNzZXJ0KHNlZW5Qcm9wZXJ0eU5hbWUyLCAiU2hvdWxkIHNlZSBQcm9wZXJ0eSBl
ZGdlIGZvciBwcm9wZXJ0eU5hbWUyIik7Cithc3NlcnQoc2VlbkluZGV4MTAwLCAiU2hvdWxkIHNl
ZSBJbmRleCBlZGdlIGZvciBpbmRleCAxMDAiKTsKK2Fzc2VydChzZWVuTGFyZ2VJbmRleCwgIlNo
b3VsZCBzZWUgUHJvcGVydHkgZWRnZSBmb3IgaW5kZXggIiArIGxhcmdlSW5kZXhOYW1lKTsKKwor
CisvLyBQcm9wZXJ0eSBvbiBhbiBPYmplY3QncyBpbmxpbmUgc3RvcmFnZS4KK2xldCBwb2ludEVk
Z2VzID0gZXhjbHVkZVN0cnVjdHVyZShwb2ludE5vZGUub3V0Z29pbmdFZGdlcyk7CisKK2xldCBz
ZWVuUHJvcGVydHlYID0gZmFsc2U7CitsZXQgc2VlblByb3BlcnR5WSA9IGZhbHNlOworCitmb3Ig
KGxldCBlZGdlIG9mIHBvaW50RWRnZXMpIHsKKyAgICBzd2l0Y2ggKGVkZ2UudHlwZSkgeworICAg
IGNhc2UgIlByb3BlcnR5IjoKKyAgICAgICAgaWYgKGVkZ2UuZGF0YSA9PT0gIngiKQorICAgICAg
ICAgICAgc2VlblByb3BlcnR5WCA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGVkZ2UuZGF0YSA9
PT0gInkiKQorICAgICAgICAgICAgc2VlblByb3BlcnR5WSA9IHRydWU7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgcHJvcGVydHkgbmFtZSIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlICJJbmRleCI6CisgICAgY2FzZSAiVmFyaWFibGUiOgor
ICAgIGNhc2UgIkludGVybmFsIjoKKyAgICAgICAgYXNzZXJ0KGZhbHNlLCAiVW5leHBlY3RlZCBl
ZGdlIHR5cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCithc3NlcnQoc2VlblByb3Bl
cnR5WCwgIlNob3VsZCBzZWUgUHJvcGVydHkgZWRnZSBmb3IgeCIpOworYXNzZXJ0KHNlZW5Qcm9w
ZXJ0eVksICJTaG91bGQgc2VlIFByb3BlcnR5IGVkZ2UgZm9yIHkiKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvdmFyaWFibGUtZWRnZS10eXBl
cy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvdmFyaWFibGUt
ZWRnZS10eXBlcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmE2NzVl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9m
aWxlci92YXJpYWJsZS1lZGdlLXR5cGVzLmpzCkBAIC0wLDAgKzEsNjkgQEAKK2xvYWQoIi4vZHJp
dmVyL2RyaXZlci5qcyIpOworCitsZXQgZ2xvYmFsU2NvcGVWYXJpYWJsZSA9ICJnbG9iYWxTY29w
ZVZhcmlhYmxlVmFsdWUiOworbGV0IHNpbXBsZU9iamVjdCA9IG5ldyBTaW1wbGVPYmplY3Q7CisK
KyhmdW5jdGlvbigpIHsKKyAgICBsZXQgY2xvc3VyZVZhcmlhYmxlID0ge307CisgICAgc2ltcGxl
T2JqZWN0LmYgPSBmdW5jdGlvbigpIHsgY2xvc3VyZVZhcmlhYmxlLnggPSAwOyB9Cit9KSgpOwor
CisvLyAtLS0tLS0tLS0tCisKK2xldCBzbmFwc2hvdCA9IGNyZWF0ZUhlYXBTbmFwc2hvdCgpOwor
CisvLyBHbG9iYWwgU2NvcGUgPT4gImdsb2JhbFNjb3BlVmFyaWFibGUiCitsZXQgbm9kZXMgPSBz
bmFwc2hvdC5ub2Rlc1dpdGhDbGFzc05hbWUoIkpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Iik7
Cithc3NlcnQobm9kZXMubGVuZ3RoID09PSAxLCAiU2hvdWxkIGJlIG9ubHkgMSAnSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQnIGluc3RhbmNlIik7CitsZXQgZ2xvYmFsU2NvcGVOb2RlID0gbm9k
ZXNbMF07CisKK2xldCBzZWVuR2xvYmFsU2NvcGVWYXJpYWJsZSA9IGZhbHNlOworbGV0IHNlZW5T
aW1wbGVPYmplY3RWYXJpYWJsZSA9IGZhbHNlOworCitmb3IgKGxldCBlZGdlIG9mIGdsb2JhbFNj
b3BlTm9kZS5vdXRnb2luZ0VkZ2VzKSB7CisgICAgc3dpdGNoIChlZGdlLnR5cGUpIHsKKyAgICBj
YXNlICJWYXJpYWJsZSI6CisgICAgICAgIGlmIChlZGdlLmRhdGEgPT09ICJnbG9iYWxTY29wZVZh
cmlhYmxlIikKKyAgICAgICAgICAgIHNlZW5HbG9iYWxTY29wZVZhcmlhYmxlID0gdHJ1ZTsKKyAg
ICAgICAgZWxzZSBpZiAoZWRnZS5kYXRhID09PSAic2ltcGxlT2JqZWN0IikKKyAgICAgICAgICAg
IHNlZW5TaW1wbGVPYmplY3RWYXJpYWJsZSA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgdmFyaWFibGUgbmFtZTogIiArIGVkZ2UuZGF0
YSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIkluZGV4IjoKKyAgICBjYXNlICJQcm9wZXJ0
eSI6CisgICAgICAgIGFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgZWRnZSB0eXBlIik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgIkludGVybmFsIjoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCithc3NlcnQoc2Vlbkdsb2JhbFNjb3BlVmFyaWFibGUsICJTaG91bGQgc2VlIFZhcmlhYmxl
IGVkZ2UgZm9yIHZhcmlhYmxlICdnbG9iYWxTY29wZVZhcmlhYmxlJyIpOworYXNzZXJ0KHNlZW5T
aW1wbGVPYmplY3RWYXJpYWJsZSwgIlNob3VsZCBzZWUgVmFyaWFibGUgZWRnZSBmb3IgdmFyaWFi
bGUgJ3NpbXBsZU9iamVjdCciKTsKKworLy8gRnVuY3Rpb24gU2NvcGUgPT4gImNsb3N1cmVWYXJp
YWJsZSIKK25vZGVzID0gc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJTaW1wbGVPYmplY3Qi
KTsKK2Fzc2VydChub2Rlcy5sZW5ndGggPT09IDEsICJTaG91bGQgYmUgb25seSAxICdTaW1wbGVP
YmplY3QnIGluc3RhbmNlIik7CitsZXQgc2NvcGVOb2RlID0gZm9sbG93UGF0aChub2Rlc1swXSwg
W3tlZGdlOiAiZiJ9LCB7bm9kZTogIkpTTGV4aWNhbEVudmlyb25tZW50In1dKTsKKworbGV0IHNl
ZW5DbG9zdXJlVmFyaWFibGUgPSBmYWxzZTsKKworZm9yIChsZXQgZWRnZSBvZiBzY29wZU5vZGUu
b3V0Z29pbmdFZGdlcykgeworICAgIHN3aXRjaCAoZWRnZS50eXBlKSB7CisgICAgY2FzZSAiVmFy
aWFibGUiOgorICAgICAgICBpZiAoZWRnZS5kYXRhID09PSAiY2xvc3VyZVZhcmlhYmxlIikKKyAg
ICAgICAgICAgIHNlZW5DbG9zdXJlVmFyaWFibGUgPSB0cnVlOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBhc3NlcnQoZmFsc2UsICJVbmV4cGVjdGVkIHZhcmlhYmxlIG5hbWU6ICIgKyBlZGdl
LmRhdGEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICJJbmRleCI6CisgICAgY2FzZSAiUHJv
cGVydHkiOgorICAgICAgICBhc3NlcnQoZmFsc2UsICJVbmV4cGVjdGVkIGVkZ2UgdHlwZSIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlICJJbnRlcm5hbCI6CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworYXNzZXJ0KHNlZW5DbG9zdXJlVmFyaWFibGUsICJTaG91bGQgc2VlIFZhcmlhYmxl
IGVkZ2UgZm9yIGNsb3N1cmUgdmFyaWFibGUgJ2Nsb3N1cmVWYXJpYWJsZSciKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>272839</attachid>
            <date>2016-03-03 23:59:05 -0800</date>
            <delta_ts>2016-03-07 15:45:28 -0800</delta_ts>
            <desc>[PATCH] Proposed Fix</desc>
            <filename>rebaselined.patch</filename>
            <type>text/plain</type>
            <size>38238</size>
            <attacher name="Joseph Pecoraro">joepeck</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGFhZjE5MjRjLi5lYjMzNWRkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw3OCBAQAorMjAxNi0wMy0wMiAgSm9zZXBoIFBlY29y
YXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgorCisgICAgICAgIEhlYXAgU25hcHNob3Qgc2hvdWxk
IGluY2x1ZGUgZGlmZmVyZW50IEVkZ2UgdHlwZXMgYW5kIGRhdGEgKFByb3BlcnR5LCBJbmRleCwg
VmFyaWFibGUpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTQ5MzcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGhlYXAvU2xvdFZpc2l0b3IuY3BwOgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6YXBw
ZW5kSGlkZGVuKToKKyAgICAgICAgKiBoZWFwL1Nsb3RWaXNpdG9yLmg6CisgICAgICAgICogaGVh
cC9TbG90VmlzaXRvcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6U2xvdFZpc2l0b3I6OmFwcGVu
ZEhpZGRlbik6CisgICAgICAgIChKU0M6OlNsb3RWaXNpdG9yOjphcHBlbmRWYWx1ZXNIaWRkZW4p
OgorICAgICAgICBBZGQgbmV3IHZpc2l0IG1ldGhvZHMgdG8gdmlzaXQgYSByZWZlcmVuY2Ugd2l0
aG91dCBzbmFwc2hvdHRpbmcgdGhlIGVkZ2UuCisKKyAgICAgICAgKiBoZWFwL0hlYXAuY3BwOgor
ICAgICAgICAoSlNDOjpBZGRFeHRyYUhlYXBTbmFwc2hvdEVkZ2VzOjpBZGRFeHRyYUhlYXBTbmFw
c2hvdEVkZ2VzKToKKyAgICAgICAgKEpTQzo6QWRkRXh0cmFIZWFwU25hcHNob3RFZGdlczo6b3Bl
cmF0b3IoKSk6CisgICAgICAgIChKU0M6OkhlYXA6OmFkZEhlYXBTbmFwc2hvdEVkZ2VzKToKKyAg
ICAgICAgKEpTQzo6SGVhcDo6cmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVzKToKKyAgICAgICAg
KEpTQzo6SGVhcDo6Y29sbGVjdEltcGwpOgorICAgICAgICAqIGhlYXAvSGVhcC5oOgorICAgICAg
ICBBZnRlciBtYXJraW5nLCB2aXNpdCB0aGUgbGl2ZSBjZWxscyBmb3IgYSBjaGFuY2UgdG8gcmVj
b3JkIGV4dHJhCisgICAgICAgIGhlYXAgc25hcHNob3R0aW5nIGluZm9ybWF0aW9uIGFib3V0IHRo
ZSBjZWxsLgorCisgICAgICAgICogaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6SGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kTm9kZSk6CisgICAgICAgIChKU0M6
OkhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZEVkZ2UpOgorICAgICAgICAoSlNDOjpIZWFwU25h
cHNob3RCdWlsZGVyOjphcHBlbmRQcm9wZXJ0eU5hbWVFZGdlKToKKyAgICAgICAgKEpTQzo6SGVh
cFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kVmFyaWFibGVOYW1lRWRnZSk6CisgICAgICAgIChKU0M6
OkhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZEluZGV4RWRnZSk6CisgICAgICAgIChKU0M6Okhl
YXBTbmFwc2hvdEJ1aWxkZXI6Ompzb24pOgorICAgICAgICAqIGhlYXAvSGVhcFNuYXBzaG90QnVp
bGRlci5oOgorICAgICAgICAoSlNDOjpIZWFwU25hcHNob3RFZGdlOjpIZWFwU25hcHNob3RFZGdl
KToKKyAgICAgICAgQ29uc3RydWN0IGVkZ2VzIHdpdGggZXh0cmEgZGF0YS4KKworICAgICAgICAq
IHJ1bnRpbWUvQ2xhc3NJbmZvLmg6CisgICAgICAgICogcnVudGltZS9KU0NlbGwuY3BwOgorICAg
ICAgICAoSlNDOjpKU0NlbGw6OmhlYXBTbmFwc2hvdCk6CisgICAgICAgICogcnVudGltZS9KU0Nl
bGwuaDoKKyAgICAgICAgQWRkIGEgbmV3IG1ldGhvZCB0byBwcm92aWRlIGNlbGxzIHdpdGggYW4g
b3Bwb3J0dW5pdHkgdG8gcHJvdmlkZQorICAgICAgICBleHRyYSBoZWFwIHNuYXBzaG90dGluZyBp
bmZvcm1hdGlvbi4KKworICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuY3BwOgorICAgICAgICAo
SlNDOjpKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpoZWFwU25hcHNob3QpOgor
ICAgICAgICAoSlNDOjpKU0ZpbmFsT2JqZWN0Ojp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBy
dW50aW1lL0pTT2JqZWN0Lmg6CisgICAgICAgIENhcHR1cmUgb2JqZWN0IHByb3BlcnR5IG5hbWVz
IGFuZCBpbmRleCBuYW1lcyB3aGVuIGhlYXAgc25hcHNob3R0aW5nLgorICAgICAgICBEbyBub3Qg
aW5jbHVkZSB0aGVtIGFzIGludGVybmFsIGVkZ2VzIGluIG5vcm1hbCB2aXNpdENoaWxkcmVuLgor
CisgICAgICAgICogcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmNwcDoKKyAgICAgICAgKEpT
Qzo6SlNFbnZpcm9ubWVudFJlY29yZDo6dmlzaXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpT
RW52aXJvbm1lbnRSZWNvcmQ6OmhlYXBTbmFwc2hvdCk6CisgICAgICAgICogcnVudGltZS9KU0Vu
dmlyb25tZW50UmVjb3JkLmg6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxl
T2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6dmlz
aXRDaGlsZHJlbik6CisgICAgICAgIChKU0M6OkpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6Omhl
YXBTbmFwc2hvdCk6CisgICAgICAgICogcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
Lmg6CisgICAgICAgIENhcHR1cmUgc2NvcGUgdmFyaWFibGUgbmFtZXMgd2hlbiBoZWFwIHNuYXBz
aG90dGluZy4KKworICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVy
ZS5oOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oOgorICAgICAgICAoSlND
OjpTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGUpOgorICAgICAgICBXaGVuIHBlcmZvcm1pbmcgYSBo
ZWFwIHNuYXBzaG90dGluZyBjb2xsZWN0aW9uLCBkb24ndCBjbGVhciB0aGUKKyAgICAgICAgcHJv
cGVydHkgdGFibGUgc28gdGhhdCBhY2Nlc3NpbmcgdGhlIHRhYmxlIGR1cmluZyB0aGlzIEdDIGlz
IG9rYXkuCisKKyAgICAgICAgKiB0ZXN0cy9oZWFwUHJvZmlsZXIvZHJpdmVyL2RyaXZlci5qczoK
KyAgICAgICAgKiB0ZXN0cy9oZWFwUHJvZmlsZXIvcHJvcGVydHktZWRnZS10eXBlcy5qczogQWRk
ZWQuCisgICAgICAgICogdGVzdHMvaGVhcFByb2ZpbGVyL3ZhcmlhYmxlLWVkZ2UtdHlwZXMuanM6
IEFkZGVkLgorICAgICAgICBUZXN0cyBjb3ZlcmluZyB0aGUgZGlmZmVyZW50IGVkZ2UgdHlwZXMg
YW5kIGRhdGEgd2UgY2FwdHVyZS4KKwogMjAxNi0wMy0wMyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgogCiAgICAgICAgIERGRy9GVEwgc2hvdWxkIGlubGluZSBhY2Nlc3NlcyB0byBS
ZWdFeHBPYmplY3Q6Om1fbGFzdEluZGV4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9IZWFwLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCmlu
ZGV4IGQzODhkNTcuLmVlMTdlZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCkBA
IC03NjgsNiArNzY4LDMxIEBAIGJvb2wgSGVhcDo6aXNIZWFwU25hcHNob3R0aW5nKCkgY29uc3QK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3N0cnVjdCBHYXRoZXJIZWFwU25hcHNob3REYXRhIDog
TWFya2VkQmxvY2s6OkNvdW50RnVuY3RvciB7CisgICAgR2F0aGVySGVhcFNuYXBzaG90RGF0YShI
ZWFwU25hcHNob3RCdWlsZGVyJiBidWlsZGVyKQorICAgICAgICA6IG1fYnVpbGRlcihidWlsZGVy
KQorICAgIHsKKyAgICB9CisKKyAgICBJdGVyYXRpb25TdGF0dXMgb3BlcmF0b3IoKShKU0NlbGwq
IGNlbGwpCisgICAgeworICAgICAgICBjZWxsLT5tZXRob2RUYWJsZSgpLT5oZWFwU25hcHNob3Qo
Y2VsbCwgbV9idWlsZGVyKTsKKyAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGlu
dWU7CisgICAgfQorCisgICAgSGVhcFNuYXBzaG90QnVpbGRlciYgbV9idWlsZGVyOworfTsKKwor
dm9pZCBIZWFwOjpnYXRoZXJFeHRyYUhlYXBTbmFwc2hvdERhdGEoSGVhcFByb2ZpbGVyJiBoZWFw
UHJvZmlsZXIpCit7CisgICAgR0NQSEFTRShHYXRoZXJFeHRyYUhlYXBTbmFwc2hvdERhdGEpOwor
ICAgIGlmIChIZWFwU25hcHNob3RCdWlsZGVyKiBidWlsZGVyID0gaGVhcFByb2ZpbGVyLmFjdGl2
ZVNuYXBzaG90QnVpbGRlcigpKSB7CisgICAgICAgIEhlYXBJdGVyYXRpb25TY29wZSBoZWFwSXRl
cmF0aW9uU2NvcGUoKnRoaXMpOworICAgICAgICBHYXRoZXJIZWFwU25hcHNob3REYXRhIGZ1bmN0
b3IoKmJ1aWxkZXIpOworICAgICAgICBtX29iamVjdFNwYWNlLmZvckVhY2hMaXZlQ2VsbChoZWFw
SXRlcmF0aW9uU2NvcGUsIGZ1bmN0b3IpOworICAgIH0KK30KKwogc3RydWN0IFJlbW92ZURlYWRI
ZWFwU25hcHNob3ROb2RlcyA6IE1hcmtlZEJsb2NrOjpDb3VudEZ1bmN0b3IgewogICAgIFJlbW92
ZURlYWRIZWFwU25hcHNob3ROb2RlcyhIZWFwU25hcHNob3QmIHNuYXBzaG90KQogICAgICAgICA6
IG1fc25hcHNob3Qoc25hcHNob3QpCkBAIC03ODMsMTcgKzgwOCwxNCBAQCBzdHJ1Y3QgUmVtb3Zl
RGVhZEhlYXBTbmFwc2hvdE5vZGVzIDogTWFya2VkQmxvY2s6OkNvdW50RnVuY3RvciB7CiAgICAg
SGVhcFNuYXBzaG90JiBtX3NuYXBzaG90OwogfTsKIAotdm9pZCBIZWFwOjpyZW1vdmVEZWFkSGVh
cFNuYXBzaG90Tm9kZXMoKQordm9pZCBIZWFwOjpyZW1vdmVEZWFkSGVhcFNuYXBzaG90Tm9kZXMo
SGVhcFByb2ZpbGVyJiBoZWFwUHJvZmlsZXIpCiB7CiAgICAgR0NQSEFTRShSZW1vdmVEZWFkSGVh
cFNuYXBzaG90Tm9kZXMpOwotICAgIEhlYXBQcm9maWxlciogaGVhcFByb2ZpbGVyID0gbV92bS0+
aGVhcFByb2ZpbGVyKCk7Ci0gICAgaWYgKFVOTElLRUxZKGhlYXBQcm9maWxlcikpIHsKLSAgICAg
ICAgaWYgKEhlYXBTbmFwc2hvdCogc25hcHNob3QgPSBoZWFwUHJvZmlsZXItPm1vc3RSZWNlbnRT
bmFwc2hvdCgpKSB7Ci0gICAgICAgICAgICBIZWFwSXRlcmF0aW9uU2NvcGUgaGVhcEl0ZXJhdGlv
blNjb3BlKCp0aGlzKTsKLSAgICAgICAgICAgIFJlbW92ZURlYWRIZWFwU25hcHNob3ROb2RlcyBm
dW5jdG9yKCpzbmFwc2hvdCk7Ci0gICAgICAgICAgICBtX29iamVjdFNwYWNlLmZvckVhY2hEZWFk
Q2VsbChoZWFwSXRlcmF0aW9uU2NvcGUsIGZ1bmN0b3IpOwotICAgICAgICAgICAgc25hcHNob3Qt
PnNocmlua1RvRml0KCk7Ci0gICAgICAgIH0KKyAgICBpZiAoSGVhcFNuYXBzaG90KiBzbmFwc2hv
dCA9IGhlYXBQcm9maWxlci5tb3N0UmVjZW50U25hcHNob3QoKSkgeworICAgICAgICBIZWFwSXRl
cmF0aW9uU2NvcGUgaGVhcEl0ZXJhdGlvblNjb3BlKCp0aGlzKTsKKyAgICAgICAgUmVtb3ZlRGVh
ZEhlYXBTbmFwc2hvdE5vZGVzIGZ1bmN0b3IoKnNuYXBzaG90KTsKKyAgICAgICAgbV9vYmplY3RT
cGFjZS5mb3JFYWNoRGVhZENlbGwoaGVhcEl0ZXJhdGlvblNjb3BlLCBmdW5jdG9yKTsKKyAgICAg
ICAgc25hcHNob3QtPnNocmlua1RvRml0KCk7CiAgICAgfQogfQogCkBAIC0xMTYzLDcgKzExODUs
MTIgQEAgTkVWRVJfSU5MSU5FIHZvaWQgSGVhcDo6Y29sbGVjdEltcGwoSGVhcE9wZXJhdGlvbiBj
b2xsZWN0aW9uVHlwZSwgdm9pZCogc3RhY2tPcmkKICAgICByZW1vdmVEZWFkQ29tcGlsZXJXb3Jr
bGlzdEVudHJpZXMoKTsKICAgICBkZWxldGVVbm1hcmtlZENvbXBpbGVkQ29kZSgpOwogICAgIGRl
bGV0ZVNvdXJjZVByb3ZpZGVyQ2FjaGVzKCk7Ci0gICAgcmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5v
ZGVzKCk7CisKKyAgICBpZiAoSGVhcFByb2ZpbGVyKiBoZWFwUHJvZmlsZXIgPSBtX3ZtLT5oZWFw
UHJvZmlsZXIoKSkgeworICAgICAgICBnYXRoZXJFeHRyYUhlYXBTbmFwc2hvdERhdGEoKmhlYXBQ
cm9maWxlcik7CisgICAgICAgIHJlbW92ZURlYWRIZWFwU25hcHNob3ROb2RlcygqaGVhcFByb2Zp
bGVyKTsKKyAgICB9CisKICAgICBub3RpZnlJbmNyZW1lbnRhbFN3ZWVwZXIoKTsKICAgICB3cml0
ZUJhcnJpZXJDdXJyZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL0hlYXAuaAppbmRleCAxMTBhYzI3Li4wODAxYjYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9IZWFwLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAv
SGVhcC5oCkBAIC02MCw2ICs2MCw3IEBAIGNsYXNzIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2s7CiBj
bGFzcyBHQ0FjdGl2aXR5Q2FsbGJhY2s7CiBjbGFzcyBHQ0F3YXJlSklUU3R1YlJvdXRpbmU7CiBj
bGFzcyBIZWFwOworY2xhc3MgSGVhcFByb2ZpbGVyOwogY2xhc3MgSGVhcFJvb3RWaXNpdG9yOwog
Y2xhc3MgSGVhcFZlcmlmaWVyOwogY2xhc3MgSW5jcmVtZW50YWxTd2VlcGVyOwpAQCAtMzI5LDcg
KzMzMCw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzd2VlcEFycmF5QnVmZmVycygpOwogICAgIHZv
aWQgc25hcHNob3RNYXJrZWRTcGFjZSgpOwogICAgIHZvaWQgZGVsZXRlU291cmNlUHJvdmlkZXJD
YWNoZXMoKTsKLSAgICB2b2lkIHJlbW92ZURlYWRIZWFwU25hcHNob3ROb2RlcygpOwogICAgIHZv
aWQgbm90aWZ5SW5jcmVtZW50YWxTd2VlcGVyKCk7CiAgICAgdm9pZCB3cml0ZUJhcnJpZXJDdXJy
ZW50bHlFeGVjdXRpbmdDb2RlQmxvY2tzKCk7CiAgICAgdm9pZCByZXNldEFsbG9jYXRvcnMoKTsK
QEAgLTM0NCw2ICszNDQsOCBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzdW1lQ29tcGlsZXJUaHJl
YWRzKCk7CiAgICAgdm9pZCB6b21iaWZ5RGVhZE9iamVjdHMoKTsKICAgICB2b2lkIG1hcmtEZWFk
T2JqZWN0cygpOworICAgIHZvaWQgZ2F0aGVyRXh0cmFIZWFwU25hcHNob3REYXRhKEhlYXBQcm9m
aWxlciYpOworICAgIHZvaWQgcmVtb3ZlRGVhZEhlYXBTbmFwc2hvdE5vZGVzKEhlYXBQcm9maWxl
ciYpOwogCiAgICAgdm9pZCBzd2VlcEFsbExvZ2ljYWxseUVtcHR5V2Vha0Jsb2NrcygpOwogICAg
IGJvb2wgc3dlZXBOZXh0TG9naWNhbGx5RW1wdHlXZWFrQmxvY2soKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5jcHAKaW5kZXggY2ZmOWUx
My4uZDYyZjhkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNu
YXBzaG90QnVpbGRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFNu
YXBzaG90QnVpbGRlci5jcHAKQEAgLTcwLDcgKzcwLDcgQEAgdm9pZCBIZWFwU25hcHNob3RCdWls
ZGVyOjphcHBlbmROb2RlKEpTQ2VsbCogY2VsbCkKICAgICBpZiAoaGFzRXhpc3RpbmdOb2RlRm9y
Q2VsbChjZWxsKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+
IGxvY2sobV9hcHBlbmRpbmdOb2RlTXV0ZXgpOworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBs
b2NrKG1fYnVpbGRpbmdOb2RlTXV0ZXgpOwogCiAgICAgbV9zbmFwc2hvdC0+YXBwZW5kTm9kZShI
ZWFwU25hcHNob3ROb2RlKGNlbGwsIGdldE5leHRPYmplY3RJZGVudGlmaWVyKCkpKTsKIH0KQEAg
LTg0LDExICs4NCw0MSBAQCB2b2lkIEhlYXBTbmFwc2hvdEJ1aWxkZXI6OmFwcGVuZEVkZ2UoSlND
ZWxsKiBmcm9tLCBKU0NlbGwqIHRvKQogICAgIGlmIChmcm9tID09IHRvKQogICAgICAgICByZXR1
cm47CiAKLSAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4gbG9jayhtX2FwcGVuZGluZ0VkZ2VNdXRl
eCk7CisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9idWlsZGluZ0VkZ2VNdXRleCk7
CiAKICAgICBtX2VkZ2VzLmFwcGVuZChIZWFwU25hcHNob3RFZGdlKGZyb20sIHRvKSk7CiB9CiAK
K3ZvaWQgSGVhcFNuYXBzaG90QnVpbGRlcjo6YXBwZW5kUHJvcGVydHlOYW1lRWRnZShKU0NlbGwq
IGZyb20sIEpTQ2VsbCogdG8sIFVuaXF1ZWRTdHJpbmdJbXBsKiBwcm9wZXJ0eU5hbWUpCit7Cisg
ICAgQVNTRVJUKG1fcHJvZmlsZXIuYWN0aXZlU25hcHNob3RCdWlsZGVyKCkgPT0gdGhpcyk7Cisg
ICAgQVNTRVJUKHRvKTsKKworICAgIHN0ZDo6bG9ja19ndWFyZDxMb2NrPiBsb2NrKG1fYnVpbGRp
bmdFZGdlTXV0ZXgpOworCisgICAgbV9lZGdlcy5hcHBlbmQoSGVhcFNuYXBzaG90RWRnZShmcm9t
LCB0bywgRWRnZVR5cGU6OlByb3BlcnR5LCBwcm9wZXJ0eU5hbWUpKTsKK30KKwordm9pZCBIZWFw
U25hcHNob3RCdWlsZGVyOjphcHBlbmRWYXJpYWJsZU5hbWVFZGdlKEpTQ2VsbCogZnJvbSwgSlND
ZWxsKiB0bywgVW5pcXVlZFN0cmluZ0ltcGwqIHZhcmlhYmxlTmFtZSkKK3sKKyAgICBBU1NFUlQo
bV9wcm9maWxlci5hY3RpdmVTbmFwc2hvdEJ1aWxkZXIoKSA9PSB0aGlzKTsKKyAgICBBU1NFUlQo
dG8pOworCisgICAgc3RkOjpsb2NrX2d1YXJkPExvY2s+IGxvY2sobV9idWlsZGluZ0VkZ2VNdXRl
eCk7CisKKyAgICBtX2VkZ2VzLmFwcGVuZChIZWFwU25hcHNob3RFZGdlKGZyb20sIHRvLCBFZGdl
VHlwZTo6VmFyaWFibGUsIHZhcmlhYmxlTmFtZSkpOworfQorCit2b2lkIEhlYXBTbmFwc2hvdEJ1
aWxkZXI6OmFwcGVuZEluZGV4RWRnZShKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8sIHVpbnQzMl90
IGluZGV4KQoreworICAgIEFTU0VSVChtX3Byb2ZpbGVyLmFjdGl2ZVNuYXBzaG90QnVpbGRlcigp
ID09IHRoaXMpOworICAgIEFTU0VSVCh0byk7CisKKyAgICBzdGQ6OmxvY2tfZ3VhcmQ8TG9jaz4g
bG9jayhtX2J1aWxkaW5nRWRnZU11dGV4KTsKKworICAgIG1fZWRnZXMuYXBwZW5kKEhlYXBTbmFw
c2hvdEVkZ2UoZnJvbSwgdG8sIGluZGV4KSk7Cit9CisKIGJvb2wgSGVhcFNuYXBzaG90QnVpbGRl
cjo6aGFzRXhpc3RpbmdOb2RlRm9yQ2VsbChKU0NlbGwqIGNlbGwpCiB7CiAgICAgaWYgKCFtX3Nu
YXBzaG90LT5wcmV2aW91cygpKQpAQCAtMjIxLDYgKzI1MSwyMCBAQCBTdHJpbmcgSGVhcFNuYXBz
aG90QnVpbGRlcjo6anNvbihzdGQ6OmZ1bmN0aW9uPGJvb2wgKGNvbnN0IEhlYXBTbmFwc2hvdE5v
ZGUmKT4gYQogICAgICAgICBqc29uLmFwcGVuZE51bWJlcih0b0lkZW50aWZpZXIpOwogICAgICAg
ICBqc29uLmFwcGVuZCgnLCcpOwogICAgICAgICBqc29uLmFwcGVuZE51bWJlcihlZGdlVHlwZVRv
TnVtYmVyKGVkZ2UudHlwZSkpOworICAgICAgICBzd2l0Y2ggKGVkZ2UudHlwZSkgeworICAgICAg
ICBjYXNlIEVkZ2VUeXBlOjpQcm9wZXJ0eToKKyAgICAgICAgY2FzZSBFZGdlVHlwZTo6VmFyaWFi
bGU6CisgICAgICAgICAgICBqc29uLmFwcGVuZCgnLCcpOworICAgICAgICAgICAganNvbi5hcHBl
bmRRdW90ZWRKU09OU3RyaW5nKGVkZ2UudS5uYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEVkZ2VUeXBlOjpJbmRleDoKKyAgICAgICAgICAgIGpzb24uYXBwZW5kKCcsJyk7
CisgICAgICAgICAgICBqc29uLmFwcGVuZE51bWJlcihlZGdlLnUuaW5kZXgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBObyBkYXRhIGZvciB0
aGlzIGVkZ2UgdHlwZS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGpz
b24uYXBwZW5kKCddJyk7CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvSGVhcFNuYXBzaG90QnVpbGRlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvSGVhcFNuYXBzaG90QnVpbGRlci5oCmluZGV4IDU5NjAwMzYuLjgwMDU4Y2EgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBTbmFwc2hvdEJ1aWxkZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwU25hcHNob3RCdWlsZGVyLmgKQEAgLTI5
LDYgKzI5LDcgQEAKICNpbmNsdWRlIDxmdW5jdGlvbmFsPgogI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+
CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1VuaXF1ZWRTdHJp
bmdJbXBsLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBK
U0MgewpAQCAtNjIsOSArNjMsMzAgQEAgc3RydWN0IEhlYXBTbmFwc2hvdEVkZ2UgewogICAgICAg
ICAsIHR5cGUoRWRnZVR5cGU6OkludGVybmFsKQogICAgIHsgfQogCisgICAgSGVhcFNuYXBzaG90
RWRnZShKU0NlbGwqIGZyb20sIEpTQ2VsbCogdG8sIEVkZ2VUeXBlIHR5cGUsIFVuaXF1ZWRTdHJp
bmdJbXBsKiBuYW1lKQorICAgICAgICA6IGZyb20oZnJvbSkKKyAgICAgICAgLCB0byh0bykKKyAg
ICAgICAgLCB0eXBlKHR5cGUpCisgICAgeworICAgICAgICBBU1NFUlQodHlwZSA9PSBFZGdlVHlw
ZTo6UHJvcGVydHkgfHwgdHlwZSA9PSBFZGdlVHlwZTo6VmFyaWFibGUpOworICAgICAgICB1Lm5h
bWUgPSBuYW1lOworICAgIH0KKworICAgIEhlYXBTbmFwc2hvdEVkZ2UoSlNDZWxsKiBmcm9tLCBK
U0NlbGwqIHRvLCB1aW50MzJfdCBpbmRleCkKKyAgICAgICAgOiBmcm9tKGZyb20pCisgICAgICAg
ICwgdG8odG8pCisgICAgICAgICwgdHlwZShFZGdlVHlwZTo6SW5kZXgpCisgICAgeworICAgICAg
ICB1LmluZGV4ID0gaW5kZXg7CisgICAgfQorCiAgICAgSlNDZWxsKiBmcm9tOwogICAgIEpTQ2Vs
bCogdG87CiAgICAgRWRnZVR5cGUgdHlwZTsKKyAgICB1bmlvbiB7CisgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiBuYW1lOworICAgICAgICB1aW50MzJfdCBpbmRleDsKKyAgICB9IHU7CiB9Owog
CiBjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBIZWFwU25hcHNob3RCdWlsZGVyIHsKQEAgLTg0LDYg
KzEwNiw5IEBAIHB1YmxpYzoKIAogICAgIC8vIEEgcmVmZXJlbmNlIGZyb20gb25lIGNlbGwgdG8g
YW5vdGhlci4KICAgICB2b2lkIGFwcGVuZEVkZ2UoSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvKTsK
KyAgICB2b2lkIGFwcGVuZFByb3BlcnR5TmFtZUVkZ2UoSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRv
LCBVbmlxdWVkU3RyaW5nSW1wbCogcHJvcGVydHlOYW1lKTsKKyAgICB2b2lkIGFwcGVuZFZhcmlh
YmxlTmFtZUVkZ2UoSlNDZWxsKiBmcm9tLCBKU0NlbGwqIHRvLCBVbmlxdWVkU3RyaW5nSW1wbCog
dmFyaWFibGVOYW1lKTsKKyAgICB2b2lkIGFwcGVuZEluZGV4RWRnZShKU0NlbGwqIGZyb20sIEpT
Q2VsbCogdG8sIHVpbnQzMl90IGluZGV4KTsKIAogICAgIFN0cmluZyBqc29uKCk7CiAgICAgU3Ry
aW5nIGpzb24oc3RkOjpmdW5jdGlvbjxib29sIChjb25zdCBIZWFwU25hcHNob3ROb2RlJik+IGFs
bG93Tm9kZUNhbGxiYWNrKTsKQEAgLTk2LDkgKzEyMSw5IEBAIHByaXZhdGU6CiAgICAgSGVhcFBy
b2ZpbGVyJiBtX3Byb2ZpbGVyOwogCiAgICAgLy8gU2xvdFZpc2l0b3JzIHJ1biBpbiBwYXJhbGxl
bC4KLSAgICBMb2NrIG1fYXBwZW5kaW5nTm9kZU11dGV4OworICAgIExvY2sgbV9idWlsZGluZ05v
ZGVNdXRleDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SGVhcFNuYXBzaG90PiBtX3NuYXBzaG90Owot
ICAgIExvY2sgbV9hcHBlbmRpbmdFZGdlTXV0ZXg7CisgICAgTG9jayBtX2J1aWxkaW5nRWRnZU11
dGV4OwogICAgIFZlY3RvcjxIZWFwU25hcHNob3RFZGdlPiBtX2VkZ2VzOwogfTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuY3BwCmluZGV4IDY0MWU1OTAuLjk5NTlh
ZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5jcHAKQEAgLTEy
OSwxMiArMTI5LDIwIEBAIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChKU1ZhbHVlIHZhbHVlKQog
ICAgIGlmICghdmFsdWUgfHwgIXZhbHVlLmlzQ2VsbCgpKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAobV9oZWFwU25hcHNob3RCdWlsZGVyKQorICAgIGlmIChVTkxJS0VMWShtX2hlYXBTbmFw
c2hvdEJ1aWxkZXIpKQogICAgICAgICBtX2hlYXBTbmFwc2hvdEJ1aWxkZXItPmFwcGVuZEVkZ2Uo
bV9jdXJyZW50Q2VsbCwgdmFsdWUuYXNDZWxsKCkpOwogCiAgICAgc2V0TWFya2VkQW5kQXBwZW5k
VG9NYXJrU3RhY2sodmFsdWUuYXNDZWxsKCkpOwogfQogCit2b2lkIFNsb3RWaXNpdG9yOjphcHBl
bmRIaWRkZW4oSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS5pc0Nl
bGwoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0TWFya2VkQW5kQXBwZW5kVG9NYXJrU3Rh
Y2sodmFsdWUuYXNDZWxsKCkpOworfQorCiB2b2lkIFNsb3RWaXNpdG9yOjpzZXRNYXJrZWRBbmRB
cHBlbmRUb01hcmtTdGFjayhKU0NlbGwqIGNlbGwpCiB7CiAgICAgQVNTRVJUKCFtX2lzQ2hlY2tp
bmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbik7CkBAIC0xNjcsNyArMTc1LDcgQEAgdm9pZCBTbG90
VmlzaXRvcjo6YXBwZW5kVG9NYXJrU3RhY2soSlNDZWxsKiBjZWxsKQogICAgIG1fYnl0ZXNWaXNp
dGVkICs9IE1hcmtlZEJsb2NrOjpibG9ja0ZvcihjZWxsKS0+Y2VsbFNpemUoKTsKICAgICBtX3N0
YWNrLmFwcGVuZChjZWxsKTsKIAotICAgIGlmIChtX2hlYXBTbmFwc2hvdEJ1aWxkZXIpCisgICAg
aWYgKFVOTElLRUxZKG1faGVhcFNuYXBzaG90QnVpbGRlcikpCiAgICAgICAgIG1faGVhcFNuYXBz
aG90QnVpbGRlci0+YXBwZW5kTm9kZShjZWxsKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1Nsb3RWaXNpdG9yLmgKaW5kZXggMjZiNjE1ZS4uNTU5MDE1OSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9TbG90VmlzaXRvci5oCkBAIC02Nyw4ICs2NywxMCBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhcHBlbmQoSklUV3JpdGVCYXJyaWVy
PFQ+Kik7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gdm9pZCBhcHBlbmQoV3JpdGVCYXJyaWVy
QmFzZTxUPiopOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgYXBwZW5kSGlkZGVuKFdy
aXRlQmFycmllckJhc2U8VD4qKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gdm9p
ZCBhcHBlbmQoSXRlcmF0b3IgYmVnaW4gLCBJdGVyYXRvciBlbmQpOwogICAgIHZvaWQgYXBwZW5k
VmFsdWVzKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qLCBzaXplX3QgY291bnQpOworICAgIHZv
aWQgYXBwZW5kVmFsdWVzSGlkZGVuKFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qLCBzaXplX3Qg
Y291bnQpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CiAgICAgdm9pZCBhcHBlbmRV
bmJhcnJpZXJlZFBvaW50ZXIoVCoqKTsKQEAgLTExOSw2ICsxMjEsNyBAQCBwcml2YXRlOgogICAg
IGZyaWVuZCBjbGFzcyBQYXJhbGxlbE1vZGVFbmFibGVyOwogICAgIAogICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgYXBwZW5kKEpTVmFsdWUpOyAvLyBUaGlzIGlzIHByaXZhdGUgdG8gZW5jb3Vy
YWdlIGNsaWVudHMgdG8gdXNlIFdyaXRlQmFycmllcjxUPi4KKyAgICB2b2lkIGFwcGVuZEhpZGRl
bihKU1ZhbHVlKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0TWFya2VkQW5kQXBw
ZW5kVG9NYXJrU3RhY2soSlNDZWxsKik7CiAgICAgdm9pZCBhcHBlbmRUb01hcmtTdGFjayhKU0Nl
bGwqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL1Nsb3RWaXNpdG9y
SW5saW5lcy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVz
LmgKaW5kZXggMDMzODcyYy4uYTM3OTIzOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvU2xvdFZpc2l0b3JJbmxpbmVzLmgKQEAgLTY5LDYgKzY5LDEyIEBAIGlubGluZSB2b2lk
IFNsb3RWaXNpdG9yOjphcHBlbmQoV3JpdGVCYXJyaWVyQmFzZTxUPiogc2xvdCkKICAgICBhcHBl
bmQoc2xvdC0+Z2V0KCkpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIHZvaWQg
U2xvdFZpc2l0b3I6OmFwcGVuZEhpZGRlbihXcml0ZUJhcnJpZXJCYXNlPFQ+KiBzbG90KQorewor
ICAgIGFwcGVuZEhpZGRlbihzbG90LT5nZXQoKSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIEl0
ZXJhdG9yPgogaW5saW5lIHZvaWQgU2xvdFZpc2l0b3I6OmFwcGVuZChJdGVyYXRvciBiZWdpbiwg
SXRlcmF0b3IgZW5kKQogewpAQCAtODIsNiArODgsMTIgQEAgaW5saW5lIHZvaWQgU2xvdFZpc2l0
b3I6OmFwcGVuZFZhbHVlcyhXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBiYXJyaWVycywgc2l6
ZV8KICAgICAgICAgYXBwZW5kKCZiYXJyaWVyc1tpXSk7CiB9CiAKK2lubGluZSB2b2lkIFNsb3RW
aXNpdG9yOjphcHBlbmRWYWx1ZXNIaWRkZW4oV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogYmFy
cmllcnMsIHNpemVfdCBjb3VudCkKK3sKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50
OyArK2kpCisgICAgICAgIGFwcGVuZEhpZGRlbigmYmFycmllcnNbaV0pOworfQorCiBpbmxpbmUg
dm9pZCBTbG90VmlzaXRvcjo6YWRkV2Vha1JlZmVyZW5jZUhhcnZlc3RlcihXZWFrUmVmZXJlbmNl
SGFydmVzdGVyKiB3ZWFrUmVmZXJlbmNlSGFydmVzdGVyKQogewogICAgIG1faGVhcC5tX3dlYWtS
ZWZlcmVuY2VIYXJ2ZXN0ZXJzLmFkZFRocmVhZFNhZmUod2Vha1JlZmVyZW5jZUhhcnZlc3Rlcik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qc2MuY3BwCmluZGV4IGM0NWJiZWMuLjMwODM3Y2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
c2MuY3BwCkBAIC00ODUsMTEgKzQ4NSw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHNpbXBs
ZU9iamVjdDsKICAgICB9CiAKLSAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKLSAgICB7
Ci0gICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICB9Ci0KICAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAg
ICAgewogICAgICAgICBTaW1wbGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8U2ltcGxlT2Jq
ZWN0Kj4oY2VsbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
bGFzc0luZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NsYXNzSW5mby5oCmlu
ZGV4IDIyYmM0M2QuLjNmNDc4M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NsYXNzSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Ns
YXNzSW5mby5oCkBAIC0zMCw2ICszMCw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBI
ZWFwU25hcHNob3RCdWlsZGVyOwogY2xhc3MgSlNBcnJheUJ1ZmZlclZpZXc7CiBzdHJ1Y3QgSGFz
aFRhYmxlOwogCkBAIC0xMTUsNiArMTE2LDkgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICB0
eXBlZGVmIHZvaWQgKCpEdW1wVG9TdHJlYW1GdW5jdGlvblB0cikoY29uc3QgSlNDZWxsKiwgUHJp
bnRTdHJlYW0mKTsKICAgICBEdW1wVG9TdHJlYW1GdW5jdGlvblB0ciBkdW1wVG9TdHJlYW07CiAK
KyAgICB0eXBlZGVmIHZvaWQgKCpIZWFwU25hcHNob3RGdW5jdGlvblB0cikoSlNDZWxsKiwgSGVh
cFNuYXBzaG90QnVpbGRlciYpOworICAgIEhlYXBTbmFwc2hvdEZ1bmN0aW9uUHRyIGhlYXBTbmFw
c2hvdDsKKwogICAgIHR5cGVkZWYgc2l6ZV90ICgqRXN0aW1hdGVkU2l6ZUZ1bmN0aW9uUHRyKShK
U0NlbGwqKTsKICAgICBFc3RpbWF0ZWRTaXplRnVuY3Rpb25QdHIgZXN0aW1hdGVkU2l6ZTsKIH07
CkBAIC0xNjcsNiArMTcxLDcgQEAgc3RydWN0IE1ldGhvZFRhYmxlIHsKICAgICAgICAgJkNsYXNz
TmFtZTo6aXNFeHRlbnNpYmxlLCBcCiAgICAgICAgICZDbGFzc05hbWU6OnNldFByb3RvdHlwZSwg
XAogICAgICAgICAmQ2xhc3NOYW1lOjpkdW1wVG9TdHJlYW0sIFwKKyAgICAgICAgJkNsYXNzTmFt
ZTo6aGVhcFNuYXBzaG90LCBcCiAgICAgICAgICZDbGFzc05hbWU6OmVzdGltYXRlZFNpemUgXAog
ICAgIH0sIFwKICAgICBDbGFzc05hbWU6OlR5cGVkQXJyYXlTdG9yYWdlVHlwZQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQ2VsbC5jcHAKaW5kZXggNTM2YzgxOS4uZjI1OTcyNCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuY3BwCkBAIC02NSw2ICs2NSwxMCBA
QCB2b2lkIEpTQ2VsbDo6Y29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENv
cHlUb2tlbikKIHsKIH0KIAordm9pZCBKU0NlbGw6OmhlYXBTbmFwc2hvdChKU0NlbGwqLCBIZWFw
U25hcHNob3RCdWlsZGVyJikKK3sKK30KKwogYm9vbCBKU0NlbGw6OmdldFN0cmluZyhFeGVjU3Rh
dGUqIGV4ZWMsIFN0cmluZyYgc3RyaW5nVmFsdWUpIGNvbnN0CiB7CiAgICAgaWYgKCFpc1N0cmlu
ZygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NlbGwuaAppbmRleCBlMGRkMTY0Li43
NDFjNmI3YyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxs
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDZWxsLmgKQEAgLTE0MSw2
ICsxNDEsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwq
LCBTbG90VmlzaXRvciYpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIGNvcHlC
YWNraW5nU3RvcmUoSlNDZWxsKiwgQ29weVZpc2l0b3ImLCBDb3B5VG9rZW4pOwogCisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgaGVhcFNuYXBzaG90KEpTQ2VsbCosIEhlYXBTbmFw
c2hvdEJ1aWxkZXImKTsKKwogICAgIC8vIE9iamVjdCBvcGVyYXRpb25zLCB3aXRoIHRoZSB0b09i
amVjdCBvcGVyYXRpb24gaW5jbHVkZWQuCiAgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8o
KSBjb25zdDsKICAgICBjb25zdCBNZXRob2RUYWJsZSogbWV0aG9kVGFibGUoKSBjb25zdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNv
cmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29y
ZC5jcHAKaW5kZXggZjFkNzY5NS4uOTIzY2Q0OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5jcHAKQEAgLTI5LDYgKzI5LDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU0Vudmlyb25tZW50UmVjb3JkLmgi
CiAKKyNpbmNsdWRlICJIZWFwU25hcHNob3RCdWlsZGVyLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTQwLDcgKzQxLDI3IEBAIHZvaWQgSlNFbnZpcm9u
bWVudFJlY29yZDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNp
dG9yKQogICAgIEpTRW52aXJvbm1lbnRSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNFbnZp
cm9ubWVudFJlY29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhp
c09iamVjdCwgaW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZp
c2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPnZhcmlhYmxlcygp
LCB0aGlzT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5zY29wZVNpemUoKSk7CisgICAgdmlzaXRvci5h
cHBlbmRWYWx1ZXNIaWRkZW4odGhpc09iamVjdC0+dmFyaWFibGVzKCksIHRoaXNPYmplY3QtPnN5
bWJvbFRhYmxlKCktPnNjb3BlU2l6ZSgpKTsKK30KKwordm9pZCBKU0Vudmlyb25tZW50UmVjb3Jk
OjpoZWFwU25hcHNob3QoSlNDZWxsKiBjZWxsLCBIZWFwU25hcHNob3RCdWlsZGVyJiBidWlsZGVy
KQoreworICAgIEpTRW52aXJvbm1lbnRSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNFbnZp
cm9ubWVudFJlY29yZCo+KGNlbGwpOworICAgIEJhc2U6OmhlYXBTbmFwc2hvdChjZWxsLCBidWls
ZGVyKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNPYmplY3QtPnN5bWJv
bFRhYmxlKCktPm1fbG9jayk7CisgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgZW5kID0g
dGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKGxvY2tlcik7CisgICAgZm9yIChTeW1ib2xU
YWJsZTo6TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPmJlZ2lu
KGxvY2tlcik7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTeW1ib2xUYWJsZUVudHJ5OjpG
YXN0IGVudHJ5ID0gaXQtPnZhbHVlOworICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsK
KyAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsKKyAgICAg
ICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlkU2NvcGVPZmZzZXQob2Zmc2V0KSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTVmFsdWUgdG9WYWx1ZSA9IHRoaXNPYmplY3QtPnZh
cmlhYmxlQXQob2Zmc2V0KS5nZXQoKTsKKyAgICAgICAgaWYgKHRvVmFsdWUgJiYgdG9WYWx1ZS5p
c0NlbGwoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVmFyaWFibGVOYW1lRWRnZSh0aGlz
T2JqZWN0LCB0b1ZhbHVlLmFzQ2VsbCgpLCBpdC0+a2V5LmdldCgpKTsKKyAgICB9CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNFbnZpcm9ubWVudFJlY29yZC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNFbnZpcm9ubWVudFJlY29yZC5oCmluZGV4IDhjYjNkZDAuLmNhMjYxZGIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgKQEAg
LTExMSw2ICsxMTEsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogCiAgICAgc3RhdGljIHZvaWQgdmlz
aXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOworICAgIHN0YXRpYyB2b2lkIGhlYXBT
bmFwc2hvdChKU0NlbGwqLCBIZWFwU25hcHNob3RCdWlsZGVyJik7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2Jq
ZWN0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAppbmRl
eCBmY2IzNTBhLi41Y2QxMDk2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU09iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuY3BwCkBAIC0zNSwxNSArMzUsMTYgQEAKICNpbmNsdWRlICJFeGNlcHRpb24uaCIKICNp
bmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVk
ZSAiSGVhcFNuYXBzaG90QnVpbGRlci5oIgogI2luY2x1ZGUgIkluZGV4aW5nSGVhZGVySW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTQm91bmRTbG90QmFzZUZ1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0dsb2JhbE9i
amVjdC5oIgogI2luY2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIk5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3IuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5o
IgotI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3Iu
aCIKICNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgogI2luY2x1ZGUgIlByb3h5T2JqZWN0
LmgiCkBAIC0xNTcsMTIgKzE1OCwxMSBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OmNv
cHlCdXR0ZXJmbHkoQ29weVZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dAogICAgIH0g
CiB9CiAKLUFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHkoU2xvdFZp
c2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0dGVyZmx5LCBzaXplX3Qgc3RvcmFnZVNpemUp
CitBTFdBWVNfSU5MSU5FIHZvaWQgSlNPYmplY3Q6OnZpc2l0QnV0dGVyZmx5KFNsb3RWaXNpdG9y
JiB2aXNpdG9yLCBCdXR0ZXJmbHkqIGJ1dHRlcmZseSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7
CiAgICAgQVNTRVJUKGJ1dHRlcmZseSk7CiAgICAgCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSB0aGlzLT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKTsKLSAgICAKKyAgICBzaXplX3Qgc3RvcmFn
ZVNpemUgPSBzdHJ1Y3R1cmUtPm91dE9mTGluZVNpemUoKTsKICAgICBzaXplX3QgcHJvcGVydHlD
YXBhY2l0eSA9IHN0cnVjdHVyZS0+b3V0T2ZMaW5lQ2FwYWNpdHkoKTsKICAgICBzaXplX3QgcHJl
Q2FwYWNpdHk7CiAgICAgc2l6ZV90IGluZGV4aW5nUGF5bG9hZFNpemVJbkJ5dGVzOwpAQCAtMTc3
LDcgKzE3Nyw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKU09iamVjdDo6dmlzaXRCdXR0ZXJmbHko
U2xvdFZpc2l0b3ImIHZpc2l0b3IsIEJ1dHRlcmZseSogYnV0CiAgICAgc2l6ZV90IGNhcGFjaXR5
SW5CeXRlcyA9IEJ1dHRlcmZseTo6dG90YWxTaXplKHByZUNhcGFjaXR5LCBwcm9wZXJ0eUNhcGFj
aXR5LCBoYXNJbmRleGluZ0hlYWRlciwgaW5kZXhpbmdQYXlsb2FkU2l6ZUluQnl0ZXMpOwogCiAg
ICAgLy8gTWFyayB0aGUgcHJvcGVydGllcy4KLSAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyhidXR0
ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpIC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKKyAg
ICB2aXNpdG9yLmFwcGVuZFZhbHVlc0hpZGRlbihidXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgp
IC0gc3RvcmFnZVNpemUsIHN0b3JhZ2VTaXplKTsKICAgICB2aXNpdG9yLmNvcHlMYXRlcigKICAg
ICAgICAgdGhpcywgQnV0dGVyZmx5Q29weVRva2VuLAogICAgICAgICBidXR0ZXJmbHktPmJhc2Uo
cHJlQ2FwYWNpdHksIHByb3BlcnR5Q2FwYWNpdHkpLCBjYXBhY2l0eUluQnl0ZXMpOwpAQCAtMTg1
LDEwICsxODUsMTAgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpTT2JqZWN0Ojp2aXNpdEJ1dHRlcmZs
eShTbG90VmlzaXRvciYgdmlzaXRvciwgQnV0dGVyZmx5KiBidXQKICAgICAvLyBNYXJrIHRoZSBh
cnJheSBpZiBhcHByb3ByaWF0ZS4KICAgICBzd2l0Y2ggKHRoaXMtPmluZGV4aW5nVHlwZSgpKSB7
CiAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKLSAgICAgICAgdmlzaXRv
ci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHkt
PnB1YmxpY0xlbmd0aCgpKTsKKyAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0
dGVyZmx5LT5jb250aWd1b3VzKCkuZGF0YSgpLCBidXR0ZXJmbHktPnB1YmxpY0xlbmd0aCgpKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBF
UzoKLSAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXMoYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2Uo
KS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgpKTsK
KyAgICAgICAgdmlzaXRvci5hcHBlbmRWYWx1ZXNIaWRkZW4oYnV0dGVyZmx5LT5hcnJheVN0b3Jh
Z2UoKS0+bV92ZWN0b3IsIGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPnZlY3Rvckxlbmd0aCgp
KTsKICAgICAgICAgaWYgKGJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1fc3BhcnNlTWFwKQog
ICAgICAgICAgICAgdmlzaXRvci5hcHBlbmQoJmJ1dHRlcmZseS0+YXJyYXlTdG9yYWdlKCktPm1f
c3BhcnNlTWFwKTsKICAgICAgICAgYnJlYWs7CkBAIC0yMTcsNyArMjE3LDcgQEAgdm9pZCBKU09i
amVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQog
CiAgICAgQnV0dGVyZmx5KiBidXR0ZXJmbHkgPSB0aGlzT2JqZWN0LT5tX2J1dHRlcmZseS5nZXRX
aXRob3V0QmFycmllcigpOwogICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNPYmplY3Qt
PnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJl
KHZpc2l0b3Iudm0oKSktPm91dE9mTGluZVNpemUoKSk7CisgICAgICAgIHRoaXNPYmplY3QtPnZp
c2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhpc09iamVjdC0+c3RydWN0dXJlKHZp
c2l0b3Iudm0oKSkpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHZpc2l0b3IubV9pc0No
ZWNraW5nRm9yRGVmYXVsdE1hcmtWaW9sYXRpb24gPSB3YXNDaGVja2luZ0ZvckRlZmF1bHRNYXJr
VmlvbGF0aW9uOwpAQCAtMjM3LDYgKzIzNyw0NCBAQCB2b2lkIEpTT2JqZWN0Ojpjb3B5QmFja2lu
Z1N0b3JlKEpTQ2VsbCogY2VsbCwgQ29weVZpc2l0b3ImIHZpc2l0b3IsIENvcHlUb2tlbiB0bwog
ICAgICAgICB0aGlzT2JqZWN0LT5jb3B5QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgdGhp
c09iamVjdC0+c3RydWN0dXJlKCktPm91dE9mTGluZVNpemUoKSk7CiB9CiAKK3ZvaWQgSlNPYmpl
Y3Q6OmhlYXBTbmFwc2hvdChKU0NlbGwqIGNlbGwsIEhlYXBTbmFwc2hvdEJ1aWxkZXImIGJ1aWxk
ZXIpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNPYmplY3QqPihjZWxs
KTsKKyAgICBCYXNlOjpoZWFwU25hcHNob3QoY2VsbCwgYnVpbGRlcik7CisKKyAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IHRoaXNPYmplY3QtPnN0cnVjdHVyZSgpOworICAgIGZvciAoYXV0byYg
ZW50cnkgOiBzdHJ1Y3R1cmUtPmdldFByb3BlcnRpZXNDb25jdXJyZW50bHkoKSkgeworICAgICAg
ICBKU1ZhbHVlIHRvVmFsdWUgPSB0aGlzT2JqZWN0LT5nZXREaXJlY3QoZW50cnkub2Zmc2V0KTsK
KyAgICAgICAgaWYgKHRvVmFsdWUgJiYgdG9WYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kUHJvcGVydHlOYW1lRWRnZSh0aGlzT2JqZWN0LCB0b1ZhbHVlLmFzQ2VsbCgp
LCBlbnRyeS5rZXkpOworICAgIH0KKworICAgIEJ1dHRlcmZseSogYnV0dGVyZmx5ID0gdGhpc09i
amVjdC0+bV9idXR0ZXJmbHkuZ2V0V2l0aG91dEJhcnJpZXIoKTsKKyAgICBpZiAoYnV0dGVyZmx5
KSB7CisgICAgICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogZGF0YTsKKyAgICAgICAgdWludDMy
X3QgY291bnQgPSAwOworCisgICAgICAgIHN3aXRjaCAodGhpc09iamVjdC0+aW5kZXhpbmdUeXBl
KCkpIHsKKyAgICAgICAgY2FzZSBBTExfQ09OVElHVU9VU19JTkRFWElOR19UWVBFUzoKKyAgICAg
ICAgICAgIGRhdGEgPSBidXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5kYXRhKCk7CisgICAgICAgICAg
ICBjb3VudCA9IGJ1dHRlcmZseS0+cHVibGljTGVuZ3RoKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBTExfQVJSQVlfU1RPUkFHRV9JTkRFWElOR19UWVBFUzoKKyAgICAgICAg
ICAgIGRhdGEgPSBidXR0ZXJmbHktPmFycmF5U3RvcmFnZSgpLT5tX3ZlY3RvcjsKKyAgICAgICAg
ICAgIGNvdW50ID0gYnV0dGVyZmx5LT5hcnJheVN0b3JhZ2UoKS0+dmVjdG9yTGVuZ3RoKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGNvdW50OyArK2kp
IHsKKyAgICAgICAgICAgIEpTVmFsdWUgdG9WYWx1ZSA9IGRhdGFbaV0uZ2V0KCk7CisgICAgICAg
ICAgICBpZiAodG9WYWx1ZSAmJiB0b1ZhbHVlLmlzQ2VsbCgpKQorICAgICAgICAgICAgICAgIGJ1
aWxkZXIuYXBwZW5kSW5kZXhFZGdlKHRoaXNPYmplY3QsIHRvVmFsdWUuYXNDZWxsKCksIGkpOwor
ICAgICAgICB9CisgICAgfQorfQorCiB2b2lkIEpTRmluYWxPYmplY3Q6OnZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0ZpbmFsT2JqZWN0
KiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTRmluYWxPYmplY3QqPihjZWxsKTsKQEAgLTI0OCwxMyAr
Mjg2LDEzIEBAIHZvaWQgSlNGaW5hbE9iamVjdDo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGws
IFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIAogICAgIEpTQ2VsbDo6dmlzaXRDaGlsZHJlbih0
aGlzT2JqZWN0LCB2aXNpdG9yKTsKIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gdGhpc09i
amVjdC0+c3RydWN0dXJlKCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSB0aGlzT2JqZWN0
LT5zdHJ1Y3R1cmUodmlzaXRvci52bSgpKTsKICAgICBCdXR0ZXJmbHkqIGJ1dHRlcmZseSA9IHRo
aXNPYmplY3QtPmJ1dHRlcmZseSgpOwogICAgIGlmIChidXR0ZXJmbHkpCi0gICAgICAgIHRoaXNP
YmplY3QtPnZpc2l0QnV0dGVyZmx5KHZpc2l0b3IsIGJ1dHRlcmZseSwgc3RydWN0dXJlLT5vdXRP
ZkxpbmVTaXplKCkpOworICAgICAgICB0aGlzT2JqZWN0LT52aXNpdEJ1dHRlcmZseSh2aXNpdG9y
LCBidXR0ZXJmbHksIHN0cnVjdHVyZSk7CiAKICAgICBzaXplX3Qgc3RvcmFnZVNpemUgPSBzdHJ1
Y3R1cmUtPmlubGluZVNpemUoKTsKLSAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0
LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
c0hpZGRlbih0aGlzT2JqZWN0LT5pbmxpbmVTdG9yYWdlKCksIHN0b3JhZ2VTaXplKTsKIAogI2lm
ICFBU1NFUlRfRElTQUJMRUQKICAgICB2aXNpdG9yLm1faXNDaGVja2luZ0ZvckRlZmF1bHRNYXJr
VmlvbGF0aW9uID0gd2FzQ2hlY2tpbmdGb3JEZWZhdWx0TWFya1Zpb2xhdGlvbjsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCmluZGV4IDIyNjI4ZTAuLmE1M2ZmMGZiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgKQEAgLTk5LDYgKzk5LDcg
QEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBzaXplX3QgZXN0aW1hdGVk
U2l6ZShKU0NlbGwqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENo
aWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3Rh
dGljIHZvaWQgY29weUJhY2tpbmdTdG9yZShKU0NlbGwqLCBDb3B5VmlzaXRvciYsIENvcHlUb2tl
bik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgaGVhcFNuYXBzaG90KEpTQ2Vs
bCosIEhlYXBTbmFwc2hvdEJ1aWxkZXImKTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBTdHJpbmcgY2xhc3NOYW1lKGNvbnN0IEpTT2JqZWN0Kik7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFN0cmluZyBjYWxjdWxhdGVkQ2xhc3NOYW1lKEpTT2JqZWN0Kik7CkBAIC03NzMs
NyArNzc0LDcgQEAgcHJvdGVjdGVkOgogICAgIC8vIFRvIGNyZWF0ZSBkZXJpdmVkIHR5cGVzIHlv
dSBsaWtlbHkgd2FudCBKU05vbkZpbmFsT2JqZWN0LCBiZWxvdy4KICAgICBKU09iamVjdChWTSYs
IFN0cnVjdHVyZSosIEJ1dHRlcmZseSogPSAwKTsKICAgICAgICAgCi0gICAgdm9pZCB2aXNpdEJ1
dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIHNpemVfdCBzdG9yYWdlU2l6ZSk7Cisg
ICAgdm9pZCB2aXNpdEJ1dHRlcmZseShTbG90VmlzaXRvciYsIEJ1dHRlcmZseSosIFN0cnVjdHVy
ZSopOwogICAgIHZvaWQgY29weUJ1dHRlcmZseShDb3B5VmlzaXRvciYsIEJ1dHRlcmZseSosIHNp
emVfdCBzdG9yYWdlU2l6ZSk7CiAKICAgICAvLyBDYWxsIHRoaXMgaWYgeW91IGtub3cgdGhhdCB0
aGUgb2JqZWN0IGlzIGluIGEgbW9kZSB3aGVyZSBpdCBoYXMgYXJyYXkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVj
dC5jcHAKaW5kZXggMTVmMTlmNS4uOWQ1YmRmNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAKQEAg
LTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJKU1NlZ21lbnRl
ZFZhcmlhYmxlT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJIZWFwU25hcHNob3RCdWlsZGVyLmgiCiAj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTYzLDEwICs2NCwz
MCBAQCB2b2lkIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3Q6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiBjZWxsLCBTbG90VmlzaXRvciYgc2xvdFZpcwogewogICAgIEpTU2VnbWVudGVkVmFyaWFibGVP
YmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNl
bGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LSAgICBKU1N5bWJvbFRhYmxlT2JqZWN0Ojp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHNsb3RW
aXNpdG9yKTsKKyAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHNsb3RWaXNpdG9y
KTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSB0aGlzT2JqZWN0LT5tX3ZhcmlhYmxlcy5z
aXplKCk7IGktLTspCi0gICAgICAgIHNsb3RWaXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV92
YXJpYWJsZXNbaV0pOworICAgICAgICBzbG90VmlzaXRvci5hcHBlbmRIaWRkZW4oJnRoaXNPYmpl
Y3QtPm1fdmFyaWFibGVzW2ldKTsKK30KKwordm9pZCBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0
OjpoZWFwU25hcHNob3QoSlNDZWxsKiBjZWxsLCBIZWFwU25hcHNob3RCdWlsZGVyJiBidWlsZGVy
KQoreworICAgIEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdCo+KGNlbGwpOworICAgIEJhc2U6OmhlYXBTbmFwc2hv
dChjZWxsLCBidWlsZGVyKTsKKworICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNP
YmplY3QtPnN5bWJvbFRhYmxlKCktPm1fbG9jayk7CisgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRl
cmF0b3IgZW5kID0gdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+ZW5kKGxvY2tlcik7CisgICAg
Zm9yIChTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdCA9IHRoaXNPYmplY3QtPnN5bWJvbFRh
YmxlKCktPmJlZ2luKGxvY2tlcik7IGl0ICE9IGVuZDsgKytpdCkgeworICAgICAgICBTeW1ib2xU
YWJsZUVudHJ5OjpGYXN0IGVudHJ5ID0gaXQtPnZhbHVlOworICAgICAgICBBU1NFUlQoIWVudHJ5
LmlzTnVsbCgpKTsKKyAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZz
ZXQoKTsKKyAgICAgICAgaWYgKCF0aGlzT2JqZWN0LT5pc1ZhbGlkU2NvcGVPZmZzZXQob2Zmc2V0
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIEpTVmFsdWUgdG9WYWx1ZSA9IHRo
aXNPYmplY3QtPnZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKTsKKyAgICAgICAgaWYgKHRvVmFsdWUg
JiYgdG9WYWx1ZS5pc0NlbGwoKSkKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kVmFyaWFibGVO
YW1lRWRnZSh0aGlzT2JqZWN0LCB0b1ZhbHVlLmFzQ2VsbCgpLCBpdC0+a2V5LmdldCgpKTsKKyAg
ICB9CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCmluZGV4IDQ3NmMy
ODguLjRiMDZiYmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKQEAgLTg1LDYgKzg1LDcgQEAgcHVibGlj
OgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFNjb3BlT2Zmc2V0IGFkZFZhcmlhYmxlcyh1bnNpZ25l
ZCBudW1iZXJPZlZhcmlhYmxlc1RvQWRkLCBKU1ZhbHVlKTsKICAgICAKICAgICBKU19FWFBPUlRf
UFJJVkFURSBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgaGVhcFNuYXBzaG90KEpTQ2VsbCos
IEhlYXBTbmFwc2hvdEJ1aWxkZXImKTsKIAogcHJvdGVjdGVkOgogICAgIEpTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNTY29wZSogc2NvcGUp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAppbmRleCA4YTAz
MWFhLi43MjQ4NjRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAKQEAgLTExMTYsNyArMTExNiw5IEBAIHZvaWQgU3RydWN0dXJlOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiAgICAgaWYgKHRoaXNPYmplY3Qt
PmlzUGlubmVkUHJvcGVydHlUYWJsZSgpKSB7CiAgICAgICAgIEFTU0VSVCh0aGlzT2JqZWN0LT5t
X3Byb3BlcnR5VGFibGVVbnNhZmUpOwogICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9wcm9wZXJ0eVRhYmxlVW5zYWZlKTsKLSAgICB9IGVsc2UgaWYgKHRoaXNPYmplY3QtPm1f
cHJvcGVydHlUYWJsZVVuc2FmZSkKKyAgICB9IGVsc2UgaWYgKHZpc2l0b3IuaXNCdWlsZGluZ0hl
YXBTbmFwc2hvdCgpKQorICAgICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9wcm9w
ZXJ0eVRhYmxlVW5zYWZlKTsKKyAgICBlbHNlIGlmICh0aGlzT2JqZWN0LT5tX3Byb3BlcnR5VGFi
bGVVbnNhZmUpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fcHJvcGVydHlUYWJsZVVuc2FmZS5jbGVh
cigpOwogCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faW5mZXJyZWRUeXBlVGFi
bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuaAppbmRleCA1NDM0
ODg4Li5jNDNkZTRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUu
aApAQCAtNzE2LDYgKzcxNiw3IEBAIHByaXZhdGU6CiAgICAgU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlIG1fdHJhbnNpdGlvblRhYmxlOwogCiAgICAgLy8gU2hvdWxkIGJlIGFjY2Vzc2VkIHRocm91
Z2ggcHJvcGVydHlUYWJsZSgpLiBEdXJpbmcgR0MsIGl0IG1heSBiZSBzZXQgdG8gMCBieSBhbm90
aGVyIHRocmVhZC4KKyAgICAvLyBEdXJpbmcgYSBIZWFwIFNuYXBzaG90IEdDIHdlIGF2b2lkIGNs
ZWFyaW5nIHRoZSB0YWJsZSBzbyBpdCBpcyBzYWZlIHRvIHVzZS4KICAgICBXcml0ZUJhcnJpZXI8
UHJvcGVydHlUYWJsZT4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogCiAgICAgV3JpdGVCYXJyaWVy
PEluZmVycmVkVHlwZVRhYmxlPiBtX2luZmVycmVkVHlwZVRhYmxlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCmluZGV4IDIxYmNhYTUuLmE1
ZTRiYjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZUlubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmgKQEAgLTI0Miw3ICsyNDIsNyBAQCBpbmxpbmUgYm9vbCBTdHJ1Y3R1cmU6OnB1dFdp
bGxHcm93T3V0T2ZMaW5lU3RvcmFnZSgpCiAKIEFMV0FZU19JTkxJTkUgV3JpdGVCYXJyaWVyPFBy
b3BlcnR5VGFibGU+JiBTdHJ1Y3R1cmU6OnByb3BlcnR5VGFibGUoKQogewotICAgIEFTU0VSVCgh
Z2xvYmFsT2JqZWN0KCkgfHwgIWdsb2JhbE9iamVjdCgpLT52bSgpLmhlYXAuaXNDb2xsZWN0aW5n
KCkpOworICAgIEFTU0VSVCghZ2xvYmFsT2JqZWN0KCkgfHwgKCFnbG9iYWxPYmplY3QoKS0+dm0o
KS5oZWFwLmlzQ29sbGVjdGluZygpIHx8IGdsb2JhbE9iamVjdCgpLT52bSgpLmhlYXAuaXNIZWFw
U25hcHNob3R0aW5nKCkpKTsKICAgICByZXR1cm4gbV9wcm9wZXJ0eVRhYmxlVW5zYWZlOwogfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVyL2Ry
aXZlci9kcml2ZXIuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvaGVhcFByb2ZpbGVy
L2RyaXZlci9kcml2ZXIuanMKaW5kZXggZDA2Y2E4Mi4uODJmODBmMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9kcml2ZXIvZHJpdmVyLmpzCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvZHJpdmVyL2RyaXZl
ci5qcwpAQCAtMjQwLDMgKzI0MCwxNyBAQCBmdW5jdGlvbiBjcmVhdGVIZWFwU25hcHNob3QoKSB7
CiAKICAgICByZXR1cm4gbmV3IEhlYXBTbmFwc2hvdChqc29uKTsKIH0KKworZnVuY3Rpb24gZm9s
bG93UGF0aChub2RlLCBwYXRoKSB7CisgICAgbGV0IGN1cnJlbnQgPSBub2RlOworICAgIGZvciAo
bGV0IGNvbXBvbmVudCBvZiBwYXRoKSB7CisgICAgICAgIGxldCBlZGdlcyA9IG51bGw7CisgICAg
ICAgIGlmIChjb21wb25lbnQuZWRnZSkKKyAgICAgICAgICAgIGVkZ2VzID0gY3VycmVudC5vdXRn
b2luZ0VkZ2VzLmZpbHRlcigoZSkgPT4gZS5kYXRhID09PSBjb21wb25lbnQuZWRnZSk7CisgICAg
ICAgIGVsc2UgaWYgKGNvbXBvbmVudC5ub2RlKQorICAgICAgICAgICAgZWRnZXMgPSBjdXJyZW50
Lm91dGdvaW5nRWRnZXMuZmlsdGVyKChlKSA9PiBlLnRvLmNsYXNzTmFtZSA9PT0gY29tcG9uZW50
Lm5vZGUpOworICAgICAgICBhc3NlcnQoZWRnZXMubGVuZ3RoID09PSAxLCAiQW1iaWd1b3VzIG9y
IGJhZCBwYXRoIGNvbXBvbmVudDogIiArIEpTT04uc3RyaW5naWZ5KGNvbXBvbmVudCkpOworICAg
ICAgICBjdXJyZW50ID0gZWRnZXNbMF0udG87CisgICAgfQorICAgIHJldHVybiBjdXJyZW50Owor
fQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9maWxlci9w
cm9wZXJ0eS1lZGdlLXR5cGVzLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQ
cm9maWxlci9wcm9wZXJ0eS1lZGdlLXR5cGVzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmE5YmFmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvaGVhcFByb2ZpbGVyL3Byb3BlcnR5LWVkZ2UtdHlwZXMuanMKQEAgLTAsMCArMSw5
OCBAQAorbG9hZCgiLi9kcml2ZXIvZHJpdmVyLmpzIik7CisKK2xldCBzaW1wbGVPYmplY3QgPSBu
ZXcgU2ltcGxlT2JqZWN0Oworc2V0SGlkZGVuVmFsdWUoc2ltcGxlT2JqZWN0LCAiaGlkZGVuVmFs
dWUiKTsgLy8gSW50ZXJuYWwKK3NpbXBsZU9iamVjdC5wcm9wZXJ0eU5hbWUxID0gInByb3BlcnR5
VmFsdWUxIjsgLy8gUHJvcGVydHkKK3NpbXBsZU9iamVjdFsicHJvcGVydHlOYW1lMiJdID0gInBy
b3BlcnR5VmFsdWUyIjsgLy8gUHJvcGVydHkKK3NpbXBsZU9iamVjdFsxMDBdID0gImluZGV4ZWRW
YWx1ZSI7IC8vIEluZGV4CitzaW1wbGVPYmplY3RbMHhmZmZmZmZmZiArIDEwMF0gPSAibGFyZ2VJ
bmRleFZhbHVlQmVjb21pbmdQcm9wZXJ0eSI7IC8vIFByb3BlcnR5CitzaW1wbGVPYmplY3QucG9p
bnQgPSB7eDoieDEiLCB5OiJ5MSJ9OyAvLyBQcm9wZXJ0eSA9PiBvYmplY3Qgd2l0aCAyIGlubGlu
ZSBwcm9wZXJ0aWVzLgorCisvLyAtLS0tLS0tLS0tCisKK2Z1bmN0aW9uIGV4Y2x1ZGVTdHJ1Y3R1
cmUoZWRnZXMpIHsKKyAgICByZXR1cm4gZWRnZXMuZmlsdGVyKCh4KSA9PiB4LnRvLmNsYXNzTmFt
ZSAhPT0gIlN0cnVjdHVyZSIpOworfQorCitsZXQgc25hcHNob3QgPSBjcmVhdGVIZWFwU25hcHNo
b3QoKTsKKworLy8gSW50ZXJuYWwsIFByb3BlcnR5LCBhbmQgSW5kZXggZWRnZXMgb24gYW4gT2Jq
ZWN0LgorbGV0IG5vZGVzID0gc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJTaW1wbGVPYmpl
Y3QiKTsKK2Fzc2VydChub2Rlcy5sZW5ndGggPT09IDEsICJTbmFwc2hvdCBzaG91bGQgY29udGFp
biAxICdTaW1wbGVPYmplY3QnIGluc3RhbmNlIik7CitsZXQgc2ltcGxlT2JqZWN0Tm9kZSA9IG5v
ZGVzWzBdOworbGV0IGVkZ2VzID0gZXhjbHVkZVN0cnVjdHVyZShzaW1wbGVPYmplY3ROb2RlLm91
dGdvaW5nRWRnZXMpOworbGV0IHBvaW50Tm9kZSA9IG51bGw7CisKK2xldCBzZWVuSGlkZGVuVmFs
dWUgPSBmYWxzZTsKK2xldCBzZWVuUHJvcGVydHlOYW1lMSA9IGZhbHNlOworbGV0IHNlZW5Qcm9w
ZXJ0eU5hbWUyID0gZmFsc2U7CitsZXQgc2VlbkluZGV4MTAwID0gZmFsc2U7CitsZXQgc2Vlbkxh
cmdlSW5kZXggPSBmYWxzZTsKK2xldCBzZWVuT2JqZWN0V2l0aElubGluZVN0b3JhZ2UgPSBmYWxz
ZTsKK2xldCBsYXJnZUluZGV4TmFtZSA9ICgweGZmZmZmZmZmICsgMTAwKS50b1N0cmluZygpOwor
Citmb3IgKGxldCBlZGdlIG9mIGVkZ2VzKSB7CisgICAgc3dpdGNoIChlZGdlLnR5cGUpIHsKKyAg
ICBjYXNlICJJbnRlcm5hbCI6CisgICAgICAgIGFzc2VydCghc2VlbkhpZGRlblZhbHVlKTsKKyAg
ICAgICAgc2VlbkhpZGRlblZhbHVlID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAi
UHJvcGVydHkiOgorICAgICAgICBpZiAoZWRnZS5kYXRhID09PSAicHJvcGVydHlOYW1lMSIpCisg
ICAgICAgICAgICBzZWVuUHJvcGVydHlOYW1lMSA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGVk
Z2UuZGF0YSA9PT0gInByb3BlcnR5TmFtZTIiKQorICAgICAgICAgICAgc2VlblByb3BlcnR5TmFt
ZTIgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChlZGdlLmRhdGEgPT09IGxhcmdlSW5kZXhOYW1l
KQorICAgICAgICAgICAgc2VlbkxhcmdlSW5kZXggPSB0cnVlOworICAgICAgICBlbHNlIGlmIChl
ZGdlLmRhdGEgPT09ICJwb2ludCIpIHsKKyAgICAgICAgICAgIHNlZW5Qb2ludCA9IHRydWU7Cisg
ICAgICAgICAgICBwb2ludE5vZGUgPSBlZGdlLnRvOworICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgIGFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgcHJvcGVydHkgbmFtZSIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlICJJbmRleCI6CisgICAgICAgIGlmIChlZGdlLmRhdGEgPT09IDEwMCkK
KyAgICAgICAgICAgIHNlZW5JbmRleDEwMCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgIlZhcmlhYmxlIjoKKyAgICAgICAgYXNzZXJ0KGZhbHNlLCAiU2hvdWxkIG5vdCBzZWUgYSB2
YXJpYWJsZSBlZGdlIGZvciBTaW1wbGVPYmplY3QgaW5zdGFuY2UiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYXNzZXJ0KGZhbHNlLCAiVW5leHBlY3RlZCBlZGdlIHR5
cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCithc3NlcnQoc2VlbkhpZGRlblZhbHVl
LCAiU2hvdWxkIHNlZSBJbnRlcm5hbCBlZGdlIGZvciBoaWRkZW4gdmFsdWUiKTsKK2Fzc2VydChz
ZWVuUHJvcGVydHlOYW1lMSwgIlNob3VsZCBzZWUgUHJvcGVydHkgZWRnZSBmb3IgcHJvcGVydHlO
YW1lMSIpOworYXNzZXJ0KHNlZW5Qcm9wZXJ0eU5hbWUyLCAiU2hvdWxkIHNlZSBQcm9wZXJ0eSBl
ZGdlIGZvciBwcm9wZXJ0eU5hbWUyIik7Cithc3NlcnQoc2VlbkluZGV4MTAwLCAiU2hvdWxkIHNl
ZSBJbmRleCBlZGdlIGZvciBpbmRleCAxMDAiKTsKK2Fzc2VydChzZWVuTGFyZ2VJbmRleCwgIlNo
b3VsZCBzZWUgUHJvcGVydHkgZWRnZSBmb3IgaW5kZXggIiArIGxhcmdlSW5kZXhOYW1lKTsKKwor
CisvLyBQcm9wZXJ0eSBvbiBhbiBPYmplY3QncyBpbmxpbmUgc3RvcmFnZS4KK2xldCBwb2ludEVk
Z2VzID0gZXhjbHVkZVN0cnVjdHVyZShwb2ludE5vZGUub3V0Z29pbmdFZGdlcyk7CisKK2xldCBz
ZWVuUHJvcGVydHlYID0gZmFsc2U7CitsZXQgc2VlblByb3BlcnR5WSA9IGZhbHNlOworCitmb3Ig
KGxldCBlZGdlIG9mIHBvaW50RWRnZXMpIHsKKyAgICBzd2l0Y2ggKGVkZ2UudHlwZSkgeworICAg
IGNhc2UgIlByb3BlcnR5IjoKKyAgICAgICAgaWYgKGVkZ2UuZGF0YSA9PT0gIngiKQorICAgICAg
ICAgICAgc2VlblByb3BlcnR5WCA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGVkZ2UuZGF0YSA9
PT0gInkiKQorICAgICAgICAgICAgc2VlblByb3BlcnR5WSA9IHRydWU7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgcHJvcGVydHkgbmFtZSIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlICJJbmRleCI6CisgICAgY2FzZSAiVmFyaWFibGUiOgor
ICAgIGNhc2UgIkludGVybmFsIjoKKyAgICAgICAgYXNzZXJ0KGZhbHNlLCAiVW5leHBlY3RlZCBl
ZGdlIHR5cGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCithc3NlcnQoc2VlblByb3Bl
cnR5WCwgIlNob3VsZCBzZWUgUHJvcGVydHkgZWRnZSBmb3IgeCIpOworYXNzZXJ0KHNlZW5Qcm9w
ZXJ0eVksICJTaG91bGQgc2VlIFByb3BlcnR5IGVkZ2UgZm9yIHkiKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvdmFyaWFibGUtZWRnZS10eXBl
cy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9oZWFwUHJvZmlsZXIvdmFyaWFibGUt
ZWRnZS10eXBlcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmE2NzVl
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL2hlYXBQcm9m
aWxlci92YXJpYWJsZS1lZGdlLXR5cGVzLmpzCkBAIC0wLDAgKzEsNjkgQEAKK2xvYWQoIi4vZHJp
dmVyL2RyaXZlci5qcyIpOworCitsZXQgZ2xvYmFsU2NvcGVWYXJpYWJsZSA9ICJnbG9iYWxTY29w
ZVZhcmlhYmxlVmFsdWUiOworbGV0IHNpbXBsZU9iamVjdCA9IG5ldyBTaW1wbGVPYmplY3Q7CisK
KyhmdW5jdGlvbigpIHsKKyAgICBsZXQgY2xvc3VyZVZhcmlhYmxlID0ge307CisgICAgc2ltcGxl
T2JqZWN0LmYgPSBmdW5jdGlvbigpIHsgY2xvc3VyZVZhcmlhYmxlLnggPSAwOyB9Cit9KSgpOwor
CisvLyAtLS0tLS0tLS0tCisKK2xldCBzbmFwc2hvdCA9IGNyZWF0ZUhlYXBTbmFwc2hvdCgpOwor
CisvLyBHbG9iYWwgU2NvcGUgPT4gImdsb2JhbFNjb3BlVmFyaWFibGUiCitsZXQgbm9kZXMgPSBz
bmFwc2hvdC5ub2Rlc1dpdGhDbGFzc05hbWUoIkpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50Iik7
Cithc3NlcnQobm9kZXMubGVuZ3RoID09PSAxLCAiU2hvdWxkIGJlIG9ubHkgMSAnSlNHbG9iYWxM
ZXhpY2FsRW52aXJvbm1lbnQnIGluc3RhbmNlIik7CitsZXQgZ2xvYmFsU2NvcGVOb2RlID0gbm9k
ZXNbMF07CisKK2xldCBzZWVuR2xvYmFsU2NvcGVWYXJpYWJsZSA9IGZhbHNlOworbGV0IHNlZW5T
aW1wbGVPYmplY3RWYXJpYWJsZSA9IGZhbHNlOworCitmb3IgKGxldCBlZGdlIG9mIGdsb2JhbFNj
b3BlTm9kZS5vdXRnb2luZ0VkZ2VzKSB7CisgICAgc3dpdGNoIChlZGdlLnR5cGUpIHsKKyAgICBj
YXNlICJWYXJpYWJsZSI6CisgICAgICAgIGlmIChlZGdlLmRhdGEgPT09ICJnbG9iYWxTY29wZVZh
cmlhYmxlIikKKyAgICAgICAgICAgIHNlZW5HbG9iYWxTY29wZVZhcmlhYmxlID0gdHJ1ZTsKKyAg
ICAgICAgZWxzZSBpZiAoZWRnZS5kYXRhID09PSAic2ltcGxlT2JqZWN0IikKKyAgICAgICAgICAg
IHNlZW5TaW1wbGVPYmplY3RWYXJpYWJsZSA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgdmFyaWFibGUgbmFtZTogIiArIGVkZ2UuZGF0
YSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgIkluZGV4IjoKKyAgICBjYXNlICJQcm9wZXJ0
eSI6CisgICAgICAgIGFzc2VydChmYWxzZSwgIlVuZXhwZWN0ZWQgZWRnZSB0eXBlIik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgIkludGVybmFsIjoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
fQorCithc3NlcnQoc2Vlbkdsb2JhbFNjb3BlVmFyaWFibGUsICJTaG91bGQgc2VlIFZhcmlhYmxl
IGVkZ2UgZm9yIHZhcmlhYmxlICdnbG9iYWxTY29wZVZhcmlhYmxlJyIpOworYXNzZXJ0KHNlZW5T
aW1wbGVPYmplY3RWYXJpYWJsZSwgIlNob3VsZCBzZWUgVmFyaWFibGUgZWRnZSBmb3IgdmFyaWFi
bGUgJ3NpbXBsZU9iamVjdCciKTsKKworLy8gRnVuY3Rpb24gU2NvcGUgPT4gImNsb3N1cmVWYXJp
YWJsZSIKK25vZGVzID0gc25hcHNob3Qubm9kZXNXaXRoQ2xhc3NOYW1lKCJTaW1wbGVPYmplY3Qi
KTsKK2Fzc2VydChub2Rlcy5sZW5ndGggPT09IDEsICJTaG91bGQgYmUgb25seSAxICdTaW1wbGVP
YmplY3QnIGluc3RhbmNlIik7CitsZXQgc2NvcGVOb2RlID0gZm9sbG93UGF0aChub2Rlc1swXSwg
W3tlZGdlOiAiZiJ9LCB7bm9kZTogIkpTTGV4aWNhbEVudmlyb25tZW50In1dKTsKKworbGV0IHNl
ZW5DbG9zdXJlVmFyaWFibGUgPSBmYWxzZTsKKworZm9yIChsZXQgZWRnZSBvZiBzY29wZU5vZGUu
b3V0Z29pbmdFZGdlcykgeworICAgIHN3aXRjaCAoZWRnZS50eXBlKSB7CisgICAgY2FzZSAiVmFy
aWFibGUiOgorICAgICAgICBpZiAoZWRnZS5kYXRhID09PSAiY2xvc3VyZVZhcmlhYmxlIikKKyAg
ICAgICAgICAgIHNlZW5DbG9zdXJlVmFyaWFibGUgPSB0cnVlOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBhc3NlcnQoZmFsc2UsICJVbmV4cGVjdGVkIHZhcmlhYmxlIG5hbWU6ICIgKyBlZGdl
LmRhdGEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICJJbmRleCI6CisgICAgY2FzZSAiUHJv
cGVydHkiOgorICAgICAgICBhc3NlcnQoZmFsc2UsICJVbmV4cGVjdGVkIGVkZ2UgdHlwZSIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlICJJbnRlcm5hbCI6CisgICAgICAgIGJyZWFrOworICAg
IH0KK30KKworYXNzZXJ0KHNlZW5DbG9zdXJlVmFyaWFibGUsICJTaG91bGQgc2VlIFZhcmlhYmxl
IGVkZ2UgZm9yIGNsb3N1cmUgdmFyaWFibGUgJ2Nsb3N1cmVWYXJpYWJsZSciKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>